Gentoo 系统初探
Table of Contens
安装准备
Gentoo 一直是一个特别的存在,号称极客系统。网上对其推(装)崇(逼)备(必)至(备)。作为一个爱装逼的骚年,自然是想一探究尽。关于它的介绍,这里就不说了, 因为想挑战它的 Geeker 肯定都知道,如果没听过,还是选择隔壁 manjaro 。manjaro 是基于另一个优秀的发行版 Arch Linux,就是很贴心的省去了痛苦的 安装过程。想体验 Geeker 的成就感, Gentoo 和 Arch Linux 选择其中一个即可。这两者的区别是前者安装软件默认从源代码编译,而后者人性化一点,使用二进制安装包。 安装速度不知快了多少倍。也不知这些极客怎么忍受的,不过 Gentoo 的滚动更新没有 Arch 哪么快,所以安装完必要的软件之后就不须要频繁的更新,而 Arch 三天两头就可以 滚一滚了。
系统镜像
安装系统,镜像是必须的(废话)。去 Gentoo官方镜像站 下载的时候根据自己的硬件和地区选择合适的镜像,我这边使用的amd64的架构, 因此使用的是 releases/amd64/autobuilds/install-amd64-minimal-20181220T214503Z.iso。
虚拟软件
这里以 VirtualBox 为例,VMware 应该是一样的。用VirtualBox的理由是便于端口转发,然后使用 putty 连接 LiveCD 系统,这样就没必要一个个的敲命令了。 当然这是最快体验大 Gentoo 的方法,如果要安装到物理机,除非另一个系统或电脑,否则只能一个个敲了。
启动系统
这里参考网上创建虚拟机即可,启动的时候可以选择可用内核,本文用的是默认的4.14.83内核,快捷键: F1
显示可用内核; F2
显示可用的启动项。需要
详细参数的可以参考官方文档 。
启动后,先设置 root 密码,便于ssh远程连接,然后开启 ssh 服务即可使用 ssh 客户端连接。
root # passwd
New password: (Enter the new password)
Re-enter password: (Re-enter the password)
root # rc-service sshd start
如果是只有一台电脑安装,那么可以借助终端浏览器 links2
来实现查阅在线文档:
root # links https://wiki.gentoo.org/wiki/Handbook:AMD64
配置网络
这里我使用的 NAT 网络模式,内部系统默认使用的是 dhcp。反正是用来装系统的,所以能够联网就行,管它是不是静态ip呢。
准备磁盘
创建分区
分区表有 GPT 和 MBR 两种,前者是新的的分区格式,后者为比较老的。但是 GPT 要求主板支持 UEFI 启动,稍微有点麻烦。这个 麻烦主要体现在安装引导的地方,如果硬件不支持 UEFI ,那么引导是装不上去的。所以为了简单,本例以 MBR 为例。分区工具使用 fdisk,因为它是交互式的,命令也很简单。本例的最后的目标分区如下:
分区 | 描述 |
---|---|
/dev/sda1 | BIOS启动分区 |
/dev/sda2 | 系统boot分区 |
/dev/sda3 | 交换分区 |
/dev/sda4 | 根分区 |
root # fdisk /dev/sda
命令(输入 m 获取帮助):m
帮助:
DOS (MBR)
a 开关 可启动 标志
b 编辑嵌套的 BSD 磁盘标签
c 开关 dos 兼容性标志
常规
d 删除分区
F 列出未分区的空闲区
l 列出已知分区类型
n 添加新分区
p 打印分区表
t 更改分区类型
v 检查分区表
i 打印某个分区的相关信息
杂项
m 打印此菜单
u 更改 显示/记录 单位
x 更多功能(仅限专业人员)
脚本
I 从 sfdisk 脚本文件加载磁盘布局
O 将磁盘布局转储为 sfdisk 脚本文件
保存并退出
w 将分区表写入磁盘并退出
q 退出而不保存更改
新建空磁盘标签
g 新建一份 GPT 分区表
G 新建一份空 GPT (IRIX) 分区表
o 新建一份的空 DOS 分区表
s 新建一份空 Sun 分区表
命令(输入 m 获取帮助):
根据上面的提示就可以轻松的创建自己的分区,如果是新硬盘,须要先新建分区表。如果要创建
GPT 分区表,使用 g
命令, MBR 则使用 o
命令,然后就是创建分区了, p
可以显示分区
信息, n
用于添加新分区,按照提示给定分区大小。这里值得一提的是 MBR 只能有 4
个主分区。
如果想多于 4
个,应将其中一个设置为扩展分区。本例最后的分区结果如下:
命令(输入 m 获取帮助):p
Disk /dev/sda:59.1 GiB,63433342976 字节,123893248 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x158b7a45
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 2048 6143 4096 2M 83 Linux
/dev/sda2 6144 268287 262144 128M 83 Linux
/dev/sda3 268288 1316863 1048576 512M 83 Linux
/dev/sda4 1316864 123893247 122576384 58.5G 83 Linux
命令(输入 m 获取帮助):
创建文件系统
BIOS分区可以不用管,只要创建其分区的文件系统即可:
root # mkfs.ext2 /dev/sda2
root # mkfs.ext4 /dev/sda4
root # mkswap /dev/sda3
root # swapon /dev/sda3
挂载根分区
现在把根区挂载到 liveCD 上,这样才能使用该分区来安装系统。
root # mount /dev/sda4 /mnt/gentoo
安装 stage3
在下载系统镜像的地址有对应的 stage3 的镜像,把它下载下来并解压到 /mnt/gentoo 目录。 在下载之前先确定一下系统的时间, 如果不对则设置时间,否则安下载 stage3 会报错:
root # date
2018年 12月 25日 星期二 20:36:02 CST
root # date 122520362018 # 如果不是就设置
root # cd /mnt/gentoo
root # wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-x32-20181220T214503Z.tar.xz
root # tar xvJf stage3-x32-20181220T214503Z.tar.xz
配置编译选项
这里基本是用的默认选项,只增加了 make 的编译线程,据说线程数为 CPU 核心数的 2 倍的时候 编译效果最佳。吐嘈一下,镜像里竟然不带vi。
root #nano -w /mnt/gentoo/etc/portage/make.conf
MAKEOPTS="-j2"
基本系统
现在就需要配置需要编译的模块了,各取所需了,想想这应该是极客比较喜欢 它的理由吧,小而强悍,没必要添加不需要的模块。
镜像站点
虽然是可选操作,但是为了速度,选择国内站点是个明智的选择,选完站点后,需要配置 Gentoo ebuild 软件仓库。
root #mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
root #mkdir --parents /mnt/gentoo/etc/portage/repos.conf
root #cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
复制 DNS 信息
便于进入到里面的系统联网,需要复制 DNS 信息。
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
挂载必要的文件系统
等会儿Linux的根将变更到新的位置。为了确保新环境正常工作,需要确保一些文件系统可以正常使用。
需要提供的文件系统是:
- /proc : 一个pseudo文件系统(看起来像是常规文件,事实上却是实时生成的),由Linux内核暴露的一些环境信息
- _sys : 一个pseudo文件系统,像要被取代的/proc_一样,比_proc_更加有结构
- /dev : 是一个包含全部设备文件的常规文件系统,一部分由Linux设备管理器(通常是udev)管理
proc_位置将要挂载到_mnt/gentoo/proc,而其它的两个都是绑定挂载。字面上的意思是,例如_mnt/gentoo/sys_事实上就是_sys_(它只是同一个文件系统的第二个条目点),而_mnt/gentoo/proc_是(可以说是)文件系统的一个新的挂载。
root #mount --types proc /proc /mnt/gentoo/proc
root #mount --rbind /sys /mnt/gentoo/sys
root #mount --make-rslave /mnt/gentoo/sys
root #mount --rbind /dev /mnt/gentoo/dev
root #mount --make-rslave /mnt/gentoo/dev
进入新环境
只需使用 chroot 命令即可进入新系统,当然还有一些必要的环境切换,如加载新环境的环境变量以及 修改提示符用来区分系统。
root #chroot /mnt/gentoo /bin/bash
root #source /etc/profile
root #export PS1="(chroot) ${PS1}"
挂载 boot 分区
这一步很重要,当编译内核并安装引导加载程序时会放在 boot 里。
root #mount /dev/sda2 /boot
选择配置文件
配置文件会决定你想要安装什么软件,所以这个也会决定编译时间的长短,为了快速体验 Gentoo,本例 使用了默认的选项,没有桌面环境以及 systemd 等。
root #eselect profile list
Available profile symlink targets:
[1] default/linux/amd64/13.0 *
[2] default/linux/amd64/13.0/desktop
[3] default/linux/amd64/13.0/desktop/gnome
[4] default/linux/amd64/13.0/desktop/kde
[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)
如果想选择其他的配置,比如想使用17.0版本的 gnome 桌面,则使用如下命令选择即可:
root # eselect profile set 17
更新 @world 集合
当系统应用了任何的升级,或从任何 profile 构建了 stage3 后,应用了变化的 use 标记时,
都需要更新一下 @world
:
root #emerge --ask --verbose --update --deep --newuse @world
设置时区
为系统选择时区。在_usr/share/zoneinfo_中查找可用的时区,然后写进/etc/timezone文件。
root # ls /usr/share/zoneinfo
root #echo "Asia/Shanghai" > /etc/timezone
安装 sys-libs/timezone-data 自动更新 /etc/localtime
文件。该文件用于让系统的 C 类库知道
系统在什么时区。
root #emerge --config sys-libs/timezone-data
配置地区
root #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
。最后选择默认字体:
root #eselect locale list
Available targets for the LANG variable:
[1] C
[2] en_US
[3] en_US.iso88591
[4] en_US.utf8
[5] POSIX
[6] zh_CN
[7] zh_CN.gbk
[8] zh_CN.utf8
[ ] (free form)
root #eselect locale set 8
重新加载环境:
root #env-update && source /etc/profile && export PS1="(chroot) $PS1"
编译内核
前期的准备基本已经完成,终于要上主菜了。
安装源码
这里使用 gentoo-source 包来安装内核。安装完就可以在 /usr/src/linux
找到对应的源码了。
root #emerge --ask sys-kernel/gentoo-sources
root #ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-3.16.5-gentoo
配置内核
首先要知道自己的硬件配置,这样才能配置对应的内核,查看硬件信息需要借助 lspci
命令。
因此需要先安装对应的工具:
root #emerge --ask sys-apps/pciutils
在了解了自己的硬件配置之后,就可以进行配置了,官网提供了两种方法,第二种是自动化,本来想偷个 懒使用 genkernel 软件省去自己手动配置的烦恼。可惜事与愿违,这个软件死活装不上去,只能手动配置了。 还好大部分的配置都选好了,这里只增加了32位的软件支持:
Executable file formats / Emulations --->
[*] IA32 Emulation
当然如果是 UEFI ,就需要增加一些配置,不然没法驱动。传送门:https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel/zh-cn
记得保存配置。。。
编译和安装内核
这个步骤就比较慢了,估计半个多小时吧,可以泡杯咖啡慢慢等了。
root # make && make modules_install && make install
配置系统
如果上面的步骤没有报错,那么恭喜你,你离成功只有一步之遥了。
配置 fstab 文件
这是系统所有分区挂载的文件。引用官网的一段介绍:
/etc/fstab文件使用一种特殊语法格式。每行都包含六个字段。这些字段之间由空白键(空格键, tab键,或者两者混合使用)分隔。每个字段都有自己的含意:
#
第一个字段显示要挂载的特殊 block 设备或远程文件系统。 有几种设备标识符可用于特殊块设备节点,包括设备文件路径,文件系统标签,UUID,分区标签以及UUID。
- 第二个字段是分区挂载点,也就是分区应该挂载到的地方
- 第三个字段给出分区所用的文件系统
- 第四个字段给出的是挂载分区时mount命令所用的挂载选项。由于每个文件系统都有自己的挂载选项。
- 第五个字段是给dump使用的,用以决定这个分区是否需要dump。一般情况下,你可以把该字段设为0(零)。
- 第六个字段是给fsck使用的,用以决定系统非正常关机之后文件系统的检查顺序。
根文件系统应该为1,而其它的应该为2(如果不需要文件系统自检的话可以设为0)
root # nano -w /etc/fstab
# 将下面的内容拷贝到 fstab 中
/dev/sda2 /boot ext2 defaults,noatime 0 2
/dev/sda3 none swap sw 0 0
/dev/sda4 / ext4 noatime 0 1
/dev/cdrom /mnt/cdrom auto noauto,user 0 0
网络信息
主机名
root # echo 'hostname="Gentoo"' > /etc/conf.d/hostname
配置网络
这里使用的 DHCP 自动获取 IP:
root # echo 'config_enp0s3="dhcp"' > /etc/conf.d/net
当然也可以使用静态 ip :
# /etc/conf.d/net静态IP定义
config_enp0s3="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_enp0s3="default via 192.168.0.1"
设置开机启动网络:
root #cd /etc/init.d
root #ln -s net.lo net.enp0s3
root #rc-update add net.enp0s3 default
Root 密码
这个前面已经介绍过了,千万别忘记。
系统工具
现在只需要安装必要的系统软件即可。
日志工具
root #emerge --ask app-admin/sysklogd
root #rc-update add sysklogd default
文件索引
root #emerge --ask sys-apps/mlocate
远程访问
rc-update add sshd default
文件系统工具
系统已经自带了 ext 文件系统的工具,需要其它文件系统需要自行安装。
Filesystem | Package |
---|---|
Ext2, 3, and 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 |
网络工具
因为系统不带 dhcp 客户端,需要自己安装,Gentoo 为了保持干净也是拼了。
root #emerge --ask net-misc/dhcpcd
安装引导
最后一关到了,成功与否就看它了。不过如果使用 MBR 分区表就没必要担心了。 这一步主要难在要支持 UEFI 启动,这个是比较麻烦的,也许是我搭的虚拟机的硬件不 支持 UEFI,所以第一次配置到这里的时候以失败告终。所以换了 MBR 后,一步成功。
root # emerge --ask --verbose sys-boot/grub:2
root # grub-install /dev/sda
root # grub-mkconfig -o /boot/grub/grub.cfg
重启系统
OK,彻底结束了,重启之后就可以享(折)受(腾) Gentoo 了。
root #exit
livecd ~# cd
livecd ~# umount -l /mnt/gentoo/dev{/shm,/pts,}
livecd ~# umount -R /mnt/gentoo
livecd ~# reboot
后记
如果启动成功,那么就可以开心的使用它了,首先要建立一个普通用户,避免权限过大 损坏系统。
添加用户
Group | Description |
---|---|
audio | 允许使用声音设备 |
cdrom | 允许直接使用光驱设备 |
floppy | 允许直接使用软驱 |
games | 允许运行游戏 |
portage | 能够访问portage受限资源。 |
usb | 允许使用USB设备 |
video | 允许使用视频采集设备和硬件加速 |
wheel | 可以使用su. |
root #useradd -m -G users,wheel,audio -s /bin/bash jer
root #passwd jer
清理垃圾
root #rm /stage3-*.tar.bz2*
总结
系统安装
很早就听说 Gentoo 系统,只是怕麻烦,懒得去安装。昨天突然心血来潮,就装了一下试试。 总的来说和 Arch 安装过程差不多,不过这编译速度太感人了, Arch 下载基本系统也就十来分钟 吧,源比较快可能几分钟就搞定了,而 Gentoo 光是编译内核就需要半个小时以上。
安装软件
常用的软件使用以及建议,vim 和 emacs 这两大编译器最好自己去安防网下载源码自行编译,
因为emerge安装的是腌割版。至于 nodejs (hexo) 需要,因为依赖的软件太多了,所以要一个个
安装完再安装 nodejs,而且如果有提示版本不一致的,需要卸载再装。目前还在探索中。。。
如果要使用 emerge 安装软件,而又记不得软件名使用 -s
参数查询软件,然后选择合适的版本进行安装。
这里提一最好用正则表达式搜索,不然可能会搜到好多软件。
给出vim 和 emacs 的编译选项,免得再找:
-
vim : ./configure –enable-pythoninterp=yes –with-python-config-dir=/usr/lib64/python3.6/config –enable-cscope
-
emacs: ./configure –with-pop –with-mailutils
-
nodejs:
sudo emerge net-libs/http-parser sudo emerge dev-util/boost-build sudo emerge dev-libs/boost sudo emerge dev-libs/libuv sudo emerge --unmerge dev-libs/openssl sudo emerge dev-libs/openssl sudo emerge net-libs/nghttp2 sudo emerge net-libs/nodejs
参考链接
https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation/zh-cn