18.构建LFS系统──安装系统基础软件(十)
时间:2006-11-17 来源:anima
十八、构建LFS系统──安装系统基础软件(十)
58.关于调试符号
在缺省情况下,大多数程序和库都是带调试符号(使用 gcc 的 -g 选项)编译的。 当调试一个带调试符号的程序时,调试器不仅能给出内存地址,还能给出函数和变量的名字。
但是,这些调试符号明显地增大了程序和库。想知道这些调试符能带来多大的差异,请看下面的统计资料:
-
带调试符号的动态 bash 二进制文件:1200 KB
-
不带调试符号的动态 bash 二进制文件:480 KB
-
带调试符号的 Glibc 和 GCC 文件 (位于 /lib 和 /usr/lib 目录):87 MB
-
不带调试符号的 Glibc 和 GCC文件:16 MB
根据使用的编译器和连接动态程序的 C 库的版本的不同,文件的大小可能会有所不同,但是比较带调试符号与不带调试符号的程序的比较结果应该不会改变,大概是 2~5 倍大小。
由于大多数人都不会在系统软件上使用调试器,把这些符号去掉就能节省大量的空间。下一节将给您展示如何从程序和库文件中去除所有调试符号链接。附加的信息在系统优化信息里可以找到 http://www.linuxfromscratch.org/hints/downloads/files/optimization.txt。
59.再次清理系统
如果编译此系统的用户不是一个程序员并且不打算在系统软件上做任何调试工作,系统大小可以通过从二进制包和库文件中删除调试链接削减大约 90 MB 的空间,这样做的代价是您以后将不能随时调试系统。
大多数人可以毫无困难地凭经验使用命令提示。但是,很容易因为一个打字错误就被报告新系统不能使用,因此在运行 strip 命令前,对系统当前数据做一个备份是一个不错的主意。
在执行清理命令之前,请特别注意确保正在运行的二进制文件不被清理。如果您不确定是否用户是进入在虚根环境(进入Chroot环境)下操作,请首先退出虚根环境:
logout
接着用下面的命令再次进入:
chroot $LFS /tools/bin/env -i \
HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/tools/bin/bash --login
现在二进制文件和库文件能安全地被清理了:
/tools/bin/find /{,usr/}{bin,lib,sbin} -type f \
-exec /tools/bin/strip --strip-debug '{}' ';'
很多文件将被报告说不能识别它们的文件格式,这些警告可以安全地忽略。这些警告只是表明那些文件是脚本而不是二进制文件。
如果硬盘空间非常紧张,这个 --strip-all 选项可以被用在二进制文件目录 /{,usr/}{bin,sbin} 中以获得更多的空间。不要在库文件里使用这个参数,因为这个参数将会破坏库文件。
60.最终的清理
从现在起,在退出后,每当重新进入 Chroot 环境,请使用下面修改过的 chroot 命令:
chroot "$LFS" /usr/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/bin/bash --login
这样做的理由是起初在 /tools 目录下的程序已经不再需要了,这个目录可以删除以重新获得更多硬盘空间。在实际动手删除这个目录之前,请退出虚根环境并且使用上面修改过的命令重新进入虚根环境。还有一点,在删除 /tools 目录前,请将此目录打包压缩并且存储在一个安全的地方,以备以后编译另一个 LFS 系统。
注意
删除 /tools 目录将也会删除临时文件夹中已拷贝的 Tcl, Expect, DejaGNU 等文件,而这些文件是那些正在运行的工具链接测试程序使用的。如果要在以后使用这些程序,它们需要重新编译和重新安装,BLFS 手册介绍了如何重新安装(参见 http://www.linuxfromscratch.org/blfs/)。
如果虚拟内核文件系统被卸载了,或者是重启系统了。确保虚拟内核文件系统在重新进入 chroot 环境时已经挂载了(参见“挂载并填充 /dev 目录”和“挂载虚拟内核文件系统”)。
退出虚根环境:
root:/sources/vim70# logout
[root@fish ~]#
重新进入Chroot环境:
[root@fish ~]# /usr/sbin/chroot "$LFS" /usr/bin/env -i \
> HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
> PATH=/bin:/usr/bin:/sbin:/usr/sbin \
> /bin/bash --login
root:/#
查看目录:
root:/# ls
bin dev home lost+found mnt proc sbin srv tmp usr
boot etc lib media opt root sources sys tools var
root:/# ls tools/
bin etc i686-pc-linux-gnu include info lib libexec man sbin share var
root:/# ls sources/
MD5SUMS
SHA1SUMS
autoconf-2.59
autoconf-2.59.tar.bz2
automake-1.9.6
automake-1.9.6.tar.bz2
bash-3.1
bash-3.1-fixes-8.patch
bash-3.1.tar.gz
bash-doc-3.1.tar.gz
binutils-2.16.1
binutils-2.16.1.tar.bz2
binutils-build
bison-2.2
bison-2.2.tar.bz2
bzip2-1.0.3
bzip2-1.0.3-bzgrep_security-1.patch
bzip2-1.0.3-install_docs-1.patch
bzip2-1.0.3.tar.gz
coreutils-5.96
coreutils-5.96-i18n-1.patch
coreutils-5.96-suppress_uptime_kill_su-1.patch
coreutils-5.96-uname-1.patch
coreutils-5.96.tar.bz2
db-4.4.20
db-4.4.20-fixes-1.patch
db-4.4.20.tar.gz
dejagnu-1.4.4
dejagnu-1.4.4.tar.gz
diffutils-2.8.1
diffutils-2.8.1-i18n-1.patch
diffutils-2.8.1.tar.gz
e2fsprogs-1.39
e2fsprogs-1.39.tar.gz
expect-5.43
expect-5.43.0-spawn-1.patch
expect-5.43.0.tar.gz
file-4.17
file-4.17.tar.gz
findutils-4.2.27
findutils-4.2.27.tar.gz
flex-2.5.33
flex-2.5.33.tar.bz2
gawk-3.1.5
gawk-3.1.5-segfault_fix-1.patch
gawk-3.1.5.tar.bz2
gcc-4.0.3
gcc-4.0.3-specs-1.patch
gcc-4.0.3.tar.bz2
gcc-build
gettext-0.14.5
gettext-0.14.5.tar.gz
glibc-2.3.6
glibc-2.3.6-inotify-1.patch
glibc-2.3.6-linux_types-1.patch
glibc-2.3.6.tar.bz2
glibc-build
glibc-libidn-2.3.6.tar.bz2
grep-2.5.1a
grep-2.5.1a-redhat_fixes-2.patch
grep-2.5.1a.tar.bz2
groff-1.18.1.1
groff-1.18.1.1-debian_fixes-1.patch
groff-1.18.1.1.tar.gz
grub-0.97
grub-0.97-disk_geometry-1.patch
grub-0.97.tar.gz
gzip-1.3.5
gzip-1.3.5-security_fixes-1.patch
gzip-1.3.5.tar.gz
iana-etc-2.10
iana-etc-2.10.tar.bz2
inetutils-1.4.2
inetutils-1.4.2-gcc4_fixes-3.patch
inetutils-1.4.2-no_server_man_pages-1.patch
inetutils-1.4.2.tar.gz
iproute2-2.6.16-060323
iproute2-2.6.16-060323.tar.gz
kbd-1.12
kbd-1.12-backspace-1.patch
kbd-1.12-gcc4_fixes-1.patch
kbd-1.12.tar.bz2
less-394
less-394.tar.gz
lfs-bootscripts-6.2.tar.bz2
libtool-1.5.22
libtool-1.5.22.tar.gz
linux-2.6.16.27-utf8_input-1.patch
linux-2.6.16.27.tar.bz2
linux-libc-headers-2.6.12.0
linux-libc-headers-2.6.12.0-inotify-3.patch
linux-libc-headers-2.6.12.0.tar.bz2
m4-1.4.4
m4-1.4.4.tar.gz
make-3.80
make-3.80.tar.bz2
man-db-2.4.3
man-db-2.4.3.tar.gz
man-pages-2.34
man-pages-2.34.tar.bz2
mktemp-1.5
mktemp-1.5-add_tempfile-3.patch
mktemp-1.5.tar.gz
module-init-tools-3.2.2
module-init-tools-3.2.2-modprobe-1.patch
module-init-tools-3.2.2.tar.bz2
ncurses-5.5
ncurses-5.5-fixes-1.patch
ncurses-5.5.tar.gz
old
old2
patch-2.5.4
patch-2.5.4.tar.gz
perl-5.8.8
perl-5.8.8-libc-2.patch
perl-5.8.8.tar.bz2
procps-3.2.6
procps-3.2.6.tar.gz
psmisc-22.2
psmisc-22.2.tar.gz
readline-5.1
readline-5.1-fixes-3.patch
readline-5.1.tar.gz
sed-4.1.5
sed-4.1.5.tar.gz
shadow-4.0.15
shadow-4.0.15.tar.bz2
sysklogd-1.4.1
sysklogd-1.4.1-8bit-1.patch
sysklogd-1.4.1-fixes-1.patch
sysklogd-1.4.1.tar.gz
sysvinit-2.86
sysvinit-2.86.tar.gz
tar-1.15.1
tar-1.15.1-gcc4_fix_tests-1.patch
tar-1.15.1-security_fixes-1.patch
tar-1.15.1-sparse_fix-1.patch
tar-1.15.1.tar.bz2
tcl8.4.13
tcl8.4.13-src.tar.gz
texinfo-4.8
texinfo-4.8-multibyte-1.patch
texinfo-4.8-tempfile_fix-2.patch
texinfo-4.8.tar.bz2
udev-096
udev-096.tar.bz2
udev-config-6.2.tar.bz2
util-linux-2.12r
util-linux-2.12r-cramfs-1.patch
util-linux-2.12r.tar.bz2
vim-7.0-fixes-7.patch
vim-7.0-lang.tar.gz
vim-7.0-mandir-1.patch
vim-7.0-spellfile-1.patch
vim-7.0.tar.bz2
vim70
zlib-1.2.3
zlib-1.2.3.tar.gz
root:/#
把/tools目录打包压缩:
root:/# tar -jcvf tools-LFS-6.2.tar.bz2 tools/
root:/# ls
bin etc lost+found opt sbin sys tools-LFS-6.2.tar.bz2
boot home media proc sources tmp usr
dev lib mnt root srv tools var
root:/#
然后在宿主系统把该压缩包存储到一个安全的地方,以备以后编译另一个LFS系统。