LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 836|回复: 1

2005.1另类stage1安装法

[复制链接]
发表于 2006-2-24 00:34:33 | 显示全部楼层 |阅读模式
解开个stage1包([color="Blue"]可于这里下载),chroot并emerge sync后,首先设置glibc的locale编译项:
  1. # echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
  2. # nano -w /etc/locales.build
复制代码

删掉已有的locales并加入以下几行:
  1. en_US.UTF-8/UTF-8
  2. zh_CN.GB18030/GB18030
  3. zh_CN.GBK/GBK
  4. zh_CN.UTF-8/UTF-8
  5. zh_CN/GB2312
  6. zh_HK.UTF-8/UTF-8
  7. zh_HK/BIG5-HKSCS
  8. zh_TW.EUC-TW/EUC-TW
  9. zh_TW.UTF-8/UTF-8
  10. zh_TW/BIG5
复制代码

升级gcc(因为2005.1里的stage包还在用gcc-3.3.5)
  1. # mkdir /etc/portage/profile
  2. # echo "sys-devel/gcc-3.3.6" >> /etc/portage/profile/package.provided
  3. # emerge -uav gcc
  4. # gcc-config 6
  5. # source /etc/profile
复制代码

修改/etc/make.conf(可参考这里http://www.gentoo.org/doc/zh_tw/handbook/handbook-x86.xml?part=1&chap=5#doc_chap5),主要是CFLAGS和mirror。USE方面最好只加个"nptl",其他USE等做完此贴的步骤再加也不迟。
将以下的脚本拷到/root里并使之可执行:
  1. # chmod u+x /root/emwrap.sh
复制代码
  1. #!/bin/bash
  2. # Use at yee own risk. It works for me, but then I wrote it.
  3. # Thanks to ecatmur's dep script, gentoo forums, for help_fmt and print_help

  4. # Version 3.0.6 , 12-15-05 Added saveing of the failed to
  5. #  roots dir. Cleaned up and fixed formating.
  6. # Version 3.0.7 Added build TC once flag such that TC is built only once instead  of twice.
  7. #      Added build file and failed file detection. If found emwrap.sh will offer to build them
  8. #      instead of what you were going to do. Ergo failed is no longer moved to /root
  9. #  Removed Portage gcc-config and binutils-config from TC filtering and from TC update
  10. # notification. When they're found they get built
  11. # 1-20-06 Minor updates to heip showing -S and -1 usage. Re-added resume filter to diff_emerge
  12. # 2-1-06 The end of a major rewrite and the addition of several new features includeing adding
  13. # libstdc to the TC  Some minor things to do or not. Better input control? Do I want to trust a script
  14. # to switch gcc?
  15. # 2-13-06 removed tc_filter from sys.lst and wrld.lst in to fix filtering error and save an
  16. # unnessary step. Also fixed TC from runing -se in a -sept case. Added dagurasu suggection for a
  17. # CTRL-C trap.I will no longer be able to build a failed list for when I test :(
  18. # Bumped up Rev to 4.0.1
  19. # Fixed help. Added " exit " to prin_help. 2-18-06

  20. PROG="emwrap.sh"
  21. VERSION="4.0.1"
  22. TAG="cats is rats mit fuzzy tails"
  23. DESC="A wrapper for emerge so you can control toolchain updates"

  24. print_help(){
  25.       cat <<END #|help_fmt
  26.    
  27.       ${GR}${PROG}  v. ${VERSION} ${BL}"${TAG}"${NO}
  28.       ${GR}${DESC}!${NO}

  29. Usage: ${PROG} [OPTION]

  30. Date 4-23-05
  31. Use at yee own risk. It works for me, but then I wrote it.
  32. This wrapper can do 3 things for you:
  33. 1. Test if there is a toolchain, TC, update in "emerge system/world -uD".
  34. 2. If there is and you want to, then you can rebuild all or part of your TC and then
  35.    using an edited list to build the other items scheduled to be updated.
  36. 3. Do the update without updating the TC, toolchain.
  37. Options:
  38.    These first flags are the same as what you use with emerge [options] See "man emerge"
  39.    -h, help   Display this help (default)
  40.    -f   Fetchs files only
  41.    -u   update
  42.    -D   deep   
  43.    -e   Does an  emerge "--emptytree" world/sytem
  44.    -p   Just like pretend in emerge. Works with all other flags.
  45.    -N   Tells emerge to include installed packages that are affected by the new USE flags
  46.    that have changed since the program was built.
  47.    -B/b build packages only or build them as you emerge packages
  48.    resume, -r    Continues emwrap from where it stoped. To use rerun the same command
  49.    and add "r" ${Rd}DONT${Yl} USE EMWRAP.SH FOR ANYTHING ELSE UNTIL YOU RUN THE -r${NO}
  50.    and emwrap will start from where it stopped without haveing to rebuild everything
  51.    already done.
  52.    -K/k   use packages. For use if you have --buildpkg in your /etc/make.conf  or use -B/b
  53.    -G/g use packages from a  PORTAGE_BINHOST server.
  54.    system, -s   "-s" is short for system.The same as "emerge system"
  55.    world, -w    "-w" is short for world. The same as "emerge world"

  56. For use by the script
  57.    -t      Rebuilds the toolchain componets only
  58.    -b      Rebuilds the toolchain and resumeinues the emerge.
  59.    -1      For use with "t" or "b" only builds the TC once.
  60.    -S      This is short for a "emerge system --emptytree" build.
  61.    -W      builds the world files, "emerge world -e", BUT minus the system files.
  62.    failed     builds the files in the failed list.
  63.    nc      Turns off color in the script. You still get color in emerge out put.

  64. The flags are chainable and change whether your doing a system or world emerge and
  65. from -uD, -N, to -e. There is also a pretend mode, -p. Like emerge -p it
  66. shows you what will be emerged. I recomemnd that instead of boldy going forth, add
  67. the -p to the end of the switchs first, to see whats going to be emerged. Then you
  68. can remove it.

  69. Example emwrap.sh -sep ==> emerge system --emptytree -pretend. If you remove the
  70.    -p it    will do a build of all packages in system except for the TC.
  71.    ${Yl}NOTE -se or -S do the same thing${NO}
  72. emwrap.sh -set or -wet ==> updates the entire TC.  If the -b switch is used instead
  73.    of -t then the entire TC is built and then all system/world packages minus
  74.    toolchain files.

  75. Examples
  76.    ${CY}emwrap.sh${NO}  prints help.
  77.    ${CY}emwrap.sh -wuDbp${NO} Checks for updates to the TC and in the world.
  78.    ${CY}emwrap.sh -wuDt${NO}==>  emerge world -uD and only does TC update if any.
  79.    ${CY}emwrap.sh -wuDb${NO}==> updates, if any, the TC and then the world files.
  80.    ${CY}emwrap.sh -f{other flags}${NO} will fetch the files for you.
  81.    ${CY}emwrap.sh system -uDN${NO}==> emerge system -uDN, update deep newuse
  82.    ${Cy}emwrap.sh -Sb1${NO}==> emerge system -e build TC once and then system files

  83. emwrap.sh can "emerge system -e" with or without the TC and remove all packages
  84.    built during the system emerge for a following "emerge world -e". This is a major
  85.    time savings as 130+ packages wont be rebuilt during the world half.
  86.    ${RD}NOTE -d -c -r have been changed${Rd}. -d is now -S, -W takes on the old
  87.    role of -r.-r is now resume and -c has been removed.${NO}
  88.    ${CY}emwrap.sh -Sb${NO} ,builds TC and sytem -e. When it completes run
  89.    ${CY}emwrap.sh -W${NO} ,this picks where -Sb stoped and builds the rest of
  90.    the files in the " world -e ". Why use this, well if you want to break an
  91.    " emerge world -e " up into 2 chunks for two different nights this will do it.

  92. Here are the TC build list used in this wraper when doing updates. The first 3 are
  93.    double builds.
  94.    If linux-headers   TC="linux-headers glibc \$tc_conf binutils gcc glibc binutils gcc"
  95.    If glibc      TC_glb="glibc \$tc_conf binutils gcc glibc binutils gcc"
  96.    If binutils or gcc   TCmini="\$tc_conf binutils gcc binutils gcc"
  97. These are the single build TC list
  98.    If linux-headers   TC1="linux-headers glibc \$tc_conf binutils gcc "
  99.    If glibc      TC_glb1="glibc \$tc_conf binutils gcc "
  100.    If binutils or gcc   TCmini1="\$tc_conf binutils gcc"

  101. The TC build sripts are basicly fall through. If you have a linux-headers update
  102.    then the srcipt will use TC, if its a glibc update then TC_glib and
  103.    if binutils and/or gcc then TCmini. To force a full TC build use -set, -St or
  104.    -wet or -seb, -Sb or -web.

  105. END
  106. exit
  107. }


  108. function color(){
  109.    if [[ $nc != "yes" ]]; then
  110.    #Set up colors
  111.    NO=$'\x1b[0;0m'
  112.    BR=$'\x1b[0;01m'
  113.    RD=$'\x1b[31;01m' Rd=$'\x1b[00;31m'
  114.    GR=$'\x1b[32;01m' Gr=$'\x1b[00;32m'
  115.    YL=$'\x1b[33;01m' Yl=$'\x1b[00;33m'
  116.    BL=$'\x1b[34;01m' Bl=$'\x1b[00;34m'
  117.    FC=$'\x1b[35;01m' Fc=$'\x1b[00;35m'
  118.    CY=$'\x1b[36;01m' Cy=$'\x1b[00;36m'
  119.    COLUMNS=${COLUMNS:-80}
  120.    spaces=$(for ((i=0;i<COLUMNS;++i)); do echo -n " "; done)
  121.    fi
  122. }

  123. #  Varables
  124. bclass="";eargs=""; count="0"
  125. nc="";tc="";do_tc=""tc_once="";do_sys="";do_wrld="";both="";resume="";ftch=""
  126. TIME=10  # sets the time the script displays faild_build info

  127. function info(){
  128.    clear
  129.    cat   <<END
  130.    
  131.    $GR                         Runnig emwrap.sh
  132.    $RdNew$GR if emwrap.sh is run and it detects a $CY"failed' or "build"
  133.    $GR file then it will offer to build them. You can ignor this by not doing
  134.    $GR anything and what you wanted todo will start after 10 seconds.$NO
  135. END
  136. }

  137. function build_info(){
  138. cat <<END
  139.    ${Yl}You can now enter ${RD}" r "${Yl} to resume building. If you dont enter anything
  140.    then the old build file will be deleted.and ${Rd}emwrap.sh $bclass -$eargs${Yl} will continue.
  141.    If you want to stop and scratch your head do a CRTL-C${NO}
  142. END
  143. }

  144. function faild_info(){
  145. cat <<END
  146.    ${Yl}You can now enter ${RD}" f "${Yl} to build the faild file list.If you dont enter anything
  147.    then the faild file will be deleted and ${Rd}emwrap.sh $bclass -$eargs${Yl} will continue.
  148.    You only need to run ${Rd}"emwrap.sh faild"${Yl} after doing a emptytree system or world.
  149.    If you want to stop and scratch your head do a CRTL-C${NO}
  150. END
  151. }

  152. # changing work dir to /tmp/emwrap
  153. function wrk_dir(){
  154.    # change file locations to /tmp/emwrap/{FILES}
  155.    # Changed to explicit directory invoke, because if used to build a system from scratch,
  156.    # ergo a new build, $HOME isnt set and every thing for root is writen to " / ".
  157.    if [ ! -d  /tmp/emwrap ];then
  158.       mkdir /tmp/emwrap;chmod 776 /tmp/emwrap;chown portage:portage /tmp/emwrap;cd /tmp/emwrap
  159.    else cd /tmp/emwrap
  160.    fi

  161.    if [ "$(pwd)" != "/tmp/emwrap" ] ;then
  162.       echo;echo $RD"Did not change to /tmp/emwrap. Bailing out!"$NO;echo
  163.       exit 15
  164.    fi
  165. }

  166. function get_input(){
  167.    read -t $TIME INPUT
  168.    if [ "$INPUT" == "r" ]; then
  169.       resume="yes"
  170.       
  171.    fi
  172. }

  173. function chk_failed_build(){
  174.    if [ "$resume" != "yes" ]; then
  175.       if [[ -e failed || -e build ]]; then
  176.          if [ -s build ]; then
  177.             echo $RD "these remain to build"$NO
  178.             cat build
  179.             build_info
  180.             read -t $TIME INPUT
  181.             if [ "$INPUT" == "r" ]; then
  182.                resume="yes"
  183.             elif [ -z $INPUT ]; then
  184.                echo "   $Yl Input was empty I will resumeinue with emwrap.sh $bclass -$eargs"
  185.                rm /tmp/emwrap/build
  186.             fi
  187.          elif [[ -s failed && ! -e build ]]; then
  188.             echo $RD "these failed to build"$NO
  189.             cat  failed
  190.             faild_info
  191.             if [ "$failed" != "yes" ];then
  192.                read -t $TIME INPUT
  193.                if [ "$INPUT" == "f" ]; then
  194.                   failed="yes"
  195.                elif [ -z $INPUT ]; then
  196.                   echo "   $Yl Input was empty I will continue with emwrap.sh $bclass -$eargs"
  197.                   rm /tmp/emwrap/failed
  198.                fi
  199.             fi
  200.             if [ "$failed" == "yes" ];then
  201.                cat failed > build
  202.                rm failed
  203.                resume="yes"
  204.             fi
  205.          fi
  206.       fi
  207.    fi
  208. }

  209. # For cleaning files. if's to keep rm from complaining
  210. function clean_up(){
  211.    if [ -s failed ] ; then
  212.       echo;echo ${RD} "these failed to build"${NO}
  213.       cat  failed
  214.    elif [[ -e failed && ! -s failed ]]; then
  215.        rm failed
  216.    fi
  217.    if [ -s build ] ; then
  218.       echo;echo ${RD} "these remain to build" ${NO}
  219.       cat build
  220.    elif [[ -e build && ! -s build ]] ; then
  221.       rm build
  222.    fi
  223.    if [ -e sys.lst ] ; then rm sys.lst ; fi
  224.    if [ -e wrld.lst ] ; then rm wrld.lst ; fi
  225.    if [ -e wrld.tmp ] ; then rm wrld.tmp ; fi
  226. }

  227. function getargs(){
  228. if [ $# -eq 0 ]; then
  229.       print_help
  230. fi
  231.    while [[ $1 != "" ]]; do
  232.       if echo $1|grep -v - ; then
  233.          case $1 in
  234.             system   )   bclass="system" ;;
  235.             world   )   bclass="world" ;;
  236.             help   )   print_help ;;
  237.             resume   )   resume="yes" ;;
  238.             nc      )   nc="yes" ;;
  239.             failed   )   failed="yes";;
  240.          esac
  241.       fi

  242.       while getopts ":1bdDefgGhKkNoprSWstuw " OPT; do
  243.          case $OPT in
  244.             s )    bclass="system" ;;
  245.             w )    bclass="world" ;;
  246.             D )    eargs="${eargs}${OPT}" ;;
  247.             e )    eargs="${eargs}${OPT}" ;;
  248.             N )    eargs="${eargs}${OPT}" ;;
  249.             u )    eargs="${eargs}${OPT}" ;;
  250.             g )    eargs="${eargs}${OPT}" ;;
  251.             G )    eargs="${eargs}${OPT}" ;;
  252.             k )      eargs="${eargs}${OPT}" ;;
  253.             K )      eargs="${eargs}${OPT}" ;;
  254.             1 )      tc_once="yes" ;;
  255.             h | \? )print_help ;;
  256.             p )    eargs="${eargs}${OPT}";prtnd="p" ;;
  257.             f )    ftch="f" ;;
  258.             S )    do_sys="yes";bclass="system";eargs="e" ;;
  259.             W )    do_wrld="yes" ;bclass="system";eargs="e";;
  260.             b )    both="yes";;
  261.             r )    resume="yes" ;;
  262.             t )    do_tc="yes" ; Tc="yes";;
  263.             * )    echo block="$block $OPT";;
  264.          esac
  265.       done
  266.       shift
  267.    done
  268. }

  269. function build_count(){
  270. count="0" ; s=$(wc -l build)
  271. for z in $(< build) ;do
  272.    count=$(( count + 1 ))
  273.    echo;echo -n "${Yl}${count} of ${s}"${NO}
  274.    emerge -${ftch} -${prtnd} --oneshot --nodeps =${z} || $1
  275.    grep -v "${z}" build>tmp;cat tmp>build
  276. done
  277. }

  278. # merg_faild records which package fails to emerge buid_count
  279. function emerge_faild(){
  280.    echo "${z}">> failed
  281. }

  282. #TC functions the next 4 functions

  283. # tc_faild bails out of the build_count if emerge error
  284. function tc_faild(){
  285.    echo ${RD}"${z} failed to build. Stoping script."${NO};exit 65
  286. }

  287. function tc_filter(){
  288. awk "!/linux-head|glibc|gcc-[0-9]+|binutils-[0-9]+|libstdc+/"
  289. }

  290. function tc_check(){
  291.    # 1-7-06 removed gcc-config binutils-config from TC update notice.
  292.    #  Removed portage from TC filtering.
  293.    # testing for TC components.
  294.    if grep -Eq linux-h wrld.lst
  295.       then tc="linux-headers"
  296.    elif grep -Eq glibc wrld.lst
  297.       then tc="glibc"
  298.    elif grep -Eq binutils-[[0-9]]? wrld.lst
  299.       then tc="binutils"
  300.    elif grep -Eq gcc-[[:digit:]]? wrld.lst
  301.       then tc="gcc"
  302.    elif grep -Eq libstdc+  wrld.lst
  303.       then tc="libstdc"
  304.    fi
  305.    
  306.    #shows what TC items have updates
  307.    if [[ $do_tc == "yes" || $both == "yes" ]] ; then
  308.       if [ -n "$tc" ] ;then
  309.          echo $RD"ToolChain updates found"$NO;echo
  310.          echo ${Rd}"  $tc"${NO}
  311.          echo $BL"======================================================"$NO
  312.          echo
  313.       else
  314.          echo;echo ${RD}"   No toolchain update "${NO};echo
  315.       fi
  316.       # for getting and building config tools in an TC build.
  317.       bin="0"; gcc="0"; tc_conf=""
  318.       if grep -Eq binutils-[[:alpha:]]? wrld.lst
  319.          then  tc_conf="binutils-config $tc_conf"; fi
  320.       if grep -Eq gcc-[[:alpha:]]? wrld.lst
  321.          then  tc_conf="gcc-config $tc_conf"; fi
  322.    fi
  323. }

  324. function tc_emerge(){
  325.    # added tc-once to build TC once only which is what I do.
  326.    TC="linux-headers glibc $tc_conf binutils gcc glibc binutils gcc libstdc++-v3"
  327.       TC_glb="glibc $(echo $tc_conf) binutils gcc glibc binutils gcc libstdc++-v3"
  328.       TCmini="$(echo $tc_conf) binutils gcc binutils gcc libstdc++-v3"
  329.    TC1="linux-headers glibc $(echo $tc_conf) binutils gcc libstdc++-v3"
  330.    TC_glb1="glibc $(echo $tc_conf) binutils gcc libstdc++-v3"
  331.    TCmini1="$(echo $tc_conf) gcc binutils libstdc++-v3"
  332.    if [[ "${resume}" != "yes" ]];then  #prevents filling the build list after a failed TC resume
  333.       if [[ $tc_once != "yes" ]];then
  334.          case ${tc} in
  335.             linux-headers )  tc_list=$TC;;
  336.             glibc    )  tc_list=$TC_glb;;
  337.             gcc      )  tc_list=$TCmini;;
  338.             binutils    )  tc_list=$TCmini;;
  339.             libstdc    )  tc_list=$TCmini;;
  340.          esac
  341.       else
  342.          case ${tc} in
  343.             linux-headers )  tc_list=$TC1;;
  344.             glibc      )  tc_list=$TC_glb1;;
  345.             gcc      )  tc_list=$TCmini1;;
  346.             binutils   )  tc_list=$TCmini1;;
  347.             libstdc    )  tc_list=$TCmini1;;
  348.          esac
  349.       fi
  350.    fi
  351.    # if for determining if build is empty
  352.    if [ ! -e build  ] || [[ -e build && ! -s build ]];then
  353.       if [ "$resume" != "yes"  ] ;then
  354.          for t in $(echo $tc_list); do
  355.             echo $t>>build
  356.          done
  357.       fi
  358.    fi
  359.    echo $RD"$(< build)"$NO
  360.    build_count tc_faild
  361.    if [ -e tmp ]; then rm tmp ;fi
  362.    echo ${Rd}"End of ToolChain update"${NO};echo
  363. }

  364. # generates the the build list
  365. function wrld_lst(){
  366.     # If for blocking regeneration of list resume or do-tc is used
  367. if [ "$resume" != "yes"  ];then
  368.       emerge $bclass -${eargs}p >wrld.lst
  369.    # checking for blocked packages
  370.    if grep "blocks" wrld.lst ; then
  371.       echo
  372.       cat <<END
  373.    ${Yl}You have packages ${RD}blocking${Yl} each other. To fix run emerge and take care
  374.    of the blockage${NO}
  375. END
  376.       echo
  377.       exit
  378.    fi
  379.    if grep "masked" wrld.lst ; then
  380.       echo
  381.       cat <<END
  382.    ${Yl}You have ${RD}masked${Yl} ebuilds. If its keyword masked add it to /etc/portage/packege.keywords.
  383.    For more info see man emerge.${NO}
  384. END
  385.       echo
  386.       exit
  387.    fi
  388.    cut -f2 -d "]" -s wrld.lst|cut -f1 -d "[" | cut -f2 -d " ">wrld.tmp
  389.    cat wrld.tmp>wrld.lst
  390.    if [ -e wrld.tmp ]; then rm wrld.tmp ;fi
  391. fi
  392. }

  393. # general purpose emerge
  394. function list_emerge(){
  395.    # blocks do_tc from running list_emerge with prntd
  396.    if [[ "$resume" != "yes" ]] ;then
  397.       cat wrld.lst|tc_filter >> build
  398.    fi
  399.    # Now emerge   
  400.    echo;echo -n ${YL}"$(wc -l build)s to emerge "${NO}
  401.    build_count emerge_faild
  402.    if [ -e tmp ];then rm tmp ;fi

  403. }

  404. # This is for the generation of the world files minus the system files
  405. function diff_emerge(){
  406. # stops regerateing the build file if your resumeing build
  407. if [ "$resume" != "yes" ]; then
  408.    # wrld_list already run for system files.
  409.    cat wrld.lst >sys.lst
  410.    # filter out sys files and puts the results into into the build list.
  411.    if  [ "${do_wrld}" ==  "yes" ] ; then
  412.       bclass="world";eargs="e"
  413.       wrld_lst >wrld.lst
  414.       for i in $(< sys.lst);do
  415.          grep -v $i wrld.lst>tmp;cat tmp>wrld.lst
  416.       done
  417.       cat wrld.lst >build
  418.       if [ -e tmp ];then rm tmp ;fi
  419.    fi
  420. fi
  421.    # Now to build what was not removed by removeing the system files
  422.    #echo $GR"$(wc -l build)s to emerge "$NO;echo
  423.    sleep 1
  424.    echo;echo -n ${YL}"$(wc -l build)s to emerge "${NO}
  425.    build_count emerge_faild
  426.    if [ -e tmp ];then rm tmp ;fi

  427. }

  428. # Main where the functions are called and things get done.
  429. trap "exit 1" 1 2 3 15
  430. color
  431. getargs $@
  432. info
  433. wrk_dir
  434. chk_failed_build
  435. wrld_lst

  436. #for doing resume
  437. if [ "$resume" == "yes" ]; then
  438.    list_emerge
  439. fi

  440. # For building the TC
  441.    if [[ "$do_tc" == "yes" || "$both" == "yes" ]];then
  442.       tc_check;
  443.       if [ -n "$tc" ];then
  444.          tc_emerge
  445.       fi   
  446.    fi
  447.    
  448. # For most of the emerges inculding -S
  449.    if [[ "$do_tc" != "yes" && "$do_wrld" != "yes" ]] && [[  "$both" == "yes" || -n "$bclass" ]]; then
  450.       list_emerge   
  451.    fi


  452. # does world --emptytree MINUS the system files
  453.    if [[ "$Tc" != "yes" &&  "$do_wrld" == "yes" ]]; then
  454.       # system files already generated now removal
  455.       diff_emerge
  456.    fi

  457.    
  458. clean_up
  459. exit
复制代码

执行
  1. # /root/emwrap.sh -Sb
复制代码

这个脚本会重建工具链并emerge system,然后就可以删除旧的gcc了:
  1. # emerge -aC =sys-devel/gcc-3.3*
复制代码
完成后便可以从handbook里的第7章继续下去了。

注:脚本来自:http://forums.gentoo.org/viewtopic-t-282474.html
发表于 2006-2-25 18:16:53 | 显示全部楼层
不错,我也去试试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表