Gentoo安装过程
(一) 磁盘准备
1、硬盘分区
通过cfdisk分区工具将硬盘进行分区操作,总计分为4个区如下所示
/deve/sda1 efi 分区
/dev/sda2 swap 分区
/dev/sda3 root 分区
/dev/sda4 home 分区
2、格式化分区
对已经完成分区的磁盘进行格式化,其中对efi分区执行vfat格式化,root分区和home分区分别个是化为ext4格式,创建swap分区并启用,具体如下代码
mkfs.vfat /dev/sda1
mkswap /dev/sda2
swapon /dev/sda2
mkfs.ext4 /dev/sda3
mkfs.ext4 /dev/sda4
在完成分区格式化操作后将挂载/mnt/gentoo分区到root分区,并在/mnt/gentoo下面创建boot目录和home目录并按照之前设置的分区分别完成挂载操作
mount /dev/sda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mkdir /mnt/gentoo/home
mount /dev/sda1 /mnt/gentoo/boot
mount /dev/sda4 /mnt/gentoo/home
(二) 安装Gentoo安装文件
1、安装阶段tar包
(1)时间修改
在之前的安装过程中由于镜像自动同步的时间并非是北京时区的时间因此需要手动修改系统时间,但是新版本的安装镜像已经自动检测到了正确的时区因此不需要对时间进行修改,因此该操作略过,但是如果确有需要修改时间可以通过date命令完成时间修改,如下所示:
date 012523162017 该命令将系统时间设置为2017-01-25 23:16
(2)下载tar包
前往挂载根文件系统的Gentoo挂载点(很像/mnt/gentoo):
cd /mnt/gentoo
根据不同的安装媒介,这里有一堆工具可用来下载一个阶段。这些工具之一就是links,一个非图形化、目录驱动的浏览器。要下载一个阶段,访问到Gentoo镜像列表形如:
links https://www.gentoo.org/downloads/mirrors/
通过links工具软件选择相应的源并下载stage3文件,下载完成后将下载文件解压
tar xvjpf stage3-*.tar.bz2 --xattrs
(3)配置编译选项
通过对/mnt/gentoo/etc/portage/make.conf文件进行修改配置编译选项
此处采用nano工具进行编辑操作
其中重点的是对CFLAGS和CXXFLAGS
CFLAGS="-march=native -O2 -pipe"
# Use the same settings for both variables
CXXFLAGS="${CFLAGS}"
同时添加MAKEOPTS参数,并针对本机的cpu配置参数
在make.conf中声明MAKEOPTS的示例
MAKEOPTS="-j2" 其中2代表1个cpu+1(1个线程+1)
自此完成了gentoo安装文件的安装操作
(三) 安装Gentoo基本系统
本部分完成Gentoo的基本系统的安装操作
1、执行Chrooting
通过配置一些可选参数实现进入安装的基本系统应用环境
(1)配置镜像站点
通过配置系统软件下载的镜像站点实现更快的软件下载和更新,本处跟之前类似均选择163镜像源
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
通过该命令将选择的镜像源写入make.conf配置文件
完整镜像选择后完成Gentoo主仓库的配置
通过/etc/portage/repos.conf/gentoo.conf文件来配置Gentoo的主仓库。这个文件包含了更新Portage树(包含Portage需要下载和安装软件包所需要的信息的一个ebuild和相关文件的集合)所需要的同步信息。通过几个简单的步骤就可以完成Gentoo主仓库的配置。首先,如果它不存在,则创建repos.conf目录
mkdir /mnt/gentoo/etc/portage/repos.conf
接下来,复制Portage提供的Gentoo仓库配置文件到这个(新创建的)目录:
cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
通过使用cat命令来看一眼。文件里的内容应该是.ini格式并且看起来像是这样:
[gentoo]
location = /usr/portage
sync-type = rsync
sync-uri = rsync://rsync.gentoo.org/gentoo-portage
auto-sync = yes
(2)复制DNS信息
在进行新环境之前,还有一件要做的事情就是复制/etc/resolv.conf中的DNS信息。需要完成这个来确保即使进入到新环境后网络仍然可以使用。/etc/resolv.conf包含着当前网络中的DNS服务器。
要复制这个信息,建议通过cp命令的-L选项。这可以保障如果/etc/resolv.conf是一个符号链接的话,复制的是那个目标文件而不是这个符号文件自己。否则在新环境中,符号文件将指向一个不存在的文件(因为链接目标非常可能不会在新环境中)。
cp -L /etc/resolv.conf /mnt/gentoo/etc/
(3)挂载必要的文件系统
为了确保新环境正常工作,需要确保一些文件系统可以正常使用。需要提供的文件系统是:
- /proc/ 一个pseudo文件系统(看起来像是常规文件,事实上却是实时生成的),由Linux内核暴露的一些环境信息
- /sys/ 一个pseudo文件系统,像要被取代的/proc/一样,比/proc/更加有结构
- /dev/ 是一个包含全部设备文件的常规文件系统,一部分由Linux设备管理器(通常是udev)管理
/proc/位置将要挂载到/mnt/gentoo/proc/,而其它的两个都是绑定挂载。字面上的意思是,例如/mnt/gentoo/sys/事实上就是/sys/(它只是同一个文件系统的第二个条目点),而/mnt/gentoo/proc/是(可以说是)文件系统的一个新的挂载。
具体操作命令如下
mount -t proc proc /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
(4)进入新系统环境
现在所有的分区已经初始化,并且基础环境已经安装,是时候进入到新的安装环境了。这意思着会话将把根(所能访问到的最顶层位置)从当前的安装环境(安装CD或其他安装媒介)变为安装系统(叫做初始化分区)。因此叫作change root或chroot。
完成chroot有三个步骤:
- 使用chroot将根位置从/(在安装媒介里)更改成/mnt/gentoo/(在分区里)
- 使用source命令将一些设置(那些在/etc/profile中的)重新载入到内存中
- 更改主提示符来帮助我们记住当前会话在一个chroot环境里面
具体命令如下:
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"
2、配置Portage
(1)安装Portage快照
接下来,是安装Portage快照,一个用来告诉Portage哪些软件标题可用于安装、哪些配置文件可以由管理员选择等等的文件集合。建议使用emerge-webrsync。这将从Gentoo的一介镜像中得到最新的Portage快照(Gentoo每天发布一个基准)并安装到系统中。
(2)可选:更新Portage树
Portage树可以更新到最新版本。前面的emerge-webrsync命令将安装一个最近的Portage快照(通常是24小时以内),所以这一步是可选的。
假设需要最新更新的包(1小时以内),可以使用emerge --sync。这和s命令将使用rsync协议来更新Portage树(之前通过emerge-webrsync获得的)到最新状态。
emerge --sync
在慢速的终端上,比如一些framebuffer或者串口控制台,建议使用--quiet选项来加速这个进程:
emerge --sync --quiet
(3)阅读新闻条目
当同步Portage树到系统时,它可能警告用户一条类似于下面的信息:
Portage通知用户关于新闻条目
* IMPORTANT: 2 news items need reading for repository 'gentoo'.
* Use eselect news to read news items.
Portage新闻条目的创建是为了提供一个通信媒介,通过rsycn树来推送重要的消息给用户。要管理它们,使用eselect news。eselect应用程序是一个Gentoo应用程序,它允许一个通用的管理界面完成对系统的变更和操作。在这里,要用到eselect的news模块。
对于news模块,最常用的有三个操作:
- 使用list显示一个可用新闻条目的预览。
- 使用read来阅读新闻条目。
- 使用purge将在新闻条目阅读后删除,并且不能再次阅读。
eselect news list
eselect news read
更多关于新闻阅读器的信息可以通过其手册页查看:
man news.eselect
(4)选择正确的配置文件
配置文件是任何一个Gentoo系统的积木。它不仅指定USE、CFLAGS和其它重要变量的默认值,还会锁定系统的包版本范围。这些设定全是由Gentoo的Portage开发者们来维护。
使用eselect,你能看到当前系统正在使用什么配置文件,现在来使用profile模块:
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
这只是一个示例,根据个人的情况选择需要的,使用如下命令选择
eselect profile set 2
由于我要安装kde5桌面,也就是plasma桌面并且要使用systemd作为初始化脚本,因此需要配置一下package.use文件
具体命令如下
echo "media-video/ffmpeg cpu_flags_x86_mmxext" > /etc/portage/package.use/ffmpeg
(5)更新@world集合
在完成了各项配置后为了是配置生效需要更新world集合尤其是采用systemd作为启动脚本管理,具体命令如下
emerge --ask --update --deep --newuse @world
3、时区配置
为系统选择时区。在/usr/share/zoneinfo/中查找可用的时区,然后写进/etc/timezone文件。
ls /usr/share/zoneinfo
假设要选择的时区是Asia/Shanghai:
echo "Asia/Shanghai" > /etc/timezone
请避免使用/usr/share/zoneinfo/Etc/GMT*时区,它们的名字并不意味着想要的时区。例如,GMT-8实际上是GMT+8。
接下来,重新配置sys-libs/timezone-data包,将会为我们基于/etc/timezone条目更新/etc/localtime文件。/etc/localtime文件用于让系统的C类库知道系统在什么时区。
emerge --config sys-libs/timezone-data
4、配置地区
大多数用户只想在他们的系统上使用一或两个地区。地区不只是指定系统应该使用的与系统进行交互的语言,同时也指定了字符串排序,日期和时间的显示等规则。系统应该支持的地区应该在/etc/locale.gen中提到。
nano -w /etc/locale.gen
下面的地区是一个示例,展示了同时使用英语(美国)和中文(中国)及附加字符格式(如UTF-8)。
FILE /etc/locale.gen启用US和CN地区及附加字符格式
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN GBK
zh_CN.UTF-8 UTF-8
<font color="red">警告 强烈建议使用至少一个UTF-8格式的地区设置,因为有些应用程序可能需要它。</font>
下一步是运行locale-gen。它将生成/etc/locale.gen文件中指定的所有地区。
locale-gen
要验证所选择的地区当前可用,运行locale -a。等完成后,我们就来设定系统级别的区域设置。我们又一次使用eselect来做这件事,现在使用locale模块。通过eselect locale list可显示可用的目标:
eselect locale list
通过eselect locale set VALUE可以设定正确的地区:
在完成了地区设置后重新加载系统环境:
env-update && source /etc/profile && export PS1="(chroot) $PS1"
(四)配置Linux内核
1、安装内核源码
首先安装内核源码包
emerge --ask sys-kernel/gentoo-sources
2、手动配置内核
首先可以通过lspci程序来检测硬件信息,该程序在sys-apps/pciutils,安装该软件
emerge --ask sys-apps/pciutils
lspci -k //检测系统硬件
检测完系统硬件设备下一步就开始手动编译内核
cd /usr/src/linux
make menuconfig
操作系统内核编译可以参考金步国的Linux-4.4-x86_64 内核配置选项简介
http://www.jinbuguo.com/kernel/longterm-linux-kernel-options.html
在进行内核编译前由于iwlwifi驱动编译的情况需要将采用的驱动编译到内核因此需要先安装系统所需的firmware固件
emerge --ask sys-kernel/linux-firmware
手动配置完内核后建议保存内核配置到文件以备将来使用,随后将编译和安装内核
make && make modules_install
编译完成后复制内核镜像到/boot分区
make install
完成内核复制后可以选择生产一个initramfs,创建的原因是当部分文件系统在独立的分区(如:/usr,/var)就需要通过initramfs来完成分区挂载,initramfs需要通过genkernel来完成,因此需要先安装该软件
emerge --ask sys-kernel/genkernel //采用rc作为初始化脚本
emerge --ask sys-kernel/genkernel-next //采用systemd作为初始化脚本
genkernel --install initramfs ///通过该命令创建initramfs
如果觉得手动配置较为麻烦也可以通过genkernel工具来自动完成内核构建
genkernel all
<font color=red>注意 需要将iwlwifi驱动手动编译到内核参数
选中 CONFIG_FIRMWARE_IN_KERNEL
添加对应的iwlwifi-xxxx.ucode 到该 CONFIG_EXTRA_FIRMWARE
同时指定iwlwifi-xxxx.ucode 所在目录 CONFIG_EXTRA_FIRMWARE_DIR
</font>
自此完成了操作系统内核的编译
(五)系统配置
该阶段完成对整个系统的配置工作
1、文件系统配置fstab
按照自己的分区设置配置相应的/boot,/root,/home的挂载点,建议通过UUID来标识磁盘而不是用/dev/sdaX来标识,可以通过blkid工具来查询每个磁盘的UUID
nano /etc/fstab
修改好硬盘挂载文件后可以配置hostname,修改root密码
nano -w /etc/conf.d/hostname
passwd //修改root密码
下一步安装日志工具、网络工具、定时任务
emerge --ask app-admin/sysklogd
emerge --ask sys-process/cronie
emerge --ask net-misc/dhcpcd
emerge --ask net-dialup/ppp
2、配置bootloader
在完成了一系列基本的系统安装配置后需要完成最后一步,配置bootloader也就是引导器,我的系统默认使用grub2作为引导,首先需要安装grub2软件,同时因为我是采用uefi的,因此需要添加一些额外的标记
echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
emerge --ask sys-boot/grub:2
grub2软件安装好后通过grub-install命令安装GRUB2所需的文件到/boot/grub/目录
grub-install /dev/sda //bios
grub-install --target=x86_64-efi --efi-directory=/boot //uefi
<font color=red>
注意:如果采用systemd作为初始化脚本那么需要额外修改一些配置
修改/etc/default/grub 文件添加GRUB2 systemd 配置示例
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"
</font>
修改完配置文件后需要生成GRUB2
grub-mkconfig -o /boot/grub/grub.cfg
自此整个基础的系统的安装与配置已经完成