前段时间搞过一次Gentoo,最终以失败告终,现在正好有时间卷土重来。
配置过程相当复杂,需要很强的耐心,但整个过程下来后,会学到很多东西。
官方文档 参考@Gary Wu
- 准备工作
- 下载minimal镜像
官方镜像地址:http://distfiles.gentoo.org/releases/
网易镜像地址: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
注:如果网络较好可以通过网络下载stage3和portage。如果提前下载需要拷贝到U盘里,需要的时候挂载解压。
我这边网络比较好,选择在安装的过程中从网上下载。
- 制作引导U盘
把iso刻录到U盘里,用来启动引导,这里推荐使用UltraISO,启动->写入硬盘镜像
- 记录服务器硬件配置
因为在安装的过程中要自己编译内核,需要配置一些硬件驱动信息,主要是CPU、显卡、网卡,可以自行查看,配置选好的话可以节省很多编译时间和内核资源。
- 安装基本系统
从U盘启动,在boot处输入: gentoo dopcmcia ,根据引导进入命令行模式,接下来安装基本系统。
- 分区
建议分区规划
bios_grub BIOS启动分区,官方是2M,我这里给9M
boot 300M 启动系统目录,挂载目录: /mnt/gentoo/boot
swap 8192M
/ 剩余All 挂载目录: /mnt/gentoo
注:系统使用BIOS引导方式,所以不需要EFI分区
分区格式(MBR或GPT)直接影响到后边的GRUB引导,本例是MBR分区(BIOS引导方式)
livecd # parted
select /dev/sda #选择操作的磁盘
mklabel gpt #分区格式使用MBR
mkpart primary 1M 10M #BIOS启动分区必须有,否则grub安装出错
name 1 grub
set 1 bios_grub on #设置BIOS分区可启动
mkpart primary 10M 310M #boot系统分区
name 2 boot
set 2 boot on #设置boot分区为可启动
mkpart primary 310M 8502M #swap分区
name 3 swap
mkpart primary 8502M -1 #剩余全部给根分区
name 4 bootfs
p 查看分区
quit 退出parted
----------------------------------------------
格式化
mkfs.ext2 /dev/sda1 格式化预留空间分区
mkfs.ext2 /dev/sda2 格式化boot分区
mkswap /dev/sda3 格式化swap分区
mkfs.ext4 /dev/sda4 格式化根分区
----------------------------------------------
挂载到/mnt/下
mount /dev/sda4 /mnt/gentoo 先挂载根分区
mkdir -p /mnt/gentoo/boot 创建boot挂载目录
mount /dev/sda2 /mnt/gentoo/boot 挂载boot
swapon /dev/sda3 挂载swap
分区相关-知识点总结:
(1)如果是MBR分区的磁盘,使用以下方法创建ESP:
parted创建的boot_grub和boot分区, 使用mkfs.ext2格式化
-----------------------------------------------------------------------------------------------
(2)关于parted set命令的flag类型,可参考官方文档: https://www.gnu.org/software/parted/manual/html_node/set.html
- 配置网络
配置网络主要是用来下载portage和stage,如果已经下载到U盘里,直接挂载U盘拷贝到/mnt/gentoo/os目录下。
使用如下命令来配置网络:
ifconfig 查看网络标识
net-setup eno16777728 根据提示输入IP地址、broadcast、netmask、gateway、DNS和dns search suffix地址(如:qq.com)
使用ping qq.com来测试网络是否可用
官方网络配置参考: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/ #切换到挂载的根分区下载包(只有这个有大空间)
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
为了优化Gentoo,必须在软件编译的时候指定某些参数,这样编译出来的程序运行效率将非常高,系统在编译用到的参数就在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++编译器的优化
CFLAGS="-march=native -mtune=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
#指定gcc同时编译的数量,一般是CPU个数(或核心数)+1
MAKEOPTS="-j9"
注:"-march=native"参数,native意思是让系统自动检测cpu型号进行配置
- 进入新环境
接下来就可以进入新环境/mnt/gentoo, 在chroot进入新环境前需要做一些设备的挂载和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进入新环境,并更新环境变量
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile
为了使portage里的软件保持最新,最好同步一下
emerge --sync
注:如果同步出错,需要检查/etc/portage/make.conf文件中的参数
Gentoo中除了USE和CFLAGS用于优化外还有一个重要的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 #选择对应版本
- 编译内核
选择一个内核并进行安装
emerge --ask sys-kernel/gentoo-sources
进入内核源码
cd /usr/src/linux
手动配置内核
make menuconfig
注:make menuconfig显示错误“Your display is too small to run Menuconfig!”
如果在终端执行 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终端窗口太小。把终端窗口适当的调大(或是直接最大化)就行了。
注:内核的配置可以参考官方文档:https://wiki.gentoo.org/wiki/Handbook:X86/Installation/Kernel
- 内核:启用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
- 内核: 启用SCSI磁盘支持
Device Drivers --->
SCSI device support --->
<*> SCSI disk support
- 内核: 选择必要的文件系统
建议常用的文件系统格式都选择上,免得用的时候抓瞎
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
- 内核: 选择PPPoE必要的驱动程序
Device Drivers --->
Network device support --->
<*> PPP (point-to-point protocol) support
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
- 内核: 激活SMP支持
作用:用于支持多内核存在,用来在多个内核间进行切换
Processor type and features --->
[*] Symmetric multi-processing support
- 内核: 启用输入设备的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
- 内核: 选择处理器类型和特点
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
- 内核: 启用对GPT的支持(用于支持GPT分区)
-*- Enable the block layer --->
Partition Types --->
[*] Advanced partition selection
[*] EFI GUID Partition support
- 内核: 启用对UEFI方式引导系统的支持
注:如果不启用,则系统不能通过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
内核编译完成后,使用如下命令将内核镜像复制到/boot/目录中
make install
- 配置系统
emerge app-editors/vim #安装vim
- 配置fstab
vim /etc/fstab
/dev/sda4 / ext4 defaults 1 1 #配置挂载根分区
/dev/sda3 none swap sw 0 0 #配置挂载swap
/dev/sda2 /boot ext2 noauto,noatime 1 2 #配置挂载boot分区
注: 生产环境下,最前面的/dev/sda1、sda2、sda3要通过blkid命令替换成对应的UUID
- 配置主机名
vim /etc/conf.d/hostname
hostname =“gentoo” #将主机名变量设置为所选主机名
- 配置网络
这次是配置的系统网络,而非LiveCD的网络
emerge --ask --noreplace net-misc/netifrc
vi /etc/conf.d/net #配置静态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"
注:如果系统自动获取IP则进行如下配置
config_eth0="dhcp"
- 系统启动时激活网卡配置
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default
排错
如果在启动系统后,我们发现有关网络接口名称(目前记录为eth0)的假设是错误的,那么执行以下步骤来解决这个问题:
使用正确的接口名称更新/etc/conf.d/net文件(enp3s0而不是eth0)。
创建新的符号链接(如/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 #这定义了当前系统并且必须设置
- 系统信息
使用passwd命令设置root密码。
- 配置rc.conf文件
作用: Gentoo使用/etc/rc.conf来配置系统的服务,启动和关闭。
打开/etc/rc.conf并享受文件中的所有注释。查看设置并在需要的地方进行更改。
- 中文语言支持
vim /etc/locale.gen
en_US ISO-8859-1
en_US.UTF-8 UTF-8
#把需要的项前面的#号去掉
执行
locale-gen
- 修改时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
#设置硬件时间为本地,不然会多8个小时
hwclock -w --localtime
- 安装系统日志记录器
作用:提供传统的系统日志守护进程
emerge --ask app-admin/sysklogd
rc-update add sysklogd default
- 安装crond定时任务
作用:cron守护进程执行预定的命令。如果需要定期执行某些命令(例如每天,每周或每月),这非常方便。
emerge --ask sys-process/cronie
rc-update add cronie default
如果使用dcron或fcron,则需要执行额外的初始化命令:
crontab /etc/crontab
- 远程访问
rc-update add sshd default #添加ssh开机自启动
- 文件索引
作用:为了索引文件系统以提供更快的文件位置功能
emerge --ask sys-apps/mlocate
- 文件系统工具
作用: 用于检查文件系统完整性,创建其他文件系统等,按需安装
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分区-BIOS方式引导
emerge --ask sys-boot/grub:2
(3)安装到MBR。假定第一个(系统引导的)磁盘是/dev/sda
grub-install /dev/sda
(4)自动生成grub2配置
grub-mkconfig -o /boot/grub/grub.cfg
(5)保险起见再次执行一次这个命令
grub-install /dev/sda
- 现在基本系统安装完成,卸载分区,重启。
exit
umount -l /mnt/gentoo/dev
umount -l /mnt/gentoo/proc
umount -l /mnt/gentoo/sys
umount -l /mnt/gentoo
reboot
- 故障处理
Grub引导正常,但启动系统过程中,出现 LFS kernel panic -not syncing :VFS:Unable to mount root fs on Unknown-block(0,0)
原因:
(1)进入LiveCD,挂载根和boot分区,然后修改修改/etc/fstab文件
注:一律使用uuid替代/dev/sdx
(2)内核编译的时候没有添加相应的硬件模块,建议只增不减。