LFS 8.3 从零开始做自己的系统~!~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LFS 8.3 从零开始做自己的系统~!~相关的知识,希望对你有一定的参考价值。

六、构建LFS系统

1.准备虚拟内核文件系统

1)创建将挂载文件系统的目录:
mkdir -pv $LFS/{dev,proc,sys,run}
2)创建设备节点:
mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3
3)安装和填充/开发:
mount -v --bind /dev $LFS/dev
4)挂载虚拟内核文件系统:
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
5)创建shm目录
if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi

2.进入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

3.创建目录

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}

4.创建基本文件和符号链接

ln -sv /tools/bin/{bash,cat,dd,echo,ln,pwd,rm,stty} /bin
ln -sv /tools/bin/{env,install,perl} /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib
for lib in blkid lzma mount uuid
do
ln -sv /tools/lib/lib$lib.so* /usr/lib
done
ln -svf /tools/include/blkid /usr/include
ln -svf /tools/include/libmount /usr/include
ln -svf /tools/include/uuid /usr/include
install -vdm755 /usr/lib/pkgconfig
for pc in blkid mount uuid
do
sed ‘[email protected]@[email protected]‘ /tools/lib/pkgconfig/${pc}.pc

/usr/lib/pkgconfig/${pc}.pc
done
ln -sv bash /bin/sh
ln -sv /proc/self/mounts /etc/mtab

5.创建passwd文件:

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

6.去掉提示符的I have no name提示及创建日志文件:

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
cd /sources

7.Linux-4.18.5 API内核头文件

tar xvf linux-4.18.5.tar.xz
cd linux-4.18.5
make mrproper
make INSTALL_HDR_PATH=dest headers_install
find dest/include ( -name .install -o -name ..install.cmd ) -delete
cp -rv dest/include/* /usr/include
cd ..
rm -rf linux-4.18.5

8.Man-pages-4.16

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

9.glibc-2.28

tar xvf glibc-2.28.tar.xz
cd glibc-2.28
patch -Np1 -i ../glibc-2.28-fhs-1.patch
ln -sfv /tools/lib/gcc /usr/lib
为x86_64,创建动态加载程序正常运行所需的兼容性符号链接:
case $(uname -m) in
i?86) GCC_INCDIR=/usr/lib/gcc/$(uname -m)-pc-linux-gnu/8.2.0/include
ln -sfv ld-linux.so.2 /lib/ld-lsb.so.3
;;
x86_64) GCC_INCDIR=/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.0/include
ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64
ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3
;;
esac
rm -f /usr/include/limits.h
mkdir -v build
cd build
CC="gcc -isystem $GCC_INCDIR -isystem /usr/include"
../configure --prefix=/usr
--disable-werror
--enable-kernel=3.2
--enable-stack-protector=strong
libc_cv_slibdir=/lib
unset GCC_INCDIR
make && make check
touch /etc/ld.so.conf
sed ‘/test-installation/[email protected]$(PERL)@echo not [email protected]‘ -i ../Makefile
make install
cp -v ../nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd
mkdir -pv /usr/lib/locale
make localedata/install-locales
创建nsswitch.conf文件:
cat > /etc/nsswitch.conf << "EOF"
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
EOF
添加时区数据:
tar -xf ../../tzdata2018e.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 -y "sh yearistype.sh" ${tz}
zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}
zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}
done
cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
zic -d $ZONEINFO -p America/New_York
unset ZONEINFO
确定本地时区:
tzselect //回答(4、9、1、1)
cp -v /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
创建ld.so.conf文件:
cat > /etc/ld.so.conf << "EOF"
/usr/local/lib
/opt/lib
EOF
cat >> /etc/ld.so.conf << "EOF"
include /etc/ld.so.conf.d/*.conf
EOF
mkdir -pv /etc/ld.so.conf.d
cd ../..
rm -rf glibc-2.28

10.调整工具链

mv -v /tools/bin/{ld,ld-old}
mv -v /tools/$(uname -m)-pc-linux-gnu/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/$(uname -m)-pc-linux-gnu/bin/ld
gcc -dumpspecs | sed -e ‘[email protected]/[email protected]@g‘
-e ‘/*startfile_prefix_spec:/{n;[email protected]@/usr/lib/ @}‘
-e ‘/*cpp:/{n;[email protected][email protected] -isystem /usr/[email protected]}‘ >
dirname $(gcc --print-libgcc-file-name)/specs
echo ‘int main(){}‘ > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
readelf -l a.out | grep ‘: /lib‘
64位输出:
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
32位输出:
[Requesting program interpreter: /lib/ld-linux.so.2]
确保设置使用正确的启动文件运行:
grep -o ‘/usr/lib.
/crt[1in].succeeded‘ dummy.log
输出:
/usr/lib/../lib/crt1.o succeeded
/usr/lib/../lib/crti.o succeeded
/usr/lib/../lib/crtn.o succeeded
是否正在搜索正确的头文件运行:
grep -B1 ‘^ /usr/include‘ dummy.log
输出:
#include <...> search starts here:
/usr/include
新链接器是否正确的搜索路径运行:
grep ‘SEARCH.
/usr/lib‘ dummy.log |sed ‘s|; | |g‘
输出:
SEARCH_DIR("=/tools/x86_64-pc-linux-gnu/lib64")
SEARCH_DIR("/usr/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("=/tools/x86_64-pc-linux-gnu/lib");
使用正确的libc运行:
grep "/lib.*/libc.so.6 " dummy.log
输出:
attempt to open /lib/libc.so.6 succeeded
GCC使用正确的动态链接器运行:
grep found dummy.log
输出:
found ld-linux-x86-64.so.2 at /lib/ld-linux-x86-64.so.2
rm -v dummy.c a.out dummy.log

11.zlib-1.2.11

tar xvf zlib-1.2.11.tar.xz
cd zlib-1.2.11
./configure --prefix=/usr
make && make check
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

12.file-5.34

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

13.Readline-7.0

tar xvf readline-7.0.tar.gz
cd readline-7.0
sed -i ‘/MV.old/d‘ Makefile.in
sed -i ‘/{OLDSUFF}/c:‘ support/shlib-install
./configure --prefix=/usr
--disable-static
--docdir=/usr/share/doc/readline-7.0
make SHLIB_LIBS="-L/tools/lib -lncursesw"
make SHLIB_LIBS="-L/tools/lib -lncurses" 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-7.0
cd ..
rm -rf readline-7.0

14.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 check
make install
cd ..
rm -rf m4-1.4.18

15.BC-1.07.1

tar xvf bc-1.07.1.tar.gz
cd bc-1.07.1
cat > bc/fix-libmath_h << "EOF"
#! /bin/bash
sed -e ‘1 s/^/{"/‘
-e ‘s/$/",/‘
-e ‘2,$ s/^/"/‘
-e ‘$ d‘
-i libmath.h
sed -e ‘$ s/$/0}/‘
-i libmath.h
EOF
ln -sv /tools/lib/libncursesw.so.6 /usr/lib/libncursesw.so.6
ln -sfv libncurses.so.6 /usr/lib/libncurses.so
sed -i -e ‘/flex/s/as_fn_error/: ;; # &/‘ configure
./configure --prefix=/usr
--with-readline
--mandir=/usr/share/man
--infodir=/usr/share/info
make
echo "quit" | ./bc/bc -l Test/checklib.b
make install
cd ..
rm -rf bc-1.07.1

16.Binutils-2.31.1

tar xvf binutils-2.31.1.tar.xz
cd binutils-2.31.1
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
make -k check
make tooldir=/usr install
cd ../..
rm -rf binutils-2.31.1

17.GMP-6.1.2

tar xvf gmp-6.1.2.tar.xz
cd gmp-6.1.2
./configure --prefix=/usr
--enable-cxx
--disable-static
--docdir=/usr/share/doc/gmp-6.1.2

构建32位x86LFS:
ABI=32 ./configure --prefix=/usr
--enable-cxx
--disable-static
--docdir=/usr/share/doc/gmp-6.1.2

make && make html
make check 2>&1 | tee gmp-check-log
确保测试套件中的190个测试都通过:
awk ‘/# PASS:/{total+=$3} ; END{print total}‘ gmp-check-log
以上命令会输出如下结果:
技术分享图片
make install && make install-html
cd ..
rm -rf gmp-6.1.2

18.MPFR-4.0.1

tar xvf mpfr-4.0.1.tar.xz
cd mpfr-4.0.1
./configure --prefix=/usr
--disable-static
--enable-thread-safe
--docdir=/usr/share/doc/mpfr-4.0.1
make
make html && make check
make install && make install-html
cd ..
rm -rf mpfr-4.0.1

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 check
make install && make install-html
cd ..
rm -rf mpc-1.1.0

20.shadow-4.6

tar xvf shadow-4.6.tar.xz
cd shadow-4.6
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 -i -e ‘[email protected]#ENCRYPT_METHOD [email protected]_METHOD [email protected]
-e ‘[email protected]/var/spool/[email protected]/var/[email protected]‘ etc/login.defs
sed -i ‘s/1000/999/‘ etc/useradd
./configure --sysconfdir=/etc --with-group-name-max-length=32
make && make install
mv -v /usr/bin/passwd /bin
配置shadow:
启用密码:
pwconv
启用组密码:
grpconv
设置root密码:
passwd root
cd ..
rm -rf shadow-4.6

21.GCC-8.2.0

tar xvf gcc-8.2.0.tar.xz
cd gcc-8.2.0
x86_64上构建LFS:
case $(uname -m) in
x86_64)
sed -e ‘/m64=/s/lib64/lib/‘
-i.orig gcc/config/i386/t-linux64
;;
esac
rm -f /usr/lib/gcc
mkdir -v build
cd build
SED=sed
../configure --prefix=/usr
--enable-languages=c,c++
--disable-multilib
--disable-bootstrap
--disable-libmpx
--with-system-zlib
make
ulimit -s 32768
rm ../gcc/testsuite/g++.dg/pr83239.C
chown -Rv nobody .
su nobody -s /bin/bash -c "PATH=$PATH make -k check"
../contrib/test_summary
make install
ln -sv ../usr/bin/cpp /lib
ln -sv gcc /usr/bin/cc
install -v -dm755 /usr/lib/bfd-plugins
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/8.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‘
输出结果:
技术分享图片
grep -o ‘/usr/lib./crt[1in].succeeded‘ dummy.log
输出结果:
技术分享图片
grep -B4 ‘^ /usr/include‘ dummy.log
输出结果:
技术分享图片
grep ‘SEARCH./usr/lib‘ dummy.log |sed ‘s|; | |g‘
64位系统输出结果:
技术分享图片
grep "/lib.
/libc.so.6 " dummy.log
输出结果:
技术分享图片
grep found dummy.log
输出结果:
技术分享图片
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-8.2.0

22.bzip2-1.0.6

tar xvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
patch -Np1 -i ../bzip2-1.0.6-install_docs-1.patch
sed -i ‘[email protected](ln -s -f )$(PREFIX)/bin/@[email protected]‘ Makefile
sed -i "[email protected](PREFIX)/[email protected](PREFIX)/share/[email protected]" 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.6

23.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 check
make install
cd ..
rm -rf pkg-config-0.29.2

24.ncurses-6.1

tar xvf ncurses-6.1.tar.gz
cd ncurses-6.1
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.1
cp -v -R doc/
/usr/share/doc/ncurses-6.1
make distclean
./configure --prefix=/usr
--with-shared
--without-normal
--without-debug
--without-cxx-binding
--with-abi-version=5
make sources libs
cp -av lib/lib.so.5 /usr/lib
cd ..
rm -rf ncurses-6.1

  1. 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 check
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

  1. 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

27.libcap-2.25

tar xvf libcap-2.25.tar.xz
cd libcap-2.25
sed -i ‘/install.STALIBNAME/d‘ libcap/Makefile
make
make RAISE_SETFCAP=no lib=lib prefix=/usr install
chmod -v 755 /usr/lib/libcap.so
mv -v /usr/lib/libcap.so.
/lib
ln -sfv ../../lib/$(readlink /usr/lib/libcap.so) /usr/lib/libcap.so
cd ..
rm -rf libcap-2.25

  1. Sed-4.5

tar xvf sed-4.5.tar.xz
cd sed-4.5
sed -i ‘s/usr/tools/‘ build-aux/help2man
sed -i ‘s/testsuite.panic-tests.sh//‘ Makefile.in
./configure --prefix=/usr --bindir=/bin
make && make html && make check
make install
install -d -m755 /usr/share/doc/sed-4.5
install -m644 doc/sed.html /usr/share/doc/sed-4.5
cd ..
rm -rf sed-4.5

  1. Psmisc-23.1

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

  1. Iana-Etc-2.30

tar xvf iana-etc-2.30.tar.bz2
cd iana-etc-2.30
make && make install
cd ..
rm -rf iana-etc-2.30

  1. Bison-3.0.5

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

  1. Flex-2.6.4

tar xvf flex-2.6.4.tar.gz
cd flex-2.6.4
sed -i "/math.h/a #include <malloc.h>" src/flexdef.h
HELP2MAN=/tools/bin/true
./configure --prefix=/usr --docdir=/usr/share/doc/flex-2.6.4
make && make check
make install
ln -sv flex /usr/bin/lex
cd ..
rm -rf flex-2.6.4

  1. Grep-3.1

tar xvf grep-3.1.tar.xz
cd grep-3.1
./configure --prefix=/usr --bindir=/bin
make && make -k check
make install
cd ..
rm -rf grep-3.1

  1. Bash-4.4.18

tar xvf bash-4.4.18.tar.gz
cd bash-4.4.18
./configure --prefix=/usr
--docdir=/usr/share/doc/bash-4.4.18
--without-bash-malloc
--with-installed-readline
make
chown -Rv nobody .
su nobody -s /bin/bash -c "PATH=$PATH make tests"
make install
mv -vf /usr/bin/bash /bin
exec /bin/bash --login +h
cd ..
rm -rf bash-4.4.18

  1. Libtool-2.4.6

tar xvf libtool-2.4.6.tar.xz
cd libtool-2.4.6
./configure --prefix=/usr
make && make -j8 check //我是4个核心,所以写-j8,根据你的实际情况改一下,测试会有错误。不用管它,继续安装。错误如下:
技术分享图片
make install
cd ..
rm -rf libtool-2.4.6

  1. GDBM-1.17

tar xvf gdbm-1.17.tar.gz
cd gdbm-1.17
./configure --prefix=/usr
--disable-static
--enable-libgdbm-compat
make && make check
make install
cd ..
rm -rf gdbm-1.17

  1. 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 -j1 check
make install
cd ..
rm -rf gperf-3.1

  1. Expat-2.2.6

tar xvf expat-2.2.6.tar.bz2
cd expat-2.2.6
sed -i ‘s|usr/bin/env |bin/|‘ run.sh.in
./configure --prefix=/usr
--disable-static
--docdir=/usr/share/doc/expat-2.2.6
make && make check
make install
install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.2.6
cd ..
rm -rf expat-2.2.6

  1. 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 check
make install
mv -v /usr/bin/{hostname,ping,ping6,traceroute} /bin
mv -v /usr/bin/ifconfig /sbin
cd ..
rm -rf inetutils-1.9.4

40.Perl-5.28.0

tar xvf perl-5.28.0.tar.xz
cd perl-5.28.0
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
export BUILD_ZLIB=False
export BUILD_BZIP2=0
sh Configure -des -Dprefix=/usr
-Dvendorprefix=/usr
-Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3
-Dpager="/usr/bin/less -isR"
-Duseshrplib
-Dusethreads
make && make -k test
make install
unset BUILD_ZLIB BUILD_BZIP2
cd ..
rm -rf perl-5.28.0

41.XML::Parser-2.44

tar xvf XML-Parser-2.44.tar.gz
cd XML-Parser-2.44
perl Makefile.PL
make && make test
make install
cd ..
rm -rf XML-Parser-2.44

42.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 check
make install
install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO
cd ..
rm -rf intltool-0.51.0

  1. Autoconf-2.69

tar xvf autoconf-2.69.tar.xz
cd autoconf-2.69
./configure --prefix=/usr
make
make check
make install
cd ..
rm -rf autoconf-2.69

  1. Automake-1.16.1

tar xvf automake-1.16.1.tar.xz
cd automake-1.16.1
./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.1
make
make -j4 check
make install
cd ..
rm -rf automake-1.16.1

45.XZ-5.2.4

tar xvf xz-5.2.4.tar.xz
cd xz-5.2.4
./configure --prefix=/usr
--disable-static
--docdir=/usr/share/doc/xz-5.2.4
make && make check
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.4

46.KMOD-25

tar xvf kmod-25.tar.xz
cd kmod-25
./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
cd ..
rm -rf kmod-25

47.Gettext-0.19.8.1

tar xvf gettext-0.19.8.1.tar.xz
cd gettext-0.19.8.1
sed -i ‘/^TESTS =/d‘ gettext-runtime/tests/Makefile.in &&
sed -i ‘s/test-lock..EXEEXT.//‘ gettext-tools/gnulib-tests/Makefile.in
sed -e ‘/AppData/{N;N;p;s/.appdata./.metainfo./}‘
-i gettext-tools/its/appdata.loc
./configure --prefix=/usr
--disable-static
--docdir=/usr/share/doc/gettext-0.19.8.1
make && make check
make install
chmod -v 0755 /usr/lib/preloadable_libintl.so
cd ..
rm -rf gettext-0.19.8.1

48.Libelf-0.173

tar xvf elfutils-0.173.tar.bz2
cd elfutils-0.173
./configure --prefix=/usr
make && make check
make -C libelf install
install -vm644 config/libelf.pc /usr/lib/pkgconfig
cd ..
rm -rf elfutils-0.173

49.Libffi-3.2.1

tar xvf libffi-3.2.1.tar.gz
cd libffi-3.2.1
sed -e ‘/^includesdir/ s/$(libdir).$/$(includedir)/‘
-i include/Makefile.in
sed -e ‘/^includedir/ s/=.
$/[email protected]@/‘
-e ‘s/^Cflags: -I${includedir}/Cflags:/‘
-i libffi.pc.in
./configure --prefix=/usr --disable-static --with-gcc-arch=native
make && make check
make install
cd ..
rm -rf libffi-3.2.1

50.OpenSSL 1.1.0i

tar xvf openssl-1.1.0i.tar.gz
cd openssl-1.1.0i
./config --prefix=/usr
--openssldir=/etc/ssl
--libdir=lib
shared
zlib-dynamic
make && make test
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.0i
cp -vfr doc/* /usr/share/doc/openssl-1.1.0i
cd ..
rm -rf openssl-1.1.0i

51.Python-3.7.0

tar xvf Python-3.7.0.tar.xz
cd Python-3.7.0
./configure --prefix=/usr
--enable-shared
--with-system-expat
--with-system-ffi
--with-ensurepip=yes
make && make install
chmod -v 755 /usr/lib/libpython3.7m.so
chmod -v 755 /usr/lib/libpython3.so
install -v -dm755 /usr/share/doc/python-3.7.0/html
tar --strip-components=1
--no-same-owner
--no-same-permissions
-C /usr/share/doc/python-3.7.0/html
-xvf ../python-3.7.0-docs-html.tar.bz2
cd ..
rm -rf Python-3.7.0

52.Ninja-1.8.2

tar xvf ninja-1.8.2.tar.gz
cd ninja-1.8.2
export NINJAJOBS=4
patch -Np1 -i ../ninja-1.8.2-add_NINJAJOBS_var-1.patch
python3 configure.py --bootstrap
python3 configure.py
./ninja ninja_test
./ninja_test --gtest_filter=-SubprocessTest.SetWithLots
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.8.2

53.Meson-0.47.1

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

54.procps-NG-3.3.15

tar xvf procps-ng-3.3.15.tar.xz
cd procps-ng-3.3.15
./configure --prefix=/usr
--exec-prefix=
--libdir=/usr/lib
--docdir=/usr/share/doc/procps-ng-3.3.15
--disable-static
--disable-kill
make
sed -i -r ‘s|(pmap_initname)\$|1|‘ testsuite/pmap.test/pmap.exp
sed -i ‘/set tty/d‘ testsuite/pkill.test/pkill.exp
rm testsuite/pgrep.test/pgrep.exp
make check
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.15

55.e2fsprogs-1.44.3

tar xvf e2fsprogs-1.44.3.tar.gz
cd e2fsprogs-1.44.3
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
ln -sfv /tools/lib/lib{blk,uu}id.so.1 lib
make LD_LIBRARY_PATH=/tools/lib check
make install
make install-libs
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.44.3

56.Coreutils-8.30

tar xvf coreutils-8.30.tar.xz
cd coreutils-8.30
patch -Np1 -i ../coreutils-8.30-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
FORCE_UNSAFE_CONFIGURE=1 make
make NON_ROOT_USERNAME=nobody check-root
echo "dummy:x:1000:nobody" >> /etc/group
chown -Rv nobody .
su nobody -s /bin/bash
-c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"
sed -i ‘/dummy/d‘ /etc/group
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"/1 /usr/share/man/man8/chroot.8
mv -v /usr/bin/{head,sleep,nice} /bin
cd ..
rm -rf coreutils-8.30

57.check-0.12.0

tar xvf check-0.12.0.tar.gz
cd check-0.12.0
./configure --prefix=/usr
make && make check
make install
sed -i ‘1 s/tools/usr/‘ /usr/bin/checkmk
cd ..
rm -rf check-0.12.0

58.diffutils-3.6

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

59.GAWK-4.2.1

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

60.findutils-4.6.0

tar xvf findutils-4.6.0.tar.gz
cd findutils-4.6.0
sed -i ‘s/test-lock..EXEEXT.//‘ tests/Makefile.in
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=/usr --localstatedir=/var/lib/locate
make && make check
make install
mv -v /usr/bin/find /bin
sed -i ‘s|find:=${BINDIR}|find:=/bin|‘ /usr/bin/updatedb
cd ..
rm -rf findutils-4.6.0

61.Groff-1.22.3

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

62.GRUB-2.02

tar xvf grub-2.02.tar.xz
cd grub-2.02
./configure --prefix=/usr
--sbindir=/sbin
--sysconfdir=/etc
--disable-efiemu
--disable-werror
make && make install
cd ..
rm -rf grub-2.02

63.Less-530

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

64.gzip 1.9

tar xvf gzip-1.9.tar.xz
cd gzip-1.9
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 check
make install
mv -v /usr/bin/gzip /bin
cd ..
rm -rf gzip-1.9

65.IPRoute2-4.18.0

tar xvf iproute2-4.18.0.tar.xz
cd iproute2-4.18.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-4.18.0 install
cd ..
rm -rf iproute2-4.18.0

66.KBD-2.0.4

tar xvf kbd-2.0.4.tar.xz
cd kbd-2.0.4
patch -Np1 -i ../kbd-2.0.4-backspace-1.patch
sed -i ‘s/(RESIZECONS_PROGS=)yes/1no/g‘ configure
sed -i ‘s/resizecons.8 //‘ docs/man/man8/Makefile.in
PKG_CONFIG_PATH=/tools/lib/pkgconfig ./configure --prefix=/usr --disable-vlock
make && make check
make install
mkdir -v /usr/share/doc/kbd-2.0.4
cp -R -v docs/doc/* /usr/share/doc/kbd-2.0.4
cd ..
rm -rf kbd-2.0.4

67.Libpipeline-1.5.0

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

68.Make-4.2.1

tar xvf make-4.2.1.tar.bz2
cd make-4.2.1
sed -i ‘211,217 d; 219,229 d; 232 d‘ glob/glob.c
./configure --prefix=/usr
make
make PERL5LIB=$PWD/tests/ check
make install
cd ..
rm -rf make-4.2.1

69.Patch-2.7.6

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

70.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"
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 *
EOF
cd ..
rm -rf sysklogd-1.5.1

71.sysvinit-2.90

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

72.Eudev-3.2.5

tar xvf eudev-3.2.5.tar.gz
cd eudev-3.2.5
cat > config.cache << "EOF"
HAVE_BLKID=1
BLKID_LIBS="-lblkid"
BLKID_CFLAGS="-I/tools/include"
EOF
./configure --prefix=/usr
--bindir=/sbin
--sbindir=/sbin
--libdir=/usr/lib
--sysconfdir=/etc
--libexecdir=/lib
--with-rootprefix=
--with-rootlibdir=/lib
--enable-manpages
--disable-static
--config-cache
LIBRARY_PATH=/tools/lib make
mkdir -pv /lib/udev/rules.d
mkdir -pv /etc/udev/rules.d
make LD_LIBRARY_PATH=/tools/lib check
make LD_LIBRARY_PATH=/tools/lib install
tar -xvf ../udev-lfs-20171102.tar.bz2
make -f udev-lfs-20171102/Makefile.lfs install
LD_LIBRARY_PATH=/tools/lib udevadm hwdb --update
cd ..
rm -rf eudev-3.2.5

73.UTIL-Linux的2.32.1

tar xvf util-linux-2.32.1.tar.xz
cd util-linux-2.32.1
mkdir -pv /var/lib/hwclock
rm -vf /usr/include/{blkid,libmount,uuid}
./configure ADJTIME_PATH=/var/lib/hwclock/adjtime
--docdir=/usr/share/doc/util-linux-2.32.1
--disable-chfn-chsh
--disable-login
--disable-nologin
--disable-su
--disable-setpriv
--disable-runuser
--disable-pylibmount
--disable-static
--without-python
--without-systemd
--without-systemdsystemunitdir
make
chown -Rv nobody .
su nobody -s /bin/bash -c "PATH=$PATH make -k check"
make install
cd ..
rm -rf util-linux-2.32.1

74.Man-DB-2.8.4

tar xvf man-db-2.8.4.tar.xz
cd man-db-2.8.4
./configure --prefix=/usr
--docdir=/usr/share/doc/man-db-2.8.4
--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=
make && make check
make install
cd ..
rm -rf man-db-2.8.4

76.tar-1.30

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

77.Texinfo-6.5

tar xvf texinfo-6.5.tar.xz
cd texinfo-6.5
sed -i ‘5481,5485 s/({/({/‘ tp/Texinfo/Parser.pm
./configure --prefix=/usr --disable-static
make && make check
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.5

77.VIM-8.1

tar xvf vim-8.1.tar.bz2
cd vim81
echo ‘#define SYS_VIMRC_FILE "/etc/vimrc"‘ >> src/feature.h
./configure --prefix=/usr
make
LANG=en_US.UTF-8 make -j1 test &> vim-test.log
上面的命令完成后会停止。
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/vim81/doc /usr/share/doc/vim-8.1
配置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 vim81
79.清理系统

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/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
find /usr/lib /usr/libexec -name
.la -delete

如果重新启动请按以下方法:

创建LFS目录、挂载sda3(主分区)与sda2(swap分区)、设置sources、tools目录权限:
mkdir -pv $LFS
mount -v -t ext4 /dev/sda3 $LFS
/sbin/swapon -v /dev/sda2
chmod -v a+wt $LFS/sources
chown -R root:root $LFS/tools
/ 创建设备结点console、null到硬盘上,测试检查,该项已产生 /
mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3
/ 挂载和填充 /dev ,挂载剩余的虚拟内核文件系统 /
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
/ /dev/shm可能是到/run/shm的链接,确保/dev/shm为空,然后再挂载 /
if [ -h $LFS/dev/shm ]; then
mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi
mount -vt tmpfs shm $LFS/dev/shm
/ 使用root用户,运行下面的命令来进入此时已填充了临时工具的的领域 /
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
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp

七、系统配置

1.LFS-启动脚本LFS-Bootscripts:

cd $LFS/sources
tar xvf lfs-bootscripts-20180820.tar.bz2
cd lfs-bootscripts-20180820
make install
cd ..
rm -rf lfs-bootscripts-20180820

2.创建网络接口配置文件:

bash /lib/udev/init-net-rules.sh
首先用以下命令找到你网卡的名字:
cat /etc/udev/rules.d/70-persistent-net.rules
结果显示如下:
技术分享图片
图中:NAME=”enp0s3”就是你的网卡名,将其记下来。
为enp0s3创建静态IP地址文件:
cd /etc/sysconfig/
vi ifconfig.enp0s3
在文件中输入:
ONBOOT=yes
IFACE=enp0s3 //网卡名字
SERVICE=ipv4-static
IP=192.168.3.252 //网卡IP地地
GATEWAY=192.168.3.1 //网关
PREFIX=24
BROADCAST=192.168.3.255 //广播地址
以上文件根据自己实际情况调整。

3.创建/etc/resolv.conf文件

vi /etc/resolv.conf
#domain <Your Domain Name> //设置域名,如果有的话
nameserver 118.118.118.1 //设置DNS服务器IP地址。根据实际调整。
#nameserver <IP address nameserver> //如果有第二个DNS服务器在这里设置。

以上文件根据自己实际调整。

4.配置系统主机名

echo "<lfs>" > /etc/hostname

5.创建hosts文件:

cat > /etc/hosts << "EOF"
127.0.0.1 localhost
EOF

6.System V Bootscript配置

cat > /etc/inittab << "EOF"
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc S
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016:once:/sbin/sulogin
1:2345:respawn:/sbin/agetty --noclear tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600
EOF

7.配置系统时钟clock

cat > /etc/sysconfig/clock << "EOF"
UTC=1
CLOCKPARAMS=
EOF

8.Bash Shell启动文件
运行以下命令获取Glibc支持的所有语言环境的列表:
locale -a
看有没有zh_CN.gb18030:
如果没有就添加:localedef -i zh_CN -f GB18030 zh_CN.GB18030
有的话继续向下执行:
LC_ALL=zh_CN.gb18030 locale charmap
进行测试:
运行:
LC_ALL=zh_CN.gb18030 locale language
结果:
Chinese
运行:
LC_ALL=zh_CN.gb18030 locale charmap
结果:
GB18030
运行:
LC_ALL=zh_CN.gb18030 locale int_curr_symbol
结果:
CNY
运行:
LC_ALL=zh_CN.gb18030 locale int_prefix
结果:
86

创建/etc/profil文件:
cat > /etc/profile << "EOF"
export LANG=zh_CN.gb18030
EOF

创建/ etc / inputrc文件:

cat > /etc/inputrc << "EOF"
set horizontal-scroll-mode Off
set meta-flag On
set input-meta On
set convert-meta Off
set output-meta On
set bell-style none
"eOd": backward-word
"eOc": forward-word

for linux console

"e[1~": beginning-of-line
"e[4~": end-of-line
"e[5~": beginning-of-history
"e[6~": end-of-history
"e[3~": delete-char
"e[2~": quoted-insert
"eOH": beginning-of-line
"eOF": end-of-line

for Konsole

"e[H": beginning-of-line
"e[F": end-of-line
EOF

创建/etc/shells文件:

cat > /etc/shells << "EOF"
/bin/sh
/bin/bash
EOF

9.创建/etc/ fsta文件:

cat > /etc/fstab << "EOF"
/dev/sda3 / ext4 defaults 1 1
/dev/sda2 swap swap pri=1 0 0
proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /run tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0
EOF

10.安装内核:

cd $LFS/sources
tar xvf linux-4.18.5.tar.xz
cd linux-4.18.5
make mrproper
make defconfig
make menuconfig
确保以下选项正确设置:
技术分享图片
技术分享图片
技术分享图片
make
make modules_install
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-4.18.5-lfs-8.3
cp -iv System.map /boot/System.map-4.18.5
cp -iv .config /boot/config-4.18.5
install -d /usr/share/doc/linux-4.18.5
cp -r Documentation/* /usr/share/doc/linux-4.18.5
install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
EOF
cd ..
chown -R 0:0 linux-4.18.5
install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
EOF

11.设置GRUB引导:
GRUB文件安装到/boot/grub并设置引导跟踪:
grub-install /dev/sda
创建GRUB配置文件:
cat > /boot/grub/grub.cfg << "EOF"
set default=0
set timeout=5
insmod ext4
set root=(hd0,3)
menuentry "GNU/Linux, Linux 4.18.5-lfs-8.3" {
linux /boot/vmlinuz-4.18.5-lfs-8.3 root=/dev/sda3 ro
}
EOF
echo 8.3 > /etc/lfs-release
cat > /etc/lsb-release << "EOF"
DISTRIB_ID="Linux From Scratch"
DISTRIB_RELEASE="8.3"
DISTRIB_CODENAME="<your name here>"
DISTRIB_DESCRIPTION="Linux From Scratch"
EOF

12.重新启动系统:
logout
umount -v $LFS/dev/pts
umount -v $LFS/dev
umount -v $LFS/run
umount -v $LFS/proc
umount -v $LFS/sys
umount -v $LFS
取出光盘,重新启动计算机:
shutdown -r now
13.重新启动后的界面:
技术分享图片

至此,LFS 8.3系统就完成了。

以上是关于LFS 8.3 从零开始做自己的系统~!~的主要内容,如果未能解决你的问题,请参考以下文章

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - 准备虚拟内核文件系统

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - Autoconf-2.69

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - Bc-1.06.95

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - GCC-4.9.2

LFS 系列从零开始 DIY Linux 系统:构建临时系统 - Linux-3.19

LFS 系列从零开始 DIY Linux 系统:基本系统配置 - 创建 /etc/shells 文件