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.