Bagaimana cara cepat membuat repositori apt lokal untuk paket acak menggunakan distribusi linux berbasis Debian?

20

Beberapa situasi memerlukan instalasi paket lokal secara manual dpkg -i <packagename>. Terkadang mungkin lebih bermanfaat untuk memanfaatkan fungsionalitas dari aptpaket tersebut sehingga pertanyaannya adalah:

Bagaimana Anda dengan cepat membuat repositori lokal untuk paket acak menggunakan distribusi linux berbasis Debian - seperti Xubuntu 13.04 / Ubuntu?


sumber
Hanya FYI. Hal yang biasa adalah mengikuti dpkg -i <packagename>dengan apt-get -f installmenarik paket yang diperlukan. Juga, hal yang biasa untuk membuat repo yang tepat untuk Debian adalah reprepro.
Faheem Mitha
Saya menemukan reprepro membantu
Gilles 'SO- stop being evil'
Terima kasih atas komentar anda @Faheem Mitha: dapat Anda silahkan singkat memperluas mengapa berjalan aptdengan --fix-brokenakan diperlukan setelah menginstal paket lokal dengan dpkg -i? Tidakkah dpkg menangani itu? Saya membacanya mungkin diperlukan pertama kali apt dijalankan? @ FM & Gilles: Tentang reprepro . Tampaknya berguna jika saya bisa membuatnya bekerja (tidak yakin tentang dir struct, isi 3 file atau params saat runtime). Akan mencoba lagi dan memperbarui atau memposting pertanyaan lengkap.
1
@ illuminÉ: dpkgtidak menyelesaikan dependensi, tetapi apttidak. dpkgakan memperingatkan dependensi yang rusak, tetapi tingkat rendah, jadi tidak akan berusaha memperbaikinya. Yang dpkg -i *.debdiikuti apt-get -f installadalah prosedur standar. Ada bug wishlist untuk aptmenangani kasus instalasi paket lokal, dan bahkan ada patch, saya pikir, tetapi belum diimplementasikan. Lihat apt-get install dapat menginstal file paket lokal, juga , awalnya diajukan pada tahun 1999.
Faheem Mitha
@ illuminÉ Mengekspresikan minat pada fitur ini tidak ada salahnya. Saya pikir semakin banyak orang yang (dengan sopan) menyatakan minat, semakin besar kemungkinan hal itu akan diterapkan. Perhatikan juga bahwa gdebi adalah alternatif, seperti yang tercantum dalam laporan bug. Itu adalah bagian dari alasan itu belum dilaksanakan, saya pikir. Meskipun memiliki fungsi inti semacam itu dari apt akan lebih baik daripada memiliki fungsi ini sebagai bagian dari paket lain.
Faheem Mitha

Jawaban:

29

Ini harus dibedakan dari situasi di mana Anda mencoba untuk mereplikasi pohon paket lengkap dari repositori resmi dan prioritas sumber fine tuning . Paket acak berarti paket virtual, paket yang dikompilasi secara lokal atau disalin sedikit demi sedikit untuk tujuan pengujian. Berikut ini adalah pengaturan sederhana berdasarkan dokumentasi yang sudah usang .

Pertama, buat direktori untuk meng-host paket:

mkdir <packagedir>

Kemudian pindahkan file paket deb Anda di sana. Jalankan perintah ini dari direktori di atas yang baru saja kita buat (pastikan izin mengizinkan ini!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

Sekarang membuat file dengan ekstensi .listdi /etc/apt/sources.list.d/dengan isi:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

dan perbarui database apt:

apt-get update

Pada titik ini paket-paket di repositori lokal kami dapat diinstal seperti paket lain yang menggunakan apt-get install <packagename>. Ketika paket baru ditambahkan ke repositori lokal, dpkg-scanpackagesperintah yang ditentukan harus dikeluarkan lagi untuk memperbarui file Packages.gz dan aptharus diperbarui sebelum paket baru tersedia. Semoga ini bisa bermanfaat untuk keperluan pengujian .

pengguna44370
sumber
6
Dengan apt 1.1 yang baru, orang perlu [trusted=yes]antara debdan file:///URI (lihat sources.list(5)halaman manual), jika tidak apt-get updategagal karena kurangnya tanda tangan.
vinc17
2

Jika Anda ingin membuat repo dengan struktur penuh yang Anda perlukan untuk alat-alat seperti debootstrap, cara paling sederhana yang saya temukan adalah:

  1. Buat direktori repositori.

    # mkdir -p /opt/debian
    
  2. Buat subdirektori conf.

    # mkdir /opt/debian/conf
    
  3. Buat file / opt / debian / conf / distribusi dengan konten seperti ini (sesuaikan yang sesuai dengan distribusi yang Anda gunakan):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. Impor paket Anda dengan reprepro.

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. Impor banyak paket dengan shell-for-loop, mis. Segala sesuatu dari cache APT Anda:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

Ini akan membuat arsip yang tidak ditandatangani. Ini dapat digunakan dengan debootstrap dengan opsi --no-check-gpg.

Andrew Klaassen
sumber