前段時間搞過一次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)核編譯的時候沒有添加相應的硬件模塊,建議只增不減。