歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> [轉]Gentoo 快速安裝手冊(GCC4修訂版)

[轉]Gentoo 快速安裝手冊(GCC4修訂版)

日期:2017/3/6 15:28:10   编辑:關於Unix
[轉]Gentoo 快速安裝手冊(G CC 4修訂版) 本文是在台灣gentoo社群翻譯的gentoo快速安裝手冊基礎上修改補充而成。首先感謝對岸的前輩們做的辛苦工作! 其中大部分內容保留繁體原文,簡體部分的變動請各位諒解。 1. 快速安裝參考文件 安裝光碟 ISO 檔放在 Gentoo [轉]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

Copyright © Linux教程網 All Rights Reserved