Forumda HemenKur'un bağımlılıkları kuran sürümünün Jailkit adlı bir bağımlılığı olacağını söylemiştim. Orada da belirttiğim gibi bu konuyla ilgili teknik bir doküman hazırlayacağımı söylemiştim. İşte burada JailKit'in ne olduğunu, neye yaradığını ve HemenKur için neden gerektiğini anlatacağım. Sorusu olanlar forumda yazarlarsa elimden geldiğince cevaplamaya çalışırım.
JailKit nedir?
JailKit chroot komutu ile bir "kafes" yaratma işlemini kolaylaştıran ve özelliklerini arttıran bir programdır.
HemenKur için niye gerekiyor?
HemenKur'un kurmak istediğiniz paketin bütün bağımlılıklarını sisteminize zarar vermeden kurabilmesinin tek yolu bunları sistemden bağımsız bir yere kurmak. İşte JailKit bunu yapacak. Paketini kurmak istediğiniz için sanal bir kök dizin oluşturacak. Örnek vermek gerekirse: Pardus'ta normalde harddisk'inizin kök dizini / dizinidir. JailKit kullanarak bir kullanıcının kök dizinini /usr/share/hemenkur/kafesler/dagitim_adı olarak görmesini sağlamak mümkün. Mesela debian paketlerini kurabilmek için hk_debian adlı bir kullanıcı oluşturacaksınız ve su hk_debian komutuyla o kullanıcıya geçtiğinizde kök dizin olan / aslında /usr/share/hemenkur/kafesler/debian olacak. Bu şekilde bir nevi "sanal" bir debian sistemi kurmuş oluyoruz. Bu bize ne mi kazandırıyor? Paketlerin bağımlılıklarını Pardus'a hiçbir şekilde zarar vermeden kurabilmemizi sağlıyor.
Bundan sonrası işin teknik kısmıdır, meraklılar devam edebilir :)
JailKit nasıl çalışıyor?
JailKit'in bir kafes oluşturmak, o kafaese kullanıcı eklemek, kullanıcının çalıştırabileceği programları belirlemek v.s işler için bir sürü modülü var. Temel olarak kullanıma gelirsek:
Kurulumda JailKit'in ikili dosyaları /usr/sbin dizinine, geri kalan herşeyi /etc/jailkit içine kuruluyor. JailKit'in hangi kafes setlerini kullanabileceği /etc/jailkit/jk_init.ini içinde yazıyor.
Bir kafes şöyle oluşturuluyor:
jk_init -v /kafesin/oldugu/dizin sftp scp jk_lsh
Burada sftp, scp ve jk_lsh yukarıda belirttiğim jk_init.ini dosyasının içinde tanımlanmış bulunan kafes setleri. Bu komut bize bir kafes oluşturuyor. Burada jk_lsh dosyasının önemli bir yeri var. Normal bir konsolun aksine jk_lsh ile kullanılacak olan konsolda sadece ayar dosyasında belirtilmiş dosyalar çalıştırılabiliyor.
Yukarıdaki komut çalıştıktan sonra - eğer hiçbir sorun çıkmadıysa - artık hazır bir kafesimiz var demektir. Ama bu kafese erişim hiçbir şekilde mümkün değil! Neden? Çünkü o kafese konulmuş bir kullanıcı yok! O zaman bir kullanıcı oluşturalım.
groupadd hemenkur
adduser -g hemenkur -m hk_debian
passwd hk_debian
Neden mi önce bir grup yarattık? Çünkü böyle yaparak sisteminizdeki diğer kullanıcılardan daha kolay ayırt edilmesini sağlamış olduk.
Şimdi onu kafese atalım.
jk_jailuser -m -j /usr/share/hemenkur/kafesler/debian hk_debian
Bu jk_jailuser komutu şöyle çalışıyor. hk_debian kullanıcısının konsolunu /etc/passwd içindeki jk_chrootsh'e çeviriyor. Böylece hk_debian kullanıcısının ev dizini /usr/share/hemenkur/kafesler/debian/home/hk_debian haline gelmiş oluyor. Bu komut ayrıca kullanıcıyı sistemden soyutlanmış bir şekilde /usr/share/hemenkur/kafesler/debian/etc/passwd dosyasına ve /usr/share/hemenkur/kafesler/debian/etc/group dosyasına eklemiş oluyor.
Şimdi bu kafes içinde hangi programların çalıştırılabileceğini belirtmemiz gerekiyor. Bunun için /usr/share/hemenkur/kafesler/debian/etc/jailkit/jk_lsh.ini dosyasını açıyoruz ve yazıyoruz:
[group hemenkur]
paths= /usr/bin, /usr/lib/
executables= /usr/bin/program, /usr/lib/baska/bir/program
şeklinde düzenleyip kaydediyoruz.
Artık çalışan bir kafesimiz var!
Son olarak jk_cp adında son derece kullanışlı bir komut daha var. Bu komut ile bir programınızı (bağımlılıklarıyla birlikte) normal sistemden kafese kopyalayabiliyorsunuz. Örnek olarak:
jk_cp /usr/bin/pisi /usr/share/hemenkur/kafesler/debian/bin/pisi
İşte bu kadar!
Umarım bu doküman yeterince açıklayıcı olmuştur.