DPKG Nedir?

Uzun zaman önce, Linux henüz emekleme aşamasındayken, yazılımı dağıtmanın en yaygın yolu sıkıştırılmış bir dosyayı kendiniz açıp kaynak koduyla derlemekti. Bununla birlikte, yazılımın miktarı ve karmaşıklığı arttıkça, önceden derlenmiş yazılımı dağıtmanın bir yoluna duyulan ihtiyaç netleşti. Sonuçta, herkesin Linux çekirdeği veya X Sunucusu gibi büyük projeleri derlemek için hem zaman hem de bilgi işlem gücü açısından kaynakları yoktu.
Kısa süre sonra, bu yazılım “paketlerini” dağıtmanın bir yolunu standartlaştırma çabaları arttı ve ilk paket yöneticileri doğdu. Bu araçlar, bir sistemden yazılım yüklemeyi, yapılandırmayı veya kaldırmayı çok daha kolaylaştırdı.
Bunlardan biri Debian paket formatı (.deb) ve paket aracı (dpkg). oldu. Günümüzde sadece Debian'ın kendisinde değil, Ubuntu ve ondan türetilenler gibi türevlerinde de yaygın olarak kullanılmaktadır. Debian tabanlı sistemlerde popüler olan bir diğer paket yönetim aracı olan apt, paketlerin kurulumunun, bakımının ve kaldırılmasının birçok yönünü kolaylaştırabilen Gelişmiş Paket Aracıdır.
Paket Yükleme
Debian Paketi (dpkg) aracı, Debian tabanlı sistemlere yazılım paketleri yüklemek, yapılandırmak, bakımını yapmak ve kaldırmak için gerekli yardımcı programdır. En temel işlem .deb paketlerini kurmaktır.
sudo dpkg -i PACKAGENAME
Burada PACKAGENAME yüklemek istediğiniz .deb dosyasının adıdır. Aşağıdaki görseldeki gibi bir çok global firma artık linux desteği sağlamaktadır.

Paket Yükseltme
Eğer paket güncellemesi yapılacaksa, yine aynı yol izlenir yani yükleme yapılıyor gibi -i seçeneği kullanılır. Bir paket yüklemeden önce dpkg, sistemde önceki bir sürümün zaten mevcut olup olmadığını kontrol edecektir. Eğer öyleyse, paket yeni sürüme yükseltilecektir. Değilse, yeni bir kopya yüklenir.
sudo dpkg -i PACKAGENAME
Bağımlılıklarla Başa Çıkmak
Çoğu zaman, bir paketin amaçlandığı gibi çalışması başkalarına bağlı olabilir. Örneğin, bir görüntü düzenleyicinin JPEG dosyalarını açmak için kitaplıklara ihtiyacı olabilir veya başka bir yardımcı programın kullanıcı arayüzü için Qt veya GTK gibi bir widget araç setine ihtiyacı olabilir.
dpkg, bu bağımlılıkların sisteminizde yüklü olup olmadığını kontrol edecek ve yüklü değilse paketi yükleyemeyecektir. Bu durumda dpkg hangi paketlerin eksik olduğunu listeleyecektir. Ancak bağımlılıkları kendi başına çözemez. .deb ile ilgili bağımlılıklara sahip paketleri bulmak ve kurmak kullanıcıya kalmıştır.
Aşağıdaki örnekte, kullanıcı OpenShot video düzenleyici paketini yüklemeye çalışır, ancak bazı bağımlılıklar eksiktir. İlk olarak bilgisayarımıza wget aracı ile openshot yazılımını indirelim.
wget http://archive.ubuntu.com/ubuntu/pool/universe/o/openshot-qt/openshot-qt-doc_2.4.3+dfsg1-1_all.deb

İndirme işlemi tamamlandıktan sonra, dpkg aracı ile yükleme işlemini gerçekleştirelim.
dpkg -i openshot-qt-doc_2.4.3+dfsg1-1_all.deb

Yukarıda gösterildiği gibi, OpenShot yazılımı, libjs-jquery ve libjs-underscore paketlerine bağlıdır. OpenShot kurulumunun başarılı olabilmesi için bunların hepsinin yüklenmesi gerekir.
Paketleri Kaldırma
Bir paketi kaldırmak için dpkg aracı ve -r parametresinden sonra paket adını iletin. Örneğin, aşağıdaki komut nano paketi sistemden kaldıracaktır.
dpkg -r nano

Bağımlı Paketleri Kaldırma
Kaldırma işlemi ayrıca bir bağımlılık denetimi de çalıştırır ve ona bağlı olan diğer tüm paketler de kaldırılmadıkça bir paket kaldırılamaz. Bunu yapmaya çalışırsanız, aşağıdaki gibi bir hata mesajı alacaksınız.
Aşağıdaki uygulamayı yapmak için p7zip-full paketinin kurulu olması gerekmektedir.
dpkg -r p7zip

dpkg aracına, birden çok paket adını iletebilirsiniz. Böylece hepsi aynı anda kaldırılacaktır.
dpkg -r p7zip p7zip-full

- Bir paket kaldırıldığında, ilgili yapılandırma dosyaları sistemde kalır. Paketle ilişkili her şeyi kaldırmak istiyorsanız , -r yerine -P (purge) seçeneğini kullanın.
- dpkg -i --force package-name gibi --force parametresini ekleyerek, bağımlılıklar karşılanmasa bile dpkg'yi bir paketi yüklemeye veya kaldırmaya zorlayabilirsiniz. Ancak, bunu yapmak büyük olasılıkla yüklü paketi ve hatta sisteminizi bozuk durumda bırakacaktır. Ne yaptığınızdan kesinlikle emin olmadığınız sürece güç kullanmayın.
Paket Bilgilerini Alma
Sürüm, mimari, bakımcı, bağımlılıklar ve daha fazlası gibi bir paketi yüklemeden önce hakkında bilgi almak için dpkg komutunu -I parametreyle birlikte incelemek istediğiniz paketin dosya adını kullanın. Örneğin, google-chrome indirip, inceleme yapalım.
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

Şimdi paket hakkında detaylı bilgi alalım.
dpkg -I google-chrome-stable_current_amd64.deb

Kurulu Paketleri ve Paket İçeriklerini Listeleme
Sisteminizde yüklü olan her paketin bir listesini almak için dpkg aracı ile --get-selections seçeneğini kullanın. Örneğin, vim editörüne bakalım.
dpkg --get-selections vim

-L parametresi ve paket adı ile aşağıdaki gibi belirli bir paket tarafından yüklenen her dosyanın bir listesini de alabilirsiniz.

Hangi Paketin Belirli Bir Dosyaya Sahip Olduğunu Bulma
Bazen sisteminizde hangi paketin belirli bir dosyaya sahip olduğunu bulmanız gerekebilir. dpkg-query yardımcı programının, ardından -S parametresi ve söz konusu dosyanın yolunu kullanarak bunu yapabilirsiniz. Örneğin, unrar-nonfree paketine bakalım.
dpkg-query -S /usr/bin/unrar-nonfree

Kurulu Paketleri Yeniden Yapılandırma
Bir paket yüklendiğinde, yazılımın çalışması için izinler, yapılandırma dosyalarının yerleştirilmesi vb. Gibi gereken her şeyi ayarlamak için bir komut dosyasının çalıştığı post-install adlı bir yapılandırma adımı vardır. Bu, kullanıcının yazılımın nasıl çalışacağına ilişkin tercihleri belirlemesi için bazı sorular da sorabilir.
Bazen, bozuk veya hatalı biçimlendirilmiş bir yapılandırma dosyası nedeniyle, bir paketin ayarlarını “fresh” durumuna geri yüklemek isteyebilirsiniz. Veya ilk yapılandırma sorularına verdiğiniz yanıtları değiştirmek isteyebilirsiniz. Bunu yapmak için dpkg-reconfigure yardımcı programını ve ardından paket adını çalıştırın.
Bu program eski yapılandırma dosyalarını yedekleyecek, yenilerini doğru dizinlere açacak ve paket tarafından sağlanan yükleme sonrası komut dosyasını sanki paket ilk kez yüklenmiş gibi çalıştıracaktır. Örneğin, tzdata paketini aşağıdaki gibi yeniden yapılandırmayı deneyin.
dpkg-reconfigure tzdata
Lokasyon seçimi yapalım.

Bölge veya şehir seçimi yaparak işlemi tamamlıyoruz.

