虚拟机下安装Gentoo一次失败经历
一、前言
QNAP与群晖等成品NAS不同的地方在于QNAP全系对虚拟机支持较好,且自带HDMI接口。买QNAP的目的,一个是体验接电视机大屏幕看原盘的解码能力,另一个就是使用虚拟机体验其它新奇的系统,比如linux系统,Unix系统等等。
我自从购买了人生第一台笔记本电脑——TCL K40开始,就逐渐喜欢上Linux系统了,在笔记本电脑上尽情地折腾新系统是我的爱好,以致于硬盘里的存货都折腾光了!曾经折腾到凌晨5点,赶得上之前玩网络游戏《龙族》了。
我体验linux系统最早是从Suse Linux开始体验的,那时候桌面版是第9代,桌面是个变色龙,颜色很惊艳,但系统很卡,体验很糟糕;后来逛Linux伊甸园论坛的时候知道了Gentoo Linux和Sabayonlinux系统,后者是基于前者的发行版,当时觉得linux系统真不错,体验了各种linux系统。那时候大部分电脑的系统还是Windows的xp系统,安装系统到打补丁及各种程序下来要花费好几天,那时候网络也慢,从微软官方下载补丁有时候很慢很慢。喜欢折腾的我,爱上linux系统真是王八看绿豆,对上眼了!
购买了mac mini后,一度燃起了我对unix的兴趣,
二、QNAP 453A虚拟机安装Gentoo
为什么选择用虚拟机体验Gentoo,因为虚拟机工作的时候你可以打开网页查看Gentoo Handbook 和 Gentoo WIKI(最好学会看英文原版的,因为英文版更新快,中文版只能参考,版本太久没更新),通过手册安装系统比较方便,不然一摸黑会消耗你的热情。
1、最小镜像安装
关于什么是最小镜像安装及方法见Handbook 选择安装媒介
这方面网易做得挺好的,从网易开源镜像下载速度比官方快一百多倍。
⬆️如上图,点击进入网易gentoo镜像依次进入/gentoo/releases/x86/autobuilds/current-install-x86-minimal/
下载最新的安装光盘镜像install-x86-minimal-20170411.iso
和安装包stage3-i686-20170411.tar.bz2
但是载入后虚拟机启动的时候出错,这点做得真差,我记得很早以前的版本就是这样,提示没法启动。后来看了英文版的Gentoo Handbook才发现中文版的缺陷,英文版有个备注,说是截至2017年4月20日,官方minimal CD不能在UEFI模式下启动。它们只能在BIOS(MBR)模式下启动。必须下载最新的Hybrid ISO(LiveDVD),才能在UEFI模式下启动。
⬆️解决方法是虚拟机左侧隐藏栏选择“功能键”,然后选择F1,送出,接着F2,再送出。
⬆️首先是选择键盘,我选择默认的键盘。
fdisk /dev/vda
⬆️如果网络已配置,ifconfig命令应该会列出一个或多个网络接口(围绕着lo),虚拟机就不需要无线设置了。接下来是格式化硬盘,使用p键来显示磁盘当前的分区配置。键入n键来创建一个新分区,然后键入p键来选择是主分区类型,后面跟一个1键来选择是第一个主分区。当提示“first sector”选项时,请确保它开始于2048(这是引导器所必须的)然后回车选择默认。当提示“last sector”时,选择默认来创建一个分区。用虚拟机体验gentoo的话就只需要一个分区即可。不需要像Windows那样分成C盘和D盘了,敲击w保存分区布局并退出 fdisk。
分区和创建文件系统可以参考Handbook 相关内容
mkfs.ext4 -j /dev/vda1
⬆️创建文件系统,建立ext4文件系統, -j 选项表示启用 journaling(日志记录):
⬆️下载stage3,网易镜像速度很快,最快达到每秒1.2MB。
tar xvjpf stage3-i686-20170718.tar.bz2 --xattrs --numeric-owner
nano -w /mnt/gentoo/etc/portage/make.conf
按照手册上的步骤,查看一下make .conf文件。
⬆️CTRL+X退出。
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
⬆️选择中国163mirror,速度最快。
mkdir /mnt/gentoo/etc/portage/repos.conf
⬆️接下来是通过复制 /etc/portage/repos.conf/gentoo.conf文件来配置ebuild库。如果没有这个文件的话,可以先建立。
cp -L /etc/resolv.conf /mnt/gentoo/etc/
copy DNS信息,接下来是挂载必要的文件系统
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
⬆️chroot相当于change root 的意思,就是将原来的安装CD或其它介质改为硬盘上安装系统了。
emerge-webrsync
⬆️配置Portage,从Web安装ebuild库快照。在该操作过程中,可能会出现webrsync抱怨缺少/ usr /portage文件夹。这是可以预料的,没有什么可担心的——该命令将创建位置。文末说有新消息需要我们阅读,可以使用上述命令。
eselect news list
⬆️消息条数太多,可以用上述命令列表后再阅读。
eselect news read
⬆️更多关于这个命令的可以通过man news.eselect来进行阅读
eselect profile list
⬆️上述命令是列出当前的配置文件。如果选择了完整的桌面环境配置文件,比如gnome,那么上述这个过程可以大大延长安装过程所需的时间。那些时间紧迫的人可以通过这个经验法则选择:文件名称越短,系统的更新设置越不具体;越不特定的,系统所需的包就越少。换言之:
选择default/
linux / x86/ 13.0 几乎不需要进行更新,而选择default/ linux / x86 /
13.0/desktop/gnome/由于用户级init程序从openrc到systemd的变化需要许多软件包安装,再加上还要安装GNOME桌面环境。
emerge --ask --update --deep --newuse @world
⬆️默认的桌面配置情况下,几乎不需要更新
eselect profile set 4
⬆️选择gnome桌面版本看看需要更新什么。选择Y,同意更新。
⬆️一共需要编译199个软件,耐心等待吧!所以我觉得要体验gentoo,配置要高,因为编译需要。
⬆️出去玩了一天,晚上回来发现已经编译成功了。
接下来Handbook里是讲如何配置USE变量。USE是Gentoo提供给它的用户的其中一个最强大的变量,新手不会配置,看看就好。大多数的发行版会使用尽可能多的支持特性编译它们的软件包,这既增加了软件的大小也减慢了启动时间,而这些还没有算上可能会涉及到的大量依赖性问题。Gentoo可以让你自己定义软件编译的选项,而这正是USE要做的事。默认的设置是放在make.defaults这个文件系统里。
⬆️之前安装的时候忘记设置管理员root密码了,设置一下。接下来是选择时区:
ls /usr/share/zoneinfo
echo "Asia/Shanghai" > /etc/timezone
然后配置地区
nano -w /etc/locale.gen
⬆️将需要的如US前面的#号去掉,添加zh_CN。
locale-gen
下一步是运行locale-gen,它将生成/etc/locale.gen文件中指定的所有地区。
eselect locale list
eselect locale set 4
env-update && source /etc/profile && export PS1="(chroot) $PS1"
现在重新加载环境,接下来配置内核。
emerge --ask sys-kernel/gentoo-sources
ls -l /usr/src/linux
这里出错了,几个白色四方体的出现。回过头来看,原来是我输入错误,将gentoo-sources的s忘记输入了。
⬆️上面是正确的输入。
下载内核。
⬆️genpatches是一个针对Gentoo Linux内核的补丁包的补丁集
emerge --ask sys-kernel/genkernel
⬆️编译内核可以选择手动和自动,我选择自动,即genkernel这个工具。选择Yes
nano -w /etc/fstab
⬆️接下来,编辑/etc/fstab文件来使包含有第二个值为/boot/的那条的第一个值指向到正确的设备。我这里为/dev/vda1,这里千万别弄错,不然后面编译内核找不到boot了。
emerge --ask sys-kernel/linux-firmware
genkernel all,进行内核编译,出错了。使用下列方法:
ls -l /usr/src/linux
zcat /proc/config.gz > /usr/src/linux/.config
cd /usr/src/linux
make olddefconfig
make modules_prepare
⬆️上图不小心又输入错了,检查一遍重来。
make && make modules_install
make install
似乎哪里又出现问题了。那只能选择手动方式来进行编译了。
别怕,手动配置内核经常被认为是最困难的步骤。事实并非如此——但是当您手动配置几次内核之后,你就不会再觉得它有多么难了:)后面有箭头的表示里面有选项需要设置。
加星号的表示写入内核,M表示模块。
键入e,退出
⬆️第二选项时关于cpu是64位,不是的话就不需要了,第三个是关于一般设置的。
⬆️重新开始编译
⬆️貌似成功了。
当内核完成编译,复制内核镜像到/boot/。这由make install命令来处理。
emerge --ask sys-kernel/genkernel
genkernel --install initramfs
emerge --ask sys-boot/grub:2
emerge --ask --update --newuse --verbose sys-boot/grub:2
grub-install /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg
做好扫尾工作。
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
reboot
重启后进入这样的页面
ls /boot/kernel* /boot/initramfs*
2、LiveCD模式下的gentoo安装
我下载并虚拟机安装的是/gentoo/releases/x86/20160704/下面的livedvd-x86-amd64-32ul-20160704.iso ,推荐用QNAP系统自带的DownloadStation套件下载,很快就下载好了!
⬆️进入QNAP桌面,打开桌面右下角的虚拟机工作站。
⬆️如何创建新虚拟机我已经在上述的原创第六篇章里说过了,就不详细说了。
⬆️空格上都可以填写的,右侧选择即可。
⬆️已经建立好的虚拟机,状态灰色表示没开机。
⬆️点左下的电源按钮,选择启动
⬆️启动LIveCD后登录默认用户,登录密码为空,直接点登录即可。
⬆️点开konsole。
⬆️如图进行root(管理员)新密码的建立,键入:
sudo passwd
⬆️然后键入su,输入之前新建的密码,以管理员身份登录。很明显的,gentoo后面不再是$而是#了。
⬆️如果不小心输错密码,只能重新来过了。
⬆️之前键入的命令fdisk /dev/sda因为是虚拟机硬盘,所以导致出现错误,现在可以这个命令可以修改一下硬盘名为vda即可,以下命令进行相同修改。
fdisk /dev/vda
在Command (m for hlep)后键入p,打印分区表,可以看出还没分区。
⬆️然后键入n,如果对这些字母的含义不懂,可以键入m查看一下各字母代表的功能,或者直接enter键选择默认。在Partion number(1-4,default 1)按回车选择默认也好,键入1也行,即表示全盘用。
⬆️然后选择扇区头和扇区尾,按回车选择默认即可。
⬆️再键入p看一下,看到下面有个vda1可以用了。
⬆️如果忘记了命令,可以键入m查看一下
⬆️键入w,保存并退出。
mkfs.ext4 /dev/vda1,
建立ext4文件系統。
mount /dev/vda1 /mnt/gentoo
进行挂载到root目录。
⬆️键入date,看看日期和时间是否正确,然后链接网站http://mirrors.163.com
links http://mirrors.163.com
原版可以直接复制LiveDVD里的安装包,但LiveDVD版本太低,安装包复制好后更新也要花时间,不如现在花时间下载最新版本的。选择stage3-i686-20170718.tar.bz2
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
选择最快的网站,国内选择163比较好。
mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf
可以多选。
⬆️同样选择中国(china),只能选择一个。这个和前面的最小镜像安装不同。
cp -L /etc/resolv.conf /mnt/gentoo/etc/
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
proc是一种文件系統,存在內存中,mout proc的意思就是说接下來chroot后可以和livecd共用相同的proc系统,proc里面的內容基本上由內核提供。 而mount dev 的意思呢? 当然也是为了chroot后可以和livecd使用同样硬件设备,最常用的如硬盘。
#chroot /mnt/gentoo /bin/bash
#env-update
>> Regenerating /etc/ld.so.cache...
# source /etc/profile
# export PS1="(chroot) $PS1"
source /etc/profile
export PS1="(chroot) $PS1"
(chroot) livecd / # passwd
出现错误,需要进make.conf里修改一下。
emerge --sync
ls /usr/share/zoneinfo
(chroot) livecd / # echo "Asia/Shanghai" > /etc/timezone
(chroot) livecd / # emerge --config sys-libs/timezone-data
(chroot) livecd / # nano -w /etc/locale.gen
(chroot) livecd / # locale-gen
(chroot) livecd / # nano -w /etc/fstab // -- 把 / 的类型改成了 noatime --
(chroot) livecd / # emerge --ask net-misc/dhcpcd
(chroot) livecd / # emerge --ask sys-apps/pciutils
(chroot) livecd / # emerge --ask sys-kernel/linux-firmware
(chroot) livecd / # emerge --ask sys-kernel/gentoo-sources
(chroot) livecd / # eselect kernel list
(chroot) livecd / # eselect kernel set 2 // -- 设置链连到新的内核上 --
(chroot) livecd / # ls -l /usr/src/linux // -- 查看一下链连以确认 --
(chroot) livecd / # zcat /proc/config.gz > /usr/src/linux/.config
(chroot) livecd / # cd /usr/src/linux
(chroot) livecd / # make olddefconfig // -- 直接利用原配置 --
(chroot) livecd / # make modules_prepare
(chroot) livecd / # make && make modules_install
(chroot) livecd / # make install
(chroot) livecd / # emerge --ask sys-kernel/genkernel
(chroot) livecd / # genkernel --install initramfs
(chroot) livecd / # emerge --ask sys-boot/grub
(chroot) livecd / # grub2-install /dev/sda
(chroot) livecd / # grub2-mkconfig -o /boot/grub/grub.cfg
(chroot) livecd / # rc-update del autoconfig default // -- 从默认boot中移除启动AutoConfig服务,否则您的root密码是每次启动时复位。--
(chroot) livecd / # exit
livecd gentoo # poweroff
后面的输入和最小镜像时候一样,就不反复上图了。
三、总结
这次安装的失败经历,是一次很宝贵的经验,下次再次安装gentoo的时候就能知道自己在哪里失败!其实安装过程中我经历了次小失败,正是因为吸取了教训,才能尽力往下编译,虽然这次最终也证明是失败的。


























































































校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案