Як налаштувати сховище APT?


52

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

Чи є спосіб налаштувати його без встановлення будь-якого програмного забезпечення на сервер?

Як потрібно організувати файли?


Редагувати: я мушу щось робити не так ... може мені хтось допомогти? У мене є сховище за адресою http://quickmediasolutions.com/apt/dists

Я не впевнений, де чи що, але щось неправильно налаштовано. Наразі у мене є лише один пакет, і це для всіх архітектур.

Ось що було додано до мого /etc/apt/sources.list:

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

Чи можете ви відредагувати та додати, яку саме ліцензію мають завантажені вами програми? Це для приватного користування чи ви плануєте їх розповсюдження тощо?
Хорхе Кастро

@Jorge: Що ти маєш на увазі? Які програми?
Натан Осман

1
Я намагався визначити, чи пакет був OSS, ви могли просто використовувати стартовий блок.
Хорхе Кастро

@Jorge: Ні, це не ОС. (Насправді, це майже єдиний додаток, про який я писав, це не так.)
Натан Осман,

Відповіді:


26

Налаштувати тривіальне сховище дуже просто за допомогою dpkg-scanpacgeges. Ця сторінка пояснює, як налаштувати тривіальне репо, і ця пояснює, як його використовувати (прокрутіть вниз до прикладу 4).


Виникли трохи проблем, щоб змусити його працювати. Будь ласка, дивіться моє оновлення до питання.
Натан Осман

1
Схоже, ви намагаєтеся встановити "автоматичне" репо. Для одного (або декількох) пакетів вам буде набагато краще використовувати тривіальне репо. Спробуйте перемістити Packages.gz і дебютуйте повністю до quickmediasolutions.com/apt/binary . Тоді ваше джерело буде deb http://quickmediasolutions.com/apt binary/.
Майкл Креншо

2
Тривіальні репости представляють проблеми при закріпленні, але так, вони є найшвидшим / найпростішим способом налаштування репо для лише декількох пакетів. Здавалося б, створити об'єднане репо лише для 2 - 3 пакетів.
Tim Post

Джордж, ти коли-небудь зміг зробити цю роботу?
Майкл Креншо

@mac: Ну .... я ще не встиг спробувати це :) Я закінчив просто завантажувати все в PPA.
Натан Осман

40

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

Оскільки це "тривіальне" сховане сховище, йому потрібен наступний 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 тощо)

  • Досить зручною альтернативою є прим . Це сценарій Ruby, який будує складні APT і YUM repos. (Але сподіваємося, що RPM нарешті скоро згасне.) - Найкраще встановити per gem install prm.

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

Оскільки це тісно пов'язане з оригінальним питанням, є також інструменти для більш легкої побудови пакунків Debian. Дещо застаріла: EPM . Набагато сучасніший: FPM . І моя особиста вилка для цього: XPM (більш лінивий підхід до упаковки мов скриптових програм.)


1
Як додати ключ gpg, коли я хочу використовувати це репо?
Брюс Нд

1
Зазвичай щось на кшталтwget …/public.gpg -O- | apt-key add -
Маріо

Що мені потрібно змінити, якщо я хотів би підтримувати декілька архітектур?
starbeamrainbowlabs

1
@starbeamrainbowlabs Не зовсім впевнений, але я думаю, що це dpkg-scanpackages -mможе бути достатньо. Він все ще перелічить усі архітектури в одному файлі випуску. Але поки кожен .deb має унікальне ім’я / або зберігається у різних підкаталогах (amd64 /, all /), він повинен працювати. В іншому випадку знайдіть один із складніших інструментів сховища.
Маріо

7

Так. Ви можете це зробити. Вам просто потрібно впорядкувати файли правильним чином та створити файли індексу. Якщо ви помістите структуру каталогів всередині кореня документа вашого веб-сервера, пакети можуть бути доступні лише через веб-сервер.

Ось детальний опис того, як потрібно впорядковувати файли та як створюються файли індексу.

Ви також можете використовувати інструмент, який називається reprepro, якщо ви готові встановити цей один пакет. Це зробить адміністрацію трохи зручніше.


@txwikinger: Причина, що я не можу встановити пакунки, полягає в тому, що на сервері працює centOS :)
Натан Осман,

Ну. вам не потрібно. Ви можете створити все на іншому комп’ютері та просто rsync все дерево на сервер centos
txwikinger

Так, я б, безумовно, друге використання репрепро. Це значно полегшить ваше життя. Створення РЕПО на іншому комп'ютері може бути навіть функцією, якщо це дозволяє краще захистити ключ підпису.
andol

@andol & @txwikinger: Я намагаюся зіткнутися з проблемами. Перегляньте моє оновлене запитання.
Натан Осман

Для вашого списку вам знадобиться ./binary-<specific arch>.
andol


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папку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.