aptly 0.5
Новая версия aptly 0.5 была выпущена сегодня. aptly можно скачать в виде исполняемых файлов или подключив Debian-репозиторий:
deb http://repo.aptly.info/ squeeze main
При установке из репозитория в первый раз, не забудьте проимпортировать ключ, которым подписан релиз:
$ gpg --keyserver keys.gnupg.net --recv-keys 2A194991 $ gpg -a --export 2A194991 | sudo apt-key add -
Вот самые важные новые возможности в этой версии:
Публикация локальных репозиториев
Есть два основных случая использования локальных репозиториев:
- тестирование новых версий пакетов
- предоставление стабильного способа распространения новых версий
Во втором случае лучше всего создать snapshot локального репозитория и опубликовать его. Однако когда активно тестируются новые версии, создание snapshot при каждом изменении выглядит не очень разумным. aptly начиная с версии 0.5 поддерживает публикацию локальных репозиториев напрямую. Более того, когда репозиторий обновляет, его опубликованное представление можно обновить в один шаг.
При создании локального репозитория можно указать параметры, которые будут использоваться по умолчанию при публикации (distribution and component):
aptly repo create -distribution=wheezy testing-wheezy aptly repo add -remove-files testing-wheezy incoming/*.deb aptly publish repo testing-wheezy ... aptly repo add -remove-files testing-wheezy incoming/*.deb aptly publish update wheezy
Переключение опубликованных snapshot
Snapshot - это способ обеспечить повторяемость в наборе установленных пакетов, но время от времени возникает необходимость обновить версии ПО или добавить новые пакеты. Для публикации нового snapshot aptly до версии 0.5 требовала удалить старый опубликованный snapshot, а затем опубликовать новый. Между этими действиями опубликованный репозиторий не был работоспособен.
Теперь aptly поддерживает переключение опубликованных snapshotов. aptly выполняет следующую последовательность действий, чтобы минимизировать время недоступности репозитория:
- в первую очередь создаются ссылки на новые файлы пакетов;
- затем создаются файлы с метаданными (Packages, Release, ...) с временными именами
- новые версии файлов метаданных замещают старые версии
- старые файлы пакетов вычищаются.
Например:
aptly snapshot create wheezy-7.3 from mirror wheezy-main aptly publish snapshot wheezy-7.3 .... aptly mirror update wheezy-main aptly snapshot create wheezy-7.4 from mirror wheezy-main aptly publish switch wheezy wheezy-7.4
Стратегия слияния
При слиянии snapshotов aptly заменяет совпадающие по имени и архитектуре пакеты в порядке следования их в командной строке. Это хорошо работает при слиянии обычного репозитория и backportов. Но иногда такого недостаточно: например, при слиянии обычного репозитория, updates и security. Теперь aptly поддерживает флаг -latest, который включает стратегию "выигрывает самая поздняя версия":
aptly snapshot merge -latest wheezy-latest wheezy-backports wheezy-main wheezy-security
Спасибо Ryan Uber и Keith Chambers за идею и pull request.
Автоматизация
Иногда вам нужно сделать действия с целым набором зеркал, snapshotов и репозиториев. aptly с версии 0.5 поддерживает формат списка "raw", который легко распарсить. Например, обновим все зеркала Debian:
aptly mirror list -raw | grep -E '^debian-.*' | xargs -n 1 aptly mirror update
Спасибо Eric Keller за идею.
Полный список изменений
Вот полный список изменений в версии 0.5:
- Debian packages for aptly are available
- internal DB is compacted when calling aptly db cleanup (#19)
- size is shown in human-readable format (#18)
- fixed wrong location of man page in Debian package (#22)
- new flags:
-distribution
and-component
to specify default publishing options in aptly repo create (#12) - aptly would try harder to figure out distribution & component automatically when publishing going through the tree of snapshots, mirrors and local repositories
- aptly supports publishing local repositories, without intermediate snapshot step (#10)
- new command: aptly publish repo to publish local repository directly (#10)
- new command: aptly publish edit to change defaults for the local repository (#12)
- aptly supports global & command flags placement in any position in command line (before command name, after command name) (#17)
- new command: aptly db recover to recover internal DB after crash (#25)
- new flag:
-raw
to display list in machine-readable format for commands aptly mirror list, aptly repo list, aptly snapshot list and aptly publish list (#27, #31) - new flags:
-origin
and-label
to customize fieldsOrigin:
andLabel:
inRelease
files during publishing in commands aptly publish snapshot and aptly publish repo (#29) - bug fix: with some HTTP servers aptly might have given "size mismatch" errors due to unnecessary decompression (#33)
- new command: aptly publish update updates published repo in-place (#8)
- new command: aptly publish switch switches published snapshot in-place (#8)
- new flag:
-latest
for command aptly snapshot merge changes merge strategy to "latest version wins" (#42), thanks to @ryanuber and @keithchambers
Комментарии
Comments powered by Disqus