Wystarczy skonfigurować proste, ale podpisane repozytorium na serwerze internetowym. Ponieważ większość innych samouczków jest nieco przestarzała lub uciążliwa, postaram się tutaj powtórzyć procedurę. Początkowa konfiguracja wymaga trochę wysiłku, ale prosty skrypt kompilacji ułatwia zarządzanie. Możesz po prostu dodać nowe *.deb
pliki, a następnie zaktualizować lub pozwolić, aby zadanie CRON sobie z tym poradziło.
Wygeneruj klucze do podpisywania
Najpierw musisz utworzyć gpg
klucz do podpisywania dla pakietów i repozytorium. Zrób z niego (4) klucz do podpisywania RSA, bez hasła, i nadaj mu unikat, $KEYNAME
gdy zostaniesz o to poproszony. (Dalsze przykłady zakładają „ dpkg1
” jako keyname).
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
Nie powiedziałem hasła, ponieważ twój serwer nie ma wbudowanej małpy, aby wpisać go wielokrotnie. A podpisane pakiety i repozytorium mają na celu wyłącznie zaspokojenie skarg menedżerów aktualizacji na ten temat. Po prostu prześlij oba klucze do nowego /apt/
katalogu repozytorium na swoim serwerze, ale usuń secret.gpg
klucz po inicjalizacji.
Zaktualizuj skrypt CGI
Oto prosty skrypt powłoki / CGI aktualizacji:
#!/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
Trzy gpg
linie muszą zostać wykonane tylko raz, aby zainicjować konfigurację GPG w jakimś katalogu $GNUPGHOME
(powyżej katalogu głównego dokumentu). Usuń tylko secret.gpg
po sukcesie.
Jedną z unikalnych cech tego skryptu powłoki jest to, że akceptuje wszystkie *.deb
upuszczane pliki, ale także rekurencyjnie wyszukuje inne pliki (zaczynając od jednego poziomu w górę) i umieszcza w nich dowiązania symboliczne. (W Options FollowSymLinks
końcu potrzebuje .htaccess .)
Możesz wykonać ten skrypt ręcznie jako CGI lub na zadanie cron. Ale ukryj go, a najlepiej przenieś go poza katalog główny dokumentu.
Ponieważ jest to „trywialne” repozytorium apt, potrzebuje następującego apt-sources.list
wpisu:
deb http://example.org/deb/ ./ # Simple signed repo
Jest to odpowiednie dla repozytoriów z pojedynczą architekturą, a jeśli nie oczekujesz setek pakietów.
Podpisywanie paczek
Podpisywanie indywidualnych paczek jest również banalne, po skonfigurowaniu kluczy gpg:
dpkg-sig -k dpkg1 -s builder *.deb
(Należy to zrobić na stacji roboczej, na której budowane są pakiety, a nie na serwerze WWW repozytorium).
Repozytorium niepodpisane
Jeśli nie potrzebujesz podpisanych pakietów, możesz obniżyć skrypt aktualizacji, aby po prostu:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Które nadal mogą być używane przez przeciętnych użytkowników, ale wymagają niestandardowej flagi dla apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Ale proszę, nie używaj trusted=yes
flagi zwykle do wszystkiego, lub jeśli nie masz pewności co do pochodzenia paczki.
Dla użyteczności
Użytkownicy końcowi po prostu upuść a HEADER.html
do katalogu repozytorium. Apache mod_auto_index
przygotują tę notatkę:
<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>
Alternatywy
Obecnie dostępnych jest kilka narzędzi do automatyzacji zarządzania repozytoriami. Są nawet hostingi online repozytoriów i usługi budowania pakietów ( gemfury , packagecloud , bintray itp.)
Dość wygodną alternatywą jest prm . Jest to skrypt Ruby, który tworzy złożone repozytorium APT i YUM. (Ale miejmy nadzieję, że RPM w końcu wkrótce się skończy ...) - Najlepiej zainstalować na gem install prm
.
Napisałem również mały skrypt, aby zautomatyzować to w podobny sposób: http://apt.include-once.org/apt-phparchive - Proszę nie, że nie jest on zbyt niezawodny i napisany w PHP (chociaż raz jest to przypadek), i pierwotnie był przeznaczony dla pakietów DEB oraz RPM-over-APT i Phar.
Ponieważ jest to ściśle związane z pierwotnym pytaniem, istnieją również narzędzia do łatwiejszego budowania pakietów Debiana. Nieco przestarzałe: EPM . Znacznie więcej współczesnych: FPM . I moje osobiste rozwidlenie: XPM (bardziej leniwe podejście do pakowania aplikacji w języku skryptowym).