Bagaimana apt-get benar-benar berfungsi?

34

Oke, saya mengerti bagaimana saya dapat menggunakan apt-get {install|upgrade|remove} mypackagesuntuk menginstal, memutakhirkan, atau menghapus binari serta file data konfigurasi dan dependensi (sebenarnya, removehanya akan menghapus binari kecuali jika bendera tambahan disediakan).

Saya tidak mencari bagaimana itu digunakan sebagai manmenggambarkan ini, tetapi apa yang dilakukan tingkat tinggi. Tujuan akhir saya adalah untuk membuat sarana bagi saya untuk menginstal dan mengelola beberapa perangkat lunak khusus (dibuat oleh file make) pada beberapa mesin jarak jauh, dan saya perlu belajar lebih banyak tentang prosesnya. Jika jawaban atas pertanyaan ini didasarkan pada distribusi mana yang digunakan, harap sesuaikan dengan Debian.

Selain cara kerjanya secara umum, saya memiliki pertanyaan spesifik berikut:

  1. Bagaimana klien yang mengakses repositori apt melacak file?
  2. Haruskah repositori di-host pada sistem operasi yang sama (mis. Apakah repositori dapat di-host di redhat)?
  3. Bagaimana lokasi untuk menginstal file ditentukan? Apakah ini ditentukan oleh .debfile?
  4. Bagaimana mesin jarak jauh mengakses repositori? Apakah itu hanya ftp (s) atau http (s)?
  5. Apakah mesin yang meng-hosting repositori menjalankan perangkat lunak khusus (seperti gitlab untuk repositori git), atau apakah itu hanya beberapa sistem file terstruktur?
pengguna1032531
sumber

Jawaban:

47

Anda perlu melihat di https://wiki.debian.org/Packaging - tutorial pengemasan di sana akan banyak membantu Anda, serta bagian dari panduan pengelola baru.

Untuk pertanyaan Anda, agar:

  1. Repositori berisi file "daftar". Misalnya., Http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updatemengunduh file daftar ini, dan menyimpannya di /var/lib/apt/lists. File daftar mencantumkan semua paket termasuk sekelompok metadata dan URL relatif untuk menemukan .deb di. (Ini adalah file teks biasa yang dapat dibaca manusia, jadi Anda bisa melihatnya).

  2. OS tidak masalah. Anda dapat meng-host-nya di Windows, jika mau. (Yah, Anda mungkin akan mengalami masalah dengan nama file yang Windows tidak suka.) (Lihat juga # 4 dan # 5).

  3. Ya, itu ada di dalam file deb. File deb sebenarnya adalah arsip (menggunakan ar). Di dalamnya ada beberapa file tar; salah satunya adalah (pada dasarnya) diekstraksi ke /.

  4. Itu hanya HTTP (atau HTTPS, atau FTP, atau ... apt-get mendukung banyak protokol). Tidak ada yang istimewa. Perhatikan bahwa ada file Rilis, ditandatangani dengan gpg, yang menjamin integritas bahkan tanpa HTTPS. Mirror Debian kebanyakan menggunakan HTTP, bukan HTTPs. (Beberapa mendukung HTTPS juga untuk kerahasiaan).

  5. Itu hanya sistem file terstruktur.

Ikhtisar tingkat tinggi yang cepat tentang bagaimana apt-get berinteraksi dengan sumber paket:

  1. Anda mengonfigurasi sumber mana yang harus dilihat dalam file sources.list Anda. Pertimbangkan garis seperti:

    deb http://http.us.debian.org/debian/ stretch main
    

    debmengatakan ini adalah sumber untuk mendapatkan file .deb (binary); lalu ada awalan URL, suite / rilis ("stretch"), dan komponen ("main").

  2. apt-get memiliki daftar arsitektur, ia mendapatkannya dari dpkg. Mari mengatakan dpkg --print-architectureadalah amd64. apt-get sekarang dapat membangun URL yang sebenarnya akan diunduh dari, dengan menggabungkan awalan URL, kata "dists", suite, komponen, dan arsitektur. Kemudian ia mengatasi beberapa nama file tetap, seperti "Packages.xz". Itu memberikan URL di atas (dalam # 1). Ada beberapa file lagi dengan nama / jalur yang ditentukan, seperti file Release http://http.us.debian.org/debian/dists/stretch/Release dan tanda tangannya (sama, dengan .gpg ditambahkan). Ini semua adalah file teks biasa (mungkin dikompresi). File rilis berisi checksum untuk file-file lain yang akan diunduh oleh apt-get, seperti Packages.xz.

  3. File Packages.xz mencantumkan semua paket di suite / nama kode / arsitektur itu. Ini juga memberikan path tempat file itu berada; misalnya pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Ketika Anda meminta apt-get untuk mengunduh paket, ia menggunakan lokasi itu + URL dasar untuk mengunduh paket, sehingga paketnya ada di http://http.us.debian.org/debian/pool/main/0/0ad /0ad_0.0.21-2_amd64.deb

  5. Direktori menarik lainnya adalah sourcebukan binary-amd64. Itu digunakan untuk deb-srcentri Anda ; ini berisi info tentang paket-paket sumber (dan sebaliknya cukup mirip).

  6. Ada beberapa hal lain (semuanya opsional, saya percaya) yang dapat menjadi bagian dari repositori (yaitu, tersedia melalui HTTP): berbeda antara versi berbeda dari file Packages.xz; terjemahan deskripsi paket, daftar lengkap setiap file yang dapat diinstal dan paket miliknya (Contents-amd64.gz, digunakan oleh eg, apt-file, bukan oleh apt-get) dll. Kemungkinan ini tidak relevan bagi Anda, tetapi Anda dapat melihat semuanya dengan menjelajahi http://http.us.debian.org/debian/dists/stretch/ ; kebanyakan dari mereka adalah file teks biasa.

Semua file ini adalah teks biasa. Secara teori, mereka dapat dibuat dengan tangan. Dalam praktiknya, semua orang menggunakan salah satu alat generasi repositori ini . Di sini — dan saya mengingatkan ini adalah pilihan yang dibuat sejak lama, jadi mungkin sudah ketinggalan zaman — kami menggunakan mini-dinstall. Output dari alat-alat itu adalah file biasa atau, paling buruk, symlink. Anda dapat rsync mereka ke server web apa pun yang Anda inginkan.

derobert
sumber
Kalahkan aku untuk itu ;-). unix.stackexchange.com/q/285635/86440 mencakup aspek integritas hal-hal (poin 4). Dukungan FTP pada sisi mirror telah dinonaktifkan baru-baru ini IIRC.
Stephen Kitt
Mengenai # 2, debian.org/doc/manuals/distribute-deb/… menyatakan secara berbeda. Terima kasih
user1032531
Mengenai # 5, apa gunanya wiki.debian.org/DebianRepository/…
user1032531
1
@ user1032531 # 2. Membuat paket paling baik dilakukan di Debian. Tapi server web Anda bisa apa saja. (Biasanya, Anda membuat paket pada host host Anda, mungkin bahkan seluruh struktur repositori, lalu mengunggahnya ke server web.) # 5. Alat-alat itu membantu Anda membangun sistem file terstruktur, termasuk semua file daftar, file rilis yang ditandatangani, dll. (Mereka juga mungkin paling mudah dijalankan di Debian).
derobert
2
Paket @FaheemMitha (dari beberapa kompresi, apt lebih suka .xz) pasti diunduh, berakhir di /var/lib/apt/lists/. Konten diunduh oleh apt-file dan auto-apt.
derobert