|
|

楼主 |
发表于 2005-4-5 23:47:33
|
显示全部楼层
实战评述:LFS 5.0跟6.0分别很大。但原作者的基本原则是正确的。
以下是我做LFS6.1的过程。
最重要的一点,就是大多数的包都要尽量带上--libdir=/usr/lib64参数。
# 6.9 linux-headers-2.6.11.2
cp -R include/asm-x86_64 /usr/include/asm
cp -R include/linux /usr/include
chown -R root:root /usr/include/{asm,linux}
find /usr/include/{asm,linux} -type d -exec chmod 755 {} \;
find /usr/include/{asm,linux} -type f -exec chmod 644 {} \;
# 6.10 Man-pages-2.01
make install
# 6.11 Glibc-2.3.4
touch /etc/ld.so.conf
mkdir ../glibc-build
cd ../glibc-build
../glibc-2.3.4/configure --prefix=/usr \
--disable-profile --enable-add-ons \
--libexecdir=/usr/lib64/glibc --enable-kernel-2.6.0
make
make check
make install
make localedata/install-locales
make -C ../glibc-2.3.4/linuxthreads/man
make -C ../glibc-2.3.4/linuxthreads/man install
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
tzselect
cp --remove-destination /usr/share/zoneinfo/Asia/Hong_Kong \
/etc/localtime
cat > /etc/ld.so.conf << "EOF
# Begin /etc/ld.so.conf
/usr/local/lib64
/opt/lib64
/usr/local/lib
/opt/lib
# End /etc/ld.so.conf
EOF
# 6.12 重新调整工具链
在binutils-build目录下运行
make -C ld INSTALL=/tools/bin/install install
perl -pi -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g;' \
-e 's@ /tools/lib64/ld-linux-x86-64.so.2@ /lib64/ld-linux-x86-64.so.2@g;' \
`gcc --print-file specs`
(如果加上了原书中的另一条替换命令,就会不能编译后面的dummy.c)
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /lib'
检查结果:应当是
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
rm dummy.c a.out
# 6.13 Binutils-2.15.94.0.2.2
mkdir ../binutils-build
cd ../binutils-build
../binutils-2.15.94.0.2.2/configure --prefix=/usr \
--enable-shared --libdir=/usr/lib64
make tooldir=/dir
make check
make tooldir=/usr install
cp ../binutils-2.15.94.0.2.2/include/libiberty.h /usr/include
#6.14 GCC-3.4.3
patch -Np1 -i ../gcc-3.4.3-no_fixincludes-1.patch
patch -Np1 -i ../gcc-3.4.3-linkonce-1.patch
mkdir ../gcc-build
cd ../gcc-build
../gcc-3.4.3/configure --prefix=/usr \
--libexecdir=/usr/lib64 --libdir=/usr/lib64 \
--enable-shared --enable-threads=posix \
--enable-__cxa_atexit --enable-clocale=gnu \
--enable-languages=c,c++ --disable-multilib
make
make -k check
make install
ln -s ../usr/bin/cpp /lib
ln -s gcc /usr/bin/cc
# 6.15 Coreutils-5.2.1
patch -Np1 -i ../coreutils-5.2.1-uname-2.patch
patch -Np1 -i
../coreutils-5.2.1-suppress_uptime_kill_su-1.patch
DEFAULT_POSIX2_VERSION=199209 ./configure --prefix=/usr \
--libdir=/usr/lib64
make
make NON_ROOT_USERNAME=dummy check-root
src/su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"
sed -i '/dummy/d' /etc/passwd /etc/group
make install
mv /usr/bin/{[,basename,cat,chgrp,chmod,chown,cp,dd,df} /bin
mv /usr/bin/{date,echo,false,head,hostname,install,ln} /bin
mv /usr/bin/{ls,mkdir,mknod,mv,pwd,rm,rmdir,sync} /bin
mv /usr/bin/{sleep,stty,test,touch,true,uname} /bin
mv /usr/bin/chroot /usr/sbin
ln -s ../../bin/install /usr/bin
# 6.16 Zlib-1.2.2
./configure --prefix=/usr --libdir=/usr/lib64 --shared
make
make check
make install
rm /lib/libz.so
ln -sf ../../lib64/libz.so.1.2.2 /usr/lib/libz.so
make clean
./configure --libdir=/usr/lib64 --prefix=/usr
make
make check
make install
chmod 644 /usr/lib/libz.a
# 6.17 Mktemp-1.5
patch -Np1 -i ../mktemp-1.5-add_tempfile-1.patch
./configure --prefix=/usr --with-libc --libdir=/usr/lib64
make
make install
make install-tempfile
# 6.18 lana-Etc-1.04
make
make install
# 6.19 findutils-4.2.20
./configure --prefix=/usr --libexecdir=/usr/lib64/locale \
--libdir=/usr/lib64 --localstatedir=/var/lib/locate
make
make check
make install
# 6.20 Gawk-3.1.4
./configure --prefix=/usr --libexecdir=/usr/lib64 --libdir=/usr/lib64
make
make check
make install
# 6.21 Ncurses-5.4
./configure --prefix=/usr --libdir=/usr/lib64 \
--with-shared --without-debug
make
make install
chmod 755 /usr/lib64/*.5.4
chmod 644 /usr/lib64/libncurses++.a
mv /usr/lib64/libncurses.so.5 /lib64
ln -sf ../../lib64/libncurses.so.5 /usr/lib64/libncurses.so
ln -sf libncurses.so /usr/lib64/libcurses.so
# 6.22 Readline-5.0
patch -Np1 -i ../readline-5.0 -fixes-1.patch
./configure --prefix=/usr --libdir=/lib64
make SHLIB_XLDFLAGS=-lncurses
make install
chmod 755 /lib64/lib{readline,history}.so*
mv /lib64/lib{readline,history}.a /usr/lib64
rm /lib64/lib{readline,history}.so
ln -sf ../../lib64/libreadline.so.5 /usr/lib64/libreadline.so
ln -sf ../../lib/libhistory.so.5 /usr/lib64/libhistory.so
# 6.23 Vim-6.3
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
echo '#define SYS_GVIMRC_FILE "/etc/gvimrc"' >> src/feature.h
patch -Np1 0i ../vim-6.3-security_fix-1.patch
./configure --prefix=/usr --libdir=/usr/lib64 --enable-multibyte
make
make install
ln -s vim /usr/bin/vi
cat > /etc/vimrc << "EOF"
" Begin /etc/vimrc
set nocompatible
set backspace=2
syntax on
if (&term == "iterm") || (&term == "putty")
set background=dark
endif
" End /etc/vimrc
EOF
# 6.24 M4-1.4.3
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
# 6.25 Bison-2.0
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
# 6.26 Less-382
./configure --prefix=/usr --bindir=/bin --sysconfdir=/etc \
--libdir=/lib64
make
make install
# 6.27 Groff-1.19.1
PAGE=A4 ./configure=/usr --libdir=/usr/lib64
make
install
ln -s soelim /usr/bin/zsoelim
ln -s eqn /usr/bin/geqn
ln -s tbl /usr/bin/gtbl
# 6.28 Sed-4.1.4
./configure --prefix=/usr --bindir=/bin --libdir=/usr/lib64
make
make check
make install
# 6.29 Flex-2.5.31
patch -Np1 -i ../flex-2.5.31-debian_fixes-2.patch
touch doc/flex.1
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
ln -s libfl.a /usr/lib64/libl.a
cat > /usr/bin/lex << "EOF"
#!/bin/sh
# Begin /usr/bin/lex
exec /usr/bin/flex -l "$@"
# End /usr/bin/lex
EOF
chmod 755 /usr/bin/lex
# 6.30 Gettext-0.14.3
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
# 6.31 Inetutils-1.4.2
patch -Np1 -i ../inetutils-1.4.2-amd64.patch
patch -Np1 -i ../inetutils-1.4.2-kernel_headers-1.patch
patch -Np1 -i ../inetutils-1.4.2-no_server_man_pages-1.patch
./configure --prefix=/usr --disable-syslogd \
--libexecdir=/usr/sbin --disable-logger \
--disable-whois --disable-servers \
--libdir=/usr/lib64 --sysconfdir=/etc \
--localstatedir=/var
make
make install
mv /usr/bin/ping /bin
# 6.32 IPRoute2-2.6.11
patch -Np1 -i ../iproute2-2.6.11_050330-remove_db-1.patch
./configure --libdir=/usr/lib64
make SBINDIR=/sbin
make SBINDIR=/sbin install
# 6.33 Perl-5.8.6
./Configure
自己输入选项,遇到Lib就用Lib64代替。下面列出需要调整的选项。
...
Directories to use for library searches? [/usr/local/lib /lib /usr/lib] /usr/local/lib64 /lib64 /usr/lib64
...
Installation prefix to use? (~name ok) [/usr/local] /usr
...
What installation prefix should I use for installing files? (~name ok)
[/usr]
...
Pathname where the private library files will reside? (~name ok)
[/usr/lib/perl5/5.8.6] /usr/lib64/perl5/5.8.6
...
Pathname for the site-specific library files? (~name ok)
[/usr/lib/perl5/site_perl/5.8.6] /usr/lib64/perl5/site_perl/5.8.6
...
Pathname for the site-specific architecture-dependent library files? (~name ok)
[/usr/lib/perl5/site_perl/5.8.6/x86_64-linux] /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux
...
配置选项比较多,我都是全部回车通过的。
make
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
make test
make install
# 6.34 Texinfo-4.8
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
make TEXMF=/usr/share/texmf install-tex
cd /usr/share/info
rm dir
for f in *
do install-info $f dir 2>/dev/null
done
# 6.35 Autoconf-2.59
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
# 6.36 Autoimake-1.9.5
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
# 6.37 Bash-3.0
patch -Np1 -i ../bash-3.0-fixes-3.patch
patch -Np1 -i ../bash-3.0-avoid-WCONTINUED-1.patch
./configure --prefix=/usr --libdir=/usr/lib64 --bindir=/bin \
--without-bash-malloc --with-installed-readline
make
make tests
make install
exec /bin/bash --login +h
# 6.38 File-4.13
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
# 6.39 Libtool-1.5.14
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
# 6.40 Bzip2-1.0.3
make -f Makefile-libbz2_so
make clean
make
make test
make install
cp bzip2-shared /bin/bzip2
cp -a libbz2.so* /lib64
ln -s ../../lib64/libbz2.so.1.0 /usr/lib64/libbz2.so
rm /usr/bin/{bunzip2,bzcat,bzip2}
ln -s bzip2 /bin/bunzip2
ln -s bzip2 /bin/bzcat
mv /usr/lib/libbz2.a /usr/lib64/
# 6.41 Diffutils-2.8.1
./configure --prefix=/usr --libdir=/usb/lib64
make
make install
# 6.42 Kbd-1.12
./configure
make
make install
# 6.43 E2fsprogs-1.37
sed -i -e 's/-DTEST/$(ALL_CFLAGS) &/' lib/e2p/Makefile.in
mkdir ../build
cd ../build
../e2fsprogs-1.37/configure --prefix=/usr --with-root-prefix="" \
--libdir=/usr/lib64 --enable-elf-shlibs --disable-evms
make
make check
make install
# 6.44 Grep-2.5.1a
./configure --prefix=/usr --libdir=/usr/lib64 --bindir=/bin \
--with-included-regex
make
make check
make install
# 6.45 Grub-0.96
(跳过)
# 6.46 Gzip-1.3.5
./configure --prefix=/usr --libdir=/usr/lib64
sed -i 's@"BINDIR"@/bin@g' gzexe.in
make
make install
mv /usr/bin/gzip /bin
rm /usr/bin/{gunzip,zcat}
ln -s gzip /bin/gunzip
ln -s gzip /bin/zcat
ln -s gunzip /bin/uncompress
# 6.47 Hotplug-2004_09_23
make install
cp etc/hotplug/pnp.distmap /etc/hotplug
rm -rf /etc/init.d
rm -rf /etc/hotplug/net.agent
touch /var/log/hotplug/events
mkdir /lib/firmware
# 6.48 Man-1.5p
sed -i 's@-is@&R@g' configure
sed -i 's@MANPATH./usr/man@#&@g' src/man.conf.in
./configure -confdir=/etc
make
make install
# 6.49 Make-3.80
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
# 6.50 Module-Init-Tools-3.1
./configure --prefix="" --enable-zlib --libdir=/usr/lib64
make DOCBOOKTOMAN=""
make check
make install
# 6.51 Patch-2.5.4
CPPFLAGS=-D_GNU_SOURCE ./configure --prefix=/usr --libdir=usr/lib64
make
make install
# 6.52 Procps
make
make install
# 6.53 Psmisc-21.6
./configure --prefix=/usr --exec-prefix="" --libdir=/usr/lib64
make
make install
mv /bin/pstree* /usr/bin
ln -s killall /bin/pidof
# 6.54 Shadow-4.0.7
patch -Np1 -i ../shadow-4.0.7-fix_lastlog-1.patch
./configure --libdir=/lib64 --enable-shared
sed -i 's/groups$(EXEEXT) //' src/Makefile
sed -i '/groups/d' man/Makefile
cp etc/{limits,login.access} /etc
sed -e 's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
-e 's@/var/spool/mail@/var/mail@' \
etc/login.defs.linux > /etc/login.defs
mv /usr/bin/passwd /bin
mv /lib64/libshadow.*a /usr/lib
rm /lib/libshadow.so
ln -sf ../../lib/libshadow.so.0 /usr/lib/libshadow.so
mkdir /etc/default
pwconv
grpconv
passwd root
# Sysklogd-1.4.1
patch -Np1 -i ../sysklogd-1.4.1-fixes-1.patch
make
make install
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/usr.log
*.emerg *
# log the bootscript outpug:
local2.* -var/log/boot.log
# End /etc/syslog.conf
EOF
# 6.56 Sysinit-2.86
sed -i 's@Sending processes@& started by init@g' src/init.c
为了通过编译,我加了一句
sed -i 's@/usr/lib/@/usr/lib64/@g' src/Makefile
make -C src
make -C src install
cat > /etc/inittab << "EOF"
# Begin /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc sysinit
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 nce:/sbin/sulogin
1:2345:respawn:/sbin/agetty -I '\033(K' tty1 9600
2:2345:respawn:/sbin/agetty -I '\033(K' tty2 9600
3:2345:respawn:/sbin/agetty -I '\033(K' tty3 9600
4:2345:respawn:/sbin/agetty -I '\033(K' tty4 9600
5:2345:respawn:/sbin/agetty -I '\033(K' tty5 9600
6:2345:respawn:/sbin/agetty -I '\033(K' tty6 9600
# End /etc/inittab
# 6.57 Tar-1.15.1
patch -Np1 -i ../tar-1.15.1-sparse_fix-1.patch
./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin \
--libdir=/usr/lib64
make
make check
make install
# 6.58 Udev-056
make udevdir=/dev
make test
出现一个错误,但是是期望中的,也就是正常。
make udevdir=/dev install
# 6.59 Util-linux-2.12q
sed -i 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
hwclock/hwclock.c
mkdir /var/lib/hwclock
patch -Np1 -i ../util-linux-2.12q-cramfs-1.patch
./configure
make HAVE_KILL=yes HAVE_SLN=yes
make HAVE_KILL=yes HAVE_SLN=yes install
mv /usr/bin/logger /bin
好了,到此第6章全部完成,剩下一些清理工作了。 |
|