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
構建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
第一遍編譯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
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
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
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
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
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
構建安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
編譯安裝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
刪除沒有用的連接及文檔(可選)
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
改變文件全部權
1.將文件的全部權限改成root
chown -R root:root $LFS/tools
1.運行如下命令刪除用戶和用戶組
userdel -r lfs
建立虛擬內核文件系統
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
進入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
建立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}
建立基本文件和符號
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