Çözüm Debian/Ubuntu tabanında "apt update" komutunun uzun süre bitmemesi

Bu konu bir çözümü açıklamaktadır. Herhangi bir çözüm açıklanmadığını düşünüyorsanız konuyu rapor edebilirsiniz.
Debian ve Ubuntu tabanında apt update ya da apt-get update komutu ile paket listesini güncellediğinizde, işlem paket bilgilerini indirip şu kadar sürede şu kadar miktar alındı kısmında çok uzun süre kalıyorsa, nedeni command-not-found paketinin apt entegrasyonundan kaynaklanıyordur. Bu sorun Türkçe gibi ASCII desteği çok iyi olmayan yazı karakterleri barındıran dillerde görülebiliyor ve command-not-found entegrasyonun hatalı çalışması sonucu, son işlemin çok uzun sürmesine neden oluyor. Bu sorundan, doğal olarak Linux Mint'in Güncelleme Yöneticisi gibi grafik arayüzlü güncelleme uygulamaları da etkileniyor ve paket listesinin yenileme işleminin uzun süre bitmemesi olarak ortaya çıkıyor. Eğer sisteminizde İngilizce vb. ASCII desteği olan bir dil kullanıyorsanız veya sisteminizde command-not-found paketi kurulu değilse bu sorunu yaşamıyorsunuz. command-not-found paketinin sisteminizde kurulu olup olmadığını aşağıdaki komutla kontrol edebilirsiniz, çıktı vermiyorsa kurulu değildir, çıktı veriyorsa kuruludur.

Kod:
dpkg -l | grep command-not-found

Peki command-not-found paketi ne işe yarıyor? Örneğin xyz isimli bir komutu çalıştırıyorsunuz ve bu komutun geldiği paket sisteminizde kurulu değil. command-not-found entegrasyonu sayesinde bulunamayan komut için aşağıdakine benzer bir uyarı alıyorsunuz. Böylece komutu kullanmak için hangi paketi kurmanız gerektiğini anlayabiliyorsunuz, yani oldukça işlevsel olabilen bir entegrasyon.

Kod:
xyz

'xyz'  komutu sistemde bulunamadı. Ama şununla kurulabilir:

sudo apt install xyz-falan-filan

Bu işlevselliği kaybetmeden, paket listesi güncelleme ile ilgili sorunun geçici olarak etrafından dolaşabilirsiniz. Bunun için apt update ya da apt-get update komutlarını aşağıdaki gibi LC_ALL=C değişkeni çalıştırmak geçici çözüm olabiliyor. Böylece apt komutuları yerel dil yerine, uygulamanın yazıldığı dili baz alarak çalışıyor ve sorunun etrafından dolaşılmış oluyor.

Kod:
LC_ALL=C sudo apt update

LC_ALL=C sudo apt-get update

Bu sorunu kalıcı olarak çözmek için, sisteminizdeki command-not-found apt entegrasyon dosyasını aşağıdaki komutla silebilirsiniz. Böylece apt komutları çalıştığında, enterasyon dosyası işlev göstermeyecektir ve sorun etrafından dolaşılarak kalıcı şekilde çözülecektir. Ama bunun sonucunda, depoya yeni eklenen olası paketler için bu işlev kullanılmaz olabilir.

Kod:
sudo rm -f /etc/apt/apt.conf.d/50command-not-found

Bir diğer alternatif ise, apt komutlarının kalıcı olarak LC_CTYPE=C.UTF-8 değişkeni ile çalışmasını sağlamak olabilir. LC_CTYPE=C.UTF-8 değişkeni kodları asıl dilinde çalıştıracaktır, bununla birlikte çıktıların yerel dilde görünmesini sağlayacaktır. Bu işlemi otomatik olarak yapacak bir paket hazırladım, bu paketi aşağıdaki bağlantıdan indirip kurabilirsiniz.

apt-cnf-fix_1.0.4_all.deb sha256sum 19bd2890fb25bee92348cfff1b0bbf3e0c1a61fd9c322e2c39d4364b0e1134f5

Paket apt ve apt-get isiminde 2 adet dosyayı /usr/local/sbin dizinine yüklüyor. Bu dosyaların tek amacı, apt ve apt-get komutlarının LC_CTYPE=C.UTF-8 değişkeni ile çalışmasını sağlamak. Yani paketle kurulan dosyalar asıl komutların işlevini görmüyor, sadece komutların bahsettiğim değişkenle çalışmasını sağlıyor. Bunun sayesinde herhangi bir işlev kaybı olmadan, sorunu kalıcı olarak çözmüş olacaksınız. Dosya içerikleri de aşağıdaki gibidir, isterseniz paketi kurmak yerine /usr/local/sbin dizininde dosyaları elle de oluşturabilirsiniz, dosyaları oluşturduktan sonra çalıştırma izni vermeniz gerekecek.

apt dosyası (Linux Mint'in apt uyarlaması ile uyumlu olacak şekilde hazırlandı)

Kod:
#!/bin/sh
if [ -f /usr/local/bin/apt ]; then
env LC_CTYPE=C.UTF-8 /usr/local/bin/apt "$@"
else
env LC_CTYPE=C.UTF-8 /usr/bin/apt "$@"
fi
exit 0

apt-get dosyası

Kod:
#!/bin/sh
env LC_CTYPE=C.UTF-8 /usr/bin/apt-get "$@"
exit 0

Bu şekilde bu konuda bahsedilen sorunu kalıcı olarak çözmüş olacaksınız. Türkçe yerelden kaynaklı bu sorun command-not-found paketinin ileriki sürümlerinde çözülürse, yine bu konudan bilgi vermeye çalışırım.

Güncelleme 1: Pakete Synaptic ve Mintupdate için de dosyalar eklendi. Dosyaların tek amacı uygulamaların LC_CTYPE=C.UTF-8 değişkeni ile çalışmasını sağlamak.
Güncelleme 2: Bazı dağıtımlarda /usr/local/sbin önceliğinden emin olmak için, pakete yapılandırma dosyası eklendi.
Güncelleme 3: Bir adet postrm betiği ve profile.d yapılandırması eklendi.
Güncelleme 4: profile.d yapılandırmasından sonra gerek kalmayan Xsession.d yapılandırması, paketten silindi.
 
Son düzenleyen: Moderatör:

Technopat Haberler

Yeni konular

Geri
Yukarı