================ LFS ?? ================
英文: Linux_From_Scratch
WIKI上的說明中文: Linux_From_Scratch
================ 學習環境 ================
Host OS win 7
vmware 8.0.0 build-471780
CentOS-6.2-x86_64-bin
LFS 7.0
================ 文件 ================
最新英文版: LFS-BOOK-7.0.pdf
線上簡體中文版: LFS-BOOK-6.6
目前中英文版有版本上的差異所以建議英文版為主
================ 先前準備 ================
在時做之前請先執行此script看看自己的linux Host缺少了什麼套件
[root@localhost /]# cat > version-check.sh << "EOF"
> #!/bin/bash
> export LC_ALL=C
> # Simple script to list version numbers of critical development tools
> bash --version | head -n1 | cut -d" " -f2-4
> echo "/bin/sh -> `readlink -f /bin/sh`"
> echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
> bison --version | head -n1
> if [ -e /usr/bin/yacc ];
> then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
> else echo "yacc not found"; fi
> bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
> echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
> diff --version | head -n1
> find --version | head -n1
> gawk --version | head -n1
> if [ -e /usr/bin/awk ];
> then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
> else echo "awk not found"; fi
> gcc --version | head -n1
> /lib/libc.so.6 | head -n1 | cut -d"," -f1
> grep --version | head -n1
> gzip --version | head -n1
> cat /proc/version
> m4 --version | head -n1
> make --version | head -n1
> patch --version | head -n1
> echo perl `perl -V:version`
> sed --version | head -n1
> tar --version | head -n1
> echo "Texinfo: `makeinfo --version | head -n1`"
> xz --version | head -n1
> echo 'main(){}' > dummy.c && gcc -o dummy dummy.c
> if [ -x dummy ]; then echo "Compilation OK";
> else echo "Compilation failed"; fi
> rm -f dummy.c dummy
> EOF
bash version-check.sh
在CentOs 64bit中缺少了
1. yacc
[root@localhost /]# yum install byacc
2. glibc-2.5.1
[root@localhost /]# yum install glibc*
3. perl
[root@localhost /]# yum install perl*
4. texinfo
[root@localhost /]# yum install texinfo
5. bison
[root@localhost /]# yum install bison
6. Xz
[root@localhost /]# yum install xz
================ 軟體下載 ================
下載lfs需要的軟體
下載的方式有很多種我是選擇下載全部軟體的壓縮檔
下載點: lfs-packages-7.0.tar
or
LfsLvieCD中已經把全部的source放在/lfs-sources資料夾中
================ 建立環境 ================
Chapter 2. Preparing a New Partition
2.2. Creating a New Partition
新增一個空的磁區
新增一個10G空間的磁區給系統
[root@localhost /]# fdisk -l #看一下新增的10G系統是否有找到
2.3. Creating a File System on the Partition
建立一個 ext3 檔案系統
[root@localhost /]# mke2fs -jv /dev/<xxx> #xxx代表新增的磁區目前是sdb
.......
Proceed anyway? (y,n) y #打y就會開始建立
2.4. Mounting the New Partition
宣告LFS的環境變數
[root@localhost /]# export LFS=/mnt/lfs
創建一個資料夾並把新分割的磁區掛載在他底下
[root@localhost /]# mkdir -pv $LFS #在mnt下建立lfs資料夾
[root@localhost /]# mount -v -t ext3 /dev/sdb $LFS #/dev/sdb mount到mnt/lfs格式為ext3
Chapter 3. Packages and Patches
建立一個資料夾放置下載的軟體
[root@localhost /]# mkdir -v $LFS/sources
下載軟體拷貝到指定資料夾
[root@localhost /]# cp /home/lfs-packages-7.0.tar $LFS/sources
解壓縮
[root@localhost /]# tar -jxvf $LFS/sources/lfs-packages-7.0.tar
移動軟體到資料夾外層
[root@localhost /]# mv $LFS/sources/7.0/* $LFS/sources/
改變資料夾的屬性
[root@localhost /]# chmod -v a+wt $LFS/sources
Chapter 4. Final Preparations
檢查一下宣告的環境變數是否成功,有印出/mnt/lfs代表成功
[root@localhost /]# echo $LFS
/mnt/lfs
如果不正確,在宣告一次
[root@localhost /]# export LFS=/mnt/lfs
4.2. Creating the $LFS/tools Directory
創建一個資料夾並建立連結
[root@localhost /]# mkdir -v $LFS/tools
[root@localhost /]# ln -sv $LFS/tools /
/tools -> /mnt/lfs/tools
[root@localhost /]# ll #查看連接是否建立成功
4.3. Adding the LFS User
為了避免影響系統運作,我們新增一個USER
[root@localhost /]# groupadd lfs
[root@localhost /]# useradd -s /bin/bash -g lfs -m -k /dev/null lfs
為新增user lfs設定密碼
[root@localhost /]# passwd lfs
請輸入新密碼....
修改新增資料夾tools and sources的擁有者為lfs
[root@localhost /]# chown -v lfs $LFS/tools
[root@localhost /]# chown -v lfs $LFS/sources
切換使用者
[root@localhost /]# su - lfs
-bash-4.1$
4.4. Setting Up the Environment
在bash shell新增兩個啟動檔案,當重開機login為user lfs時會讀取此檔 .bash_profile
用cat建立.bash_profile用意在讓它為static重開機後就消失
-bash-4.1$ cat > ~/.bash_profile << "EOF"
> exec env -i HOME=$HOME TERM=$TERM PS1='\u: \w\$ ' /bin/bash
> EOF
當a non-login shell, 並不會讀取/etc/profile or .bash_profile, 但是會去讀取 .bashrc
-bash-4.1$ cat > ~/.bashrc << "EOF"
> set +h
> umask 022
> LFS=/mnt/lfs
> LC_ALL=POSIX
> LFS_TGT=$(uname -m)-lfs-linux-gnu
> PATH=/tools/bin:/bin:/usr/bin
> export LFS LC_ALL LFS_TGT PATH
> EOF
執行script切換使用者到lfs
-bash-4.1$ source ~/.bash_profile
lfs: ~$
Chapter 5. Constructing a Temporary System
5.2. Toolchain Technical Notes
在繼續之前要先知道工作平台名稱即"target triplet" or動態連接器[dynamic linker]的名稱
有兩種方式可得知
run script /mnt/lfs/sources/binutils-2.21.1/config.guess
lfs [ ~ ]# ./mnt/lfs/sources/binutils-2.21.1/config.guess
x86_64-unknown-linux-gnu
or
隨便找一個兩進制的bin file執行它
lfs [ ~ ]# readelf -l /bin/raw | grep interpreter
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
怎麼會出現兩種結果不同,目前還不清楚,推測是執行bin file是在HOST下所以結果不同
5.3. Binutils-2.17 - Pass 1
The Binutils package contains a linker, an assembler, and other tools for handling object files.
5.4.1. Installation of Cross Binutils
解壓縮 and 建立新資料夾
lfs: ~$ cd /mnt/lfs/sources
lfs: /mnt/lfs/sources$ tar xvf binutils-2.21.1a.tar.bz2
lfs: /mnt/lfs/sources$ cd binutils-2.21.1
lfs: /mnt/lfs/sources/binutils-2.21.1$ mkdir -v ../binutils-build #會在/mnt/lfs/sources建立一個binutils-build資料夾
lfs: /mnt/lfs/sources/binutils-2.21.1$ cd ..binutils-build
產生binutils-2.21.1的makefile
lfs: /mnt/lfs/sources/binutils-build$ ../binutils-2.21.1/configure \
> --target=$LFS_TGT --prefix=/tools \
> --disable-nls --disable-werror
.........
config.status: creating Makefile
lfs: /mnt/lfs/sources/binutils-build$
開始組譯
lfs: /mnt/lfs/sources/binutils-build$ make
如果是x86_64的系統建立連結到toolchain
lfs: /mnt/lfs/sources/binutils-build$ case $(uname -m) in
> x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
> esac
make沒錯誤開始安裝套件
lfs: /mnt/lfs/sources/binutils-build$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/binutils-build$ cd ..
lfs: /mnt/lfs/sources$ rm -fr binutils-build
5.5. GCC-4.6.1 - Pass 1
The GCC package contains the GNU compiler collection, which includes the C and C++ compilers
5.5.1. Installation of Cross GCC
解壓縮and建立新資料夾
lfs: ~$ cd /mnt/lfs/sources
lfs: /mnt/lfs/sources$ tar xvf gcc-4.6.1.tar.bz2
lfs: /mnt/lfs/sources$ cd gcc-4.6.1
lfs: /mnt/lfs/sources/gcc-4.6.1$ tar -jxf ../mpfr-3.1.0.tar.bz2 #解壓到/mnt/lfs/sources/gcc-4.6.1/
lfs: /mnt/lfs/sources/gcc-4.6.1$ mv -v mpfr-3.1.0 mpfr
lfs: /mnt/lfs/sources/gcc-4.6.1$ tar -jxf ../gmp-5.0.2.tar.bz2
lfs: /mnt/lfs/sources/gcc-4.6.1$ mv -v gmp-5.0.2 gmp
lfs: /mnt/lfs/sources/gcc-4.6.1$ tar -zxf ../mpc-0.9.tar.gz
lfs: /mnt/lfs/sources/gcc-4.6.1$ mv -v mpc-0.9 mpc
lfs: /mnt/lfs/sources/gcc-4.6.1$ patch -Np1 -i ../gcc-4.6.1-cross_compile-1.patch
lfs: /mnt/lfs/sources/gcc-4.6.1$ mkdir ../gcc-build #會在/mnt/lfs/sources建立一個gcc-build資料夾
lfs: /mnt/lfs/sources/gcc-4.6.1$ cd ../gcc-build
準備編譯產生makefile
lfs: /mnt/lfs/sources/gcc-build$ ../gcc-4.6.1/configure \
> --target=$LFS_TGT --prefix=/tools \
> --disable-nls --disable-shared --disable-multilib \
> --disable-decimal-float --disable-threads \
> --disable-libmudflap --disable-libssp \
> --disable-libgomp --disable-libquadmath \
> --disable-target-libiberty --disable-target-zlib \
> --enable-languages=c --without-ppl --without-cloog \
> --with-mpfr-include=$(pwd)/../gcc-4.6.1/mpfr/src \
> --with-mpfr-lib=$(pwd)/mpfr/src/.libs
..............
config.status: creating Makefile
lfs: /mnt/lfs/sources/gcc-build$
開始組譯gcc
lfs: /mnt/lfs/sources/gcc-build$ make
安裝GCC
lfs: /mnt/lfs/sources/gcc-build$ make install
建立連結
lfs: /mnt/lfs/sources/gcc-build$ ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
> sed 's/libgcc/&_eh/'`
安裝套件完成後移除
lfs: /mnt/lfs/sources/gcc-build$ cd ..
lfs: /mnt/lfs/sources$ rm -rf gcc-build gcc-4.6.1
5.6. Linux-3.1 API Headers
解壓縮
lfs: /mnt/lfs/sources$ tar xvf linux-3.1.tar.bz2
lfs: /mnt/lfs/sources$ cd linux-3.1
5.6.1. Installation of Linux API Headers
make mrproper 會移除先前重製核心時不必要的殘餘檔案, 這樣可以避免這些檔案對原始碼目錄樹產生不必要的干擾. 執行 make mrproper 時, 會砍除設定配置檔 .config, 如果您認為它很重要的話, 應該予以備份.
lfs: /mnt/lfs/sources/linux-3.1$ make mrproper
lfs: /mnt/lfs/sources/linux-3.1$ make headers_check
lfs: /mnt/lfs/sources/linux-3.1$ make INSTALL_HDR_PATH=dest headers_install
lfs: /mnt/lfs/sources/linux-3.1$ cp -rv dest/include/* /tools/include
Kernel 重製
安裝套件完成後移除
lfs: /mnt/lfs/sources/linux-3.1$ cd ..
lfs: /mnt/lfs/sources$ rm -fr linux-3.1
5.7. Glibc-2.14.1
The Glibc package contains the main C library. This library provides the basic routines for allocating memory,searching directories, opening and closing files, reading and writing files, string handling, pattern matching,arithmetic, and so on.
解壓縮 and 更新patch nad 建立新資料
lfs: /mnt/lfs/sources$ tar xvf glibc-2.14.1.tar.bz2
lfs: /mnt/lfs/sources$ cd glibc-2.14.1
lfs: /mnt/lfs/sources/glibc-2.14.1$ patch -Np1 -i ../glibc-2.14.1-gcc_fix-1.patch
lfs: /mnt/lfs/sources/glibc-2.14.1$ patch -Np1 -i ../glibc-2.14.1-cpuid-1.patch
lfs: /mnt/lfs/sources/glibc-2.14.1$ mkdir ../glibc-build #會在/mnt/lfs/sources建立一個glibc-build資料夾
lfs: /mnt/lfs/sources/glibc-2.14.1$ cd ../glibc-build
lfs: /mnt/lfs/sources/glibc-build$ case `uname -m` in
> i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;;
> esac
產生makefile
lfs: /mnt/lfs/sources/glibc-build$ ../glibc-2.14.1/configure --prefix=/tools \
> --host=$LFS_TGT --build=$(../glibc-2.14.1/scripts/config.guess) \
> --disable-profile --enable-add-ons \
> --enable-kernel=2.6.25 --with-headers=/tools/include \
..............
configure: creating ./config.status
config.status: creating config.make
config.status: creating Makefile
config.status: creating config.h
config.status: executing default commands
開始組譯
lfs: /mnt/lfs/sources/glibc-build$ make
安裝Glibc
lfs: /mnt/lfs/sources/glibc-build$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/glibc-build$ cd ..
lfs: /mnt/lfs/sources$ rm -fr glibc-2.14.1 glibc-build
5.8. Adjusting the Toolchain
調整工具連結點
lfs: /mnt/lfs/sources$ SPECS=`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/specs
lfs: /mnt/lfs/sources$ $LFS_TGT-gcc -dumpspecs | sed \
> -e 's@/lib\(64\)\?/ld@/tools&@g' \
> -e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" > $SPECS
lfs: /mnt/lfs/sources$ echo "New specs file is: $SPECS"
lfs: /mnt/lfs/sources$ unset SPECS
測試組裝是否成功
lfs: /mnt/lfs/sources$ echo 'main(){}' > dummy.c
lfs: /mnt/lfs/sources$ $LFS_TGT-gcc -B/tools/lib dummy.c
lfs: /mnt/lfs/sources$ readelf -l a.out | grep ': /tools'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
移除測試程式跟obj檔
lfs: /mnt/lfs/sources/glibc-build$ rm -v dummy.c a.out
removed `dummy.c`
removed `a.out`
5.9. Binutils-2.21.1a - Pass 2
The Binutils package contains a linker, an assembler, and other tools for handling object files
5.9.1. Installation of Binutils
binutils-build資料夾重建一次
lfs: /mnt/lfs/sources$ mkdir -v ../binutils-build
lfs: /mnt/lfs/sources$ cd ../binutils-build
準備重新編譯binutils.產生makefile
lfs: /mnt/lfs/sources/binutils-build$ CC="$LFS_TGT-gcc -B/tools/lib/" \
> AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
> ../binutils-2.21.1/configure --prefix=/tools \
> --disable-nls --with-lib-path=/tools/lib
開始組譯
lfs: /mnt/lfs/sources/binutils-build$ make
安裝
lfs:/mnt/lfs/sources/binutils-build$ make install
準備好重新調整聯結器
lfs: /mnt/lfs/sources/binutils-build$ make -C ld clean
lfs: /mnt/lfs/sources/binutils-build$ make -C ld LIB_PATH=/usr/lib:/lib
lfs: /mnt/lfs/sources/binutils-build$ cp -v ld/ld-new /tools/bin
5.10. GCC-4.6.1 - Pass 2
The GCC package contains the GNU compiler collection, which includes the C and C++ compilers
5.10.1. Installation of GCC
解壓縮
lfs: /mnt/lfs/sources$ tar xvf gcc-4.6.1.tar.bz2
lfs: /mnt/lfs/sources$ cd gcc-4.6.1
執行補丁
lfs: /mnt/lfs/sources/gcc-4.6.1$ patch -Np1 -i ../gcc-4.6.1-startfiles_fix-1.patch
由於使用此補丁會影響linux Host所以需要執行下面command修正此問題
lfs: /mnt/lfs/sources/gcc-4.6.1$ cp -v gcc/Makefile.in{,.orig}
lfs: /mnt/lfs/sources/gcc-4.6.1$ sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in
lfs: /mnt/lfs/sources/gcc-4.6.1$ cp -v gcc/Makefile.in{,.tmp}
lfs: /mnt/lfs/sources/gcc-4.6.1$ sed 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
> > gcc/Makefile.in
下面的命令將改變GCC的默認動態鏈接器的位置
lfs: /mnt/lfs/sources/gcc-4.6.1$ for file in \
> $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
> do
> cp -uv $file{,.orig}
> sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
> -e 's@/usr@/tools@g' $file.orig > $file
> echo '
> #undef STANDARD_INCLUDE_DIR
> #define STANDARD_INCLUDE_DIR 0
> #define STANDARD_STARTFILE_PREFIX_1 ""
> #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
> touch $file.orig
> done
gcc/config/m68k/linux.h' -> `gcc/config/m68k/linux.h.orig'
在x86_64平台,不為GCC設置multilib spec文件,確保它不會連結到HOST系統的資料庫
lfs: /mnt/lfs/sources/gcc-4.6.1$ case $(uname -m) in
> x86_64)
> for file in $(find gcc/config -name t-linux64) ; do \
> cp -v $file{,.orig}
> sed '/MULTILIB_OSDIRNAMES/d' $file.orig > $file
> done
> ;;
> esac
...........
gcc/config/pa/t-linux64' -> `gcc/config/pa/t-linux64.orig'
lfs: /mnt/lfs/sources/gcc-4.6.1$ tar -jxf ../mpfr-3.1.0.tar.bz2 #解壓到/mnt/lfs/sources/gcc-4.6.1/
lfs: /mnt/lfs/sources/gcc-4.6.1$ mv -v mpfr-3.1.0 mpfr
lfs: /mnt/lfs/sources/gcc-4.6.1$ tar -jxf ../gmp-5.0.2.tar.bz2
lfs: /mnt/lfs/sources/gcc-4.6.1$ mv -v gmp-5.0.2 gmp
lfs: /mnt/lfs/sources/gcc-4.6.1$ tar -zxf ../mpc-0.9.tar.gz
lfs: /mnt/lfs/sources/gcc-4.6.1$ mv -v mpc-0.9 mpc
重新建立一次gcc-build資料夾
lfs: /mnt/lfs/sources$ mkdir -v ../gcc-build
lfs: /mnt/lfs/sources/gcc-4.6.1$ cd ../gcc-build
重新準備編譯 and 產生makefile
lfs: /mnt/lfs/sources/gcc-build$ CC="$LFS_TGT-gcc -B/tools/lib/" \
> AR=$LFS_TGT-ar RANLIB=$LFS_TGT-ranlib \
> ../gcc-4.6.1/configure --prefix=/tools \
> --with-local-prefix=/tools --enable-clocale=gnu \
> --enable-shared --enable-threads=posix \
> --enable-__cxa_atexit --enable-languages=c,c++ \
> --disable-libstdcxx-pch --disable-multilib \
> --disable-bootstrap --disable-libgomp \
> --without-ppl --without-cloog \
> --with-mpfr-include=$(pwd)/../gcc-4.6.1/mpfr/src \
> --with-mpfr-lib=$(pwd)/mpfr/src/.libs
開始組譯
lfs: /mnt/lfs/sources/gcc-build$ make
安裝
lfs: /mnt/lfs/sources/gcc-build$ make install
建立連結
lfs: /mnt/lfs/sources/gcc-build$ ln -vs gcc /tools/bin/cc
`/tools/bin/cc' -> `gcc'
檢查安裝是否成功
lfs: /mnt/lfs/sources/gcc-build$echo 'main(){}' > dummy.c
lfs: /mnt/lfs/sources/gcc-build$ cc dummy.c
lfs: /mnt/lfs/sources/glibc-build$ readelf -l a.out | grep ': /tools'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
移除測試檔
lfs: /mnt/lfs/sources/gcc-build$ rm -v dummy.c a.out
removed `dummy.c'
removed `a.out
安裝套件完成後移除
lfs: /mnt/lfs/sources/gcc-build$ cd ..
lfs: /mnt/lfs/sources$ rm -rf gcc-build gcc-4.6.1
5.11. Tcl-8.5.10
The Tcl package contains the Tool Command Language
5.11.1. Installation of Tcl
lfs: /mnt/lfs/sources$ tar xvf tcl8.5.10-src.tar.gz
lfs: /mnt/lfs/sources$ cd tcl8.5.10/unix/
lfs: /mnt/lfs/sources/tcl8.5.10/unix$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/tcl8.5.10/unix$ ./configure --prefix=/tools
..................
configure: creating ./config.status
config..status: creating Makefile
config.status: creating dltest/Makefile
config.status: creating tclConfig.sh
lfs: /mnt/lfs/sources/tcl8.5.10/unix$
開始組譯
lfs: /mnt/lfs/sources/tcl8.5.10/unix$ make
現在編譯完成了,因為是臨時工具,不是強制性的臨時工具,如果運行Tcl測試套件,可執行以下命令
lfs: /mnt/lfs/sources/tcl8.5.10/unix$ TZ=UTC make test
安裝
lfs: /mnt/lfs/sources/tcl8.5.10/unix$ make install
將安裝的資料庫改為可讀寫模式
lfs: /mnt/lfs/sources/tcl8.5.10/unix$ chmod -v u+w /tools/lib/libtcl8.5.so
mode of `/tools/lib/libtcl8.5.so' changed to 0755 (rwxr-xr-x)
安裝TCL開頭檔
lfs: /mnt/lfs/sources/tcl8.5.10/unix$ make install-private-headers
Installing private header files
建立連結
lfs: /mnt/lfs/sources/tcl8.5.10/unix$ ln -sv tclsh8.5 /tools/bin/tclsh
`/tools/bin/tclsh' -> `tclsh8.5'
安裝套件完成後移除
lfs: /mnt/lfs/sources/tcl8.5.10/unix$ cd ../..
lfs: /mnt/lfs/sources$ rm -rf tcl8.5.10/
5.12. Expect-5.45
The Expect package contains a program for carrying out scripted dialogues with other interactive programs
5.12.1. Installation of Expect
解壓縮
lfs: /mnt/lfs/sources$ tar xvf expect5.45.tar.gz
lfs: /mnt/lfs/sources$ cd expect5.45
lfs: /mnt/lfs/sources/expect5.45$
lfs: /mnt/lfs/sources/expect5.45$ cp -v configure{,.orig}
`configure' -> `configure.orig'
lfs: /mnt/lfs/sources/expect5.45$ sed 's:/usr/local/bin:/bin:' configure.orig > configure
準備編譯產生出makefile
lfs: /mnt/lfs/sources/expect5.45$ ./configure --prefix=/tools --with-tcl=/tools/lib \
> --with-tclinclude=/tools/include
.........
config.status: creating Makefile
開始組譯
lfs: /mnt/lfs/sources/expect5.45$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/expect5.45$ make test
............
all.tcl: Total 29 Passed 29 Skipped 0 Failed 0
Sourced 0 Test Files.
安裝
lfs: /mnt/lfs/sources/expect5.45$ make SCRIPTS="" install
安裝套件完成後移除
lfs: /mnt/lfs/sources/expect5.45$ cd ..
lfs: /mnt/lfs/sources$ rm -rf expect5.45/
5.13. DejaGNU-1.5
The DejaGNU package contains a framework for testing other programs
5.13.1. Installation of DejaGNU
解壓縮
lfs: /mnt/lfs/sources$ tar xvf dejagnu-1.5.tar.gz
lfs: /mnt/lfs/sources$ cd dejagnu-1.5/
lfs: /mnt/lfs/sources/dejagnu-1.5$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/dejagnu-1.5$./configure --prefix=/tools
..............
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands
安裝
lfs: /mnt/lfs/sources/dejagnu-1.5$ make install
測試command,可不用強制執行
lfs: /mnt/lfs/sources/dejagnu-1.5$ make check
.......
# of expected passes 66
make[1]: Leaving directory `/mnt/lfs/sources/dejagnu-1.5'
安裝套件完成後移除
lfs: /mnt/lfs/sources/dejagnu-1.5$ cd ..
lfs: /mnt/lfs/sources$ rm -rf dejagnu-1.5/
5.14. Check-0.9.8
Check is a unit testing framework for C
5.14.1. Installation of Check
解壓縮
lfs: /mnt/lfs/sources$ tar xvf check-0.9.8.tar.gz
lfs: /mnt/lfs/sources$ cd check-0.9.8
lfs: /mnt/lfs/sources/check-0.9.8$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/check-0.9.8$ ./configure --prefix=/tools
.............
configure: creating ./config.status
config.status: creating check.pc
config.status: creating Makefile
config.status: creating doc/Makefile
config.status: creating lib/Makefile
config.status: creating src/check.h
config.status: creating src/Makefile
config.status: creating tests/Makefile
config.status: creating tests/test_vars
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
開始組譯
lfs: /mnt/lfs/sources/check-0.9.8$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/check-0.9.8$ make check
................
PASS: check_check
PASS: test_output.sh
PASS: test_xml_output.sh
PASS: test_log_output.sh
==================
All 5 tests passed
==================
安裝
lfs: /mnt/lfs/sources/check-0.9.8$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/check-0.9.8$ cd ..
lfs: /mnt/lfs/sources$ rm -rf check-0.9.8/
5.15. Ncurses-5.9
The Ncurses package contains libraries for terminal-independent handling of character screens
5.15.1. Installation of Ncurses
解壓縮
lfs: /mnt/lfs/sources$ tar xvf ncurses-5.9.tar.gz
lfs: /mnt/lfs/sources$ cd ncurses-5.9/
lfs: /mnt/lfs/sources/ncurses-5.9$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/ncurses-5.9$ ./configure --prefix=/tools --with-shared \
> --without-debug --without-ada --enable-overwrite
.............
** Configuration summary for NCURSES 5.9 20110404:
extended funcs: yes
xterm terminfo: xterm-new
bin directory: /tools/bin
lib directory: /tools/lib
include directory: /tools/include
man directory: /tools/man
terminfo directory: /tools/share/terminfo
lfs: /mnt/lfs/sources/ncurses-5.9$
開始組譯
lfs: /mnt/lfs/sources/ncurses-5.9$ make
安裝
lfs: /mnt/lfs/sources/ncurses-5.9$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/ncurses-5.9$ cd ..
lfs: /mnt/lfs/sources$ rm -rf ncurses-5.9/
5.16. Bash-4.2
The Bash package contains the Bourne-Again SHell
5.16.1. Installation of Bash
解壓縮
lfs: /mnt/lfs/sources$ tar xvf bash-4.2.tar.gz
lfs: /mnt/lfs/sources$ cd bash-4.2
lfs: /mnt/lfs/sources/bash-4.2$
執行補丁
lfs: /mnt/lfs/sources/bash-4.2$ patch -Np1 -i ../bash-4.2-fixes-3.patch
準備編譯產生出makefile
lfs: /mnt/lfs/sources/bash-4.2$ ./configure --prefix=/tools --without-bash-malloc
.............
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: executing default commands
開始組譯
lfs: /mnt/lfs/sources/bash-4.2$ make
................
text data bss dec hex filename
878982 35928 23112 938022 e5026 bash
測試command,可不用強制執行
lfs: /mnt/lfs/sources/bash-4.2$ make tests
安裝
lfs: /mnt/lfs/sources/bash-4.2$ make install
建立連結,以便使用sh執行bash
lfs: /mnt/lfs/sources/bash-4.2$ ln -vs bash /tools/bin/sh
`/tools/bin/sh' -> `bash'
安裝套件完成後移除
lfs: /mnt/lfs/sources/bash-4.2$ cd ..
lfs: /mnt/lfs/sources$ rm -rf bash-4.2/
5.17. Bzip2-1.0.6
The Bzip2 package contains programs for compressing and decompressing files. Compressing text files with bzip2,yields a much better compression percentage than with the traditional gzip
5.17.1. Installation of Bzip2
解壓縮
lfs: /mnt/lfs/sources$ tar xvf bzip2-1.0.6.tar.gz
lfs: /mnt/lfs/sources$ cd bzip2-1.0.6/
lfs: /mnt/lfs/sources/bzip2-1.0.6$
開始組譯
lfs: /mnt/lfs/sources/bzip2-1.0.6$ make
........
You can also do "bzip2 --help" to see some helpful information.
"bzip2 -L" displays the software license.
安裝
lfs: /mnt/lfs/sources/bzip2-1.0.6$ make PREFIX=/tools install
........
echo ".so man1/bzmore.1" > /tools/man/man1/bzless.1
echo ".so man1/bzdiff.1" > /tools/man/man1/bzcmp.1
安裝套件完成後移除
lfs: /mnt/lfs/sources/bzip2-1.0.6$ cd ..
lfs: /mnt/lfs/sources$ rm -rf bzip2-1.0.6/
5.18. Coreutils-8.14
The Coreutils package contains utilities for showing and setting the basic system characteristics
5.18.1. Installation of Coreutils
解壓縮
lfs: /mnt/lfs/sources$ tar xvf coreutils-8.14.tar.xz
lfs: /mnt/lfs/sources$ cd coreutils-8.14
lfs: /mnt/lfs/sources/coreutils-8.14$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/coreutils-8.14$ ./configure --prefix=/tools --enable-install-program=hostname
.............
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
開始組譯
lfs: /mnt/lfs/sources/coreutils-8.14$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/coreutils-8.14$ make RUN_EXPENSIVE_TESTS=yes check
.......
=======================
All 258 tests passed
(36 tests were not run)
=======================
安裝
lfs: /mnt/lfs/sources/coreutils-8.14$ make install
因為權限的關係,install命令拒絕安裝su,所以在PATH中先以HOST系統保持一個有用的su
lfs: /mnt/lfs/sources/coreutils-8.14$ cp -v src/su /tools/bin/su-tools
`src/su' -> `/tools/bin/su-tools'
安裝套件完成後移除
lfs: /mnt/lfs/sources/coreutils-8.14$ cd ..
lfs: /mnt/lfs/sources$ rm -rf coreutils-8.14/
5.19. Diffutils-3.2
The Diffutils package contains programs that show the differences between files or directories.
5.19.1. Installation of Diffutils
解壓縮
lfs: /mnt/lfs/sources$ tar xvf diffutils-3.2.tar.gz
lfs: /mnt/lfs/sources$ cd diffutils-3.2/
lfs: /mnt/lfs/sources/diffutils-3.2$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/diffutils-3.2$ ./configure --prefix=/tools
..............
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
開始組譯
lfs: /mnt/lfs/sources/diffutils-3.2$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/diffutils-3.2$ make check
............
=======================
All 93 tests passed
(28 tests were not run)
=======================
安裝
lfs: /mnt/lfs/sources/diffutils-3.2$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/diffutils-3.2$ cd ..
lfs: /mnt/lfs/sources$ rm -rf diffutils-3.2/
5.20. File-5.09
The File package contains a utility for determining the type of a given file or files.
5.20.1. Installation of File
解壓縮
lfs: /mnt/lfs/sources$ tar xvf file-5.09.tar.gz
lfs: /mnt/lfs/sources$ cd file-5.09
lfs: /mnt/lfs/sources/file-5.09$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/file-5.09$ ./configure --prefix=/tools
............
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
開始組譯
lfs: /mnt/lfs/sources/file-5.09$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/file-5.09$ make check
安裝
lfs: /mnt/lfs/sources/file-5.09$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/file-5.09$ cd ..
lfs: /mnt/lfs/sources$ rm -rf file-5.09/
5.21. Findutils-4.4.2
The Findutils package contains programs to find files. These programs are provided to recursively search through a directory tree and to create, maintain, and search a database (often faster than the recursive find, but unreliable if the database has not been recently updated).
5.21.1. Installation of Findutils
解壓縮
lfs: /mnt/lfs/sources$ tar xvf findutils-4.4.2.tar.gz
lfs: /mnt/lfs/sources$ cd findutils-4.4.2/
lfs: /mnt/lfs/sources/findutils-4.4.2$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/findutils-4.4.2$ ./configure --prefix=/tools
...........
config.status: creating po/Makefile
開始組譯
lfs: /mnt/lfs/sources/findutils-4.4.2$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/findutils-4.4.2$ make check
安裝
lfs: /mnt/lfs/sources/findutils-4.4.2$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/findutils-4.4.2$ cd ..
lfs: /mnt/lfs/sources$ rm -rf findutils-4.4.2/
5.22. Gawk-4.0.0
The Gawk package contains programs for manipulating text files
5.22.1. Installation of Gawk
解壓縮
lfs: /mnt/lfs/sources$ tar xvf gawk-4.0.0.tar.bz2
lfs: /mnt/lfs/sources$ cd gawk-4.0.0/
lfs: /mnt/lfs/sources/gawk-4.0.0$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/gawk-4.0.0$ ./configure --prefix=/tools
............
config.status: creating po/Makefile
開始組譯
lfs: /mnt/lfs/sources/gawk-4.0.0$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/gawk-4.0.0$ make ckeck
安裝
lfs: /mnt/lfs/sources/gawk-4.0.0$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/gawk-4.0.0$ cd ..
lfs: /mnt/lfs/sources$ rm -rf gawk-4.0.0/
5.23. Gettext-0.18.1.1
The Gettext package contains utilities for internationalization and localization. These allow programs to be compiled with NLS (Native Language Support), enabling them to output messages in the user's native language
5.23.1. Installation of Gettext
解壓縮
lfs: /mnt/lfs/sources$ tar xvf gettext-0.18.1.1.tar.gz
lfs: /mnt/lfs/sources$ cd gettext-0.18.1.1
lfs: /mnt/lfs/sources/gettext-0.18.1.1$ cd gettext-tools
lfs: /mnt/lfs/sources/gettext-0.18.1.1/gettext-tools$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/gettext-0.18.1.1/gettext-tools$ ./configure --prefix=/tools --disable-shared
................
config.status: executing po-directories commands
開始組譯
lfs: /mnt/lfs/sources/gettext-0.18.1.1/gettext-tools$ make -C gnulib-lib
lfs: /mnt/lfs/sources/gettext-0.18.1.1/gettext-tools$ make -C src msgfmt
安裝二進制msgfmt
lfs: /mnt/lfs/sources/gettext-0.18.1.1/gettext-tools$ cp -v src/msgfmt /tools/bin
`src/msgfmt' -> `/tools/bin/msgfmt'
安裝套件完成後移除
lfs: /mnt/lfs/sources/gettext-0.18.1.1/gettext-tools$ cd ../..
lfs: /mnt/lfs/sources$ rm -rf gettext-0.18.1.1/
5.24. Grep-2.9
The Grep package contains programs for searching through files
5.24.1. Installation of Grep
解壓縮
lfs: /mnt/lfs/sources$ tar xvf grep-2.9.tar.gz
lfs: /mnt/lfs/sources$ cd grep-2.9
lfs: /mnt/lfs/sources/grep-2.9$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/grep-2.9$ ./configure --prefix=/tools \
> --disable-perl-regexp
開始組譯
lfs: /mnt/lfs/sources/grep-2.9$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/grep-2.9$ make check
..........
=======================
All 83 tests passed
(27 tests were not run)
=======================
安裝
lfs: /mnt/lfs/sources/grep-2.9$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/grep-2.9$ cd ..
lfs: /mnt/lfs/sources$ rm -rf grep-2.9/
5.25. Gzip-1.4
The Gzip package contains programs for compressing and decompressing files
5.25.1. Installation of Gzip
解壓縮
lfs: /mnt/lfs/sources$ tar xvf gzip-1.4.tar.gz
lfs: /mnt/lfs/sources$ cd gzip-1.4
lfs: /mnt/lfs/sources/gzip-1.4$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/gzip-1.4$ ./configure --prefix=/tools
開始組譯
lfs: /mnt/lfs/sources/gzip-1.4$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/gzip-1.4$ make check
安裝
lfs: /mnt/lfs/sources/gzip-1.4$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/gzip-1.4$ cd ..
lfs: /mnt/lfs/sources$ rm -rf gzip-1.4/
5.26. M4-1.4.16
The M4 package contains a macro processor
5.26.1. Installation of M4
解壓縮
lfs: /mnt/lfs/sources$ tar xvf m4-1.4.16.tar.bz2
lfs: /mnt/lfs/sources$ cd m4-1.4.16
lfs: /mnt/lfs/sources/m4-1.4.16$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/m4-1.4.16$ ./configure --prefix=/tools
開始組譯
lfs: /mnt/lfs/sources/m4-1.4.16$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/m4-1.4.16$ make check
............
=======================
All 109 tests passed
(21 tests were not run)
=======================
安裝
lfs: /mnt/lfs/sources/m4-1.4.16$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/m4-1.4.16$ cd ..
lfs: /mnt/lfs/sources$ rm -rf m4-1.4.16/
5.27. Make-3.82
The Make package contains a program for compiling packages
5.27.1. Installation of Make
解壓縮
lfs: /mnt/lfs/sources$ tar xvf make-3.82.tar.bz2
lfs: /mnt/lfs/sources$ cd make-3.82/
lfs: /mnt/lfs/sources/make-3.82$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/make-3.82$ ./configure --prefix=/tools
開始組譯
lfs: /mnt/lfs/sources/make-3.82$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/make-3.82$ make check
........
==================================================================
Regression PASSED: GNU Make 3.82 (x86_64-unknown-linux-gnu) built with gcc
==================================================================
安裝
lfs: /mnt/lfs/sources/make-3.82$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/make-3.82$ cd ..
lfs: /mnt/lfs/sources$ rm -rf make-3.82/
5.28. Patch-2.6.1
The Patch package contains a program for modifying or creating files by applying a “patch” file typically created by the diff program
5.28.1. Installation of Patch
解壓縮
lfs: /mnt/lfs/sources$ tar xvf patch-2.6.1.tar.bz2
lfs: /mnt/lfs/sources$ cd patch-2.6.1/
lfs: /mnt/lfs/sources/patch-2.6.1$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/patch-2.6.1$ ./configure --prefix=/tools
開始組譯
lfs: /mnt/lfs/sources/patch-2.6.1$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/patch-2.6.1$ make check
..........
5 tests (5 passed, 0 failed)
All tests succeeded!
安裝
lfs: /mnt/lfs/sources/patch-2.6.1$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/patch-2.6.1$ cd ..
lfs: /mnt/lfs/sources$ rm -rf patch-2.6.1/
5.29. Perl-5.14.2
The Perl package contains the Practical Extraction and Report Language
5.29.1. Installation of Perl
解壓縮
lfs: /mnt/lfs/sources$ tar xvf perl-5.14.2.tar.bz2
lfs: /mnt/lfs/sources$ cd perl-5.14.2
lfs: /mnt/lfs/sources/perl-5.14.2$
執行補丁
lfs: /mnt/lfs/sources/perl-5.14.2$ patch -Np1 -i ../perl-5.14.2-libc-1.patch
patching file hints/linux.sh
準備編譯產生出makefile
lfs: /mnt/lfs/sources/perl-5.14.2$ sh Configure -des -Dprefix=/tools
開始組譯
lfs: /mnt/lfs/sources/perl-5.14.2$ make
安裝
lfs: /mnt/lfs/sources/perl-5.14.2$ cp -v perl cpan/podlators/pod2man /tools/bin
`perl' -> `/tools/bin/perl'
`cpan/podlators/pod2man' -> `/tools/bin/pod2man'
lfs: /mnt/lfs/sources/perl-5.14.2$ mkdir -pv /tools/lib/perl5/5.14.2
mkdir: created directory `/tools/lib/perl5'
mkdir: created directory `/tools/lib/perl5/5.14.2'
lfs: /mnt/lfs/sources/perl-5.14.2$ cp -Rv lib/* /tools/lib/perl5/5.14.2
安裝套件完成後移除
lfs: /mnt/lfs/sources/perl-5.14.2$ cd ..
lfs: /mnt/lfs/sources$ rm -rf perl-5.14.2/
5.30. Sed-4.2.1
The Sed package contains a stream editor
5.30.1. Installation of Sed
解壓縮
lfs: /mnt/lfs/sources$ tar xvf sed-4.2.1.tar.bz2
lfs: /mnt/lfs/sources$ cd sed-4.2.1
lfs: /mnt/lfs/sources/sed-4.2.1$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/sed-4.2.1$ ./configure --prefix=/tools
開始組譯
lfs: /mnt/lfs/sources/sed-4.2.1$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/sed-4.2.1$ make check
...........
======================================================
All 65 tests behaved as expected (4 expected failures)
======================================================
安裝
lfs: /mnt/lfs/sources/sed-4.2.1$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/sed-4.2.1$ cd ..
lfs: /mnt/lfs/sources$ rm -rf sed-4.2.1/
5.31. Tar-1.26
The Tar package contains an archiving program
5.31.1. Installation of Tar
解壓縮
lfs: /mnt/lfs/sources$ tar xvf tar-1.26.tar.bz2
lfs: /mnt/lfs/sources$ cd tar-1.26
lfs: /mnt/lfs/sources/tar-1.26$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/tar-1.26$ ./configure --prefix=/tools
開始組譯
lfs: /mnt/lfs/sources/tar-1.26$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/tar-1.26$ make check
............
113 tests were successful.
8 tests were skipped.
安裝
lfs: /mnt/lfs/sources/tar-1.26$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/tar-1.26$ cd ..
lfs: /mnt/lfs/sources$ rm -rf tar-1.26/
5.32. Texinfo-4.13a
The Texinfo package contains programs for reading, writing, and converting info pages
5.32.1. Installation of Texinfo
解壓縮
lfs: /mnt/lfs/sources$ tar xvf texinfo-4.13a.tar.gz
lfs: /mnt/lfs/sources$ cd texinfo-4.13
lfs: /mnt/lfs/sources/texinfo-4.13$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/texinfo-4.13$ ./configure --prefix=/tools
開始組譯
lfs: /mnt/lfs/sources/texinfo-4.13$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/texinfo-4.13$ make check
安裝
lfs: /mnt/lfs/sources/texinfo-4.13$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/texinfo-4.13$ cd ..
lfs: /mnt/lfs/sources$ rm -rf texinfo-4.13/
5.33. Xz-5.0.3
The Xz package contains programs for compressing and decompressing files. It provides capabilities for the lzma and the newer xz compression formats. Compressing text files with xz yields a better compression percentage than with the traditional gzip or bzip2 commands
5.33.1. Installation of Xz-Utils
解壓縮
lfs: /mnt/lfs/sources$ tar xvf xz-5.0.3.tar.bz2
lfs: /mnt/lfs/sources$ cd xz-5.0.3
lfs: /mnt/lfs/sources/xz-5.0.3$
準備編譯產生出makefile
lfs: /mnt/lfs/sources/xz-5.0.3$ ./configure --prefix=/tools
開始組譯
lfs: /mnt/lfs/sources/xz-5.0.3$ make
測試command,可不用強制執行
lfs: /mnt/lfs/sources/xz-5.0.3$ make check
........
==================
All 7 tests passed
==================
安裝
lfs: /mnt/lfs/sources/xz-5.0.3$ make install
安裝套件完成後移除
lfs: /mnt/lfs/sources/xz-5.0.3$ cd ..
lfs: /mnt/lfs/sources$ rm -rf xz-5.0.3/
5.34. Stripping
The steps in this section are optional, but if the LFS partition is rather small, it is beneficial to learn that unnecessary items can be removed. The executables and libraries built so far contain about 70 MB of unneeded debugging symbols.Remove those symbols with
硬碟空間太小才需要做此ITEM,縮減size
lfs: /mnt/lfs/sources$ strip --strip-debug /tools/lib64/*
lfs: /mnt/lfs/sources$ strip --strip-unneeded /tools/{,s}bin/*
lfs: /mnt/lfs/sources$ rm -rf /tools/{,share}/{info,man,doc}
5.35. Changing Ownership
lfs: /# sudo chown -R root:root $LFS/tools