从 Gentoo 的安装过程理解 Linux 系统的构成
本文介绍如何使用 livedvd 镜像安装Gentoo,大部分内容取自官方文档:https://wiki.gentoo.org/wiki/Handbook:AMD64。
由于官网的安装文档实在是太长,让人望而却步,因此,下面介绍的是精简的安装步骤。
下载livedvd镜像
启动 Gentoo 体验系统
将上面下载的镜像作为启动盘启动,会直接进入Gentoo系统,后面的所有操作都是在这个体验系统中进行的。
注意:
- 此时进入的系统是位于内存中的Gentoo系统,还没有安装到磁盘上,下面就要把系统安装到磁盘上。
- 推荐使用默认的桌面环境
plasma
,直接点击 Login 即可登陆,无需密码。
磁盘分区
启动位于桌面上的Konsole
程序,输入以下命令启动gparted程序。
sudo -i
gparted
将磁盘按照以下图片所示进行分区(分区表使用GPT格式):
挂载
现在分区都已初始化并有文件系统,接下来该挂载那些分区了。使用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 root或chroot。
完成chroot有三个步骤:
- 使用chroot将根位置从/(在安装媒介里)更改成/mnt/gentoo/(在分区里)
- 使用source命令将一些设置(那些在/etc/profile中的)重新载入到内存中
- 更改主提示符来帮助我们记住当前会话在一个chroot环境里面。
root# chroot /mnt/gentoo /bin/bash
root# source /etc/profile
root# export PS1="(chroot) $PS1"
可选: 更新本地 Portage 仓库
root# emerge --sync
配置及编译内核
有两种方法:
- 手动配置并生成内核。
- 一个叫作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 的定制系统。