Как настроить репозиторий APT?

49

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

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

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

Изменить: Я должен что-то делать неправильно ... может кто-то мне помочь? У меня есть репозиторий на Ссылка

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

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

deb http://quickmediasolutions.com/apt stable main
    
задан Nathan Osman 31.07.2010 в 02:33
источник

5 ответов

25

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

ответ дан mac9416 31.07.2010 в 02:55
источник
37

Просто настройте простой, но подписанный репозиторий на веб-сервере. Поскольку большинство других учебников несколько устарели или громоздки, я попытаюсь воспроизвести процедуру здесь. Первоначальная конфигурация требует немного усилий, но простой скрипт сборки позволяет легко управлять. И вы можете просто добавить новые файлы *.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 или per 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 в каталог репозитория. Apaches 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 .

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

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

    
ответ дан mario 22.12.2011 в 09:35
7

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

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

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

    
ответ дан txwikinger 31.07.2010 в 02:44
2

Вы также можете рассмотреть Launchpad PPA

    
ответ дан ups 31.07.2010 в 13:23
0

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

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 .

    
ответ дан theeminence 25.01.2016 в 08:05