Ozan Şelte
Mühendis Adayı


LFS 2 - Geçici Sistemi Tamamlama
11 Ağustos 2015 - Linux

Şimdi kafanızda bir şeyler canlandırmanız gerekiyor. Bir önceki yazıda yaptıklarımızı hatırlayın. Bazı paketlere 1.Aşama demiştik. Şimdi onları tekrar derleyeceğiz ama neden? Sistemimizde var olan gcc, binutils benzeri paketler yapı marketlerden satın aldığınız hazır araçlardır. Bir önceki yazıda satın aldığımız araçlarla kendi çekicimizi yaptık. Şimdi ise ilk yapacağımız iş kendi çekicimizle kendimize yeni bir çekiç yapmak. Bu sayede geçici sistemimizi %100 bu iş için özel hazırlanmış araçlarla oluşturacağız. Bir not atalım. Kitapta bazı programları derlediğimizde sisteme nelerin kurulduğu belirtilmiş, ben de buraya yazacağım. Kalın yazdıklarım programdır.
İtalik yazdıklarım ise kütüphanedir. Başlayalım.

1
su - lfs

Binutils(2.Aşama)

Derleme süresi: 1 SBU, Gerekli disk alanı: 574 MB

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
cd $LFS/sources  
tar xvf binutils-2.25.tar.bz2  
cd binutils-2.25  
mkdir -v ../binutils-build  
cd ../binutils-build

CC=$LFS_TGT-gcc                \
AR=$LFS_TGT-ar                 \
RANLIB=$LFS_TGT-ranlib         \
../binutils-2.25/configure     \
    --prefix=/tools            \
    --disable-nls              \
    --disable-werror           \
    --with-lib-path=/tools/lib \
    --with-sysroot

make
make install

# bu komutlar sonraki derlemeler için gerekli temizlikler
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin

cd $LFS/sources
rm -rf binutils-2.25/
rm -rf binutils-build/

GCC(2.Aşama)

Derleme süresi: 7.7 SBU, Gerekli disk alanı: 2.6 GB

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
56
57
58
59
60
61
62
cd $LFS/sources  
tar -xvf gcc-4.9.2.tar.bz2  
cd gcc-4.9.2  

cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
  `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h
for file in \
 $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
do
  cp -uv $file{,.orig}
  sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
      -e 's@/usr@/tools@g' $file.orig > $file
  echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
  touch $file.orig
done

tar -xf ../mpfr-3.1.2.tar.xz
mv -v mpfr-3.1.2 mpfr
cd mpfr
patch -Np1 -i ../../mpfr-3.1.2-upstream_fixes-3.patch  
cd ..
tar -xf ../gmp-6.0.0a.tar.xz
mv -v gmp-6.0.0 gmp
tar -xf ../mpc-1.0.2.tar.gz
mv -v mpc-1.0.2 mpc

mkdir -v ../gcc-build  
cd ../gcc-build

CC=$LFS_TGT-gcc                                      \
CXX=$LFS_TGT-g++                                     \
AR=$LFS_TGT-ar                                       \
RANLIB=$LFS_TGT-ranlib                               \
../gcc-4.9.2/configure                               \
    --prefix=/tools                                  \
    --with-local-prefix=/tools                       \
    --with-native-system-header-dir=/tools/include   \
    --enable-languages=c,c++                         \
    --disable-libstdcxx-pch                          \
    --disable-multilib                               \
    --disable-bootstrap                              \
    --disable-libgomp

make
make install
ln -sv gcc /tools/bin/cc

# testlerimizi yapalım
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
# örnek çıktı
# [Requesting program interpreter: /tools/lib/ld-linux.so.2]
rm -v dummy.c a.out

cd $LFS/sources
rm -rf gcc-4.9.2/
rm -rf gcc-build/

Tcl

Derleme süresi: 0.8 SBU, Gerekli disk alanı: 67 MB, Kurulanlar:

  • tclsh8.6
  • tclsh
  • libtcl8.6.so
  • libtclstub8.6.a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd $LFS/sources  
tar xvf tcl8.6.3-src.tar.gz  
cd tcl8.6.3

cd unix
./configure --prefix=/tools
make
make install
chmod -v u+w /tools/lib/libtcl8.6.so
make install-private-headers
ln -sv tclsh8.6 /tools/bin/tclsh

cd $LFS/sources
rm -rf tcl8.6.3/

Expect

Derleme süresi: 0.1 SBU, Gerekli disk alanı: 4.6 MB, Kurulanlar:

  • expect
  • libexpect-5.45.so
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd $LFS/sources  
tar xvf expect5.45.tar.gz
cd expect5.45

cp -v configure{,.orig}
sed 's:/usr/local/bin:/bin:' configure.orig > configure

./configure --prefix=/tools       \
            --with-tcl=/tools/lib \
            --with-tclinclude=/tools/include
make
make SCRIPTS="" install

cd $LFS/sources
rm -rf expect5.45/

DejaGNU

Derleme süresi: 0.1 SBU, Gerekli disk alanı: 4.6 MB, Kurulanlar:

  • runtest
1
2
3
4
5
6
7
8
9
cd $LFS/sources  
tar xvf dejagnu-1.5.2.tar.gz
cd dejagnu-1.5.2

./configure --prefix=/tools
make install

cd $LFS/sources
rm -rf dejagnu-1.5.2/

Check

Derleme süresi: 0.1 SBU, Gerekli disk alanı: 11 MB, Kurulanlar:

  • checkmk
  • libcheck.a
  • libcheck.so
1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf check-0.9.14.tar.gz
cd check-0.9.14

PKG_CONFIG= ./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf check-0.9.14/

Ncurses

Derleme süresi: 0.5 SBU, Gerekli disk alanı: 45 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd $LFS/sources  
tar xvf ncurses-5.9.tar.gz
cd ncurses-5.9

./configure --prefix=/tools \
            --with-shared   \
            --without-debug \
            --without-ada   \
            --enable-widec  \
            --enable-overwrite
make
make install

cd $LFS/sources
rm -rf ncurses-5.9/

Bash

Derleme süresi: 0.4 SBU, Gerekli disk alanı: 63 MB

1
2
3
4
5
6
7
8
9
10
11
12
cd $LFS/sources  
tar xvf bash-4.3.30.tar.gz
cd bash-4.3.30
patch -Np1 -i ../bash-4.3.30-upstream_fixes-1.patch

./configure --prefix=/tools --without-bash-malloc
make
make install
ln -sv bash /tools/bin/sh

cd $LFS/sources
rm -rf bash-4.3.30/

Bzip2

Derleme süresi: 0.1 SBU, Gerekli disk alanı: 6.4 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch

make
make PREFIX=/tools install

cd $LFS/sources
rm -rf bzip2-1.0.6/

Coreutils

Derleme süresi: 0.6 SBU, Gerekli disk alanı: 162 MB

1
2
3
4
5
6
7
8
9
10
11
cd $LFS/sources  
tar xvf coreutils-8.23.tar.xz
cd coreutils-8.23
# burada aslında bir patch var fakat kurunca hata verdiği için yapılmaması gereken bir patch. Biz de yapmadan devam ediyoruz.

./configure --prefix=/tools --enable-install-program=hostname
make
make install

cd $LFS/sources
rm -rf coreutils-8.23/

Diffutils

Derleme süresi: 0.2 SBU, Gerekli disk alanı: 21 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf diffutils-3.3.tar.xz
cd diffutils-3.3

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf diffutils-3.3/

File

Derleme süresi: 0.1 SBU, Gerekli disk alanı: 16.9 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf file-5.22.tar.gz
cd file-5.22

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf file-5.22/

Findutils

Derleme süresi: 0.2 SBU, Gerekli disk alanı: 29 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf findutils-4.4.2.tar.gz
cd findutils-4.4.2

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf findutils-4.4.2/

Gawk

Derleme süresi: 0.2 SBU, Gerekli disk alanı: 37 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf gawk-4.1.1.tar.xz
cd gawk-4.1.1

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf gawk-4.1.1/

Gettext

Derleme süresi: 1 SBU, Gerekli disk alanı: 153 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd $LFS/sources  
tar xvf gettext-0.19.4.tar.xz
cd gettext-0.19.4

cd gettext-tools
EMACS="no" ./configure --prefix=/tools --disable-shared

make -C gnulib-lib
make -C intl pluralx.c
make -C src msgfmt
make -C src msgmerge
make -C src xgettext

cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin

cd $LFS/sources
rm -rf gettext-0.19.4/

Grep

Derleme süresi: 0.2 SBU, Gerekli disk alanı: 20 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf grep-2.21.tar.xz
cd grep-2.21.tar.xz

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf grep-2.21.tar.xz/

Gzip

Derleme süresi: 0.4 SBU, Gerekli disk alanı: 9.9 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf gzip-1.6.tar.xz
cd gzip-1.6

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf gzip-1.6/

M4

Derleme süresi: 0.2 SBU, Gerekli disk alanı: 20 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf m4-1.4.17.tar.xz
cd m4-1.4.17

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf m4-1.4.17/

Make

Derleme süresi: 0.1 SBU, Gerekli disk alanı: 14.1 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf make-4.1.tar.bz2
cd make-4.1

./configure --prefix=/tools --without-guile
make
make install

cd $LFS/sources
rm -rf make-4.1/

Patch

Derleme süresi: 0.2 SBU, Gerekli disk alanı: 11.3 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf patch-2.7.4.tar.xz
cd patch-2.7.4

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf patch-2.7.4/

Perl

Derleme süresi: 1.2 SBU, Gerekli disk alanı: 298 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
cd $LFS/sources  
tar xvf perl-5.20.2.tar.bz2
cd perl-5.20.2

sh Configure -des -Dprefix=/tools -Dlibs=-lm
make

cp -v perl cpan/podlators/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.20.2
cp -Rv lib/* /tools/lib/perl5/5.20.2

cd $LFS/sources
rm -rf perl-5.20.2/

Sed

Derleme süresi: 0.1 SBU, Gerekli disk alanı: 10.7 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf sed-4.2.2.tar.bz2
cd sed-4.2.2

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf sed-4.2.2/

Tar

Derleme süresi: 0.3 SBU, Gerekli disk alanı: 36 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf tar-1.28.tar.xz
cd tar-1.28

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf tar-1.28/

Texinfo

Derleme süresi: 0.2 SBU, Gerekli disk alanı: 100 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf texinfo-5.2.tar.xz
cd texinfo-5.2

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf texinfo-5.2/

Util-linux

Derleme süresi: 0.6 SBU, Gerekli disk alanı: 139 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd $LFS/sources  
tar xvf util-linux-2.26.tar.xz
cd util-linux-2.26

./configure --prefix=/tools                \
            --without-python               \
            --disable-makeinstall-chown    \
            --without-systemdsystemunitdir \
            PKG_CONFIG=""
make
make install

cd $LFS/sources
rm -rf util-linux-2.26/

Xz

Derleme süresi: 0.3 SBU, Gerekli disk alanı: 21 MB

1
2
3
4
5
6
7
8
9
10
cd $LFS/sources  
tar xvf xz-5.2.0.tar.xz
cd xz-5.2.0

./configure --prefix=/tools
make
make install

cd $LFS/sources
rm -rf xz-5.2.0/

Geçici sistemimizi sonunda tamamladık. Bu sistem ile asıl LFS sistemimizi derleyeceğiz. Umarım ki farketmedim bir sorun çıkmamıştır.

Temizlik(Stripping)

Burada fazlalık olarak oluşturular dosyaları temizleyeceğiz. Çünkü gurularımız bir dahaki bölüm için 3GB boş alan olmalı diyorlar. Bu komutlarda hata almanız önemli değil zaten varsa siliyor.

1
2
3
4
strip --strip-debug /tools/lib/*
/usr/bin/strip --strip-unneeded /tools/{,s}bin/*

rm -rf /tools/{,share}/{info,man,doc}

Kullanıcı ayarları

Artık asıl LFS sistemimizi kuracağımız geçici sistemi hazırlamış olduğumuza göre lfs kullanıcısıyla bir işimiz kalmadı. Çıkalım ve root olalım. $LFS tanımının var olduğundan emin olun. Tavsiyem /root/.bashrc dosyanıza eklemenizdir.

1
2
export LFS=/mnt/lfs
chown -R root:root $LFS/tools

Kitap burada not düşmüş. Eğer ileride başka bir LFS çalışması planlıyorsak /tools klasörünü yedeklememizi istiyor. Çünkü bir sonraki bölümde buraya müdahale edeceğiz. Eğer niyetiniz varsa yedekleyin.