Просто установите простой, но подписанный репозиторий на веб-сервере. Поскольку большинство других руководств несколько устарели или громоздки, я постараюсь повторить эту процедуру здесь. Первоначальная конфигурация требует немного усилий, но простой сценарий сборки упрощает управление. И вы можете просто вставить новые *.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
файлы, которые вы вставили, но также рекурсивно ищет (начиная с одного уровня вверх) другие и вставляет в них ссылки. (В Options FollowSymLinks
конечном счете, нужен .htaccess .)
Вы можете выполнить этот сценарий вручную как 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 , packagecloud , 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 (более ленивый подход для упаковки приложений на языке сценариев).