QNAP TS-453A与Gentoo不得不说的故事 篇一:虚拟机下安装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的时候就能知道自己在哪里失败!其实安装过程中我经历了次小失败,正是因为吸取了教训,才能尽力往下编译,虽然这次最终也证明是失败的。
张小茂
校验提示文案
值友1593715495
校验提示文案
独醉西风
校验提示文案
m0nkey
校验提示文案
jinsongtry
校验提示文案
lostheaven119
校验提示文案
呐鸭
校验提示文案
yucx
校验提示文案
败家大叔
校验提示文案
zeutaur
校验提示文案
宅猫嘟嘟
校验提示文案
silent_x
校验提示文案
在那山的那边海的那边
校验提示文案
I-an
校验提示文案
棊___
校验提示文案
值友9678800526
校验提示文案
值友9678800526
校验提示文案
独醉西风
校验提示文案
棊___
校验提示文案
lostheaven119
校验提示文案
jinsongtry
校验提示文案
I-an
校验提示文案
值友1593715495
校验提示文案
在那山的那边海的那边
校验提示文案
silent_x
校验提示文案
宅猫嘟嘟
校验提示文案
zeutaur
校验提示文案
败家大叔
校验提示文案
张小茂
校验提示文案
yucx
校验提示文案
m0nkey
校验提示文案
呐鸭
校验提示文案