Я хотел бы создать репозиторий APT на сервере, который предоставит пару пакетов.
Есть ли способ установить его без установки какого-либо программного обеспечения на сервере?
Как файлы должны быть организованы?
Изменить: я должен что-то делать неправильно ... может кто-то мне помочь? У меня есть репозиторий по адресу http://quickmediasolutions.com/apt/dists
Я не уверен, где и что, но что-то неправильно настроено.
Вот что было добавлено в мой /etc/apt/sources.list:
deb http://quickmediasolutions.com/apt stable main
Просто настройте простой, но подписанный репозиторий на веб-сервере. Поскольку большинство других учебников несколько устарели или громоздки, я попытаюсь воспроизвести процедуру здесь. Первоначальная конфигурация требует немного усилий, но простой скрипт сборки позволяет легко управлять.
Сначала вам нужно создать gpg, а затем добавить новые *.deb файлы, затем обновить или разрешить выполнение задания cron. ключ подписи для пакетов и вашего репозитория. Сделайте это (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-скрипт для этого:
#!/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-задание. Но спрячьте его или еще лучше вытащите из корня документа.
Поскольку это «тривиальный» репозиторий apt, ему нужна следующая запись apt-sources.list:
deb http://example.org/deb/ ./ # Simple signed repo
Это
Подписание ваших индивидуальных пакетов также тривиально, как только вы настроили свой gpg keys:
dpkg-sig -k dpkg1 -s builder *.deb
(Это должно быть сделано на рабочей станции, где создаются пакеты, а не на веб-сервере репозитория.)
Если вы не нужны подписанные пакеты, тогда вы можете свернуть скрипт обновления до:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
, который все еще может использоваться средними пользователями, но для apt.sources нужен специальный флаг: [!d18 ]
deb [trusted=yes] http://apt.example.org/deb/ ./
Но, пожалуйста, не используйте флаг trusted=yes обычно для всего, или если вы действительно не уверены в происхождении пакета.
<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. Несколько устарел: gemfury . Гораздо более современно: FPM. И моя личная вилка: packagecloud (более ленивый подход для приложений для написания скриптовых языков.)
Ниже приведено подробное описание того, как файлы должны быть организованы и как файлы индекса
Вы также можете использовать инструмент под названием Здесь , если вы хотите установить этот пакет. Это сделает администрацию немного более удобной.
Для тех, кто сталкивается с этой ошибкой после ответа марио:
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.