LFS -- Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴---个性化的linux,不单单是个性的桌面。
优点:了解Linux工作方式;自定义你的系统;建立袖珍型Linux;安全性
我的LFS计划:
本来计划先通过VMWare在虚拟机中做一下试验,结果编译时间太长了,未果。
所以不太甘心,晚上卸载掉Fedura Core 1,重新安装了一个只带GCC等编译必须软件的最小化Fedura系统,
大概才1G多,腾出来空间划分出一个2G的留给LFS。
机器环境介绍:
Athlon XP 1700+ OC 2000+
512MB PC133内存
80GB ATA100 IDE硬盘
已安装系统: Windows XP, Fedura Core 1
Linux myhost 2.4.22-1.2115.nptl #1 Wed Oct 29 15:31:21 EST 2003 i686 athlon i386 GNU/Linux
关于$LFS: 设定LFS分区路径,使用
export LFS=/mnt/lfs
加载。使用范例:
./configure --prefix=$LFS/tools
关于SBUs: Static Binutils Unittime, 静态 Binutils 单位时间
Binutils是LFS中第一个需要编译的软件包,以它编译的时间作为基准单位,可以估算出其它软件包的编译时间
Chapter 3. 准备新分区
3.1 创建一个新分区:(LFS主分区2G + swap分区)
fdisk /dev/hda
n - 增加分区 t - 更改分区类型 p - 显示分区表 w - 写入磁盘
3.2 在新分区上创建文件系统:(ext2)
mke2fs /dev/hda4
[root@myhost root]# mke2fs /dev/hda4
mke2fs 1.34 (25-Jul-2003)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
251392 inodes, 502031 blocks
25101 blocks (5.00%) reserved for the super user
First data block=0
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
建立swap分区(由于我的内存比较大 所以没建立swap分区):
mkswap /dev/hda8
附:当前/dev/hda分区情况
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 637 5116671 7 HPFS/NTFS
/dev/hda2 1160 9729 68838525 f Win95 Ext'd (LBA)
/dev/hda3 638 828 1534207+ 83 Linux
/dev/hda4 829 1078 2008125 83 Linux
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页
/dev/hda5 1160 1912 6048441 b Win95 FAT32
/dev/hda6 2015 4564 20482843+ 7 HPFS/NTFS
/dev/hda7 4565 9729 41487831 7 HPFS/NTFS
3.3 加载新的分区
[root@myhost root]# export LFS=/mnt/lfs
[root@myhost root]# mkdir -p $LFS
[root@myhost root]# mount /dev/hda4 $LFS
mkdir -p, --parents: no error if existing, make parent Directories as needed
建立sources目录
[root@myhost root]# mkdir $LFS/sources
[root@myhost root]# chmod a+wt $LFS/sources
t: sticky
STICKY DIRECTORIES
When the sticky bit is set on a directory, files in that directory may
be unlinked or renamed only by root or their owner. Without the sticky
bit, anyone able to write to the directory can delete or rename files.
The sticky bit is commonly found on directories, sUCh as /tmp, that are
world-writable.
#---- install script begin ----------------------------------------------------
export LFS=/mnt/lfs
mkdir -p $LFS
mount /dev/hda4 $LFS
mkdir $LFS/sources
chmod a+wt $LFS/sources
#---- install script end ------------------------------------------------------
Chapter 4 安装材料: 包和补丁
4.1 所需软件包及补丁:
使用 Linux From Scratch 官方提供的 LFS 5.0:
http://packages.lfs-es.org/lfs-packages-5.0.tar
中国 linuxsir 镜像:
http://lfs.linuxsir.org/htdocs/files/lfs-packages-5.0.tar
内含软件清单如下:
autoconf-2.57.tar.bz2 inetutils-1.4.2.tar.bz2
automake-1.7.6.tar.bz2 kbd-1.08-more-programs.patch
bash-2.05b-2.patch kbd-1.08.tar.bz2
bash-2.05b.tar.bz2 less-381.tar.bz2
binutils-2.14.tar.bz2 lfs-bootscripts-1.12.tar.bz2
bison-1.875-attribute.patch lfs-utils-0.3.tar.bz2
bison-1.875.tar.bz2 liBTool-1.5.tar.bz2
bzip2-1.0.2.tar.bz2 linux-2.4.22.tar.bz2
coreutils-5.0-hostname-2.patch m4-1.4.tar.bz2
coreutils-5.0.tar.bz2 make-3.80.tar.bz2
coreutils-5.0-uname.patch MAKEDEV-1.7.bz2
dejagnu-1.4.3.tar.bz2 man-1.5m2-80cols.patch
diffutils-2.8.1.tar.bz2 man-1.5m2-manpath.patch
e2fsprogs-1.34.tar.bz2 man-1.5m2-pager.patch
ed-0.2-mkstemp.patch man-1.5m2.tar.bz2
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页
ed-0.2.tar.bz2 man-pages-1.60.tar.bz2
expect-5.39.0-spawn.patch modutils-2.4.25.tar.bz2
expect-5.39.0.tar.bz2 ncurses-5.3-etip-2.patch
file-4.04.tar.bz2 ncurses-5.3.tar.bz2
findutils-4.1.20.tar.bz2 ncurses-5.3-vsscanf.patch
flex-2.5.4a.tar.bz2 net-tools-1.60-miitool-gcc33-1.patch
gawk-3.1.3-libexecdir.patch net-tools-1.60.tar.bz2
gawk-3.1.3.tar.bz2 patch-2.5.4.tar.bz2
gcc-2.95.3-2.patch perl-5.8.0-libc-3.patch
gcc-2.95.3-no-fixinc.patch perl-5.8.0.tar.bz2
gcc-2.95.3-returntype-fix.patch procinfo-18.tar.bz2
gcc-2.95.3.tar.bz2 procps-3.1.11-locale-fix.patch
gcc-3.3.1-no_fixincludes-2.patch procps-3.1.11.tar.bz2
gcc-3.3.1-specs-2.patch psmisc-21.3.tar.bz2
gcc-3.3.1-suppress-libiberty.patch sed-4.0.7.tar.bz2
gcc-core-3.3.1.tar.bz2 shadow-4.0.3-newgrp-fix.patch
gcc-g++-3.3.1.tar.bz2 shadow-4.0.3.tar.bz2
gcc-testsuite-3.3.1.tar.bz2 sysklogd-1.4.1.tar.bz2
gettext-0.12.1.tar.bz2 sysvinit-2.85.tar.bz2
glibc-2.3.2-sscanf-1.patch tar-1.13.25.tar.bz2
glibc-2.3.2.tar.bz2 tcl8.4.4-src.tar.bz2
glibc-linuxthreads-2.3.2.tar.bz2 texinfo-4.6.tar.bz2
grep-2.5.1.tar.bz2 util-linux-2.12.tar.bz2
groff-1.19.tar.bz2 vim-6.2.tar.bz2
grub-0.93-gcc33-1.patch zlib-1.1.4.tar.bz2
grub-0.93.tar.bz2 zlib-1.1.4-vsnprintf.patch
gzip-1.3.5.tar.bz2
Chapter 5 创建临时系统
5.1 工具链技术说明
Chapter 5 的目的是提供一个健全的(sane)临时环境,使我们可以通过 chroot 进入,借助它我们可以在 Chapter 6 建立一个干净无误的 LFS 系统。因此我们要尽可能的从主系统分离,建立一个自给自足(self-contained and self-hosted)的工具链(toolchain)。此临时系统安装在 $LFS/tools 下。
关键技术要点:
1. 类似于交叉编译(cross compiling)的原理,把工具装载同一前缀下协同工作,从而发挥一些GNU的“魔力”。
2. 小心处理标准连接库的搜索路径,以保证程序只连接到我们选择的库上。
3. 小心处理GCC的specs文件,来告诉编译器选用正确的动态连接器。
工作平台(work platform / target triplet): i686-pc-linux-gnu
确定方法: 解开 binutils 源码,运行 ./config.guess 并观察结果
动态连接器(动态加载器): /lib/ld-linux.so.2
确定方法: 用下面的命令来检查主系统中的任何一个二进制程序:'readelf -l <name of binary> grep interpreter'并观察结果
[root@myhost root]# readelf -l /bin/dmesg grep interpreter
[Requesting program interpreter: /lib/ld-linux.so.2]
5.2 创建$LFS/tools目录,并创建符号连接/tools
[root@myhost root]# mkdir $LFS/tools
[root@myhost root]# ln -s $LFS/tools /
5.3 增加lfs用户
[root@myhost /]# useradd -s /bin/bash -m lfs
[root@myhost /]# passwd lfs
[root@myhost /]# chown lfs $LFS/tools
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页
[root@myhost /]# chown lfs $LFS/sources
[root@myhost /]# su - lfs
[lfs@myhost lfs]$
"-" 让 su 命令启动一个新的,干净的shell
5.4 环境设置
[lfs@myhost lfs]$ cat >~/.bash_profile << "EOF"
> set +h
> umask 022
> LFS=/mnt/lfs
> LC_ALL=POSIX
> PATH=/tools/bin:$PATH
> export LFS LC_ALL PATH
> unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
> EOF
[lfs@myhost lfs]$ source ~/.bash_profile
说明:
set +h 关掉bash的 "hash"功能。关掉hash功能,那些交互的命令(make,patch, sed,cp 等等)将总是使用新的程序。
将用户文件创建掩码(umask)设为022。 rwx-r-x-r-x
LC_ALL 变量控制某些软件包的本地化,使它们输出的信息遵守指定国家的规范。设置成 "POSIX" (或"C",它们俩是相同的)我们保证在chroot环境中不会出现任何问题。
我们把 /tools/bin 附加到标准路径前面,是为了在安装过程中,总是能用到已经安装了的临时工具。
CC, CXX, CPP, LD_LIBRARY_PATH 和 LD_PRELOAD 环境变量都有可能破坏我们的工具链,因此这里取消它们的设置,以预防可能的问题。
source 命令读了刚才创建的设置文件。
#---- install script begin ----------------------------------------------------
mkdir $LFS/tools
ln -s $LFS/tools /
useradd -s /bin/bash -m lfs
passwd lfs
chown lfs $LFS/tools
chown lfs $LFS/sources
su - lfs
cat > ~/.bash_profile << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:$PATH
export LFS LC_ALL PATH
unset CC CXX CPP LD_LIBRARY_PATH LD_PRELOAD
EOF
source ~/.bash_profile
#---- install script end ------------------------------------------------------
5.5 安装 Binutils-2.14 第一遍
预计所需编译时间: 1.0SBU
预计所需硬盘空间: 194MB
Binutils 是一组开发工具,包括连接器、汇编器和其它用于生成目标文件和档案的工具。
安装下列程序: addr2line, ar, as, c++filt, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings, strip
安装下列库文件: libiberty.a, libbfd.[a, so], libopcodes.[a, so]
测算时间方法:
time { command seq1 && command seq2 && ... && command seqn; }
注意: 在{后面有一个空格, 在最后一条命令序列后面有一个分号,然后和后面的}只见至少要有一个空格
[lfs@myhost tools]$ cp $LFS/sources/binutils-2.14.tar.bz2 /tools/
[lfs@myhost tools]$ bunzip2 binutils-2.14.tar.bz2
[lfs@myhost tools]$ tar xvf binutils-2.14.tar
[lfs@myhost tools]$ rm binutils-2.14.tar
[lfs@myhost tools]$ cd binutils-2.14
[lfs@myhost binutils-2.14]$ mkdir ../binutils-build
[lfs@myhost binutils-2.14]$ cd ../binutils-build
[lfs@myhost binutils-build]$ ../binutils-2.14/configure
> --prefix=/tools --disable-nls
[lfs@myhost binutils-build]$ make configure-host
[lfs@myhost binutils-build]$ make LDFLAGS="-all-static"
make configure-host: 强制所有的子目录都进行配置,无此参数,静态连接就会失败
make LDFLAGS="-all-static": 通过libtool将参数传递给连接器,使 Binutils 软件包中所有程序都静态连接
[lfs@myhost binutils-build]$ make install
[lfs@myhost binutils-build]$ make -C ld clean
[lfs@myhost binutils-build]$ make -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页
为后面的"锁定"glibc准备连接器脚本:
make -C ld clean: 删除所有编译生成文件,但保留子目录ld
make -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib: 重新编译ld子目录中的所有文件
#---- install script begin ----------------------------------------------------
cd /tools
cp $LFS/sources/binutils-2.14.tar.bz2 /tools/
bunzip2 binutils-2.14.tar.bz2
tar xvf binutils-2.14.tar
rm binutils-2.14.tar
cd binutils-2.14
mkdir ../binutils-build
cd ../binutils-build
time { ../binutils-2.14/configure
--prefix=/tools --disable-nls &&
make configure-host &&
make LDFLAGS="-all-static" &&
make install &&
make -C ld clean &&
make -C ld LDFLAGS="-all-static" LIB_PATH=/tools/lib;
}
#---- install script end ------------------------------------------------------
real 2m54.436s
user 2m22.380s
sys 0m22.020s
5.6 安装 GCC-3.3.1 第一遍
预计所需编译时间: 4.4SBU
预计所需硬盘空间: 300MB
GCC软件包包含GNU C/C++编译器
安装下列程序: c++, cc(link to gcc), cc1, cc1plus, collect2, cpp, g++, gcc, gccbug, gcov
安装下列库文件: libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so] 和 libsupc++.a
[lfs@myhost tools]$ cp $LFS/sources/gcc-core-3.3.1.tar.bz2 /tools
[lfs@myhost tools]$ bunzip2 gcc-core-3.3.1.tar.bz2
[lfs@myhost tools]$ tar xvf gcc-core-3.3.1.tar
[lfs@myhost tools]$ rm gcc-core-3.3.1.tar
[lfs@myhost tools]$ cd gcc-3.3.1
[lfs@myhost gcc-3.3.1]$ mkdir ../gcc-build
[lfs@myhost gcc-3.3.1]$ cd ../gcc-build
[lfs@myhost gcc-build]$ ../gcc-3.3.1/configure --prefix=/tools
> --with-local-prefix=/tools
> --disable-nls --enable-shared
> --enable-languages=c
configure --enable-shared: 这个参数咋一看有点自相矛盾。但只有加上它,才能编译出 libgcc_s.so.1 和 libgcc_eh.a, Glibc(下一个软件包)的配置脚本只有在能找到 libgcc_eh.a 时才能确保产生正确的结果。请注意,gcc的可执行程序仍然会被静态连接,因为这是由后面 BOOT_LDFLAGS 中的 -static来控制的。
[lfs@myhost gcc-build]$ make BOOT_LDFLAGS="-static" bootstrap
make bootstrap: bootstrap目标不仅仅是编译 GCC,而是重复编译它几次。它用第一次编译生成的程序来第二次编译自己,然后又用第二次编译生成的程序来第三次编译自己,最后比较第二次和第三次编译的结果,以确保编译器能毫无差错的编译自身,这通常表明编译是正确的。
[lfs@myhost gcc-build]$ make install
[lfs@myhost gcc-build]$ ln -sf gcc /tools/bin/cc
[lfs@myhost gcc-build]$ cd ..
[lfs@myhost tools]$ rm -rf gcc-3.3.1
[lfs@myhost tools]$ rm -rf gcc-build
#---- install script begin ----------------------------------------------------
cd /tools
cp $LFS/sources/gcc-core-3.3.1.tar.bz2 /tools
bunzip2 gcc-core-3.3.1.tar.bz2
tar xvf gcc-core-3.3.1.tar
rm gcc-core-3.3.1.tar
cd gcc-3.3.1
mkdir ../gcc-build
cd ../gcc-build
time { ../gcc-3.3.1/configure --prefix=/tools
--with-local-prefix=/tools
--disable-nls --enable-shared
--enable-languages=c &&
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页
make BOOT_LDFLAGS="-static" bootstrap &&
make install &&
ln -sf gcc /tools/bin/cc;
}
cd ..
rm -rf gcc-3.3.1
rm -rf gcc-build
#---- install script end ------------------------------------------------------
real 12m6.969s
user 11m21.500s
sys 0m39.570s
5.7 安装 Linux-2.4.22 头文件
预计所需编译时间: 0.1SBU
预计所需硬盘空间: 186MB
[lfs@myhost tools]$ cp $LFS/sources/linux-2.4.22.tar.bz2 /tools
[lfs@myhost tools]$ bunzip2 linux-2.4.22.tar.bz2
[lfs@myhost tools]$ tar xvf linux-2.4.22.tar
[lfs@myhost tools]$ rm linux-2.4.22.tar
[lfs@myhost tools]$ cd linux-2.4.22
[lfs@myhost linux-2.4.22]$ make mrproper
[lfs@myhost linux-2.4.22]$ make include/linux/version.h
创建平台相关的 include/asm 符号链接:
[lfs@myhost linux-2.4.22]$ make symlinks
安装平台相关的内核头文件:
[lfs@myhost linux-2.4.22]$ mkdir /tools/include/asm
[lfs@myhost linux-2.4.22]$ cp include/asm/* /tools/include/asm
[lfs@myhost linux-2.4.22]$ cp -R include/asm-generic /tools/include
安装跨平台的内核头文件:
[lfs@myhost linux-2.4.22]$ cp -R include/linux /tools/include
还有几个内核头文件要使用 autoconf.h 头文件。因为我们没有配置内核,所以就需要自己创建这个文件,以避免编译错误。创建一个空的 autoconf.h 文件。
[lfs@myhost linux-2.4.22]$ touch /tools/include/linux/autoconf.h
[lfs@myhost linux-2.4.22]$ cd ..
[lfs@myhost tools]$ rm -rf linux-2.4.22
#---- install script begin ----------------------------------------------------
cd /tools
cp $LFS/sources/linux-2.4.22.tar.bz2 /tools
bunzip2 linux-2.4.22.tar.bz2
tar xvf linux-2.4.22.tar
rm linux-2.4.22.tar
cd linux-2.4.22
time { make mrproper &&
make include/linux/version.h &&
make symlinks &&
mkdir /tools/include/asm &&
cp include/asm/* /tools/include/asm &&
cp -R include/asm-generic /tools/include &&
cp -R include/linux /tools/include &&
touch /tools/include/linux/autoconf.h;
}
cd ..
rm -rf linux-2.4.22
#---- install script end -------------------------------------------------------
real 0m1.932s
user 0m0.180s
sys 0m0.140s
5.8 安装 Glibc-2.3.2
预计所需编译时间: 11.8SBU
预计所需硬盘空间: 800MB
Glibc 是提供系统调用和基本函数的 C 库,比如open, malloc, printf等等。所有动态连接的程序都要用到它。
安装下列程序: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump 和 zic
安装下列库文件: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so 和 libutil.[a,so]
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页
[lfs@myhost tools]$ cp $LFS/sources/glibc-2.3.2.tar.bz2 /tools
[lfs@myhost tools]$ bunzip2 glibc-2.3.2.tar.bz2
[lfs@myhost tools]$ tar xvf glibc-2.3.2.tar
[lfs@myhost tools]$ rm glibc-2.3.2.tar
[lfs@myhost tools]$ cd glibc-2.3.2
[lfs@myhost glibc-2.3.2]$ cp $LFS/sources/glibc-linuxthreads-2.3.2.tar.bz2 .
[lfs@myhost glibc-2.3.2]$ tar xvf glibc-linuxthreads-2.3.2.tar
[lfs@myhost glibc-2.3.2]$ rm glibc-linuxthreads-2.3.2.tar
[lfs@myhost glibc-2.3.2]$ mkdir /tools/etc
[lfs@myhost glibc-2.3.2]$ touch /tools/etc/ld.so.conf
修正缺少/tools/etc/ld.so.conf文件的警告
[lfs@myhost glibc-2.3.2]$ cp $LFS/sources/glibc-2.3.2-sscanf-1.patch .
[lfs@myhost glibc-2.3.2]$ patch -Np1 -i glibc-2.3.2-sscanf-1.patch
用GCC 3.3.1来编译Glibc时需要修正
[lfs@myhost glibc-2.3.2]$ mkdir ../glibc-build
[lfs@myhost glibc-2.3.2]$ cd ../glibc-build
[lfs@myhost glibc-build]$ ../glibc-2.3.2/configure --prefix=/tools
> --disable-profile --enable-add-ons
> --with-headers=/tools/include
> --with-binutils=/tools/bin
> --without-gd
参数说明:
--disable-profile: 它关掉了 profiling 信息相关的库文件编译
--enable-add-ons: 这个开关打开所有 Glibc的附加包,我们这里是 linuxthreads。
--with-binutils=/tools/bin 和 --with-headers=/tools/include: 这些参数并不是必需的。但它们能保证在编译 Glibc 时不会用错内核头文件和 Binutils 程序。
--without-gd: 这个参数保证我们不编译 memusagestat 程序,该程序会顽固地连接到主系统的库文件(libgd, libpng, libz 等等).
[lfs@myhost glibc-build]$ make
[lfs@myhost glibc-build]$ make check
Glibc的测试套件
[lfs@myhost glibc-build]$ make install
[lfs@myhost glibc-build]$ make localedata/install-locales
完整安装locale,或者也可以用下面的方法来最小化安装
[lfs@myhost glibc-build]$ mkdir -p /tools/lib/locale
[lfs@myhost glibc-build]$ localedef -i de_DE -f ISO-8859-1 de_DE
[lfs@myhost glibc-build]$ localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
[lfs@myhost glibc-build]$ localedef -i en_HK -f ISO-8859-1 en_HK
[lfs@myhost glibc-build]$ localedef -i en_PH -f ISO-8859-1 en_PH
[lfs@myhost glibc-build]$ localedef -i en_US -f ISO-8859-1 en_US
[lfs@myhost glibc-build]$ localedef -i es_MX -f ISO-8859-1 es_MX
[lfs@myhost glibc-build]$ localedef -i fr_FR -f ISO-8859-1 fr_FR
[lfs@myhost glibc-build]$ localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
[lfs@myhost glibc-build]$ localedef -i it_IT -f ISO-8859-1 it_IT
[lfs@myhost glibc-build]$ localedef -i ja_JP -f EUC-JP ja_JP
[lfs@myhost glibc-build]$ cd ..
[lfs@myhost tools]$ rm -rf glibc-2.3.2
[lfs@myhost tools]$ rm -rf glibc-build
#---- install script begin ----------------------------------------------------
cd /tools
cp $LFS/sources/glibc-2.3.2.tar.bz2 /tools
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页
tar jxvf glibc-2.3.2.tar.bz2
rm glibc-2.3.2.tar.bz2
cd glibc-2.3.2
cp $LFS/sources/glibc-linuxthreads-2.3.2.tar.bz2 .
tar jxvf glibc-linuxthreads-2.3.2.tar.bz2
rm glibc-linuxthreads-2.3.2.tar.bz2
mkdir /tools/etc
touch /tools/etc/ld.so.conf
cp $LFS/sources/glibc-2.3.2-sscanf-1.patch .
patch -Np1 -i glibc-2.3.2-sscanf-1.patch
mkdir ../glibc-build
cd ../glibc-build
../glibc-2.3.2/configure --prefix=/tools
--disable-profile --enable-add-ons
--with-headers=/tools/include
--with-binutils=/tools/bin
--without-gd
time { make; }
make check
make install
make localedata/install-locales
cd ..
rm -rf glibc-2.3.2
rm -rf glibc-build
#---- install script end -------------------------------------------------------
real 18m11.625s
user 15m30.590s
sys 2m2.520s
##############################################
直接解压 .tar.bz2 的两种方法
tar jxvf filename.tar.bz2
bzcat filename.tar.bz2 tar -xv
##############################################
5.9 "Locking in" Glibc
[lfs@myhost tools]$ cd /tools/binutils-build
[lfs@myhost binutils-build]$ make -C ld install
安装调整过的连接器
[lfs@myhost tools]$ rm -rf binutils-2.14
[lfs@myhost tools]$ rm -rf binutils-build
[lfs@myhost tools]$ SPECFILE=/tools/lib/gcc-lib/*/*/specs &&
> sed -e 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g'
> $SPECFILE > tempspecfile
[lfs@myhost tools]$ mv tempspecfile $SPECFILE &&
> unset SPECFILE
修改 /tools/lib/gcc-lib/i686-pc-linux-gnu/3.3.1/specs,
将"/lib/ld-linux.so.2" 替换成 "/tools/lib/ld-linux.so.2"
[lfs@myhost tools]$ rm -f /tools/lib/gcc-lib/*/*/include/{pthread.h,bits/sigthread.h}
删除掉由于GCC的 fixincludes 脚本将主系统中的头文件copy到gcc的头文件中所产生的错误文件
[lfs@myhost tools]$ echo 'main(){}' > dummy.c
[lfs@myhost tools]$ gcc dummy.c
[lfs@myhost tools]$ readelf -l a.out grep ': /tools'
测试新工具链编译的连接是否正常,如果一切OK,结果如下:
[Requesting program interpreter: /tools/lib/ld-linux.so.2]
[lfs@myhost tools]$ rm a.out dummy.c
至此完成了工具链的安装,可以用它来编译剩下的工具了。
#---- install script begin ----------------------------------------------------
cd /tools/binutils-build
make -C ld install
rm -rf binutils-2.14
rm -rf binutils-build
SPECFILE=/tools/lib/gcc-lib/*/*/specs &&
sed -e 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g'
$SPECFILE > tempspecfile
mv tempspecfile $SPECFILE &&
unset SPECFILE
rm -f /tools/lib/gcc-lib/*/*/include/{pthread.h,bits/sigthread.h}
echo 'main(){}' > dummy.c
gcc dummy.c
readelf -l a.out grep ': /tools'
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页
rm a.out dummy.c
#---- install script end ------------------------------------------------------
5.10 安装 Tcl-8.4.4
预计所需编译空间: 0.9SBU
预计所需硬盘空间: 23MB
TCL: Tool Command Language
安装下列程序: tclsh (link to tclsh8.4)
安装下列库文件: libtl8.4.so
[lfs@myhost tools]$ cp $LFS/sources/tcl8.4.4-src.tar.bz2 .
[lfs@myhost tools]$ tar jxvf tcl8.4.4-src.tar.bz2
[lfs@myhost tools]$ rm tcl8.4.4-src.tar.bz2
[lfs@myhost tools]$ cd tcl8.4.4/unix
[lfs@myhost unix]$ ./configure --prefix=/tools
[lfs@myhost unix]$ make
[lfs@myhost unix]$ TZ=UTC make test
将时区设置为 Coordinated Universal Time (UTC), 又叫GMT,同时进行测试。
根据官方文档,本测试套件总会出错,原因不明。可是我测试通过了。
Tests ended at Sat Nov 22 16:46:51 UTC 2003
all.tcl: Total 10503 Passed 9671 Skipped 832 Failed 0
[lfs@myhost unix]$ make install
[lfs@myhost unix]$ ln -s tclsh8.4 /tools/bin/tclsh
#---- install script begin ----------------------------------------------------
cd /tools
cp $LFS/sources/tcl8.4.4-src.tar.bz2 .
tar jxvf tcl8.4.4-src.tar.bz2
rm tcl8.4.4-src.tar.bz2
cd tcl8.4.4/unix
./configure --prefix=/tools
make
TZ=UTC make test
make install
ln -s tclsh8.4 /tools/bin/tclsh
#---- install script end ------------------------------------------------------
5.11 安装 Expect-5.39.0
预计所需编译时间: 0.1SBU
预计所需编译空间: 3.9MB
Expect 软件包包换一个程序,可以与其他程序交互,以编程方式生成对话框。
安装下列程序: expect
安装下列库文件: libexpect5.39.a
[lfs@myhost tools]$ cd /tools
[lfs@myhost tools]$ cp $LFS/sources/expect-5.39.0* .
[lfs@myhost tools]$ tar jxvf expect-5.39.0.tar.bz2
[lfs@myhost tools]$ rm expect-5.39.0.tar.bz2
[lfs@myhost tools]$ cd expect-5.39
[lfs@myhost expect-5.39]$ patch -Np1 -i ../expect-5.39.0-spawn.patch
修正了Expect中的一个bug,这个bug会使GCC的测试套件运行时产生假错误。
[lfs@myhost expect-5.39]$ ./configure
> --prefix=/tools
> --with-tcl=/tools/lib
> --with-x=no
[lfs@myhost expect-5.39]$ make
(测试套件 make test 我没进行)
[lfs@myhost expect-5.39]$ make SCRIPTS="" install
SCRIPTS="": 禁止安装我们不需要的 expect脚本
[lfs@myhost tools]$ rm expect-5.39.0-spawn.patch
[lfs@myhost tools]$ rm -rf expect-5.39
[lfs@myhost tools]$ rm -rf tcl8.4.4
#---- install script begin ----------------------------------------------------
cd /tools
cp $LFS/sources/expect-5.39.0* .
tar jxvf expect-5.39.0.tar.bz2
rm expect-5.39.0.tar.bz2
cd expect-5.39
patch -Np1 -i ../expect-5.39.0-spawn.patch
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] 下一页