LFS相關 LFS 是Linux From Scratch的簡稱,LFS 存在的一個重要緣由是能夠幫助人們學習 linux 系統內部是如何工做的。構建一個 LFS 系統會幫助演示是什麼使 linux 運轉,各類組件如何在一塊兒互相依賴的工做。最好的事情之一經過這種學習能夠得到徹底根據本身的需求定製 linux 系統的能力。 LFS 的一個關鍵的好處是它讓用戶對於系統有更多的控制,而不是依賴於他人的 linux 實現。在 LFS 的世界裏,你本身坐在司機的位置,掌控系統的每個細節,好比目錄佈局和啓動腳本配置等等。你也能掌控在哪裏、爲什麼、以及怎樣安裝每個程序。有關 LFS相關的資料能夠去這個連接中查找.[url]http://www.linuxfromscratch.org/[/url] 。 本文的環境爲VM5.5搭建,其中分配給虛擬機的內存爲256M,硬盤大小爲8G,固然,真正完成後系統的大小不到600M,可是在編譯時至少須要3G的空間。爲了方便使用,其中的軟件包能夠去LFS項目中下載現成的ISO包,地址爲 [url]http://kerrek.linuxfromscratch.org/pub/lfs-livecd/[/url] lfslivecd-x86-6.3-r2130.iso,固然,若是想使用更新的軟件,請去相應的網站下載。這裏的用的是lfslivecd-x86-6.3-r2130.iso。 因爲製做的過程比較長,可能會持續好幾天,若是是經過VM來作的話,能夠利用它的暫停功能來保護現場,使用時間啓動現場繼續製做過程。 注意:這裏出現的指令都是必需要輸入的指令,不一樣於之前的文章風格。一:初始化製做環境。 在使用VM時有一個麻煩的地方,它不能從物理機器保存的文件中經過複製粘貼命令的方式來進行安裝製做,而LFS有不少的編譯指令或其它命令都大同小 異,本着方便至上的緣由,因此開啓它的網絡功能,而後經過遠程鏈接工具(Putty,SshClient)來進行指令操做。 使用光盤啓動,沒什麼好說的,到了設置系統時間和地區時以下圖所示:
1:完成後會啓動到用戶模式,輸入下列指令用開啓網絡功能並設置管理員密碼。注意:在設置VM虛擬機時在有關網卡的設定中請使用"橋接"模式,不然可能獲取不到IP,並且局域網中還要知足能夠經過DHCP的方式來獲取IP。html
12 | [root~] # /etc/rc.d/init.d/sshd start [root~] # passwd root |
2:經過SshClient連入主機,對硬盤執行分區操做 這裏能夠按照你本身的須要的分區,這裏我按照設置一個根分區和一個交換分區爲例,交換分區佔用512M,其他的所有分給根分區,/dev/hda1爲交換分區;/dev/hda2做爲目標系統根目錄。linux
1 | cfdisk /dev/hda |
保存退出後進行磁盤分區的格式化c++
12 | mkswap /dev/hda1 mkfs.ext3 /dev/hda2 |
3:建立相應的文件和路徑。 在這裏要說明的是兩個LiveCD下的重要目錄/usr/share/LFS-BOOK-6.3-HTML目錄存放的就是LFS手冊;/lfs- sources裏面存放的就是建造LFS所須要的源碼包,不須要處處下軟件了。 具體指令的做用能夠參考相關文檔,這裏就不作詳細說明了。所建立的符號連接使得將要編譯的工具鏈老是位於 /tools 目錄下,這意味着編譯器、彙編器和鏈接器在編譯目標目錄爲/tools時總可使用。shell
1234567 | export LFS= /mnt/lfs mkdir -pv $LFS mount /dev/hda2 $LFS mkdir - v $LFS /sources chmod - v a+wt $LFS /sources chmod - v a+wt $LFS /sources ln -sv /mnt/lfs/tools/ / |
以 root 用戶登陸的時候,犯一個錯誤就足以損壞甚至摧毀系統,所以,本章咱們推薦使用一個無特權的用戶來編譯和安裝軟件包。您可使用您本身的用戶名,不過爲了建 立一個乾淨的工做環境,建議您新建一個名爲 lfs 的組,並在其中添加一個名爲 lfs 的用戶,咱們將在安裝過程當中使用這個用戶。bootstrap
123456 | groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs passwd lfs chown - v lfs /mnt/lfs/tools/ chown - v lfs /mnt/lfs/sources/ su - lfs |
做 爲 lfs 用戶登陸的時候,初始 shell 一般是一個登錄shell(login shell),它會首先讀取宿主系統的 /etc/profile 文件(可能包含一些設置和環境變量),而後繼續讀取 .bash_profile 文件來完成登陸初始化。.bash_profile 文件中的 exec env -i.../bin/bash 命令用徹底空的環境來取代當前的環境(除了繼承 HOME, TERM, PS1 變量外)。這樣能保證咱們的編譯環境不會被宿主系統中沒必要要的或者有潛在危險的環境變量所影響,從而確保得到一個乾淨的工做環境。vim
1234567891011121314 | 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 export cd /mnt/lfs/sources/ |
二:構建臨時編譯環境。 這裏的整體目標是提供一個臨時環境,您能夠 chroot 到這個環境,在裏面構建一個乾淨、沒有問題的目標 LFS 系統。爲了儘可能的與宿主系統分開,咱們建立了一個自包含、自依賴的工具鏈。 1:Binutils第一遍 你們能夠注意到後面全部的解包命令均使用tar xvf來完成,而無論文件的壓縮方式是bz2仍是gz,這是由於較新的tar程序都具備自動識別後綴名並自動調用相應的解壓縮工具的能力,因此能夠不需 要指定壓縮方式因LFS的LiveCD中提供的tar版本比較新,後面製做的tar版本也比較新,所以支持自動識別的能力,同時爲了使文章的解壓命令
看起來比較統一方便維護(一樣對於想製做成腳本的朋友也會比較方便)所以後面統一使用tar xvf來解壓。bash
12345678910111213 | tar xvf /lfs-sources/binutils-2 .17. tar .bz2 cd binutils-2.17/ mkdir - v .. /binutils-build cd .. /binutils-build/ CC= "gcc -B/usr/bin/" .. /binutils-2 .17 /configure --prefix= /tools --disable-nls --disable-werror make make install make -C ld clean make -C ld LIB_PATH= /tools/lib/ cp - v ld /ld-new /tools/bin cd .. rm -rf binutils-build/ rm -rf binutils-2.17/ |
2:GCC第一遍網絡
1234567891011 | tar xvf /lfs-sources/gcc-4 .1.2. tar .bz2 mkdir - v gcc-build cd gcc-build/ 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 -sv gcc /tools/bin/cc cd .. rm -rf gcc-build/ rm -rf gcc-4.1.2/ |
3:Linux-2.6.22.5 API Headersless
12345678 | tar xvf /lfs-sources/linux-2 .6.22.5. tar .bz2 cd linux-2.6.22.5/ make mrproper make headers_check make INSTALL_HDR_PATH=dest headers_install cp -rv dest /include/ * /tools/include cd .. rm -rf linux-2.6.22.5 |
4:Glibcssh
1234567891011121314 | tar xvf /lfs-sources/glibc-2 .5.1. tar .bz2 cd glibc-2.5.1 mkdir - v .. /glibc-build cd .. /glibc-build/ .. /glibc-2 .5.1 /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 mkdir - v /tools/etc touch /tools/etc/ld .so.conf make install cd .. rm -rf glibc-build/ rm -rf glibc-2.5.1/ |
5:調整並測試工具鏈
12345678910 | 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 gcc -dumpspecs | sed 's@^/lib/ld-linux.so.2@/tools&@g ' > \ ` dirname $(gcc -print-libgcc- file -name)` /specs 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 |
如今,須要停下來確認新工具鏈的基本功能(編譯和鏈接)是否按預期工做,運行下面的命令作一個簡單的合理性檢查:
12345 | echo 'main(){}' >dummy.c cc dummy.c readelf -l a.out | grep 'tools' [Requesting program interpreter: /tools/lib/ld-linux .so.2] #有這個提示才表示成功 rm -rf a.out dummy.c |
6:TCL
12345678910111213141516171819202122232425 | tar xvf /lfs-sources/tcl8 .4.15-src. tar .gz cd tcl8.4.15 /unix/ . /configure --prefix= /tools make make install make install -private-headers ln -sv tclsh8.4 /tools/bin/tclsh cd /mnt/lfs/sources/ tar xvf /lfs-sources/expect-5 .43.0. tar .gz cd expect-5.43/ patch -Np1 -i /lfs-sources/expect-5 .43.0-spawn-1.patch cp configure{,.bak} sed 's:/usr/local/bin:/bin:' configure.bak > configure . /configure --prefix= /tools --with-tcl= /tools/lib --with-tclinclude= /tools/include --with-x=no make make SCRIPTS= "" install cd $LFS /sources tar xvf /lfs-sources/dejagnu-1 .4.4. tar .gz cd dejagnu-1.4.4 . /configure --prefix= /tools make install cd .. rm -rf tcl8.4.15 rm -rf expect-5.43 rm -rf dejagnu-1.4.4 |
7:GCC第二遍
1234567891011121314151617 | tar xvf /lfs-sources/gcc-4 .1.2. tar .bz2 cd gcc-4.1.2 cp - v gcc /Makefile . in {,.orig} sed 's@\./fixinc\.sh@-ctrue@' 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 patch -Np1 -i /lfs-sources/gcc-4 .1.2-specs-1.patch mkdir - v .. /gcc-build cd .. /gcc-build .. /gcc-4 .1.2 /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 install cd .. rm -rf gcc-build rm -rf gcc-4.1.2 |
如今,須要停下來確認GCC的基本功能(編譯和鏈接)是否按預期工做,運行下面的命令作一個簡單的合理性檢查:
12345 | echo 'main(){}' >dummy.c cc dummy.c readelf -l a.out | grep 'tools' [Requesting program interpreter: /tools/lib/ld-linux .so.2] #有這個提示才表示成功 rm -rf a.out dummy.c |
8:Binutils第二遍
123456789101112 | tar xvf /lfs-sources/binutils-2 .17. tar .bz2 mkdir - v binutils-build cd binutils-build .. /binutils-2 .17 /configure --prefix= /tools --disable-nls --with-lib-path= /tools/lib make make install make -C ld clean make -C ld LIB_PATH= /usr/lib : /lib cp - v ld /ld-new /tools/bin cd .. rm -rf binutils-build rm -rf binutils-2.17 |
9:Ncurses
1234567 | tar xvf /lfs-sources/ncurses-5 .6. tar .gz cd ncurses-5.6 . /configure --prefix= /tools --with-shared --without-debug --without-ada -- enable -overwrite make make install cd .. rm -rf ncurses-5.6 |
10:Bash
123456789 | tar xvf /lfs-sources/bash-3 .2. tar .gz cd bash -3.2 patch -Np1 -i /lfs-sources/bash-3 .2-fixes-5.patch . /configure --prefix= /tools --without- bash -malloc make make install ln -vs bash /tools/bin/sh cd .. rm -rf bash -3.2 |
11:Bzip
123456 | tar xvf /lfs-sources/bzip2-1 .0.4. tar .gz cd bzip2 -1.0.4 make make PREFIX= /tools install cd .. rm -rf bzip2 -1.0.4 |
12:Coreutils
12345678 | tar xvf /lfs-sources/coreutils-6 .9. tar .bz2 cd coreutils-6.9 . /configure --prefix= /tools make make install cp - v src /su /tools/bin/su-tools cd .. rm -rf coreutils-6.9 |
13:Diffutils
1234567 | tar xvf /lfs-sources/diffutils-2 .8.1. tar .gz cd diffutils-2.8.1 . /configure --prefix= /tools make make install cd .. rm -rf diffutils-2.8.1 |
14:Findutils
1234567 | tar xvf /lfs-sources/findutils-4 .2.31. tar .bz2 cd findutils-4.2.31 . /configure --prefix= /tools make make install cd .. rm -rf findutils-4.2.31 |
15:Gawk
1234567891011 | tar xvf /lfs-sources/gawk-3 .1.5. tar .bz2 cd 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 cd .. rm -rf gawk -3.1.5 |
16:Gettext
123456789 | tar xvf /lfs-sources/gettext-0 .16.1. tar .gz cd gettext-0.16.1 cd gettext-tools . /configure --prefix= /tools --disable-shared make -C gnulib-lib make -C src msgfmt cp - v src /msgfmt /tools/bin cd $LFS /sources rm -rf gettext-0.16.1 |
17:Grep
1234567 | tar xvf /lfs-sources/grep-2 .5.1a. tar .bz2 cd grep -2.5.1a . /configure --prefix= /tools --disable-perl-regexp make make install cd .. rm -rf grep -2.5.1a |
18:Gzip
1234567 | tar xvf /lfs-sources/gzip-1 .3.12. tar .gz cd gzip -1.3.12 . /configure --prefix= /tools make make install cd .. rm -rf gzip -1.3.12 |
19:Make
1234567 | tar xvf /lfs-sources/make-3 .81. tar .bz2 cd make -3.81 . /configure --prefix= /tools make make install cd .. rm -rf make -3.81 |
20:Patch
1234567 | tar xvf /lfs-sources/patch-2 .5.4. tar .gz cd patch-2.5.4 . /configure --prefix= /tools make make install cd .. rm -rf patch-2.5.4 |
21:Perl
12345678910 | tar xvf /lfs-sources/perl-5 .8.8. tar .bz2 cd perl-5.8.8 patch -Np1 -i /lfs-sources/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 cd .. rm -rf perl-5.8.8 |
22:Sed
1234567 | tar xvf /lfs-sources/sed-4 .1.5. tar .gz cd sed -4.1.5 . /configure --prefix= /tools make make install cd .. rm -rf sed -4.1.5 |
23:Tar
1234567 | tar xvf /lfs-sources/tar-1 .18. tar .bz2 cd tar -1.18 . /configure --prefix= /tools make make install cd .. rm -rf tar -1.18 |
24:Textinfo
1234567 | tar xvf /lfs-sources/texinfo-4 .9. tar .bz2 cd texinfo-4.9 . /configure --prefix= /tools make make install cd .. rm -rf texinfo-4.9 |
25:Util-linux
12345678910 | tar xvf /lfs-sources/util-linux-2 .12r. tar .bz2 cd util-linux-2.12r sed -i 's@/usr/include@/tools/include@g' configure . /configure make -C lib make -C mount mount umount make -C text-utils more cp - v mount /{,u} mount text-utils /more /tools/bin cd .. rm -rf util-linux-2.12r |
26:清理系統垃圾,去掉調試符號 這一步的步驟是可選的,但若是 LFS 分區實在很小則除外;瞭解哪些東西是沒必要要的、能夠刪除的也是有好處的。到目前爲止已經安裝的可執行程序和庫文件包含大約 130 MB 沒必要要的調試符號,運行下面的命令刪除這些符號:
1234 | strip --strip-debug /tools/lib/ * strip --strip-unneeded /tools/ {,s}bin/* rm -rf /tools/ {info, man } exit |
三:構建LFS系統 咱們經過 chroot 命令進入一個臨時的微型 Linux 系統,並做一些最後的準備,而後開始安裝軟件包。在這裏軟件包的安裝順序應當嚴格遵照,以確保沒有一個程序會把 /tools 做爲路徑硬鏈接到代碼中。一樣不要並行編譯包。並行編譯可能會節省時間(特別是在雙CPU的機器上),但也可能形成程序包含 /tools 硬鏈接路徑,以至在 /tools 目錄被刪除以後,程序沒法運行。 1:改變全部者;掛載虛擬內核文件系統;進入 Chroot 環境以及建立/dev設備
12345678910111213 | chown -R root:root $LFS /tools mkdir -pv $LFS/{dev,proc,sys} mknod -m 600 $LFS /dev/console c 5 1 mknod -m 666 $LFS /dev/null c 1 3 mount - v --bind /dev $LFS /dev mount -vt devpts devpts $LFS /dev/pts mount -vt tmpfs shm $LFS /dev/shm mount -vt proc proc $LFS /proc mount -vt sysfs sysfs $LFS /sys mkdir $LFS /cdrom mount /dev/cdrom $LFS /cdrom chroot "$LFS" /tools/bin/env -i HOME= /root TERM= "$TERM" PS1= '\u:\w\$ ' \ PATH= /bin : /usr/bin : /sbin : /usr/sbin : /tools/bin /tools/bin/bash --login +h |
2:建立目錄樹和必要的符號連接
12345678910111213141516171819 | mkdir -pv /{bin,boot,etc /opt ,home,lib,mnt,opt} mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp mkdir -pv /usr/ {, local /}{bin,include,lib,sbin,src} mkdir -pv /usr/ {, local /}share/{doc,info,locale, man } mkdir -pv /usr/ {, local /}share/{misc,terminfo,zoneinfo} mkdir -pv /usr/ {, local /}share /man/man {1..8} for dir in /usr /usr/local ; do ln -sv share/{ man ,doc,info} $ dir done mkdir -pv /var/ {lock,log,mail,run,spool} mkdir -pv /var/ {opt,cache,lib/{misc, locate }, local } ln -sv /tools/bin/ { bash , cat , echo , grep , pwd ,stty} /bin ln -sv /tools/bin/perl /usr/bin ln -sv /tools/lib/libgcc_s .so{,.1} /usr/lib ln -sv /tools/lib/libstdc ++.so{,.6} /usr/lib ln -sv bash /bin/sh touch /etc/mtab |
3:建立 passwd, group, log 文件
123456789101112131415161718192021222324252627282930 | cat > /etc/passwd << "EOF" root:x:0:0:root: /root : /bin/bash nobody:x:99:99:Unprivileged User: /dev/null : /bin/false EOF cat > /etc/group << "EOF" root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty :x:4: tape:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: usb:x:14: cdrom:x:15: mail:x:34: nogroup:x:99: EOF exec /tools/bin/bash --login +h touch /var/run/utmp /var/log/ {btmp,lastlog,wtmp} chgrp - v utmp /var/run/utmp /var/log/lastlog chmod - v 664 /var/run/utmp /var/log/lastlog cd /sources export LFS= /cdrom/lfs-sources |
4:Linux Header
123456789 | tar xvf $LFS /linux-2 .6.22.5. tar .bz2 cd linux-2.6.22.5 sed -i '/scsi/d' include /Kbuild make mrproper make headers_check make INSTALL_HDR_PATH=dest headers_install cp -rv dest /include/ * /usr/include cd .. rm -rf linux-2.6.22.5 |
5:Man-pages
12345 | tar xvf $LFS /man-pages-2 .63. tar .bz2 cd man -pages-2.63 make install cd .. rm -rf man -pages-2.63 |
6:Glibc
|
7:再次調整工具鏈 如今,最終的 C 庫已經安裝好了,咱們須要再次調整工具鏈,讓隨後編譯的那些工具都鏈接到這個庫上。基本上,就是把前面"調整工具鏈"那裏作的調整給取消掉。前面的工具鏈 使用的庫是從宿主系統的 /{,usr/}lib 轉向新安裝的 /tools/lib 目錄。一樣的,如今工具鏈使用的庫將從臨時的 /tools/lib 轉向 LFS 系統最終的 /{,usr/}lib 目錄。
1234567 | 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 gcc -dumpspecs | sed -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' \ -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' -e '/\*cpp:/{n;s@$@ -isystem/usr/include@}' > \ ` dirname $(gcc --print-libgcc- file -name)` /specs |
如今,須要停下來確認新工具鏈的基本功能(編譯和鏈接)是否按預期工做,運行下面的命令作一個簡單的合理性檢查:
12345 | echo 'main(){}' >dummy.c cc dummy.c readelf -l a.out | grep 'tools' [Requesting program interpreter: /tools/lib/ld-linux .so.2] #有這個提示才表示成功 rm -rf a.out dummy.c |
8:Binutils
12345678910 | tar xvf $LFS /binutils-2 .17. tar .bz2 mkdir binutils-build cd binutils-build .. /binutils-2 .17 /configure --prefix= /usr -- enable -shared make tooldir= /usr make tooldir= /usr install cp - v .. /binutils-2 .17 /include/libiberty .h /usr/include cd .. rm -rf binutils-build rm -rf binutils-2.17 |
9:GCC
12345678910111213141516171819 | tar xvf $LFS /gcc-4 .1.2. tar .bz2 cd gcc-4.1.2 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty /Makefile . in sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc /Makefile . in sed -i 's@\./fixinc\.sh@-ctrue@' gcc /Makefile . in sed -i 's/@have_mktemp_command@/yes/' gcc /gccbug . in mkdir - v .. /gcc-build cd .. /gcc-build .. /gcc-4 .1.2 /configure --prefix= /usr --libexecdir= /usr/lib -- enable -shared \ -- enable -threads=posix -- enable -__cxa_atexit -- enable -clocale=gnu \ -- enable -languages=c,c++ make make -k check make install ln -sv .. /usr/bin/cpp /lib ln -sv gcc /usr/bin/cc cd .. rm -rf gcc-build rm -rf gcc-3.4.3 |
這裏也最好是測試一下GCC,其方法和前面的測試方法一致。 10:Berkeley DB
12345678910 | tar xvf $LFS /db-4 .5.20. tar .gz cd db-4.5.20 patch -Np1 -i $LFS /db-4 .5.20-fixes-1.patch cd build_unix .. /dist/configure --prefix= /usr -- enable -compat185 -- enable -cxx make make docdir= /usr/share/doc/db-4 .5.20 install chown -Rv root:root /usr/share/doc/db-4 .5.20 cd /sources rm -rf db-4.5.20 |
11:Sed
12345678 | tar xvf $LFS /sed-4 .1.5. tar .gz cd sed -4.1.5 . /configure --prefix= /usr --bindir= /bin -- enable -html make make check make install cd .. rm -rf sed -4.1.5 |
12:E2fsprogs
123456789101112 | tar xvf $LFS /e2fsprogs-1 .40.2. tar .gz cd e2fsprogs-1.40.2 sed -i -e 's@/bin/rm@/tools&@' lib /blkid/test_probe . in mkdir - v build cd build .. /configure --prefix= /usr --with-root-prefix= "" -- enable -elf-shlibs make make check make install make install -libs cd ../.. rm -rf e2fsprogs-1.40.2 |
13:Coreutils
1234567891011121314151617181920 | tar xvf $LFS /coreutils-6 .9. tar .bz2 cd coreutils-6.9 patch -Np1 -i $LFS /coreutils-6 .9- uname -1.patch patch -Np1 -i $LFS /coreutils-6 .9-suppress_uptime_kill_su-1.patch patch -Np1 -i $LFS /coreutils-6 .9-i18n-1.patch chmod +x tests /sort/sort-mb-tests . /configure --prefix= /usr make make NON_ROOT_USERNAME=nobody check-root echo "dummy:x:1000:nobody" >> /etc/group su -tools nobody -s /bin/bash -c "make RUN_EXPENSIVE_TESTS=yes check" sed -i '/dummy/d' /etc/group make install mv - v /usr/bin/ { cat , chgrp , chmod , chown , cp , date , dd , df , echo } /bin mv - v /usr/bin/ { false , hostname , ln , ls , mkdir , mknod , mv , pwd ,readlink, rm } /bin mv - v /usr/bin/ { rmdir ,stty, sync , true , uname } /bin mv - v /usr/bin/chroot /usr/sbin mv - v /usr/bin/ { head , sleep , nice } /bin cd .. rm -rf coreutils-6.9 |
14:Iana-etc
123456 | tar xvf $LFS /iana-etc-2 .20. tar .bz2 cd iana-etc-2.20 make make install cd .. rm -rf iana-etc-2.20 |
15:M4
12345678 | tar xvf $LFS /m4-1 .4.10. tar .bz2 cd m4-1.4.10 . /configure --prefix= /usr make make check make install cd .. rm -rf m4-1.4.10 |
16:Bison
123456789 | tar xvf $LFS /bison-2 .3. tar .bz2 cd bison-2.3 . /configure --prefix= /usr echo '#define YYENABLE_NLS 1' >> config.h make make check make install cd .. rm -rf bison-2.3 |
17:Ncurses
12345678910111213141516171819 | tar xvf $LFS /ncurses-5 .6. tar .gz cd ncurses-5.6 patch -Np1 -i $LFS /ncurses-5 .6-coverity_fixes-1.patch . /configure --prefix= /usr --with-shared --without-debug -- enable -widec make make install chmod - v 644 /usr/lib/libncurses ++w.a mv - v /usr/lib/libncursesw .so.5* /lib ln -sfv ../.. /lib/libncursesw .so.5 /usr/lib/libncursesw .so for lib in curses ncurses form panel menu ; do rm -vf /usr/lib/lib ${lib}.so ; \ echo "INPUT(-l${lib}w)" > /usr/lib/lib ${lib}.so ; ln -sfv lib${lib}w.a /usr/lib/lib ${lib}.a ; done ln -sfv libncurses++w.a /usr/lib/libncurses ++.a rm -vf /usr/lib/libcursesw .so echo "INPUT(-lncursesw)" > /usr/lib/libcursesw .so ln -sfv libncurses.so /usr/lib/libcurses .so ln -sfv libncursesw.a /usr/lib/libcursesw .a ln -sfv libncurses.a /usr/lib/libcurses .a cd .. rm -rf ncurses-5.6 |
18:Procps
123456 | tar xvf $LFS /procps-3 .2.7. tar .gz cd procps-3.2.7 make make install cd .. rm -rf procps-3.2.7 |
19:Libtool
12345678 | tar xvf $LFS /libtool-1 .5.24. tar .gz cd libtool-1.5.24 . /configure --prefix= /usr make make check make install cd .. rm -rf libtool-1.5.24 |
20:Perl
12345678910 | tar xvf $LFS /perl-5 .8.8. tar .bz2 cd perl-5.8.8 echo "127.0.0.1 localhost $(hostname)" > /etc/hosts . /configure .gnu --prefix= /usr -Dman1dir= /usr/share/man/man1 \ -Dman3dir= /usr/share/man/man3 -Dpager= "/usr/bin/less -isR" make make test make install cd .. rm -rf perl-5.8.8 |
21:Readline
1234567891011121314 | tar xvf $LFS /readline-5 .2. tar .gz cd readline-5.2 sed -i '/MV.*old/d' Makefile. in sed -i '/{OLDSUFF}/c:' support /shlib-install patch -Np1 -i $LFS /readline-5 .2-fixes-3.patch . /configure --prefix= /usr --libdir= /lib make SHLIB_XLDFLAGS=-lncurses make install mv - v /lib/lib {readline, history }.a /usr/lib rm - v /lib/lib {readline, history }.so ln -sfv ../.. /lib/libreadline .so.5 /usr/lib/libreadline .so ln -sfv ../.. /lib/libhistory .so.5 /usr/lib/libhistory .so cd .. rm -rf readline-5.2 |
22:Zlib
12345678910111213141516 | tar xvf $LFS /zlib-1 .2.3. tar .gz cd zlib-1.2.3 . /configure --prefix= /usr --shared --libdir= /lib make make check make install rm - v /lib/libz .so ln -sfv ../.. /lib/libz .so.1.2.3 /usr/lib/libz .so make clean . /configure --prefix= /usr make make check make install chmod - v 644 /usr/lib/libz .a cd .. rm -rf zlib-1.2.3 |
23:Autoconf
12345678 | tar xvf $LFS /autoconf-2 .61. tar .bz2 cd autoconf-2.61 . /configure --prefix= /usr make make check make install cd .. rm -rf autoconf-2.61 |
24:Automake
12345678 | tar xvf $LFS /automake-1 .10. tar .bz2 cd automake-1.10 . /configure --prefix= /usr make make check make install cd .. rm -rf automake-1.10 |
25:Bash
123456789101112131415 | tar xvf $LFS /bash-3 .2. tar .gz cd bash -3.2 tar -xvf $LFS /bash-doc-3 .2. tar .gz && sed -i "s|htmldir = @htmldir@|htmldir = /usr/share/doc/bash-3.2|" Makefile. in patch -Np1 -i $LFS /bash-3 .2-fixes-5.patch . /configure --prefix= /usr --bindir= /bin --without- bash -malloc --with-installed-readline make sed -i 's/LANG/LC_ALL/' tests /intl .tests sed -i 's@tests@& </dev/tty@' tests /run-test chown -Rv nobody ./ su -tools nobody -s /bin/bash -c "make tests" make install cd .. rm -rf bash -3.2 exec /bin/bash --login +h |
26:Bzip
123456789101112131415 | tar xvf $LFS /bzip2-1 .0.4. tar .gz cd bzip2 -1.0.4 patch -Np1 -i $LFS /bzip2-1 .0.4-install_docs-1.patch make -f Makefile-libbz2_so make clean make make PREFIX= /usr install cp - v bzip2 -shared /bin/bzip2 cp -av libbz2.so* /lib ln -sv ../.. /lib/libbz2 .so.1.0 /usr/lib/libbz2 .so rm - v /usr/bin/ {bunzip2,bzcat, bzip2 } ln -sv bzip2 /bin/bunzip2 ln -sv bzip2 /bin/bzcat cd .. rm -rf bzip2 -1.0.4 |
27:Diffutils
123456789 | tar xvf $LFS /diffutils-2 .8.1. tar .gz cd diffutils-2.8.1 patch -Np1 -i $LFS /diffutils-2 .8.1-i18n-1.patch touch man /diff .1 . /configure --prefix= /usr make make install cd .. rm -rf diffutils-2.8.1 |
28:File
1234567 | tar xvf $LFS /file-4 .21. tar .gz cd file -4.21 . /configure --prefix= /usr make make install cd .. rm -rf file -4.21 |
29:Findutils
12345678910 | tar xvf $LFS /findutils-4 .2.31. tar .gz cd findutils-4.2.31 . /configure --prefix= /usr --libexecdir= /usr/lib/findutils --localstatedir= /var/lib/locate make make check make install mv - v /usr/bin/find /bin sed -i -e 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb cd .. rm -rf findutils-4.2.31 |
30:Flex
12345678910111213141516 | tar xvf $LFS /flex-2 .5.33. tar .bz2 cd flex-2.5.33 . /configure --prefix= /usr make make check make install ln -sv libfl.a /usr/lib/libl .a cat > /usr/bin/lex << "EOF" #!/bin/sh # Begin /usr/bin/lex exec /usr/bin/flex -l "$@" # End /usr/bin/lex EOF chmod - v 755 /usr/bin/lex cd .. rm -rf flex-2.5.33 |
31:Grub
1234567891011 | tar xvf $LFS /grub-0 .97. tar .gz cd grub-0.97 patch -Np1 -i $LFS /grub-0 .97-disk_geometry-1.patch . /configure --prefix= /usr make make check make install mkdir - v /boot/grub cp - v /usr/lib/grub/i386-pc/stage {1,2} /boot/grub cd .. rm -rf grub-0.97 |
32:Gawk
12345678910111213 | tar xvf $LFS /gawk-3 .1.5. tar .bz2 cd gawk -3.1.5 patch -Np1 -i $LFS /gawk-3 .1.5-segfault_fix-1.patch . /configure --prefix= /usr --libexecdir= /usr/lib cat >> config.h << "EOF" #define HAVE_LANGINFO_CODESET 1 #define HAVE_LC_MESSAGES 1 EOF make make check make install cd .. rm -rf gawk -3.1.5 |
33:Gettext
12345678 | tar xvf $LFS /gettext-0 .16.1. tar .gz cd gettext-0.16.1 . /configure --prefix= /usr make make check make install cd .. rm -rf gettext-0.16.1 |
34:Grep
12345678910 | tar xvf $LFS /grep-2 .5.1a. tar .bz2 cd grep -2.5.1a patch -Np1 -i $LFS /grep-2 .5.1a-redhat_fixes-2.patch chmod +x tests /fmbtest .sh . /configure --prefix= /usr --bindir= /bin make make check make install cd .. rm -rf grep -2.5.1a |
35:Groff
123456789101112 | tar xvf $LFS /groff-1 .18.1.4. tar .gz cd groff-1.18.1.4 patch -Np1 -i $LFS /groff-1 .18.1.4-debian_fixes-1.patch sed -i -e 's/2010/002D/' -e 's/2212/002D/' \ -e 's/2018/0060/' -e 's/2019/0027/' font /devutf8/R .proto PAGE=A4 . /configure --prefix= /usr -- enable -multibyte make make install ln -sv eqn /usr/bin/geqn ln -sv tbl /usr/bin/gtbl cd .. rm -rf groff-1.18.1.4 |
36:Gzip
12345678910 | tar xvf $LFS /gzip-1 .3.12. tar .gz cd gzip -1.3.12 . /configure --prefix= /usr --bindir= /bin make make check make install mv - v /bin/ {gzexe,uncompress,zcmp,zdiff,zegrep} /usr/bin mv - v /bin/ {zfgrep,zforce,zgrep,zless,zmore,znew} /usr/bin cd .. rm -rf gzip -1.3.12 |
37:Inetutils
12345678910 | tar xvf $LFS /inetutils-1 .5. tar .gz cd inetutils-1.5 patch -Np1 -i $LFS /inetutils-1 .5-no_server_man_pages-2.patch . /configure --prefix= /usr --libexecdir= /usr/sbin --sysconfdir= /etc --localstatedir= /var \ --disable- ifconfig --disable-logger --disable-syslogd --disable-whois --disable-servers make make install mv - v /usr/bin/ping /bin cd .. rm -rf inetutils-1.5 |
38:Iproute
12345678 | tar xvf $LFS /iproute2-2 .6.20-070313. tar .gz cd iproute-2.6.20-070313 sed -i -e '/tc-bfifo.8/d' -e '/tc-pfifo.8/s/pbfifo/bfifo/' Makefile make SBINDIR= /sbin make SBINDIR= /sbin install mv - v /sbin/arpd /usr/sbin cd .. rm -rf iproute-2.6.20-070313 |
39:Kbd
12345678910 | tar xvf $LFS /kbd-1 .12. tar .bz2 cd kbd-1.12 patch -Np1 -i $LFS /kbd-1 .12-backspace-1.patch patch -Np1 -i $LFS /kbd-1 .12-gcc4_fixes-1.patch . /configure --datadir= /lib/kbd make make install mv - v /usr/bin/ {kbd_mode,openvt,setfont} /bin cd .. rm -rf kbd-1.12 |
40:Less
1234567 | tar xvf $LFS /less-406 . tar .gz cd less -406 . /configure --prefix= /usr --sysconfdir= /etc make make install cd .. rm -rf less -406 |
41:Make
12345678 | tar xvf $LFS /make-3 .81. tar .bz2 cd make -3.81 . /configure --prefix= /usr make make check make install cd .. rm -rf make -3.81 |
42:Man-db
123456789101112131415161718192021222324252627282930313233 | tar xvf $LFS /man-db-2 .4.4. tar .gz cd man -db-2.4.4 mv man /de {_DE.88591,} mv man /es {_ES.88591,} mv man /it {_IT.88591,} sed -i 's,\*_\*,??,' man /Makefile . in sed -i -e '\%\t/usr/man%d' -e '\%\t/usr/local/man%d' src /man_db .conf. in cat >> include /manconfig .h. in << "EOF" #define WEB_BROWSER "exec /usr/bin/lynx" #define COL "/usr/bin/col" #define VGRIND "/usr/bin/vgrind" #define GRAP "/usr/bin/grap" EOF patch -Np1 -i $LFS /man-db-2 .4.4-fixes-1.patch . /configure --prefix= /usr -- enable -mb-groff --disable-setuid make make install cat >> convert-mans << "EOF" #!/bin/sh -e FROM= "$1" TO= "$2" shift ; shift while [ $ # -gt 0 ] do FILE= "$1" shift iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv mv .tmp.iconv "$FILE" done EOF install -m755 convert-mans /usr/bin cd .. rm -rf man -db-2.4.4 |
43:Mktemp
123456789 | tar xvf $LFS /mktemp-1 .5. tar .gz cd mktemp-1.5 patch -Np1 -i $LFS /mktemp-1 .5-add_tempfile-3.patch . /configure --prefix= /usr --with-libc make make install make install -tempfile cd .. rm -rf mktemp-1.5 |
44:Module-init-tools
1234567891011 | tar xvf $LFS /module-init-tools-3 .2.2. tar .bz2 cd module-init-tools-3.2.2 patch -Np1 -i $LFS /module-init-tools-3 .2.2-modprobe-1.patch . /configure make check make distclean . /configure --prefix=/ -- enable -zlib make make INSTALL= install install cd .. rm -rf module-init-tools-3.2.2 |
45:Patch
1234567 | tar xvf $LFS /patch-2 .5.4. tar .gz cd patch-2.5.4 . /configure --prefix= /usr make make install cd .. rm -rf patch-2.5.4 |
46:Psmisc
123456789 | tar xvf $LFS /psmisc-22 .5. tar .gz cd psmisc-22.5 . /configure --prefix= /usr -- exec -prefix= "" make make install mv - v /bin/pstree * /usr/bin ln -sv killall /bin/pidof cd .. rm -rf psmisc-22.5 |
47:Shadow
123456789101112131415161718192021 | tar xvf $LFS /shadow-4 .0.18.1. tar .bz2 cd shadow-4.0.18.1 patch -Np1 -i $LFS /shadow-4 .0.18.1-useradd_fix-2.patch . /configure --libdir= /lib --sysconfdir= /etc -- enable -shared --without-selinux sed -i 's/groups$(EXEEXT) //' src /Makefile find man -name Makefile - exec sed -i 's/groups\.1 / /' {} \; sed -i -e 's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAByes@' \ -e 's@/var/spool/mail@/var/mail@' etc /login .defs make make install mv - v /usr/bin/passwd /bin mv - v /lib/libshadow .*a /usr/lib rm - v /lib/libshadow .so ln -sfv ../.. /lib/libshadow .so.0 /usr/lib/libshadow .so pwconv grpconv useradd -D -b /home sed -i 's/yes/no/' /etc/default/useradd passwd root cd .. rm -rf shadow-4.0.18.1 |
48:Sysklogd
12345678910111213141516171819 | tar xvf $LFS /sysklogd-1 .4.1. tar .gz cd sysklogd-1.4.1 patch -Np1 -i $LFS /sysklogd-1 .4.1-fixes-2.patch patch -Np1 -i $LFS /sysklogd-1 .4.1-8bit-1.patch make make install cat > /etc/syslog .conf << "EOF" # Begin /etc/syslog.conf auth,authpriv.* - /var/log/auth .log *.*;auth,authpriv.none - /var/log/sys .log daemon.* - /var/log/daemon .log kern.* - /var/log/kern .log mail.* - /var/log/mail .log user.* - /var/log/user .log *.emerg * # End /etc/syslog.conf EOF cd .. rm -rf sysklogd-1.4.1 |
49:Sysvinit
12345678910111213141516171819202122232425262728 | tar xvf $LFS /sysvinit-2 .86. tar .gz cd sysvinit-2.86 sed -i 's@Sending processes@& configured via/etc/inittab@g' src /init .c make -C src make -C src install cat > /etc/inittab << "EOF" # Begin /etc/inittab id :3:initdefault: si::sysinit: /etc/rc .d /init .d /rc sysinit l0:0:wait: /etc/rc .d /init .d /rc 0 l1:S1:wait: /etc/rc .d /init .d /rc 1 l2:2:wait: /etc/rc .d /init .d /rc 2 l3:3:wait: /etc/rc .d /init .d /rc 3 l4:4:wait: /etc/rc .d /init .d /rc 4 l5:5:wait: /etc/rc .d /init .d /rc 5 l6:6:wait: /etc/rc .d /init .d /rc 6 ca:12345:ctrlaltdel: /sbin/shutdown -t1 -a -r now su :S016:once: /sbin/sulogin 1:2345:respawn: /sbin/agetty tty1 9600 2:2345:respawn: /sbin/agetty tty2 9600 3:2345:respawn: /sbin/agetty tty3 9600 4:2345:respawn: /sbin/agetty tty4 9600 5:2345:respawn: /sbin/agetty tty5 9600 6:2345:respawn: /sbin/agetty tty6 9600 # End /etc/inittab EOF cd .. rm -rf sysvinit-2.86 |
50:Tar
12345678 | tar xvf $LFS /tar-1 .18. tar .bz2 cd tar -1.18 . /configure --prefix= /usr --bindir= /bin --libexecdir= /usr/sbin make make check make install cd .. rm -rf tar -1.18 |
51:Textinfo
12345678910111213141516 | tar xvf $LFS /texinfo-4 .9. tar .bz2 cd texinfo-4.9 patch -Np1 -i $LFS /texinfo-4 .9-multibyte-1.patch patch -Np1 -i $LFS /texinfo-4 .9-tempfile_fix-1.patch . /configure --prefix= /usr make make check make install make TEXMF= /usr/share/texmf install -tex cd /usr/share/info rm dir for f in * do install -info $f dir 2> /dev/null done cd /sources rm -rf texinfo-4.9 |
52:Udev
12345678910111213141516171819202122 | tar xvf $LFS /udev-113 . tar .bz2 cd udev-113 tar -xvf $LFS /udev-config-6 .3. tar .bz2 install -dv /lib/ {firmware,udev /devices/ {pts,shm}} mknod -m0666 /lib/udev/devices/null c 1 3 ln -sv /proc/self/fd /lib/udev/devices/fd ln -sv /proc/self/fd/0 /lib/udev/devices/stdin ln -sv /proc/self/fd/1 /lib/udev/devices/stdout ln -sv /proc/self/fd/2 /lib/udev/devices/stderr ln -sv /proc/kcore /lib/udev/devices/core make EXTRAS= "`echo extras/*/`" make test make DESTDIR=/ EXTRAS= "`echo extras/*/`" install cp - v etc /udev/rules .d/[0-9]* /etc/udev/rules .d/ cd udev-config-6.3 make install make install -doc make install -extra-doc cd .. install -m644 - v docs /writing_udev_rules/index .html /usr/share/doc/udev-113/index .html cd .. rm -rf udev-113 |
53:Util-linux
1234567891011 | tar xvf $LFS /util-linux-2 .12r. tar .bz2 cd util-linux-2.12r sed -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' -i $( grep -rl '/etc/adjtime' .) mkdir -pv /var/lib/hwclock patch -Np1 -i $LFS /util-linux-2 .12r-cramfs-1.patch patch -Np1 -i $LFS /util-linux-2 .12r-lseek-1.patch . /configure make HAVE_KILL= yes HAVE_SLN= yes make HAVE_KILL= yes HAVE_SLN= yes install cd .. rm -rf util-linux-2.12r |
54:Vim
123456789101112131415161718192021222324252627 | tar xvf $LFS /vim-7 .1. tar .bz2 tar xvf $LFS /vim-7 .1-lang. tar .gz cd vim71 patch -Np1 -i $LFS /vim-7 .1-fixes-1.patch patch -Np1 -i $LFS /vim-7 .1-mandir-1.patch echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src /feature .h . /configure --prefix= /usr -- enable -multibyte make make test make install ln -sv vim /usr/bin/vi for L in "" fr it pl ru; do ln -sv vim.1 /usr/share/man/ $L /man1/vi .1 done ln -sv .. /vim/vim71/doc /usr/share/doc/vim-7 .1 cat > /etc/vimrc << "EOF" " Begin /etc/vimrc set nocompatible set backspace=2 syntax on if (&term == "iterm" ) || (&term == "putty" ) set background=dark endif " End /etc/vimrc EOF cd .. rm -rf vim71 |
55:再次清理系統
123456789 | 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 '{}' ';' logout chroot "$LFS" /usr/bin/env -i HOME= /root TERM= "$TERM" PS1= '\u:\w\$ ' \ PATH= /bin : /usr/bin : /sbin : /usr/sbin /bin/bash --login cd /sources export LFS= /cdrom/lfs-sources/ |
56:Lfs-bootscripts
12345 | tar xvf $LFS /lfs-bootscripts-6 .3. tar .bz2 cd lfs-bootscripts-6.3 make install cd .. rm -rf lfs-bootscripts-6.3 |
57:建立相應的腳本和設備文件 其中的主機名稱和網絡相關的設置請根據實際的狀況進行設置。否則,可能會致使網絡服務使用不正常。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | cat > /etc/sysconfig/clock << "EOF" # Begin /etc/sysconfig/clock UTC=1 # End /etc/sysconfig/clock EOF cat > /etc/inputrc << "EOF" set horizontal-scroll-mode Off set meta-flag On set input-meta On set convert-meta Off set output-meta On set bell-style none "\eOd" : backward-word "\eOc" : forward-word "\e[1~" : beginning-of-line "\e[4~" : end-of-line "\e[5~" : beginning-of- history "\e[6~" : end-of- history "\e[3~" : delete-char "\e[2~" : quoted-insert "\eOH" : beginning-of-line "\eOF" : end-of-line "\e[H" : beginning-of-line "\e[F" : end-of-line EOF cat > /etc/profile << "EOF" # Begin /etc/profile export LANG=zh_CN.UTF-8 export INPUTRC= /etc/inputrc alias ls = "ls --color" export PS1= '\u:\w\$ ' # End /etc/profile EOF echo "HOSTNAME=mylinux" > /etc/sysconfig/network cat > /etc/hosts << "EOF" # Begin /etc/hosts (no network card version) 127.0.0.1 mylinux localhost # End /etc/hosts (no network card version) EOF cd /etc/sysconfig/network-devices && mkdir - v ifconfig .eth0 && cat > ifconfig .eth0 /ipv4 << "EOF" ONBOOT= yes SERVICE=ipv4-static IP=192.168.44.42 GATEWAY=192.168.44.2 PREFIX=24 BROADCAST=192.168.44.255 EOF cat > /etc/resolv .conf << "EOF" # Begin /etc/resolv.conf nameserver 192.168.42.21 nameserver 192.168.42.6 # End /etc/resolv.conf EOF cat > /etc/fstab << "EOF" # Begin /etc/fstab # file system mount-point type options dump fsck # order /dev/hda2 / ext3 defaults 1 1 /dev/hda1 swap swap pri=1 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 devpts /dev/pts devpts gid=4,mode=620 0 0 shm /dev/shm tmpfs defaults 0 0 # End /etc/fstab EOF |
58:編譯內核 若是在創建虛擬機的時候是選擇的BusLogic的SCSI磁盤,那麼應該在Device Drivers->SCSI device support->SCSI lowleveldrivers下加入BusLogic SCSI support的支持,能夠採用編譯到內核來避免未用initrd腳原本加載模塊而致使啓動失敗;若是想支持網絡則應該在Device Drivers->Networking support->Ethernet (10 or 100Mbit)加入AMD PCnet32 PCI support
的支持,能夠採用編譯到內核也能夠編譯成模塊的方式。
123456789101112 | cd /sources tar xvf $LFS /linux-2 .6.22.5. tar .bz2 cd linux-2.6.22.5 make mrproper make menuconfig make make modules_install cp - v arch /i386/boot/bzImage /boot/lfskernel-2 .6.22.5 cp - v System.map /boot/System .map-2.6.22.5 cp - v .config /boot/config-2 .6.22.5 install -d /usr/share/doc/linux-2 .6.22.5 cp -r Documentation/* /usr/share/doc/linux-2 .6.22.5 |
59:配置啓動文件
1234567891011121314151617181920 | grub root (hd0,1) setup (hd0) quit cat > /boot/grub/menu .lst << "EOF" # Begin /boot/grub/menu.lst # By default boot the first menu entry. default 0 # Allow 30 seconds before booting the default. timeout 30 # Use prettier colors. color green /black light-green /black # The first entry is for LFS. title Clean of Linux root (hd0,1) kernel /boot/lfskernel-2 .6.22.5 root= /dev/hda2 EOF mkdir - v /etc/grub ln -sv /boot/grub/menu .lst /etc/grub logout |
四:測試 至此,自定義的Linux已能夠啓動使用了,若是你想加入其它的功能就本身定製使用吧,是否是以爲不是很難呢,固然,要徹底的消化理解是要必定時間的,慢慢來吧,一切都會因努力而更加美好,不是嗎?
本文出自 「虛擬的現實」 博客,請務必保留此出處http://waringid.blog.51cto.com/65148/67355