从 Gentoo 的安装过程理解 Linux 系统的构成

Published: by Creative Commons Licence

  • Categories:

本文介绍如何使用 livedvd 镜像安装Gentoo,大部分内容取自官方文档:https://wiki.gentoo.org/wiki/Handbook:AMD64。

由于官网的安装文档实在是太长,让人望而却步,因此,下面介绍的是精简的安装步骤。

下载livedvd镜像

下载地址:http://gentoo.mirrors.tds.net/pub/gentoo//releases/amd64/20160704/livedvd-amd64-multilib-20160704.iso

启动 Gentoo 体验系统

将上面下载的镜像作为启动盘启动,会直接进入Gentoo系统,后面的所有操作都是在这个体验系统中进行的。

注意:

  1. 此时进入的系统是位于内存中的Gentoo系统,还没有安装到磁盘上,下面就要把系统安装到磁盘上。
  2. 推荐使用默认的桌面环境 plasma,直接点击 Login 即可登陆,无需密码。

磁盘分区

启动位于桌面上的Konsole程序,输入以下命令启动gparted程序。

sudo -i
gparted

将磁盘按照以下图片所示进行分区(分区表使用GPT格式):

gparted

挂载

现在分区都已初始化并有文件系统,接下来该挂载那些分区了。使用mount命令,但是不要忘记为每一个创建的分区创建需要的挂载目录。比如示例中我们挂载根 和引导 分区:

root# mount /dev/sda4 /mnt/gentoo
root# mkdir /mnt/gentoo/boot
root# mount /dev/sda2 /mnt/gentoo/boot

拷贝系统文件

cp -apfv /mnt/livecd/* /mnt/gentoo

可选:选择境像站点

为了能更快的下载源代码,这里推荐选择一个快的镜像。Portage将会在make.conf文件中查找GENTOO_MIRRORS变量,并使用其中所列的镜像。可以通过浏览Gentoo镜像列表搜索一个(或一组)最接近系统物理位置(往往那是最快的)的镜像。另外,我们提供一个叫作mirrorselect的好工具,它为用户选择所需镜像提供了一个很好的交换。只需要移动光标选择镜像并按Spacebar选择一个或多个镜像。

root# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

复制DNS信息

在进行新环境之前,还有一件要做的事情就是复制/etc/resolv.conf中的DNS信息。需要完成这个来确保即使进入到新环境后网络仍然可以使用。/etc/resolv.conf包含着当前网络中的DNS服务器。

要复制这个信息,建议通过cp命令的-L选项。这可以保障如果/etc/resolv.conf是一个符号链接的话,复制的是那个目标文件而不是这个符号文件自己。否则在新环境中,符号文件将指向一个不存在的文件(因为链接目标非常可能不会在新环境中)。

root# cp -L /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 -t 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

注意:

--make-rslave操作是稍后安装systemd支持时所需要的。

进入新环境

现在所有的分区已经初始化,并且基础环境已经安装,是时候进入到新的安装环境了。这意思着会话将把根(所能访问到的最顶层位置)从当前的安装环境(安装CD或其他安装媒介)变为安装系统(叫做初始化分区)。因此叫作change rootchroot

完成chroot有三个步骤:

  1. 使用chroot将根位置从/(在安装媒介里)更改成/mnt/gentoo/(在分区里)
  2. 使用source命令将一些设置(那些在/etc/profile中的)重新载入到内存中
  3. 更改主提示符来帮助我们记住当前会话在一个chroot环境里面。
root# chroot /mnt/gentoo /bin/bash
root# source /etc/profile
root# export PS1="(chroot) $PS1"

可选: 更新本地 Portage 仓库

root# emerge --sync

配置及编译内核

有两种方法:

  1. 手动配置并生成内核。
  2. 一个叫作genkernel的工具用来自动化生成并安装Linux内核。

手动的方式如下:

root# cd /usr/src/linux
root# make menuconfig
root# make && make modules_install

当内核完成编译,复制内核镜像到/boot/。这由make install命令来处理:

root# make install

这将复制内核镜像到/boot/,一起的还有System.map文件和内核配置文件。

或者使用genkernel命令来自动的编译并安装内核:

genkernel

配置 fstab

将 /etc/fstab 文件改为以下内容:

/dev/sda2 /boot ext4 defaults,noatime 0 2
/dev/sda3 none swap sw 0 0
/dev/sda4 / ext4 noatime 0 1

安装grub2

当使用只支持MBR分区表的,旧版BIOS系统时,无需进行其他配置即可安装GRUB:

root# emerge --ask --verbose sys-boot/grub:2
root# grub-install /dev/sda
root# grub-mkconfig -o /boot/grub/grub.cfg

至此,所有的安装已经完毕,重启系统即可进入新安装的系统。

总结

可以看到 Gentoo 的安装比其他系统的安装要繁琐很多,相对于其他系统的安装你需要对系统有更深的理解才能理解里什么Gentoo要这样安装,其实这些操作是原理,其他 Linux 系统的安装的原理大致如此,只不过像 Ubuntu 这样的发行版把安装给自动化了,而 Gentoo 把这些都交给你来处理,这也是 Gentoo 的哲学,自己动手丰衣足食,这也吸引了一部分 Geek 粉丝。

ChromiumOS 就是基于 Gentoo 的定制系统。