it-swarm-id.com

Bagaimana cara mengatur repositori APT?

Saya ingin mengatur repositori APT pada server yang akan menyediakan beberapa paket.

Apakah ada cara untuk mengaturnya tanpa menginstal perangkat lunak apa pun di server?

Bagaimana cara mengatur file?


Edit: Saya pasti melakukan kesalahan ... bisakah seseorang tolong saya? Saya memiliki repositori di http://quickmediasolutions.com/apt/dists

Saya tidak yakin di mana atau apa, tetapi ada yang salah konfigurasi. Saat ini saya hanya memiliki satu paket dan itu untuk semua arsitektur.

Inilah yang telah ditambahkan ke /etc/apt/sources.list saya:

deb http://quickmediasolutions.com/apt stable main
52
Nathan Osman

Menyiapkan repositori sepele sangat mudah menggunakan paket dpkg-scanpackage. Halaman ini menjelaskan cara mengatur repo yang sepele, dan yang ini menjelaskan cara menggunakannya (gulir ke bawah ke contoh 4).

26
Michael Crenshaw

Cukup atur repositori sederhana namun bertanda tangan pada 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 memasukkan file *.deb baru, kemudian memperbarui, atau membiarkan pekerjaan cron mengatasinya.

Hasilkan beberapa kunci masuk

Pertama, Anda perlu membuat kunci penandatanganan gpg untuk paket dan repositori Anda. Jadikan (4) kunci penandatanganan RSA, tanpa kata sandi, dan berikan $KEYNAME unik ketika diminta. (Contoh lebih lanjut menganggap "dpkg1" sebagai keyname.)

 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 direktori repositori /apt/ baru di server web Anda, tetapi hapus kunci secret.gpg setelah inisialisasi .

Perbarui skrip CGI

Ini adalah skrip pembaruan Shell/CGI 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 baris gpg hanya perlu dijalankan satu kali, 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 dapat menerima file *.deb apa pun yang Anda singgahi, tetapi juga mencari secara rekursif (mulai dari satu tingkat ke atas) untuk yang lain, dan menyinkronkannya dengan. (Perlu .htaccess Options FollowSymLinks pada 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 dibutuhkan entri apt-sources.list 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 rata-rata, tetapi membutuhkan bendera khusus untuk apt.sources:

deb [trusted=yes] http://apt.example.org/deb/ ./

Tapi tolong jangan gunakan flag trusted=yes terbiasa untuk semuanya, atau jika Anda tidak benar-benar yakin tentang paket Origin.

Untuk kegunaan

Untuk pengguna akhir, cukup masukkan 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 kompleks APT dan repo YUM. (Tapi mari kita berharap RPM akhirnya mati dalam waktu dekat ..) - Sebaiknya 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 - Harap 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.)

40
mario

Iya nih. Kamu bisa melakukan ini. Anda hanya perlu mengatur file dengan cara yang benar dan membuat file indeks. Jika Anda meletakkan struktur direktori di dalam root dokumen server web Anda, paket hanya dapat diakses melalui server web.

Di Sini adalah deskripsi terperinci bagaimana file perlu diatur dan bagaimana file indeks dibuat.

Anda juga dapat menggunakan alat bernama reprepro jika Anda ingin menginstal satu paket itu. Ini akan membuat administrasi sedikit lebih nyaman.

7
txwikinger

Anda mungkin juga dapat mempertimbangkan Launchpad PPA

2
ups

Bagi siapa pun yang menghadapi kesalahan ini setelah mengikuti jawaban mario:

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

lakukan hal berikut:

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

Saya meletakkan file *.deb saya di folder debs.

0
theeminence