從零開始安裝Gentoo

前段時間搞過一次Gentoo,最終以失敗告終,現(xiàn)在正好有時間卷土重來。
配置過程相當復雜,需要很強的耐心,但整個過程下來后,會學到很多東西。
官方文檔 參考@Gary Wu

  • 準備工作
    • 下載minimal鏡像
官方鏡像地址:http://distfiles.gentoo.org/releases/
網(wǎng)易鏡像地址:http://mirrors.163.com/gentoo/releases/
    
截止目前最新的是install-amd64-minimal-20180222T214502Z.iso

minimal鏡像和stage3下載地址:
http://mirrors.163.com/gentoo/releases/amd64/autobuilds/current-stage3-amd64/

portage下載地址: 
http://mirrors.163.com/gentoo/releases/snapshots/current/portage-20180220.tar.bz2 

注:如果網(wǎng)絡較好可以通過網(wǎng)絡下載stage3和portage。如果提前下載需要拷貝到U盤里,需要的時候掛載解壓。
我這邊網(wǎng)絡比較好,選擇在安裝的過程中從網(wǎng)上下載。

- 制作引導U盤

把iso刻錄到U盤里,用來啟動引導,這里推薦使用UltraISO,啟動->寫入硬盤鏡像
- 記錄服務器硬件配置
因為在安裝的過程中要自己編譯內(nèi)核,需要配置一些硬件驅(qū)動信息,主要是CPU、顯卡、網(wǎng)卡,可以自行查看,配置選好的話可以節(jié)省很多編譯時間和內(nèi)核資源。

- 安裝基本系統(tǒng)
從U盤啟動,在boot處輸入: gentoo dopcmcia ,根據(jù)引導進入命令行模式,接下來安裝基本系統(tǒng)。
- 分區(qū)
建議分區(qū)規(guī)劃
bios_grub        BIOS啟動分區(qū),官方是2M,我這里給9M  
boot    300M     啟動系統(tǒng)目錄,掛載目錄: /mnt/gentoo/boot
swap   8192M     
/     剩余All      掛載目錄: /mnt/gentoo

注:系統(tǒng)使用BIOS引導方式,所以不需要EFI分區(qū)

分區(qū)格式(MBR或GPT)直接影響到后邊的GRUB引導,本例是MBR分區(qū)(BIOS引導方式)
livecd # parted
select /dev/sda   #選擇操作的磁盤
mklabel gpt    #分區(qū)格式使用MBR
mkpart primary 1M 10M   #BIOS啟動分區(qū)必須有,否則grub安裝出錯
name 1 grub
set 1 bios_grub on   #設置BIOS分區(qū)可啟動

mkpart primary 10M 310M   #boot系統(tǒng)分區(qū)
name 2 boot
set 2 boot on    #設置boot分區(qū)為可啟動

mkpart primary 310M 8502M   #swap分區(qū)
name 3 swap
mkpart primary 8502M -1  #剩余全部給根分區(qū)
name 4 bootfs
p     查看分區(qū)
quit  退出parted
----------------------------------------------
格式化
mkfs.ext2  /dev/sda1  格式化預留空間分區(qū)
mkfs.ext2  /dev/sda2  格式化boot分區(qū)
mkswap /dev/sda3        格式化swap分區(qū)
mkfs.ext4 /dev/sda4     格式化根分區(qū)
----------------------------------------------
掛載到/mnt/下
mount /dev/sda4 /mnt/gentoo   先掛載根分區(qū)
mkdir -p /mnt/gentoo/boot  創(chuàng)建boot掛載目錄
mount /dev/sda2 /mnt/gentoo/boot  掛載boot
swapon /dev/sda3   掛載swap
分區(qū)相關-知識點總結:

(1)如果是MBR分區(qū)的磁盤,使用以下方法創(chuàng)建ESP:
parted創(chuàng)建的boot_grub和boot分區(qū), 使用mkfs.ext2格式化
-----------------------------------------------------------------------------------------------
(2)關于parted set命令的flag類型,可參考官方文檔: https://www.gnu.org/software/parted/manual/html_node/set.html

- 配置網(wǎng)絡
配置網(wǎng)絡主要是用來下載portage和stage,如果已經(jīng)下載到U盤里,直接掛載U盤拷貝到/mnt/gentoo/os目錄下。
使用如下命令來配置網(wǎng)絡:
ifconfig   查看網(wǎng)絡標識
net-setup eno16777728  根據(jù)提示輸入IP地址、broadcast、netmask、gateway、DNS和dns search suffix地址(如:qq.com)
使用ping qq.com來測試網(wǎng)絡是否可用

官方網(wǎng)絡配置參考:https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Networking#Manual_network_configuration
開啟ssh,配置后邊的東西會方便很多,比如:命令粘貼或文件粘貼
/etc/init.d/sshd start  #啟動ssh服務
passwd root   #修改root密碼

此時就可以使用xshell連接了
使用links命令把portage和stage下載到/mnt/gentoo里
cd /mnt/gentoo/  #切換到掛載的根分區(qū)下載包(只有這個有大空間)
links mirrors.163.com/gentoo
注: stage在releases/x86/current-iso/目錄下; portage在snapshots/目錄下

#解壓(按照下面順序解壓)
xz -d stage3-amd64-20180225T214502Z.tar.xz && tar -xf stage3-amd64-20180225T214502Z.tar  
tar -xjf portage-20180220.tar.bz2 -C /mnt/gentoo/usr/
- 配置make.conf
為了優(yōu)化Gentoo,必須在軟件編譯的時候指定某些參數(shù),這樣編譯出來的程序運行效率將非常高,系統(tǒng)在編譯用到的參數(shù)就在make.conf里,文件路徑是/mnt/gentoo/etc/portage/make.conf.
Gentoo給了我們一個配置的sample在/mnt/gentoo/usr/share/portage/config/make.conf.example,他里面講的很詳細,下面的是我的make.conf。
vi /mnt/gentoo/etc/portage/make.conf

#USE用于控制軟件的安裝
USE="bindist mmx sse sse2"  
#這兩個變量使用相同的值,這兩個變量定義gcc和c++編譯器的優(yōu)化
CFLAGS="-march=native -mtune=native -O2 -pipe" 
CXXFLAGS="${CFLAGS}" 
#指定gcc同時編譯的數(shù)量,一般是CPU個數(shù)(或核心數(shù))+1
MAKEOPTS="-j9" 

注:"-march=native"參數(shù),native意思是讓系統(tǒng)自動檢測cpu型號進行配置
- 進入新環(huán)境
接下來就可以進入新環(huán)境/mnt/gentoo, 在chroot進入新環(huán)境前需要做一些設備的掛載和DNS文件復制
cp -L /etc/resolv.conf /mnt/gentoo/etc/
mount -t proc none /mnt/gentoo/proc 
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
使用chroot進入新環(huán)境,并更新環(huán)境變量
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile

為了使portage里的軟件保持最新,最好同步一下
emerge --sync   
注:如果同步出錯,需要檢查/etc/portage/make.conf文件中的參數(shù)
Gentoo中除了USE和CFLAGS用于優(yōu)化外還有一個重要的profile,這個是Gentoo自帶的配置文件,我們只要選擇合適的就行了。

eselect profile list   #列出所有的子版本(帶*號的是默認選項)
  [1]   default/linux/amd64/13.0 (stable)*
  [2]   default/linux/amd64/13.0/selinux (dev)
  [3]   default/linux/amd64/13.0/desktop (stable)
  [4]   default/linux/amd64/13.0/desktop/gnome (stable)
  [5]   default/linux/amd64/13.0/desktop/gnome/systemd (stable)
  ......

eselect profile set 12  #選擇對應版本

- 編譯內(nèi)核
選擇一個內(nèi)核并進行安裝
emerge --ask sys-kernel/gentoo-sources

進入內(nèi)核源碼
cd /usr/src/linux

手動配置內(nèi)核
make menuconfig

注:make menuconfig顯示錯誤“Your display is too small to run Menuconfig!”
如果在終端執(zhí)行 make menuconfig ,顯示錯誤:
Your display is too small to run Menuconfig!
It must be at least 19 lines by 80 columns.
make[1]: *** [menuconfig] Error 1
make: *** [menuconfig] Error 2
表示xshell終端窗口太小。把終端窗口適當?shù)恼{(diào)大(或是直接最大化)就行了。


注:內(nèi)核的配置可以參考官方文檔:https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Kernel

- 內(nèi)核:啟用devtmpfs支持
作用:用來掛載/dev,以便在啟動過程中使用關鍵設備文件

Device Drivers --->
  Generic Driver Options --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
- 內(nèi)核: 啟用SCSI磁盤支持
Device Drivers --->
   SCSI device support  --->
      <*> SCSI disk support
- 內(nèi)核: 選擇必要的文件系統(tǒng)
建議常用的文件系統(tǒng)格式都選擇上,免得用的時候抓瞎
File systems --->
  <*> Second extended fs support
  <*> The Extended 3 (ext3) filesystem
  <*> The Extended 4 (ext4) filesystem
  <*> Reiserfs support
  <*> JFS filesystem support
  <*> XFS filesystem support
  <*> Btrfs filesystem support
  DOS/FAT/NT Filesystems  --->
    <*> MSDOS fs support
    <*> VFAT (Windows-95) fs support
- 內(nèi)核: 選擇PPPoE必要的驅(qū)動程序

Device Drivers --->
  Network device support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports
- 內(nèi)核: 激活SMP支持
作用:用于支持多內(nèi)核存在,用來在多個內(nèi)核間進行切換

Processor type and features  --->
  [*] Symmetric multi-processing support
 - 內(nèi)核: 啟用輸入設備的USB支持
Device Drivers --->
  HID support  --->
    -*- HID bus support
    <*>   Generic HID driver
    [*]   Battery level reporting for HID devices
      USB HID support  --->
        <*> USB HID transport layer
  [*] USB support  --->
    <*>     xHCI HCD (USB 3.0) support
    <*>     EHCI HCD (USB 2.0) support
    <*>     OHCI HCD (USB 1.1) support

- 內(nèi)核: 選擇處理器類型和特點
Processor type and features  --->
   [ ] Machine Check / overheating reporting 
   [ ]   Intel MCE Features
   [ ]   AMD MCE Features
   Processor family (AMD-Opteron/Athlon64)  --->
      ( ) Opteron/Athlon64/Hammer/K8
      ( ) Intel P4 / older Netburst based Xeon
      ( ) Core 2/newer Xeon
      ( ) Intel Atom
      ( ) Generic-x86-64
Executable file formats / Emulations  --->
   [*] IA32 Emulation

- 內(nèi)核: 啟用對GPT的支持(用于支持GPT分區(qū))
-*- Enable the block layer --->
   Partition Types --->
      [*] Advanced partition selection
      [*] EFI GUID Partition support
- 內(nèi)核: 啟用對UEFI方式引導系統(tǒng)的支持
注:如果不啟用,則系統(tǒng)不能通過UEFI方式引導

Processor type and features  --->
    [*] EFI runtime service support 
    [*]   EFI stub support
    [*]     EFI mixed-mode support

Firmware Drivers  --->
    EFI (Extensible Firmware Interface) Support  --->
        <*> EFI Variable Support via sysfs


編譯并安裝模塊
make && make modules_install

內(nèi)核編譯完成后,使用如下命令將內(nèi)核鏡像復制到/boot/目錄中
make install
- 配置系統(tǒng)
emerge app-editors/vim    #安裝vim

- 配置fstab

vim /etc/fstab
/dev/sda4  /    ext4  defaults 1 1             #配置掛載根分區(qū)
/dev/sda3  none  swap  sw  0 0                 #配置掛載swap
/dev/sda2  /boot ext2  noauto,noatime    1 2    #配置掛載boot分區(qū)

注: 生產(chǎn)環(huán)境下,最前面的/dev/sda1、sda2、sda3要通過blkid命令替換成對應的UUID
- 配置主機名
vim /etc/conf.d/hostname

hostname =“gentoo”  #將主機名變量設置為所選主機名
- 配置網(wǎng)絡
這次是配置的系統(tǒng)網(wǎng)絡,而非LiveCD的網(wǎng)絡
emerge --ask --noreplace net-misc/netifrc


vi /etc/conf.d/net   #配置靜態(tài)IP
config_eth0="10.0.10.100 netmask 255.255.255.0 brd 10.0.10.255"
routes_eth0="default via 10.0.10.1"

注:如果系統(tǒng)自動獲取IP則進行如下配置
config_eth0="dhcp"
- 系統(tǒng)啟動時激活網(wǎng)卡配置
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default

排錯
如果在啟動系統(tǒng)后,我們發(fā)現(xiàn)有關網(wǎng)絡接口名稱(目前記錄為eth0)的假設是錯誤的,那么執(zhí)行以下步驟來解決這個問題:
使用正確的接口名稱更新/etc/conf.d/net文件(enp3s0而不是eth0)。
創(chuàng)建新的符號鏈接(如/etc/init.d/net.enp3s0)。
刪除舊的符號鏈接(rm /etc/init.d/net.eth0)。
將新的添加到默認運行級別。
使用rc-update del net.eth0默認值刪除舊的。
- 定義hosts文件
vim  /etc/hosts
127.0.0.1 gentoo.homenetwork gentoo localhost   #這定義了當前系統(tǒng)并且必須設置

- 系統(tǒng)信息

使用passwd命令設置root密碼。

- 配置rc.conf文件
作用: Gentoo使用/etc/rc.conf來配置系統(tǒng)的服務,啟動和關閉。

打開/etc/rc.conf并享受文件中的所有注釋。查看設置并在需要的地方進行更改。
- 中文語言支持
vim /etc/locale.gen
en_US ISO-8859-1
en_US.UTF-8 UTF-8
#把需要的項前面的#號去掉

執(zhí)行
locale-gen

- 修改時區(qū)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone

#設置硬件時間為本地,不然會多8個小時
hwclock -w --localtime
- 安裝系統(tǒng)日志記錄器
作用:提供傳統(tǒng)的系統(tǒng)日志守護進程
emerge --ask app-admin/sysklogd  
rc-update add sysklogd default

- 安裝crond定時任務
作用:cron守護進程執(zhí)行預定的命令。如果需要定期執(zhí)行某些命令(例如每天,每周或每月),這非常方便。
emerge --ask sys-process/cronie
rc-update add cronie default

如果使用dcron或fcron,則需要執(zhí)行額外的初始化命令:
crontab /etc/crontab

- 遠程訪問
rc-update add sshd default     #添加ssh開機自啟動
- 文件索引
作用:為了索引文件系統(tǒng)以提供更快的文件位置功能
emerge --ask sys-apps/mlocate

- 文件系統(tǒng)工具

作用: 用于檢查文件系統(tǒng)完整性,創(chuàng)建其他文件系統(tǒng)等,按需安裝

emerge     sys-fs/e2fsprogs     用于管理Ext2, Ext3, EXT4
emerge  sys-fs/xfsprogs      用于管理XFS
emerge  sys-fs/reiserfsprogs 用于管理ReiserFS
emerge  sys-fs/jfsutils      用于管理JFS
emerge  sys-fs/dosfstools    用于管理VFAT(如:FAT32、NTFS等)
emerge  sys-fs/btrfs-progs   用于管理Btrfs
- 配置GRUB引導
(1)修改vim /etc/portage/make.conf
添加:
# Both UEFI and PC
GRUB_PLATFORMS="efi-64 pc"

(2)MBR分區(qū)-BIOS方式引導
emerge --ask sys-boot/grub:2

(3)安裝到MBR。假定第一個(系統(tǒng)引導的)磁盤是/dev/sda
grub-install /dev/sda

(4)自動生成grub2配置
grub-mkconfig -o /boot/grub/grub.cfg   

(5)保險起見再次執(zhí)行一次這個命令
   grub-install /dev/sda
  • 現(xiàn)在基本系統(tǒng)安裝完成,卸載分區(qū),重啟。
exit
umount -l /mnt/gentoo/dev
umount -l /mnt/gentoo/proc
umount -l /mnt/gentoo/sys
umount -l /mnt/gentoo
reboot
  • 故障處理
Grub引導正常,但啟動系統(tǒng)過程中,出現(xiàn) LFS kernel panic -not syncing :VFS:Unable to mount root fs on Unknown-block(0,0)
原因:
(1)進入LiveCD,掛載根和boot分區(qū),然后修改修改/etc/fstab文件
注:一律使用uuid替代/dev/sdx

(2)內(nèi)核編譯的時候沒有添加相應的硬件模塊,建議只增不減。
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容