|
|

楼主 |
发表于 2005-3-31 15:44:22
|
显示全部楼层
===================》原文翻译《===========================
构建基本系统
这是对LFS 5.0第6章的补充。
跟LFS5.0中的描述不同的地方有:
* 某些版本号不同。Linux-2.4.24 代替了 Linux-2.4.22 因为 2.4.24 更好。 Bison-1.75 代替 bison-1.875, 而 groff-1.17.2 代替 groff-1.19, 因为 bison-1.875 和 groff-1.19 目前在GNU服务器上不可用。File-4.06 代替 file-4.04 因为 file-4.04 在其主发布站上不可用。procps-3.1.15 用于准备2.6的内核行,虽然实际构建的是2.4般的内核。
* 库文件安装于/lib64和/usr/lib64而不是/lib和/usr/lib
* 重新调整工具链的步骤有所不同,因为动态加载器的名字和位置不同。
* shadow-4.0.3需要打一些附加的补丁
* Grub和Lilo都不能方便地构建为x86_64,因此构建grub要等到i686兼容性构筑好之后再来进行。
* Linux使用gcc-3.3.1构建;这里不尝试构建gcc-2.95。
首先完成LFS的步骤,直到“安装Linux 2.4.22 头文件”这里。同时创建目录/lib64、/usr/lib64,以及/usr/local/lib64。
linux-2.4.24 头文件
make mrproper
make include/linux/version.h
make symlinks
cp -HR include/asm /usr/include
cp -R include/asm-generic /usr/include
cp -R include/linux /usr/include
touch /usr/include/linux/autoconf.h
man-pages-1.60
make install
glibc-2.3.2
tar xjvf ../glibc-linuxthreads-2.3.2.tar.bz2
touch /etc/ld.so.conf
patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch
mkdir ../glibc-build
cd ../glibc-build
../glibc-2.3.2/configure --prefix=/usr \
--disable-profile --enable-add-ons \
--libexecdir=/usr/bin --with-headers=/usr/include
make
make check
make install
make localedata/install-locales
make -C ../glibc-2.3.2/linuxthreads/man
make -C ../glibc-2.3.2/linuxthreads/man install
cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
publickey: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: db files
# End /etc/nsswitch.conf
EOF
cp --remove-destination /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
以上调整时区的命令应当根据你的实际情况加以调整。
cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf
/usr/local/lib
/usr/lib
# End /etc/ld.so.conf
EOF
重新调整工具链,从binutils-build目录下执行:
make -C ld INSTALL=/tools/bin/install install
SPECFILE=/tools/lib/gcc-lib/*/*/specs &&
sed -e 's@ /tools/lib64/ld-linux-x86-64.so.2@ /lib64/ld-linux-x86-64.so.2@g' \
$SPECFILE > tempspecfile &&
mv -f tempspecfile $SPECFILE &&
sed -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g' \
$SPECFILE > tempspecfile &&
mv -f tempspecfile $SPECFILE &&
unset SPECFILE
binutils-2.14
expect -c "spawn ls"
mkdir ../binutils-build
cd ../binutils-build
../binutils-2.14/configure \
--prefix=/usr --enable-shared \
--libdir=/usr/lib64
make tooldir=/usr
make check
make tooldir=/usr install
cp ../binutils-2.14/include/libiberty.h /usr/include
gcc-3.3.1
patch -Np1 -i ../gcc-3.3.1-no_fixincludes-2.patch
patch -Np1 -i ../gcc-3.3.1-suppress-libiberty.patch
mkdir ../gcc-build
cd ../gcc-build
../gcc-3.3.1/configure --prefix=/usr \
--libdir=/usr/lib64 \
--enable-shared --enable-threads=posix \
--enable-__cxa_atexit --enable-clocale=gnu \
--disable-multilib
make
make -k check
make install
ln -s ../usr/bin/cpp /lib
ln -s gcc /usr/bin/cc
--disable-multilib 命令防止编译器生成i686支持。除非已经有了i686兼容的Glibc存在,否则编译失败。
coreutils-5.0
patch -Np1 -i ../coreutils-5.0-uname.patch
patch -Np1 -i ../coreutils-5.0-hostname-2.patch
./configure --prefix=/usr --libdir=/usr/lib64
make
make install-root
echo "dummy1:x:1000" >> /etc/group
echo "dummy2:x:1001:dummy" >> /etc/group
echo "dummy:x:1000:1000:::/bin/bash" >> /etc/passwd
make check-root
su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"
sed -i.bak '/dummy/d' /etc/passwd /etc/group
make install
mv /usr/bin/{basename,cat,chgrp,chmod,chown,cp,dd,df} /bin
mv /usr/bin/{dir,dircolors,du,date,echo,false,head} /bin
mv /usr/bin/{install,ln,ls,mkdir,mkfifo,mknod,mv,pwd} /bin
mv /usr/bin/{rm,rmdir,shred,sync,sleep,stty,su,test} /bin
mv /usr/bin/{touch,true,uname,vdir} /bin
mv /usr/bin/chroot /usr/sbin
ln -s test /bin/[
ln -s ../../bin/install /usr/bin
zlib-1.1.4
patch -Np1 -i ../zlib-1.1.4-vsnprintf.patch
./configure --prefix=/usr --libdir=/usr/lib64 --shared
make
make install
make clean
./configure --prefix=/usr
make
make test
make install
mv /usr/lib64/libz.so.* /lib64
ln -sf ../../lib64/libz.so.1 /usr/lib64/libz.so
gzip -9 -c zlib.3 > /usr/share/man/man3/zlib.3.gz
lfs-utils-0.3
make
make install
cp etc/{services,protocols} /etc
findutils-4.1.20
./configure --prefix=/usr --libdir=/usr/lib64 \
--libexecdir=/usr/bin --localstatedir=/var/lib/misc
make
make check
make install
gawk-3.1.3
patch -Np1 -i ../gawk-3.1.3-libexecdir.patch
./configure --prefix=/usr --libexecdir=/usr/bin --libdir=/usr/lib64
make
make check
make install
ncurses-5.3
patch -Np1 -i ../ncurses-5.3-etip-2.patch
patch -Np1 -i ../ncurses-5.3-vsscanf.patch
./configure --prefix=/usr --libdir=/usr/lib64 \
--with-shared --without-debug
make
make install
chmod 755 /usr/lib64/*.5.3
chmod 644 /usr/lib64/libncurses++.a
mv /usr/lib/libncurses.so.5* /lib64
ln -sf ../../lib64/libncurses.so.5 /usr/lib64/libncurses.so
ln -sf libncurses.so /usr/lib64/libcurses.so
vim-6.2
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
echo '#define SYS_GVIMRC_FILE "/etc/gvimrc"' >> src/feature.h
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
ln -s vim /usr/bin/vi
M4-1.4
./configure --prefix=/usr
make
make check
make install
bison-1.75
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
less-381
./configure --prefix=/usr --bindir=/bin --sysconfdir=/etc --libdir=/lib64
make
make install
groff-1.17.2
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
ln -s soelim /usr/bin/zsoelim
ln -s eqn /usr/bin/geqn
ln -s tbl /usr/bin/gtbl
LFS 5.0使用的是groff-1.19,但该版本现在不在GNU服务器上。groff-1.18不能简单地在没有NetPBM的情况下构建,但是NetPBM自身需要一长串的依赖组件。这就是采用groff-1.17.2的原因。
sed-4.0.7
./configure --prefix=/usr --bindir=/bin --libdir=/usr/lib64
make
make check
make install
flex-2.5.4a
./configure --prefix=/usr
make
make bigcheck
make install
mv /usr/lib/libfl.a /usr/lib64
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
gettext-0.12.1
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
net-tools-1.60
patch -Np1 -i ../net-tools-1.60-miitool-gcc33-1.patch
make config
make
make update
inetutils-1.4.2
patch -Np1 -i ../inetutils-1.4.2-amd64.patch
./configure --prefix=/usr --disable-syslogd \
--libexecdir=/usr/sbin --disable-logger \
--sysconfdir=/etc --localstatedir=/var \
--disable-whois --disable-servers \
--libdir=/usr/lib64
make
make install
mv /usr/bin/ping /bin
作者提供了inetutils-1.4.2-amd64.patch这个补丁用来修补在x86_64下编译遇到的一些问题。
http://home.ix.netcom.com/~ejohn ... s-1.4.2-amd64.patch
perl-5.8.0
./Configure
make
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
make test
make install
交互式地运行 ./Configure,并在出现lib的有关选项时用/lib64代替。
texinfo-4.6
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
autoconf-2.57
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
automake-1.7.6
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
ln -s automake-1.7 /usr/share/automake
bash-2.05b
patch -Np1 -i ../bash-2.05b-2.patch
./configure --prefix=/usr --bindir=/bin --libdir=/usr/lib64
make
make tests
make install
exec /bin/bash --login +h
file-4.06
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
libtool-1.5
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
bzip2-1.0.2
make -f Makefile-libbz2_so
make clean
make
make install
cp bzip2-shared /bin/bzip2
cp -a libbz2.so* /lib64
ln -sf ../../lib64/libbz2.so.1.0 /usr/lib64/libbz2.so
rm /usr/bin/{bunzip2,bzcat,bzip2}
mv /usr/bin/{bzip2recover,bzless,bzmore} /bin
ln -s bzip2 /bin/bunzip2
ln -s bzip2 /bin/bzcat
mv /usr/lib/libbz2.a /usr/lib64/
diffutils-2.8.1
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
ed-0.2
patch -Np1 -i ../ed-0.2-mkstemp.patch
./configure --prefix=/usr
make
make check
make install
mv /usr/bin/{ed,red} /bin
kbd-1.08
./configure
make
make install
e2fsprogs-1.3.4
patch -Np1 -i ../e2fsprogs-1.34-pass1b.patch
mkdir ../e2fsprogs-build
cd ../e2fsprogs-build
../e2fsprogs-1.34/configure --prefix=/usr --with-root-prefix="" \
--enable-elf-shlibs
make
make check
make install
make install-libs
会有一些关于整数到指针转换的警告。下面这个补丁是从e2fsprogs-1.35-WIP-1207.tar.gz反向移植过来的,可以修复这个问题。仍会有一些整形常量溢出的错误。
http://home.ix.netcom.com/~ejohn ... s-1.34-pass1b.patch
grep-2.5.1
./configure --prefix=/usr --bindir=/bin \
--libdir=/usr/lib64 --with-included-regex
make
chmod a+x tests/*.sh
make check
make install
这里我们不能在x86_64下构建Grub 0.93。Grub要等到i686兼容性构筑起来之后再来构建。
gzip-1.3.5
./configure --prefix=/usr --libdir=/usr/lib64
cp gzexe.in{,.backup}
sed 's%"BINDIR"%/bin%' gzexe.in.backup > 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
man-1.5m2
patch -Np1 -i ../man-1.5m2-manpath.patch
patch -Np1 -i ../man-1.5m2-pager.patch
patch -Np1 -i ../man-1.5m2-80cols.patch
./configure -default -confdir=/etc
make
make install
make-3.80
./configure --prefix=/usr --libdir=/usr/lib64
make
make check
make install
modutils-2.4.25
./configure
make
make install
patch-2.5.4
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
procinfo-18
make LDLIBS=-lncurses
make install
procps-3.1.11
patch -Np1 -i ../procps-3.1.11-locale-fix.patch
make
make install
rm /lib64/libproc.so
psmisc-21.3
./configure --prefix=/usr --exec-prefix=/
make
make install
ln -s killall /bin/pidof
shadow-4.0.3
touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chmod 644 /var/run/utmp /var/log/{btmp,lastlog,wtmp}
touch /usr/bin/passwd
patch -Np1 -i ../shadow-4.0.3-newgrp-fix.patch
patch -Np1 -i ../shadow-4.0.3-amd64-types.patch
./configure --prefix=/usr --libdir=/usr/lib64 --enable-shared
make
make install
cp etc/{limits,login.access} /etc
sed -e 's%/var/spool/mail%/var/mail%' \
-e 's%#MD5_CRYPT_ENAB.no%MD5_CRYPT_ENAB yes%' \
etc/login.defs.linux > /etc/login.defs
ln -s vipw /usr/sbin/vigr
rm /bin/vipw
mv /bin/sg /usr/bin
mv /usr/lib64/lib{shadow,misc}.so.0* /lib64
ln -sf ../../lib64/libshadow.so.0 /usr/lib64/libshadow.so
ln -sf ../../lib64/libmisc.so.0 /usr/lib64/libmisc.so
/usr/sbin/pwconv
/usr/sbin/grpconv
shadow 需要打两个补丁。shadow-4.0.3-newgrp-fix.patch 是标准的LFS补丁。作者提供的一个用于修补在x86_64下编译的一些问题。同时请注意库文件已经移动到了/lib64和/usr/lib64,检查软连接是否正常。
http://home.ix.netcom.com/~ejohn ... 3-amd64-types.patch
sysklogd-1.4.1
patch -Np1 -i ../sysklogd-1.4.1-syslogd.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/user.log
*.emerg *
# End /etc/syslog.conf
EOF
这个补丁用于修补在x86_64下编译的一些问题。
http://home.ix.netcom.com/~ejohn ... 1.4.1-syslogd.patch
patch -Np1 -i ../sysvinit-2.85-crypt.patch
patch -Np1 -i ../sysvinit-2.85-utmp.patch
patch -Np1 -i ../sysvinit-2.85-init.patch
patch -Np1 -i ../sysvinit-2.85-wall.patch
cp src/init.c{,.backup}
sed 's/Sending processes/Sending processes started by init/g' \
src/init.c.backup > src/init.c
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 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
# End /etc/inittab
EOF
patch -Np1 -i ../sysvinit-2.85-crypt.patch
patch -Np1 -i ../sysvinit-2.85-utmp.patch
patch -Np1 -i ../sysvinit-2.85-init.patch
patch -Np1 -i ../sysvinit-2.85-wall.patch
cp src/init.c{,.backup}
sed 's/Sending processes/Sending processes started by init/g' \
src/init.c.backup > src/init.c
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 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
# End /etc/inittab
EOF
以下几个补丁用于修复x86_64下构建的一些问题。
http://home.ix.netcom.com/~ejohn ... nit-2.85-utmp.patch
http://home.ix.netcom.com/~ejohn ... nit-2.85-init.patch
http://home.ix.netcom.com/~ejohn ... nit-2.85-wall.patch
tar-1.13.25
./configure --prefix=/usr --bindir=/bin \
--libexecdir=/usr/bin --libdir=/usr/lib64
make
make check
make install
util-linux-2.12
cp hwclock/hwclock.c{,.backup}
sed 's%etc/adjtime%var/lib/hwclock/adjtime%' \
hwclock/hwclock.c.backup > hwclock/hwclock.c
mkdir -p /var/lib/hwclock
./configure
make HAVE_SLN=yes
make HAVE_SLN=yes install
lfs-bootscripts
cp -a rc.d sysconfig /etc
chown -R root:root /etc/rc.d /etc/sysconfig
下一步:构筑ia32兼容性
====================================================== |
|