Apt-get gerçekten nasıl çalışır?


34

Tamam, apt-get {install|upgrade|remove} mypackagesikili dosyaları ve bunların yapılandırma veri dosyalarını ve bağımlılıklarını yüklemek, yükseltmek veya kaldırmak için nasıl kullanabileceğimi biliyorum (aslında, removeek bayraklar sağlanmadıkça sadece ikili dosyaları kaldıracaktır).

Bunu mantarif ettiği şekilde nasıl kullanıldığını aramıyorum , fakat ne yaptığını yüksek düzeyde arıyorum . Son hedefim, birden fazla uzak makineye bazı özel yazılımları (make dosyası ile oluşturulmuş) kurup yönetmem için bir araç oluşturmak ve işlem hakkında daha fazla bilgi edinmem gerekiyor. Bu sorunun cevapları hangi dağıtımın kullanıldığına dayanıyorsa, lütfen Debian'a uyarlayın.

Genel olarak nasıl çalıştığına ek olarak, aşağıdaki özel sorularım var:

  1. Apt deposuna erişen istemci dosyaları nasıl takip eder?
  2. Depo aynı işletim sisteminde barındırılmalı mıdır (örn. Uygun depo redhat'ta barındırılabilir mi)?
  3. Dosya yükleme yerleri nasıl belirlenir? Bu .debdosya tarafından belirtilmiş mi?
  4. Uzak bir makine depoya nasıl erişiyor? Sadece ftp (ler) mi yoksa http (ler) mi?
  5. Depoyu barındıran makine özel bir yazılım mı (git deposu için gitlab gibi) çalıştırıyor mu, yoksa sadece yapılandırılmış bir dosya sistemi mi?

Yanıtlar:


47

Https://wiki.debian.org/Packaging'e bir göz atmanız gerekiyor - buradaki paketleme eğitimi, yeni bakım kılavuzunun bazı bölümlerinin yanı sıra size çok yardımcı olacaktır.

Sorularınıza gelince, sırayla:

  1. Depo "list" dosyalarını içerir. Örneğin, http://http.us.debian.org/debian/dists/stretch/main/binary-amd64/Packages.xz . apt-get updateBu liste dosyalarını indirir ve bunları içine kaydeder /var/lib/apt/lists. Liste dosyaları, bir grup meta veri ve .deb dosyasını bulmak için göreceli bir URL içeren tüm paketleri listeler. (Onlar insan tarafından okunabilen düz metin dosyalarıdır, o yüzden sadece bakabilirsiniz).

  2. İşletim sistemi önemli değil. İsterseniz Windows'ta da barındırabilirsiniz. (Belkide Windows'un sevmediği dosya isimleriyle ilgili sorun yaşayabilirsiniz.) (Ayrıca bakınız # 4 ve # 5).

  3. Evet, deb dosyasının içinde. Bir deb dosyası aslında bir arşivdir (kullanıyor ar). İçinde bazı tar dosyaları var; bunlardan biri (esas olarak) ayıklanır /.

  4. Sadece HTTP (veya HTTPS veya FTP veya ... apt-get bir çok protokolü destekliyor). Yine de özel bir şey yok. Gpg ile imzalanmış ve HTTPS olmadan bile bütünlüğü garanti eden Sürüm dosyalarının olduğunu unutmayın. Debian aynaları çoğunlukla HTTP kullanır, HTTP değil. (Gizlilik için de birkaç HTTPS desteği).

  5. Sadece yapılandırılmış bir dosya sistemi.

Apt-get'in bir paket kaynağıyla nasıl etkileşime girdiğine dair hızlı ve üst düzey bir bakış:

  1. Kaynaklara bakmak için hangi kaynakları ayarlayacağınızı yapılandırın. Gibi bir satır düşünün:

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

    debbunun, get. .deb (ikili) dosyalar için bir kaynak olduğunu söylüyor; Sonra URL öneki, suite / release ("stretch") ve bileşen ("main") var.

  2. apt-get bir mimarlık listesine sahiptir, dpkg'dan alır. Hadi diyelim dpkg --print-architectureolduğunu amd64. apt-get, URL-ön ekini, "dists" kelimesini, paketi, bileşeni ve mimariyi birleştirerek, gerçekte indireceği URL’leri oluşturabilir. Sonra, "Packages.xz" gibi bir kaç sabit dosya adına yapıştırılır. Bu, yukarıdaki URL’yi verir (# 1’de). Http://http.us.debian.org/debian/dists/stretch/Release ve imzası (aynı, .gpg eklenmiş) aynı) gibi tanımlanmış adları / yolları olan birkaç dosya daha vardır . Bunların hepsi (muhtemelen sıkıştırılmış) düz metin dosyalarıdır. Yayın dosyası, apt.j'nin Packages.xz gibi indirileceği diğer dosyalar için sağlama toplamı içeriyor.

  3. Packages.xz dosyası , bu paket / kod adı / mimarisindeki bütün paketleri listeler . Ayrıca, o dosyanın bulunduğu yolu da verir ; örneğin pool/main/0/0ad/0ad_0.0.21-2_amd64.deb.

  4. Bir paketi indirmek için apt-get sorduğunuzda, paketi indirmek için bu konumu + temel URL'yi kullanır, böylece bu paket http://http.us.debian.org/debian/pool/main/0/0ad adresindedir. /0ad_0.0.21-2_amd64.deb

  5. Diğer ilginç dizin sourceyerine binary-amd64. Bu deb-srcgirişleriniz için kullanılır ; Kaynak paketler hakkında bilgi içerir (ve aksi halde oldukça benzerdir).

  6. Deponun bir parçası olabilecek başka şeyler de var (hepsi isteğe bağlı, inanıyorum): (yani, HTTP üzerinden erişilebilir): Packages.xz dosyasının farklı sürümleri arasında farklılık gösterir; paket açıklamalarının tercümesi, kurulabilir her dosyanın tam listesi ve hangi pakete ait olduğu (Contents-amd64.gz, örneğin apt-get tarafından değil, apt-file tarafından kullanılır, örneğin apt-get tarafından değil). ancak hepsini http://http.us.debian.org/debian/dists/stretch/ adresinde gezerek görebilirsiniz ; birçoğu düz metin dosyalarıdır.

Tüm bu dosyalar düz metindir. Teorik olarak elle yaratılabilirler. Uygulamada, herkes bu depo oluşturma araçlarından birini kullanıyor . Burada — ve bunun uzun zaman önce yapılan bir seçim olduğuna dikkat ediyorum, bu yüzden modası geçmiş olabilir - mini-dinstall kullanıyoruz. Bu araçların çıktısı sıradan dosyalar veya en kötü ihtimalle sembolik işaretlerdir. Onları istediğiniz web sunucusuna devredebilirsiniz.


Beni yendi ;-). unix.stackexchange.com/q/285635/86440 , şeylerin bütünlük yönünü kapsar (madde 4). Ayna tarafındaki FTP desteği yakın zamanda IIRC'de devre dışı bırakıldı.
Stephen Kitt

# 2 ile ilgili olarak debian.org/doc/manuals/distribute-deb/… farklı şekilde belirtmektedir. Teşekkürler
user1032531


1
@ user1032531 # 2. Paketlerin oluşturulması Debian'da en iyi şekilde yapılır. Ancak web sunucunuz herhangi bir şey olabilir. (Genellikle, paketi yapı sunucunuzda, muhtemelen tüm havuz yapısının tamamında oluşturup, ardından web sunucusuna yükleyin.) # 5. Bu araçlar, tüm liste dosyaları, imzalı sürüm dosyaları vb. Dahil yapılandırılmış dosya sistemini oluşturmanıza yardımcı olur (muhtemelen Debian'da çalıştırılması en kolay olanıdır).
derobert

2
@FaheemMitha Paketleri (bazı sıkıştırma işlemlerinde, modern apt .xz tercih ediyor) kesinlikle indirildi, içeri girdi /var/lib/apt/lists/. İçerikler apt-file ve auto-apt ile indirilir.
derobert
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.