Настройка сервера репозитория

В openEuler доступно несколько источников репозитория для использования через Интернет. Подробнее об источниках репозитория см. в разделе Руководство по установке. Если вы не можете получить источник репозитория openEuler через Интернет, можно создать локальный источник, воспользовавшись пакетом выпуска от openEuler в формате ISO. В этом разделе в качестве примера используется файл openEuler-22.09-aarch64-dvd.iso. Измените файл ISO необходимым образом.

Обзор

Создайте источник репозитория из файла openEuler-22.09-aarch64-dvd.iso, предоставленного openEuler. Ниже показан пример использования Nginx для того, чтобы развернуть источник репозитория и предоставить HTTP-сервис.

Создание и обновление локального источника репозитория

Смонтируйте ISO-файл openEuler-22.09-aarch64-dvd.iso от openEuler, чтобы создать и обновить источник репозитория.

Получение файла ISO

Загрузите ISO-файл openEuler со следующего веб-сайта:

Монтирование файла ISO для создания источника репозитория

Чтобы смонтировать ISO-файл, выполните команду mount от имени пользователя root:

mount /home/openEuler/openEuler-22.09-aarch64-dvd.iso /mnt/

Смонтированный каталог /mnt/ выглядит следующим образом:

│── boot.catalog
│── docs
│── EFI
│── images
│── Packages
│── repodata
│── TRANS.TBL
└── RPM-GPG-KEY-openEuler

В результатах команды выше Packages указывает каталог, где хранится пакет RPM, repodata — каталог метаданных источника репозитория, а RPM-GPG-KEY-openEuler указывает открытый ключ для подписи openEuler.

Создание локального источника репозитория

Вы можете скопировать определенные файлы из файла ISO в локальный каталог, чтобы создать локальный источник репозитория:

mount /home/openEuler/openEuler-22.09-aarch64-dvd.iso /mnt/
mkdir -p ~/srv/repo/ $ cp -r /mnt/Packages ~/srv/repo/ $ cp -r /mnt/repodata ~/srv/repo/ $ cp -r /mnt/RPM-GPG-KEY-openEuler ~/srv/repo/

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

│── Packages
│── repodata
└── RPM-GPG-KEY-openEuler

Packages указывает каталог, где хранится пакет RPM, repodata — каталог метаданных источника репозитория, а RPM-GPG-KEY-openEuler указывает открытый ключ для подписи openEuler.

Обновление источника репозитория

Обновить источник репозитория можно двумя способами.

  • Используйте актуальную версию файла ISO для обновления существующего источника репозитория. Это делается так же, как создание источника репозитория, то есть монтированием файла ISO или копированием его содержимого в локальный каталог.

  • Добавьте пакет RPM в каталог Packages источника репозитория и выполните команду createrepo, чтобы обновить источник:

    createrepo --update --workers=10 ~/srv/repo

    В этой команде --update указывает на обновление, а --workers — число потоков, которое можно изменить.

    Если при запуске команды выводится "createrepo: command not found" (команда не найдена) то чтобы установить createrepo от имени пользователя root выполните команду:

    dnf install createrepo

Развертывание удалённого источника репозитория

Установите операционную систему openEuler и разверните в ней источник репозитория с помощью Nginx.

Установка и настройка Nginx

  1. Загрузите инструмент Nginx и установите его от имени пользователя root.

  2. Установив Nginx, в роли пользователя root настройте /etc/nginx/nginx.conf.

    Содержимое конфигурации в этом документе приводится только для справки. Вы можете настроить его в соответствии с требованиями узла (например, для усиления защиты).

    user nginx;
    worker_processes auto; # Рекомендуется задать для этого параметра значение `core-1`
    error_log /var/log/nginx/error.log warn; # Место хранения журнала pid /var/run/nginx.pid;
    
    events {
        worker_connections 1024;
    }
    
    http {
        include /etc/nginx/mime.types; default_type application/octet-stream;
        log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
        access_log /var/log/nginx/access.log main;
        sendfile on;
        keepalive_timeout 65;
    
        server {
            listen 80;
            server_name localhost; # Имя сервера (URL)
            client_max_body_size 4G;
            root /usr/share/nginx/repo; # Каталог сервисов по умолчанию
    
            location / {
                autoindex on; # Активация доступа к файлам более низкого уровня в каталоге.
                autoindex_exact_size on;
                autoindex_localtime  on;
            }
        }
    }

Запуск Nginx

  1. Выполните команду systemd от имени пользователя root, чтобы запустить сервис Nginx:

    systemctl enable nginx
    systemctl start nginx
  2. Для проверки запуска Nginx можно выполнить следующую команду:

    systemctl status nginx
  3. Если сервис Nginx не запускается, просмотрите сведения об ошибке:

    systemctl status nginx.service --full

Развертывание источника репозитория

  1. От имени пользователя root выполните команду, чтобы создать каталог /usr/share/nginx/repo/, указанный в конфигурации Nginx в файле /etc/nginx/nginx.conf:

    mkdir -p /usr/share/nginx/repo
  2. Выполните от имени пользователя root следующую команду, чтобы изменить права доступа к каталогу /usr/share/nginx/repo:

    chmod -R 755 /usr/share/nginx/repo
  3. В роли пользователя root включите настроенный для Nginx порт (порт 80) в правилах брандмауэра:

    firewall-cmd --add-port=80/tcp --permanent
    firewall-cmd --reload
  4. От имени пользователя root проверьте, включен ли порт 80. Если будет выведено yes (да), то порт 80 включен:

    firewall-cmd --query-port=80/tcp

    Вы также можете включить порт 80, используя в роли root команду iptables:

    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
  5. После настройки сервиса Nginx вы можете использовать IP-адрес для доступа к веб-странице.

  6. Добавьте источник репозитория в каталог /usr/share/nginx/repo/ любым из следующих способов.

    • Скопируйте соответствующие файлы из образа в каталог /usr/share/nginx/repo от имени пользователя root:

      mount /home/openEuler/openEuler-22.09-aarch64-dvd.iso /mnt/
      cp -r /mnt/Packages /usr/share/nginx/repo/
      cp -r /mnt/repodata /usr/share/nginx/repo/
      cp -r /mnt/RPM-GPG-KEY-openEuler /usr/share/nginx/repo/
      chmod -R 755 /usr/share/nginx/repo

      Файл openEuler-22.09-aarch64-dvd.iso хранится в каталоге /home/openEuler/.

    • Создайте символическую ссылку для источника репозитория в каталоге /usr/share/nginx/repo/ от имени пользователя root:

      ln -s /mnt /usr/share/nginx/repo/os

      /mnt — это созданный источник репозитория, а /usr/share/nginx/repo/os указывает на /mnt.

Использование источника репозитория

Источник репозитория может быть настроен как источник YUM. Это менеджер программных пакетов, представляющий собой интерфейс-оболочку. YUM основан на диспетчере пакетов Red Hat (RPM) и может автоматически загружать пакет RPM с указанного сервера, устанавливать пакет и обрабатывать зависимые отношения. Он поддерживает единовременную установку всех зависимых пакетов программного обеспечения.

Настройка репозитория в качестве источника YUM

Вы можете настроить созданный репозиторий в качестве источника YUM и создать файл конфигурации с расширением .repo в каталоге /etc/yum.repos.d/ от имени пользователя root. Настроить источник YUM можно на локальном узле или HTTP-сервере.

Настройка локального источника YUM

Создайте файл openEuler.repo в каталоге /etc/yum.repos.d/ и используйте в качестве источника YUM локальный репозиторий. Содержимое файла openEuler.repo следующее:

[base] name=base baseurl=file:///home/openEuler/srv/repo enabled=1 gpgcheck=1 gpgkey=file:///home/openEuler/srv/repo/RPM-GPG-KEY-openEuler

Здесь: repoid указывает идентификатор репозитория программного обеспечения. Идентификаторы repoid во всех файлах конфигурации .repo должны быть уникальными. В этом в качестве repoid задано base.

  • name — это строка описания программного репозитория.

  • baseurl указывает адрес репозитория программного обеспечения.

  • enabled указывает, включать ли репозиторий источника программного обеспечения. Значением может быть 1 или 0. Значение по умолчанию 1 указывает, что репозиторий источника программного обеспечения включен.

  • gpgcheck указывает, включать ли GNU Privacy Guard (GPG) для проверки действительности и безопасности источников RPM-пакетов. 1 означает, что проверка GPG включена. 0 означает, что проверка GPG отключена.

  • gpgkey указывает открытый ключ, используемый для проверки подписи.

Настройка источника YUM для HTTP-сервера

Создайте файл openEuler.repo в каталоге /etc/yum.repos.d/.

  • Если источником YUM служит источник репозитория на HTTP-сервере, развернутый пользователем, то содержимое openEuler.repo выглядит следующим образом:

    [base] name=base baseurl=http://192.168.139.209/ enabled=1 gpgcheck=1 gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler
  • Если источником YUM служит источник репозитория, предоставленный openEuler, то содержимое openEuler.repo будет следующим (для примера используется источник репозитория ОС на основе AArch64):

    [base] name=base baseurl=http://repo.openeuler.org/openEuler-22.09/OS/aarch64/ enabled=1 gpgcheck=1 gpgkey=http://repo.openeuler.org/openEuler-22.09/OS/aarch64/RPM-GPG-KEY-openEuler

Приоритет репозитория

Если источников репозитория несколько, вы можете установить приоритет репозитория в файле .repo. Если приоритет не задан, по умолчанию он равен 99.

Если в источниках с одинаковым приоритетом имеется один и тот же пакет RPM, устанавливается последняя версия.

Значение 1 соответствует самому высокому приоритету, а 99 — самому низкому. Ниже показано, как задать для openEuler.repo приоритет 2.

[base] name=base baseurl=http://192.168.139.209/ enabled=1 priority=2 gpgcheck=1 gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler

Связанные команды dnf

Команда dnf может автоматически анализировать зависимости между пакетами в ходе установки и обновления. Общий метод использования выглядит следующим образом:

dnf <command> <packages-names>

Здесь:

  • <command> — команда;

  • <packages-names> — названия пакетов.

Основные команды приведены ниже.

  • Установка

    dnf install <packages name>
  • Обновление

    dnf update <packages name>
  • Откат

    dnf downgrade <packages name>
  • Проверка обновления

    dnf check-update
  • Удаление

    dnf remove <packages name>
  • Запрос

    dnf search <packages name>
  • Локальная установка

    dnf localinstall <absolute path to package name>
  • Просмотр записей журнала

    dnf history
  • Очистка записей кеша

    dnf clean all
  • Обновление кеша

    dnf makecache