为什么是Gentoo?
在以往,学习Linux可以从安装linux系统开始,但是现在Linux系统安装变得越来越简单,但是为了学习,我们必须挑一个有点儿挑战性的linux发行版,Gentoo是一个安装稍为麻烦的linux发行版本,正好适合我们来学习安装系统。
Gentoo的安装基本上是依赖网络的,因此在安装前,我们必须保证我们的计算机能连接上网络。
我们用Vmware虚拟一台计算机来安装系统,这样更方便学习和游戏,在Linux下学习,在Windows下游戏,学习游戏两不误。
可以在这里下载:http://www.vmware.com/cn/products/workstation/workstation-evaluation
1. 启动计算机所需要的启动CD
[点击下载当前使用的启动CD](http://distfiles.gentoo.org/releases/x86/autobuilds/20160621/install-x86-minimal-20160621.iso)
2. stage,stage的文件档案包含了安装gentoo的基本环境,linux文件目录结构。
[点击下载当前使用的版本](http://distfiles.gentoo.org/releases/x86/autobuilds/20160628/stage3-i686-20160628.tar.bz2)
3. portage,是一个软件文件快照,是gentoo软件包管理的仓库目录
[点击下载当前使用的portage](http://gentoo.osuosl.org/snapshots/portage-20160602.tar.bz2)
4. xshell 为了方便控制虚拟机,我们需要一个终端模拟器,xshell正是我们所需
[在这里可以下载到它](http://xshell.en.softonic.com/)
下图是光盘映像的选择,正是我们下载的install CD
我选择了网络桥接方式,等同于把虚拟机和主机接着同一个集线器般,这样方便分配IP地址。
当出现下图画面时,直接按回车.
Install CD装载预设的内核,返回一个root shell给用户 。
看到上图的画面时,虚拟机启动已成功,这是一个基于LiveCD的linux系统。
现在轮到Xshell出马了,不知道你有没有安装好了Xshell?
为了使用Xshell,我们得打开LiveCD的sshd服务,还得设置root密码,LiveCD默认root是空密码。
我们进入虚拟机,敲入以下命令:
passwd root #输入任意能记住的密码
vi /etc/ssh/sshd_config #修改sshd配置文件,具体修改看下图
/etc/init.d/sshd start #启动sshd服务
sshd_config配置里的第44行改为PermitRootLogin yes,允许root通过ssh远程登入本机
第72行打开PasswordAuthentication yes
呼叫xshell,建立新连接,具体参考下面图示:
上图Name为任意词,Host请填入虚拟机的IP,可以通过在虚拟机内敲入:
Linux比较流行的格式是ext3,ext4,xfs,这可以和windows的NTFS,FAT作对比。
EXT3/EXT4/XFS等格式在Linux下称为文件系统。
我们可以通过Linux提供的工具:FDISK,GDISK等,对硬盘进行分区和格式化。
- Linux文件系统没有盘的称呼,它只有一个符’/’, 叫根,树根的根,它也像树根一样,是所有文件的起源。
- 访问任何一个Linux文件,它的绝对路径必定是在’/’开始的。
- Linux任何一个常规目录都可以成为类似于windows的盘符,之所用用常规来形容,是因为有的目录是比较特殊的,如/dev,是硬件设备挂载目录,/dev里面的文件就是系统所能访问的硬件设备,这也是Linux有别于window的一个地方,Linux把硬件当作一个文件去使用,当你操作(读写)硬件时,就像操作文件般简单。又如/proc, 这是一个内存里的数据映射的文件的目录,里面文件的内容如实反映了当前系统内核的设置,读写/proc文件就能和内核实时交互。
- 硬盘分区后可以随意挂载在Linux的目录下,一个成功的挂载方案的前提是:根目录’/’下面必须有分区挂载。也就是说,如果硬盘只有一个分区,这个分区就必须挂在’/’下面,如果硬盘有两个分区,除了挂载在’/’下的分区,另外一个分区可以任意挂载到Linux的常规目录下,例如:/home。
- 分区的挂载其实就是等于为硬盘分配一个盘符,像windows般, 分区挂载在’/’下面,我们可以称呼这个分区为’/’盘(根盘),但我建议还是忘掉windows关于盘符这样的称呼。
- Linux有一个标准去规范文件目录:Filesystem Hierarchy Standard (FHS),我们暂时只需要知道几个重要的目录:
(1) / : root根目录;
(2) /usr : unix software resource, 是Linux软件安装和执行的目录;
(3) /etc : Linux软件的配置文件目录
- 首先,我们要知道,硬盘要有一个表格去记录:分几个区?每个区的大小?
- 于是,就有不同的分区记录方法,主要是MBR(Master Boot Record)和GPT(GUID partition table)
- MBR方式只规划一个很少的空间(64字节)去记录分区表格,这个空间大小仅能记录4组分区信息,因此,MBR方式只能把一个硬盘分成4个区,有时候4个区可能不能满足需求,聪明的人们想出了一种间接记录的方法,这就有了主分区和扩展(逻辑)分区的称呼,扩展分区的意思是在分区里额外扩展出一个空间去记录硬盘分区表,扩展出来的新的记录空间就不用受MBR 64byte大小的限制,可以分割出多个逻辑分区。这就是等于先在MBR里记录一条信息,指出更详细的分区表格请到扩展分区的空间查找,这种间接的方法就像C语言的指针。
- GPT方式没有MBR的限制,GPT使用了34个相当于MBR区块大小的空间,用来记录分区表格,而且GPT不同于MBR仅有一个区块被破坏就死翘翘,GPT除了使用硬盘开始的34个区块记录分区表格外,还使用了硬盘最后的33个区块来备份表格。为什么是33个区块,不是34个备份区块? 因为GTP第1个区块是用来存放开机管理程序的,这也是为了兼容MBR, MBR本身大小是512字节,但是预留了446字节是用来储存开机程序的。
- 开机管理程序(boot loader)是存在放硬盘开始的第一(0号)个区块里
(1) 为什么要在第一个区块呢?当然是为了方便读取和记忆。
(2) 什么程序会去读取boot loader呢? 答案是BIOS,相信大家都认识了,BIOS是写在主板ROM上的一个程序,只要主板一通电,BIOS就会自动运行。
区别就是FDISK只能认识MBR分区表格
而GDISK认识的是GPT
我们保守一点,采用FDISK对硬盘进行分割。
lsblk #输入这个命令可以列出当前可系统里面的存储设备
在下面我把硬盘分割成两个盘,一个是1024M大小,另一个是39G大小
最后按w保存,硬盘分区完成,接下来进行硬盘的格式化
上图中,我使用一个命令,mkfs.xfs 将/dev/sda2格式化为xfs格式, 其中mkfs.xfs可以设置很多参数去改变硬盘的效能,不过我们用预设的参数就已经很理想了,我的计划是把/dev/sda2挂载在 / 下面。
我再用mkswap 把/dev/sda1格式化成swap格式的分区,这个是用于虚拟内存的,当物理内存不足时,系统会使用这个虚拟内存空间(用硬盘来模拟内存,所以叫虚拟内存)。
直至此,硬盘的分区和格式化完毕,接下来进行Gentoo系统环境的安装,stage的安装。
我们下载一个工具winscp将1.2.2小节提及到的文件传输至虚拟机里
winscp下载
mount /dev/sda2 /mnt/gentoo #把硬盘sda2这个分区挂载到/mnt/gentoo这个目录
#然后我们打开winscp将方件伟输到/mnt/gentoo目录下
cd /mnt/gentoo #进入到gentoo目录,经过硬盘挂载后,/mnt/gentoo目录相当于硬盘的分区盘符
tar xvf stage3-i686-20160628.tar.bz2 #解压stage包,tar命令相当于window的rar,是包管理命令
tar xvf portage-20160602.tar.bz2 -C /usr
#安装Portage快照,一个用来告诉Portage哪些软件标题可用于安装、哪些配置文件可以由管理员选择等等的文件集合。
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf #选择镜像文件
cp -L /etc/resolv.conf /mnt/gentoo/etc/ #复制DNS信息
#下面命令是挂载必要的文件系统
mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys #/sys 是和 /proc 类似的文件系统
mount --make-rslave /mnt/gentoo/sys #--make-rslave操作是稍后安装systemd支持时所需要的。
mount --rbind /dev /mnt/gentoo/dev #--make-rslave有绑定挂载的意思
mount --make-rslave /mnt/gentoo/dev
经过上面的准备(安装),已经为我们创造了一个新的linux环境,接下来我们就进入这个新的环境
现在所有的分区已经初始化,并且基础环境已经安装,是时候进入到新的安装环境了。这意思着会话将把根(所能访问到的最顶层位置)从当前的安装环境(安装CD或其他安装媒介)变为安装系统(叫做初始化分区)。因此叫作change root或chroot。
完成chroot有三个步骤:
使用chroot将根位置从/(在安装媒介里)更改成/mnt/gentoo/(在分区里)
使用source命令将一些设置(那些在/etc/profile中的)重新载入到内存中
更改主提示符来帮助我们记住当前会话在一个chroot环境里面。
chroot /mnt/gentoo /bin/bash
source /etc/profile #profile 是系统关于环境参数的变量设定
export PS1="(chroot) $PS1" #PS1变量是命令提示字符,就是我们按完enter后再次出现的字符
echo "Asia/Shanghai" > /etc/timezone #更改/添加时区
# 配置地区
# 地区不只是指定系统应该使用的与系统进行交互的语言,同时也指定了字符串排序,日期和时间的显示等规则。
sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
#复制上面的命令把/etc/locale.gen文件 en_US.UTF-8 UTF-8 前面的#去掉
locale-gen #运行locale-gen,它将生成/etc/locale.gen文件中指定的所有地区。
env-update && source /etc/profile && export PS1="(chroot) $PS1"
#执行上面这条命令再次更新系统环境,我们可以通过set这个命令可以查看当前系统环境所有变量
swapon /dev/sda1 #将虚拟内存打开,避免编译软件时物理内存不足,造成编译失败
通过以上几步,我们基本完成了gentoo系统的配置,接下来我们进行最重要的一步,那就是安装kernel,严格来说Linux只是一个kernel。
没有kernel,系统就没法启动,更不要说运行。可能你会问:我们并没有安装kernel,为什么现在我们可以运行系统? 其实,我们是用了liveCD里面的kernel,chroot进入的gentoo环境也是因为LiveCD里有编译好kernel,也因为有这个kernel,LiveCD才能提供一个miniLinux的环境。
在以往,kernel编译和安装是最难的一步,不过在gentoo里,可以通过genkernel这工具用来自动化生成并安装Linux内核,简单到傻瓜化。
手动配置内核经常被Linux用户认为是最困难的步骤。事实并非如此——但是当您手动配置几次内核之后,你就不会再觉得它有多么难了:)
无论如何,有一件事是真实的:当手动配置内核时,了解(硬件)系统是至关重要的。大多数信息可以通过安装包含lspci命令的sys-apps/pciutils来收集:
emerge –ask sys-apps/pciutils #这条命令用来安装pciutils
除此之外还可以运行lsmod来查看安装CD使用什么内核模块,它可能对启用什么提供了一个好的暗示。
首先我们得下载kernel的源代码:
emerge –ask sys-kernel/gentoo-sources
下面是一个关于内核配置的连接:
内核配置指导
因为Linux内核配置有很多很多的章节,所以在这里就不再讨论了。
手动配置的确很麻烦,但通过手动配置无疑能对硬件有更深的认识,亦能初步了解kernel的架构。
genkernel的方法很简单,它是将所有的硬件驱动,用到的不用到的都编译成模块,在系统启动时动态检测计算机需要用到的驱动,然后再加载。
emerge --ask sys-kernel/genkernel #安装genkernel软件
genkernel all #自动编译和安装kernel
kernel安装好后,linux系统算是初步安装完毕,接下来进行几项系统配置。
这个文件是linux系统关于硬盘分区挂载的配置文件
文件记录分区挂载点(挂在哪个目录下),分区的格式,分区的挂载属性(是否可以读写)等等
#通过下面的方法编辑/etc/fstab文件,加入我们要挂载的硬盘:
cat > /etc/fstab <<eof
/dev/sda2 / xfs noatime 0 1
/dev/sda1 swap swap defaults 0 0
eof
# 'cat >' 的意思是把标准输出输入 '>' 后面的文件; '<<eof' 的意思是输入'eof'结束输出
# fstab 共有六个字段
#第一个字段是对分区的描述,也就是设备文件的路径
#第二个字段是分区挂载点,也就是分区应该挂载到的地方
#第三个字段给出分区所用的文件系统
#第四个字段给出的是挂载分区时mount命令所用的挂载选项。由于每个文件系统都有自己的挂载选项,我们建议你阅读#mount手册(man mount)以获得所有挂载选项的列表。多个挂载选项之间是用逗号分隔的。
#第五个字段是给dump使用的,用以决定这个分区是否需要dump。一般情况下,你可以把该字段设为0(零)。
#第六个字段是给fsck使用的,用以决定系统非正常关机之后文件系统的检查顺序。根文件系统应该为1,而其它的应该#为2(如果不需要文件系统自检的话可以设为0)。
nano -w /etc/conf.d/hostname #nano是一个简易编辑器,需要按ctrl+x退出
# 设置主机名变量,选择主机名
nano -w /etc/conf.d/net
# 复制下面几行到shell,设置ip地址和路由
cat > /etc/conf.d/net <<eof
config_eth0="192.168.1.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.1.1"
eof
#注意上面的eth0是网卡接口名,可能有别于eth0,先用ifconfig看看
ifconfig | head -n 1| cut -d ':' -f 1
#用上面这条命令可以输出第一个网卡接口名,如果不是eth0,就用它把eth0替换掉
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default
#这三条命令可以让eth0在电脑启动时自动启动,记得用你的网卡名替代eth0.
passwd #敲入这个命令设置root密码,请记着你所设置的密码。
我们在硬盘分区时提到boot loader, 它是用来引导操作系统启动的,所以boot loader一般是安装在硬盘的第一块空间上-MBR,如果以GPT方式记录分区的,boot loader也是需要安装到硬盘第一块区间上的。
Boot loader有很多选择,针对不同的BIOS,有另一种BIOS叫UEFI(Unified Extensible Firmware Interface),它是配合GPT来使用。不同的BIOS有不同的boot loader选择,GRUB2支持目前所有的BIOS,所以我们选择GRUB2 作为系统的Bootloader。
GRUB2安照很简单,通过下面这条命令就可以完成安装
emerge –ask sys-boot/grub:2
安装好GRUB2,需要配置使它能进入工作状态,下面这条命令是把GRUB2放到MBR的头部中。
grub2-install /dev/sda
下面的命令则是配置GRUB2的,它会自动寻找编译好了的kernel,生成配置文件。
grub2-mkconfig -o /boot/grub/grub.cfg
经过一番折腾,Linux安装完毕,reboot!