Ozan Şelte
Mühendis Adayı


LFS 0 - Hazırlık
7 Ağustos 2015 - Linux

İki-üç yıl önce lisenin ilk yılında ilk başarılı Linux From Scratch denememi gerçekleştirmiştim. Diyeceksiniz ki öncekiler başarısız mıydı? Değillerdi, ben kitabı açıp uzunluğunu görünce üşeniyordum. Tabii ki bu da bir başarısızlık fakat sayılmaz.

Linux From Scratch yani LFS nedir?

Sıfırdan linux sistemi inşa etme kitabıdır. Her hangi bir sistem üzerinde tek tek tüm paketleri yokluğa derler sonra onları boot ederiz. Bir bakmışız kendi linux’umuzu yapmışız. LFS çok zevklidir. Ne kadar uzun soluklu, işlemcinize göre hızlı ya da genelde yavaş olsa da bitince BENİM DAĞITIMIIIIM diye bilgisayarınıza yerine göre diskinize sarılıp uyuyabilirsiniz.

Neden uğraşalım?

Cidden önemli bir sorudur bu. Çoğu zaman paket kurmak bile canımızı sıkarken biz onları derlemeyi planlıyoruz. Gerek kendi GNU/Linux dağıtımızı oluşturmak gerek linux sisteminin inceliklerini öğrenmek yeterli sebeplerdir kanımca. Hem hava da atabilirsiniz.

Başlıyoruz

Önce kaynağımızı verelim. Linux From Scratch Ben yazıyı yazaker son sürüm Version 7.7 olduğu için bu versiyon üzerinen gideceğim. Belki kernel kurarken bir çakallık yaparak 4.2 kurarız.

Sistem Gereksinimleri

  • Öncelikle bir Linux dağıtımı mümkünse güncel olsun.
  • Bash-3.2
  • Binutils-2.17
  • Bison-2.3
  • Bzip2-1.0.4
  • Cureutils-6.9
  • Diffutils-2.8.1
  • Findutils-4.2.31
  • Gawk-4.0.1
  • GCC-4.1.2
  • Glibc-2.5.1
  • Grep-2.5.1a
  • Gzip-1.3.12
  • Linux Kernel-2.6.32
  • M4-1.4.10
  • Make-3.81
  • Patch-2.5.4
  • Perl-5.8.8
  • Sed-4.1.5
  • Tar-1.18
  • Texinfo-4.7
  • Xz-5.0.0

Şimdi diyeceksiniz ki, tabii ki haklı olarak diyeceksiniz, ben bu kadar şeyi nasıl kontrol ederim? Tek tek uzun sürer. LFS’yi yazan abilerimiz bize bash scripti de yazmışlar. Alttaki kodu terminale yapıştırabilirsiniz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools

export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
echo "/bin/sh -> `readlink -f /bin/sh`"
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1

if [ -h /usr/bin/yacc ]; then
  echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
elif [ -x /usr/bin/yacc ]; then
  echo yacc is `/usr/bin/yacc --version | head -n1`
else
  echo "yacc not found" 
fi

bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1

if [ -h /usr/bin/awk ]; then
  echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
elif [ -x /usr/bin/awk ]; then
  echo yacc is `/usr/bin/awk --version | head -n1`
else 
  echo "awk not found" 
fi

gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2-  # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1
xz --version | head -n1

echo 'main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
  then echo "g++ compilation OK";
  else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF

bash version-check.sh

Zaman üşengeçlik zamanı değildir. Şimdi bir bir kontrol edin bakalım uymayan var mı? Varsa güncelleyin onu da anlatırsam yazı çok uzar. Zaten siz linux kullanıp LFS’ye gönül vermişsiniz, üşenmezsiniz.

Disk Hazırlama

Şimdi burayı biraz kısa geçeceğim. Diskinizde yeni bir bölüm oluşturmanız gerekiyor. LFS yazarı gurularımız en az 4GB ayırmamızı istiyor. Tabi bu minimal sistem için. Ağ bağlantısı için bile yetmeyebilir. Ayırın işte kafanıza göre.

/(root), /home, /boot vs. nasıl istiyorsanız, kaç tane istiyorsanız ayarlayın disk bölümlerini. Ben 32GB flashdiskime kuracağım. SWAP falan ayırmayı da düşünmüyorum. Gerekirse sonra ayarlarım. Siz zaten disk nasıl bölümlenir biliyorsunuz LFS yapıyorsunuz yani. Bilmelisiniz. Sonra bu bölümleri biçimlendiriyoruz. mount edeceğimiz yeri belirtiyoruz. Disk bölümlerimizi mount ediyoruz. Örnek:

1
2
3
4
5
6
7
mkfs -v -t ext4 /dev/sdXX #ext4 biçimlendirme
mkswap /dev/sdYY #swap biçimlendirme
mkdir -pv /mnt/lfs #LFS klasörü oluşturma
export LFS=/mnt/lfs #Klasörü belirtme

mount -v -t ext4 /dev/sdXX $LFS #mount etme
/sbin/swapon -v /dev/sdYY

Tavsiyem, ki bu gurularımızın da tavsiyesidir, .bash_profile dosyanıza $LFS değişkenini ekleyin.