Чтобы собрать в одном месте все 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
RSS - Записи
Если добавлять пакеты для интеграции, как советует 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 /