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.

Kaynak kodlar ve açılmış halleri

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.

CONFIG_STATIC=y olarak değiştirdik

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.