GNU/Linux yüklü bir sabit diskimiz olduğunu varsayalım. Bu sabit diskin tamamının içeriğini, kalıp (image) şeklinde bir dosyaya aktarmamız mümkün. Bu kalıp dosyası içinde sabit disk bölümleme bilgileri, işletim sistemi yükleyici (GRUB), Linux çekirdeği, yüklü olan yazılımlar vs bir şekilde yer almakta. Benim yapmak istediğim ise bu işlemin tam tersi... Yani boş bir dosyayı alacağım, içine gerekenleri elle tıkıştıracağım ve her hangi bir kurulum materyali kullanmadan hazırladığım bu kalıbı bir sabit diske yazdığımda, disk boot edecek.
Yapay kalıbımızın boot etmesi, ilk aşama için yeterli olacağı için bir şekilde işletim sistemi yükleyiciyi (GRUB), Linux çekirdeği ve kabuğu (shell) kalıba yüklemek yeterli olacak. Başlamadan önce bütün bunları, favori dağıtımım Debian ile yaptığımı hatırlatayım. Aynı işi başka dağıtımlarla yapmak isteyenlerin, bazı işlemleri farklı şekilde yapmaları gerekecek.
Yapay Kalıp Oluşturuluyor
Öncelikle içi boş bir dosya oluşturacağız. Bu dosya, yapay kalıbımız olacak. Bunu, yeni satın alınmış bir sabit disk gibi düşünebilirsiniz. Sonra da bu kalıp içine bir bölüm (partition) koyacağız ve daha sonra da bölümümüzü biçimlendirecegiz (format).
|
dd komutu 300 MB boyutunda, içi sıfırlarla dolu bir dosya oluşturuyor. Yani yeni bir sabitdisk satın almış oluyoruz. losetup komutu ile bunu aygıt (device) gibi gösterip fdisk komutu ile bu sanal diskte bir bölüm oluşturuyoruz.
Şimdi sıra geldi oluşturmuş olduğumuz bölümü biçimlendirmeye... Biçimlendirilecek kısım, yapay kalıbımızın tamamı değil. Sadece kalıp içinde oluşturmuş olduğumuz yapay bölümü biçimlendireceğiz. fdisk komutunu kullanırken dikkat ettiyseniz kalıbımızın her track'ında 63 sektör yer almakta. Birinci bölüm, ilk tracktan sonra başlayacağı için ve her sektör 512 byte olduğu için 32256. byte'tan (63 x 512) sonra birinci bölüm başlamakta. Öyleyse bu yapay kalıp dosyasının 32256. byte'tan sonraki kısmını bir aygıt olarak tanıtırsak bu aslında bizim 1. bölümümüz olacak (yani /dev/hda1 gibi). Bu bölümü de, her hangi bir disk bölümünü biçimlendirir gibi biçimlendirebileceğiz.
|
Başlıca Klasörlerin Oluşturulması
Her GNU/Linux sistemde bulunması gereken bazı klasörler var. Bu klasörleri, biçimlendirmiş olduğumuz bölüm içinde oluşturacağız ama klasör oluşturmak gibi işlemleri yapabilmemiz için önce bu bölümü, gerçek bir disk bölümü gibi dosya sistemimize mount etmemiz gerekiyor.
|
GRUB Önyükleyicinin Yüklenmesi
Yapay kalıbımızın boot edebilmesi için ona bir de işletim sistemi yükleyici yüklemek gerekiyor. GRUB ayarlarını yaparken benim kullanmış olduğum ve Debian Lenny'nin şu anki default çekirdeği olan 2.6.26-2-686 çekirdeğe göre işlemlerimi yapacağım.
|
/mnt/disk/boot/grub/menu.lst dosyasının içeriğini bir editör ile şu hale getiriyoruz:
|
Son olarak da GRUB'ı yapay kalıbımızın MBR bölümüne yüklüyoruz.
|
Paketlerin Kurulması
Bu bölümde, yapay diskimize paketleri yükleyeceğiz. İşlemleri yaparken Debian'ın paket yönetim sistemi kullanılacağı için aynı komutlar, Debian tabanlı olmayan dağıtımlarda çalışmayacaktır. O nedenle başka dağıtım kullananların, buradaki işlemlerin dengi neyse onları yapmaları gerekmektedir.
Öncelikle paket depomuzu update edeceğiz ve sonra yükleyeceğimiz paketleri, yerel depomuza alacağız. Paket işlemlerinde ben aptitude komutunu tercih ediyorum ama isteyen apt-get veya synaptic ile de aynı işlemleri yapabilir.
|
busybox, az yer kapladığı için özellikle gömülü sistemlerde kullanılan ve en çok kullanılan komutların, az yer kaplayacak şekilde yeniden yazılmış hallerini içeren bir paket... Hem busybox'ın hem de kabuk olarak seçtiğimiz bash'ın statik sürümleri de paket deposunda mevcut. Statik sürümlerde, kullanılan kütüphaneler, yazılım içine gömüldüğü için ayrıca kütüphane paketlerini yüklemek gerekmiyor ama ileride yükleyebileceğimiz bazı paketlerin kütüphanelere ihtiyaç duyma ihtimali nedeniyle şimdiden kütüphaneleri de yükledik. Eee madem kütüphaneleri yükledik, öyleyse busybox ve bash'ın da kütüphaneleri kullanan sürümlerini yükleyelim.
Yukarıda dikkatinizi çekmiş olabilecek bir nokta da initrd.img dosyasının cp ile mevcut sistemden yükleniyor olması. Çekirdek paketinde bu dosya yer almıyor, yükleme esnasında oluşturuluyor ama biz yüklemeyi canlı bir sisteme yapmadığımız için mevcut sistem için oluşturulmuş olan initrd.img dosyasını kopyalayarak işimizi hallediyoruz.
Sıra Geldi Boot Etmeye
Artık elimizde boot edebilecek bir kalıp bulunmakta. Bu kalıbı bir sabit diske yazarsak, o disk boot edecek ve kabuk açılacak. Elimde şu an için boşta bir disk olmadığından ben bunu, bir diske yazmak yerine, qemu ile disk gibi kullanarak test ettim. Bu testi yapabilmek için eğer yoksa qemu adlı sanallaştırma yazılımını kurmanız veya gerçek disk kalıplarını kullanabilen herhangi bir sanallaştırma yazılımını kullanmanız gerekiyor.
|
Bu noktadan sonra root olarak devam etmeye gerek yok. Normal kullanıcı olarak kalıbımız ile boot ediyoruz:
|
Her şey doğru giderse (ki bende gitti) sisteminiz boot edecek ve
I have no name!@(none):/# diyen kabuk ekranını göreceksiniz. 2 kere Tab tuşuna basarsanız, kullanabileceğiniz komutları görebilirsiniz. Kullanabileceğiniz komutların bir çoğu busybox içinde... busybox komutlarını görmek için busybox yazıp enter tuşuna basın. Örneğin busybox ls komutu, bildiğimiz ls komutu ile aynı işi yapıyor.
Bugünlük de bu kadar