我使用的是笔记本电脑,Gentoo安装在虚拟机上,当然此篇教程同样适用于非虚拟机环境!同时为了安装的顺利,也强烈推荐使用真实环境安装!
虚拟机 | CPU | 内存 | 存储 |
---|---|---|---|
vmware workstation 12 pro | core i7 3610 qm | 8G | 30G hdd |
最最最 重要的参考文档就是Gentoo的官方handbook和Gentoo wiki了。记得一定要看官方的英文版的,比较权威,而且比较新。国内的一些翻译的虽然也不错,不过有点过时,你可能因此引发一些奇怪的错误。
如果你有耐心看官方文档,其实建议别看我的教程了,因为肯定没有handbook说的好和完整,而且我也是按照他来的^_^
官方手册地址如下: Gentoo Handbook
Gentoo的自由选择和独特的包管理深深地吸引了我!仅以此文记录我基于stage3安装Gentoo的过程。记录是为了更好的学习和回顾,也梳理一下自己容易犯的错误和学到的知识点!
安装前准备好如下:
重要提示:请务必在vmware使用IDE的硬盘,试过STAT和SCSI无论怎么都过不了,害得我装了N次!!!!
minimal cd:一开始我们需要有一个可以启动的系统,在这个可以启动的系统上来帮助我们安装另外一个操作系统,也就是我们的Gentoo。minimal cd就是一个可以启动的系统,它已经配置好了基本的Gentoo环境方便我们安装自己的Gentoo.
首先用虚拟机装载live cd的iso,然后开启ssh服务。这里注意虚拟机要设置成桥接模式
/etc/init.d/sshd start
dhcpcd -HD eno16777736
如果DHCP不可以,就手动使用
net-setup eno16777736
来配置吧!
为了方便ssh连接,我们就用密码登入,记得修改
vi /etc/ssh/sshd_config
/ 搜索PasswordAuthentication yes 改成yes
使用parted工具来分区,采用GTP,划分EFI分区。parted工具使用optimal选项更好的进行对齐。
#对sda分区
parted -a optimal /dev/sda
#设置GTP label
mklabel gpt
#使用mb作为单位
unit mib
#划分4个分区,分别给GRUB2,EFI,swap和根分区
mkpart primary 1 3
name 1 grub
set 1 bios_grub on
print
mkpart primary 3 131
name 2 boot
mkpart primary 131 643
name 3 swap
mkpart primary 643 -1
name 4 rootfs
set 2 boot on
print
quit
mkfs.vfat /dev/sda2
mkswap /dev/sda3
swapon /dev/sda3
mkfs.ext4 /dev/sda4
mount /dev/sda4 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda2 /mnt/gentoo/boot
如果虚拟机关过了,下次记得要重新过载下再继续安装哟!
#下载到gentoo目录下
cd /mnt/gentoo
links http://mirrors.163.com/gentoo/releases/amd64/autobuilds/current-stage3-amd64/
#解压,xattrs把包含的扩展属性也一起解压
tar xvjpf stage3-amd64-20151001.tar.bz2 --xattrs
下载stage3-amd64-20151001.tar.bz2 当然你也可以直接迅雷下载下来传递给虚拟机(通过xftp),这样可能快点!
我是4核的就设4个
vi /mnt/gentoo/etc/portage/make.conf
#增加一行
MAKEOPTS="-j4"
改变根目录,切换到stage3解压出来的gentoo环境中。这个解压出来的基本环境就是你要安装的属于自己的Gentoo.不过现在离完全安装好还远着呢。
空格表示选中,回车确认!
# 安装包的源,推荐163
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
#同步SYNC的服务区,选个 china的就行了
mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf
cp -L /etc/resolv.conf /mnt/gentoo/etc/
在把root切换到新的环境时需要保证以下文件系统正常挂载。如果虚拟机重启过了继续之前的安装,不要忘记挂载这些文件哦.
# /proc伪文件系统,通过LINUX内核提供给环境一些重要信息
mount -t proc proc /mnt/gentoo/proc
# sys也是一个伪文件系统,和proc很相似,提供一些更加结构化的信息,这里的--make-rslave是之后使用systemd需要的
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
# /dev由设备管理器udev管理,下面是所有设备文件。这里rbind意思就是当访问/mnt/gentoo/dev设计上就是访问/dev,毕竟你现在自己的Gentoo还远远没装好呢!
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
# 根目录从/切换到了/mnt/gentoo
chroot /mnt/gentoo /bin/bash
#重新生效环境变量
source /etc/profile
#给新的环境设置一个标记,避免误解
export PS1="(chroot) $PS1"
portage是Gentoo的核心技术,是一个软件包管理器。它管理着所有的软件包。
#更新portage tree,将现有软件包更新到24小时内最新,使用quiet模式来加速
emerge --sync
#或者
emerge --sync --quiet
CFLAGS是配置C编译器选项的一个环境变量;USE变量在编译安装包的时候对包进行裁剪。通过选择系统提供的几个profile模板可以默认的USE,CFLAGS值。
#罗列系统提供的预制的profile模板
eselect profile list
# no-multilib *选项会设置成纯64位的系统,32位的包和库全部会被弃用
eselect profile set 11
Gentoo强大的变量,可以让你在编译安装包的时候自由选择弃用或者启用相应的支持。
#查看当前的USE配置
emerge --info | grep ^USE
#查看USE变量的使用关键字描述
less /etc/portage/profile/use.desc
#修改USE的设置(这里增加的USE都是的profile的default设置基础上增加)
vi /etc/portage/make.conf
#该目录下保存时区信息
ls /usr/share/zoneinfo
#中国只有上海可以找到,写入到/etc/timezone文件内
echo "Asia/Shanghai" > /etc/timezone
#通过配置系统包按照/etc/timezone更新时间
emerge --config sys-libs/timezone-data
#可选:安装中文字体
emerge wqy-zenhei
emerge wqy-microhei
#指定Local,本地编码
nano -w /etc/locale.gen
#去掉一些项前面的注释,没有则自己添加
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
#检测下是否可用
locale -a
#设定全局默认编码(也可以使用eselect locale list | grep zh_CN然后通过set来设置)
nano -w /etc/env.d/02locale
#添加如下内容
LANG="zh_CN.UTF-8"
LC_COLLATE="C"
#设定用户级的locale
nano -w ~/.bashrc
#添加如下
export LANG="zh_CN.UTF-8"
export LC_COLLATE="C"
#更新所有环境变量和应用更改
env-update && source /etc/profile
source ~/.bashrc
#这时候标记没了。。。再加下吧。。。
export PS1="(chroot) $PS1"
下载内核源码了,这个是你启动你自己的Gentoo的必须,现在使用的环境调用的是live cd的内核。
emerge --ask sys-kernel/gentoo-sources
ls -l /usr/src/linux
这里用两种方式,一种是手动编译,另外一种使用genkernel工具。毫无疑问手动的方式更优,能更好的针对个体来对编译进行优化设置。我们选用这种方式。
cd /usr/src/linux
make menuconfig
其他内容保持默认,以下内容勾选
#比较下面哦
Processor type and features --->
[*] EFI runtime service support
[*] EFI stub support
General setup --->
[*] Configure standard kernel features (expert users) --->
里面子菜单的可以保持默认
#各种文件系统也一定要写入内核,特别是你们自己用到的,尽量都勾选上
File systems --->
(Select one or more of the following options as needed by your system)
<*> Second extended fs support
<*> Ext3 journalling file system support
<*> The Extended 4 (ext4) filesystem
<*> Reiserfs support
<*> JFS filesystem support
<*> XFS filesystem support
...
Pseudo Filesystems --->
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
vmware使用使用SCSI的话,务必勾选上相关的SCSI支持 其他控制器的类型也要选择
#这个是SCSI磁盘设备模块,必须选择。
Linux Kernel Configuration
-> Device Drivers
-> SCSI device support
- > SCSI disk support
#这个是BusLogic设备驱动模块。使用这个设备的的朋友需要选取。
Linux Kernel Configuration
-> Device Drivers
-> SCSI device support
-> SCSI low-level drivers
-> BusLogic SCSI support
#这个是LSI Logic设备驱动模块。使用这个设备的的朋友需要选取。
Linux Kernel Configuration
-> Device Drivers
-> Fusion MPT device support
-> Fusion MPT (base + ScsiHost) drivers
编译
前面记得已经修改过make.conf并行来执行哦!
make && make modules_install
make install
UEFI启动拷贝内核image到另外个目录
mkdir -p /boot/efi/boot
cp /boot/vmlinuz-4.0.5-gentoo /boot/efi/boot/bootx64.efi
配置modules
#查看可用模块
find /lib/modules/4.0.5-gentoo/ -type f -iname '*.o' -or -iname '*.ko' | less
#使用模块,3c59x是3Com系列网卡的驱动
nano -w /etc/conf.d/modules
modules="3c59x"
安装固件
emerge --ask sys-kernel/linux-firmware
安装genkernel
虽然不用genkernel来编译内核,不过后面systmd有用
emerge genkernel
genkernel --install initramfs
nano -w /etc/fstab
/dev/sda2 /boot vfat defaults,noatime 0 2
/dev/sda3 none swap sw 0 0
/dev/sda4 / ext4 noatime 0 1
/dev/cdrom /mnt/cdrom auto noauto,user 0 0
emerge --ask --noreplace net-misc/netifrc
nano -w /etc/conf.d/net
#静态IP
config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.0.1"
#动态IP
config_eth0="dhcp"
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default
nano -w /etc/rc.conf
emerge --ask app-admin/syslog-ng
rc-update add syslog-ng default
emerge --ask sys-process/cronie
rc-update add cronie default
#如果使用dcron或者fcron还要执行这句
crontab /etc/crontab
emerge --ask sys-apps/mlocate
emerge --ask sys-kernel/linux-firmware
默认设置为启动
rc-update add sshd default
emerge --ask net-misc/dhcpcd
注意:在虚拟机上使用efibootmgr工具,然后使用UEFI引导会出错,该方式建议在真实环境中使用! ps: 我没有试过grub2工具来使用UEFI引导,可能这样可以成功,有兴趣的同学可以试试。我用efibootmgr通过UEFI,试了各种可能性都不行。当然我觉得这是vmware和gentoo本身的问题,在vmware通过UEFI引导gentoo,我并没搜索到成功的例子!
我们选择比较先进的UEFI方式来启动,因此我们选择采用工具efibootmgr而不是grub2
emerge --ask sys-boot/efibootmgr
!!重要:必须使用UEFI启动的系统来执行efibootmgr命令才有效,否则报错not support this system 这里推荐使用:ubuntu 的 livel cd,如果想方便点可以直接使用desktop的iso,比如我就是这么做的!
加载ubuntu,挂载相应的disk然后执行efibootmgr
#更改ubuntu密码切换到root
sudo passwd root
su root
#挂载文件系统和disk
mkdir /mnt/gentoo
mount /dev/sda4 /mnt/gentoo
mount /dev/sda2 /mnt/gentoo/boot
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
#安装下efibootmgr先
apt-get install efibootmgr
#efibootmgr配合initramfs来加载系统,直接在ubuntu live cd环境下执行
efibootmgr --create --disk /dev/sda --part 2 --label "Gentoo Installed By KamiWan" --loader "\efi\boot\bootx64.efi"
采用vmware来安装gentoo的同学建议使用bios来引导,使用UEFI无法引导gentoo、
#安装grub2
root #emerge --ask sys-boot/grub
#配置grub2
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub/grub.cfg
当输出结果中表示找到了启动image的时候,就可以了!
#输出
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.16.5-gentoo
Found initrd image: /boot/initramfs-genkernel-amd64-3.16.5-gentoo
done
由于内核编译的选项错综复杂,你少勾选了,或者虚拟机本身的原因导致的无法启动,那么请使用genkernel来编译内核吧。然后把生成的内核印象和initramfs使用起来即可
注意,还是需要挂载必要的文件系统哦!
genkernel all
mkdir -p /boot/efi/boot
cp /boot/kernel-genkernel-x86_64-4.0.5-gentoo /boot/efi/boot/bootx64.efi
efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l "\efi\boot\bootx64.efi" initrd='\initramfs-genkernel-x86_64-4.0.5-gentoo'
如果需要删除启动的条目
#查看现状
efibootmgr -v
#删除启动条目
efibootmgr -b 编号 -B