Gentoo是一个很是著名的发行版,在Linux高手中很是流行。以前我也是被Gentoo的威名震慑了,因此一直没有尝试安装,最近感受能够尝试一下了。因此今天来看看如何在虚拟机中安装Gentoo吧。本文参考了Gentoo 安装手册,若是想了解更多关于安装Gentoo的知识,能够直接查看官方文档。linux
固然有一说一,Gentoo的安装确实比Arch复杂多了。Arch其实安装起来并不算复杂,就是第一次操做命令行不熟悉,而Gentoo相比之下复杂多了,感受难度是Arch安装5倍不止。特别是配置内核这一项的复杂程度,可能就顶了Arch整个安装的复杂度。web
首先到Gentoo官网下载所需的网络安装镜像,和Arch同样,Gentoo没有提供完整安装包,只有一个网络安装镜像。固然硬要说的话,Gentoo仍是有完整镜像的,不过这个镜像已经三四年没有更新了,因此咱们彻底不用管它。算法
首先新建虚拟机的过程就不说了,我选择的CPU是2核,内存2G,硬盘空间32G,启动方式EFI。除了启动方式必须设置成EFI之外,其余设置所有按你们实际状况来就好了。设置好以后用网络镜像启动虚拟机,应该会看到如图所示的界面。数据库
很是有趣的一点就是Gentoo的Live环境了,它虽然是命令行终端,可是却很是神奇的支持鼠标操做,。鼠标拖动选择文本等操做所有支持,真的是让人惊叹。浏览器
虽然虚拟机是能够支持剪贴板复制等操做的,可是在系统安装过程当中是没办法支持的。因此接下来要输入的大量命令会让人感到十分困扰。因此为了方便最好开启SSH,这样咱们好歹大部分命令能够直接复制粘贴。安全
rc-service sshd start
默认root密码为空,为了可以SSH,还有手动设置一下root密码。bash
passwd
开启成功以后,输入ip a
命令查看一下虚拟机的IP,而后咱们就能够SSH到虚拟机内部了。网络
这样一来就不须要手打命令了。固然并非说全部命令都能无脑复制粘贴,有些地方仍是须要根据本身需求进行修改的。使用SSH还有一个好处就是在下面配置区域的时候,若是你只指定了中文区域,在终端中汉字会显示成方块,可是在SSH中能够正常显示。若是你准备直接在终端中输入命令的话,记得同时启用英文区域。app
固然,由于是虚拟机安装,因此烧录镜像、配置网络等复杂步骤不须要进行,咱们直接从磁盘分区开始。由于我是EFI方式启动,因此要分两个区,ESP以及根分区。less
parted /dev/sda mklabel gpt parted /dev/sda mkpart efi fat32 0% 512M parted /dev/sda mkpart root ext4 512M 100% parted /dev/sda set 1 esp on # 格式化分区 mkfs.fat -F32 /dev/sda1 mkfs.ext4 /dev/sda2
最后将根目录分区挂载为/mnt/gentoo
,就能够进行下一步的工做了。
mount /dev/sda2 /mnt/gentoo
这里简单按个人理解介绍一下Gentoo的包,详细信息请参考关于Stage Tarball的官方文档,简单说来能够分为Stage 1/2/3/4四个类型:Stage 1能够简单理解成源代码的包;Stage 2一样包含了Stage 1的全部文件,可是同时还包含了Stage 1编译出来的文件,也就说是Stage 2是自包含的包(本身能够编译出本身);Stage 3则是包含了系统必备工具的集合,也就是咱们这里要安装的系统基础组件(不包括内核和引导器);Stage 4除了Stage 3的文件以外,还包含了内核和系统引导器,因此Stage 4就是一个可运行的包。这里咱们要学习如何安装Gentoo,因此选择下载Stage 3就能够了,Stage 4主要是用于虚拟机快速运行之类的。
咱们到清华镜像寻找最新的Stage 3的包,能够看到这里有不少文件,x32的咱们不须要,带nomultilib的也不须要,iso的也不须要。咱们要找的就是tar.xz
格式的归档文件,除了包之外,还有三个附加文件分别包含了归档包的内容信息(CONTENTS)、校验信息(DIGESTS)以及加密的校验信息(DIGESTS.asc)。咱们要把文件和三个校验文件所有下载下来。
下载命令以下,固然在下载以前,必须将工做目录切换到/mnt/gentoo
也就是咱们的根目录下,这样作的目的很简单,由于一会要将系统文件解压到根目录下。这里的下载连接是我目前复制出来的,假如你们之后看到本文的话,须要本身打开浏览器从新复制一下文件下载连接。
# 必须先切换到/mnt/gentoo cd /mnt/gentoo wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200223T214502Z.tar.xz wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200223T214502Z.tar.xz.CONTENTS wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200223T214502Z.tar.xz.DIGESTS wget https://mirrors.tuna.tsinghua.edu.cn/gentoo/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200223T214502Z.tar.xz.DIGESTS.asc
若是条件不容许,还可使用另一种方式避免手动输入这么一大长串连接。这就是利用文本浏览器link来上网并下载文件,光标选择,回车点击超连接,d开始下载,q退出浏览器。咱们要作的就是用文本浏览器访问清华镜像网站,而后下载文件。
links https://mirrors.tuna.tsinghua.edu.cn/gentoo/
文本浏览器界面以下,使用起来也不算麻烦,将文件本体以及三个校验文件所有下载下来。
而后用下面的命令来校验文件。
sha512sum -c stage3-amd64-*.tar.xz.DIGESTS
文件正确的话,应该会显示两个OK两个FIALED。失败的是另外一种校验算法,只要有两个OK,就说明咱们下载的文件是正确无误的。
最后用下面命令来解压文件,后面的两个选项的做用是保留归档文件中全部文件正确的权限和命名空间关系。这样Gentoo的Stage3文件就算安装完成了。
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
Gentoo是一个源代码发行版,安装大多数软件的时候,其实都是安装的源代码,而后在本地编译的。为了可以更快更好的编译软件,还须要配置一下portage的编译选项。
# 编辑配置文件 nano /mnt/gentoo/etc/portage/make.conf # 修改COMMAN_FLAGS COMMON_FLAGS="-march=native -O2 -pipe" CFLAGS="${COMMON_FLAGS}" CXXFLAGS="${COMMON_FLAGS}" FCFLAGS="${COMMON_FLAGS}" FFLAGS="${COMMON_FLAGS}" # 添加MAKEOPTS,数字改为虚拟机设置的总内核数+1 MAKEOPTS="-j5"
用下面的命令设置镜像源,推荐选择清华大学镜像源,按空格选中,而后回车确认。设置成功后,应该能够在文件最后面看到清华大学的镜像源。
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf # 或者你懒得选择,直接把清华镜像源加到配置文件后面也能够 echo 'GENTOO_MIRRORS="https://mirrors.tuna.tsinghua.edu.cn/gentoo"' >> /mnt/gentoo/etc/portage/make.conf
而后建立Portage配置文件目录,并将Gentoo安装镜像里的配置文件复制给咱们的系统。
mkdir --parents /mnt/gentoo/etc/portage/repos.conf cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
另外还要复制DNS信息,这里--dereference
参数是必须的,否则可能复制到的只是一个连接而已。
cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
为了让新系统可以正常运行,须要挂载如下文件系统。
mount --types 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
用下面的命令切换到新的环境中,最后一条命令不是必须的,可是它会在命令提示符前面添加一个(chroot)
提示咱们处在新环境中。
chroot /mnt/gentoo /bin/bash source /etc/profile export PS1="(chroot) ${PS1}"
这里不少发行版都使用了不一样的挂载点,最经常使用的挂载点是/boot/efi
,ArchWiki里推荐使用/efi
,而这里Gentoo文档中介绍的是使用/boot
,咱们按照文档走就能够了。
mount /dev/sda1 /boot
Portage是Gentoo的软件包管理器,首先咱们从网络上下载数据库快照。
emerge-webrsync
而后选择列出可用的profile,从中选择一个。这里又用到了另一个工具eselect,它是Gentoo的通用管理界面,让咱们方便的完成系统的各类配置和操做。由于Gentoo安装比较复杂,并且又是编译安装,因此这里选择其余profile的话,可能编译时间会很是长。所以这里你们看看就好,保持默认便可。
# 先列出可用的profile,带星号是目前选择的 eselect profile list # 假如你想选择的话 eselect profile set 2
下面是个人profile输出。
@world集合是Gentoo全部软件和配置的集合,要进行下一步的安装和配置,必须先更新@world集合。
emerge --ask --verbose --update --deep --newuse @world
做为一个源代码编译的Linux发行版,Gentoo的不少软件包并非直接安装二进制版本,而是下载源代码由用户选择编译。USE环境变量就是Gentoo提供给用户的一个工具,利用它能够指定一些环境变量,在编译的时候启用或者禁用某些功能。假如我如今要安装的是Gnome桌面,就能够禁用Qt的编译选项,这样编译出来的软件就不包含Qt的功能,软件包更加小巧,运行起来也会更快一点。
固然新手用户就没有必要更改这些高级选项了,默认的就彻底够用了。若是你想要看看USE变量里面有什么东西的话,能够用下面的命令。
emerge --info | grep ^USE
若是想查看USE变量里面全部可用的选项,能够用下面的命令。
less /var/db/repos/gentoo/profiles/use.desc
首先要配置时区。
echo Asia/Shanghai > /etc/timezone emerge --config sys-libs/timezone-data
而后配置区域。
echo 'zh_CN.UTF-8 UTF-8' >> /etc/locale.gen # 若是你不用SSH,须要添加英文区域 echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen locale-gen # 列出可用的区域 eselect locale list # 选择中文区域的编号 eselect locale set 2
最后从新加载一下环境变量。注意一下上面的设置,若是你是SSH到虚拟机系统的话,能够放心配置中文区域,可是若是你是直接在虚拟机终端里操做的话,须要在eselect locale set
那里选择英文区域,否则汉字是没法正确显示的。
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
官方文档这里详细介绍了如何配置和优化内核,开启必须的功能,关闭没必要要的功能。虽然对于初学者来讲貌似这是很高深的知识,可是若是你照着作的话,会发现配置内核也不是这么困难的工做。固然若是你仍是有点心虚的话,Gentoo也能够自动配置内核。
首先安装内核源代码和内核编译工具。由于Gentoo的安装是在本地编译的,因此用时比较长。假如你发现安装瞬间完成,是由于没有更新配置文件的缘由。须要输入etc-update
并选择-3
自动更新配置文件,而后从新输入命令便可编译安装。
emerge --ask sys-kernel/gentoo-sources emerge --ask sys-kernel/genkernel
fstab是一个很重要的文件,在系统启动的时候,会读取fstab文件并挂载fstab中记录的分区。这里咱们有boot分区和根目录分区两个要挂载的分区。而genkernel工具要安装内核的话,天然须要知道咱们的启动分区在哪里,所以首先要配置fstab文件。
首先用lsblk -f
命令查看分区信息,要注意UUID和标签。另外要注意若是从新分区或者格式化,这些信息就会发生变化。
知道了标签和UUID,就能够填写fstab信息了,虽然也能够用/dev/sda1
这样的块设备名称,可是不够安全。因此咱们用UUID来编写fstab。第一个是分区名,推荐使用标签或者UUID;第二个是挂载点,也就是分区挂载的位置;第三个是分区的文件系统类型;第四个是挂载选项;第五个dump参数,默认0便可;第六个pass参数,对于根分区要设置成1,其余分区设置成2。最后fstab应该相似这样。固然UUID或者标签应该改为你本身实际的值。你的fstab文件应该相似下面这样。
UUID=1f3f0313-cfc3-47d3-90e3-52c6d1b67757 / ext4 noatime 0 1 UUID=2E77-ED51 /boot vfat defaults,noatime 0 2
在开始手动配置内核以前,咱们须要了解硬件的各项信息,这须要安装另外一个包来作到。
emerge --ask sys-apps/pciutils
在配置以前,还能够经过lsmod
命令来查看当前所处的Gentoo Live镜像开启的功能, 这能够做为咱们在配置内核时的重要参考。
一切准备好以后,就能够切换到内核源代码目录并打开配置菜单。
cd /usr/src/linux make menuconfig
这样就会打开一个终端界面的图形化配置工具,和其余一些终端工具操做方法相似,光标键选择,空格选择,按两下Esc退回到上一个界面,/
是搜索。
有些内核选项是必须的,必须编译到内核中,而不是做为模块加载。*
表示包括到内核中,M
表示做为模块加载,[]
只有包括到内核中和排除在外两种选项,<>
则有包括到内核中、排除在外和以模块加载三种选项。下面这些选项都必须以*
方式编译到内核中。
devtmpfs支持。
Device Drivers ---> Generic Driver Options ---> [*] Maintain a devtmpfs filesystem to mount at /dev [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
SCSI磁盘支持。
Device Drivers ---> SCSI device support ---> <*> SCSI disk support
选择支持的文件系统。由于前面我用的FAT32格式化的ESP,EXT4格式化的根目录,因此这里这两项(FAT32也就是VFAT)必须包括到内核中,虚拟内存和proc文件系统也是必选的。其实这里还能够取消掉不须要的文件系统,可是对于新手我不建议取消任何本身不明白的东西,很容易弄的最后内核没办法启动。
File systems ---> < > Second extended fs support < > The Extended 3 (ext3) filesystem <*> The Extended 4 (ext4) filesystem < > Reiserfs support < > JFS filesystem support < > XFS filesystem support < > Btrfs filesystem support DOS/FAT/NT Filesystems ---> <*> MSDOS fs support <*> VFAT (Windows-95) fs support Pseudo Filesystems ---> [*] /proc file system support [*] Tmpfs virtual memory file system support (former shm fs)
假如你使用PPPoE拨号的话,还须要启用如下功能。可是由于咱们是虚拟机嘛,因此就不用动下面的设置了。
Device Drivers ---> Network device support ---> <*> PPP (point-to-point protocol) support <*> PPP support for async serial ports <*> PPP support for sync tty ports
若是你的处理器是多核的,还须要开启SMP(对称多处理器支持)。
Processor type and features ---> [*] Symmetric multi-processing support
就算是虚拟机,也常常遇到使用USB的状况,因此USB也必须启用。
Device Drivers ---> HID support ---> -*- HID bus support <*> Generic HID driver [*] Battery level reporting for HID devices USB HID support ---> <*> USB HID transport layer [*] USB support ---> <*> xHCI HCD (USB 3.0) support <*> EHCI HCD (USB 2.0) support <*> OHCI HCD (USB 1.1) support
由于咱们选择了multlib,因此32和64位的程序都会安装。为了支持32位程序,必须启用32位程序模拟功能。这里其实却是不用怎么改,默认已经都选上了。
Processor type and features ---> [*] Machine Check / overheating reporting [*] Intel MCE Features [*] AMD MCE Features Processor family (AMD-Opteron/Athlon64) ---> ( ) Opteron/Athlon64/Hammer/K8 ( ) Intel P4 / older Netburst based Xeon ( ) Core 2/newer Xeon ( ) Intel Atom (*) Generic-x86-64 Binary Emulations ---> [*] IA32 Emulation
启用GPT支持,由于前面我用的GPT分区表,EFI启动方式,因此这两项也必须启用。
-*- Enable the block layer ---> Partition Types ---> [*] Advanced partition selection [*] EFI GUID Partition support
EFI的支持。
Processor type and features ---> [*] EFI runtime service support [*] EFI stub support [*] EFI mixed-mode support Firmware Drivers ---> EFI (Extensible Firmware Interface) Support ---> <*> EFI Variable Support via sysfs
这里我用的是VMware,因此下列内核选项也必须选择。某些选项依赖其它选项,使用搜索功能查看具体的依赖项,而后依次启用。
[*] Networking support ---> Networking options ---> <*> Virtual Socket protocol <*> VMware VMCI transport for Virtual Sockets Device Drivers ---> Misc devices ---> <*> VMware Balloon Driver <*> VMware VMCI Driver SCSI device support ---> [*] SCSI low-level drivers ---> <*> VMware PVSCSI driver support [*] Network device support ---> [*] Ethernet driver support ---> [*] AMD devices <*> AMD 8111 (new PCI LANCE) support <*> AMD PCnet32 PCI support [*] Intel devices <*> Intel(R) PRO/1000 Gigabit Ethernet support <*> Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support <*> VMware VMXNET3 ethernet driver Input device support ---> [*] Keyboards ---> <*> AT keyboard File systems ---> <*> FUSE (Filesystem in Userspace) support
把上面全部必选项都配置好以后,选择save保存配置文件,而后exit退出。默认配置文件名是.config
,可是最好手动复制一个备份,有时候默认名称的配置文件会莫名丢失,只能重头再配置一次。而后就能够开始编译和安装了。这个过程可能持续十分钟到几个小时,主要取决于你选择的功能大小以及电脑配置。
# 编译内核 make && make modules_install # 编译完成后安装内核到boot分区 make install
若是你感受手动配置内核比较麻烦,或者辛辛苦苦配了半天,结果内核没配对系统进不去了。能够考虑第二种方式,就是自动编译内核。这种方式有个缺点就是会开启大部分选项,因此编译内核用时比较长。
网上查了一下可能须要几十分钟到两三个小时,在虚拟机中编译的话可能用时更长,可是考虑到本身研究如何把内核跑通可能也得用这么长时间,因此自动编译内核也不是不能够。假如你在手动配置内核的时候遭受了不少失败,不妨考虑考虑电脑挂在那里让它慢慢编译。
genkernel all
虽然官方文档说这是可选的,可是为了保险起见咱们仍是安装firmware。
emerge --ask sys-kernel/linux-firmware
别忘了安装initramfs,若是你是自动编译内核的话,能够不用安装initramfs,由于genkernel all
会自动安装内核以及initramfs。
genkernel --install initramfs
内核编译完毕以后,查看/boot
分区内容,应该会看到initramfs和vmlinuz文件,这样内核就准备就绪了。
接下来就是一些系统配置工做。
nano -w /etc/conf.d/hostname # 设置主机名 hostname="mygentoo"
先安装软件包。
emerge --ask --noreplace net-misc/netifrc
而后配置DHCP。
nano -w /etc/conf.d/net # 添加DHCP配置 config_eth0="dhcp"
配置网络自启动。
cd /etc/init.d ln -s net.lo net.eth0 rc-update add net.eth0 default
等到成功进入系统之后,可能会出现没网的状况,由于默认的网络接口名字不必定是eth0,这时候须要使用ip a
查看一下实际的名称,而后从新编辑一下网络配置。
# 添加正确的网络配置 cd /etc/init.d ln -s net.lo net.eno16777736 rc-update add net.16777736 default # 删除错误的配置 rm /etc/init.d/net.eth0 rc-update del net.eth0 default # 启动网络 rc-service net.16777736 start
别忘了设置root密码。
passwd
还有一些系统工具也须要安装。
安装和启动日志工具。
emerge --ask app-admin/sysklogd rc-update add sysklogd default
由于前面设置了中文区域,因此终端会显示方块。最好这里直接预先开启SSH服务,方便之后远程登陆。
rc-update add sshd default
由于系统使用了FAT32和EXT4两个文件系统,因此至少这两种工具必须安装。
emerge --ask sys-fs/dosfstools sys-fs/e2fsprogs
安装DHCP工具。
emerge --ask net-misc/dhcpcd
root用户是特权用户,平常使用并不安全,因此须要添加新用户。
useradd -m -G users,wheel,audio -s /bin/bash yitian passwd yitian
是否是想起来有些地方不对劲,没错,还有一开始下载的stage3文件,假如最后系统成功启动了的话,他们就没用了,能够安全的删除掉。
rm /stage3-*.tar.*
最后一步就是安装系统引导器了,推荐使用grub,功能齐全。
emerge --ask --verbose sys-boot/grub:2
grub-install --target=x86_64-efi --efi-directory=/boot grub-mkconfig -o /boot/grub/grub.cfg
安装完毕以后,输入exit退出chroot环境。
(chroot) livecd ~ # exit
而后就umount分区,而后重启系统。
cd umount -l /mnt/gentoo/dev{/shm,/pts,} umount -R /mnt/gentoo reboot
重启以后应该会看到grub的界面,可是别觉得这就成功了。由于重点是手动配置编译的内核是否可以正常启动。因此接下来继续观察,看看是否能够成功启动内核进入系统。若是你一次性安装成功,那么恭喜了。
可是我先后总共装了三四天才算成功。第一天照着官方文档慢慢看慢慢敲命令,次日卡在了配置内核这一步了,而后先后反复测试,最后把前面的各类步骤弄得很是熟悉,能够直接复制粘贴命令。最后我放弃了手动配置内核,作好了编译大半天的准备,因而改用genkernel自动编译内核。而后最悲催的事情发生了,genkernel半个小时之后失败了。
最后没办法我又开始了手动配置内核的步骤,终于慢慢靠着搜索把文档列出来的全部项都找到并配置好了。并且为了保险起见,此次我没有关闭任何默认内核配置,只按着文档把全部新的项加上去了。终于奇迹发生了,重启以后终于成功了!
安装screenfetch截个图,作个记念。
emerge app-misc/screenfetch
我一开始用的是XFS作根分区的文件系统,也确实在内核中将XFS相关选项设置为编译到内核中,可是奈何不知道哪里漏了,因此最后启动系统的时候,出现了这个错误。理论上找到全部XFS、驱动程序等相关选项,而后添加到内核配置中从新编译一下内核,就能够解决问题了。惋惜的是我对内核配置一窍不通,百般之下只好认栽,从新用EXT4安装了一遍,终于成功了。