前段時(shí)間搞過一次Gentoo,最終以失敗告終,現(xiàn)在正好有時(shí)間卷土重來。
配置過程相當(dāng)復(fù)雜,需要很強(qiáng)的耐心,但整個(gè)過程下來后,會(huì)學(xué)到很多東西。
官方文檔 參考@Gary Wu
- 準(zhǔn)備工作
- 下載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)絡(luò)較好可以通過網(wǎng)絡(luò)下載stage3和portage。如果提前下載需要拷貝到U盤里,需要的時(shí)候掛載解壓。
我這邊網(wǎng)絡(luò)比較好,選擇在安裝的過程中從網(wǎng)上下載。
- 制作引導(dǎo)U盤
把iso刻錄到U盤里,用來啟動(dòng)引導(dǎo),這里推薦使用UltraISO,啟動(dòng)->寫入硬盤鏡像
- 記錄服務(wù)器硬件配置
因?yàn)樵诎惭b的過程中要自己編譯內(nèi)核,需要配置一些硬件驅(qū)動(dòng)信息,主要是CPU、顯卡、網(wǎng)卡,可以自行查看,配置選好的話可以節(jié)省很多編譯時(shí)間和內(nèi)核資源。
- 安裝基本系統(tǒng)
從U盤啟動(dòng),在boot處輸入: gentoo dopcmcia ,根據(jù)引導(dǎo)進(jìn)入命令行模式,接下來安裝基本系統(tǒng)。
- 分區(qū)
建議分區(qū)規(guī)劃
bios_grub BIOS啟動(dòng)分區(qū),官方是2M,我這里給9M
boot 300M 啟動(dòng)系統(tǒng)目錄,掛載目錄: /mnt/gentoo/boot
swap 8192M
/ 剩余All 掛載目錄: /mnt/gentoo
注:系統(tǒng)使用BIOS引導(dǎo)方式,所以不需要EFI分區(qū)
分區(qū)格式(MBR或GPT)直接影響到后邊的GRUB引導(dǎo),本例是MBR分區(qū)(BIOS引導(dǎo)方式)
livecd # parted
select /dev/sda #選擇操作的磁盤
mklabel gpt #分區(qū)格式使用MBR
mkpart primary 1M 10M #BIOS啟動(dòng)分區(qū)必須有,否則grub安裝出錯(cuò)
name 1 grub
set 1 bios_grub on #設(shè)置BIOS分區(qū)可啟動(dòng)
mkpart primary 10M 310M #boot系統(tǒng)分區(qū)
name 2 boot
set 2 boot on #設(shè)置boot分區(qū)為可啟動(dòng)
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 格式化預(yù)留空間分區(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ū)相關(guān)-知識(shí)點(diǎn)總結(jié):
(1)如果是MBR分區(qū)的磁盤,使用以下方法創(chuàng)建ESP:
parted創(chuàng)建的boot_grub和boot分區(qū), 使用mkfs.ext2格式化
-----------------------------------------------------------------------------------------------
(2)關(guān)于parted set命令的flag類型,可參考官方文檔: https://www.gnu.org/software/parted/manual/html_node/set.html
- 配置網(wǎng)絡(luò)
配置網(wǎng)絡(luò)主要是用來下載portage和stage,如果已經(jīng)下載到U盤里,直接掛載U盤拷貝到/mnt/gentoo/os目錄下。
使用如下命令來配置網(wǎng)絡(luò):
ifconfig 查看網(wǎng)絡(luò)標(biāo)識(shí)
net-setup eno16777728 根據(jù)提示輸入IP地址、broadcast、netmask、gateway、DNS和dns search suffix地址(如:qq.com)
使用ping qq.com來測試網(wǎng)絡(luò)是否可用
官方網(wǎng)絡(luò)配置參考:https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Networking#Manual_network_configuration
開啟ssh,配置后邊的東西會(huì)方便很多,比如:命令粘貼或文件粘貼
/etc/init.d/sshd start #啟動(dòng)ssh服務(wù)
passwd root #修改root密碼
此時(shí)就可以使用xshell連接了
使用links命令把portage和stage下載到/mnt/gentoo里
cd /mnt/gentoo/ #切換到掛載的根分區(qū)下載包(只有這個(gè)有大空間)
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í)候指定某些參數(shù),這樣編譯出來的程序運(yùn)行效率將非常高,系統(tǒng)在編譯用到的參數(shù)就在make.conf里,文件路徑是/mnt/gentoo/etc/portage/make.conf.
Gentoo給了我們一個(gè)配置的sample在/mnt/gentoo/usr/share/portage/config/make.conf.example,他里面講的很詳細(xì),下面的是我的make.conf。
vi /mnt/gentoo/etc/portage/make.conf
#USE用于控制軟件的安裝
USE="bindist mmx sse sse2"
#這兩個(gè)變量使用相同的值,這兩個(gè)變量定義gcc和c++編譯器的優(yōu)化
CFLAGS="-march=native -mtune=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
#指定gcc同時(shí)編譯的數(shù)量,一般是CPU個(gè)數(shù)(或核心數(shù))+1
MAKEOPTS="-j9"
注:"-march=native"參數(shù),native意思是讓系統(tǒng)自動(dòng)檢測cpu型號(hào)進(jìn)行配置
- 進(jìn)入新環(huán)境
接下來就可以進(jìn)入新環(huán)境/mnt/gentoo, 在chroot進(jìn)入新環(huán)境前需要做一些設(shè)備的掛載和DNS文件復(fù)制
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進(jìn)入新環(huán)境,并更新環(huán)境變量
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile
為了使portage里的軟件保持最新,最好同步一下
emerge --sync
注:如果同步出錯(cuò),需要檢查/etc/portage/make.conf文件中的參數(shù)
Gentoo中除了USE和CFLAGS用于優(yōu)化外還有一個(gè)重要的profile,這個(gè)是Gentoo自帶的配置文件,我們只要選擇合適的就行了。
eselect profile list #列出所有的子版本(帶*號(hào)的是默認(rèn)選項(xiàng))
[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 #選擇對(duì)應(yīng)版本
- 編譯內(nèi)核
選擇一個(gè)內(nèi)核并進(jìn)行安裝
emerge --ask sys-kernel/gentoo-sources
進(jìn)入內(nèi)核源碼
cd /usr/src/linux
手動(dòng)配置內(nèi)核
make menuconfig
注:make menuconfig顯示錯(cuò)誤“Your display is too small to run Menuconfig!”
如果在終端執(zhí)行 make menuconfig ,顯示錯(cuò)誤:
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終端窗口太小。把終端窗口適當(dāng)?shù)恼{(diào)大(或是直接最大化)就行了。
注:內(nèi)核的配置可以參考官方文檔:https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Kernel
- 內(nèi)核:啟用devtmpfs支持
作用:用來掛載/dev,以便在啟動(dòng)過程中使用關(guān)鍵設(shè)備文件
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)格式都選擇上,免得用的時(shí)候抓瞎
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ū)動(dòng)程序
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)核存在,用來在多個(gè)內(nèi)核間進(jìn)行切換
Processor type and features --->
[*] Symmetric multi-processing support
- 內(nèi)核: 啟用輸入設(shè)備的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)核: 選擇處理器類型和特點(diǎn)
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)核: 啟用對(duì)GPT的支持(用于支持GPT分區(qū))
-*- Enable the block layer --->
Partition Types --->
[*] Advanced partition selection
[*] EFI GUID Partition support
- 內(nèi)核: 啟用對(duì)UEFI方式引導(dǎo)系統(tǒng)的支持
注:如果不啟用,則系統(tǒng)不能通過UEFI方式引導(dǎo)
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)核鏡像復(fù)制到/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命令替換成對(duì)應(yīng)的UUID
- 配置主機(jī)名
vim /etc/conf.d/hostname
hostname =“gentoo” #將主機(jī)名變量設(shè)置為所選主機(jī)名
- 配置網(wǎng)絡(luò)
這次是配置的系統(tǒng)網(wǎng)絡(luò),而非LiveCD的網(wǎng)絡(luò)
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)自動(dòng)獲取IP則進(jìn)行如下配置
config_eth0="dhcp"
- 系統(tǒng)啟動(dòng)時(shí)激活網(wǎng)卡配置
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default
排錯(cuò)
如果在啟動(dòng)系統(tǒng)后,我們發(fā)現(xiàn)有關(guān)網(wǎng)絡(luò)接口名稱(目前記錄為eth0)的假設(shè)是錯(cuò)誤的,那么執(zhí)行以下步驟來解決這個(gè)問題:
使用正確的接口名稱更新/etc/conf.d/net文件(enp3s0而不是eth0)。
創(chuàng)建新的符號(hào)鏈接(如/etc/init.d/net.enp3s0)。
刪除舊的符號(hào)鏈接(rm /etc/init.d/net.eth0)。
將新的添加到默認(rèn)運(yùn)行級(jí)別。
使用rc-update del net.eth0默認(rèn)值刪除舊的。
- 定義hosts文件
vim /etc/hosts
127.0.0.1 gentoo.homenetwork gentoo localhost #這定義了當(dāng)前系統(tǒng)并且必須設(shè)置
- 系統(tǒng)信息
使用passwd命令設(shè)置root密碼。
- 配置rc.conf文件
作用: Gentoo使用/etc/rc.conf來配置系統(tǒng)的服務(wù),啟動(dòng)和關(guān)閉。
打開/etc/rc.conf并享受文件中的所有注釋。查看設(shè)置并在需要的地方進(jìn)行更改。
- 中文語言支持
vim /etc/locale.gen
en_US ISO-8859-1
en_US.UTF-8 UTF-8
#把需要的項(xiàng)前面的#號(hào)去掉
執(zhí)行
locale-gen
- 修改時(shí)區(qū)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
#設(shè)置硬件時(shí)間為本地,不然會(huì)多8個(gè)小時(shí)
hwclock -w --localtime
- 安裝系統(tǒng)日志記錄器
作用:提供傳統(tǒng)的系統(tǒng)日志守護(hù)進(jìn)程
emerge --ask app-admin/sysklogd
rc-update add sysklogd default
- 安裝crond定時(shí)任務(wù)
作用:cron守護(hù)進(jìn)程執(zhí)行預(yù)定的命令。如果需要定期執(zhí)行某些命令(例如每天,每周或每月),這非常方便。
emerge --ask sys-process/cronie
rc-update add cronie default
如果使用dcron或fcron,則需要執(zhí)行額外的初始化命令:
crontab /etc/crontab
- 遠(yuǎn)程訪問
rc-update add sshd default #添加ssh開機(jī)自啟動(dòng)
- 文件索引
作用:為了索引文件系統(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引導(dǎo)
(1)修改vim /etc/portage/make.conf
添加:
# Both UEFI and PC
GRUB_PLATFORMS="efi-64 pc"
(2)MBR分區(qū)-BIOS方式引導(dǎo)
emerge --ask sys-boot/grub:2
(3)安裝到MBR。假定第一個(gè)(系統(tǒng)引導(dǎo)的)磁盤是/dev/sda
grub-install /dev/sda
(4)自動(dòng)生成grub2配置
grub-mkconfig -o /boot/grub/grub.cfg
(5)保險(xiǎn)起見再次執(zhí)行一次這個(gè)命令
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引導(dǎo)正常,但啟動(dòng)系統(tǒng)過程中,出現(xiàn) LFS kernel panic -not syncing :VFS:Unable to mount root fs on Unknown-block(0,0)
原因:
(1)進(jìn)入LiveCD,掛載根和boot分區(qū),然后修改修改/etc/fstab文件
注:一律使用uuid替代/dev/sdx
(2)內(nèi)核編譯的時(shí)候沒有添加相應(yīng)的硬件模塊,建議只增不減。