Свой репозиторий — различия между версиями
(→Через графический интерфейс) |
|||
(не показано 17 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
− | = Введение и терминология = | + | == Введение и терминология == |
− | Эта статья описывает создание своего репозитория пакетов для операционных систем ROSA Fresh/Chrome версии 12 и новее | + | {{Введение|Эта статья описывает создание своего репозитория пакетов для операционных систем 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}}. |
Создайте/обновите метаданные репозитория: | Создайте/обновите метаданные репозитория: | ||
Строка 50: | Строка 53: | ||
Для обновления репозитория удалите и/или добавьте RPM-пакеты в каталоге /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 | ||
+ | |||
+ | [[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-сервера ==== | ||
+ | |||
+ | Для доступа к репозиторию по сети достаточно запустить любой веб-сервер, умеющий отдавать статические файлы. В качестве примера приведем настройку {{Pkg|angie}} (наследник nginx). | ||
+ | |||
+ | Установите веб-сервер angie: | ||
+ | sudo dnf install angie | ||
+ | |||
+ | Откройте конфигурационный файл на редактирование: | ||
+ | sudo nano /etc/angie/angie.conf | ||
+ | |||
+ | Приведете его к необходимому виду. Ниже приведен минимальный пример на основе конфигурационного файла по умолчанию. | ||
+ | <pre> | ||
+ | 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; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | Для выхода из консольного редактора nano нажмите Ctrl+X, Enter, Ctrl+O. | ||
+ | |||
+ | Подробнее про настройку angie можно прочитать в [https://angie.software/configuration/ документации]. | ||
+ | |||
+ | Запустите {{Pkg|angie}} и добавьте его в автозапуск: | ||
+ | sudo systemctl enable --now angie | ||
+ | |||
+ | Попробуйте зайти по адресу http://localhost:80 (или иной IP-адрес), должно отобразиться содержимое каталога /srv, ниже приведен скриншот-пример. | ||
+ | |||
+ | [[File:Screenshot_20220628_193125.png||400px]] | ||
+ | |||
+ | ==== Можно проще ==== | ||
+ | Если репозиторий не будет иметь особых нагрузок или нужен вам для тестирования, вместо полноценного веб сервера достаточно запустить в каталоге с репозиторием: | ||
+ | |||
+ | 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 (задана [https://ru.wikipedia.org/wiki/Маска_подсети маска подсети]). | ||
+ | <pre> | ||
+ | /srv 192.168.1.1/255.255.255.0(ro,insecure,nohide,all_squash,anonuid=1000,anongid=1000,no_subtree_check) | ||
+ | </pre> | ||
+ | |||
+ | Запустите и добавьте в автозапуск службу 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 | ||
+ | |||
+ | [[Категория:ROSA Server]] |
Текущая версия на 02:53, 5 июня 2024
Содержание
Введение и терминология
Репозиторий пакетов — хранилище 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
Локальный репозиторий
Подключить каталог с репозиторием можно локально. Для этого создайте в папке /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, ниже приведен скриншот-пример.
Можно проще
Если репозиторий не будет иметь особых нагрузок или нужен вам для тестирования, вместо полноценного веб сервера достаточно запустить в каталоге с репозиторием:
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