Hanya menyiapkan repositori yang sederhana namun bertanda tangan di server web. Karena kebanyakan tutorial lain agak ketinggalan jaman atau rumit, saya akan mencoba meniru prosedur di sini. Konfigurasi awal membutuhkan sedikit usaha, tetapi skrip build sederhana membuatnya mudah untuk dikelola. Dan Anda bisa *.deb
memasukkan file baru , kemudian memperbarui, atau membiarkan pekerjaan cron mengatasinya.
Hasilkan beberapa kunci masuk
Pertama, Anda perlu membuat gpg
kunci penandatanganan untuk paket dan repositori Anda. Jadikan (4) kunci penandatanganan RSA, tanpa kata sandi, dan berikan keunikan $KEYNAME
saat diminta. (Contoh lebih lanjut menganggap " dpkg1
" sebagai nama kunci.)
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
Saya bilang tidak ada kata sandi, karena server web Anda tidak memiliki monyet bawaan untuk mengetiknya berulang kali. Dan paket dan repositori yang telah ditandatangani hanya dimaksudkan untuk memuaskan keluhan manajer pembaruan tentang hal itu. Unggah kedua kunci ke /apt/
direktori repositori baru di server web Anda, tetapi hapus secret.gpg
kunci setelah inisialisasi.
Perbarui skrip CGI
Ini adalah skrip shell / CGI pembaruan sederhana untuknya:
#!/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
Tiga gpg
baris hanya perlu dijalankan sekali, untuk menginisialisasi pengaturan GPG di beberapa direktori $GNUPGHOME
(di atas root dokumen). Hapus hanya secret.gpg
setelah sukses.
Salah satu fitur unik dari skrip shell kecil ini adalah ia menerima *.deb
file apa pun yang Anda singgahi, tetapi juga mencari secara rekursif (mulai dari satu tingkat ke atas) untuk yang lain, dan menyinkronkannya. (Butuh .htaccess Options FollowSymLinks
akhirnya.)
Anda dapat menjalankan skrip ini secara manual sebagai CGI atau per cron-job. Tapi sembunyikan, atau lebih baik pindahkan dari root dokumen.
Karena itu adalah repositori apt "trivial" maka perlu apt-sources.list
entri berikut :
deb http://example.org/deb/ ./ # Simple signed repo
Itu cocok untuk repositori arsitektur tunggal, dan jika Anda tidak mengharapkan ratusan paket.
Penandatanganan paket
Menandatangani paket individual Anda juga sepele, setelah Anda menyiapkan kunci gpg Anda:
dpkg-sig -k dpkg1 -s builder *.deb
(Ini harus dilakukan pada workstation tempat paket dibangun, bukan pada server web repositori.)
Repositori yang tidak ditandatangani
Jika Anda tidak perlu paket yang ditandatangani, maka Anda dapat memangkas skrip pembaruan menjadi hanya:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Yang masih dapat digunakan oleh pengguna biasa, tetapi membutuhkan bendera khusus untuk apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Tapi tolong jangan gunakan trusted=yes
bendera biasa untuk semuanya, atau jika Anda tidak benar-benar yakin tentang asal paket.
Untuk kegunaan
Untuk pengguna akhir, cukup masukkan a HEADER.html
ke dalam direktori repositori. Apache mod_auto_index
akan menambahkan catatan itu:
<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>
Alternatif
Ada beberapa alat untuk mengotomatisasi manajemen repositori hari ini. Dan bahkan ada hoster repositori online dan layanan pembuatan paket ( gemfury , packagecloud , bintray dll.)
Alternatif yang agak nyaman adalah prm . Ini adalah skrip Ruby, yang membangun repo APT dan YUM yang kompleks. (Tapi mari kita berharap RPM akhirnya mati dalam waktu dekat ..) - Lebih baik diinstal per gem install prm
.
Dan saya juga telah menulis sebuah skrip kecil untuk mengotomatiskan ini dengan cara yang sama: http://apt.include-once.org/apt-phparchive - Tolong jangan bahwa itu tidak terlalu kuat dan ditulis dalam PHP (untuk sekali, ini kebetulan), dan pada awalnya dimaksudkan untuk DEB, dan bundel RPM-over-APT dan Phar.
Karena ini terkait erat dengan pertanyaan awal, ada juga alat untuk membuat paket Debian lebih mudah. Agak ketinggalan jaman: EPM . Jauh lebih kontemporer: FPM . Dan garpu pribadi saya: XPM (pendekatan yang lebih malas untuk pengemasan aplikasi bahasa scripting.)