lfs(systemv版本)學習筆記-第2頁

lfs(systemv)學習筆記-第1頁 的地址http://www.javashuo.com/article/p-mjvyufhs-s.htmlhtml

 六.構建工具鏈

1.書中第五章節中構建的全部包不建議進行測試。python

2.這時你的命令行或終端的環境應該是:
1.變量:export LFS=/mnt/lfs
2.已經掛載你爲lfs建立的全部分區
3.切換到lfs用戶。linux

第5.4章節

構建binutils包c++

1.根據上一章節的構建要求,首先進入$LFS/sources/目錄bootstrap

cd $LFS/sources/


2.解壓Binutils包並進入binutils包的目錄:bash

tar -xvf binutils-2.32.tar.xz

cd binutils-2.32

3.運行書中的構建過程多線程

4.建立編譯用的目錄並進入ide

mkdir -v build
cd build

5.設置Binutils進行編譯工具

../configure --prefix=/tools            \
             --with-sysroot=$LFS        \
             --with-lib-path=/tools/lib \
             --target=$LFS_TGT          \
             --disable-nls              \
             --disable-werror

6.編譯包學習

make -j8 (這裏使用筆記1中的4.5章節所介紹的make -j(n)參數多線程編譯)

7.若是構建x64的系統須要建立符號連接

case $(uname -m) in
  x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
esac

8.安裝包

make install

9.返回sources目錄並刪除binutils包的解壓目錄

cd $LFS/sources/

rm -rf binutils-2.32

第5.5章節

第一遍編譯gcc

1.解壓gcc並進入gcc的解壓目錄

tar -xvf gcc-8.2.0.tar.xz
cd gcc-8.2.0
 

2.運行書中的編譯安裝過程

tar -xf ../mpfr-4.0.2.tar.xz
mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz
mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz
mv -v mpc-1.1.0 mpc

for file in gcc/config/{linux,i386/linux{,64}}.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

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
 ;;
esac

mkdir -v build
cd       build

../configure                                       \
    --target=$LFS_TGT                              \
    --prefix=/tools                                \
    --with-glibc-version=2.11                      \
    --with-sysroot=$LFS                            \
    --with-newlib                                  \
    --without-headers                              \
    --with-local-prefix=/tools                     \
    --with-native-system-header-dir=/tools/include \
    --disable-nls                                  \
    --disable-shared                               \
    --disable-multilib                             \
    --disable-decimal-float                        \
    --disable-threads                              \
    --disable-libatomic                            \
    --disable-libgomp                              \
    --disable-libmpx                               \
    --disable-libquadmath                          \
    --disable-libssp                               \
    --disable-libvtv                               \
    --disable-libstdcxx                            \
    --enable-languages=c,c++

make  -j8

make install

3.返回sources目錄,並刪除gcc的解壓包目錄。

cd $LFS/sources/

rm -rf  gcc-8.2.0

第5.6章節 

1.Linux API Headers在linux-4.18.5.tar.xz中,須要解壓並操做的包是linux-4.18.5.tar.xz軟件包。

2.解壓linux包並進入linux的解壓目錄

tar -xvf linux-4.20.12.tar.xz
cd   linux-4.20.12
 

3.運行書中的編譯命令

make mrproper

make INSTALL_HDR_PATH=dest headers_install
cp -rv dest/include/* /tools/include

4.返回sources目錄並刪除linux的解壓包

cd $LFS/sources/

rm -rf  linux-4.20.12

第5.7章節

1.解壓並進入glibc軟件包的解壓目錄

tar -xvf glibc-2.29.tar.xz

cd glibc-2.29

2.運行書中的編譯安裝命令

mkdir -v build
cd       build

../configure \ --prefix=/tools \ --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ --enable-kernel=3.2 \ --with-headers=/tools/include make -j1 make install

3.執行完整性檢查覈對輸出內容並清理測試文件

echo 'int main(){}' > dummy.c
$LFS_TGT-gcc dummy.c readelf -l a.out | grep ': /tools' rm -v dummy.c a.out

4.返回sources目錄並刪除glibc目錄

cd $LFS/sources/

rm -rf glibc-2.29

第5.8章節

1.Libstdc ++在gcc軟件包中,解壓gcc-8.2.0包,並進入gcc目錄進行構建

tar -xvf gcc-8.2.0.tar.xz

cd gcc-8.2.0

2.運行書中的編譯安裝命令

mkdir -v build
cd       build

../libstdc++-v3/configure \ --host=$LFS_TGT \ --prefix=/tools \ --disable-multilib \ --disable-nls \ --disable-libstdcxx-threads \ --disable-libstdcxx-pch \ --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/8.2.0 make -j8 make install

3.返回sources目錄並刪除解壓包目錄

cd $LFS/sources/

rm -rf  gcc-8.2.0

第5.9章節

binutils的第二次編譯安裝

1.解壓並進入binutils軟件包目錄

tar -xvf binutils-2.32.tar.xz

cd binutils-2.32
 

2.運行書中的編譯安裝命令

mkdir -v build
cd       build

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

make -j8

make install

3.準備連接

make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin

4.返回並刪除binutils包

cd $LFS/sources/

rm -rf binutils-2.32

第5.10章節

gcc的第二次編譯安裝

1.解壓並進入gcc包目錄

tar -xvf gcc-8.2.0.tar.xz

cd gcc-8.2.0

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 gcc/config/{linux,i386/linux{,64}}.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

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
  ;;
esac

tar -xf ../mpfr-4.0.2.tar.xz
mv -v mpfr-4.0.2 mpfr
tar -xf ../gmp-6.1.2.tar.xz
mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz
mv -v mpc-1.1.0 mpc

mkdir -v build
cd       build

CC=$LFS_TGT-gcc                                    \
CXX=$LFS_TGT-g++                                   \
AR=$LFS_TGT-ar                                     \
RANLIB=$LFS_TGT-ranlib                             \
../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 -j8

make install

ln -sv gcc /tools/bin/cc

echo 'int main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'

rm -v dummy.c a.out

3.返回sources目錄並刪除目錄

cd $LFS/sources/

rm -rf gcc-8.2.0

第5.11章節

構建安裝tcl

1.解壓並進入tcl包

tar -xvf tcl8.6.9-src.tar.gz

cd tcl8.6.9-src
 

2.按照書中的說明編譯安裝

cd unix
./configure --prefix=/tools

make -j8

make install

3.配置tcl

chmod -v u+w /tools/lib/libtcl8.6.so

make install-private-headers

ln -sv tclsh8.6 /tools/bin/tclsh

4.返回sources目錄並刪除目錄

cd $LFS/sources/

rm -rf tcl8.6.9-src

第5.12章節

編譯安裝expect包

1.解壓並進入expect目錄

tar -xvf expect5.45.4.tar.gz
cd expect5.45.4
 

2.按照書中的編譯說明進行編譯安裝

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 -j8

make SCRIPTS="" install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf expect5.45.4

第5.13章節

編譯安裝dejagnu包

1.解壓並進入dejagnu包

tar -xvf dejagnu-1.6.2.tar.gz

cd dejagnu-1.6.2

2.參照書中方法編譯安裝

./configure --prefix=/tools

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf  dejagnu-1.6.2

第5.14章節

編譯安裝m4包

1.解壓並進入m4包目錄

tar -xvf m4-1.4.18.tar.xz

cd  m4-1.4.18

2.參照書中說明編譯安裝

sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf  m4-1.4.18

第5.15章節

編譯安裝ncurses包

1.解壓並進入ncurses包

tar -xvf ncurses-6.1.tar.gz

cd  ncurses-6.1

2.參照書中說明編譯安裝

sed -i s/mawk// configure

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

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf ncurses-6.1

第5.16章節

編譯安裝bash

1.解壓並進入bash包目錄

tar -xvf bash-5.0.tar.gz

cd bash-5.0
 

2.參照書中內容編譯安裝

/configure --prefix=/tools --without-bash-malloc

make -j8

make install

ln -sv bash /tools/bin/sh

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf bash-5.0

第5.17章節

編譯安裝bison

1.解壓並進入bison包目錄

tar -xvf bison-3.3.2.tar.xz

cd bison-3.3.2
 

2.參照書中內容編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf bison-3.3.2

第5.18章節

編譯安裝bzip2包

1.解壓並進入bzip2包目錄

tar -xvf bzip2-1.0.6.tar.gz

cd  bzip2-1.0.6

2.參照書中說明編譯安裝

make -j8

make PREFIX=/tools install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf bzip2-1.0.6

第5.19章節

編譯安裝coreutils包

1.解壓並進入coreutils包目錄

tar -xvf coreutils-8.30.tar.xz

cd  coreutils-8.30

2.參照書中說明編譯安裝

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

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf coreutils-8.30

第5.20章節

編譯安裝diffutils包 

1.解壓並進入diffutils包目錄

tar -xvf diffutils-3.7.tar.xz

cd  diffutils-3.7

2.參照書中內容編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf diffutils-3.7

第5.21章節

編譯安裝file包

1.解壓並進入file包目錄

tar -xvf file-5.36.tar.gz

cd  file-5.36

2.參照書中說明編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf file-5.36

第5.22章節

編譯安裝findutils包

1.解壓並進入findutils包目錄

tar -xvf findutils-4.6.0.tar.gz

cd  findutils-4.6.0

2.參照書中說明編譯安裝

sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' gl/lib/*.c
sed -i '/unistd/a #include <sys/sysmacros.h>' gl/lib/mountlist.c
echo "#define _IO_IN_BACKUP 0x100" >> gl/lib/stdio-impl.h

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf findutils-4.6.0

第5.23章節

編譯安裝gawk包

1.解壓並進入gawk包目錄

tar -xvf gawk-4.2.1.tar.xz

cd gawk-4.2.1

2.參照書中的說明編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf gawk-4.2.1

第5.24章節

編譯安裝gettext包

1.解壓並進入gettext包目錄

tar -xvf gettext-0.19.8.1.tar.xz

cd gettext-0.19.8.1

2.參照書中說明編譯安裝

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

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf gettext-0.19.8.1

第5.25章節

編譯安裝grep包

1.解壓並進入grep包目錄

tar -xvf grep-3.3.tar.xz

cd  grep-3.3

2.參照書中說明編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf grep-3.3

第5.26章節

編譯安裝gzip包

1.解壓並進入gzip包目錄

tar -xvf gzip-1.10.tar.xz

cd  gzip-1.10

2.參照書中說明編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf gzip-1.10

第5.27章節

編譯安裝make包

1.解壓並進入make包目錄

tar -xvf make-4.2.1.tar.bz2

cd make-4.2.1

2.參照書中說明編譯安裝

sed -i '211,217 d; 219,229 d; 232 d' glob/glob.c

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

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf make-4.2.1

第5.28章節

編譯安裝patch包

1.解壓並進入patch包

tar -xvf patch-2.7.6.tar.xz

cd patch-2.7.6

2.參照書中說明編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf patch-2.7.6

第5.29章節

編譯安裝perl包

1.解壓並進入perl包目錄

tar -xvf perl-5.28.1.tar.xz

cd perl-5.28.1

2.參照書中說明編譯安裝

sh Configure -des -Dprefix=/tools -Dlibs=-lm -Uloclibpth -Ulocincpth

make -j8

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

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf perl-5.28.1

第5.30章節

編譯安裝python包

1.解壓並進入python包目錄

tar -xvf Python-3.7.2.tar.xz

cd Python-3.7.2

2.參照書中說明編譯安裝

sed -i '/def add_multiarch_paths/a \        return' setup.py
./configure --prefix=/tools --without-ensurepip

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf Python-3.7.2

第5.31章節

編譯安裝sed包

1.解壓並進入sed包目錄

tar -xvf sed-4.7.tar.xz

cd sed-4.7

2.參照書中說明編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf sed-4.7

第5.32章節

編譯安裝tar包

1.解壓並進入tar包目錄

tar -xvf tar-1.31.tar.xz

cd tar-1.31

2.參照書中說明編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf tar-1.31

第5.33章節

編譯安裝texinfo包

1.解壓並進入texinfo包目錄

tar -xvf texinfo-6.5.tar.xz

cd texinfo-6.5

2.參照書中說明編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf texinfo-6.5

第5.34章節

編譯安裝xz包

1.解壓並進入xz包目錄

tar -xvf xz-5.2.4.tar.xz

cd xz-5.2.4

2.參照書中內容編譯安裝

./configure --prefix=/tools

make -j8

make install

3.返回sources目錄並刪除解壓目錄

cd $LFS/sources/

rm -rf xz-5.2.4

退出lfs用戶,進入root用戶

exit

第5.35章節

刪除沒有用的連接及文檔(可選)

1.刪除調試符號

strip --strip-debug /tools/lib/*
/usr/bin/strip --strip-unneeded /tools/{,s}bin/*

2.刪除不須要的文件及文檔

rm -rf /tools/{,share}/{info,man,doc}
find /tools/{lib,libexec} -name \*.la -delete

第5.36章節

改變文件全部權

1.將文件的全部權限改成root

chown -R root:root $LFS/tools

此時刪除建立的lfs用戶及用戶組

1.運行如下命令刪除用戶和用戶組

userdel -r lfs

第6.2章節

建立虛擬內核文件系統

mkdir -pv $LFS/{dev,proc,sys,run}

mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3

mount -v --bind /dev $LFS/dev

mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

if [ -h $LFS/dev/shm ]; then
  mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi

第6.4章節

進入chroot環境

chroot "$LFS" /tools/bin/env -i \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='(lfs chroot) \u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
    /tools/bin/bash --login +h

第6.5章節

建立lfs系統的目錄結構

mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt}
mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp
mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -v  /usr/libexec
mkdir -pv /usr/{,local/}share/man/man{1..8}

case $(uname -m) in
 x86_64) mkdir -v /lib64 ;;
esac

mkdir -v /var/{log,mail,spool}
ln -sv /run /var/run
ln -sv /run/lock /var/lock
mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local}

第6.6章節

建立基本文件和符號

ln -sv /tools/bin/{bash,cat,chmod,dd,echo,ln,mkdir,pwd,rm,stty,touch} /bin
ln -sv /tools/bin/{env,install,perl,printf}         /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1}                  /usr/lib
ln -sv /tools/lib/libstdc++.{a,so{,.6}}             /usr/lib

install -vdm755 /usr/lib/pkgconfig

ln -sv bash /bin/sh
ln -sv /proc/self/mounts /etc/mtab
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF
cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
systemd-journal:x:23:
input:x:24:
mail:x:34:
nogroup:x:99:
users:x:999:
EOF

刪除我沒有名字的提示

exec /tools/bin/bash --login +h

建立登陸日誌文件

touch /var/log/{btmp,lastlog,faillog,wtmp}
chgrp -v utmp /var/log/lastlog
chmod -v 664  /var/log/lastlog
chmod -v 600  /var/log/btmp

lfs(systemv版本)學習筆記-第3頁 的地址http://www.javashuo.com/article/p-nlhwuvjo-g.html

相關文章
相關標籤/搜索