转-學習安裝gentoo (vmware 下安裝)

http://blog.csdn.net/mikayong/article/details/6446244


一、下载部分:

 

1,http://mirrors.kernel.org/gentoo/releases/x86/autobuilds/current-iso/install-x86-minimal-20110426.iso

2,http://mirrors.kernel.org/gentoo/releases/x86/autobuilds/current-iso/stage3-i686-20110426.tar.bz2

3,http://mirror.mcs.anl.gov/pub/gentoo/snapshots/portage-20110517.tar.bz2

4,http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2

 

相關說明:

install-x86-minimal-20110426.iso是用來啟動安裝的,算是啟動盤吧!

stage3-i686-20110426.tar.bz2是gentoo的基本系統,包括目錄結構、常用軟件、開發套件,如Glibc、Binutils、GCC、Coreutils等。

portage-20110517.tar.bz2軟件的快照,與包管理相關的。

linux-2.6.39.tar.bz2是內核,版本可以隨便選擇,一般都用2.6.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包。­