burak@unix~$

~bilgisayar üzerine garip deneyimler~

Son yazı

leave a comment »

Yaklaşık 2 yıldır boşta beklettiğim http://purak.org adresine taşınıyorum. Bu, http://buraxezer.wordpress.com adresi altındaki son yazım. Yıllardır denebilecek ölçüde uzun bir zamandır adam gibi yazmıyordum zaten, yaşıyor sayılmazdı blog ama tek gerçek blogum olma durumunu devam ettiriyordu.

Yeni blogda yine yazmayacağım! :) Zaten 6-12 ay resmen yokum. Sonrasında da 6 ayda bir yazı temposunda devam edeceğimin garantisini verebilirim.

Yine de belli olmaz diyorsanız ben gibi, alıcılarınızın ayarlarıyla oynayın.

http://purak.org/atom.xml

Written by Burak Sezer

Temmuz 1, 2012 at 11:00 pm

Kişisel, olmamış kategorisinde yayınlandı

Geek Aranıyor Vol.2

with 7 comments

2008 yılından kalma bir girdi, metin ve görsel Gürkan‘a ait. Sanki eskiden daha eğlenceli adamlardık… :)

Forumların n00b dolmasına alışkınız, ancak son aylarda irc ve bloglar bile bunlardan kaynıyor..
Bu ne be, bi defolun lan..!
Bıktım artık, işte yeni kampanya..
Eskiyi getir yeniyi götür gibi bişey..
N00b’un üstüne bas, geek’sen toplan gel..
Ortalıkta adamakıllı Linux kullanan, işini bilerek yapan, saçmalamayan eleman arıyoruz!!!

Written by Burak Sezer

Şubat 22, 2012 at 6:07 pm

Kişisel kategorisinde yayınlandı

Afiyetle…

with 5 comments

kuşağım tüm gençler gibi aptal ve cömertti, elimizdeki her şeyi veriyor, karşılığında hiçbir şey beklemiyorduk. Şimdi bizden geriye hiçbir şey kalmadı… Latin Amerika toprağında yatıyor cesetlerimiz*,

Öncelikle #hadron kanalından _paco_‘ya senelerdir bize  sağladığı her türlü destek(slogan gibi) için,

Gürkan Gür‘e yaptığı tüm paketler, sayısız hata çözümleri, belgeler ve fikirleri için,

Erdem Artan’a lpms’e yolladığı yama, paketler, hata çözümleri için,

Ceyhan Molla‘ya yeni logoyu çizdiği için,

Arch Linux geliştiricileri ve topluluğuna hazırladıkları sade paketler, init sistemi ve diğer irili ufaklı kod parçaları için,

Gentoo Linux‘a emeği geçenlere hazırladıkları harika dağıtım Hadron’a esin kaynağı olduğu için,

Linux From Scratch geliştiricilerine hazırladıkları eşsiz kaynak için,

Teşekkür ederim.

Hadron 1.0′ı aşağıdaki bağlantıdan indirebilirsiniz, okumanız için Gürkan pek çok belge de yazdı.

İndirme Adresi:

http://hadronproject.org/get-hadron/

Belgeler:

http://hadronproject.org/wiki/index.php/Main_Page_en

Bu arada, sürümü geçtiğimiz aylarda hayatını kaybeden Dennis Ritchie‘ye ithaf ettik. Kendi çapımızda saygı duruşu yapalım dedik.

Neyse, afiyetle…

Written by Burak Sezer

Ocak 12, 2012 at 12:00 am

Ar-Ge, Hadron, Kişisel, lpms, olmamış kategorisinde yayınlandı

GNU/Linux’da Nvidia Optimus deneyimlerim

with 2 comments

Nvidia GeForce GT 525M karta sahip bir GNU/Linux kullanıcı iseniz Optimus teknolojisini muhtemelen duymuşsunuzdur. Temelde iyi bir teknoloji; güçlü ekran kartınızın bataryanızı yiyip bitirmesini engelliyor. Sıradan işler için işlemcinin bünyesindeki grafik çipi kullanılırken performans isteyen işlerde Nvidia çipseti kullanılıyor. Neyin bütünleşik çipset neyin Nvidia çipset tarafından çalıştırılacağına kullanıcı da karar verebiliyor. Bu konuda detaylı bilgiyi Google’dan alabilirsiniz. Keselim…

Optimus, dediğim gibi, iyi bir teknoloji aslında ama Nvidia’nın Windows dışında bir platforma destek vermemesi nedeniyle bizler için ciddi bir problem olarak ortada duruyor. Bu teknolojiyi Windows üzerinde çalıştığı gibi GNU/Linux üzerinde çalıştıracak araçlar yok; zira Xorg biraz yetersiz kalıyor ve Nvidia destek vermiyor ama bazı hacky çözümler var.

Bu arada Nvidia Xorg’u ve Waylandı desteklemek gibi bir planı olmadığını açıklamış.

Bumblebee/Ironhide denen bir araç var. Hiç kullanmadım ama garip, kötü bir program olduğu söyleniyor. Fazla incelemedim… Aklınızda bulunsun.

Benim yaptığım şey, grafik donanımına çok fazla ihtiyacım olmadığından, nVidia çipi kapatmak oldu. acpi_call denen bir çekirdek modülü ile bu işi kolayca yapabiliyorum.

Bu arada lspci çıktısının ilgili kısmı şöyle:

01:00.0 VGA compatible controller: nVidia Corporation Device 0df5 (rev ff)

Bahsettiğim çekirdek modülü ise şurada ikamet ediyor:

https://github.com/mkottman/acpi_call

Derlemeniz gerekiyor, derlemek için de çekirdek kodlarına sahip olmanız gerek. En azından Gentoo‘da ve Hadron‘da işler öyle yürüyor. Diğer dağıtımlarda kernel-headers denen paketleri kurmanız gerekebilir. Araştırın…

Bu arada acpi_call dağıtımınızın deposunda da olabilir. Gentoo’da var mesela.

Eğer elle derliyorsanız şöyle bir yol izlemeniz gerekecek:

1- Kodu çekin:

$ git clone git://github.com/mkottman/acpi_call.git

2- Kod dizinine geçin:

$ cd acpi_call

3- Derleyin:

$ make

4- Çekirdek modülünü uygun bir yere kopyalayın. Şöyle olabilir:

/lib/modules/3.1.4-hadron/misc/acpi_call.ko

# cp acpi_call.ko /lib/modules/3.1.4-hadron/misc/acpi_call.ko

Evet, çekirdek modülünüz acpi_call.ko

Bu kopyalama işlemini yapmadan da modülü çalıştırabilirsiniz. Şöyle ki:

# insmod ./acpi_call.ko

Eğer kullandığınız çekirdeğin modül dizinine attıysanız ki yapmanız gereken de budur, şu komutu çalıştırmanız gerekiyor:

# depmod -a

-a yerine -A da kullanabilirsiniz sanırım. Eğer bu komutu çalıştırmazsanız modprobe komutu ile modülü yükleyemezsiniz.

5- Modülü yükleyin:

# modprobe acpi_call

dmesg çıktısında şu sonucu gördüyseniz başardınız demektir:

# dmesg | tail -f

[15337.338344] acpi_call: Module loaded successfully

Dikkat ettiyseniz GitHub‘dan çektiğiniz kodun içinde test_off.sh diye bir betik var. Bu betiği çalıştırarak bazı ACPI çağrılarını deneyebilirsiniz. Bu konularda detaylı bilgi modülün README dosyasında var.

Yukarıda bahsettiğim kartı kapatmak için şu komutu kullanıyorum:

# echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call

Çalıştırdıktan sonra dmesg | tail -f komutunun çıktısı şöyle oldu:

[15739.540423] acpi_call: Calling \_SB.PCI0.PEG0.PEGP._OFF

[15739.540648] acpi_call: Call successful: 0×0

İşe yaradı gördüğünüz gibi. Zaten fanın susmasından da işe yaradığını anlayabilirsiniz.

Açmak içinse şu komutu kullanıyorum:

# echo '\_SB.PCI0.PEG0.PEGP._ON' > /proc/acpi/call

Kapattıktan sonra /proc/acpi/call dosyasına gidip baktığımda içinde 0×0 yazdığını görüyorum. Kartı açınca da 0×1 yazıyor olmalı.

Bumblebee denen yazılımı kullanarak Nvidia kartı anlık olarak kullanabiliyorsunuz bildiğim kadarıyla. Ama ben hiç denemedim.

Bu konularla ilgili olarak şu kaynakları inceleyebilirsiniz:

http://hybrid-graphics-linux.tuxfamily.org/index.php?title=ACPI_calls

http://linux-hybrid-graphics.blogspot.com/

http://en.gentoo-wiki.com/wiki/X.Org/nVidia_Optimus

Son verdiğim bağlantıdaki bilgileri kullarak orta vadede kendi programımı yazarım gibi geliyor ama şimdilik böyle iyiyim! :)

Bu arada çekirdek güncellemesi yaparsanız acpi_call‘ı yeniden derlemeniz gerekebilir. En azından onu yeni çekirdeğinizin modül dizinine almanız gerekir. Modülün hangi sürüm için geçerli olduğunu şu komutla anlayabilirsiniz:

# modinfo acpi_call.ko

filename:       acpi_call.ko
license:        GPL
depends:
vermagic:       3.1.4-hadron SMP preempt mod_unload modversions

Eğer minor sürüm geçişleri ise, 3.1.3 > 3.14 geçişi gibi, yeni çekirdeğin modül dizinine almanız yeterli olur. 3.0′dan 3.1.4′e geçiyorsanız yeniden derlemeniz gerekir.

Written by Burak Sezer

Aralık 4, 2011 at 1:31 am

Kişisel, Linux kategorisinde yayınlandı

Büyük Zen Düğünü*

with 2 comments

Arada aklıma geliyor, blog yazısı yazayım diyorum. Sonra doğal olarak “ne yazayım” sorusu aklıma geliyor ve tıkanıyorum. Kalıyor öylece, en azından aylardır böyle işliyor. Hatta ne ayları, 1-2 yıldır böyle oluyor…

Şu an da aslında böyle bir durumdayım. Blog yazısı yazasım var ama yazamıyorum… Eskiden ne yazardım? Alabildiğine özgür yazılım geyiği… Aslında  ben bloga ara verdikten sonra tekrar açma kararı verirken artık sadece teknik yazılar yazarım diyordum. Ama o kadar  teknik bir  adam olmadığımdan bu hedefi pek tutturamadım. Zaten geriye dönüp bakarsanız bu süreçte pek “teknik” yazılar yazmadığımı hatta dikkate değer bir metin üretmediğimi de görürsünüz sanırım.

Hatta bu metnin de pek dikkate değer bir şey olmadığını buraya kadar okuduysanız anlamışsınızdır ya neyse… Devam edeyim.

Aslında ben yazı yazmayı pek sevmem, pek yetenekli de değilimdir bu konuda. Şu an olduğu gibi; 3 aydan fazla olmuş lan yazmayalı, çok da canım sıkıldı ne yazsam moduna girince ya da yazacak ciddi bir şeyim olduğu zaman yazıyorum ki yazacak ciddi bir şeyim olmadığından şu an anlamsız bir laf salatası okuyorsunuz.

Yazı yazmayı pek sevmediğim gibi kısa yazılar yazmayı da sevmem. Yazınca uzun yazar, kafa şişiririm. Kafa şişirmenin en güzel yolu da sanırım Hadron‘dan bahsetmekle olur.

Hemen alttaki girdiyi 20 Ağustos günü yazmışım. Yani hesaplamalarıma göre 3 aydan biraz fazla bir zaman olmuş. Aslında bu zaman dilimi bizim yaptığımızın ölçeğinde bir iş için zaman bile değil. Hele ki 1.85 kişiyle çalışıyorsanız.

O yazıyı yazdığımdan beri okumuyorum ama sanırım lpms’e yönelik planlardan, BSD’ye port etme girişimlerimden ve sürümün ne zaman çıkacağından bahsetmiştim. Sürüm konusundaki planımı, tahminimi pek tutturamadığım aşikar. Ama bu konuda kabahatli değilim. İş, okul, özel hayat derken tabii Hadron yavaş ilerliyor. Bu konuda  yapacak bir şey yok…

Geçen 3 ayda lpms’i baya baya adam ettim. Artık ona pek tırsmadan 1.0 diyebiliyorum. Changelog yazmayı pek sevmediğimden buraya dökülmeyeceğim ama; koda ve commitlere bakan ya da hiç uğraşmayıp doğrudan bana soru soranlar bu konuda bayağı bilgi alabilirler.

Gürkan sağ olsun iş bulmadan önceki bunalım dönemlerinde bayağı paket yaptı. Sayesinde depoda varlığından haberdar olmadığım paketler var. Tahmin ettiğim kadarıyla depoda şu an 600 civarı farklı paket var. Masaüstüne ulaşmanız için sadece biraz şanslı olmanız ve gerektiği yerlerde bana ya da Gürkan’a ulaşmanız yeterli olacaktır. Masaüstü demişken, sonu “box” ile biten bir kaç pencere yöneticisi haricinde LXDE ve XFCE4 depolarda olmayan kullanıcılarını bekliyor. Duyrulur…

Buraya kadar ~350 kelimelik laf salatası yapmayı başardım. Kayda değer hiç bir şey anlatmadım ve eğer buraya kadar okuduysanız hayatınızdan bir on dakika çaldım. Neyse, daha fazla uzatmadan sürüm sonrası Hadron 64 bit branchı için ve ileri düzey(lüks de denebilir) lpms yetenekleri için çalışacağımı da açıkladıktan sonra bu yazıyı bitireyim.

* Başlık araktır. Meraklı arkadaşlar araştırıp ne olduğunu bulabilir. Eğer ki içinizde bir hank varsa hoşça vakit geçirebilirsiniz.

Written by Burak Sezer

Kasım 30, 2011 at 12:43 am

olmamış kategorisinde yayınlandı

Biraz geyik muhabbeti

with 11 comments

Sürüm çıkaralı çok olmuş, yazı yazmayalı da. Aylardır yaptığımız çalışmalar sanırım bir blog yazısını hakediyor.

Mayıs ayından beri Hadron cephesinde olan en iyi şey geliştirici sayısının 1′den 3′e çıkması oldu sanırım. Gürkan Gür ve Erdem Artan artık Hadron’a aktif katkı veriyorlar. Gitorious‘daki RSS beslemesinden neler yaptıklarını görebilirsiniz.

İkisinin birden paket yapmaya ve varolanlara bakmaya başlamasıyla üzerimdeki yük gayet azaldı. Azaldı derken boşa çıktığımı düşünmeyin. Temmuz ayından itibaren çalışıyorum, kendime ve Hadron’a ayırdığım zaman da bir hayli azaldı. Herşeyi bir arada düşündüğünüz zaman ~600 kadar paketi ve paket yöneticisini tek başıma yapmış kadar yoruluyorum, neyse.

Artık paketlerle daha az ilgilendiğim için Hadron’a ayırdığım vakti lpms üzerine yoğunlaştırıyorum. Hata kayıt sitemizden de görebileceğiniz gibi üzerimde şu an 30 kadar hata var ve bunların çok büyük bir kısmı lpms ile ilgili ya hata düzeltmesi ya da özellik isteği.

Sırası gelmişken lpms’de neler yaptığımı ve neler yapmayı planladığımı anlatayım:

lpms son rootfs sürümündeki atasının aksine şu an çok daha gelişkin ve olgun. Sanırım satır sayısı iki katına kadar çıktı ve pek çok yeni özellik ekledim. Bunlar irili ufaklı şeyler, bazılarını ben bile hatırlamıyorum ama bağımlılık çözme işlerini halleden lpms modülündeki commit sayısı lpms’e yaptığım toplam commit sayısının üçte birine yakın olabilir. Hala hataları var; zira oldukça karmaşık bir iş yapıyor. Sıkıntıları devam edecektir.

Geçen hafta sonu Hadron mesaimin bir kısmını lpms’i OpenBSD‘ye port etmeye harcadım.  Gerekli modifikasyonları yaptıktan sonra, sorunlar olsa da, OpenBSD üzerinde Hadron paketlerini derlemeyi/kurmayı başardım. Yani lpms, BSD ailesinden bir UNIX sistem üzerinde de çalışabilen bir paket yöneticisi şu an. Muhtemelen orta vadede sadece ben kullanabilirim ama; lpms’i Linux ve BSD sistemler üzerinde çalışabilen “evrensel” bir paket yöneticisi yapma hedefimi de açık etmiş olayım burada.

lpms paketleri kaynaktan derleyerek sisteme kuruyor biliyorsunuz. Bu bizim UNIX sistemi kullanma tarzımız ve bu konuda iyi bir paket yöneticisi çıkarmaya çalışıyoruz. Ama bazen binary paket lazım olabiliyor ve lpms şu an binary(bildiğiniz deb ya da rpm paketleri gibi) kuramıyor. Bu bir eksiklik evet ama; lpms’in konsepti paketleri kullanıcının bilgisayarı üzerinde derleyerek, hem herkesin istediği gibi bir sistem elde etmesini hem de ileri düzeyde işlemci optimizasyonlarının yapılmasını sağlamak üzerine kurulu. Gentoo ya da BSD’de ciddi deneyimi olanlar bu konuları bilirler zaten.

lpms’in gelecek sürümlerde binary paketleri kurup kaldırabilmesini ve hatta binary depoları oluşturup yönetebilmesini planlıyorum. Bu sayede hibrit bir paket yöneticisi ortaya çıkarmış olacağız. Ama Hadron hiç bir zaman binary paket deposu sağlamayacak. Bu özelliği 3. şahıslar ya da projeler kullanacak.

Bir diğer hedefim ise Debian‘daki debconf‘un bir benzerini lpms için yazmak. Bu konu henüz tasarım tahtasında bile değil. Orta vadede mümkün, muhtemelen 2012 yılı içinde çalışacağımız bir konu olacak.

Tüm bunları gerçekleştirdiğim zaman modern altyapılar kullanan BSD tarzı bir UNIX sistem yaratma konusundaki hevesimi biraz daha tatmin etmiş olacağım.

En son ve en çok arzuladığım iş ise Hadron’un altyapılarını tamamen Python 3‘e taşımak. Grafik arayüzlü araçlar gibi bizim açımızdan tamamen anlamsız hedeflerimiz olmadığı için GTK+ gibi şeylerin Python 3 tarafından desteklenmiyor olması umrumda değil ama sandboxing uygulaması olarak kullandığımız catbox C ile yazılmış bir Python 2 uygulaması olduğu için geçiş yapamıyoruz. Aslında catbox’u Python 3′e taşımak altından kalkamayacağım bir iş değil. Ama yeterince C ve bu dille Python modülü yazma tecrübem olmadığı için zorlanabilirim. Ve sonradan çıkacak hataların da faturası canımızı çok yakabilir. O yüzden girişmiyorum ama; Python 2.7.2 ile Python 3′teki tüm yenilikleri kullanarak kod yazıyorum, o da ayrı bir mesele.

Dökümantasyon işi de fena gitmiyor. Gürkan Hadron’la ilgililenmeye başladıktan sonra benim yazdıklarımı güncelleştirerek İngilizceye çevirdi. Dökümanlar HadronWiki’de duruyor. Girip okuyabilirsiniz.

Her Hadron yazısına eklediğim gibi buna da projenin sayfalarını ekleyeyim. İlgilenmek isteyen olursa hiç çekinmesin buyursun. Freenode üzerindeki #hadron kanalında ilgili birilerini bulma olasılığınız çok yüksek.

Hadron Projesi Anasayfa

HadronWiki

Written by Burak Sezer

Ağustos 20, 2011 at 10:26 pm

Hadron, Kişisel, Linux, Python kategorisinde yayınlandı

Initramfs nedir, ne değildir?

with one comment

Linux‘a ya da daha genel anlamıyla UNIX‘e -ben gibi- biraz fazla merak sarmış biri de olsanız, sade bir kullanıcı da olsanız; işiniz Linux’a bir şekilde düştüyse, initramfs ya da kısa ve daha çok bilinen adıyla initrd ile karşılaşmış olmanız gerekir.

Bu gizemli şey hakkında yeterince bilgi sahibi olan insan sayısı azdır. Çünkü normal şartlarda uğraşacağınız ya da uğraşmak isteyeceğiniz bir seviyede çalışmaz. Onunla muhatap olmak için özel bir durumda olmanız gerekir.

Initramfs, kısaca ufak bir UNIX kök dosya sistemidir. Çoğu ev kullanıcısı için olmasa da olur ama işler biraz karmaşıklaşınca; mesela şifrelenmiş dosya sistemi kullanıyorsanız ya da bir çalışan CD(live CD) kullanıyorsanız, sistem açılırken initramfs aşamasını mutlaka geçmişsinizdir.

Peki ne işe yarar? Aslında çok basit: işletim sisteminizi açılışa hazırlar. Normalde Linux çekirdeği kök dosya sisteminizi bağlayıp sistemi açması için işleri init‘e devreder; fakat yapamayacakları da vardır. Klasik bir initramfs, gereken modülleri yükler(dosya sistemi modülleri gibi), dosya sistemlerini bağlar(şifrelenmiş, şifrelenmemiş ya da lvm gibi), açılış sürecini özelleştirir(boot splash gibi) ve şu an aklıma gelmeyen pek çok şeyi yapar.

Initramfs’in minyatür bir UNIX dosya sistemi olduğundan bahsettim. Eğer bir şekilde açılış esnasında debug moduna düşmüşseniz initramfs içinde gezinmiş olma ihtimaliniz vardır. GNU/Linux’da ya da başka bir UNIX benzeri işletim sisteminde, terminali açtığınızda ne görüyorsanız aynısını initramfs içinde de bulabilirsiniz. Fakat burada aklınıza bazı kritik sorular gelmeli: tüm bunlar nasıl oluyor? Henüz dosya sisteminin bağlanmadığı, temel C kitaplıklarının ve diğer hayati şeylerin olmadığı bir çalışma alanında nasıl oluyor da tüm UNIX araçlarına erişebiliyorsunuz?

Cevabı oldukça basit: BusyBox

Busybox hemen hemen tüm UNIX komutlarını, hatta dpkg, vi gibi araçları bile bünyesinde barındıran bir araçlar bütünü. Geniş bir kullanım alanına sahip. Elinizdeki Android yüklü telefondan, masanızdaki modeme kadar hemen her yerde ona rastlamak mümkün.

Busybox mükemmel ama rakipsiz de değil; klibc denen bir araç daha var ama pek tercih edilmiyor BusyBox’ın yanında.

Dağıtımınızın depolarından BusyBox’ı rahatlıkla kurabilirsiniz. Eğer böyle yaparsanız çok şey kaçırırsınız, BusyBox’ın aynen Linux çekirdeğinin metin tabanlı ayar arayüzüne benzeyen bir ayar arayüzü var. Deneyimsiz biri için onu sıfırdan ayarlamak, tabii, biraz zor olacaktır ama hazır bir ayar dosyası(.config) bulup kurcalarsanız nasıl güzel bir şey olduğunu hemen anlarsınız.

Çoğunuzun bildiği gibi, Linux çekirdeği açılış için temel işlemleri yaptıksan sonra görevi init‘e devreder ve olaylar gelişir. Araya initramfs girince işler biraz değişiyor. Hoş, çekirdek görevi yine init adında bir betiğe devrediyor bu sefer de.

Initramfs içinde yer alan init betiği bahsettiğim tüm açılış işlerini yürütüyor. Yaptığı işe göre çok karmaşık da olabilir çok basit de. Birazdan ufak ama çalışan bir örneğini göreceksiniz.

Asıl anlatmak istediğim kısıma geleyim: initramfs nasıl elde ediliyor?

Basitçe, 2-3 komutla temel düzeyde bir initramfs inşa edebilirsiniz.  Önemli olan çekirdeğinizin niteliği ve hazırladığınız init betiği.

Çekirdeğinizin niteliği önemli; çünkü birazdan hazırlayacağımız dosya sisteminde çekirdek modülleri ile ilgili bir şey bulunmuyor; fakat dosya sistemlerini bağlayan -sürücüler çekirdeğe gömülmemişse- ya da donanım sürücüleri yükleyen bir initramfs inşa ederseniz çekirdek sürücüleri ile uğraşmak zorunda kalacaksınız.

Önce dosya sisteminin temel yerleşimini oluşturalım:

# mkdir -p initramfs/{bin,sbin,etc,proc,sys,lib,dev}

initramfs diye bir dizin altında çalıştığımıza dikkat edin!

Şimdi sıra yukarıda bahsettiğim BusyBox’ı yerleştirmekte. Burada dikkat etmeniz gereken çok önemli bir nokta var. Kullandığınız BusyBox statik bağlanmış olmalı; yani her şey tek bir ikili(binary) dosya altında tutulmalı. Eğer dinamik bağlanmış olursa gereken kitaplıkları /lib altına kopyalamak durunda kalırsınız. Bu da biraz can sıkıcı olur.

BusyBox derlemenizin statik mi dinamik mi olduğunu anlamanın basit bir yolu var:

# file /bin/{bb,busybox} | grep static

BusyBox bb ya da busybox adıyla sistem yolunda bulunabiliyor. Almanız gereken sonuç şöyle:

/bin/busybox: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.27, stripped

Aynı komutu, söz gelimi bash için uyguladığımda bakın ne sonuç alıyorum:

/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

Yeterli açıklamayı yaptığımıza göre BusyBox’ı yeni dosya sistemimize kopyalayabiliriz:

# cp /bin/busybox initramfs/bin

BusyBox minyatür sistemimizin her şeyi. Henüz ortalıkta hiç bir şey yokken kabuk görevi görmesi için bir bağlantı oluşturmamız gerekiyor:

# ln -s busybox initramfs/bin/sh

Şimdi sıra açılış sürecini programladığımız betiği sisteme yerleştirmeye geldi. Görebileceğiniz en basit ama çalışan -benim sistemde çalıştı- init betiği aşağıda duruyor.

mount -t proc proc /proc
mount -n -t sysfs sys /sys
mount -o remount,rw /

/bin/busybox --install -s

mdev -s

exec /bin/sh

Betik basitçe /proc ve /sys dosya sistemlerini bağlıyor. Ardından da temel UNIX komutlarıyla(/bin/ls /bin/mv gibi) BusyBox’ın linklenmesini sağlıyor. Evet, initramfs altında tüm komutlar BusyBox’a çıkan linkler!

Yukarıdaki 3 satır kodu init diye bir dosya içinde initramfs dizini altına yerleştiriyoruz. Daha sonra onu chmod +x initramfs/init komutu ile çalıştırılabilir hale getirmeniz gerekiyor.

Şimdi gelelim “inşa” meselesine:

$ cd initramfs
$ find . | cpio -H newc -o > ../initramfs.cpio
$ cd ..
$ cat initramfs.cpio | gzip > initramfs.igz

Bu komutlarla initramfs.igz diye bir dosya üretmiş oluyoruz. Daha sonra onu GRUB ya da her ne kullanıyorsanız initrd gibi bir satıra eklemeniz gerekiyor. Eğer işler iyi giderse hiç bir özelliği olmayan bir UNIX komut satırı ile başbaşa kalacaksınız.

Onunla neler yapabileceğiniz size kalmış. BusyBox glibc ve uClibc ile derlebilen bir program. Biraz uğraşarak bir “tiny” Linux dağıtımı geliştirmek çok eğlenceli olabilir. Öyle değil mi! :)

Bu arada, çekirdeğinizin initramfs desteğinin olmasına dikkat edin. Eğer hazır derlenmiş bir çekirdek kullanıyorsanız destek vardır. Benim gibi ne zaman bir binary dağıtım kullandığını unutmuş biriyseniz şunu bilmenizde fayda var:

General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

Aklınızda bulunmasında fayda var. Initramfs’i çekirdeğe de gömebilirsiniz. Bunun için aşağıdaki ayara sahip olmanız gerek.

General setup --->
(/usr/src/initramfs) Initramfs source file(s)

/usr/src/initramfs yukarıda çalıştığımız dizini temsil ediyor. Bu şekilde ilerlerseniz çekirdeği derlediğinizde initramfs otomatik olarak oluşturulacak ve bzImage dosyasına gömülerek kullanılacaktır.

İleri okumalar:

Written by Burak Sezer

Haziran 25, 2011 at 12:59 am

Ar-Ge, Hadron, Linux kategorisinde yayınlandı

Takip Et

Her yeni yazı için posta kutunuza gönderim alın.