/ Linux

LFS #0 - Hazırlık

İ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 :D 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 ben 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.

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 :D

/(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ümlerniz 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:

 #ext4 biçimlendirme
mkfs -v -t ext4 /dev/sdXX
 #swap biçimlendirme
mkswap /dev/sdYY
 #LFS klasörü oluşturma ve belirtme
mkdir -pv /mnt/lfs
export LFS=/mnt/lfs

 #mount etme, siz başka bölümler oluşturduysanız onlara da uygulayacaksınız
mount -v -t ext4 /dev/sdXX $LFS
/sbin/swapon -v /dev/sdYY

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

İlk yazı bu kadar. Kısa mı uzun mu ben bilmiyorum. En kısa sürede devam serisini de ekleyeceğim. Olumlu, olumsuz ya da soru formatlarında yorumlarınızı bekliyorum.

Ozan Şelte

Ozan Şelte

Kendini Bodrumlu sayan bir İstanbullu. Gebze Teknik Üniversitesi öğrencisi, İzmir Atatürk Lisesi 128. yıl mezunu

Read More