歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Linux From Scratch安裝學習筆記

  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


/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

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

[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

為後面的"鎖定"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 &&

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]

[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

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'

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

Copyright © Linux教程網 All Rights Reserved