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;

  1. Derleme(Dinamik/Static)

  2. BusyBox

  3. chroot Kullanımı

  4. Kernel/Modül Derleme

  5. İso Oluşturma

  6. Canlı Sistem Oluşturma Kullanma

  7. qemu Kullanmı

  8. cfdisk Kullanımı

  9. 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