Свой репозиторий — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Настройка HTTP-клиента)
(Через графический интерфейс)
 
(не показано 10 промежуточных версий 4 участников)
Строка 1: Строка 1:
= Введение и терминология =
+
== Введение и терминология ==
  
Эта статья описывает создание своего репозитория пакетов для операционных систем ROSA Fresh/Chrome версии 12 и новее, а также Nickel, Cobalt и ROSA Virtualization.
+
{{Введение|Эта статья описывает создание своего репозитория пакетов для операционных систем ROSA Fresh/Chrome версии {{Версия|12 и новее.}}}}
  
 
Репозиторий пакетов — хранилище RPM-файлов с дополнительными файлами-метаданными.
 
Репозиторий пакетов — хранилище RPM-файлов с дополнительными файлами-метаданными.
Строка 10: Строка 10:
 
* создания зеркала (точной копии) официальных репозиториев внутри локальной сети предприятия.
 
* создания зеркала (точной копии) официальных репозиториев внутри локальной сети предприятия.
  
Приведенные команды следует выполнять от непривилегированного пользователя (не root); команды, которые необходимо выполнять с правами root, написаны через sudo.
+
{{Простое примечание|Приведенные команды следует выполнять от непривилегированного пользователя (не root); команды, которые необходимо выполнять с правами root, написаны через sudo.}}
  
 
Подразумевается, что сервером, на котором размещается репозиторий, является система на базе ROSA Fresh/Chrome 12 (rosa2021.1) и новее, однако его можно разместить и на других ОС.
 
Подразумевается, что сервером, на котором размещается репозиторий, является система на базе ROSA Fresh/Chrome 12 (rosa2021.1) и новее, однако его можно разместить и на других ОС.
  
= Зеркалирование репозиториев =
+
== Зеркалирование репозиториев ==
  
 
Процесс зеркалирования представляет из себя создание и поддерживание в актуальном состоянии точной копии репозиториев, размещенных на официальных серверах ROSA. В данном разделе описано, как сделать такую копию репозитория. Приведен наиболее простой способ, не обеспечивающий консистентность зеркала для внешнего потребителя в момент его обновления.
 
Процесс зеркалирования представляет из себя создание и поддерживание в актуальном состоянии точной копии репозиториев, размещенных на официальных серверах ROSA. В данном разделе описано, как сделать такую копию репозитория. Приведен наиболее простой способ, не обеспечивающий консистентность зеркала для внешнего потребителя в момент его обновления.
  
Для зеркалирования предлагается использовать утилиту rsync. Если она не установлена, выполните:
+
Для зеркалирования предлагается использовать утилиту {{Pkg|rsync}}. Если она не установлена, выполните:
 
  sudo dnf install rsync
 
  sudo dnf install rsync
  
Строка 35: Строка 35:
 
</pre>
 
</pre>
  
= Создание своего репозитория =
+
Создание регулярно выполняемой задачи описано в [[Timer|соответствующем разделе]].
  
 +
== Создание своего репозитория ==
 +
 +
=== Консольно ===
 
Если имеются сторонние RPM-пакеты, то из них можно сделать репозиторий. Необходимо установить утилиту для создания метаданных репозитория:
 
Если имеются сторонние RPM-пакеты, то из них можно сделать репозиторий. Необходимо установить утилиту для создания метаданных репозитория:
 
  sudo dnf install createrepo_c
 
  sudo dnf install createrepo_c
Строка 43: Строка 46:
 
  sudo mkdir -p /srv/repo/x86_64
 
  sudo mkdir -p /srv/repo/x86_64
  
Положите RPM-пакеты в каталог /srv/repo/x86_64.
+
Положите RPM-пакеты в каталог {{Источник|/srv/repo/x86_64}}.
  
 
Создайте/обновите метаданные репозитория:
 
Создайте/обновите метаданные репозитория:
Строка 53: Строка 56:
 
  dnf --repofrompath local,/srv/repo/x86_64 --disablerepo '*' --enablerepo local list
 
  dnf --repofrompath local,/srv/repo/x86_64 --disablerepo '*' --enablerepo local list
  
= Доступ к репозиторию по сети =
+
Для проверки замкнутости репозитория по зависимостям запустите:
 +
dnf --repofrompath local,/srv/repo/x86_64 repoclosure --check local
 +
 
 +
=== Через графический интерфейс ===
 +
Пакет с графической программой для создания своего репозитория называется '''repocreator''', его можно установить через графическую программу «Пакеты» (dnfdragora) или командой:
 +
sudo dnf install repocreator
 +
 
 +
[[File:2024-06-05_02-52.png]]
 +
 
 +
[[File:2024-06-05_02-52_1.png]]
 +
 
 +
== Локальный репозиторий ==
 +
 
 +
Подключить каталог с репозиторием можно локально. Для этого создайте в папке /etc/yum.repos.d/ файл аналогичный тем что там уже имеются.
 +
Приведите строку с baseurl к такому виду:
 +
 
 +
    baseurl=/home/user/my-repo
 +
 
 +
Должно получиться что-то вроде:
 +
   
 +
    [myrepo]
 +
    name=My repo
 +
    baseurl=/path/to/my/repo
 +
    gpgcheck=0
 +
    enabled=1
 +
 
 +
== Доступ к репозиторию по сети ==
  
 
Рассмотрим несколько способов сделать удаленный доступ к репозиторию по сети.
 
Рассмотрим несколько способов сделать удаленный доступ к репозиторию по сети.
  
== Доступ к репозиторию по HTTP ==
+
=== Доступ к репозиторию по HTTP ===
  
=== Настройка HTTP-сервера ===
+
==== Настройка HTTP-сервера ====
  
Для доступа к репозиторию по сети достаточно запустить любой веб-сервер, умеющий отдавать статические файлы. В качестве примера приведем настройку nginx.
+
Для доступа к репозиторию по сети достаточно запустить любой веб-сервер, умеющий отдавать статические файлы. В качестве примера приведем настройку {{Pkg|angie}} (наследник nginx).
  
Установите веб-сервер nginx:
+
Установите веб-сервер angie:
  sudo dnf install nginx
+
  sudo dnf install angie
  
 
Откройте конфигурационный файл на редактирование:
 
Откройте конфигурационный файл на редактирование:
  sudo nano /etc/nginx/nginx.conf
+
  sudo nano /etc/angie/angie.conf
  
 
Приведете его к необходимому виду. Ниже приведен минимальный пример на основе конфигурационного файла по умолчанию.
 
Приведете его к необходимому виду. Ниже приведен минимальный пример на основе конфигурационного файла по умолчанию.
Строка 97: Строка 126:
 
Для выхода из консольного редактора nano нажмите Ctrl+X, Enter, Ctrl+O.
 
Для выхода из консольного редактора nano нажмите Ctrl+X, Enter, Ctrl+O.
  
Запустите nginx и добавьте его в автозапуска:
+
Подробнее про настройку angie можно прочитать в [https://angie.software/configuration/ документации].
  sudo systemctl enable --now nginx
+
 
 +
Запустите {{Pkg|angie}} и добавьте его в автозапуск:
 +
  sudo systemctl enable --now angie
  
 
Попробуйте зайти по адресу http://localhost:80 (или иной IP-адрес), должно отобразиться содержимое каталога /srv, ниже приведен скриншот-пример.
 
Попробуйте зайти по адресу http://localhost:80 (или иной IP-адрес), должно отобразиться содержимое каталога /srv, ниже приведен скриншот-пример.
  
[[File:Screenshot_20220628_193125.png||600px]]
+
[[File:Screenshot_20220628_193125.png||400px]]
 +
 
 +
==== Можно проще ====
 +
Если репозиторий не будет иметь особых нагрузок или нужен вам для тестирования, вместо полноценного веб сервера достаточно запустить в каталоге с репозиторием:
 +
 
 +
    python3 -m http.server
 +
или
 +
    python2 -m SimpleHTTPServer
 +
 
 +
По умолчанию такой сервер запускается с портом 8000, эту цифру необходимо добавить к адресу через двоеточие.
 +
    baseurl=http://192.168.1.100:8000
  
=== Настройка HTTP-клиента ===
+
==== Настройка HTTP-клиента ====
  
В файлах /etc/yum.repos.d/* пропишите свой сервер в строки baseurl. Пример:
+
В файлах {{Источник|/etc/yum.repos.d/*}} пропишите свой сервер в строки baseurl. Пример:
  
 
было:
 
было:
Строка 119: Строка 160:
 
  sudo dnf makecache
 
  sudo dnf makecache
  
== Доступ к репозиторию по NFS ==
+
=== Доступ к репозиторию по NFS ===
  
=== Настройка NFS-сервера ===
+
==== Настройка NFS-сервера ====
  
 
Установите пакет утилит для NFS:
 
Установите пакет утилит для NFS:
Строка 136: Строка 177:
 
Запустите и добавьте в автозапуск службу NFS-сервера:
 
Запустите и добавьте в автозапуск службу NFS-сервера:
 
  sudo systemctl enable --now nfs-server
 
  sudo systemctl enable --now nfs-server
+
 
=== Настройка NFS-клиента ===
+
==== Настройка NFS-клиента ====
  
 
Создайте каталог для монтирования NFS:
 
Создайте каталог для монтирования NFS:
 
  sudo mkdir -p /mnt/nfs
 
  sudo mkdir -p /mnt/nfs
  
Откройте на редактирование файл /etc/fstab:
+
Откройте на редактирование файл {{Источник|/etc/fstab}}:
 
  sudo nano /etc/fstab
 
  sudo nano /etc/fstab
 
Пропишите строку монтирования NFS-раздела:
 
Пропишите строку монтирования NFS-раздела:
Строка 148: Строка 189:
 
(где вместо 192.168.1.100 укажите адрес сервера).
 
(где вместо 192.168.1.100 укажите адрес сервера).
  
Выполните монтирование, что также проверит корректность записи в /etc/fstab:
+
Выполните монтирование, что также проверит корректность записи в {{Источник|/etc/fstab}}:
 
  sudo mount /mnt/nfs
 
  sudo mount /mnt/nfs
  
В файлах /etc/yum.repos.d/* пропишите свой сервер в строки baseurl. Пример:
+
В файлах {{Источник|/etc/yum.repos.d/*}} пропишите свой сервер в строки baseurl. Пример:
  
 
было:
 
было:
Строка 163: Строка 204:
 
  sudo dnf makecache
 
  sudo dnf makecache
  
[[Категория:ROSA Server|ROSA Server]]
+
[[Категория:ROSA Server]]

Текущая версия на 02:53, 5 июня 2024

Введение и терминология

Эта статья описывает создание своего репозитория пакетов для операционных систем ROSA Fresh/Chrome версии 12 и новее.

Репозиторий пакетов — хранилище RPM-файлов с дополнительными файлами-метаданными.

Создать свой репозиторий может быть нужно для, например:

  • размещения используемых сторонних пакетов для их установки и обновления из единого места,
  • создания зеркала (точной копии) официальных репозиториев внутри локальной сети предприятия.
Примечание
Приведенные команды следует выполнять от непривилегированного пользователя (не root); команды, которые необходимо выполнять с правами root, написаны через sudo.

Подразумевается, что сервером, на котором размещается репозиторий, является система на базе ROSA Fresh/Chrome 12 (rosa2021.1) и новее, однако его можно разместить и на других ОС.

Зеркалирование репозиториев

Процесс зеркалирования представляет из себя создание и поддерживание в актуальном состоянии точной копии репозиториев, размещенных на официальных серверах ROSA. В данном разделе описано, как сделать такую копию репозитория. Приведен наиболее простой способ, не обеспечивающий консистентность зеркала для внешнего потребителя в момент его обновления.

Для зеркалирования предлагается использовать утилиту rsync. Если она не установлена, выполните:

sudo dnf install rsync

Создайте каталоги для размещения копий репозиториев:

sudo mkdir -p /srv/mirror/x86_64 /srv/mirror/i686

Запустите синхронизацию. В приведенном ниже примере исключаются каталоги большого веса с debuginfo и SRPM, которые в большинстве случаев не нужны.

sudo rsync \
  -av --progress \
  --exclude SRPMS \
  --exclude 'debug_*' 
  --exclude ___REMOVED \
  --exclude '*-rpm-backup' \
  rsync://mirror.rosalab.ru/rosa/rosa2021.1/repository/{x86_64,i686} /srv/mirror/

Создание регулярно выполняемой задачи описано в соответствующем разделе.

Создание своего репозитория

Консольно

Если имеются сторонние RPM-пакеты, то из них можно сделать репозиторий. Необходимо установить утилиту для создания метаданных репозитория:

sudo dnf install createrepo_c

Создайте каталог для репозитория:

sudo mkdir -p /srv/repo/x86_64

Положите RPM-пакеты в каталог /srv/repo/x86_64.

Создайте/обновите метаданные репозитория:

sudo createrepo_c /srv/repo/x86_64

Для обновления репозитория удалите и/или добавьте RPM-пакеты в каталоге /srv/repo/x86_64 и повторно запустите команду создания (обновления) метаданных.

Для проверки можно вывести список пакетов в этом репозитории пакетным менеджером:

dnf --repofrompath local,/srv/repo/x86_64 --disablerepo '*' --enablerepo local list

Для проверки замкнутости репозитория по зависимостям запустите:

dnf --repofrompath local,/srv/repo/x86_64 repoclosure --check local

Через графический интерфейс

Пакет с графической программой для создания своего репозитория называется repocreator, его можно установить через графическую программу «Пакеты» (dnfdragora) или командой:

sudo dnf install repocreator

2024-06-05 02-52.png

2024-06-05 02-52 1.png

Локальный репозиторий

Подключить каталог с репозиторием можно локально. Для этого создайте в папке /etc/yum.repos.d/ файл аналогичный тем что там уже имеются. Приведите строку с baseurl к такому виду:

   baseurl=/home/user/my-repo

Должно получиться что-то вроде:

   [myrepo]
   name=My repo
   baseurl=/path/to/my/repo
   gpgcheck=0
   enabled=1

Доступ к репозиторию по сети

Рассмотрим несколько способов сделать удаленный доступ к репозиторию по сети.

Доступ к репозиторию по HTTP

Настройка HTTP-сервера

Для доступа к репозиторию по сети достаточно запустить любой веб-сервер, умеющий отдавать статические файлы. В качестве примера приведем настройку angie (наследник nginx).

Установите веб-сервер angie:

sudo dnf install angie

Откройте конфигурационный файл на редактирование:

sudo nano /etc/angie/angie.conf

Приведете его к необходимому виду. Ниже приведен минимальный пример на основе конфигурационного файла по умолчанию.

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /srv;
            autoindex on;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Для выхода из консольного редактора nano нажмите Ctrl+X, Enter, Ctrl+O.

Подробнее про настройку angie можно прочитать в документации.

Запустите angie и добавьте его в автозапуск:

sudo systemctl enable --now angie

Попробуйте зайти по адресу http://localhost:80 (или иной IP-адрес), должно отобразиться содержимое каталога /srv, ниже приведен скриншот-пример.

Screenshot 20220628 193125.png

Можно проще

Если репозиторий не будет иметь особых нагрузок или нужен вам для тестирования, вместо полноценного веб сервера достаточно запустить в каталоге с репозиторием:

   python3 -m http.server

или

   python2 -m SimpleHTTPServer

По умолчанию такой сервер запускается с портом 8000, эту цифру необходимо добавить к адресу через двоеточие.

   baseurl=http://192.168.1.100:8000

Настройка HTTP-клиента

В файлах /etc/yum.repos.d/* пропишите свой сервер в строки baseurl. Пример:

было:

baseurl=http://mirror.rosalab.ru/rosa/rosa$releasever/repository/x86_64/main/release/,http://mirror.yandex.ru/rosa/rosa$releasever/repository/x86_64/main/release/

стало:

baseurl=http://192.168.1.100/repo/x86_64/rosa$releasever/repository/x86_64/main/release/

(где 192.168.1.100 — адрес сервера)

Через запятую можно указать резервный репозиторий, который будет использоваться в случае недоступности первого.

Проверьте работу репозиториев:

sudo dnf makecache

Доступ к репозиторию по NFS

Настройка NFS-сервера

Установите пакет утилит для NFS:

sudo dnf install nfs-utils

Откройте на редактирование файл с настройкой NFS-сервера:

sudo nano /etc/exports

Ниже приведен пример, в котором разрешается доступ только на чтение с IP-адресов 192.168.1.0-192.168.1.255 (задана маска подсети).

/srv 192.168.1.1/255.255.255.0(ro,insecure,nohide,all_squash,anonuid=1000,anongid=1000,no_subtree_check)

Запустите и добавьте в автозапуск службу NFS-сервера:

sudo systemctl enable --now nfs-server

Настройка NFS-клиента

Создайте каталог для монтирования NFS:

sudo mkdir -p /mnt/nfs

Откройте на редактирование файл /etc/fstab:

sudo nano /etc/fstab

Пропишите строку монтирования NFS-раздела:

192.168.1.100:/srv /mnt/nfs nfs4 auto,_netdev,bg,nofail

(где вместо 192.168.1.100 укажите адрес сервера).

Выполните монтирование, что также проверит корректность записи в /etc/fstab:

sudo mount /mnt/nfs

В файлах /etc/yum.repos.d/* пропишите свой сервер в строки baseurl. Пример:

было:

baseurl=http://mirror.rosalab.ru/rosa/rosa$releasever/repository/x86_64/main/release/,http://mirror.yandex.ru/rosa/rosa$releasever/repository/x86_64/main/release/

стало:

baseurl=/mnt/nfs/srv/repo/x86_64/rosa$releasever/repository/x86_64/main/release/

Через запятую можно указать резервный репозиторий, который будет использоваться в случае недоступности первого.

Проверьте работу репозиториев:

sudo dnf makecache