İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat