一、下载部分:
1,http://distfiles.gentoo.org/releases/x86/autobuilds/20160607/install-x86-minimal-20160607.iso
2,http://distfiles.gentoo.org/releases/x86/autobuilds/20160607/stage3-i686-20160607.tar.bz2
3,http://gentoo.aditsu.net:8000/snapshots/portage-20160602.tar.bz2
4,https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.6.2.tar.xz
5,https://wiki.gentoo.org/wiki/Handbook:Main_Page/zh-cn 是gentoo的中文手册
相關說明:
install-x86-minimal-20160607.iso是用來啟動安裝的,算是啟動盤吧!
stage3-i686-20160607.tar.bz2是gentoo的基本系統,包括目錄結構、常用軟件、開發套件,如Glibc、Binutils、GCC、Coreutils等。
portage-20160602.tar.bz2軟件的快照,與包管理相關的。
linux-4.6.2.tar.xz是內核,版本可以隨便選擇,现在4.x.x是比较新的内核。
新建一臺虛擬機。
如題,我用的是vmware, 可供選擇的還有virtualbox等, 默認你已安裝好了。現在我們來新建一臺虛擬機。
我們在這個步驟時裝入install.iso :
二、安装部分
2.1 前奏
虚拟机创建完毕,然后点选啟动吧。 LiveCD启动完毕,进入cd预设好的linux环境。好,让我们輸入命令看看是否獲取到IP,如有开启了DHCP服務,一般都已自動配置IP了,然后再修改密碼,默認是沒有密碼的,改了密碼后打開ssh服務,然后就可以winscp之類的工具把文件(stage,portage,kernel)上傳過去,不過傳輸文件前要把硬盤mount起來,因為文件最終是要放到硬盘空間里。mount硬盤前要把硬盤分區,然后格式化成ext3文件系統。當然文件系統可以是ext4、reiserfs等,各人喜歡吧,這里不討論文件系統優劣。
命令:
$ ifconfig (查看網絡接口卡)
$ passwd (更改密碼)
$ /etc/ini.d/sshd start (開啟ssh服務)
2.2 分區与格式化
# fdisk /dev/sda (我的是sda,其它有可能是hda之類的,看用什么接口類型,SCSI一般會是sd打頭,IDE是hd開頭)
格式化與mount:
$ mke2fs -j /dev/sda1 (建立ext3文件系統, ext3是ext2的擴展,多了日志功能,所以用mke2fs -j 命令)
$ mount /dev/sda1 /mnt/gentoo
$ df -h (看看我們的硬盤是不是可以用了呢)
2.3上传或下载
上傳stage和portage,kernel,這步聚我使用winscp來完成。如果前面没进行下载步骤,则可直接在livecd里敲入wget命令下载。
#cd /mnt/gentoo
# wget http://mirrors.kernel.org/gentoo/releases/x86/autobuilds/current-iso/stage3-i686-20110426.tar.bz2
# wget http://mirror.mcs.anl.gov/pub/gentoo/snapshots/portage-20110517.tar.bz2
2.4解压
接下來先把stage3解壓到當前的目錄中:
# tar xvf stage3-i686-20110405.tar.bz2 (確定你是在gentoo目錄下,就是硬盤所在目錄吧)
tar后帶的參數是要打印解壓的細節,而為什么不帶壓縮包屬性參數啦,因為新版本會自動檢測我们的包是bz2還是gz。
我們再把portage解壓到/usr目錄下:
#tar xvf portage-latest.tar.bz2 -C /mnt/gentoo/usr
之后可以把 stage3-i686-20110405.tar.bz2 和 portage-latest.tar.bz2 刪除
#rm -rf portage-latest.tar.bz2 stage3-i686-20110405.tar.bz2
三、配置文件
這時候需要修改一下 etc/mak.conf , 注意路徑哦,這個make.conf是你之前解壓出來的,完整路径是/mnt/gentoo/etc/make.conf。
我們需要在make.conf里添加一個源, 源是什么呢? 它是下載和同步軟件包的源頭, 國內163, sina等網站現在都架設了這類型的服務。 我就采用163的源吧,感覺速度也過得去。這里不討論什么國內國外的區別,大家用得著就可以了
$cat > etc/make.conf << eof
CFLAGS="-O2 -march=i686 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="i686-pc-linux-gnu"
GENTOO_MIRRORS="http://mirrors.163.com/gentoo/"
SYNC="rsync://mirrors.163.com/gentoo-portage"
MAKEOPT="-j8"
eof
MAKEOPT后面的參數"-j8"參照實際cpu數,一般是有幾個核就設多少個核加1。實際上你設個2就可以,作用并非很明顯。
接下來配置域名服務器:
$cat > /mnt/gentoo/etc/resolv.conf << eof
nameserver 8.8.8.8
nameserver 8.8.4.4
eof
nameserver可以加多個。
然后是網絡配置, 這兩步其實是可以在后面配,不過先配也沒所謂。
$cat > /mnt/gentoo/etc/confi.d/net << eof
config_eth0=( "192.168.7.44 netmask 255.255.255.0 /
brd 192.168.7.255" )
routes_eth0=( "default via 192.168.7.254" )
eof
ip根椐實際情況配置吧,不要照抄。
四、chroot
好,接下來到了激動人心的一步啦,那就是chroot, 不過chroot還要做一下設置。
$mount -t proc none /mnt/gentoo/proc
$ mount --rbind /dev /mnt/gentoo/dev
proc是一種文件系統,存在在內存中,mout proc的意思就是說接下來chroot后可以和livecd共用相同的proc系統,proc里面的內容基本上由內核提供。 而mount dev 的意思呢? 當然也是為了chroot后可以和livecd使用同樣硬件設備,最常用的如硬盤。
#chroot /mnt/gentoo /bin/bash
#env-update
>> Regenerating /etc/ld.so.cache...
# source /etc/profile
# export PS1="(chroot) $PS1"
ok,現在你就已經進入你所要安裝的gentoo 環境中。
我們再改一下密碼, 因為我們之前的密碼并不適用于這個環境中。
# passwd
我們還要做什么嗎? 當然要呀,還有很多事沒做。
我們先得同步一下portage,敲入命令:
#emerge --sync
如果覺得比較慢,可以用更快的命令代替:
# emerge --sync --quiet
sync需要好幾分鐘啦,同步完畢后可能有什么new之類的提示,打入命令解決它:
# eselect news read all
然后我們需要在系統的使用目的上做出決擇,先看看有什么可選擇的:
#eselect profile list
Available profile symlink targets:
[1] default/linux/x86/10.0 *
[2] default/linux/x86/10.0/desktop
[3] default/linux/x86/10.0/server
[4]
.
.
.
[15]
默認是1, 推薦也是1,你可以選擇其它, 區別不大, 主要是安裝的包的版本會有出入,有些軟件包可能無法解決依賴關系,但無需關心。更改的方法是:
#eselect profile set 2 (或者3,4,5,6-15)
接下來設置本地化,和裝windows差不多。
#nano -w /etc/locale.gen
nano和windows的寫字板一樣,直接改了就成,我把en_US.UTF-8 前面的#去了,意思是我使用英語環境吧。
然后來個命令就可設置完畢:
#locale-gen
設置時區:
#cp /usr/share/zoneinfo/Shanghai /etc/localtime
五、linux内核
基本系統設置完畢,好了,到了最重要一步, 編譯內核哦, linux本身是內核, 我們之前所使用的軟件全是基于內核的,沒內核我們運行不了。有人會問,那我們現在沒裝內核,為什么能運行哦? 其實我們現在所在的環境是livecd提供的哦, 我們之前用來啟動的install cd包含了linux的內核, 比如我們之前的mount proc目的就是要共享這個內核數據, mount -o bind /dev 就是要和這個內核的駆動表作個綁定。
編譯內核對于初學者來說可能聽起來很高深,其實我們這樣編譯內核和在windows里安裝軟件并無多大區別,區別可以在于多了一些自定義的選項。有些初學者可能會以為編譯內核需要很專業的知識,又或者會了編譯內核是件多么了不起的事, 其實不然,編譯內核并不能說明你能學到多少,懂多少, 實際上編譯內核可能不會提高丁點兒的專業知識。
要想提高水平,最好是把內核的幫助文檔看一遍,你會使你對cpu,對計算機的架構有一定的認識,然后亦會加深你對linux的系統架構的了解,為你進一步學習內核打下基礎。這里就不再討論內核的問題了,我將會在以后的筆記里聊一下我對內核的看法,我是如何學習內核的。
gentoo編譯內核其實蠻簡單的,還記得文章開始時下載的
linux-2.6.39.tar.bz2吧,無錯,這就是我們要裝的內核,我這樣安裝算是走了一步稍為麻煩的路子了,gentoo有更簡單的方法安裝。
#emerge gentoo-sources
# emerge genkernel
#genkernel all
哈哈,就是這三步曲就把內核裝好。 emerge又出場啦,大家還記得前面的命令 emerge --sync 吧,呵呵, emerge 是gentoo世界里的萬能之神, 不過它只不過是個是相當于倉庫管理員的角色罷了, emerge沒選項是默認是安裝動作, 如emerge genkernel,意思是要安裝genkernel這個軟件包,它會先把這個包下載到本地/usr/portage/distfiles這個目錄下,然后根椐/usr/portage里面相關規則進行解壓與編譯,編譯過程中/etc/make.conf能起到關鍵作用,里面的USE=""是對軟件包編譯可選功能的控制。我們安裝軟件時,一般不會直接用emerge裸奔,而是在后跟參數 -av, 這樣我們就能看到這個包是否安裝過?有什么功能可選。而emerge -s strings則是查找portage里包含有strings的軟件包,然后把該軟件包名稱打印出來。 如果有人用過FreeBSD,一定會覺得它們之間很相似,據說gentoo的包管理是模仿FreeBSD的。
手動安裝內核的過程也較為簡單,先是把內核解壓到/usr/src目錄去,為什么要解壓到這里呀? 因為習慣嘛,你可以解壓到任何地方。
# tar xvf linux-2.6.39.tar.bz2 -C /usr/src
# ln -s /usr/src/linux-2.6.39 /usr/src/linux
用ln -s建立一個軟連接,軟硬連接的區別是硬的能生兒育女,軟的不能,所能軟的當它的源刪了就什么都沒有了,我所認為的建一個軟連接的目的是為了方便編譯不同版本的內核,但實際上并沒能帶給多少的方便。
進入linux目錄:
# cd linux
# make mrproper (比make clean 清理得干凈, config文件、備份等都會被清除,也就說運行后,代碼足夠的干凈)
# make menuconfig (好吧,讓我們盡情的選擇吧。值得關心的就是驅動了,也就是Device Drivers里面的分枝慢慢挑吧。至于如何配置,大家本著學習的態度,我們應該把不知道的每項的help都捉摸一遍,這才會有所幫助 這里我就不多說了。下次再做個有關如何配置的筆記。)
#make bzImage (配置完畢,用這命令生成內核吧,眾所周知這是壓縮過的內核,它在啟動時會自解壓。現在的命令比較智能化了,它在 make image前如發現有更新的改到,又或者沒有make過,它就會make一遍,所以我們無須關心是否要不要編譯一次。接下來應該是make modules 但我把功能都都做到內核里了,且沒有其它需要的module,所以就make modules了,等需要功能擴展時再make,反正內核已選Enable loadable module support, 這樣以后要開發模塊時,就不用重新編譯內核。在這里大家要弄明白概念,module可能是內核的一部分,但內核和module是各自獨立的 兩個東西,內核不依賴module存在,但module依賴于內核。)
闲话initrd
如果是用genkernel all 生成的內核,又或者ubuntu,readhat等發行版,又或者我們的install cd,都會有一個initrd, 那么它是要做什么的呢?為什么我們手工編譯的內核沒有這個東東呢? 我們可以說initrd是一個包含著某些模塊文件的包,包里面還有一些基本應用程序,它可以作為一個根文件系統被加載到內存中去,用于無盤操作,亦可以要來加載特定的驅動供我們的內核使用。 為什么我們自已編譯內核時不需要呢?那就是因為我們知道我們的計算機用什么驅動了,且已編譯到內核里面去啦,所以就不需要這個東東了。當然,這個東東有很多特別的用途,如果我們用usb設備做根文件系統時,制作一個initrd能幫助到我們的內核順利的mount上usb硬盤。initrd技術還大量應用于堪入式的產品中。至于initrd制作也不算復雜,準備好文件后用cpio就能制作,麻煩的是準備文件的過程。 這里提到initrd旨在給大家一個初步的了解,深入的討論又是另外一個話題了,如果可能會在另個的筆記里探討。
我們把內核復制到/boot目錄下,工作就算是完成了,但gentoo的安裝并沒有結束,我們還要做最后一步安裝工作,我們需要一個叫啟動選擇器的東東,就是俗稱為boot loader的大俠,它幾乎無所不在,除非真的是單干的機器,就是單片機之類啦,要不你離不開boot loader大俠的幫助。我們要把內核啟動起來,第一步工作就是要把內核裝載到內存里,如何裝載呢? 這就是boot loader的能力了,boot loader加載內核后就會讓出對系統的統治地位,所以說它大俠,就是因為它不迷戀權位,內核接掌最高領導人的職位后,會一直到系統死機,也就是終生制啦。不過在它的統治下,我們可以自由的方便的與它打交道,至于自由到什么程度呢? 那就要看你對它的認識有多深了。
Boot Loader
我們選用grub這個boot loader作為系統的引導者吧,因為它比lilo友好,亦因為它無處不在。
# emerge grub
gentoo很多時候都是emerge的舞臺,我們就看它表演吧, 不一會它就把grub搞定了,但我們還要把grub安裝到硬盤的第一個扇區中,也是要裝到大名鼎鼎的MBR里,我們可以稱MBR為超級塊,BIOS是系統的開國皇帝,而它的繼位者必定是在MBR里產生的,如GRUB。
# grub (運行grub)
setup(hd0) (安裝到MBR里)
quit (退出)
然后我們需要構造一個配置文件給grub , 文件里提供內核的選單, 這樣才完善grub選擇器的功能。
# cat > /boot/grub/grub.conf << eof
default 0
timeout 2
title Gentoo Linux
root (hd0,0)
kernel /boot/bzImage root=/dev/sda1
eof
bzImage 根據實際情況寫,它的來源就在/boot目錄下,其實一般名字都叫vmlinuz, 如果是genkernal生成的就叫kernel-genkernel-xxx ,大家可以看清楚哦, 如果是genkenel的還應該用initrd哦, 如下:
# cat > /boot/grub/grub.conf << eof
default 0
timeout 2
title Gentoo Linux
root (hd0,0)
kernel /boot/kernel-genkernel-xxx root=/dev/sda1
initrd /boot/initramfs-genkernel-xxx
eof
還有一個配置文件是我們必須關注,就是/etc/fstab
# cat > /etc/fstab << eof
# <fs> <mountpoint> <type> <opts> <dump/pass>
/dev/sda1 / ext3 noatime 0 1
eof
Gentoo包管理
OK, 我們的gentoo總算安裝完畢, 以后的事是emerge的世界了, 下面有些常用的命令我們有需要熟識。
emerge –sync 同步portage
emerge -uD world 升级整个系统
emerge <PackageName> 安装软件包
emerge <PackageName> -f 下载指定软件包安装所需文件
emerge <PackageName> -pv 查看安装指定软件包的依赖性及use flags
emerge -C <PackageName> 卸载软件包
euse -E <use-flags> 设置允许use flag(修改/etc/make.conf中的USE)
euse -D <use-flags> 设置禁止use flag(修改/etc/make.conf中的USE)
euse -i <use-flag> 查询use flag描述
eix <RegExp> 搜索软件包
eix -I 列出系统中已安装的软件包
equery files <PackageName> 列出已安装包的文件
equery belongs <FileName> 查询已安装的指定文件属于哪个包
ebuild <xxx.ebuild> digest 生成摘要文件
ebuild </var/db/pkg/xxx/xxx.ebuild> config 初始化设置
注:要使用euse、equery需要安装gentoolkit包,eix需要安装eix包。