[转]Gentoo 快速安装手册(GCC4修订版)

发表于:2007-05-26来源:作者:点击数: 标签:
[转]Gentoo 快速安装手册(G CC 4修订版) 本文是在台湾gentoo社群翻译的gentoo快速安装手册基础上修改补充而成。首先感谢对岸的前辈们做的辛苦工作! 其中大部分内容保留繁体原文,简体部分的变动请各位谅解。 1. 快速安裝参考文件 安裝光碟 ISO 檔放在 Gento
[转]Gentoo 快速安装手册(GCC4修订版)

本文是在台湾gentoo社群翻译的gentoo快速安装手册基础上修改补充而成。首先感谢对岸的前辈们做的辛苦工作!
其中大部分内容保留繁体原文,简体部分的变动请各位谅解。

1. 快速安裝参考文件

安裝光碟 ISO 檔放在 Gentoo 镜像。這些不同 CD 间的详细说明在 Gentoo 商店可以取得。 universal 光碟提供所有快速,而且不需要网路安裝 Gentoo 所需的东西。套件光碟是非必要的,裡面包含了預先編譯好的套件,像是KDE,GNOME,OpenOffice ,Mozilla,Evolution,還有其他等等。
推荐使用 Gentoo 的minimal 光碟来启动机器,iso在mirror的 releases/x86/current/installcd/ 目录下可以找到。如果您希望和我一样使用reiser4作为主要的文件系统,建议去下载一个支持Reiser4的liveCD来安装系统,请先看这里 http://gentoo-wiki.com/HOWTO_Install_Gentoo_with_Reiser4_enabled_using_Lxnay%27s_Gentoo_RR4_LiveCD
如果你是从当前gentoo系统升级安装,可以跳过前面的准备步骤,直接看“开始安装gentoo”。

使用 Universal 光碟開機後,按下 <F1> 或/且 <F2> 查看有那些開機參數可以用。按下 <ENTER> 繼續啟動預設的核心。你最後會看到一個提示符號。

原始碼一覽表1.1: 一開始的設定
# date (確定你的時間和日期是正確的,如果不是的話,使用 date MMDDhhmmCCYY 設定)
# modprobe module_name (非必要 - 載入需要的模組)
# net-setup eth0 (設定網路)
# fdisk /dev/hda (分割硬碟)
# cfdisk /dev/hda (这个比较简单些)

建议的分割方式是使用 ext2 (Reiserfs) 分割出一塊 100 mb 的開機分割區,你實體記憶體兩倍大的置換分割區,其他的就以 ReiserFS (Reiser4 FS) 分割成根目錄。

使用mke2fs (Ext2),mke2fs -j (Ext3),mkreiserfs (ReiserFS) ,mkfs.xfs (XFS),mkfs.jfs (JFS) 若您使用Reiser4的光蝶,其中包含了mkfs.reiser4(Reiser4FS) 還有 mkswap (置換分割區) 來初始化分割區。例如說:mke2fs -j /dev/hda3。

接下來是掛載分割區以及解壓縮合適的 stage 檔案。

原始碼一覽表1.2: 準備安裝
(啟動置換分割區) # swapon /dev/hdax
(掛載根目錄) # mount /dev/hdax /mnt/gentoo
(建立開機分割區掛載點) # mkdir /mnt/gentoo/boot
(掛載開機分割區) # mount /dev/hdax /mnt/gentoo/boot
(切換到掛掛載點) # cd /mnt/gentoo
(解壓縮 stage 壓縮檔...) # tar -xvjpf /mnt/cdrom/stages/stage<你要用的 stage>.tar.bz2
(或是 下載最新的壓縮檔...) # links http://www.gentoo.org/main/en/mirrors.xml
( ... 然後解壓縮) # tar -xvjpf stage<你要用的 stage>.tar.bz2
(非必要:解壓縮 portage tree) # tar -xvjf /mnt/cdrom/snapshots/portage-*.tar.bz2 -C /mnt/gentoo/usr
(建立distfiles目录档) # cd /mnt/gentoo/usr/portage; mkdir distfiles
(非必要:選擇鏡像站) # mirrorselect -a -s4 -o | grep 'GENTOO_MIRRORS=' \
>> /mnt/gentoo/etc/make.conf
(?#125;製名稱伺服器資訊) # cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
(掛載 proc 檔案系統) # mount -t proc none /mnt/gentoo/proc
(變換根目錄到新的環境) # chroot /mnt/gentoo /bin/bash
(設定必須的環境變數) # env-update; source /etc/profile

注意点:
1. 不要使用GRP套件;
2. stage可以下载任意一个,但是其实从stage2或者stage3所花费的时间反而最少;
3. 若文件系统采用Reiser4,在mount分区时,需要指定文件系统类型, 例如“#mount -t reiser4 /dev/hda2 /mnt/gentoo”;
4. 根分区要最先mount;


現在開始安裝 Gentoo:

原始碼一覽表1.3: 安裝 Gentoo
(設定 USE,CFLAGS 還有 CXXFLAGS。由 Stage1 安裝也可以改變 CHOST) # nano -w /etc/make.conf
我的make.conf如下:

Code:

# These settings were set by the catalyst build script that automatically built this stage
# Please consult /etc/make.conf.example for a more detailed example
CFLAGS="-O2 -march=athlon-mp -fomit-frame-pointer -pipe -momit-leaf-frame-pointer -fno-ident -fforce-addr"
CHOST="i686-pc-linux-gnu"
#CXXFLAGS="$ -fvisibility-inlines-hidden"
CXXFLAGS="$"
LDFLAGS="-Wl,-O1"
ACCEPT_KEYWORDS="~x86"
SYNC="rsync://rsync.de.gentoo.org/gentoo-portage"
#SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"
GENTOO_MIRRORS="http://gentoo.mirrors.pair.com/ http://prometheus.cs.wmich.edu/gentoo/ http://mirror.pacific.net.au/linux/Gentoo/ http://gentoo.kems.net http://mirror.gentoo.gr.jp http://gentoo.gg3.net"
#FETCHCOMMAND='/usr/bin/proz --no-getch -s $ -P $'
PORTDIR_OVERLAY="/usr/portage /live/portage"
#USE="static bootstrap java nptl -ia64 -ppc -mips cairo readline -fortran -doc multitarget multislot -ipv6 pcmcia unicode utf-8 opengl xml2 mad stoke zh_CN nptlonly hal dbus cjk -qt -kde acc alsa fbcon bitmap-fonts cups 3dnow 3dnowext mmxext mp mmx sse mtrr"
USE="nptl nptlonly -ipv6 -qt -kde -doc nls cjk"
AUTOCLEAN="yes"
FEATURES="autoaddcvs autoconfig ccache cvs strict sfperms"
#FEATURES="buildpkg distcc "
#PORTAGE_BINHOST=""
LANGUAGE="zh_CN.UTF-8:zh_CN:zh_CN.GBK:en_US:en_US.UTF-8"
#LANG="zh_CN.UTF-8"
VIDEO_CARDS="AGP_VIA"
CLEAN_DELAY=3
EMERGE_WARNING_DELAY=5
# folow is config for distcc
#MAKEOPTS="-j6"
#DISTCC_HOSTS="localhost 203.148.3.75 192.168.2.213"

注意:
1. 设置CFLAGS前请先确认你的CPU类型和支持的参数。
#cat /proc/cpuinfo
2. CFLAGS中的-march=athlon-mp 原本为 -mcpu=i386 ,在编译gcc4时,必须修正为 “-march=arch -mtune=arch”。二后面的cpu类型应当与你自己的相符,可选的有"athlon-xp, i686 ,pentume4 , pentume3 , pentume4-m " 等等。
3. 优化参数 “-O2”也可以设置成“-O1”,也许你以前听说过用“-O3”获得最好的性能效果,但在编译GCC4.x环境时,暂时不要使用O3,“-Os”是一个安全的可选参数。
4. 其中#CXXFLAGS="$ -fvisibility-inlines-hidden"只有当你的GCC版本大于3.4.3时才可以启用。由于gentoo官方的liveCD还是在使用gcc3.3.5,所以请暂时使用#CXXFLAGS="$"。
5. 其中的LDFLAGS="-Wl,-O1"可以使编译处理更加快速,但是这个选项是可供选择的,你可以把它注释掉。
6. USE的可能设置非常丰富,但是如果你不希望从一开始就把xorg等桌面都编译进去,请先使用最小范围的设定。我仅设定了USE="nptl nptlonly -ipv6 -qt -kde -doc nls cjk" 。nptl是一个LinuxThreads的替代品,使您机器的性能上一个台阶,在编译glibc时将用到。相关测试结果和讨论可以去BIM的developer论坛看看。“nptlonly”是最合适的,可以处理掉glibc多余的编译,缩短编译时间。而更加细致的USE设定我们将在/etc/portage/packege.use文件中控制。
7. AUTOCLEAN="yes"设定可以自动清理/var/tmp/portage下的临时文件。
8. FEATURES的设定中要注意"autoaddcvs ccache cvs strict ",cvs的设定可以使您的编译永远保持最新,autoaddcvs会自动下载相关ebuild的cvs patch。 ccache的设定是在编译时启用cache,这也许会在编译时额外占用你1-2G的硬盘空间。而“strict”参数是对portage的一个安全检查。
9. 如果你的周围有很多已经安装好的linux系统,你也许希望利用distcc来加速编译。又或许你希望得到编译后的而进制tbz包,以便于以后的快速安装,你可以加入"buildpkg"。
10. 其中CLEAN_DELAY=3和EMERGE_WARNING_DELAY=5可以缩短编译包前后的警告时间。

使用/etc/portage下的文件来控制编译:
默认的情况下,/etc/portage下面只有一个set的空目录。我们需要自己在portage下新建三个文档:packege.use (用于控制各个ebuild的USE参数), packege.keywords (用于当前编译版本控制), packege.unmask (用于解放被官方mask掉的非稳定版本)。
我的 package.unmask 内容如下 :
Code:

>=sys-libs/glibc-2.3.5.20050722
>=sys-devel/gcc-4.0.1
>=dev-lang/python-2.4-r3
>=sys-devel/binutils-2.16
>=x11-base/xorg-x11-6.8.99
=x11-libs/ecore-9999
=x11-libs/evas-9999
>=x11-libs/qt-4.0.0

我的 package.keywords 内容如下 :
Code:

=sys-devel/binutils-2.16.1 -*
>=sys-libs/glibc-2.3.5.20050722 -*
sys-libs/libstdc++-v3 ~x86
>=dev-lang/python-2.3.5 ~x86
=sys-devel/gcc-4.0.1 -*
>=x11-libs/qt-4.0.0_rc1-r2 -*

注意:
1. 其中glibc必须是2.3.5.2005xxxx的snapshot版本,这是专门针对GCC4.x使用的版本。
2. 其中binutils也必须是2.16.1的snapshot版本。
3. 我的python已经设定使用python2.4.1以上版本。
4. 这里我的QT设定为4.0.0以上版本,QT4.0已经可以用GCC4.X编译,但是kde的部分包还需要QT3.x,所以如果你使用KDE,请不要急于强制使用QT4。

我的 package.use 内容如下 :
Code:

sys-libs/glibc multilib userlocales nls nptl nptlonly -doc nomalloccheck
net-dialup/rp-pppoe -X
net-dialup/ppp -gtk
sys-devel/libperl ithreads berkdb
dev-lang/perl ithreads berkdb
sys-devel/gcc multislot multitarget multilib fortran -objc
sys-devel/binutils multilib multislot
x11-terms/xterm unicode truetype
x11-base/xorg-x11 truetype-fonts opengl mmx cjk 3dnow bitmap-fonts -type1-fonts
app-text/ghostscript -cups
mail-client/mutt cjk crypt imap mbox nls slang nntp ssl
sys-libs/slang cjk unicode
gnome-base/gnome-applets -apm acpi
app-editor/nano slang unicode
sys-libs/ncurses gpm minimal unicode
dev-util/dialog unicode
www-client/mozilla-firefox gnome mozsvg java mozxmlterm xinerama
sys-apps/dbus mono
gnome-base/gnome-vfs hal howl
x11-terms/xterm toolbar truetype unicode
x11-libs/gtk+ jpeg tiff
app-portage/eix bash-completion
sys-kernel/morph-sources fuse supermount suspend2
app-arch/tar bzip2

注意:
1. glibc中的 “userlocales” 需要另外设定/etc/locales.build,可以参考论坛中的相关帖子;
2. perl的 “ithreads ”是让 perl 在以后升级时可以对其自身进行编译;
3. ncurese中的“gpm”是鼠标支持,但是如果第一次直接用GCC4编译gpm可能会出现错误,建议先用gcc3.x编译 gpm ,然后再用GCC4重新编译;
4. eix是一个快速搜索portage的工具,加上bash-cpmletion可以象bash中一样开启自动补完功能;
5. tar的参数中使用了“bzip2”,让tar动作默认使用bzip2;
6. 多数包都加上“unicode nls cjk”的设定;

gentoo中的多国语言环境是Glibc在编译时完成的,所以我们要编辑/etc/locales.build来时之产生中文环境。
我的 /etc/locales.build 内容 :
Code:

en_US/ISO-8859-1
en_US.UTF-8/UTF-8
zh_CN/UTF-8
zh_CN.UTF-8/UTF-8
zh_CN.GBK/GBK
zh_CN.GB2312/GB2312
zh_TW/BIG5
zh_TW.UTF-8/UTF-8

现在我们可以更新套件目录树。
#emerge sync

(只適用 Stage1 :bootstrap) # cd /usr/portage ;scripts/bootstrap.sh
(適用 Stage1,Stage2:安裝基礎系統)
如果你是从stage2开始,首先要用gcc3.x编译更新bootstrap过程中的几个组件。
Code:

#emerge binutils automake libstdc++-v3 m4 autoconf flex sed make gcc-config gnuconfig
# source /etc/profles
#emerge gmp kbd
#emerge gcc4.0.1 -O

注意:
1. 如果你的/etc/portage/package.use中的ncurese开启了gpm,则在编译gcc4之前也要编译一次gpm。而gmp是gcc4必须的。
2. kbd首先用gcc3.x编译一次。
3. 如果你使用gcc3.3.5的stage开始,gcc4第一次编译时必须独立编译,否则会依赖glibc-2.3.5.20050722,而这个glibc版本不能用gcc3.4.x以下版本编译。
4. binutils和 gcc-config必须在切换gcc4之前更新完毕,libstdc++-v3最好也在切换到GCC4之前编译。

在gcc4.0.1编译完成后,我们就可以安全切换到GCC4了。
先察看当前的gcc有哪些版本
#gcc-config -l
切换到新的gcc
#gcc-conifg [num]
更换后用 # gcc -v 察看当前GCC版本。
然后再次更新环境
Code:
#source /etc/profiles


现在我们已经开始使用GCC4.0.1编译了,首先我们要让GCC4自身编译一次。
Code:

#emerge gcc -O
#emerge glibc
#emerge binutils automake libstdc++-v3 m4 autoconf flex sed make gcc-config gnuconfig

前面的步骤完成后,我们就需要重新更新整个环境
#source /etc/profiles
这个的这个GCC4.0.1才算是真正的GCC4,ok,我们现在就继续编译所有system的包,当然最好是
Code:

#emerge -e world


注意:
1. 在编译所有的ebuild之前,我都希望你可以用 emerge -pvt来检查其中的参数设定;
2. 如果你是从当前系统更新,那么前面的步骤就可以省去一点,至少那些binutils automake libstdc++-v3 m4 autoconf flex sed make gcc-config gnuconfig的更新就可以免去了。
3. emerge -e world的步骤可以将emerge -e system和stage1中的包都包含进去,如果你怕太花时间。可以简单emerge -e system



現在我們設定必須的資訊:

原始碼一覽表1.4: ?#123;整設定檔
(設定時區) # ln -sf /usr/share/zoneinfo/<適合的時區檔> /etc/localtime
(編輯 fstab 檔) # nano -w /etc/fstab


底下是一個 /etc/fstab 範例(不要直接照抄):

原始碼一覽表1.5: /etc/fstab
Code:
 
# <fs>                  <mountpoint>    <type>          <opts>                  <dump/pass>
/dev/hda1       /boot           ext2(reiserfs)            defaults,noatime        1 2
/dev/hda7               none            swap            sw                      0 0
/dev/hda2               /               reiserfs(reiser4)        defaults,noatime                 0 1
/dev/hda3               /home               reiserfs(reiser4)        defaults,noatime                 0 1
/dev/hda5               /live               reiserfs(reiser4)        defaults,noatime                 0 1
/dev/hda6               /dump               reiserfs(reiser4)        defaults,noatime                 0 1
/dev/cdroms/cdrom0      /mnt/cdrom      auto            noauto,user             0 0
none                    /proc           proc            defaults                0 0
none                    /dev/shm        tmpfs           nodev,nosuid,noexec     0 0


繼續安裝 Linux 核心:

原始碼一覽表1.6: 安裝核心
(安裝核心原始嗎) # emerge <這裡輸入核心套件名稱>
(使用 genkernel 設定核心...) # emerge genkernel; genkernel --menuconfig all
(或 (1) 手動設定核心) # cd /usr/src/linux; make menuconfig;
( (2) 包含 VM fs, /proc fs, tmpfs,reiserfs,以及reiser4,suspend2)
( (3) 編譯核心)
(適用 2.4 核心)# make dep && make clean bzImage modules modules_install
(適用 2.6 核心)# make && make modules_install
( (4) ?#125;製核心) # cp arch/i386/boot/bzImage /boot; cp System.map /boot

我使用morph和cko内核
相干设置待续...

現在安裝你可能想要的程式:

原始碼一覽表1.7: 安裝重要系統程式
(安裝 system logger; 可以選擇的:sysklogd,metalog,msyslog,syslog-ng) # emerge syslog-ng
(讓 systemlogger 開機時自動啟動) # rc-update add syslog-ng default
(安裝 cron; 可以選擇的:vixie-cron, dcron, fcron) # emerge vixie-cron
(讓 cron 開機時自動啟動) # rc-update add vixie-cron default
(如果你使用 genkernel:安裝 hotplug) # emerge hotplug coldplug
(如果你使用 genkernel:讓 hotplug 開機時自動啟動) # rc-update add hotplug default
(只適用 非 ext2,ext3 使用者; 可以選擇的:reiserfsprogs, xfsprogs, jfsutils) # emerge reiserfsprogs reiser4progs
(非必要:安裝 DHCP 客戶端程式) # emerge dhcpcd
(領域名稱啟動指令稿) # rc-update add domainname default
(安装电源管理) # emerge acpi acpid
(讓 acpid開機時自動啟動) # rc-update add acpid default

如果你需要其他的核心模組,現在是安裝他們的時候:

原始碼一覽表1.8: 安裝其他的核心模組
# emerge pcmcia-cs (或 nforce-net,nforce-audio,e100,e1000,ati-drivers,rp-pppoe)
# VIDEO_CARDS="yourcard" emerge x11-drm (適用 ATI Radeon 9200,Rage128以上,Matrox,Voodoo 和起他的顯示卡)


完成你的 Gentoo 系統設定:

原始碼一覽表1.9: 完成系統設定
(設定 root 密碼) # passwd
(建立使用者) # useradd 你的名字 -m -G users,wheel,audio -s /bin/bash
(設定使用者密碼) # passwd 你的名字
(設定主機名稱) # echo mymachine > /etc/hostname
(設定領域名稱) # echo mydomain.com > /etc/dnsdomainname
(設定 hostsfile,例如:"127.0.0.1 localhost mymachine") # nano -w /etc/hosts
(設定基本系統設定;參閱註解) # nano -w /etc/rc.conf

原始碼一覽表1.10: 設定網路
(設定網路; 使用 dhcp 的話應該設定 iface_eth0="dhcp") # nano -w /etc/conf.d/net
(加入開機時要啟動的模組) # nano -w /etc/modules.autoload.d/kernel-<版本>
(只適用非 PCMCIA:開機時自動啟動網路介面) # rc-update add net.eth0 default
(如果你有多個網路介面:)
(1) 建立每個介面的啟動指令稿) # ln -s /etc/init.d/net.eth0 /etc/init.d/net.ethx
(2) 開機時自動啟動,如果不是 PCMCIA) # rc-update add net.ethx default
(只適用 PCMCIA:確認 /etc/conf.d/pcmcia 以及開機自動載入 PCMCIA) # rc-update add pcmcia default


現在安裝開機管理員

原始碼一覽表1.11: 安裝及設定 GRUB
# emerge grub
# grub
Code:

grub> root (hd0,0)
grub> setup (hd0)
grub> quit

# nano -w /boot/grub/grub.conf
Code:

default 0
timeout 15
splashimage=(hd0,0)/grub/splash.xpm.gz

title=Gentoo Linux
  root (hd0,0)
  #使用 genkernel 的人:
  kernel /kernel-<核心版本> root=/dev/ram0 init=/linuxrc real_root=/dev/hda2 ramdisk=8192 vga=773 vedio=vesa:1024x768@72
  initrd /initrd-<核心版本>
  # 不是使用 genkernel 的人:
  kernel /kernel-<核心版本> root=/dev/hda2  vga=773 vedio=vesa:1024x768@72

原始碼一覽表1.12: 安裝及設定 LILO
# emerge lilo
# nano -w /etc/lilo.conf
Code:

boot=/dev/hda
prompt
timeout=50
default=gentoo

image=/boot/kernel-<核心版本>
  label=gentoo
  read-only
  #使用 genkernel 的人:
  append="init=/linuxrc real_root=/dev/hda2 ramdisk=8192 vga=773 vedio=vesa:1024x768@72 "
  root=/dev/ram0
  initrd=/boot/initrd-<核心版本>
  #不是使用 genkernel 的人:
  root=/dev/hda2 resume2=/dev/hda7 vga=773 vedio=vesa:1024x768@72


注意:
1. 使用suspend2功能的,要在kernel行加入 resume2=swapwhere
Code:
resume2=/dev/hdax

更新lilo:
# /sbin/lilo


現在卸載所有分割區然後重開機:

原始碼一覽表1.13: 完成然後安裝 GUI
(離開 chroot) # exit; cd /
(卸載所有分割區) # umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo
(重開機;移除光碟機中的 universal 光碟) # reboot
(開機後:)
(只適用 ADSL 使用者) # adsl-setup

原文转自:http://www.ltesting.net