Sadece bir web sunucusu üzerinde basit fakat imzalı bir havuz kurun . Diğer derslerin çoğu biraz tarihli veya hantal olduğu için, prosedürü burada tekrarlamaya çalışacağım. İlk yapılandırma biraz çaba gerektirir, ancak basit derleme betiğinin yönetilmesi kolaydır. Ve yeni *.deb
dosyaları bırakabilir , sonra güncelleyebilir veya bir cron işinin bunu yapmasına izin verebilirsiniz .
Bazı imzalama anahtarları oluşturun
İlk önce gpg
paketler ve havuzunuz için bir imzalama anahtarı oluşturmanız gerekir . Bir (4) RSA imzalama anahtarı, parola yok ve $KEYNAME
istendiğinde benzersiz olmasını sağlayın. (Diğer örnekler dpkg1
anahtar adı olarak " " varsaymaktadır .)
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
Parola yok dedim, çünkü web sunucunuzda tekrar tekrar yazmak için yerleşik bir maymun yoktur. İmzalı paketler ve depo yalnızca güncelleme yöneticilerinin bu konudaki şikayetlerini tatmin etmek içindir. Her iki anahtarı da /apt/
web sunucunuzdaki yeni depo dizinine yükleyin , ancak başlattıktan sonrasecret.gpg
anahtarı silin .
CGI betiğini güncelle
Bu basit güncelleme kabuğu / CGI betiği:
#!/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 kurulumunu bazı dizinde $GNUPGHOME
(belge kökünün üstünde) başlatmak için üç satırın yalnızca bir kez yürütülmesi gerekir . Sadece secret.gpg
başarıdan sonra silin .
Bu küçük kabuk betiğinin benzersiz bir özelliği, bıraktığınız *.deb
dosyaları kabul etmesi, aynı zamanda yinelemeli olarak arama yapması (bir seviye yukarıdan başlayarak) ve diğerlerini de içine çekmesidir Options FollowSymLinks
.
Bu betiği elle CGI olarak veya cron-job başına çalıştırabilirsiniz. Ancak onu gizleyin veya daha iyisi henüz belge kökünün dışına çıkarın.
Bir "önemsiz" apt deposu olduğu için aşağıdaki apt-sources.list
girişe ihtiyacı var :
deb http://example.org/deb/ ./ # Simple signed repo
Tek mimarlık havuzları için uygundur ve yüzlerce paket beklemiyorsanız bu uygun.
Paket imzalama
Tek tek paketlerinizi imzalamak da çok önemlidir, bir kez gpg anahtarlarınızı kurduğunuzda:
dpkg-sig -k dpkg1 -s builder *.deb
(Bu, paketlerin oluşturulduğu iş istasyonunda, depo web sunucusunda değil, yapılmalıdır.)
İmzasız havuz
İmzalı paketlere ihtiyacınız yoksa, güncelleme betiğini aşağıdakine aşağı çekebilirsiniz:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Hala ortalama kullanıcılar tarafından kullanılabilecek ancak aşağıdakiler için özel bir bayrağa ihtiyacı var apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Ama lütfen trusted=yes
bayrağı her şey için alışkanlıkla kullanmayın , ya da paketin kaynağından tam olarak emin değilseniz.
Kullanılabilirlik için
Son kullanıcılar HEADER.html
için depo dizinine bir a bırakmanız yeterlidir. Apaches mod_auto_index
bu notu hazırlayacak:
<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>
Alternatifler
Bugünlerde depo yönetimini otomatikleştirmek için birkaç araç var. Ayrıca çevrimiçi depolar ve paket oluşturma hizmetleri bile var ( gemfury , packagecloud , bintray vs.)
Oldukça uygun bir alternatif prm . Karmaşık APT ve YUM repoları oluşturan bir Ruby betiğidir. (Ancak RPM'nin nihayet kısa bir süre sonra öleceğini umalım.) - En iyi şekilde kurulu gem install prm
.
Ayrıca bunu benzer şekilde otomatikleştirmek için küçük bir senaryo yazdım: http://apt.include-once.org/apt-phparchive - Lütfen PHP’de aşırı sağlam ve yazılmamış olmadığından emin olun (bir kez olsun, bu rastlantısaldır), ve başlangıçta DEB ve RPM over-APT ve Phar paketleri içindir.
Bu, asıl soru ile yakından ilgili olduğu için, Debian paketlerini daha kolay bir şekilde oluşturmak için araçlar da var. Biraz modası geçmiş: EPM . Çok daha çağdaş: FPM . Ve benim kişisel çatalım: XPM (betik dili uygulamaları paketlemek için daha tembel bir yaklaşım.)