
                    ԴһСLinuxϵͳʵƪ
                                       
Greg O'Keefe, gcokeefe@postoffice.utas.edu.au

   200009µ0.8
     _________________________________________________________________
   
   ¾ǴԴдһСLinuxϵͳĲ˵ [1]Ӽ
   Bashʾ(From PowerUp to Bash Prompt)һ֣ҽǷ
   뿪ԱʹǸ̶ΪлڴҪϵͳǷǳС
   ģҲ׼ΪƷʹãͷʼһʵ;
   ϵͳGerard Beekmans׫д [2]Linuxֵʵָƪ (Linux
   From Scratch HOWTO)
     _________________________________________________________________
   
1. Ҫ߱

2. ļϵͳ

3. MAKEDEV(豸)

4. ں

5. Liloϵͳ

6. Glibc

7. SysVinitʼű

8. Ncurses

9. Bash

10. Util-linux (getty login)

11. Sh-utils

12. ȶ

13. Ϣ

     * 13.1 С
     * 13.2 Դ
       
14. Administrivia

     * 14.1 Ȩ(Copyright)
     * 14.2 ҳ
     * 14.3 ķ
     * 14.4 л¼
     * 14.5 ޶ʷ¼
     * 14.6 δƻ(TODO)
     _________________________________________________________________
   
1. Ҫ߱

   ҪװһLinux׼Сñ(RedHat)һϣȻ ʹ
   һϴһµLinuxϵͳҽҪϵͳ Ϊ
   Ŀ(target)ʹϵͳϵͳΪԴͷ(source) ɱ
   Դͷ(source)ͬͬʱʹõԴ(source code) Ŷ:)
   
   ˣҪһ̨Ļܣ뾡ʹһ̨ û
   ҪͷĻʹһѾڵ Linuxϵͳ
   ΪԴͷϵͳҲƼַʽ© ָ
   ĳЩпܻϵͳϰװһЩûбҪ Ķп
   ᵼ²ݺͳͻ
   
   ͵PCӲ󲿷ֵ486߸ĻͣBIOSһЩ 
   ƣûа취ȡӲ̳ǰ512֮Ŀռ䣮Ȼ 
   Linux˵ʲô⣬ΪֻҪLinuxܹˣʹ Linux
   ԼĴIOԹBIOSĵãΪܹЩͻܹ Linux
   ôLinuxں˱Ӳ̵ǰ512֮ǰĳλã ô
   ͻ׼һȫǰ512׷Χڵ Ӳ̷
   Ϊ/bootķͿκλã ⴦ص
   Ӳ̵ʲôλˣ
   
   һҴϵͳʱʹõԴͷϵͳСñ6.1(RedHat 6.1) Ұ
   װ˻ϵͳ
   
     * cpp (C++)
     * egcs (ǿC)
     * egcs-c++ (ǿC++Ա)
     * patch (򲹶)
     * make ()
     * dev86 (豸ļ)
     * ncurses-devel (ncurses⿪)
     * glibc-devel (glibc⿪)
     * kernel-headers(ںԴͷļ)
       
   һװX WindowӴϵͳMozillaԱɵĶĵ 
   ʵǱҪģҿ֮ʱԴͷϵͳʹ 350
   ׵Ĵ̿ռ(ǶһЩһΪʲô)
   
   ֮ʱĿϵͳռ650״̿ռ䣬ֵеԴ 
   ;ļռȽϽգӦÿ ֮
   ִһmake cleanʱļȻˣҶ ҲеԾģ
   
   ׼ҪϵͳԴЩڱ 
   ЩԴԴҵߴӹʻҵ һ
   վλڰĴǵľվĵַ
   
     * MAKEDEV (豸) [3] һ [4]
     * Lilo (Linux) [5], [6]Ĵ.
     * Linuxں˰(Kernel) ʹ [7]ҳоٵľվ òҪʹ
       [8] վأΪЩطͨǳתģ [9]Ĵ
     * GNU libc 䱾Լliuxthreads̸߳ӿµַص
       [10] [11]Ĵ
     * GNU libcӿ ܻҪlinuxthreads̸߳ӿlibcrypt
       ӿ⣮ libcryptûǸطҵǾΪڷƵ
       ԭ ôͿԴŪ [12]libcryptܸӿ⣮ ͨ
       linuxthreads̸߳ӿlibcǷͬһطģ
     * GNU ncurses [13] [14]Ĵ
     * SysVinit (ʼű) [15] [16]Ĵ
     * GNU Bash () [17] [18]Ĵ
     * GNU sh-utils (߰) [19] [20]Ĵ
     * util-linux (Linuxù߰) [21]ĳط [22]ĴǱ
       agettylogin
       
   ܽһ£Ҫľǡ
     * һֱ̨400׺700׶ĻܻҪһ
       Щ
     * һLinux׼(ƩһRed Hat)Ͱװʽ(Ʃһ)
     * оٵԴtar
       
   ҼٶԼװԴͷϵͳòæ￪ʼҼٶԴͷ
   ϵͳѾװˣ
   
   СĿĵһ̱ʹںȻ̣Ϊûҵ
   initʼҲ˵ǵðװһں˺ͰװliloΪ ˳
   װliloҪĿϵͳ/devĿ¼µ豸ļ liloҪʵ
   ײĴ̴ȡдMAKEDEV Щ豸ļĽ
   (ȻֻҪԴͷϵͳиƳ ײͶ
   Ŷ)ҪǣҪһļ ϵͳеЩ
   
2. ļϵͳ

   ǵϵͳҪװļϵͳϵģǵʹmke2fs 
   ļϵͳȻصĳطҽǹص/mnt/target Ŀ¼
   ĲУҼٶĿ¼ˣΪ˽ʡıʱ䣬
   /etc/fstabļһԱÿԴͷϵͳʱܹ Զ
   Ŀ¼ϣ
   
   Ŀϵͳ/mnt/targetϵжͻᱻ 
   /Ŀ¼ϣ
   
   ҪĿϵͳϽ̶Ŀ¼ṹ"ļνṹ׼(
   FHS File Heirarchy Standard)" [23]ļϵͳһ˽ 飬
   ֻҪcdлĿ¼ĿϵͳصĵطȻ󾡹ִ 
   

        mkdir bin boot dev etc home lib mnt root sbin tmp usr var
        cd var; mkdir lock log run spool
        cd ../usr; mkdir bin include lib local sbin share src
        cd share/; mkdir man; cd man
        mkdir man1 man2 man3 ... man9

   ΪFHS׼ʹ󲿷ֲֵҳ(man page)λôϲһ£
   Ҫһӡ
   

        cd ..; ln -s share/man man

3. MAKEDEV(豸)

   ҪԴõĿϵͳ/usr/srcĿ¼森ˣٸ Ӱɣ
   Ŀϵͳǹ/mnt/targetطtar Ƿ/root棬
   ôҪľǡ
   

        cd /mnt/target/usr/src
        tar -xzvf /root/MAKEDEV-2.5.tar.gz

   ȻͰЩtarƵҪ⿪ǵĵطˣǧԺŶ;->
   
   װʱͨǰװʹõϵͳϣ
    ôΪҪ/mnt/targetļϵͳ(root
   filesystem)ҪЩװطͬвͬĴ
   ʽ˵MAKEDEV豸Ҫǡ
   
        ROOT=/mnt/target make install

   еREADME˵ļINSTALLװ˵ļвЩѡ
    ִ./configure --help鿴˵
   
   鿴һMAKEDEVеMakefileļ е
   õROOTģִͨman ./MAKEDEV.man 鿴һֲҳ
   ôõģᷢԼ豸 ʽִcd
   /mnt/target/devȻ./MAKEDEV generic ʹlsΪ
   Щ豸ļɣ
   
4. ں

   һںˣҼǰںµģҾͳ
   ˵ ˣҪںѾ׼õĻôҪװliloͻף뷵
   ص Ŀϵͳusr/srcĿ¼ȻǶ⿪LinuxںԴ룮Linux Դ
   (cd linux)Ȼʹϲķʽںˣmake menuconfig
   ԼһЩôΪԼһû ģںˣѾ
   ģ飬ô͵ñ༭Makefileļ ҳINSTALL_MOD_PATH
   Ϊ/mnt/target
   
   ִmake depmake bzImageˣģ ִ
   make modulesmake modules_installں ӳ
   arch/i386/boot/bzImageϵͳӳļSystem.map ƵĿϵͳ
   bootĿ¼/mnt/target/boot棬Ȼ׼װ ϵͳliloˣ
   
5. Liloϵͳ

   LiloһСɵĽűQuickInstliloԴ ѹĿ
   ϵͳԴĿ¼/mnt/target/usr/src棬Ȼִи ű
   ROOT=/mnt/target ./QuickInstѯһЩ װlilo
   ⣮
   
   мǡΪѾROOTϵͳΪĿϵͳˣش ʱ
   ļͬصģ統ѯĬĸں ʱ
   ĻشӦ/boot/bzImage /mnt/target/boot/bzimageŶҷ
   űиС ʾ˵
   

        ./QuickInst: /boot/bzImage: no such file

   ʾˣµģ
   
   ǸQuickInst(boot sector)ںδΪأ ʱ
   ϣѡԴͷϵͳĿϵͳ ͬһ̨
   ϵͳǻϣҪʹ liloϵͳںˣ
   ô϶Ϊһأ һС⣬liloһ˫
   Linuxϵͳ DOSģһϵͳϵlilo.confļ
   ݿ ܻĲ
   

prompt
timeout = 50
default = linux

image = /boot/bzImage
        label  = linux
        root   = /dev/hda1
        read-only

other = /dev/hda2
        label = dos

   ôװģô¼(MBRmaster boot record)Ϳ
   BIOSȡأȻMBRliloһʾ
   ʾdosliloͻhda2¼ͼDOS
   
   Ҫͷһģhda2¼Ӧһlilo
   ¼֮⣬ҲQuickInstѯҪװǸLinux 
   lilo밲װliloȻ밲װliloͻ 
   밲װںˣῴliloʾ
   
   ˵QuickInstѯð(boot sector)ŵʲôط ʱ
   ͻشĿϵͳڵķ˵ǡ/dev/hda2
   
   ޸Դͷϵͳϵlilo.confļôе 
   ӡ
   

other = /dev/hda2
        label = target

   ޸ϣִliloװLILOӦÿԵһĿϵͳˣ
   
6. Glibc

   һҪװinitͬLinuxϼȫĳһ initʹ
   GNU CԿglibcṩ⺯ȵð װϣ
   
   GlibcһܴҺܸӵǸ͵Ĵ8ڴ386sx/16
    ϣû90Сʱɱ빤Ǵ64ڴ
   (Celeron) 433ֻ33ӣֻ8ڴ(ٵ˴
   )ĻǾ ÿా׼ɣ
   
   glibcİװĵڲͬĶĿ¼룮ܹ
   ٴα룬ΪԸĿ¼룮ҲôΪ
   Ϊ ʡԼ265׵Ĵ̿ռŶ!
   
   ƽһglibc-2.1.3.tar.gz(汾)tarѹ
   /mnt/target/usr/srcĿ¼森ǵðѸӿҲѹ glibc
   Ŀ¼森cd glibc-2.1.3ȻĿ¼
   glibc-crypt-2.1.3.tar.gzglibc-linuxthreads-2.1.3.tar.gz tar
   ⿪
   
   ǾͿɱĿ¼ѡִmakeͰװglibcˣЩ
   ʹùԼĶһĵȷʺ״
   ȻʼǰҪִdf鿴һ»ж ʣռ䣮
   ڱ벢װglibcִ֮һο ռ
   ض
   
        cd ..
        mkdir glibc-build
        ../glibc-2.1.3/configure --enable-add-ons --prefix=/usr
        make
        make install_root=/mnt/target install

   עˣǻбķ֪һװʲôط
   
7. SysVinitʼű

   벢װSysVinitִдǷǳ֮˵ģ͵һΣ͸ 
   ɣٶѾѹҽSysVinitԴĿ¼ˡ
   
 cd src
 make
 ROOT=/mnt/target make install

   ⻹кܶinitصĽűSysVinitһЩ ķű
   ԸֹװˣSysVinitԴ вεز
   debian/etcģֻҪִ cd ../debian/etc; cp
   -r * /mnt/target/etcֱӰ ǸƵĿϵͳetcĿ¼ˣ
   Ȼˣ ڸ֮ǰ鿴һ£
   
   ֮Ŀϵͳں˾ͻinitһжøλˣ ʱ
   ǽűУΪûbash ִЩű
   init᳢ִgetty ûgettyɹУȷ
   ûĴ
   
8. Ncurses

   ҪһBashbashҪncurses⣬ 
   ȰװncursesԴtermcapıĻĻƣ ͬʱͨ
   ֧termcapṩԣΪӵһ³ ϵͳҾ
   ǽֹʽtermcapͷҪʹ termcapĽϵӦ
   ܻ᲻ϵ鷳Ϊˣٻ ֪ʲôʹʲô
   Ҫãô± ncurses⣬ʹtermcap֧֣
   
   ʹõǡ
   
        ./configure --prefix=/usr --with-install-prefix=/mnt/target --with-shar
ed --disable-termcap
        make
        make install

9. Bash

   Ϊ˰bashװԭΪôĵطһ˺ܶʱ˴Ķ ˼
   ԼϵسԺͳνǧడ˵ʹõѡǡ
   
 ./configure --prefix=/mnt/target/usr/local --exec-prefix=/mnt/target --with-cu
rses

   һѾ벢װbash֮Ҫһӣ cd
   /mnt/target/bin; ln -s bash shΪűͨͷһ ôдġ
   
#!/bin/sh

   ûôһӣôĽűͲУΪǻȥѰ
   /bin/sh/bin/bash
   
   Ը⣬ҲԵʱһΣע⵽űһȷʵ
   ˣȻûܵ¼(login)Ϊûаװgetty loginЩ
   
   
10. Util-linux (getty login)

   util-linuxagettyloginҪ ܵ¼ϵ
   ͳ(log in)͵õʾ(bash prompt)ڰװ֮ Ŀϵͳ
   /sbinĿ¼Ϊagettyһӵ gettygettyUnixϵͳ
   бΪӦôǸ طĳ֮һӵҪǿڸ
   inittab agetty
   
   util-linuxʣµһǸðı룮
   more򣬶ûmake̸more Ŀϵͳһָncurses
   5ӣԴͷϵͳָ ncurses 4ӣһŬ˷
   ѵģ
   
   Ŀϵͳ׼һļ/etc/passwdlogin ¼ͨ
   ѯļȷǷ¼ģΪ˴ֻ һϵͳ
   ǿֻøϵͳû͹ˣҲҪκ !! ֻҪĿϵͳ
   ļ/etc/passwdһмɡ
   
root::0:0:root:/root:/bin/bash

   еͨð(:)ָģҷֱû(user id) 
   ܴ(password)û(user number)ûȺ(group number)
   ûʵ(user's name)ûĿ¼(home directory)ȱʡ
   (default shell)
   
11. Sh-utils

   һGNU sh-utilsǴʱҪ
    õΨһĳstty/etc/init.d/rcõ 
   ڸıмͽʼмĽűʵһ ù
   sttyȴǴӺδõˣʹGNU Ǹ
   ΪͷҪĶЩʹ ϵͳԸã
   
   ˣϣӦӵһܹʾ¼ϵͳˣ
   ``root''ͻˣ˺ܶ飬û һ
   lsƷ涼Щʲô TABͻ
   õˣϵͳУֵ 飮
   
12. ȶ

   Ǵһôϵͳ˵ģҪܹʵ ֵ
   Ҳʲô£Ҫ֮һӦʹøļϵͳ(root
   filesystem)ԿɶдʽSysVinitиĽű
   /etc/init.d/mountall.sh森ִһmount -a 
   /etc/fstabеĿָķʽ Ŀϵͳ
   etc/rc2.dĿ¼һS05mountall ķӣ
   
   ܻῴűõδװҵ 
   װ֮ο [24]С(Random Tips)һСڣ˽
    
   
   /etc/init.dűǴ󲿷ֶӦðκ ϵͳ
   森һһҪȷһ֮ǰ 
   
   ļνṹ׼(File Heirarchy Standard)ο [25]ļϵ
   ͳ(Filesystem)һڣ һбǸ/bin/sbin
   ȷѾоٵװϵͳˣþ 
   POSIXĵ
   
   ӴˣϵͳӸҪǸ¶ˣԽЩѱ
   ߣ˵gccmakeЩӽȥԽãһЩ 깤ˣͿ
   ĿϵͳϢͻԽԽˣ
   
13. Ϣ

13.1 С

   LinuxϵͳʹRPMװһthingy ֪
   ԴԴôʹ
   
        rpm -qif `which thingy`

   СñRedHatԴ̣ôͿʹװԴˡ
   
        rpm -i /mnt/cdrom/SRPMS/what.it.just.said-1.2.srpm

   tarԼκRedHatŵ/usr/src/redhat/SOURCES Ŀ¼
   森
   
13.2 Դ

     * һڴԴСʵָ(mini-howto) [26]
       ССʵָ(Software Building mini-HOWTO).
     * ⻹һڴһ׿ҴһLinuxϵͳʵָϣ 
       ĸΪڴһʵӦüֵϵͳһʵϰ 뿴
        [27]Linuxϵͳֵʵָƪ(The Linux From Scratch HOWTO)
     * [28]Unixļϵͳ׼(Unix File System Standard) һUnix
       ϵͳ׼ [29]ӣ׼һUnixϵͳʲôô
       ʲôλ Լԭ/bin/sbinȵĿ¼С Ҫ
       ĿҪһСȫϵͳô׼һ õĲο
       
       
14. Administrivia

14.1 Ȩ(Copyright)

   İȨУGreg O'Keefeӭѭ [30]GNUͨù֤(GNU
   General Public Licence)ĸ ǰ踶ʹãƣɢ
   ޸ıģ ĵʹ˱ĵȫĻ߲֣л¼
   Ҿˣ
   
   This document is copyright (c) 1999, 2000 Greg O'Keefe. You are
   welcome to use, copy, distribute or modify it, without charge, under
   the terms of the [31]GNUͨù֤(GNU General Public Licence).
   Please acknowledge me if you use all or part of this in another
   document.
   
14.2 ҳ

   µİ汾ڴҵ [32]From Powerup To Bash Prompt
   
   ĵ [33]Linuxratȡ
   
14.3 ķ

   ҺӶǶ֪κۣĽͽ飮дŸҡ
   [34]Greg O'Keefe
   
14.4 л¼

   ἰĲƷӦߵ̱꣬ڴһл
   
   ԱлΪǵİƪʵָϣ
   
   Michael Emery
          ע⵽Unios
          
   Tim Little
          ṩ˹/etc/passwdһЩ
          
   sPaKr on #linux in efnet
          ䷢syslogdҪ/etc/services֧Լܸ ʹö
          ``rolling your own''Դϵͳ
          
   Alex Aitkin
          ҶVicoԼ``verum ipsum factum''(Աһ
          ) ע⣮
          
   Dennis Scott
          ҵʮƼ
          
   jdd
          ָһЩƴд
          
14.5 ޶ʷ¼

  0.8
  
     * 汾"From PowerUp to Bash Prompt(ӼӵBashʾ)"ʵ
        ƪ
       
14.6 δƻ(TODO)

     * תΪdocbookʽ

References

   1. http://www.linuxdoc.org/HOWTO/From-PowerUp-To-Bash-Prompt-HOWTO.html
   2. http://www.linuxfromscratch.org/
   3. ftp://tsx-11.mit.edu/pub/linux/sources/sbin
   4. ftp://sunsite.unc.edu/pub/Linux/system/admin
   5. ftp://lrcftp.epfl.ch/pub/linux/local/lilo/
   6. ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/boot/lilo/
   7. http://www.kernel.org/
   8. ftp://ftp.kernel.org/pub/linux/kernel
   9. ftp://kernel.mirror.aarnet.edu.au/pub/linux/kernel/
  10. ftp://ftp.gnu.org/pub/gnu/glibc
  11. ftp://mirror.aarnet.edu.au/pub/gnu/glibc
  12. ftp://ftp.gwdg.de/pub/linux/glibc
  13. ftp://ftp.gnu.org/gnu/ncurses
  14. ftp://mirror.aarnet.edu.au/pub/gnu/ncurses
  15. ftp://sunsite.unc.edu/pub/Linux/system/daemons/init
  16. ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/daemons/init
  17. ftp://ftp.gnu.org/gnu/bash
  18. ftp://mirror.aarnet.edu.au/pub/gnu/bash
  19. ftp://ftp.gnu.org/gnu/sh-utils
  20. ftp://mirror.aarnet.edu.au/pub/gnu/sh-utils
  21. ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/
  22. ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/misc
  23. file://localhost/tmp/zh-sgmltools.415/BuildMin.txt.html#FHS
  24. file://localhost/tmp/zh-sgmltools.415/BuildMin.txt.html#finding
  25. file://localhost/tmp/zh-sgmltools.415/BuildMin.txt.html#FHS
  26. http://www.linuxdoc.org/HOWTO/Software-Building.html
  27. http://www.linuxfromscratch.org/
  28. ftp://tsx-11.mit.edu/pub/linux/docs/linux-standards/fsstnd/
  29. http://www.pathname.com/fhs/
  30. http://www.gnu.org/copyleft/gpl.html
  31. http://www.gnu.org/copyleft/gpl.html
  32. http://learning.taslug.org.au/power2bash
  33. mailto:linuxrat@gnuchina.org
  34. mailto:gcokeefe@postoffice.utas.edu.au
