Bir APT deposu nasıl kurulur?


52

Birkaç paket sağlayacak bir sunucuda APT deposu kurmak istiyorum.

Birini kurmak için bir yolu var mı olmadan sunucu üzerinde herhangi bir yazılım yüklemeden?

Dosyalar nasıl düzenlenmeli?


Düzenleme: Yanlış bir şey yapıyor olmalıyım ... biri bana yardım edebilir mi? Http://quickmediasolutions.com/apt/dists adresinde depoya sahibim

Nerede veya ne olduğundan emin değilim, ama bir şey yanlış yapılandırılmış. Şu anda sadece bir paketim var ve tüm mimariler için.

İşte benim eklenmiş olanlar /etc/apt/sources.list:

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

İndirdiğiniz uygulamaların ne tür bir lisans içeriklerini düzenleyebilir ve ekleyebilir misiniz? Bu özel kullanım için mi, yoksa dağıtmayı mı planlıyorsunuz, vb.
Jorge Castro

@Jorge: Ne demek istiyorsun? Hangi uygulamalar?
Nathan Osman

1
Paketin OSS olup olmadığını belirlemeye çalışıyordum, sadece launchpad'i kullanabilirsiniz.
Jorge Castro

@Jorge: Hayır, OSS değil. (Aslında, yazmadığım tek uygulama bu değil.)
Nathan Osman

Yanıtlar:


26

Dpkg-scanpackages kullanarak önemsiz bir depo oluşturmak çok kolaydır. Bu sayfa önemsiz bir repo ayarlamayı açıklar ve bu da nasıl kullanılacağını açıklar (örnek 4'e gidin).


Çalışması için biraz sorun yaşıyor. Lütfen soru güncellememe bakın.
Nathan Osman,

1
Bir "otomatik" depo oluşturmaya çalışıyor gibisiniz. Bir (veya sadece birkaç) paket için, önemsiz bir repo kullanarak çok daha iyi olacaksınız. Packages.gz'nizi taşımayı ve quickmediasolutions.com/apt/binary adresine kadar borçlanmayı deneyin . O zaman kaynağınız olacak deb http://quickmediasolutions.com/apt binary/.
Michael Crenshaw

2
Önemsiz depolar sabitleme sırasında sorun yaratır, ancak evet, yalnızca birkaç paket için bir depo oluşturmanın en hızlı / en kolay yoludur. Sadece 2 - 3 paketler için havuzlu bir depo oluşturmak aptalca görünüyor.
Tim Post

George, bu işi hiç yapabildin mi?
Michael Crenshaw

@mac: Şey .... Henüz denemek için zamanım olmadı :) Her şeyi bir PPA'ya yükleyerek bitirdim.
Nathan Osman

40

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 *.debdosyaları bırakabilir , sonra güncelleyebilir veya bir cron işinin bunu yapmasına izin verebilirsiniz .

Bazı imzalama anahtarları oluşturun

İlk önce gpgpaketler ve havuzunuz için bir imzalama anahtarı oluşturmanız gerekir . Bir (4) RSA imzalama anahtarı, parola yok ve $KEYNAMEistendiğinde benzersiz olmasını sağlayın. (Diğer örnekler dpkg1anahtar 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

gpgGPG 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.gpgbaşarıdan sonra silin .

Bu küçük kabuk betiğinin benzersiz bir özelliği, bıraktığınız *.debdosyaları 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.listgiriş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=yesbayrağı 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.htmliçin depo dizinine bir a bırakmanız yeterlidir. Apaches mod_auto_indexbu 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.)


1
Bu repoyu kullanmak istediğimde gpg anahtarını nasıl eklerim?
Bruce Sun

1
Genellikle bir şey gibiwget …/public.gpg -O- | apt-key add -
mario

Birden fazla mimariyi desteklemek isteseydim ne değiştirmem gerekirdi?
starbeamrainbowlabs

1
@starbeamrainbowlabs Tamamen emin değilim ama bence dpkg-scanpackages -myeterli olabilir. Aynı mimaride tüm mimarileri hala listeleyecek. Ancak, her bir .deb benzersiz bir isme sahip olduğu sürece / veya çalışması gereken farklı alt dizinlerde (amd64 /, tümü /) saklanır. Başka, daha karmaşık depo araçlarından birine gider.
mario

7

Evet. Bunu yapabilirsiniz. Dosyaları doğru şekilde düzenlemeniz ve dizin dosyalarını oluşturmanız yeterlidir. Dizin yapısını web sunucunuzun belge köküne koyarsanız, paketlere web sunucusu üzerinden erişilebilir.

İşte dosyaların nasıl organize edilmesi gerektiği ve indeks dosyalarının nasıl oluşturulduğu hakkında ayrıntılı bir açıklama.

Bir paketi kurmaya istekliysen, reprepro adlı bir araç da kullanabilirsin . Bu, yönetimi biraz daha uygun hale getirecektir.


@txwikinger: Paketleri kuramamamın nedeni, sunucunun centOS kullanmasıdır :)
Nathan Osman

İyi. gerek yok Her şeyi farklı bir bilgisayarda oluşturabilir ve tüm ağacı centos sunucusuna
bağlayabilirsiniz

Evet, kesinlikle reprepro kullanımı ikinci olur. Hayatınızı çok kolaylaştıracak. Repoyu farklı bir bilgisayarda oluşturmak, imzalama anahtarınızı daha iyi korumanıza izin vermesi durumunda bile bir özellik olabilir.
andol

@ andol & @txwikinger: Deniyorum ama sorunla karşılaşıyorum. Lütfen güncellenmiş soruma bakın.
Nathan Osman,

Dists dosyanız için hala ihtiyacınız olacak ./binary-<specific arch>.
andol


0

Mario'nun cevabını takip ettikten sonra bu hatayla karşılaşanlar için:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

aşağıdakileri yapın:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

*.debDosyalarımı debsklasöre koydum .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.