本文仅为我本人在某次安装Gentoo Linux的时候顺带记录的,并不完整且不完全适用于任何情况。
如欲寻求更为具体的安装过程或者安装教程,请参照官方文档:Gentoo Wiki 手册。
在Gentoo Linux下载页面选择合适的系统镜像以及stage3包。
0 使用LiveCD或LiveDVD引导计算机或虚拟机启动
1 登录并正确启用网络
2 准备磁盘并正确分区挂载
2.0 使用fdisk分区
fdisk基本用法:
对/dev/sda分区
1 | fdisk /dev/sda |
创建GPT分区表
1 | g |
创建新分区
1 | n |
查看分区
1 | p |
更改分区类型
1 | t |
保存更改
1 | w |
2.1 格式化ESP分区和根目录
1 | mkfs.fat -F32 /dev/sda1 |
2.2 挂载根目录和ESP分区
1 | mount -t xfs /dev/sda2 /mnt/gentoo/ |
3 安装stage3
3.0 检查时间并修正
检查当前机器时间(建议使用UTC时间)
1 | date |
如不正确,使用ntp命令同步网络时间
1 | ntpd -q -g |
3.1 选择一个stage包下载并检查包完整性
选择自己想要的stage包,我选的是AMD64架构的默认包,也是不带标记的包,默认为multilib非systemd的版本。
下载下来并复制到挂载的根目录,我直接下载到NAS中,并通过局域网wget到挂载目录的。
检查哈希值并与官网上的对比。
3.2 解压stage3
这里需要将stage3归档包的文件名更改,但参数要加的。
1 | tar xpvf stage3.tar.xz --xattrs-include='*.*' --numeric-owner |
3.3 配置编译选项
1 | nano -w /mnt/gentoo/etc/portage/make.conf |
在文本末行添加下面的文本,其中12可以替换成你的CPU的线程数,也可以设为线程数+1
MAKEOPTS=”-j12”
其它内容没有修改的必要,保存退出nano
4 安装基础系统
4.0 选择镜像站点
我这里选择清华tuna开源镜像站
nano -w /mnt/gentoo/etc/portage/make.conf
在最后一行加入以下文本
GENTOO_MIRRORS=”https://mirrors.tuna.tsinghua.edu.cn/gentoo"
4.1 Gentoo ebuild 软件仓库
1 | mkdir --parents /mnt/gentoo/etc/portage/repos.conf |
这里用的是官方的仓库,速度较慢,还是换成tuna的吧
替换sync-uri开头的一行
sync-uri = rsync://mirrors.tuna.tsinghua.edu.cn/gentoo-portage
4.2 复制DNS信息
1 | cp --dereference /etc/resolv.conf /mnt/gentoo/etc/ |
4.3 挂载必要的文件系统
1 | mount --types proc /proc /mnt/gentoo/proc |
4.4 进入新环境
1 | chroot /mnt/gentoo /bin/bash |
4.5 配置Portage
从网站安装ebuild 数据库快照
1 | emerge-webrsync |
更新Portage ebuild 数据库
1 | emerge --sync |
如果有更新提示,可以选择按提示更新,但完全没有必要
4.6 选择正确的配置文件
1 | eselect profile list |
会出现下面的内容
(chroot) livecd / # eselect profile list
Available profile symlink targets:
[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)
[6] default/linux/amd64/13.0/desktop/plasma (stable)
[7] default/linux/amd64/13.0/desktop/plasma/systemd (stable)
[8] default/linux/amd64/13.0/developer (stable)
[9] default/linux/amd64/13.0/no-multilib (stable)
[10] default/linux/amd64/13.0/systemd (stable)
[11] default/linux/amd64/13.0/x32 (dev)
[12] default/linux/amd64/17.0 (stable) *
[13] default/linux/amd64/17.0/selinux (stable)
[14] default/linux/amd64/17.0/hardened (stable)
[15] default/linux/amd64/17.0/hardened/selinux (stable)
[16] default/linux/amd64/17.0/desktop (stable)
[17] default/linux/amd64/17.0/desktop/gnome (stable)
[18] default/linux/amd64/17.0/desktop/gnome/systemd (stable)
[19] default/linux/amd64/17.0/desktop/plasma (stable)
[20] default/linux/amd64/17.0/desktop/plasma/systemd (stable)
[21] default/linux/amd64/17.0/developer (stable)
[22] default/linux/amd64/17.0/no-multilib (stable)
[23] default/linux/amd64/17.0/no-multilib/hardened (stable)
[24] default/linux/amd64/17.0/no-multilib/hardened/selinux (stable)
[25] default/linux/amd64/17.0/systemd (stable)
[26] default/linux/amd64/17.0/x32 (dev)
[27] default/linux/amd64/17.1 (dev)
[28] default/linux/amd64/17.1/selinux (dev)
[29] default/linux/amd64/17.1/hardened (dev)
[30] default/linux/amd64/17.1/hardened/selinux (dev)
[31] default/linux/amd64/17.1/desktop (dev)
[32] default/linux/amd64/17.1/desktop/gnome (dev)
[33] default/linux/amd64/17.1/desktop/gnome/systemd (dev)
[34] default/linux/amd64/17.1/desktop/plasma (dev)
[35] default/linux/amd64/17.1/desktop/plasma/systemd (dev)
[36] default/linux/amd64/17.1/developer (dev)
[37] default/linux/amd64/17.1/no-multilib (dev)
[38] default/linux/amd64/17.1/no-multilib/hardened (dev)
[39] default/linux/amd64/17.1/no-multilib/hardened/selinux (dev)
[40] default/linux/amd64/17.1/systemd (dev)
[41] default/linux/amd64/17.0/musl (exp)
[42] default/linux/amd64/17.0/musl/hardened (exp)
[43] default/linux/amd64/17.0/musl/hardened/selinux (exp)
[44] default/linux/amd64/17.0/uclibc (exp)
[45] default/linux/amd64/17.0/uclibc/hardened (exp)
其中标*的为当前选择的配置,当前选择的是12
如果需要修改为其它的配置,运行下面的命令,将其中的12改为所需要的配置代号
1 | eselect profile set 12 |
4.7 更新@world集合
1 | emerge --ask --verbose --update --deep --newuse @world |
需要输入Yes确认
4.8 配置USE变量(这是Gentoo的重要特色,但需要花时间深入了解)
这一项旨在添加编译参数,在没有深入了解的时候可以忽略
4.9 配置 ACCEPT_LICENSE 变量
这一项旨在选择接受的许可证,不同的许可证可安装的软件包有不同,这里没有特别需求,默认就可以
4.10 配置时区
查看可用时区
1 | ls /usr/share/zoneinfo |
我这里选择 亚洲/上海
1 | echo "Asia/Shanghai" > /etc/timezone |
重新配置sys-libs/timezone-data包
1 | emerge --config sys-libs/timezone-data |
4.11 配置地区
(这里需要注意的是,不支持中文的终端或者没有安装中文字体,都将导致中文乱码,因此不建议在无桌面环境下设置默认地区为中文地区)
打开配置文件
1 | nano -w /etc/locale.gen |
在末尾添加
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN GBK
zh_CN.UTF-8 UTF-8
运行locale-gen生成/etc/locale.gen文件中指定的所有地区
1 | locale-gen |
设定系统级别的区域设置
1 | eselect locale list |
会出现以下内容
(chroot) livecd / # eselect locale list
Available targets for the LANG variable:
[1] C
[2] C.utf8
[3] en_US
[4] en_US.iso88591
[5] en_US.utf8
[6] POSIX
[7] zh_CN
[8] zh_CN.gbk
[9] zh_CN.utf8
[ ] (free form)
这里选择区域设置9
1 | eselect locale set 9 |
为避免因为缺少中文字体而导致中文乱码的情况,先安装三个文泉驿字体
1 | emerge media-fonts/wqy-bitmapfont |
现在重新加载环境
1 | env-update && source /etc/profile && export PS1="(chroot) $PS1" |
到此为止可以删除并清理不需要的文件,打包自己配置的基础系统文件以供下次安装可以免去配置的过程
5 配置内核
5.0 安装内核源码
1 | emerge --ask sys-kernel/gentoo-sources |
查看源码
1 | ls -l /usr/src/linux |
5.1 手动编译(建议,但生手还是自动编译吧,然而自动编译也有开不了机的可能)
使用
1 | lspci |
查看pci设备
默认没有安装pci工具包,需要安装才能使用
1 | emerge --ask sys-apps/pciutils |
进入源码目录
1 | cd /usr/src/linux |
开始配置
1 | make menuconfig |
配置省略
编译与安装模块
1 | make && make modules_install |
安装内核
1 | make install |
5.2 生成一个initramfs
需要用到genkernel包,需要安装
1 | emerge --ask sys-kernel/genkernel |
如有遇到USE change警告,使用
1 | etc-update |
并选择-3或-5来更新USE配置
生成initramfs
1 | genkernel --install initramfs |
为了在initramfs中启用特定的支持,比如LVM或RAID,需要加入特定的参数,比如
1 | genkernel --lvm --mdadm --install initramfs |
查看生成的文件
1 | ls /boot/initramfs* |
5.3 使用genkernel自动编译
同样需要使用genkernel包,没安装的需要装一下
1 | emerge --ask sys-kernel/genkernel |
如有遇到USE change警告,使用
1 | etc-update |
并选择-3或-5来更新USE配置
编辑fstab文件来使/boot/指向到正确的设备(根目录/在这里不做要求,但在后面的配置系统里有要求)
1 | nano -w /etc/fstab |
确保所有行都被#开头注释
添加
UUID=XXXXX / xfs noatime 0 1
UUID=XXX /boot vfat noauto,noatime 1 2
其中XXX的部分需要自己查自己的分区UUID,通过下面的命令可以看到
1 | ls -l /dev/disk/by-uuid/ |
自动编译安装
1 | genkernel all |
查看安装好的内核与生成的initramfs
1 | ls /boot/kernel* /boot/initramfs* |
5.4 内核模块
在/etc/modules-load.d/.conf列出需要自动加载的模块,每行一个模块。
如有必要,应在/etc/modprobe.d/.conf文件中设置模块的额外选项。
查看所有可用模块,其中<内核版本>需要替换为刚刚编译的版本
1 | find /lib/modules/<内核版本>/ -type f -iname '*.o' -or -iname '*.ko' | less |
如有需要加载的模块,在/etc/modules-load.d/中创建*.conf文件,文件名不重要,可根据设备与自己的喜好命名
1 | mkdir -p /etc/modules-load.d |
如3Com网卡设备,要自动加载3c59x.ko模块
1 | nano -w /etc/modules-load.d/network.conf |
向其中加入
3c59x
保存即可
5.5 安装固件
1 | emerge --ask sys-kernel/linux-firmware |
6 配置系统
6.0 文件系统信息
关于fstab文件
在编译内核部分没有修改,或只修改了/boot/部分的,这里需要做修改
1 | nano -w /etc/fstab |
确保所有行都被#开头注释
添加
UUID=XXXXX / xfs noatime 0 1
UUID=XXX /boot vfat noauto,noatime 1 2
其中XXX的部分需要自己查自己的分区UUID,通过下面的命令可以看到
1 | ls -l /dev/disk/by-uuid/ |
6.1 网络信息
主机名、域名信息
1 | nano -w /etc/conf.d/hostname |
设置主机名变量,选择主机名
hostname=”gentoo”
如果你需要一个域名,在/etc/conf.d/net中设定
/etc/conf.d/net文件默认不存在,因此需要创建
1 | nano -w /etc/conf.d/net |
设定dns_domain的变量值为你的域名
dns_domain_lo=”homenetwork”
如果你有一个NIS域(如果你不知道这是什么,就说明你没有),你也需要定义一个
设定nis_domain的变量值为你的NIS域名
nis_domain_lo=”my-nisdomain”
配置网络
首先安装net-misc/netifrc
1 | emerge --ask --noreplace net-misc/netifrc |
系统默认使用DHCP。如果使用DHCP的话,你需要安装一个DHCP客户端
如果你需要配置你的网络连接,打开 /etc/conf.d/net
1 | nano -w /etc/conf.d/net |
设置 config_eth0 和 routes_eth0 输入IP地址信息和路由信息
config_eth0=”192.168.2.2 netmask 255.255.255.0 brd 192.168.2.255”
routes_eth0=”default via 192.168.2.1”
要使用DHCP
config_eth0=”dhcp”
所有的eth0需要改为你自己的网络接口名称,可能是enp2s1、ens0或者其它
这里需要注意的是,重启之后的网络跟Chroot环境下的可能不一样,需要重启之后重新修正
假如接口名称不正确,系统将不能正确地自动联网
在启动时自动启用网络链接(这里的eth0依旧需要改成你自己的网络接口名称)
1 | cd /etc/init.d |
hosts 文件
1 | nano -w /etc/hosts |
定义的是现在系统
127.0.0.1 gentoo.homenetwork gentoo localhost
定义你网络上的其它系统
192.168.0.5 jenny.homenetwork jenny
192.168.0.6 benny.homenetwork benny
6.2 启用PCMCIA
1 | emerge --ask sys-apps/pcmciautils |
6.3 系统信息
Root 密码
1 | passwd |
配置引导和启动
使用/etc/rc.conf配置系统的服务,启动和关闭
1 | nano -w /etc/rc.conf |
打开/etc/conf.d/keymaps 来处理键盘设置,默认美式英文键盘
1 | nano -w /etc/conf.d/keymaps |
机器时间,默认是UTC时间
1 | nano -w /etc/conf.d/hwclock |
如果你机器上的时钟不用UTC
clock=”UTC”
需要改成
clock=”local”
否则,你的时钟就有可能出现偏差
7 安装系统工具
7.0 系统日志工具
1 | emerge --ask app-admin/sysklogd |
7.1 Cron守护进程
1 | emerge --ask sys-process/cronie |
7.2 文件索引
1 | emerge --ask sys-apps/mlocate |
7.3 远程访问
1 | rc-update add sshd default |
如果需要终端访问,请在 /etc/inittab中取消注释控制台部分
1 | nano -w /etc/inittab |
找到# SERIAL CONSOLES一行,下面两行取消注释
s0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100
s1:12345:respawn:/sbin/agetty 9600 ttyS1 vt100
7.4 文件系统工具
文件系统 | 软件包 |
---|---|
Ext2, 3, 4 | sys-fs/e2fsprogs |
XFS | sys-fs/xfsprogs |
ReiserFS | sys-fs/reiserfsprogs |
JFS | sys-fs/jfsutils |
VFAT (FAT32, …) | sys-fs/dosfstools |
Btrfs | sys-fs/btrfs-progs |
7.5 网络工具
安装DHCP客户端
1 | emerge --ask net-misc/dhcpcd |
可选:安装PPPoE客户端
1 | emerge --ask net-dialup/ppp |
可选:安装无线网络工具
1 | emerge --ask net-wireless/iw net-wireless/wpa_supplicant |
8 配置引导加载程序
8.0 选择引导器(本篇文章仅讲述grub2在UEFI下的应用)
安装GRUB2(UEFI必须先在make.conf加入GRUB_PLATFORMS=”efi-64”)
1 | echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf |
激活GRUB2
1 | grub-install --target=x86_64-efi --efi-directory=/boot |
在只支持EFI系统分区(ESP)中.EFI文件的 /efi/boot/目录中,需要添加–removable参数
1 | grub-install --target=x86_64-efi --efi-directory=/boot --removable |
这将创建UEFI规范定义的默认目录,然后将 grubx64.efi 文件复制到由同一规范定义的“默认”EFI文件位置
配置GRUB2
1 | grub-mkconfig -o /boot/grub/grub.cfg |
9 收尾安装工作(这一步也可以在重启进入新系统登录root之后再做)
9.0 用户管理
添加一个日常使用的用户
1 | useradd -m -G users,wheel,audio -s /bin/bash 用户名 |
修改用户密码
1 | passwd 用户名 |
9.1 磁盘清理
1 | rm /stage3* |