Bu yazıda linux dağıtımlarının nasıl çalıştığını anlamak amacıyla kendi basit minimal linux dağıtımımızı oluşturacağız.
Gerekli paketlerin kurulması
Öncelikle derleme işlemine başlamadan önce derleme araçlarına ve test için qemuya ihtiyacımız bulunmaktadır. Bunun için aşağıdaki paketleri kurmalıyız.
apt install build-essential bison flex libc6-dev bc qemu-kvm
Kaynak kodların edinilmesi
Linux çekirdeğinin kaynak kodunu https://kernel.org üzerinden indirin.
Busybox kaynak kodunu https://busybox.net üzerinden indirin.
Daha sonra indirdiğimiz arşivleri açalım. Son durumda aşağıdaki gibi olmalıdır.
Derleme aşaması
Derleme işlemleri ile oluşturacağımız minimal dağıtımın parçalarını elde edeceğiz. Bunun için önce busybox sonra linux çekirdeğini derlememiz gerekmektedir. Derleme işlemi kaynak kodun bulunduğu dizinde gerçekleştirilir. Derlemeler bilgisayarınızın hızına bağlı olarak biraz uzun sürebilir ve fazla enerji harcamasına sebep olabilir.
Öncelikle busybox kaynak kodunu derleyelim. Henüz libc ile ilgili olan kısımı anlatmadığım için static olarak derlememiz gerekmektedir (Bununla ilgili detaylı bilgi 2. kısımda anlatılacaktır). Bunun için öncelikle make defconfig
komutunu kullanalım. Daha sonra da .config dosyasını açıp aşağıdaki gibi düzenleyelim.
Daha sonra make
komutunu kullanarak derleme işlemini yapalım.
Derleme tamamlandıktan sonra busybox dosyamız oluşmuş olmalıdır. Static olup olmadığını anlamak için ldd komutu ile kontrol edebiliriz.
$ ldd busybox not a dynamic executable
Şimdi sıra linux çekirdeğinin derlenmesinde. Bunun için önce make defconfig
komutunu kullanıp daha sonra da make bzImage
komutu ile çekirdek imajımızı oluşturalım.
Derleme tamamlandığında Kernel: arch/x86/boot/bzImage is ready (#1) şeklinde bir satır yazmalıdır. Kernelimizin düzgün derlenip derlenmediğini anlamak için aşağıdaki komutu kullanabilirsiniz.
$ file arch/x86/boot/bzImage arch/x86/boot/bzImage: Linux kernel x86 boot executable bzImage, version 6.2.7 (a@localhost.localdomain) #1 SMP PREEMPT_DYNAMIC Tue Mar 21 08:18:58 -00 2023, RO-rootFS, swap_dev 0XB, Normal VGA
Bir sonraki bölümde derlemiş olduğumuz çekirdeği ve busybox dosyasını kullanarak initramfs oluşturma ve test etme anlatılacaktır.