Bir önceki bölümde, temel bir sistem hazırlamayı adım adım öğrenmiştik. O çalışmada, temel işlevselliğe sahip, kendi kendine açılabilen, küçük ama işlevsel bir Linux ortamı kurduk. Şimdi ise bu yolculuğu bir adım daha ileri taşıyoruz!
Artık daha güçlü, daha esnek ve daha geniş özelliklere sahip bir sistem inşa etmenin zamanı geldi. Bu bölümde, GNU araçlarıyla nasıl bir dağıtım hazırlayabileceğimizi detaylı şekilde anlatacağız. Peki neden busybox'la yetinmeyip GNU araçlarına geçiyoruz? İşte tam da burada kararımızın nedenlerini birlikte keşfedelim.
BusyBox:¶
BusyBox, bize temel sistem oluşturmada büyük kolaylık sağladı. Tek bir binary ile onlarca temel komutu çalıştırabildik, disk alanından tasarruf ettik ve bağımlılıklarla uğraşmadık. Busybox özellikle gömülü sistemlerde ve kurtarma ortamlarında adeta bir hayat kurtarıcı. BusyBox kurulumu ve kullanımıyla ilgili detayları Yardımcı Konular bölümünde bulabilirsiniz.
Avantajlar¶
Küçük boyut, Taşınabilirlik : Tek binary ile onlarca komut.
Düşük bağımlılık: Ekstra kütüphane gerektirmez.
Kolay kurulum: Derlemesi ve kurulumu oldukça basit.
Çok amaçlı kullanım: Tek dosyada tüm temel araçlar.
Dezavantajlar¶
Sınırlı özellikler: Gelişmiş parametre seçenekleri yok.
Standart dışı davranışlar, Script uyumsuzluğu: GNU araçlarıyla tam uyumlu değil. Karmaşık bash scriptleri çalışmayabilir.
Performans sınırlamaları: Büyük veri işlemlerinde yetersiz.
Hata ayıklama zorlukları: Detaylı debug için yetersiz.
İşte bu nedenle, artık GNU araçlarıyla donatılmış daha güçlü bir sistem hazırlama zamanı geldi.
Yeni Hedef: Tam Teşekküllü Bir Linux Dağıtımı¶
Bu yolculukta, aşağıdaki yeteneklere sahip bir sistem kurmayı hedefliyoruz:
Temel Linux komutlarını eksiksiz şekilde çalıştırabilmek
Bash kabuğu ile tam işlevli bir TTY ortamı sunmak
Farklı sıkıştırma formatlarıyla dosya işlemleri yapmak
Kernel modüllerini yönetebilmek
Initrd (Initial RAM Disk) oluşturabilmek
GRUB ile sistem önyüklemesi yapabilmek
Sistemi hem kurulabilir hem de live (canlı) modda çalıştırabilmek
İnternete bağlanabilir olmak
SSH ile uzaktan yönetim imkanı sağlamak
Metin düzenlemek için bir editör (nano) sunmak
Kurulum Dizini: Dağıtımın Oluşacağı Yer¶
Dağıtım sürecinde tüm çalışma dosyalarımızı saklayacağımız bir hedef dizin belirlemeliyiz.
Bu doküman boyunca varsayılan çalışma dizini olarak şunu kullanacağız:
$HOME/distro/rootfs
Burada $HOME ne demek? Bu, Linux ortamında aktif olan kullanıcının ev dizinini ifade eden standart bir değişkendir. Örneğin, sistemde giriş yapan kullanıcı adınız uzman ise; $HOME = /home/uzman konumunu belirtir.Bu sayede doküman boyunca paylaşılan tüm komutlarda $HOME ifadesi sizin kendi kullanıcı dizininize göre otomatik olarak uyarlanacak.
Artık ortam hazır!
Ortamın hazırlanmasından sonra bazı konuları bilmemiz gerekmektedir. Bunlar;
Derleme(Dinamik/Static)
BusyBox
chroot Kullanımı
Kernel/Modül Derleme
İso Oluşturma
Canlı Sistem Oluşturma Kullanma
qemu Kullanmı
cfdisk Kullanımı
Canlı Sistemden Kurulum Yapma
Burada liste halinde verilen konu başlıkları bu dokümanın Yardımcı Konular bölümünde anlatılmaktadır.
Bundan sonraki adımlarda kendi dağıtımımızı şekillendirmeye başlayacağız!
İşte Tüm Bu Yapı İçin İhtiyacımız Olan Paketler¶
0- base-file |
25- elfutils |
50- popt |
1- glibc |
26- libselinux |
51- icu |
2- readline |
27- tar |
52- iproute2 |
3- ncurses |
28- zlib |
53- net-tools |
4- bash |
29- brotli |
54- dhcp |
5- openssl |
30- curl |
55- openrc |
6- acl |
31- shadow |
56- rsync |
7- attr |
32- file |
57- kbd |
8- libcap |
33- eudev |
58- kernel |
9- libpcre2 |
34- cpio |
59- dialog |
10- gmp |
35- libsepol |
60- live-boot |
11- coreutils |
36- kmod |
61- live-config |
12- util-linux |
37- audit |
62- parted |
13- grep |
38- libxcrypt |
63- busybox |
14- sed |
39- libnsl |
64- nano |
15- mpfr |
40- libbsd |
65- grub |
16- gawk |
41- libtirpc |
66- efibootmgr |
17- findutils |
42- e2fsprogs |
67- efivar |
18- gcc |
43- dosfstools |
68- libssh |
19- libcap-ng |
44- initramfs-tools |
69- openssh |
20- sqlite |
45- libxml2 |
70- pam |
21- gzip |
46- expat |
71- |
22- xz-utils |
47- libmd |
72- |
23- zstd |
48- libaio |
73- |
24- bzip2 |
49- lvm2 |
74- |
Bağımlılıklar Zinciri: Doğru Sıralama Şart!¶
Linux paketinin sorunsuz çalışabilmesi için bağımlı olduğu tüm paketlerin önceden derlenmiş olması gerekir. Örneğin; bash paketini çalıştırmak için: readline ve ncurses paketleri gereklidir. readline ve ncurses için ise glibc paketi gereklidir. Bu sayfadaki liste bağımlılıklarına göre sıralandı. Liste sırasına göre ilerlemek oldukça önemlidir. Her paketin derleme aşaması, ayrı başlıklar altında detaylı bir şekilde anlatılacaktır.
Hazırlık: Gerekli Derleme Araçlarını Kurun!¶
Paket derleme işlemine başlamadan önce, aşağıdaki temel araçları sisteminize kurmalısınız.
sudo apt update
sudo apt-get install debootstrap xorriso mtools make squashfs-tools gcc wget unzip xz-utils tar zstd fakeroot \
autoconf automake autotools-dev make meson cmake ninja-build pkgconf patch libtool grub-pc grub-pc-bin