Как настроить хранилище APT?

Я хотел бы установить хранилище APT на сервере, который предоставит пару пакетов.

Есть ли способ настроить один без установки какого-либо программного обеспечения на сервере?

Как файлы должны быть организованы?


Редактировать: Я должен делать что-то не так... может кто-нибудь, пожалуйста, помогите мне? У меня есть хранилище на http://quickmediasolutions.com/apt/dists

Я не уверен, где или что, но что-то неправильно настроено. У меня только один пакет, и он предназначен для всех архитектур.

Вот что было добавлено в мой /etc/apt/sources.list:

deb http://quickmediasolutions.com/apt stable main

5 ответов

Решение

Настроить простой репозиторий очень просто, используя dpkg-scanpackages. Эта страница объясняет, как настроить тривиальное репо, а эта объясняет, как его использовать (прокрутите вниз до примера 4).

Просто установите простой, но подписанный репозиторий на веб-сервере. Поскольку большинство других руководств несколько устарели или громоздки, я постараюсь повторить эту процедуру здесь. Первоначальная конфигурация требует немного усилий, но простой сценарий сборки упрощает управление. И вы можете просто зайти в новый *.deb файлы, затем обновите, или позвольте работе cron справиться с этим.

Создайте несколько ключей подписи

Сначала вам нужно создать gpg ключ подписи для пакетов и вашего хранилища. Сделайте это (4) ключом подписи RSA, без пароля, и дайте ему уникальный $KEYNAME когда попросили. (Дальнейшие примеры предполагают " dpkg1 "как имя ключа.)

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

Я сказал "нет пароля", потому что на вашем веб-сервере нет встроенной обезьянки, чтобы вводить его повторно. А подписанные пакеты и репозиторий предназначены только для удовлетворения жалоб менеджеров обновлений по этому поводу. Просто загрузите оба ключа на новый /apt/ каталог репозитория на вашем веб-сервере, но удалите secret.gpg ключ после инициализации.

Обновить скрипт CGI

Это простой сценарий обновления оболочки /CGI для него:

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

Три gpg строки должны быть выполнены только один раз, чтобы инициализировать настройку GPG в некотором каталоге $GNUPGHOME (над корнем документа). Удалить только secret.gpg после успеха

Уникальная особенность этого небольшого сценария оболочки заключается в том, что он принимает любые *.deb файлы, которые вы вставляете, но также ищите рекурсивно (начиная с одного уровня вверх) для других и вставляйте в них символические ссылки. (Требуется.htaccess Options FollowSymLinks в конце концов.)

Вы можете выполнить этот сценарий вручную как CGI или для cron-job. Но спрячьте или, еще лучше, удалите его из корня документа.

Поскольку это "тривиальное" хранилище apt, необходимо следующее apt-sources.list запись:

deb http://example.org/deb/  ./    # Simple signed repo

Это подходит для репозиториев с одной архитектурой, и если вы не ожидаете сотни пакетов.

Подписание пакета

Подписать ваши индивидуальные пакеты также тривиально, как только вы настроите свои ключи gpg:

dpkg-sig -k dpkg1 -s builder *.deb

(Это следует делать на рабочей станции, на которой создаются пакеты, а не на веб-сервере хранилища.)

Неподписанный репозиторий

Если вам не нужны подписанные пакеты, то вы можете сократить скрипт обновления до:

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

Который все еще может использоваться средними пользователями, но нуждается в специальном флаге для apt.sources:

deb [trusted=yes] http://apt.example.org/deb/ ./

Но, пожалуйста, не используйте trusted=yes Отметьте как обычно для всего, или если вы на самом деле не уверены в происхождении пакета.

Для удобства использования

Для конечных пользователей просто оставьте HEADER.html в каталог репозитория. апачи mod_auto_index добавлю эту записку:

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -</kbd>
</dl>

альтернативы

В настоящее время существует несколько инструментов для автоматизации управления хранилищами. И даже есть онлайн- хостинги для репозиториев и сервисы сборки пакетов ( gemfury, https://packagecloud.io/, bintray и т. Д.)

  • Довольно удобной альтернативой является prm. Это скрипт Ruby, который создает сложные репозитории APT и YUM. (Но давайте просто надеяться, что RPM наконец-то скоро исчезнет...) - Лучше всего установить gem install prm,

  • И я также написал небольшой скрипт для автоматизации этого аналогичным образом: http://apt.include-once.org/apt-phparchive - Пожалуйста, обратите внимание, что он не слишком устойчив и написан на PHP (на этот раз это случайно), и изначально предназначался для DEB, RPM-over-APT и Phar.

Поскольку это тесно связано с первоначальным вопросом, существуют также инструменты для более простой сборки пакетов Debian. Несколько устаревший: EPM. Гораздо более современно: FPM. И мой личный ответвление: XPM (более ленивый подход для упаковки приложений на языке сценариев).

Да. Вы можете сделать это. Вам просто нужно правильно организовать файлы и создать индексные файлы. Если вы поместите структуру каталогов в корень документа вашего веб-сервера, пакеты будут доступны через веб-сервер.

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

Вы также можете использовать инструмент под названием prespro, если вы хотите установить этот пакет. Это сделает администрацию немного удобнее.

Возможно, вы также можете рассмотреть Launchpad PPA

Для тех, кто сталкивается с этой ошибкой после следующего ответа Марио:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

сделайте следующее:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

Я положил *.deb файлы в debs папка.

Другие вопросы по тегам