Ders 18 / 20
Paket Kurma ve Kaldırma
Paket yöneticisi ailelerinde ortak olan işlem sınıfları, işlem listesinin okunması, kaldırma ile yapılandırmayla birlikte kaldırmanın farkı ve paket dışı kurulum alanları.
İçindekiler
Önceki ders paket kavramını ve bağımlılık çözümlemesini kurdu. Bu ders gündelik işlemlere iner.
Komut adları paket yöneticisi ailesine göre değişir; bu kurs belirli bir aracın söz dizimini öğretmez. Öğretilen şey, hangi işlemin ne yaptığı ve hangi sırayla yapılacağıdır; bu bilgi taşınabilir, komut adları taşınabilir değildir. Bir sistemde karşılıklarını bulmak için, yardım kaynakları dersindeki kılavuz sayfaları yeterlidir.
İşlem Sınıfları
Ailesi ne olursa olsun her paket yöneticisinde şu işlemlerin karşılığı vardır:
| İşlem | Yaptığı |
|---|---|
| Dizin güncelleme | Depolardaki paket listesinin yerel kopyasını tazeler |
| Arama | Ada ve açıklamaya göre paket arar |
| Gösterme | Bir paketin üstverisini yazdırır |
| Kurma | Paketi ve bağımlılıklarını kurar |
| Kaldırma | Paketin dosyalarını siler, yapılandırmayı bırakır |
| Tümüyle kaldırma | Yapılandırma dosyalarını da siler |
| Artıkları temizleme | Bağımlılık olarak kurulmuş, artık gerekmeyen paketleri kaldırır |
| Yükseltme | Kurulu paketleri yeni sürümlerine geçirir |
| Dosya listesi | Bir paketin kurduğu dosyaları listeler |
| Sahiplik sorgusu | Bir dosyanın hangi pakete ait olduğunu bulur |
| Doğrulama | Kurulu dosyaları kayıttaki özetlerle karşılaştırır |
İlk satır, sıranın başında olması gereken işlemdir. Yerel dizin, deponun içeriğinin bir kopyasıdır ve eskiyebilir. Eskimiş dizinle yapılan kurulum, artık depoda bulunmayan bir sürümü indirmeye çalışır ve başarısız olur. Bu yüzden kurulum, dizin güncellemesinin ardından yapılır.
Son satır, önceki derste anlatılan özetlerin kullanıldığı yerdir: kurulu bir dosyanın içeriği kayıttakinden farklıysa, dosya ya elle değiştirilmiştir ya da bozulmuştur. Bir arıza araştırmasında ilk sorulacak sorulardan biri budur.
İşlem Listesini Okumak
Kurma ve kaldırma komutları, işlemi yapmadan önce ne olacağını listeler ve onay ister. Liste üç bölümden oluşur: kurulacaklar, kaldırılacaklar ve yükseltilecekler.
Onaylamadan önce denetlenecek üç nokta vardır:
Kaldırılacaklar listesi boş mu? Bir paket kurmak için başka paketlerin kaldırılması gerekiyorsa, çakışan bir bağımlılık vardır. Liste beklenmedik adlar içeriyorsa işlem iptal edilmelidir.
Sürüklenen bağımlılıkların sayısı beklenen düzeyde mi? Küçük bir aracın yüzlerce paket sürüklemesi, yanlış paketin seçildiğini veya çok kapsamlı bir üst paketin istendiğini gösterebilir.
Paketler beklenen depodan mı geliyor? Birden çok depo yapılandırılmışsa, aynı paket farklı kaynaklardan gelebilir. Kaynak, sonraki dersin konusudur.
Kurulum işlemleri kök yetkisi ister; sistem dizinlerine yazarlar ve kurulum betiklerini ayrıcalıklı çalıştırırlar. Yetki yükseltme dersindeki ilke burada doğrudan uygulanır: paket kurma yetkisi vermek, kurulum betikleri kök olarak çalıştığı için, kök yetkisi vermeye yakındır.
Kaldırma ve Tümüyle Kaldırma
İki kaldırma işlemi arasındaki fark yapılandırma dosyalarındadır.
Kaldırma, paketin getirdiği dosyaları siler ama /etc altındaki yapılandırmayı bırakır.
Gerekçe şudur: yapılandırma dosyaları yönetici tarafından düzenlenmiştir ve paket
kaldırılıp yeniden kurulduğunda bu emeğin korunması beklenir.
Tümüyle kaldırma, yapılandırmayı da siler. Paketin bir daha kullanılmayacağı kesinse ve temiz bir durum isteniyorsa bu seçilir.
Hiçbiri kullanıcı verisini silmez. Ev dizinlerindeki ayarlar ve /var altındaki veriler
paket yöneticisinin kaydında değildir; paket onları oluşturmamıştır, silmez de. Bir servisi
kaldırdıktan sonra verisinin de gitmesi isteniyorsa bu ayrı ve bilinçli bir adımdır.
Bağımlılık olarak kurulmuş paketler ayrı işaretlenir. Bir paket kaldırıldığında, yalnızca onun için getirilmiş bağımlılıklar sistemde kalır ama “artık” olarak işaretlenir; temizleme işlemi bunları toplar. Bu ayrım olmasaydı sistem, zamanla hiçbir şeyin kullanmadığı paketlerle dolardı.
Yükseltme
Yükseltmenin iki kapsamı vardır ve karıştırılmaları risklidir.
Tek paket yükseltme, yalnızca adı verilen paketi yeniler. Bağımlılıkları da yeni sürüm gerektiriyorsa onlar da yükseltilir.
Sistem yükseltme, kurulu tüm paketleri depodaki güncel sürümlere geçirir. Depo tutarlı bir bütün olarak yayımlandığı için önerilen yol budur.
Aradaki tehlikeli bölge kısmi yükseltmedir: bazı paketler yeni, bazıları eski bırakıldığında, birbirine bağlı kütüphanelerin sürümleri uyuşmayabilir. Depo bakımcıları paketleri birlikte sınar; ayrı ayrı yükseltilmiş bir küme sınanmamış bir bileşimdir.
Bir sürümü kasıtlı olarak geride tutmak gerekiyorsa, paket yöneticileri bunun için bir sabitleme düzeneği sunar: paket veya sürüm işaretlenir ve yükseltmelerin dışında bırakılır. Sabitleme, kısmi yükseltme riskini bilinçli olarak üstlenmektir ve gerekçesi belgelenmelidir.
Sürüm düşürme genel olarak desteklenmez. Kurulum betikleri ileri yönde çalışacak biçimde yazılır; veri biçimini dönüştüren bir yükseltmeden sonra eski sürüme dönmek veriyi okunamaz bırakabilir.
Paket Yöneticisinin Dışı
Her yazılım depoda bulunmaz. Yerleşim standardı bu durum için ayrılmış bir alan tanımlar:
/usr/local, paket yöneticisinin dokunmadığı, yerel olarak kurulan yazılımların yeridir.
Aynı ayrımın kullanıcı düzeyindeki karşılığı ev dizini altındaki yerel dizindir ve kök
yetkisi gerektirmez.
$ mkdir -p ~/.local/bin $ chmod 755 ~/.local/bin/proje-yedek $ cat ~/.local/bin/proje-yedek #!/bin/sh # Proje agacini tarihli bir arsive alir. tar -czf "$HOME/proje/arsiv/proje-$(date +%Y%m%d).tar.gz" -C "$HOME" proje/veri proje/betik proje/belge
Bu dizin, oturum açılışında okunan yapılandırma tarafından arama listesine eklenir:
$ echo "$PATH" /home/ogrenci/proje/betik:/home/ogrenci/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ command -v proje-yedek /home/ogrenci/.local/bin/proje-yedek
Araç artık her yerden çağrılabilir:
$ proje-yedek $ ls -l proje/arsiv total 84 -rw-r--r-- 1 ogrenci ogrenci 11665 Jul 26 19:35 proje-20260726.tar.gz -rw-r--r-- 1 ogrenci proje 51200 Jul 26 19:10 veri.tar -rw-r--r-- 1 ogrenci proje 11330 Jul 26 19:10 veri.tar.gz -rw-r--r-- 1 ogrenci proje 4416 Jul 26 19:10 veri.tar.xz
Arşivleme dersindeki komut, tarihli bir adla ve tek çağrıyla çalışan bir araca dönüşmüştür.
Bu yaklaşımın sınırı, önceki dersteki veritabanı tartışmasıdır. Tek dosyalık bir araçta
kaldırma işlemi bir rm komutudur. Onlarca dosyayı altı ayrı dizine dağıtan bir yazılımda
ise hangi dosyanın kime ait olduğu kaydedilmediği için kaldırma güvenilir biçimde
yapılamaz. Paket yöneticisinin çözdüğü sorun tam olarak budur.
Ölçüt şudur: tek dosyalık ve bağımlılıksız araçlar yerel dizine kurulabilir; bağımlılığı olan ve sisteme dağılan yazılımlar paket yöneticisinden geçmelidir. Aradaki durumlar için, yazılımı kendi dizinine kapatan ve tek bir bağla arama listesine bağlayan yerleşim tercih edilir; kaldırma o dizini silmeye indirgenir.
Özet
- Paket yöneticileri farklı komut adlarıyla aynı işlem sınıflarını sunar; taşınabilir olan işlem bilgisidir, komut adı değil.
- Kurulum, yerel paket dizininin güncellenmesinden sonra yapılır; eskimiş dizin artık bulunmayan sürümleri indirmeye çalışır.
- İşlem listesinde kaldırılacaklar, sürüklenen bağımlılık sayısı ve paketlerin kaynağı denetlenir.
- Kaldırma yapılandırmayı bırakır, tümüyle kaldırma siler; ikisi de kullanıcı verisine dokunmaz.
- Kısmi yükseltme, birlikte sınanmamış bir sürüm bileşimi üretir; sabitleme bu riskin bilinçli üstlenilmesidir.
- Paket dışı kurulum, tek dosyalık ve bağımlılıksız araçlar için uygundur; sisteme dağılan yazılımlarda kaldırma kaydı olmadığı için güvenilir değildir.
Sonraki Adım
Paketlerin geldiği yer bu derste “depo” olarak anıldı ama tanımlanmadı. Depo bir dosya sunucusundan ibaret değildir: bir dizin dosyası, bu dosyanın imzası ve paketlerin özetleri birlikte bir güven zinciri kurar. Sonraki ders bu zinciri açar ve yeni bir deponun sisteme eklenmesinin neden bir güven kararı olduğunu gösterir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.