Чтобы собрать в одном месте все 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
Создадим конфигурационный файл 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
Если добавлять пакеты для интеграции, как советует 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
и про танцы можно забыть ))
Обратная ссылка: Высоко-доступный балансировщик Zen Load Balancer (ZenLB) Community Edition на базе 64-битной ОС Ubuntu Server 14.04 | Блог IT-KB /