Разворачиваем локальный apt-репозиторий пакетов на Ubuntu Server 14.04 LTS

imageЧтобы собрать в одном месте все deb-пакеты, которых нет в официальных онлайн репозиториях Ubuntu (например пакеты собираемые из исходных файлов под свои нужды), было решено организовать в локальной сети свой apt-репозиторий. За основу была взята информация о создании собственного репозитория из статьи В.Леттиева Pragmatic Perl — Сборка deb-пакетов модулей Perl для Debian и Ubuntu.

Подготовка виртуальной машины

В используемой у нас среде виртуализации Hyper-V на базе Windows Server 2012 R2 создана отдельная виртуальная машина второго поколения (Hyper-V G2) в конфигурации: 2 vCPU/1GB Static RAM/40GB Dynamic VHDX/1 сетевой интерфейс со статическим MAC-адресом/опция Безопасной загрузки (Secure boot) отключена.

На виртуальную машину установлена ОС Ubuntu Server 14.04.3 LTS. Процесс установки ОС — по аналогии с тем, что был описан ранее. После установки обновляем все пакеты и ядро системы и выполняем перезагрузку:

sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot

После загрузки системы узнаём текущую версию загруженного ядра:

uname -r

3.19.0-31-generic

Как видно, в моём случае это 3.19.0-31-generic. Выполняем установку пакетов необходимых для улучшения интеграции Ubuntu Server 14.04.3 64-bit с Hyper-V с подстановкой версии ядра:

sudo apt-get install hv-kvp-daemon-init linux-tools-3.19.0-31-generic linux-cloud-tools-3.19.0-31-generic

Перезагружаем сервер и проверяем лог загрузки на предмет отсутствия ошибок запуска компонент интеграции:

sudo cat /var/log/boot.log | grep Hyper

 * Starting Hyper-V File Copy Protocol Daemon           [ OK ]
 * Starting Hyper-V VSS Protocol Daemon                 [ OK ]
 * Starting Hyper-V KVP Protocol Daemon                 [ OK ]
 * Stopping Hyper-V File Copy Protocol Daemon           [ OK ]
 * Stopping Hyper-V VSS Protocol Daemon                 [ OK ]
 * Stopping Hyper-V KVP Protocol Daemon                 [ OK ]

Проверяем наличие процессов дополнительных средств Hyper-V

sudo ps -ef | egrep "hv.*daemon"

root     872     1  0 19:59 ?      00:00:00 /usr/lib/linux-tools/3.19.0-31-generic/hv_kvp_daemon
root     873     1  0 19:59 ?      00:00:00 /usr/lib/linux-tools/3.19.0-31-generic/hv_vss_daemon

 

Установка и наполнение репозитория

Выполняем установку репозитория и веб-сервера для раздачи статического контента:

sudo apt-get install reprepro

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

sudo mkdir -p /srv/reprepro/ubuntu/

Внутри вновь созданного каталога в подкаталоге conf создаём конфигурационный файл distributions:

sudo mkdir /srv/reprepro/ubuntu/conf/
sudo nano /srv/reprepro/ubuntu/conf/distributions

Наполняем файл содержимым. В Origin вписываем произвольное имя владельца репозитория, в Label краткое имя репозитория, в Codename указываем кодовое имя поддерживаемой версии Ubuntu, в Architectures определяем перечень поддерживаемых архитектур, в Components задаём категории, на которые хотим разделить все пакеты (в нашем примере используется только одна категория):

Origin: IT Department
Label: KOMI Offline Ubuntu Repository
Codename: trusty
Architectures: i386 amd64 source
Components: main
Description: JSC NefteGazInvestOtkat Branch KOMI Offline Ubuntu Repository

Выполняем инициализацию (генерацию служебных файлов) репозитория:

sudo reprepro -Vb /srv/reprepro/ubuntu export

Created directory "/srv/reprepro/ubuntu/db"
Exporting trusty...
Created directory "/srv/reprepro/ubuntu/dists"
Created directory "/srv/reprepro/ubuntu/dists/trusty"
Created directory "/srv/reprepro/ubuntu/dists/trusty/main"
Created directory "/srv/reprepro/ubuntu/dists/trusty/main/binary-i386"
Created directory "/srv/reprepro/ubuntu/dists/trusty/main/binary-amd64"
Created directory "/srv/reprepro/ubuntu/dists/trusty/main/source"

Добавляем deb-пакет в репозиторий:

sudo reprepro -b /srv/reprepro/ubuntu -C main includedeb trusty ~/my-package_0.1-1.deb

Exporting indices...

При этом добавленный пакет будет скопирован в подкаталог /pool/ корневого каталога репозитория с последующим обновлением индексных файлов репозитория.

 

Установка и настройка веб-сервера

Выполним установку веб-сервера для раздачи статического контента:

sudo apt-get install nginx

Создадим в DNS-алиас для нашего репозитория, чтобы использовать это имя в качестве хидера для выделенного сайта nginx, например используем алиас KOM-SRV-REPO-UBUNTU.holding.com

image

Создадим конфигурационный файл nginx для выделенного сайта, который будет использоваться для раздачи пакетов из нашего репозитория:

sudo nano /etc/nginx/sites-available/KOM-SRV-REPO-UBUNTU.conf

и наполним его контентом (укажем какой порт нужно слушать, какое имя веб-сервера принимать, где хранить логи и путь к корневому каталогу):

server {
  listen 80;
  server_name KOM-SRV-REPO-UBUNTU.holding.com;

  access_log /var/log/nginx/KOM-SRV-REPO-UBUNTU-access.log;
  error_log /var/log/nginx/KOM-SRV-REPO-UBUNTU-error.log;

  location / {
    root /srv/reprepro;
    autoindex on;
  }
}

Если для server_name используются длинные имена, то можно создать ещё один вспомогательный конфигурационный файл для nginx, чтобы избежать проблем при запуске веб-сервера…

sudo nano /etc/nginx/conf.d/server_names_hash_bucket_size.conf

…и добавить в него строку:

server_names_hash_bucket_size 64;

Активируем сайт:

cd /etc/nginx/sites-enabled
sudo ln -s ../sites-available/KOM-SRV-REPO-UBUNTU.conf .
sudo service nginx reload

 * Reloading nginx configuration nginx         [ OK ]

Если мы всё сделали правильно, перезагрузка nginx не должна выдать никаких ошибок.

 

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

На других системах c Ubuntu Trusty, где мы хотим устанавливать пакеты с нашего репозитория, создадим отдельный конфигурационный файл с нашим источником пакетов apt:

sudo nano /etc/apt/sources.list.d/KOM-SRV-REPO-UBUNTU.holding.com.list

и добавим в файл строку:

deb http://KOM-SRV-REPO-UBUNTU.holding.com/ubuntu/ trusty main

Далее, чтобы обновить информацию об имеющихся пакетах выполним:

sudo apt-get update

Теперь можно посмотреть попала-ли в кэш apt информация о пакетах из нашего репозитория и попытаться установить эти пакеты:

sudo apt-cache search my-package
sudo apt-cache show my-package sudo apt-get install my-package

Дополнительные источники информации:

Ubuntu Community Help Wiki — What are Repositories?
Ubuntu Community Help Wiki — Creating a Personal Repository
Ask Ubuntu — How to make my own local repository?
Dave Hall Consulting — Howto Setup a Private Package Repository with reprepro and nginx

Всего комментариев: 2 Комментировать

  1. Андрей /

    Если добавлять пакеты для интеграции, как советует MS (с конкретной версией), то при обновлении ядра их придется обновлять вручную, что весьма печально. Решение тривиально — добавлять надо пакеты
    linux-tools-generic
    linux-cloud-tools-generic
    А с версии Ubuntu Server 14.04.3 LTS имена пакетов должны быть заменены на
    linux-tools-generic-lts-vivid
    linux-cloud-tools-generic-lts-vivid
    Таким образом вместо рекомендованных MS танцев с uname (не забывайте повторять при замене ядра )) )
    достаточно одной строчки
    apt-get install -y linux-tools-generic-lts-vivid linux-cloud-tools-generic-lts-vivid
    и про танцы можно забыть ))

  2. Обратная ссылка: Высоко-доступный балансировщик Zen Load Balancer (ZenLB) Community Edition на базе 64-битной ОС Ubuntu Server 14.04 | Блог IT-KB /

Добавить комментарий