Возникла необходимость фиксировать локальный репозиторий разработчиков на конкретную дату, сравнивать эти состояния, откатываться назад и возвращаться к текущему состоянию, публиковать нужную версию.
Для этой цели отлично подошел продукт под названием Aptly.
развернуть
Принцип работы таков:

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

  • фиксируется текущее состояие созданием снмка (snapshot);

  • cнимки могут быть объеденены между собой (merge), сравнены (diff) и прочее;

  • публикуется выбранный снимок.




Очень хорошая, понятная документация на самом официальном сайте проекта: http://www.aptly.info/doc/overview/

Установка Aptly на Ubuntu 14.04:


Так как в основном репозитории Ubuntu нет пакета Aptly, для начала добавьте репозиторий разработчика в /etc/apt/sources.list прямым редактированием файла добавив в конец строку:

deb http://repo.aptly.info/ squeeze main

или выполнив команду:

# add-apt-repository 'deb http://repo.aptly.info/ squeeze main'

Не беспокойтесь на счет squeeze в названии репозитория: пакет Aptly будет работать на Debian squeeze+, Ubuntu 10.0+

Импортирйте ключ для репозитория:

# gpg --keyserver keys.gnupg.net --recv-keys 2A194991
# gpg -a --export 2A194991 | sudo apt-key add -

После этого можно устанавливать Aptly как любой другой пакет:

# apt-get update
# apt-get install aptly

установяться так же и зависимости: bzip2, gnupg and gpgv.

В целях безопасности команды aptly не следует выполнять из-под учетной записи root. Для этих целей создайте нового пользователя, например:

# adduser repokeeper

и залогиньтесь под ним:

# su repokeeper

Далее сгенерируйте gpg ключ для подписи своего репозитория. Делать это нужно именно из под учетной записи того пользователя, от имени которого впоследствии будут публиковаться снимки:

# gpg --gen-key

Если интропия вашкго компьютера достаточна, а именно более 800, то ключ благополучно сгенерируется. Сохраните пароль ключа в надежном месте.

Посмотреть уровень текущей интропии можно открыв еще одну консоль и выполнив:

cat /proc/sys/kernel/random/entropy_avail

Если долго ничего не происходит и вываливается ошибка:



это означает, что ваш компьютер бездействует и уровень интропии недостаточен.
Запустите какой-нибудь длительный тяжелый процесс на сервере, что бы его нагрузить или запустите в соседней консоли:

# cat /dev/urandom > randomfile

подождите пару минут, чтобы на диске создался файл приличного размера, затем прервите операцию нажав Ctrl+C.
Далее выполните:

# dd if=random of=/dev/null iflag=direct

и снова смотрите в файл /proc/sys/kernel/random/entropy_avail. В какой-то момент уровень энтропии поднимется до 800 и GPG сможет сгенерировать свой ключ.
Сохраните ключ в надежном месте. Для этого заархивируйте файл .gnupg в домашнем каталоге пользователя repokeeper и скопируте его для хранения или передачи иному пользователю.

# tar -czvf gnupg.tar.gz ~/.gnupg

На этом установка aptly закончена.

Настройка и работа с Aptly


Создание зеркала

Допустим имеется репозиторий разработчиков, который надо поставить на контроль версий публикуемых пакетов и вести его мониторинг. Для этого на нашем сервере с помощью установленного пакета Aptly создадим зеркало исходного репозитория разработчиков.
Перед созданием зеркала, сначала нужно импортировать открытый ключ удаленного репозитория в хранилище ключей:

# wget -O - http://repo.dev.domain.ru/repo.gpg.key | gpg --no-default-keyring --keyring trustedkeys.gpg –-import

Основной конфиг создайте из автосоздаваемого ~/aptly.conf в /etc/aptly.conf с указанием корневого каталога. В домашней папке конфиг удалите. Дело в том, что aptly сначала ищет конфигурационный файл в домашнем каталогк, затем в директории /etc.
Содержание файла aptly.conf:

cat /etc/aptly.conf



Создайте зеркало нужной ветки:

# aptly mirror create -architectures=amd64 repo-precise-1-main http://repo.dev.domain.ru/repo precise-1 main

где repo-precise-1-main произвольное имя нашего зеркала.
Aply любезно сообщит, что можно сделать дальше: "You can run 'aptly mirror update repo-precise-1-main' to download repository contents."

Запустите обновление зеркала:

# aptly mirror update repo-precise-1-main

Файлы сохраняются в rootdir/.aptly/pool/ в нашем случае в /var/cache/aptly/pool

Информация о зеркале:

# aptly mirror show repo-precise-1-main

Редактировать зеркало:

# aptly mirror edit -architectures="i386,amd64" repo-precise-1-main

Создание снимка (snapshot)


Создайте snapshot:

# aptly snapshot create repo-precise-1-main-20150505 from mirror repo-precise-1-main
где repo-precise-1-main-20150505 произвольное имя снимка.

Снэпшот не занимает дополнительного места на диске, хранит только список пакетов.
Можно создавать снэпшот в любое время. Затем можно объеденить (MERGE) несколько снепшотов в один с разной стратегией (Flag -latest chooses merge strategy: package with latest version “wins”):

# aptly snapshot merge -latest wheezy-final-20141009 wheezy-main-7.6

Проверка:

# aptly package show -with-references 'Name (nginx)'

Посмотреть список снепшотов:

# aptly snapshot list

Сравнить снепшоты:



Публикация снепшота


Опубликовать репозиторий из снепшота:

# aptly publish snapshot -architectures="i386,amd64" repo-precise-1-main-20150506

Указание -architectures="i386,amd64" обязательно, несмотря на то, что в документации сказано, что по умолчанию публикуются все доступные архетектуры.

При запросе ввести пароль (2 раза) от ключа GPG созданного ранее.
Если публикуется объедененный снепшот, то имя ветки нужно указать явно, например:

# aptly publish snapshot -distribution=wheezy wheezy-final-20141009

Посмотреть какой снепшот опубликован на текущий момент:

# aptly publish list

Сравнить с предыдущим снепшотом:

# aptly snapshot diff repo-precise-1-main-20150505 repo-precise-1-main-20150506-1

При наличии изменений опубликовать новый снепшот вместо предыдущего:

# aptly publish switch precise-1 repo-precise-1-main-20150506-1

При запросе ввести пароль (2 раза) от gpg ключа.

Удалить снепшот:

# aptly snapshot drop repo-precise-1-main-20150506

Нельзя удалить опубликованный снепшот, сначала надо опубликовать новый снепшот, затем удалить старый при необходимости.

Поместите публичный ключ в public:

# gpg --export --armor > /var/cache/aptly/public/repo.gpg.key


Доступ к репозиторию по протоколу HTTP


Для того, что наш репозиторий был доступен из браузера по http нужно установить и настроить вебсервер Apache.

# apt-get install apache2

Теперь нужно настроить вебсеревер так, что бы опубликовать директорию с нашим репозиторием '/var/cache/aptly/public' с опцией autoindexing.

Для этого создайте файл /etc/apache2/sites-available/aptly.conf следующего содержания:



Файлы логов должны быть созданы заранее и доступны для записи пользователю, от имени которго запускается Apache. В ubuntu это www-data:

# touch /var/log/apache2/aptly-error.log
# touch /var/log/apache2/aptly-access.log

Находясь в директории /etc/apache2/sites-available/ выполните:

# a2ensite aptly.conf

эта команда создаст алиас для файла конфигурации в /etc/apache2/sites-enabled/.

Перезапустите Apache:

# service apache2 reload

Теперь репозиторий будет доступен из браузера по адресу: http://your-server
Не забудьте проверить настройки файрвола.

Настройки на стороне клиента


Что бы подключить к нашему репозиторию новую машину и устанавливать из него пакеты добавьте в /etc/apt/sources.list прямым редактированием файла строку:

deb http://your-server/ precise-1 main
или выполнив команду:

# add-apt-repository 'deb http://your-server/ precise-1 main'
И импортируйте ключ репозитория:

# wget -O - http://repo.domain.ru/repo.gpg.key | sudo apt-key add -
или добавить ключ локально:

# apt-key add repo.gpg.key


Прочие дополнения


Для удобства пользователей можно разместить напоминание в виде html странички о том, как установить GPG ключ. Для этого в корне директории /var/cache/aptly/public/создайте файл readme.html:

sudo nano /var/cache/aptly/public/readme.html



В добавок ко всему Aptly обладает такой замечательной возможностью, как графическое отображение структуры репозитория в виде изображения в формате .png


Формирование картинки:

# aptly graph
Созданный .png файл скопируйте к себе на рабочий стол, например с помощью WinSCP.

Вот, что может получиться:



Troubleshooting


Ошибка при смене снэпшота:

# aptly publish switch trusty repo-trusty-1-main-20150904-01
Loading packages...
Generating metadata files and linking package files...
ERROR: unable to publish: unable to process packages: error linking file to /var/cache/aptly/public/pool/main/a/activiti/activiti.deb: file already exists and is different

Это происходит, когда версия файла в исходном репозитории сменилась, а сам файл остался тот же. В этом случае удалить файл по указанному пути и переопубликовать снепшот:

# aptly publish switch trusty repo-trusty-1-main-20150904-01

Публикации по теме:
Об Aptly: http://habrahabr.ru/post/225825/
Генерация gpg ключа: https://debian.pro/1424

Aptly – свой репозиторий с контролем версий
Настройка и управление репозиторием Debian с помощью Aptly
локальный репозиторий debian или ubuntu
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 04:17 am
Powered by Dreamwidth Studios