Linux:Gentoo系统的安装笔记(一)
这次我选择安装gentoo,用来做我学习的笔记。这次我是使用虚拟机安装gentoo,一是方便操作,二是可以看着手册,一边看一边操作,严格按照手册上的步骤执行,一般是不会出现问题的。
查看手册最好学会看英文原版的,因为更新快,中文原版的可能很久无法更新,也会导致安装失败。
这里提供amd 64位的英文原版手册:https://wiki.gentoo.org/wiki/handbook:amd64/installation/media
wiki官方网站:https://wiki.gentoo.org/wiki/main_page
安装gentoo
映像文件下载
我所选择的是64位的gentoo最小化cd安装媒介。
新建虚拟机并加载映像文件
注:选择网络类型时,如果你是拨号连接的请使用默认设置,如果不是请使用“桥接”。磁盘大小最好大于20g。
系统正式安装
最小化安装cd
注:截止至2017年4月20日,官方的最小cd在uefi模式下无法启动。它们仅支持在bios(mbr)模式下引导。如果希望使其系统以uefi启动,读者必须下载最新的hybrid iso(livedvd)。
gentoo最小化安装cd是一张包含有完整gentoo环境的可引导镜像。它允许用户从cd或其它安装媒介引导进入linux。在引导过程中将检测硬件并加载适当的驱动。这个镜像由gentoo开发人员维护,能让任何有internet连接的人来安装gentoo。
最小化安装cd叫做install-amd64-minimal-<release>.iso。
gentoo linux使用最小化安装cd做为默认安装媒介,它带有一个非常小的可引导的gentoo linux环境。此环境包含所有正确的安装工具. cd镜像本身可以从官方下载页(推荐)或任意一个镜像站下载。
想要验证最小化安装cd的文件合法性的请参考:https://wiki.gentoo.org/wiki/handbook:amd64/installation/media。
stage
stage3压缩包是一个包含有最小化gentoo环境的文件,可用来继续安装gentoo。现在gentoo仍然提供stage1和stage2的压缩包,但是官方安装方法只使用stage3压缩包。
stage 文件更新比较频繁并且不在安装镜像中提供,但可以在任意一个gentoo官方镜像站的releases/amd64/autobuilds/ 路径下选择下载。
启动内核
现在启动安装媒介(最小化cd),我们可以使用默认的gentoo来启动,当然如果不能满足的话,请使用gentoo dopcmcia来启动。
我们可以使用alt+f2切换到简洁的控制台,也可以使用clear来进行清屏。
额外的硬件配置
当安装媒介启动时,它会尝试检测所有的硬件设备并加载合适的内核模块来支持硬件。在绝大多数的情况下,它工作得很好。然而,在某些情况下它可能没有自动加载系统所需的内核模块。如果 pci 自动检测错过了一些系统硬件,相应的内核模块就必须手动加载了。
例如:加载8139too 模块
可选:启动ssh服务
要在安装期间允许其他用户访问你的系统(可能是为了在安装过程中提供技术支持,甚至远程安装),需要添加一个用户账户(就像之前的文档描述的那样)同时 ssh 服务也要启动。
启动ssh服务:
自动网络配置
我们要安装gentoo,就必须确保网络已连接,否则后续安装步骤是进行不了的。
如果已配置网络,则ifconfig命令应该列出一个或多个网络接口。
注:如果使用标准的ifconfig命令没有显示出接口,尝试使用带有-a
选项的相同的命令。这个选项强制这个工具去显示系统检测到的所有的网络接口,不管他们是up或down状态。如果ifconfig -a没有提供结果,则硬件有错误或者接口驱动没有加载到内核中。这些情况都超过本手册的范围。联系需求支持。
其实使用ip addr命令也可以识别到接口。
注:作为预测的网络接口名称控制的结果, 系统的接口名称可以和旧的eth0命名规则很不一样。近期的安装媒介可能显示常规网络接口名字像是eno0、ens1或enp5s0。查看ifconfig输出中找到有你本地网络相关的ip地址的接口,如我的网络接口名称为eno16777736。(下面的代理设置为可选的,我并不需要,需要的可以选择设置。)
可选:配置任何代理
如果通过代理访问internet,则必须在安装过程中设置代理信息。定义代理非常容易:只需定义包含代理服务器信息的变量即可。
在大多数情况下,使用服务器主机名定义变量就足够了。例如,我们假设代理名为proxy.gentoo.org,端口为8080。
若要设置http代理(用于http和https通信),请执行以下操作:
export http_proxy="http://proxy.gentoo.org:8080"
若要设置ftp代理,请执行以下操作:
export ftp_proxy="ftp://proxy.gentoo.org:8080"
若要设置rsync代理,请执行以下操作:
export rsync_proxy="proxy.gentoo.org:8080"
如果代理需要用户名和密码,则对变量使用以下语言:
http://username:password@proxy.gentoo.org:8080
至于以上的用户名和密码,请参考:https://wiki.gentoo.org/wiki/handbook:amd64/installation/media,里面有可选的用户账户的相关设置。
测试网络:
尝试ping你的isp的dns服务器
可以看到上图,我的网络已经连接正常了。
如果网络不能工作,请参考:https://wiki.gentoo.org/wiki/handbook:amd64/installation/networking,里面有详细的网络配置教程,确保安装环境中网络的连接正常。
如果是准备无线网络链接的话,也请参考:https://wiki.gentoo.org/wiki/handbook:amd64/installation/networking,里面有详细的设置。
分区表简介
首先,我们可以先来理解下mbr与gpt。
mbr
主引导记录mbr (master boot record)对分区的起始扇区和长度使用32比特的标识符,它支持三种分区类型:主分区、扩展分区和逻辑分区。主分区把它们的信息存储在主引导记录里一个非常小的空间里,通常是512字节,因为这个空间太小了,所以系统只支持四个主分区。(例如从 /dev/sda1到/dev/sda4)
为了支持更多的分区,其中一个主分区可以被标识成扩展分区,然后这个分区就可以包含逻辑分区了(分区里的分区)。
每个分区的尺寸被限制在2tb,这是由于32比特的标识符造成的。另外mbr不提供任何的mbr备份,所以一旦被某个应用或者用户误写覆盖了,所有的分区信息将会丢失。
gpt
gtp(guid partition tqable)为分区使用64比特标识符,它用来存储分区信息的空间也远比mbr的512字节要大,gpt磁盘它也不对分区的数量作限制。分区的大小限制可以达到8zb。 译者注: 1zib = 1,024 eib 1zib = 1,048,576 (1024)pib 1zib = 1,073,741,824 (1024)tib 1zib = 1,099,511,627,776 (1024)gib 1zib = 1,125,899,906,842,624 (1024)mib 1zib = 1,152,921,504,606,846,976 (1024)kib 1zib = 1,180,591,620,717,411,303,424 (1024)b
当操作系统和系统固件之间的软件接口是uefi (相对于bios)时,gpt几乎是必选的,因为这里mbr会引起很多兼容性问题。
gpt还利用校验和和冗余。 它携带crc32校验和以检测报头和分区表中的错误,并在磁盘的末尾有一个备份gpt。 此备份表可用于恢复磁盘开头附近主gpt的损坏。
gpt还是mbr
依据上面的描述,人们大概会认为使用gpt应该总是被推荐的方法,尽管还有一些注意事项。
在一台基于bios的计算机上使用gpt虽然是能够工作的,但是那样你就不能与微软的windows操作系统进行双重引导了,原因是微软的windows如果检测到一个gpt分区标签,它就会以uefi模式进行引导。
一些存在bug的bios或者配置成以bios/csm/legacy模式进行引导的efi也对从gpt标签的磁盘进行引导支持不好。如果您也碰到了这种情况,有一个可能的凑合办法:在被保护的mbr分区上加上boot/active标志,您可以使用带有 -t dos
选项的fdisk 命令强制它使用mbr格式读取分区表。
如:
fdisk -t dos /dev/sda
使用uefi
当在一个使用了uefi(替代bios)进行引导作业的系统上安装gentoo时,很重要的一点是一个efi的系统分区 (esp)需要被创建。 分区工具parted的简介如下:
efi系统分区也需要是一个fat32分区(在linux系统里也被称为“vfat”)。这一章节末尾的指导中以“ext2”分区格式为例作为了/boot/ 的文件系统。请确保efi分区使用“vfat”,就像这样:
mkfs.fat -f 32 /dev/sda2
注:如果esp不使用fat变体,则无法保证系统的uefi固件能够找到引导加载程序(或linux内核),并且很可能无法启动系统!
设置分区
下面我使用parted来进行分区,使用的是mbr分区表,分区的方案我是按照手册上的进行安装,若不想手册上的可以自己设计分区方案。
但在之前先了解下分区:
swap空间
对于swap空间,没有一个完美值。swap空间的目的是当内存(ram)有压力时为内核提供磁盘存储。一个swap空间允许内核将看过来稍后不会被访问的内存页面移动到磁盘(swap或者page-out)、施放内存。当然,如果那块内存突然要使用到,需要花一些时间(相比较内存,硬盘是非常慢的)将这些页面需要放回到内存中(page-in)。
如果系统不运行很需要内存的应用程序或系统有足够多的可能内存,则不需要太多的swap空间。不过,swap空间还用来在休眠时储存整个内存。如果一个系统需要休眠,则必须需要大一点的swap空间,通常至少为系统安装的内存数量,这里我会给2048mb的swap空间大小。
bios引导分区
bios引导分区是一个非常小的分区(1到2mb),引导器软件如grub2可以将不适于存放在引导扇区(mbr中只有几百个字节)里并且不能存放在其它位置的额外数据存放于此。
这种分区并不总是需要的,但是考虑到低地址空间消耗以及记录大量不同的分区的难度,我们建议最好还是创建一个。
为了完整,当gpt分区方案与grub2一起使用,或者当mbr分区方案与grub2一起使用且第一个分区开始于磁盘上1mb位置之前时,bios引导分区是需要的。
接下来开始进入分区阶段:(进入parted开始搞磁盘吧。)
如果想使用gpt的分区标签,请输入命令:mklabel gpt。
但我现在使用的是mbr分区标签,为了让磁盘使用mbr分区布局,可以输入如下命令:mklabel msdos命令
我们先使用print命令可以查看当前的分区信息,如果存在分区的话,使用rm 命令移除已有的分区,rm <n> 中n
是需要移除的分区号码。
没有分区信息,则不用进行移除分区。
注:对其它不需要的分区采取同样的操作。但是在这里请确保不要犯任何错误,因为parted是立即执行改变的,这一点不像fdisk是分步操作,允许用户在保存或者退出fdisk时可以"undo"。
下面创建分区:
注:如果使用msdos分区标签,请记住,主分区不能超过4个。如果需要4个以上的分区,则将前四个分区中的一个进行扩展,并在其中创建逻辑分区。
首先,要告诉parted我们工作要使用的容量单位是megabytes(实际上是mebibytes,其标准缩写符号是mib,但是我们会通篇使用mb因为它用得更普遍一些)
现在创建一个2mb的分区,稍后将由grub 2引导加载程序使用。
但是现在有个问题就是mbr分区不支持grub分区来命名。
所以我就在这里纠结了比较久,决定使用fdisk对磁盘进行分区。这里说下parted分区支持gpt,但我是使用mbr,使用fdisk更适合些。
想要看parted接下来的分区,请参考:https://wiki.gentoo.org/wiki/handbook:amd64/installation/disks,里面有详细的parted分区设置。
fdisk分区
使用ctrl+z可以终止当前所有操作,现在使用fdisk向磁盘开火吧!(fdisk是一种流行的、功能强大的工具,可以将磁盘拆分为分区。)
注:如要支持gpt,需要增加 -t gpt
选项。建议您一定要仔细研究fdisk的输出,因为最近的 fdisk开发改变了它的以mbr作为缺省设置的行为。虽然最近fdisk应该支持gpt,它仍然表现出一些问题。
输入p查看当前分区情况,不出所料应该会有一个之前使用parted分出的区。
输入d,现在删除现有的存在的一个/dev/sda1。
如果原本分区表为空的可以忽略上述操作。(重复输入p打印分区列表,然后键入d以及要删除它的分区的编号。最终,分区表将为空。)
创建一个很小的bios引导分区,大约2mb。
构造分区用于uefi(这个只是一个标记而已):
注:不鼓励在mbr分区布局中使用uefi。如果使用的是uefi系统,请使用gpt布局。(这个步骤是可选的。)
下面创建一个引导分区,大约为128mb。
然后输入a来切换一个分区是否为可引导的标记,然后再输入2,之后再一次敲 p键,您可以发现一个“*”被放置于相应分区的“boot”列。
下面创建swap交换分区,大约为512mb,但是这里我会给2048mb。
把刚刚设置的swap分区设置分区类型为“linux swap”。(输入 t来设置分区类型,输入 3来选择刚刚创建的这个分区,然后敲击“82”设置分区类型为“linux swap”。)
最后创建根分区,当提示输入“the first sector”时,敲击enter。当提示输入“the last sector”时,敲击enter来创建一个占用了所有剩余磁盘空间的分区。
下面输入p查看现在的所有分区情况:
注:当然如果不只想使用一个根分区,想使用多个的话,请在the last sector那行输入准确数值即可。
输入w来保存分区布局并退出。
创建文件系统
首先要了解一下一些文件系统,下面给的不是详细的,详细的请见英文原版手册里面的。
ext2是经考验证明可靠的linux文件系统,但是没有元数据日志,这意味这在启动系统时的ext2文件系统的日常检查相当耗时。现在相当一部分的新一代的日志文件系统都可以非常迅速检查一致性,因此比那些非日志文件系统更受欢迎。当你启动系统碰巧遇到文件系统状态不一致时,日志文件系统不会在那里耽搁很长时间。
ext3是ext2文件系统的带日志版本,提供了元数据日志模式以快速恢复数据。此外还提供了其他增强的日志模式,如完整数据日志模式和有序数据日志模式。它使用了htree索引,在几乎所有的情况下都能保持高性能。简而言之,ext3是非常好及可靠的文件系统。
ext 4最初是作为ext 3的分叉创建的,ext 4带来了新的特性、性能改进和删除大小限制,对磁盘上的格式进行了适度的更改。它的容量可达1eb,最大文件大小为16 tb。与经典的ext 2/3位图块分配不同,ext 4使用区段,这可以提高大型文件的性能并减少碎片。ext 4还提供了更复杂的块分配算法(延迟分配和多块分配),为文件系统驱动程序提供了更多优化磁盘上数据布局的方法。ext 4是推荐的通用平台文件系统。
vfat也称为fat32,被支持linux,但不支持任何权限设置。它主要用于互操作性与其他操作系统(主要是微软的windows),但也是很有必要的一些系统固件(如uefi)的支持。
为分区增加inode
当在一个小的分区(少于8gb)上使用ext2、ext3或ext4,则创建文件系统时必须带适当的选项以保留足够的inode。mke2fs(mkfs.ext2)应用程序使用“字节每inode”设置来计算一个文件系统应该用多少个inode。在小分区,建议增加计算出的inode数量。
对于ext2,可以使用下面的命令来完成:
mkfs.ext2 -t small /dev/<device>
因为我的sda2是打算使用ext2格式的,所以输入如下:
对于ext3或ext4,添加-j
选项来启用日志:
mkfs.ext2 -j -t small /dev/<device>
因为我的sda4已经大于8g了,所以不需要增加计算出的inode数量,如果小于则需要增加。
为分区应用文件系统
要使引导分区(/dev/sda 2)在ext 2和根分区(/dev/sda 4)在ext 4中,输入如下:
现在在新创建的分区(或逻辑卷)上创建文件系统。
创建文件系统
下面是激活swap分区,首先先初始化swap分区:
下面是激活swap分区:
下面进行挂载根分区:
注:如果/tmp/需要放在一个独立分区,确保在挂载后变更它的权限:
chmod 1777 /mnt/gentoo/tmp
这同样适用于/var/tmp。
安装stage包
在安装gentoo之前,最好确保日期和时间设置正确。 错误配置的时间可能会导致奇怪的结果,如果系统时间差的离谱,可能无法下载安装文件!
使用date命令来验证当前时间是否准确:
如果显示的日期/时间是错误的,请使用以下方法之一更新它。
自动更新时间,相当于同步时间,但可能泄露隐私:
ntpd -q -g
当然也可以手动更新:
例如,将日期定在2018年9月1日13点16分:
date 090113162018
下载stage包
注意stage包的后缀名一般为bz2或xz。
前往挂载根文件系统的gentoo挂载点:
图形浏览器
请进入,选择stage 3:
由于本人使用amd64位,那么stage 3也要对应一致,请右键进入快捷菜单,选择复制链接地址:http://distfiles.gentoo.org/releases/amd64/autobuilds/20180830t214502z/stage3-amd64-20180830t214502z.tar.xz(该包为2018-8-30,该链接地址仅供参考,请按实际的更新情况复制链接地址)
wget http://distfiles.gentoo.org/releases/amd64/autobuilds/20180830t214502z/stage3-amd64-20180830t214502z.tar.xz
命令行浏览器
但我使用的是命令行浏览器,如果不是在虚拟机上进行,而是实体机进行安装,使用图形浏览器比较麻烦的,当然配合手机使用也可,但建议使用命令行浏览器下载:
更传统的读者或是“老前辈”的gentoo用户,只能命令行工作,可能更喜欢使用非图形化菜单驱动的浏览器 links。 要下载一个stage,请像下面这样访问gentoo镜像列表:
使用鼠标指针(像一个闪烁的小矩形)左键点击其中http镜像(当然也可以使用键盘方向键向下浏览),但其他网络协议是可用的。请访问releases/amd64/autobuilds/ 。 那里将显示所有可用stage文件 (可能他们个别小组架构在命名的子目录中存储)。
由于支持国产,我选择:
回车键选择,或鼠标指针选定双击进入,然后访问releases/amd64/autobuilds/ 。
选择的stage包必须是要以最新为主,当然建议是与启动镜像更新日期一致,不一致可能导致安装过程中出现任何问题。
到了这里需要选择一个stage包。
multilib(32和64位)
选择一个基础压缩包的系统可以在稍后的安装过程节省大量的时间,特别是当它是一次 choose a system profile。一个stage包的选择将直接影响未来的系统配置,可以在以后省的头痛。该压缩包multilib尽可能使用64位的库,只必要时对32位版本兼容。这对于大多数安装一个很好的选择,因为它在未来的定制提供了极大的灵活性量。那些谁希望自己的系统,能够容易地切换配置,应该下载根据各自的处理器架构multilib的压缩包选项。
大多数用户应该不需要使用“高级”tar包选项;它们用于特定的软件或硬件配置。
no-multilib(纯64位)
选择一个no-multilib压缩包:no-multilib是在系统的基础上提供了一个完整的64位操作系统环境。这有效地使得切换到multilib的profile是不可能的(不是完全不可能)。这些刚刚开始使用gentoo的新手不应该选择一个 no-multilib 压缩包,除非"绝对必要"。而且应该有很好的理由并做出负责任的选择。
所以建议选择multilib包。
由上图可看选择stage3包(现在已经出现stage4包了,这个老手可以尝试使用),按d进行下载。
正在下载中,使用163网易,下载速度快而稳定,只需要2分多钟就可以了。
下载完毕后请按q来关闭links浏览器,如果想要验证文件的合法性的请参考:https://wiki.gentoo.org/wiki/handbook:amd64/installation/stage。
当然你喜欢图形浏览器的直接也是可以的,这些方法随用户的喜好挑选。
links之外还有一个lynx浏览器。和links类似,它也是一个非图形化的浏览器,但不是自带的。
lynx https://www.gentoo.org/downloads/mirrors/
现在接下来就是解压stage包了。
解压stage包
现在,解压下载的stage到系统。我们使用 tar来进行:
tar xvjpf stage3-*.tar.bz2 --xattrs --numeric-owner
确保你使用了同样的参数 ( xvjpf
和 --xattrs
)。 x
表示解开(extract),v
表示详细信息(verbose)可以用来查看解压缩时发生了什么(可选参数), j
表示使用bzip2解压缩,p
表示保留权限(preserve permissions),还有f
表示我们要解开一个文件,而不是标准输入。最后,--numeric-owner
被用于确保从tarball中提取的文件的用户和组id与gentoo发布工程团队预期的保持一致,即使大胆的用户使用的不是gentoo官方安装媒介。
如果出现以下解压出错问题,即是j表示的bzip2没有。
解决方法:去掉j,再次输入如下命令:
正在解压中,不需要多少时间,解压完毕后进入到配置编译选项。
配置编译选项
介绍:为了优化gentoo,可以设置一些影响portage的变量,gentoo官方支持包管理器。 所有这些变量可以设置为环境变量(使用export),但这不是永久的。 为了保留设置,portage读入/etc/portage/make.conf文件 ,一个用于portage的配置文件。
注:要成功安装gentoo,只需要设置下面提到的变量。
在你定义 cflags和cxxflags的时候,你需要把这些优化标记都合并起来。stage3文件里包含的你解压缩出来的默认值已经足够好了。
注:makeopts=“-jx”(x代表核数,你的电脑cpu是多少核的就填多少核)
请按照上图中红框里的变量添加到make.conf里面,然后按ctrl+x退出。
输入y,然后敲击回车键即可保存。
chrooting
选择镜像站点
为了能更快的下载源代码,这里推荐选择一个快的镜像。提供一个叫作mirrorselect的好工具,它为用户选择所需镜像提供了一个很好的交换。只需要移动光标选择镜像并按spacebar选择一个或多个镜像。
选择中国163mirrors,速度最快,空格键进行选择,回车键确定。
gentoo ebuild存储库
选择镜像的第二个重要步骤是通过/etc/portage/repos.conf/gentoo.conf文件来配置gentoo的 ebuild 仓库。这个文件包含了更新portage数据库(包含portage需要下载和安装软件包所需要的信息的一个ebuild和相关文件的集合)所需要的同步信息。
配置存储库可以通过几个简单步骤完成。首先,如果它不存在,则创建repos.conf目录:
接下来,复制portage提供的gentoo仓库配置文件到这个(新创建的)目录:
复制dns信息
在进行新环境之前,还有一件要做的事情就是复制/etc/resolv.conf中的dns信息。需要完成这个来确保即使进入到新环境后网络仍然可以使用,/etc/resolv.conf包含着当前网络中的dns服务器。
如果不复制dns信息,进入新环境后可能导致网络不可用。
挂载必要的文件系统
稍等片刻,linux的根将变更到新的位置。为了确保新环境正常工作,需要确保一些文件系统可以正常使用。
注:当使用非gentoo安装媒介时,这时可能还不算完。一些发行版将/dev/shm符号链接到/run/shm/,在chroot后将变得不可用。为了让/dev/shm/是一个正常挂载的tmpfs,可以如此修复:
test -l /dev/shm && rm /dev/shm && mkdir /dev/shm
mount --types tmpfs --options nosuid,nodev,noexec shm /dev/shm
还确保设置模式1777:
chmod 1777 /dev/shm
进入新环境
终于到本期笔记的最后一个步骤了,这是关键。
现在所有的分区已经初始化,并且基础环境已经安装,是时候进入到新的安装环境了。这意思即系话将把根(所能访问到的最顶层位置)从当前的安装环境(安装cd或其他安装媒介)变为安装系统(叫做初始化分区)。因此叫作change root或chroot。
完成chroot有三个步骤:
1.使用chroot将根位置从/(在安装媒介里)更改成/mnt/gentoo/(在分区里)
2.使用source命令将一些设置(那些在/etc/profile中的)重新载入到内存中
3.更改主提示符来帮助我们记住当前会话在一个chroot环境里面。
从现在开始,所有的动作将立即在新gentoo linux环境里生效。当然这离完成还很远,所以请留意下一篇的安装笔记吧!
提示:如果安装gentoo时在这一步之后的任何地方中断,那么“应该”可以从这一步“继续”安装,不必再重新给磁盘分区!只需要 挂载根分区 并运行上述步骤,然后通过复制 dns 信息重新进入工作环境。 这也对修复引导程序问题很有用。
结尾
gentoo安装果然复杂,但也充满着挑战性,也是十分有趣的,上面这些安装步骤离安装完成还很远,只要坚持下去总会安装成功的。
本文将会同步到公众号qq596044192中,有兴趣的可以关注一下:
2018-09-01