LFS6.2搭建筆記(一)

centos5
lfs6.2
[url]http://www.linuxfromscratch.org/[/url]
下個180M的包就可以開工了。
參考材料:Linux From Scratch(CN).CHM
[url]http://lamp.linux.gov.cn/Linux/LFS-6.2/[/url]
[url]http://www.linuxfromscratch.org/lfs/view/6.2/index.html[/url]
################################################################################
mke2fs -jv /dev/sda3
debugfs -R feature /dev/sda3
//has_joural, dir_index, filetype, large_file, resize_inode, sparse_super
export LFS=/mnt/lfs
mkdir -pv $LFS
mount -v -t ext3 /dev/sda3 $LFS
mount
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
mkdir -v $LFS/tools
ln -sv $LFS/tools /
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
tar xvf lfs.tar -C $LFS/sources/
su - lfs
一下內容都用lfs用戶
################################################################################
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF
source ~/.bash_profile
################################################################################
cd $LFS/sources
tar -xvjf $LFS/sources/binutils-2.16.1.tar.bz2
cd $LFS/sources/binutils-2.16.1/
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.16.1/configure --prefix=/tools --disable-nls
make
make install
make -C ld clean
make -C ld LIB_PATH=/tools/lib
********************************************************************************
編譯報錯
/tools/bin/ld: unrecognized option '--hash-style=gnu'
/tools/bin/ld: use the --help option for usage information
collect2: ld returned 1 exit status
make[2]: *** [ld-new] Error 1
make[2]: Leaving directory `/mnt/lfs/sources/binutils-build/ld'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/mnt/lfs/sources/binutils-build/ld'
make: *** [all-recursive-am] Error 2
make: Leaving directory `/mnt/lfs/sources/binutils-build/ld'
解決方法:
1、  make -C ld LIB_PATH=/tools/lib CC="gcc -B/usr/bin/"
2、發現CENT5的binutils的版本太新,使用了新的特性--hash-style。由於當前的binutils不支持這個特性導致
binutils版本太老換2.6.17.50-06就可以了(沒時間去試,我用第一個方法)
********************************************************************************
cp -v ld/ld-new /tools/bin
rm -fr $LFS/sources/binutils-2.16.1/
rm -fr $LFS/sources/binutils-build/
################################################################################

GCC第一遍編譯
source
mkdir –v ./gcc-build
cd gcc-buildlr
../gcc-4.0.3/configure --prefix=/tools \
--with-local-prefix=/tools --disable-nls --enable-shared \
--enable-languages=c
********************************************************************************
問題:
c complier cannot create executables
解決方法:
CC="gcc -B/usr/bin/" ../gcc-4.1.2/configure --prefix=/tools \
    --with-local-prefix=/tools --disable-nls --enable-shared \
    --enable-languages=c
最後還得看看英文手冊吧,最後看看前面兩處錯誤都是因爲中文手冊中少寫了一些東西。-.-!!!
跟我一樣懶
********************************************************************************
make bootstrap
make install
ln –vs gcc /tools/bin/cc
rm -fr gcc-4.0.3
rm -fr gcc-build
********************************************************************************
ln –vs gcc /tools/bin/cc   是將/tools/bin/cc 連接到gcc
但是刪除gcc-build後查看
ls -al /tools/bin|grep cc
lrwxrwxrwx 1 lfs lfs  3 Oct 6 16:38 cc->gcc
是個問題哈!!!
################################################################################
安裝 Linux-Libc-Headers
包含了"純淨的"內核頭文件。
使用 /usr/include
cp -Rv asm /tools/include/asm
cp -Rv linux /tools/include
********************************************************************************
如果您的機器不是 i386 兼容架構的,請相應的調整第一條命令。
看到上面那句話沒啥感想,只是把cp -Rv include/asm-i386 /tools/include/asm中的i386去掉
編譯下一個文件怎麼也過不去,老是缺文件,加不加要看自己的操作系統了,本人centos5.0
cp -Rv asm-generic /tools/include/asm-generic
################################################################################
安裝 Glibc
包含了主要的C庫。這個庫提供了基本例程,用於分配內存、搜索目錄、打開關閉文件
、讀寫文件、字串處理、模式匹配、數學計算等等。
../glibc-2.3.6/configure --prefix=/tools \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.0 --with-binutils=/tools/bin \
    --without-gd --with-headers=/tools/include \
    --without-selinux
make
make check
********************************************************************************
我的就是nptl報錯,沒有給出解決方案,可能VM配置太低了。
posix/annexc 中,你可能會看到一個預料的錯誤(可以忽略)。另外,Glibc測試單元,多少依賴於宿主系統。
下面是一些常見的錯誤:
nptl/tst-clock2 和tst-attr3 測試有時會出錯。 原因現在還不是很明白,可能是系統負載過重導致的。
math 測試在一些使用較老的 Intel 或 AMD 的系統上會失敗,某些優化設置也會導致該測試失敗。
atime 會在使用noatime 選項掛載 LFS 分區時失敗(參見節 2.4, "掛載新分區"),在編譯LFS過程中不要使用noatime 選項。
在一些很老很慢的機器上,一些測試會由於超時而失敗。
********************************************************************************
mkdir -v /tools/etc
touch /tools/etc/ld.so.conf
make install
################################################################################
調整工具鏈
mv -v /tools/bin/{ld,ld-old}
mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld
SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &&
gcc -dumpspecs > $SPECFILE &&
sed 's@^/lib/ld-linux.so.2@/tools&@g' $SPECFILE > tempspecfile &&
mv -vf tempspecfile $SPECFILE &&
unset SPECFILE
specs 文件,只要把所有的"/lib/ld-linux.so.2"都替換成"/tools/lib/ld-linux.so.2"就行了。
GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &&
find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &&
rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &&
unset GCC_INCLUDEDIR
********************************************************************************
測試
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
結果:
[Requesting program interpreter: /tools/lib/ld-linux.so.2]
刪除測試
rm -v dummy.c a.out
********************************************************************************
################################################################################
Tcl    
軟件包包含工具命令語言(Tool Command Language)。
configure文件在unix下面
./configure --prefix=/tools
make
make install
make install-private-headers
ln -sv tclsh8.4 /tools/bin/tclsh
好的開始竟然沒有報錯!!!
################################################################################
Expect
軟件包包含一個通過執行腳本對話框與其它交互式程序通信的工具。
patch -Np1 -i ../expect-5.43.0-spawn-1.patch
./configure --prefix=/tools --with-tcl=/tools/lib \
  --with-tclinclude=/tools/include --with-x=no
make
make SCRIPTS="" install
################################################################################
DejaGNU-1.4.4  
軟件包包含了一個測試其它程序的框架
./configure --prefix=/tools
make install
make check
################################################################################
GCC pass-2
expect -c "spawn ls"
結果:spawn ls
cp -v gcc/Makefile.in{,.orig} &&
sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in
cp -v gcc/Makefile.in{,.tmp} &&
sed 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
  > gcc/Makefile.in
********************************************************************************
Perl、C、sed、awk、shell scripting
看來需要用到的東西不少呢!!可是我對上面的屬於文盲,後悔上學時候沒學好C
********************************************************************************
patch -Np1 -i ../gcc-4.0.3-specs-1.patch
mkdir -v ../gcc-build
cd ../gcc-build
../gcc-4.0.3/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
make
make -k check     #等吧我的VM半個多小時沒啥效果,不必要的命令可以不運行
make install
********************************************************************************
謹慎起見,在測試一下吧!!
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
結果:
Requesting program interpreter:/tools/lib/ld-linux.so.2]
rm -v dummy.c a.out
********************************************************************************
################################################################################
Binutils-2.16.1 - Pass 2
是一組開發工具,包括連接器、彙編器和其他用於目標文件和檔案的工具
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.16.1/configure --prefix=/tools \
    --disable-nls --with-lib-path=/tools/lib
make     #不檢測了  想檢測就make check
make install
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
################################################################################
Ncurses-5.5  
提供獨立於終端的字符終端處理庫,含有功能鍵定義(快捷鍵)、屏幕繪製以及基於文本終端的圖形互動功能
./configure --prefix=/tools --with-shared \
    --without-debug --without-ada --enable-overwrite
make
make install
################################################################################
Bash
是 Bourne-Again Shell 的縮寫,它在 UNIX 系統中作爲 shell 被廣泛使用。
patch -Np1 -i ../bash-3.1-fixes-8.patch
./configure --prefix=/tools --without-bash-malloc
make
make install
ln -vs bash /tools/bin/sh
################################################################################
Bzip2
包含了對文件進行壓縮和解壓縮的工具,對於文本文件,bzip2 比傳統的 gzip 擁有更高壓縮比。
沒有configure文件 直接make
make
make PREFIX=/tools install
################################################################################
Coreutils
 軟件包包括一整套用於顯示和設置基本系統特徵的工具。
./configure --prefix=/tools
make
make install
###############################################################################
Diffutils-2.8.1
軟件包裏的程序可以向你顯示兩個文件或目錄的差異,常用來生成軟件的補丁。
./configure --prefix=/tools
make
make install
###############################################################################
Findutils-4.2.27
軟件包包含查找文件的工具,既能即時查找(遞歸的搜索目錄,並可以顯示、創建和維護文件),
也能在數據庫裏查找(通常比遞歸查找快但是在數據庫沒有及時更新的情況下,結果並不可靠)。
./configure --prefix=/tools
make
make install
###############################################################################
Gawk-3.1.5
是一個處理文本文件的工具包
./configure --prefix=/tools
cat >>config.h <<"EOF"
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LC_MESSAGES 1
EOF
make
make install
###############################################################################
Gettext-0.14.5
包含用於系統的國際化和本地化的工具,可以在編譯程序的時候使用本國語言支持(NLS),
可以使程序的輸出使用用戶設置的語言而不是英文
cd gettext-tools
./configure --prefix=/tools --disable-shared
make -C lib
make -C src msgfmt
cp -v src/msgfmt /tools/bin
###############################################################################
Grep-2.5.1a
可以按指定的匹配模式搜索文件中的內容。
./configure --prefix=/tools \
    --disable-perl-regexp
make
make install
###############################################################################
Gzip-1.3.5
軟件包包含了壓縮和解壓文件的程序。
./configure --prefix=/tools
make
make install
###############################################################################
M4-1.4.4
包含一個宏處理器
./configure --prefix=/tools
make
make install
###############################################################################
Make-3.80
軟件包包含一個編譯軟件包的程序。
./configure --prefix=/tools
make
make install
###############################################################################
Patch-2.5.4
軟件包包含一個根據補丁文件來修改原文件的程序。補丁文件通常是用 diff 程序創建的。
./configure --prefix=/tools
make
make install
###############################################################################
Perl-5.8.8
Perl 將 C, sed, awk 和 sh 的最佳特性集於一身,是一種強大的編程語言。
patch -Np1 -i ../perl-5.8.8-libc-2.patch
./configure.gnu --prefix=/tools -Dstatic_ext='Data/Dumper Fcntl IO POSIX'
make perl utilities
cp -v perl pod/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.8.8
cp -Rv lib/* /tools/lib/perl5/5.8.8
###############################################################################
Sed-4.1.5
是一個流編輯程序,在一個輸入流(從一個文件或者一個管道的輸入)上進行基本的文本編輯操作。
./configure --prefix=/tools
make
make install
###############################################################################
Tar-1.15.1
軟件包含有一個歸檔程序,用來保存文件到歸檔文件或者從給定的 tar 歸檔文件中釋放文件
patch -Np1 -i ../tar-1.15.1-gcc4_fix_tests-1.patch
./configure --prefix=/tools
make
make install
###############################################################################
Texinfo-4.8
軟件包包含讀取、寫入和轉換 Info 文檔的程序,以提供系統文檔。
./configure --prefix=/tools
make
make install
###############################################################################
Util-linux-2.12r
軟件包包含許多工具。其中比較重要的是加載、卸載、格式化、分區和管理驅動器,以及打開 tty 端口和處理消息。
sed -i 's@/usr/include@/tools/include@g' configure
./configure
make -C lib
make -C mount mount umount
make -C text-utils more
cp mount/{,u}mount text-utils/more /tools/bin
###############################################################################
清理系統
strip --strip-debug /tools/lib/*
strip --strip-unneeded /tools/{,s}bin/*
rm -rf /tools/{info,man}
###############################################################################
改變所有者
chown -R root:root $LFS/tools
最後一次用lfs用戶
###############################################################################
終於做完第五章了可以休息啦!!!
                          2008-10-7 15:29
###############################################################################
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章