完成Chroot环境准备后,我们开始编译基本系统。如无特别提出更换操作用户,以下章节,都是在Chroot环境中,使用root用户进行操作。每次操作时的工作目录是:/installer/builds。因此,每次编译安装完成单个软件时,请退出到上述工作目录,进行安装下一个软件包。
1、第一遍安装 gettext(gettext-0.22.tar.xz)
./configure --disable-shared
make
cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin
2、第一遍安装 bison(bison-3.8.2.tar.xz)
./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2
make
make install
3、第一遍安装 perl(perl-5.38.0.tar.xz)
sh Configure -des \
-Dprefix=/usr \
-Dvendorprefix=/usr \
-Duseshrplib \
-Dprivlib=/usr/lib/perl5/5.38/core_perl \
-Darchlib=/usr/lib/perl5/5.38/core_perl \
-Dsitelib=/usr/lib/perl5/5.38/site_perl \
-Dsitearch=/usr/lib/perl5/5.38/site_perl \
-Dvendorlib=/usr/lib/perl5/5.38/vendor_perl \
-Dvendorarch=/usr/lib/perl5/5.38/vendor_perl
make
make install
4、第一遍安装 Python(Python-3.11.4.tar.xz)
./configure --prefix=/usr \
--enable-shared \
--without-ensurepip
make
make install
5、第一遍安装 texinfo(texinfo-7.0.3.tar.xz)
./configure --prefix=/usr
make
make install
6、第一遍安装 util-linux(util-linux-2.39.1.tar.xz)
mkdir -pv /var/lib/hwclock
./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \
--libdir=/usr/lib \
--runstatedir=/run \
--docdir=/usr/share/doc/util-linux-2.39.1 \
--disable-chfn-chsh \
--disable-login \
--disable-nologin \
--disable-su \
--disable-setpriv \
--disable-runuser \
--disable-pylibmount \
--disable-static \
--without-python
make
make install
7、清理工具链。
rm -rf /usr/share/{info,man,doc}/*
find /usr/{lib,libexec} -name \*.la -delete
rm -rf /tools
8、安装 man-pages(man-pages-6.05.01.tar.xz)
rm -v man3/crypt*
make prefix=/usr install
9、安装 iana-etc(iana-etc-20230810.tar.gz)
cp services protocols /etc
10、安装安装 glibc(glibc-2.38.tar.xz)
patch -Np1 -i ${sourcesDir}/glibc-2.38-fhs-1.patch
mkdir -v build
pushd build
echo "rootsbindir=/usr/sbin" > configparms
../configure --prefix=/usr \
--disable-werror \
--enable-kernel=4.14 \
--enable-stack-protector=strong \
--with-headers=/usr/include \
libc_cv_slibdir=/usr/lib
make
touch /etc/ld.so.conf
sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile
make install
sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd
# 手工创建配置文件,解决默认配置的过度配置的问题
cat >/etc/nscd.conf <<"EOF"
logfile /var/log/nscd.log
threads 4
max-threads 32
#server-user nobody
#stat-user somebody
debug-level 0
paranoia no
enable-cache hosts yes
positive-time-to-live hosts 3600
negative-time-to-live hosts 20
suggested-size hosts 211
check-files hosts yes
persistent hosts yes
shared hosts yes
max-db-size hosts 33554432
enable-cache passwd no
enable-cache group no
enable-cache netgroup no
enable-cache services no
EOF
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 ISO-8859-1 en_GB
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_ES -f ISO-8859-15 es_ES@euro
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 is_IS -f ISO-8859-1 is_IS
localedef -i is_IS -f UTF-8 is_IS.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f ISO-8859-15 it_IT@euro
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.SJIS 2> /dev/null || true
localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i se_NO -f UTF-8 se_NO.UTF-8
localedef -i ta_IN -f UTF-8 ta_IN.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_CN -f UTF-8 zh_CN.UTF-8
localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS
localedef -i zh_TW -f UTF-8 zh_TW.UTF-8
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 ${sourcesDir}/tzdata2023c.tar.gz
ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}
for tz in etcetera southamerica northamerica europe africa antarctica \
asia australasia backward; 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
ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
# Add an include directory
include /etc/ld.so.conf.d/*.conf
EOF
mkdir -pv /etc/ld.so.conf.d
11、安装 zlib(zlib-1.2.13.tar.xz)
./configure --prefix=/usr
make
make install
rm -fv /usr/lib/libz.a
12、安装 bzip2(bzip2-1.0.8.tar.gz)
patch -Np1 -i ${sourcesDir}/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 -av libbz2.so.* /usr/lib
ln -sv libbz2.so.1.0.8 /usr/lib/libbz2.so
cp -v bzip2-shared /usr/bin/bzip2
for i in /usr/bin/{bzcat,bunzip2}; do
ln -sfv bzip2 $i
done
rm -fv /usr/lib/libbz2.a
13、安装 xz(xz-5.4.4.tar.xz)
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/xz-5.4.4
make
make check
make install
14、安装 zstd(zstd-1.5.5.tar.gz)
make prefix=/usr
make prefix=/usr install
rm -v /usr/lib/libzstd.a
15、安装 file(file-5.45.tar.gz)
./configure --prefix=/usr
make
make install
16、安装 readline(readline-8.2.tar.gz)
sed -i '/MV.*old/d' Makefile.in
sed -i '/{OLDSUFF}/c:' support/shlib-install
patch -Np1 -i ${sourcesDir}/readline-8.2-upstream_fix-1.patch
./configure --prefix=/usr \
--disable-static \
--with-curses \
--docdir=/usr/share/doc/readline-8.2
make SHLIB_LIBS="-lncursesw"
make SHLIB_LIBS="-lncursesw" install
17、安装 m4(m4-1.4.19.tar.xz)
./configure --prefix=/usr
make
make install
18、安装 bc(bc-6.6.0.tar.xz)
CC=gcc ./configure --prefix=/usr -G -O3 -r
make
make install
19、安装 flex(flex-2.6.4.tar.gz)
./configure --prefix=/usr \
--docdir=/usr/share/doc/flex-2.6.4 \
--disable-static
make
make install
ln -sv flex /usr/bin/lex
ln -sv flex.1 /usr/share/man/man1/lex.1
20、安装 tcl(tcl8.6.13-src.tar.gz)
SRCDIR=$(pwd)
pushd unix
./configure --prefix=/usr \
--mandir=/usr/share/man
make
sed -e "s|$SRCDIR/unix|/usr/lib|" \
-e "s|$SRCDIR|/usr/include|" \
-i tclConfig.sh
sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.5|/usr/lib/tdbc1.1.5|" \
-e "s|$SRCDIR/pkgs/tdbc1.1.5/generic|/usr/include|" \
-e "s|$SRCDIR/pkgs/tdbc1.1.5/library|/usr/lib/tcl8.6|" \
-e "s|$SRCDIR/pkgs/tdbc1.1.5|/usr/include|" \
-i pkgs/tdbc1.1.5/tdbcConfig.sh
sed -e "s|$SRCDIR/unix/pkgs/itcl4.2.3|/usr/lib/itcl4.2.3|" \
-e "s|$SRCDIR/pkgs/itcl4.2.3/generic|/usr/include|" \
-e "s|$SRCDIR/pkgs/itcl4.2.3|/usr/include|" \
-i pkgs/itcl4.2.3/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
mv /usr/share/man/man3/{Thread,Tcl_Thread}.3
popd
tar -xf ${sourcesDir}/tcl8.6.13-html.tar.gz --strip-components=1
mkdir -v -p /usr/share/doc/tcl-8.6.13
cp -v -r ./html/* /usr/share/doc/tcl-8.6.13
21、安装 expect(expect5.45.4.tar.gz)
./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
22、安装 dejagnu(dejagnu-1.6.3.tar.gz)
mkdir -v build
pushd build
../configure --prefix=/usr
make
make install
popd
23、安装 binutils(binutils-2.41.tar.xz)
mkdir -v build
pushd build
../configure --prefix=/usr \
--sysconfdir=/etc \
--enable-gold \
--enable-ld=default \
--enable-plugins \
--enable-shared \
--disable-werror \
--enable-64-bit-bfd \
--with-system-zlib
make tooldir=/usr
make tooldir=/usr install
rm -fv /usr/lib/lib{bfd,ctf,ctf-nobfd,gprofng,opcodes,sframe}.a
24、安装 gmp(gmp-6.3.0.tar.xz)
./configure --prefix=/usr \
--enable-cxx \
--disable-static \
--docdir=/usr/share/doc/gmp-6.3.0
make
make install
25、安装 mpfr(mpfr-4.2.0.tar.xz)
sed -e 's/+01,234,567/+1,234,567 /' \
-e 's/13.10Pd/13Pd/' \
-i tests/tsprintf.c
./configure --prefix=/usr \
--disable-static \
--enable-thread-safe \
--docdir=/usr/share/doc/mpfr-4.2.0
make
make install
26、安装 mpc(mpc-1.3.1.tar.gz)
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/mpc-1.3.1
make
make install
27、安装isl(isl-0.26.tar.xz,下载地址:http://ftp.sjtu.edu.cn/ubuntu/pool/main/i/isl/isl_0.26.orig.tar.xz)
./configure --prefix=/usr \
--disable-static
make
make install
install -dm755 /usr/share/gdb/auto-load/usr/lib/
mv /usr/lib/libisl.so.*-gdb.py /usr/share/gdb/auto-load/usr/lib/
28、安装 attr(attr-2.5.1.tar.gz)
./configure --prefix=/usr \
--disable-static \
--sysconfdir=/etc \
--docdir=/usr/share/doc/attr-2.5.1
make
make install
29、安装 acl(acl-2.3.1.tar.xz)
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/acl-2.3.1
make
make install
30、安装 libcap(libcap-2.69.tar.xz)
sed -i '/install -m.*STA/d' libcap/Makefile
make prefix=/usr lib=lib
make prefix=/usr lib=lib install
31、安装 libxcrypt(libxcrypt-4.4.36.tar.xz)
./configure --prefix=/usr \
--enable-hashes=strong,glibc \
--enable-obsolete-api=no \
--disable-static \
--disable-failure-tokens
make
make install
32、安装 shadow
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 YESCRYPT:' \
-e 's:/var/spool/mail:/var/mail:' \
-e '/PATH=/{s@/sbin:@@;s@/bin:@@}' \
-i etc/login.defs
sed -i 's:DICTPATH.*:DICTPATH\t/lib/cracklib/pw_dict:' etc/login.defs
touch /usr/bin/passwd
./configure --sysconfdir=/etc \
--disable-static \
--with-{b,yes}crypt \
--with-group-name-max-length=32
make
make exec_prefix=/usr install
make -C man install-man
pwconv
grpconv
mkdir -p /etc/default
useradd -D --gid 999
sed -i '/MAIL/s/yes/no/' /etc/default/useradd
33、安装 gcc(gcc-13.2.0.tar.xz,c89和c99文件,请到archlinux.org上去下载)
sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
mkdir -v build && pushd build
../configure --prefix=/usr \
LD=ld \
--enable-languages=c,c++,fortran \
--enable-default-pie \
--enable-default-ssp \
--disable-multilib \
--disable-bootstrap \
--disable-fixincludes \
--with-system-zlib
make
make install
mkdir -pv /usr/share/gdb/auto-load/usr/lib
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib
chown -v -R root:root \
/usr/lib/gcc/$(gcc -dumpmachine)/13.2.0/include{,-fixed}
ln -svr /usr/bin/cpp /usr/lib
ln -sv gcc.1 /usr/share/man/man1/cc.1
ln -v -sf gcc /usr/bin/cc
install -v -dm755 /usr/lib/bfd-plugins
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/13.2.0/liblto_plugin.so \
/usr/lib/bfd-plugins/
install -v -Dm755 ${sourcesDir}/gcc/c89 /usr/bin/c89
install -v -Dm755 ${sourcesDir}/gcc/c99 /usr/bin/c99
34、安装 pkgconf(pkgconf-2.0.0.tar.xz)
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/pkgconf-2.0.1
make
make install
ln -sv pkgconf /usr/bin/pkg-config
ln -sv pkgconf.1 /usr/share/man/man1/pkg-config.1
35、安装 ncurses(ncurses-6.4.tar.gz)
./configure --prefix=/usr \
--mandir=/usr/share/man \
--with-shared \
--without-debug \
--without-normal \
--with-cxx-shared \
--enable-pc-files \
--enable-widec \
--with-pkg-config-libdir=/usr/lib/pkgconfig
make
make DESTDIR=$PWD/dest install
install -vm755 dest/usr/lib/libncursesw.so.6.4 /usr/lib
rm -v dest/usr/lib/libncursesw.so.6.4
cp -av dest/* /
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
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
36、安装 sed(sed-4.9.tar.xz)
./configure --prefix=/usr
make
make install
37、安装 psmisc(psmisc-23.6.tar.xz)
./configure --prefix=/usr
make
make install
38、第二遍安装 gettext(gettext-0.22.tar.xz)
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/gettext-0.22
make
make install
chmod -v 0755 /usr/lib/preloadable_libintl.so
39、安装 bison(bison-3.8.2.tar.xz)
./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2
make
make install
40、安装 grep(grep-3.11.tar.xz)
sed -i "s/echo/#echo/" src/egrep.sh
./configure --prefix=/usr
make
make install
41、安装 bash(bash-5.2.15.tar.gz)
./configure --prefix=/usr \
--without-bash-malloc \
--with-installed-readline \
--docdir=/usr/share/doc/bash-5.2.15
make
make install
42、安装 libtool(libtool-2.4.7.tar.xz)
./configure --prefix=/usr
make
make install
rm -fv /usr/lib/libltdl.a
43、安装 gdbm(gdbm-1.23.tar.gz)
./configure --prefix=/usr \
--disable-static \
--enable-libgdbm-compat
make
make install
44、安装 gperf(gperf-3.1.tar.gz)
./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1
make
make install
45、安装 expat(expat-2.5.0.tar.xz)
./configure --prefix=/usr \
--disable-static \
--docdir=/usr/share/doc/expat-2.5.0
make
make install
install -v -m644 doc/*.{html,css} /usr/share/doc/expat-2.5.0
46、安装 inetutils(inetutils-2.4.tar.xz)
./configure --prefix=/usr \
--bindir=/usr/bin \
--localstatedir=/var \
--disable-logger \
--disable-whois \
--disable-rcp \
--disable-rexec \
--disable-rlogin \
--disable-rsh \
--disable-servers
make
make install
mv -v /usr/{,s}bin/ifconfig
47、安装 less(less-633.tar.gz)
./configure --prefix=/usr --sysconfdir=/etc
make
make install
48、第二遍安装 perl(perl-5.38.0.tar.xz)
export BUILD_ZLIB=False
export BUILD_BZIP2=0
sh Configure -des \
-Dprefix=/usr \
-Dvendorprefix=/usr \
-Dprivlib=/usr/lib/perl5/5.38/core_perl \
-Darchlib=/usr/lib/perl5/5.38/core_perl \
-Dsitelib=/usr/lib/perl5/5.38/site_perl \
-Dsitearch=/usr/lib/perl5/5.38/site_perl \
-Dvendorlib=/usr/lib/perl5/5.38/vendor_perl \
-Dvendorarch=/usr/lib/perl5/5.38/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
49、安装 XML-Parser(XML-Parser-2.46.tar.gz)
perl Makefile.PL
make
make install
50、安装 intltool(intltool-0.51.0.tar.gz)
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