LFS 10.0 零基础中文安装教程 超详细 (三)

                                   第三章  建立LFS系统

1、Man-pages-5.08

tar xvf man-pages-5.08.tar.xz
cd man-pages-5.08
make install
cd ..
rm -rf man-pages-5.08

2、Tcl-8.6.10

tar xvf tcl8.6.10-src.tar.gz
cd tcl8.6.10
tar -xf ../tcl8.6.10-html.tar.gz --strip-components=1
SRCDIR=$(pwd)
cd unix
./configure --prefix=/usr           \
            --mandir=/usr/share/man \
            $([ "$(uname -m)" = x86_64 ] && echo --enable-64bit)
make
sed -e "s|$SRCDIR/unix|/usr/lib|" \
    -e "s|$SRCDIR|/usr/include|"  \
    -i tclConfig.sh
sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.1|/usr/lib/tdbc1.1.1|" \
    -e "s|$SRCDIR/pkgs/tdbc1.1.1/generic|/usr/include|"    \
    -e "s|$SRCDIR/pkgs/tdbc1.1.1/library|/usr/lib/tcl8.6|" \
    -e "s|$SRCDIR/pkgs/tdbc1.1.1|/usr/include|"            \
    -i pkgs/tdbc1.1.1/tdbcConfig.sh
sed -e "s|$SRCDIR/unix/pkgs/itcl4.2.0|/usr/lib/itcl4.2.0|" \
    -e "s|$SRCDIR/pkgs/itcl4.2.0/generic|/usr/include|"    \
    -e "s|$SRCDIR/pkgs/itcl4.2.0|/usr/include|"            \
    -i pkgs/itcl4.2.0/itclConfig.sh
unset SRCDIR
make install
chmod -v u+w /usr/lib/libtcl8.6.so
make install-private-headers
ln -sfv tclsh8.6 /usr/bin/tclsh
cd ../..
rm -rf tcl8.6.10

3、Expect-5.45.4

tar xvf expect5.45.4.tar.gz
cd expect5.45.4
./configure --prefix=/usr           \
            --with-tcl=/usr/lib     \
            --enable-shared         \
            --mandir=/usr/share/man \
            --with-tclinclude=/usr/include
make
make install
ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib
cd ..
rm -rf expect5.45.4

4、DejaGNU-1.6.2

tar xvf dejagnu-1.6.2.tar.gz
cd dejagnu-1.6.2
./configure --prefix=/usr
makeinfo --html --no-split -o doc/dejagnu.html doc/dejagnu.texi
makeinfo --plaintext       -o doc/dejagnu.txt  doc/dejagnu.texi
make install
install -v -dm755  /usr/share/doc/dejagnu-1.6.2
install -v -m644   doc/dejagnu.{html,txt} /usr/share/doc/dejagnu-1.6.2
cd ..
rm -rf dejagnu-1.6.2

5、IANA-ETC-20200821

tar xvf iana-etc-20200821.tar.gz
cd iana-etc-20200821
cp services protocols /etc
cd ..
rm -rf iana-etc-20200821

6、Glibc-2.32

tar xvf glibc-2.32.tar.xz
cd glibc-2.32
patch -Np1 -i ../glibc-2.32-fhs-1.patch
mkdir -v build
cd build
../configure --prefix=/usr                            \
             --disable-werror                         \
             --enable-kernel=3.2                      \
             --enable-stack-protector=strong          \
             --with-headers=/usr/include              \
             libc_cv_slibdir=/lib
make
case $(uname -m) in
  i?86)   ln -sfnv $PWD/elf/ld-linux.so.2        /lib ;;
  x86_64) ln -sfnv $PWD/elf/ld-linux-x86-64.so.2 /lib ;;
esac

Glibc测试一定要做,不要跳过。大多数没有必要的测试我都跳过了,手册里要求必需做测试的没有几个软件。

make check
touch /etc/ld.so.conf
sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile
make install
cp -v ../nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd
mkdir -pv /usr/lib/locale
localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i el_GR -f ISO-8859-7 el_GR
localedef -i en_GB -f UTF-8 en_GB.UTF-8
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i en_US -f UTF-8 en_US.UTF-8
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f UTF-8 it_IT.UTF-8
localedef -i ja_JP -f EUC-JP ja_JP
localedef -i ja_JP -f SHIFT_JIS ja_JP.SIJS 2> /dev/null || true
localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
localedef -i zh_CN -f GB18030 zh_CN.GB18030
localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS

创建nsswitch.conf文件:

cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# End /etc/nsswitch.conf
EOF

安装和设置时区:

tar -xf ../../tzdata2020a.tar.gz
ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}
for tz in etcetera southamerica northamerica europe africa antarctica  \
          asia australasia backward pacificnew systemv; do
    zic -L /dev/null   -d $ZONEINFO       ${tz}
    zic -L /dev/null   -d $ZONEINFO/posix ${tz}
    zic -L leapseconds -d $ZONEINFO/right ${tz}
done
cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
zic -d $ZONEINFO -p America/New_York
unset ZONEINFO

运行tzselect脚本确定本地时区:

tzselect

运行tzselect脚本后,输入“4”回车,输入“9”回车,输入“1”回车,再输入“1”保存时区设置。如图:

LFS 10.0 零基础中文安装教程  超详细 (三)

创建 localtime 时区文件:

ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

创建 ld.so.conf 文件:

cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib

EOF

动态库加载器也可以查找目录并包含里面配置文件的内容。运行下面的命令增加这个功能:

cat >> /etc/ld.so.conf << "EOF"
# Add an include directory
include /etc/ld.so.conf.d/*.conf

EOF
mkdir -pv /etc/ld.so.conf.d
cd ../..
rm -rf glibc-2.32

7、Zlib-1.2.11

tar xvf zlib-1.2.11.tar.xz
cd zlib-1.2.11
./configure --prefix=/usr
make
make install
mv -v /usr/lib/libz.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libz.so) /usr/lib/libz.so
cd ..
rm -rf zlib-1.2.11

8、Bzip2-1.0.8

tar xvf bzip2-1.0.8.tar.gz
cd bzip2-1.0.8
patch -Np1 -i ../bzip2-1.0.8-install_docs-1.patch
sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile
make -f Makefile-libbz2_so
make clean
make
make PREFIX=/usr install
cp -v bzip2-shared /bin/bzip2
cp -av libbz2.so* /lib
ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm -v /usr/bin/{bunzip2,bzcat,bzip2}
ln -sv bzip2 /bin/bunzip2
ln -sv bzip2 /bin/bzcat
cd ..
rm -rf bzip2-1.0.8

9、Xz-5.2.5

tar xvf xz-5.2.5.tar.xz
cd xz-5.2.5
./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/xz-5.2.5
make
make install
mv -v   /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin
mv -v /usr/lib/liblzma.so.* /lib
ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so
cd ..
rm -rf xz-5.2.5

10、Zstd-1.4.5

tar xvf zstd-1.4.5.tar.gz
cd zstd-1.4.5
make
make prefix=/usr install
rm -v /usr/lib/libzstd.a
mv -v /usr/lib/libzstd.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libzstd.so) /usr/lib/libzstd.so
cd ..
rm -rf zstd-1.4.5

11、File-5.39

tar xvf file-5.39.tar.gz
cd file-5.39
./configure --prefix=/usr
make
make install
cd ..
rm -rf file-5.39

12、Readline-8.0

tar xvf readline-8.0.tar.gz
cd readline-8.0
sed -i '/MV.*old/d' Makefile.in
sed -i '/{OLDSUFF}/c:' support/shlib-install
./configure --prefix=/usr    \
            --disable-static \
            --with-curses    \
            --docdir=/usr/share/doc/readline-8.0
make SHLIB_LIBS="-lncursesw"
make SHLIB_LIBS="-lncursesw" install
mv -v /usr/lib/lib{readline,history}.so.* /lib
chmod -v u+w /lib/lib{readline,history}.so.*
ln -sfv ../../lib/$(readlink /usr/lib/libreadline.so) /usr/lib/libreadline.so
ln -sfv ../../lib/$(readlink /usr/lib/libhistory.so ) /usr/lib/libhistory.so
install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-8.0
cd ..
rm -rf readline-8.0

13、M4-1.4.18

tar xvf m4-1.4.18.tar.xz
cd m4-1.4.18
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
./configure --prefix=/usr
make
make install
cd ..
rm -rf m4-1.4.18

14、BC-3.1.5

tar xvf bc-3.1.5.tar.xz
cd bc-3.1.5
PREFIX=/usr CC=gcc CFLAGS="-std=c99" ./configure.sh -G -O3
make
make install
cd ..
rm -rf bc-3.1.5

15、Flex-2.6.4

tar xvf flex-2.6.4.tar.gz
cd flex-2.6.4
./configure --prefix=/usr --docdir=/usr/share/doc/flex-2.6.4
make
make install
ln -sv flex /usr/bin/lex
cd ..
rm -rf flex-2.6.4

16、Binutils-2.35

tar xvf binutils-2.35.tar.xz
cd binutils-2.35

验证PTY在chroot环境中是否正常工作:

expect -c "spawn ls"

如果没有任何问题,该命令会输出如下图:

LFS 10.0 零基础中文安装教程  超详细 (三)

一切正常,继续安装:

sed -i '/@\tincremental_copy/d' gold/testsuite/Makefile.in
mkdir -v build
cd build
../configure --prefix=/usr       \
             --enable-gold       \
             --enable-ld=default \
             --enable-plugins    \
             --enable-shared     \
             --disable-werror    \
             --enable-64-bit-bfd \
             --with-system-zlib
make tooldir=/usr

binutils必需运行测试套件:

make -k check

测试没有问题,安装软件包:

make tooldir=/usr install
cd ../..
rm -rf binutils-2.35

17、GMP-6.2.0

tar xvf gmp-6.2.0.tar.xz
cd gmp-6.2.0
./configure --prefix=/usr    \
            --enable-cxx     \
            --disable-static \
            --docdir=/usr/share/doc/gmp-6.2.0
make
make html

运行测试套件:

make check 2>&1 | tee gmp-check-log

确保197个测试全部通过,输入以下命令查看测试结果:

awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log

LFS 10.0 零基础中文安装教程  超详细 (三)

显示“197”,说明“197”个结果全部通过。
安装软件包及其文档:

make install
make install-html
cd ..
rm -rf gmp-6.2.0

18、MPFR-4.1.0

tar xvf mpfr-4.1.0.tar.xz
cd mpfr-4.1.0
./configure --prefix=/usr        \
            --disable-static     \
            --enable-thread-safe \
            --docdir=/usr/share/doc/mpfr-4.1.0
make
make html

运行测试套件:

make check

测试结果通过,安装软件包及其文档:

make install
make install-html
cd ..
rm -rf mpfr-4.1.0

19、MPC-1.1.0

tar xvf mpc-1.1.0.tar.gz
cd mpc-1.1.0
./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/mpc-1.1.0
make
make html
make install
make install-html
cd ..
rm -rf mpc-1.1.0

20、Attr-2.4.48

tar xvf attr-2.4.48.tar.gz
cd attr-2.4.48
./configure --prefix=/usr     \
            --bindir=/bin     \
            --disable-static  \
            --sysconfdir=/etc \
            --docdir=/usr/share/doc/attr-2.4.48
make
make install
mv -v /usr/lib/libattr.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libattr.so) /usr/lib/libattr.so
cd ..
rm -rf attr-2.4.48

21、ACL-2.2.53

tar xvf acl-2.2.53.tar.gz
cd acl-2.2.53
./configure --prefix=/usr         \
            --bindir=/bin         \
            --disable-static      \
            --libexecdir=/usr/lib \
            --docdir=/usr/share/doc/acl-2.2.53
make
make install
mv -v /usr/lib/libacl.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libacl.so) /usr/lib/libacl.so
cd ..
rm -rf acl-2.2.53

22、Libcap-2.42

tar xvf libcap-2.42.tar.xz
cd libcap-2.42
sed -i '/install -m.*STACAPLIBNAME/d' libcap/Makefile
make lib=lib
make lib=lib PKGCONFIGDIR=/usr/lib/pkgconfig install
chmod -v 755 /lib/libcap.so.2.42
mv -v /lib/libpsx.a /usr/lib
rm -v /lib/libcap.so
ln -sfv ../../lib/libcap.so.2 /usr/lib/libcap.so
cd ..
rm -rf libcap-2.42

23、Shadow-4.8.1

tar xvf shadow-4.8.1.tar.xz
cd shadow-4.8.1
sed -i 's/groups$(EXEEXT) //' src/Makefile.in
find man -name Makefile.in -exec sed -i 's/groups\.1 / /'   {} \;
find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \;
find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \;
sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD SHA512:' \
    -e 's:/var/spool/mail:/var/mail:'                 \
    -i etc/login.defs
sed -i 's/1000/999/' etc/useradd
touch /usr/bin/passwd
./configure --sysconfdir=/etc \
            --with-group-name-max-length=32
make
make install

配置Shadow:
启用Shadow密码,运行以下命令:

pwconv

启用Shadow组密码,运行:

grpconv

设置root密码:

passwd root

输入三次相同密码后,root密码设置成功。
退出及删除目录:

cd ..
rm -rf shadow-4.8.1

24、GCC-10.2.0

tar xvf gcc-10.2.0.tar.xz
cd gcc-10.2.0
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 --prefix=/usr            \
             LD=ld                    \
             --enable-languages=c,c++ \
             --disable-multilib       \
             --disable-bootstrap      \
             --with-system-zlib
make

增加堆栈大小:

ulimit -s 32768

以普通用户身份进行测试,不要因错误而停止:

chown -Rv tester . 
su tester -c "PATH=$PATH make -k check"

查看测试套件结果的概要:

../contrib/test_summary

结果可以与http://www.linuxfromscratch.org/lfs/build-logs/10.0/ 和https://gcc.gnu.org/ml/gcc-testresults/ 上的相比较,总是会有一些错误,GCC 开发者已经意识到,还没来得及解决。除非测试结果与官方给出的测试结果相差很大,否则继续以下的安装。
安装软件包并删除不需要的目录:

make install
rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/10.2.0/include-fixed/bits/

将标头目录所有权更改为root用户和组:

chown -v -R root:root \
    /usr/lib/gcc/*linux-gnu/10.2.0/include{,-fixed}

创建FHS所需的符号链接:

ln -sv ../usr/bin/cpp /lib

增加一个兼容符号链接启用编译程序时进行链接时间优化:

install -v -dm755 /usr/lib/bfd-plugins
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/10.2.0/liblto_plugin.so \
        /usr/lib/bfd-plugins/

最终的工具链已经安装好了,确认编译和链接是否正确工作,输入:

echo 'int main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'

屏幕输出:

LFS 10.0 零基础中文安装教程  超详细 (三)

确保使用正确的启动文件,输入:

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

屏幕输出:
LFS 10.0 零基础中文安装教程  超详细 (三)

确保链接器能找到正确的头文件,输入:

grep -B4 '^ /usr/include' dummy.log

屏幕输出:
LFS 10.0 零基础中文安装教程  超详细 (三)

确认新链接器使用正确的搜索路径,输入:

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'

屏幕输出:
LFS 10.0 零基础中文安装教程  超详细 (三)

确定使用正确的 libc ,输入:

grep "/lib.*/libc.so.6 " dummy.log

屏幕输出:
LFS 10.0 零基础中文安装教程  超详细 (三)

确保GCC使用了正确的动态链接器,输入:

grep found dummy.log

屏幕输出:
LFS 10.0 零基础中文安装教程  超详细 (三)
如果显示的输出的结果与图片中的不一样或者根本没有显示,检查之前的步骤,找到出错的地方并改正。进行下一步之前所有的问题都要解决。

移动放错位置的文件及退出目录,删除gcc目录:

mkdir -pv /usr/share/gdb/auto-load/usr/lib
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib
cd ../..
rm -rf gcc-10.2.0

25、Pkg-config-0.29.2

tar xvf pkg-config-0.29.2.tar.gz
cd pkg-config-0.29.2
./configure --prefix=/usr              \
            --with-internal-glib       \
            --disable-host-tool        \
            --docdir=/usr/share/doc/pkg-config-0.29.2
make
make install
cd ..
rm -rf pkg-config-0.29.2

26、Ncurses-6.2

tar xvf ncurses-6.2.tar.gz
cd ncurses-6.2
sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in
./configure --prefix=/usr           \
            --mandir=/usr/share/man \
            --with-shared           \
            --without-debug         \
            --without-normal        \
            --enable-pc-files       \
            --enable-widec
make
make install
mv -v /usr/lib/libncursesw.so.6* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so
for lib in ncurses form panel menu ; do
    rm -vf                    /usr/lib/lib${lib}.so
    echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so
    ln -sfv ${lib}w.pc        /usr/lib/pkgconfig/${lib}.pc
done
rm -vf /usr/lib/libcursesw.so
echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so
ln -sfv libncurses.so      /usr/lib/libcurses.so
mkdir -v       /usr/share/doc/ncurses-6.2
cp -v -R doc/* /usr/share/doc/ncurses-6.2
cd ..
rm -rf ncurses-6.2

27、Sed-4.8

tar xvf sed-4.8.tar.xz
cd sed-4.8
./configure --prefix=/usr --bindir=/bin
make
make html
make install
install -d -m755           /usr/share/doc/sed-4.8
install -m644 doc/sed.html /usr/share/doc/sed-4.8
cd ..
rm -rf sed-4.8

28、Psmisc-23.3

tar xvf psmisc-23.3.tar.xz
cd psmisc-23.3
./configure --prefix=/usr
make
make install
mv -v /usr/bin/fuser   /bin
mv -v /usr/bin/killall /bin
cd ..
rm -rf psmisc-23.3

29、Gettext-0.21

tar xvf gettext-0.21.tar.xz
cd gettext-0.21
./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/gettext-0.21
make
make install
chmod -v 0755 /usr/lib/preloadable_libintl.so
cd ..
rm -rf gettext-0.21

30、Bison-3.7.1

tar xvf bison-3.7.1.tar.xz
cd bison-3.7.1
./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.7.1
make
make install
cd ..
rm -rf bison-3.7.1

31、Grep-3.4

tar xvf grep-3.4.tar.xz
cd grep-3.4
./configure --prefix=/usr --bindir=/bin
make
make install
cd ..
rm -rf grep-3.4

32、Bash-5.0

tar xvf bash-5.0.tar.gz
cd bash-5.0
patch -Np1 -i ../bash-5.0-upstream_fixes-1.patch
./configure --prefix=/usr                    \
            --docdir=/usr/share/doc/bash-5.0 \
            --without-bash-malloc            \
            --with-installed-readline
make
make install
mv -vf /usr/bin/bash /bin
exec /bin/bash --login +h
cd ..
rm -rf bash-5.0

33、Libtool 2.4.6

tar xvf libtool-2.4.6.tar.xz
cd libtool-2.4.6
./configure --prefix=/usr
make
make install
cd ..
rm -rf libtool-2.4.6

34、GDBM-1.18.1

tar xvf gdbm-1.18.1.tar.gz
cd gdbm-1.18.1
sed -r -i '/^char.*parseopt_program_(doc|args)/d' src/parseopt.c
./configure --prefix=/usr    \
            --disable-static \
            --enable-libgdbm-compat
make
make install
cd ..
rm -rf gdbm-1.18.1

35、Gperf-3.1

tar xvf gperf-3.1.tar.gz
cd gperf-3.1
./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1
make
make install
cd ..
rm -rf gperf-3.1

36、Expat-2.2.9

tar xvf expat-2.2.9.tar.xz
cd expat-2.2.9
./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/expat-2.2.9
make
make install
install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.2.9
cd ..
rm -rf expat-2.2.9

37、Inetutils-1.9.4

tar xvf inetutils-1.9.4.tar.xz
cd inetutils-1.9.4
./configure --prefix=/usr        \
            --localstatedir=/var \
            --disable-logger     \
            --disable-whois      \
            --disable-rcp        \
            --disable-rexec      \
            --disable-rlogin     \
            --disable-rsh        \
            --disable-servers
make
make install
mv -v /usr/bin/{hostname,ping,ping6,traceroute} /bin
mv -v /usr/bin/ifconfig /sbin
cd ..
rm -rf inetutils-1.9.4

38、Perl-5.32.0

tar xvf perl-5.32.0.tar.xz
cd perl-5.32.0
export BUILD_ZLIB=False
export BUILD_BZIP2=0
sh Configure -des                                         \
             -Dprefix=/usr                                \
             -Dvendorprefix=/usr                          \
             -Dprivlib=/usr/lib/perl5/5.32/core_perl      \
             -Darchlib=/usr/lib/perl5/5.32/core_perl      \
             -Dsitelib=/usr/lib/perl5/5.32/site_perl      \
             -Dsitearch=/usr/lib/perl5/5.32/site_perl     \
             -Dvendorlib=/usr/lib/perl5/5.32/vendor_perl  \
             -Dvendorarch=/usr/lib/perl5/5.32/vendor_perl \
             -Dman1dir=/usr/share/man/man1                \
             -Dman3dir=/usr/share/man/man3                \
             -Dpager="/usr/bin/less -isR"                 \
             -Duseshrplib                                 \
             -Dusethreads
make
make install
unset BUILD_ZLIB BUILD_BZIP2
cd ..
rm -rf perl-5.32.0

39、XML::Parser-2.46

tar xvf XML-Parser-2.46.tar.gz
cd XML-Parser-2.46
perl Makefile.PL
make
make install
cd ..
rm -rf XML-Parser-2.46

40、Intltool-0.51.0

tar xvf intltool-0.51.0.tar.gz
cd intltool-0.51.0
sed -i 's:\\\${:\\\$\\{:' intltool-update.in
./configure --prefix=/usr
make
make install
install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO
cd ..
rm -rf intltool-0.51.0

41、Autoconf-2.69

tar xvf autoconf-2.69.tar.xz
cd autoconf-2.69
sed -i '361 s/{/\\{/' bin/autoscan.in
./configure --prefix=/usr
make
make install
cd ..
rm -rf autoconf-2.69

42、Automake-1.16.2

tar xvf automake-1.16.2.tar.xz
cd automake-1.16.2
sed -i "s/''/etags/" t/tags-lisp-space.sh
./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.2
make
make install
cd ..
rm -rf automake-1.16.2

43、Kmod-27

tar xvf kmod-27.tar.xz
cd kmod-27
./configure --prefix=/usr          \
            --bindir=/bin          \
            --sysconfdir=/etc      \
            --with-rootlibdir=/lib \
            --with-xz              \
            --with-zlib
make
make install
for target in depmod insmod lsmod modinfo modprobe rmmod; do
  ln -sfv ../bin/kmod /sbin/$target
done
ln -sfv kmod /bin/lsmod
make install
for target in depmod insmod lsmod modinfo modprobe rmmod; do
  ln -sfv ../bin/kmod /sbin/$target
done
ln -sfv kmod /bin/lsmod
cd ..
rm -rf kmod-27

44、Libelf from Elfutils-0.180

tar xvf elfutils-0.180.tar.bz2
cd elfutils-0.180
./configure --prefix=/usr --disable-debuginfod --libdir=/lib
make
make -C libelf install
install -vm644 config/libelf.pc /usr/lib/pkgconfig
rm /lib/libelf.a
cd ..
rm -rf elfutils-0.180

45、Libffi-3.3

tar xvf libffi-3.3.tar.gz
cd libffi-3.3
./configure --prefix=/usr --disable-static --with-gcc-arch=native
make
make install
cd ..
rm -rf libffi-3.3

46、OpenSSL-1.1.1g

tar xvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config --prefix=/usr         \
         --openssldir=/etc/ssl \
         --libdir=lib          \
         shared                \
         zlib-dynamic
make
sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile
make MANSUFFIX=ssl install
mv -v /usr/share/doc/openssl /usr/share/doc/openssl-1.1.1g
cp -vfr doc/* /usr/share/doc/openssl-1.1.1g
cd ..
rm -rf openssl-1.1.1g

47、Python-3.8.5

tar xvf Python-3.8.5.tar.xz
cd Python-3.8.5
./configure --prefix=/usr       \
            --enable-shared     \
            --with-system-expat \
            --with-system-ffi   \
            --with-ensurepip=yes
make
make install
chmod -v 755 /usr/lib/libpython3.8.so
chmod -v 755 /usr/lib/libpython3.so
ln -sfv pip3.8 /usr/bin/pip3
install -v -dm755 /usr/share/doc/python-3.8.5/html 
cd ..
rm -rf Python-3.8.5

48、Ninja-1.10.0

tar xvf ninja-1.10.0.tar.gz
cd ninja-1.10.0
python3 configure.py --bootstrap
install -vm755 ninja /usr/bin/
install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja
install -vDm644 misc/zsh-completion  /usr/share/zsh/site-functions/_ninja
cd ..
rm -rf ninja-1.10.0

49、Meson-0.55.0

tar xvf meson-0.55.0.tar.gz
cd meson-0.55.0
python3 setup.py build
python3 setup.py install --root=dest
cp -rv dest/* /
cd ..
rm -rf meson-0.55.0

50、Coreutils-8.32

tar xvf coreutils-8.32.tar.xz
cd coreutils-8.32
patch -Np1 -i ../coreutils-8.32-i18n-1.patch
sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk
autoreconf -fiv
FORCE_UNSAFE_CONFIGURE=1 ./configure \
            --prefix=/usr            \
            --enable-no-install-program=kill,uptime
make
make install
mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
mv -v /usr/bin/chroot /usr/sbin
mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
sed -i 's/"1"/"8"/' /usr/share/man/man8/chroot.8
mv -v /usr/bin/{head,nice,sleep,touch} /bin
cd ..
rm -rf coreutils-8.32

51、Check-0.15.2

tar xvf check-0.15.2.tar.gz
cd check-0.15.2
./configure --prefix=/usr --disable-static
make
make docdir=/usr/share/doc/check-0.15.2 install
cd ..
rm -rf check-0.15.2

52、Diffutils-3.7

tar xvf diffutils-3.7.tar.xz
cd diffutils-3.7
./configure --prefix=/usr
make
make install
cd ..
rm -rf diffutils-3.7

53、Gawk-5.1.0

tar xvf gawk-5.1.0.tar.xz
cd gawk-5.1.0
sed -i 's/extras//' Makefile.in
./configure --prefix=/usr
make
make install
mkdir -v /usr/share/doc/gawk-5.1.0
cp    -v doc/{awkforai.txt,*.{eps,pdf,jpg}} /usr/share/doc/gawk-5.1.0
cd ..
rm -rf gawk-5.1.0

54、Findutils-4.7.0

tar xvf findutils-4.7.0.tar.xz
cd findutils-4.7.0
./configure --prefix=/usr --localstatedir=/var/lib/locate
make
make install
mv -v /usr/bin/find /bin
sed -i 's|find:=${BINDIR}|find:=/bin|' /usr/bin/updatedb
cd ..
rm -rf findutils-4.7.0

55、Groff-1.22.4

tar xvf groff-1.22.4.tar.gz
cd groff-1.22.4
PAGE=A4 ./configure --prefix=/usr
make -j1
make install
cd ..
rm -rf groff-1.22.4

56、GRUB-2.04

tar xvf grub-2.04.tar.xz
cd grub-2.04
./configure --prefix=/usr          \
            --sbindir=/sbin        \
            --sysconfdir=/etc      \
            --disable-efiemu       \
            --disable-werror
make
make install
mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions
cd ..
rm -rf grub-2.04

57、Less-551

tar xvf less-551.tar.gz
cd less-551
./configure --prefix=/usr --sysconfdir=/etc
make
make install
cd ..
rm -rf less-551

58、Gzip-1.10

tar xvf gzip-1.10.tar.xz
cd gzip-1.10
./configure --prefix=/usr
make
make install
mv -v /usr/bin/gzip /bin
cd ..
rm -rf gzip-1.10

59、IPRoute2-5.8.0

tar xvf iproute2-5.8.0.tar.xz
cd iproute2-5.8.0
sed -i /ARPD/d Makefile
rm -fv man/man8/arpd.8
sed -i 's/.m_ipt.o//' tc/Makefile
make
make DOCDIR=/usr/share/doc/iproute2-5.8.0 install
cd ..
rm -rf iproute2-5.8.0

60、Kbd-2.3.0

tar xvf kbd-2.3.0.tar.xz
cd kbd-2.3.0
patch -Np1 -i ../kbd-2.3.0-backspace-1.patch
sed -i '/RESIZECONS_PROGS=/s/yes/no/' configure
sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in
./configure --prefix=/usr --disable-vlock
make
make install
rm -v /usr/lib/libtswrap.{a,la,so*}
mkdir -v            /usr/share/doc/kbd-2.3.0
cp -R -v docs/doc/* /usr/share/doc/kbd-2.3.0
cd ..
rm -rf kbd-2.3.0

61、Libpipeline-1.5.3

tar xvf libpipeline-1.5.3.tar.gz
cd libpipeline-1.5.3
./configure --prefix=/usr
make
make install
cd ..
rm -rf libpipeline-1.5.3

62、Make-4.3

tar xvf make-4.3.tar.gz
cd make-4.3
./configure --prefix=/usr
make
make install
cd ..
rm -rf make-4.3

63、Patch-2.7.6

tar xvf patch-2.7.6.tar.xz
cd patch-2.7.6
./configure --prefix=/usr
make
make install
cd ..
rm -rf patch-2.7.6

64、Man-DB-2.9.3

tar xvf man-db-2.9.3.tar.xz
cd man-db-2.9.3
./configure --prefix=/usr                        \
            --docdir=/usr/share/doc/man-db-2.9.3 \
            --sysconfdir=/etc                    \
            --disable-setuid                     \
            --enable-cache-owner=bin             \
            --with-browser=/usr/bin/lynx         \
            --with-vgrind=/usr/bin/vgrind        \
            --with-grap=/usr/bin/grap            \
            --with-systemdtmpfilesdir=           \
            --with-systemdsystemunitdir=
make
make install
cd ..
rm -rf man-db-2.9.3

65、Tar-1.32

tar xvf tar-1.32.tar.xz
cd tar-1.32
FORCE_UNSAFE_CONFIGURE=1  \
./configure --prefix=/usr \
            --bindir=/bin
make
make install
make -C doc install-html docdir=/usr/share/doc/tar-1.32
cd ..
rm -rf tar-1.32

66、Texinfo-6.7

tar xvf texinfo-6.7.tar.xz
cd texinfo-6.7
./configure --prefix=/usr --disable-static
make
make install
make TEXMF=/usr/share/texmf install-tex
pushd /usr/share/info
  rm -v dir
  for f in *
    do install-info $f dir 2>/dev/null
  done
popd
cd ..
rm -rf texinfo-6.7

67、Vim-8.2.1361

tar xvf vim-8.2.1361.tar.gz
cd vim-8.2.1361
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
./configure --prefix=/usr
make
make install
ln -sv vim /usr/bin/vi
for L in  /usr/share/man/{,*/}man1/vim.1; do
    ln -sv vim.1 $(dirname $L)/vi.1
done
ln -sv ../vim/vim82/doc /usr/share/doc/vim-8.2.1361

创建默认的 vim 配置文件:

cat > /etc/vimrc << "EOF"
" Begin /etc/vimrc

" Ensure defaults are set before customizing settings, not after
source $VIMRUNTIME/defaults.vim
let skip_defaults_vim=1 

set nocompatible
set backspace=2
set mouse=
syntax on
if (&term == "xterm") || (&term == "putty")
  set background=dark
endif

" End /etc/vimrc
EOF
cd ..
rm -rf vim-8.2.1361

70、Eudev-3.2.9

tar xvf eudev-3.2.9.tar.gz
cd eudev-3.2.9
./configure --prefix=/usr           \
            --bindir=/sbin          \
            --sbindir=/sbin         \
            --libdir=/usr/lib       \
            --sysconfdir=/etc       \
            --libexecdir=/lib       \
            --with-rootprefix=      \
            --with-rootlibdir=/lib  \
            --enable-manpages       \
            --disable-static
make
mkdir -pv /lib/udev/rules.d
mkdir -pv /etc/udev/rules.d
make check
make install
tar -xvf ../udev-lfs-20171102.tar.xz
make -f udev-lfs-20171102/Makefile.lfs install
udevadm hwdb --update
cd ..
rm -rf eudev-3.2.9

71、Procps-ng-3.3.16

tar xvf procps-ng-3.3.16.tar.xz
cd procps-ng-3.3.16
./configure --prefix=/usr                            \
            --exec-prefix=                           \
            --libdir=/usr/lib                        \
            --docdir=/usr/share/doc/procps-ng-3.3.16 \
            --disable-static                         \
            --disable-kill
make
make install
mv -v /usr/lib/libprocps.so.* /lib
ln -sfv ../../lib/$(readlink /usr/lib/libprocps.so) /usr/lib/libprocps.so
cd ..
rm -rf procps-ng-3.3.16

72、Util-linux-2.36

tar xvf util-linux-2.36.tar.xz
cd util-linux-2.36
mkdir -pv /var/lib/hwclock
./configure ADJTIME_PATH=/var/lib/hwclock/adjtime   \
            --docdir=/usr/share/doc/util-linux-2.36 \
            --disable-chfn-chsh  \
            --disable-login      \
            --disable-nologin    \
            --disable-su         \
            --disable-setpriv    \
            --disable-runuser    \
            --disable-pylibmount \
            --disable-static     \
            --without-python     \
            --without-systemd    \
            --without-systemdsystemunitdir
make
make install
cd ..
rm -rf util-linux-2.36

73、E2fsprogs-1.45.6

tar xvf e2fsprogs-1.45.6.tar.gz
cd e2fsprogs-1.45.6
mkdir -v build
cd build
../configure --prefix=/usr           \
             --bindir=/bin           \
             --with-root-prefix=""   \
             --enable-elf-shlibs     \
             --disable-libblkid      \
             --disable-libuuid       \
             --disable-uuidd         \
             --disable-fsck
make
make install
chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a
gunzip -v /usr/share/info/libext2fs.info.gz
install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info
makeinfo -o      doc/com_err.info ../lib/et/com_err.texinfo
install -v -m644 doc/com_err.info /usr/share/info
install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info
cd ../..
rm -rf e2fsprogs-1.45.6

74、Sysklogd-1.5.1

tar xvf sysklogd-1.5.1.tar.gz
cd sysklogd-1.5.1
sed -i '/Error loading kernel symbols/{n;n;d}' ksym_mod.c
sed -i 's/union wait/int/' syslogd.c
make
make BINDIR=/sbin install

创建 syslog.conf 文件:

cat > /etc/syslog.conf << "EOF"
# Begin /etc/syslog.conf

auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *

# End /etc/syslog.conf
EOF
cd ..
rm -rf sysklogd-1.5.1

75、Sysvinit-2.97

tar xvf sysvinit-2.97.tar.xz
cd sysvinit-2.97
patch -Np1 -i ../sysvinit-2.97-consolidated-1.patch
make
make install
cd ..
rm -rf sysvinit-2.97

清理:

find /usr/lib -type f -name \*.a \
   -exec strip --strip-debug {} ';'

find /lib /usr/lib -type f -name \*.so* ! -name \*dbg \
   -exec strip --strip-unneeded {} ';'

find /{bin,sbin} /usr/{bin,sbin,libexec} -type f \
    -exec strip --strip-all {} ';'
rm -rf /tmp/*

现在先注销,用以下新的 chroot 命令重新进入 chroot 环境:

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

在此章之前保留下了一些静态库,为了本章一些软件包的回归测试,现在可以删除它们了:

rm -f /usr/lib/lib{bfd,opcodes}.a
rm -f /usr/lib/libctf{,-nobfd}.a
rm -f /usr/lib/libbz2.a
rm -f /usr/lib/lib{com_err,e2p,ext2fs,ss}.a
rm -f /usr/lib/libltdl.a
rm -f /usr/lib/libfl.a
rm -f /usr/lib/libz.a

删除 /usr/lib 和 /usr/libexec 目录下扩展名为 .la 的文件:

find /usr/lib /usr/libexec -name \*.la -delete

删除临时编译器:

find /usr -depth -name $(uname -m)-lfs-linux-gnu\* | xargs rm -rf

删除临时工具链 /tools 目录:

rm -rf /tools

删除创建的临时“测试”用户帐户:

userdel -r tester

猜你喜欢

转载自blog.51cto.com/9828355/2601753