Paket kurulum aşamaları

Zaman içinde GKB daha detaylı hale geldikçe herhangi bir kısmında herhangi bir değişiklik yapmak gittikçe zorlaşıyor. Alakasız gibi görünen bir yerde ortaya çıkan bir hata, unutulmuş bir tırnak işareti, sonlandırılmamış bir döngü ya da yanlış bir harf yüzünden ciddi sıkıntılar oluşabiliyor. Günlerdir benzer sebeplerden dolayı bilgisayar başında akrobasi yapıyorum.

Şu anda geliştirmeye çalıştığım kısımlar paket kurulumları ve derleme hataları. Açıklamak gerekirse; diyelim ki GKB tarafından “emerge -e system” komutu verildi ve 355 adet paket sırayla kurulacak. Sıra 287. pakete geldiğinde derleme esnasında bir hata oluştu. Eskiden “–resume” parametresi ile işleme devam etmesi sağlanıyordu fakat bazı durumlarda bu komuttan önce bazı işlemler yapılması gerekiyordu. Bu işlemlerden bazıları da “emerge -e system” komutunun hangi paketten devam etmesi gerektiğini unutmasına ve “–resume” parametresi verildiğinde “Devam edilecek bir şey yok” uyarısının alınmasına sebep oluyordu. Tekrar 286 paketin derlenmesini beklemek de pek kolay olmuyordu.

Hala düzeltmelerini yapıyor olsam da genel anlamda işini yapan yeni sistemde ise paket kurulumları aşamalara ayrılıp adım adım yapılıyor. Mesela sıradaki komut “emerge gnome-media” olsun. Öncelikle yapılması gereken herhangi bir değişiklik olup olmadığı kontrol ediliyor. Diyelim ki ffmpeg paketinin bayraklarında bir sıkıntı var, “X -threads -sse” şeklinde ayarlanmışlar fakat “-X threads sse” şeklinde olmaları gerekiyor. /etc/portage/package.use dosyasında ffmpeg paketi ile ilgili herhangi bir girdi mevcut ise o girdi değiştiriliyor, ilgili herhangi bir girdi mevcut değilse yenisi ekleniyor. Daha sonra bu komut ile kurulacak olan paketlerin bir dosyada listesi oluşturuluyor. Bu listedeki her bir paket “emerge -f –nodeps ${paket}” benzeri bir komut ile indiriliyor. İndirilen her bir paketin ismi yine bir dosyada listeleniyor. Bu indirme aşaması arkaplan görevi olarak gerçekleştiriliyor. Bu sırada önplanda bir emerge komutu hazırda bekliyor. Paket listesinden sıradaki paketin adını alıyor ve indirilmiş paketlerin listesinde olup olmadığını kontrol ediyor. Eğer isim listede yoksa kısa bir süre bekleyip tekrar kontrol ediyor. İsim listeye eklenene kadar bekledikten sonra yine “–nodeps” parametresiyle paketi kuruyor. Eğer bu esnada derleme hatası oluşursa aynı komut ile tekrar deneme yapıyor, buna rağmen sorun çözülmezse /var/tmp/portage/*${paket}* adresini ortadan kaldırıyor, tedbiren lafilefixer komutunu çalıştırıyor ve aynı komut ile tekrar deniyor. Bir kaç deneme sonunda yine sorun çözülmezse paket /etc/portage/package.mask dosyasına eklenerek bir önceki sürümünü kullanmayı deniyor. Bu arada arkaplandaki indirme işlemi gerçekleştirilemezse ping ile internet bağlantısı kontrol ediliyor, eğer bağlantı yoksa bir dosya oluşturularak o dosya ortadan kalkana kadar beklemeye geçiliyor. Önplandaki kurulum işlemi ise paketin indirilmesini beklerken söz konusu dosyanın oluşturulup oluşturulmadığını kontrol ediyor. Eğer dosya mevcut ise internet bağlantısını sağlamak için gerekli işlemler devreye sokuluyor ve bağlantı sağlandıktan sonra dosya siliniyor. Dosyanın silindiğini fark eden arkaplan işlemi de kaldığı yerden indirmeye devam ediyor. (Bu dosya yoluyla haberleşme kısmında değişiklikler yapmayı düşünüyorum.) Sonuç olarak hangi pakette sorun oluştuğunu belirlemek kolaylaşıyor ve yalnızca o paketi tekrar derleme yoluna gidiliyor. Sisteme müdahale etmem ve geliştirmeler yapmam çok daha kolay oluyor.

Bir fikir vermeleri için de şu iki ekran görüntüsü iliştireyim:

Bunların yanında yeni ortaya çıkan ve henüz kaynaklarını bulamadığım bir kaç can sıkıcı problemi düzeltmek için satırlar arasında dolaşıyorum. Bu hafta sonu hepsinin icabına bakmak gibi bir hayalim var.

This entry was posted in GKB, Linux and tagged , , . Bookmark the permalink.

5 Responses to Paket kurulum aşamaları

  1. Burak Sezer says:

    “Zaman içinde GKB daha detaylı hale geldikçe herhangi bir kısmında herhangi bir değişiklik yapmak gittikçe zorlaşıyor.”

    Kodu tek bir dosya içinde tutuyorsan böyle bir sıkıntı olabilir. Programı parçalara ayırmak her zaman en iyisi. Bir kere, shell betiği yazıyorsan kod illa ki prosedürel oluyor. Program büyüdükçe ipin ucu kaçıyor. Nesne yönelimli programlama paradigması bu sorunları aşmak için var.

    Bahsettiğin diğer sorunlar da daha güçlü bir programlama dili(Python ya da Ruby gibi) kullanılarak ve tabii dikkatli bir kodlama ile aşılabilir gibi geliyor bana.

    • Şehidcan says:

      Kurulumu ve taşımayı kolaylaştırmak adına kodu tek bir dosya halinde tutuyorum, dediğin gibi sıkıntının kaynağı bu. Mümkün olduğunca yapılan işlemleri fonksiyonlar halinde oluşturuyorum, bu da kayda değer bir kolaylık sağlıyor.
      Diğer sorunlar da belirttiğin gibi daha gelişmiş bir alternatif ile ortadan kalkabilir. Keşke bash2python tarzı bir dönüştürücü olsa da tek komut ile Python kodu haline getirebilsem. İtiraf ediyorum, bu kadar uzun bir betiği dönüştürmeye ve benim dikkatsizliğimden kaynaklanabilecek hatalarla boğuşmaya üşeniyorum :)
      Ama temelde tamamen haklısın, yaz tatilinde bu işe el atmak lazım gibi görünüyor.

  2. Burak Sezer says:

    Kodu dönüştürmek pek doğru bir ifade değil. Yapman gereken şey tasarımı tekrar gerçeklemek. Bire bir dönüşüm yapmak imkansız.

    Python ya da başka bir betik dili ile programını kodlayabilirsin. Ama nasıl kodlayacağına dikkat etmezsen yine böyle sıkıntılarla karşılaşman işten bile değil…

    Kolay gelsin :)

  3. cezlinux says:

    Merhaba
    Kodlamadan filan anlamam, ama VBox ile bir deneme yapiyim dedim ve dikkatimi kullanmış olduğun disk bölümleri oldu.
    GKB nin doğru çalışabilmesi için kullanıcaımız disk örnek profile.txt dosyasında ki gibi 7 bölüme mi ayarlamamız gerekli ve dosyada kullanmış olduğun dosya sistemlerini mi uygulamamız doğru olur.
    Eğer diskimizi 3 bölülden oluşturup ( 1- /dev/sda1 boot ext2, 2- /dev/sda2 swap, ve 3- /dev/sda3 root ext3 ve ya ext4 ) betiği çalıştırırsak olur mu, yoksa örnek profile.txt dosyasına bağlı mı kalmamız gerekiyor.
    Önceden teşekkürler

    Kolay gelsin

    • Şehidcan says:

      Örnek profil dosyasında mümkün olan alternatifler listeleniyor sadece. Onların arasından zorunlu olan sadece root bölümü, diğerleri isteğe bağlı.
      Yani sadece root bölümünü belirtip kurulum yapabilirsiniz. Verdiğiniz örnek de aynı şekilde mümkün. O şekilde kurulum yapmak için de profilinizde şu satırların bulunması gerekiyor:

      boot sda1 seçtiğiniz_isim ext2
      swap sda2 seçtiğiniz_isim
      root sda3 seçtiğiniz_isim ext4

Yorum yapın

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Değiştir )

Twitter picture

You are commenting using your Twitter account. Log Out / Değiştir )

Facebook photo

You are commenting using your Facebook account. Log Out / Değiştir )

Connecting to %s