前言

第一期的Gentoo大冒险里某介绍了Gentoo的背景、来源和大概的情况,这次让我们真正进入到Gentoo操作环节里来。

认识一个发行版最可靠的方法就是实际使用,在使用前无疑需要先安装,这一期的大冒险,就来看看Gentoo Linux是如何安装配置的。

顺便,由于像Gentoo这样安装起来不那么“傻瓜”的发行版对于刚刚上手的人算门槛较高。所以,Twitter上11区群众们发明了#gentooinstallbattle这个tag(来源参考),表现gentoo安装过程中的疑问和趣事XDDD 可以说,OSをインストールするという最高の遊び,正是出于这种喜感吧XDDDD

参考资料

以下信息均来源于Gentoo的官方文档或者wiki内容,如果有任何疑问,可以先看官方的文档寻求帮助,并且文档有多语言(包括简体中文)。

之前某自己也整理了一份相对简单的Gentoo安装流程,请移步wiki

选择版本

32bit / 64bit

这是首先遇到的问题,某的经验是如果没什么特殊需求的情况下,都推荐64bit的,好处是可以利用超过4GB的内存。考虑到如今64bit的OS以及应用程序基本没明显问题,以及内存越来越大的情况,使用64bit几乎是没什么争议的。

在Linux 64bit上,还能通过multilib来支持32bit的应用程序(例如Flash Player等)

另外有一种说法是32bit运行的比64bit快,这个某没做过认真比较,个人感觉是没显著区别。

Update 2013/05/21

好吧,这是某听信谗言,没有自己验证的结果;当然某潜意识里根据以前的经验和获得信息是认为64bit更快的,但消耗内存情况来说是32bit略胜;不过问题在于差距究竟有多少。

某决定做一个测试来验证这个疑问。

CPU架构

Gentoo支持众多的CPU架构,一般情况下PC都是x86架构,不论是32bit还是64bit。

常见的消费级CPU,例如Intel的CPU如Core2 / Core i系列,AMD64,如Athlon/Phemon/FX系列都是x86-64的即AMD64的64bit CPU

选择x86或者AMD64的Gentoo镜像皆可。

准备工作

本次大冒险采用的选择是,VirtualBox里安装x86(即32bit)的Gentoo Linux;同时采用的是stage3,最常见的方式

关于stage3的说明:stage3是已经提供toolchain(如编译器、系统库)二进制包的打包。

熟悉LFS的巨巨应该知道,安装LFS之前需要一个能跑的Linux/Unix系统以便第一次构建toolchain;构建完成后chroot进入LFS准备环境构建最终运行的环境。

在gentoo里,您也可以通过stage1或者stage2开始构建系统,但它的主要提供Gentoo开发者目的。如果没有特殊需要,不推荐从stage1开始;请使用stage3。

对于本例来说,大家需要准备好以下东西

  1. VirtualBox虚拟机
  2. LiveCD
  3. Internet连接,并选择一个速度较快的镜像
  4. 命令行操作的基础知识

大家可以根据自己实际情况挑选镜像,个人的经验是国内的镜像速度最快是网易,不过DNS解析有时候会异常慢;其他大学的镜像在公网上使用不够理想。某推荐的是北陸先端科学技術大学院大学的镜像,地址是http://ftp.jaist.ac.jp/pub/Linux

LiveCD可以从以下地址获取到:

http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/x86/current-iso/

里的这个文件:

install-x86-minimal-20121213.iso

Gentoo的安装总体分为几个步骤,每个步骤有多种做法,本例采用最简便的方法,以便读者快速上手(顺序可能和官方手册有少许出入):

  1. 准备好磁盘
  2. 前置基础配置
  3. 配置安装内核(chroot)
  4. 其他必要的系统配置(chroot)
  5. 安装bootloader(chroot)

安装

在VBox虚拟机的CD ROM装上LiveCD,启动后默认的syslinux里直接回车即可进入LiveCD界面。

genoo-livecd
genoo-livecd

在LiveCD里只有最常用的工具,比如vi或者nano,挑选习惯使用的编辑器吧。

0. 网络配置

由于之后会使用到网络,这里需要配置一下;如果是VirtualBox默认的NAT,这里DHCP默认就已经配置OK,尝试ping看看是否正常即可。

如果您希望通过ssh连接完成整个安装过程,请运行以下命令开启ssh

$ passwd # 设置root密码
$ /etc/init.d/sshd start # 开启sshd

1. 准备好磁盘

安装PC首先要考虑的是磁盘分配,本次就利用最简单的MBR磁盘,将/boot单独分区;利用fdisk或者parted进行分区工作。

gentoo 普通情况下安装完在1G左右,考虑虚拟机日常使用,建立VBox的磁盘分配在30G左右。

如果您想设置LVM2,请参考某之前写过的文章

建立如下的分区

注意/boot分区的boot flag

分区         大小     文件系统    挂载点
---------   -------   ------   ------
/dev/sda1   64MB      ext2     /boot
/dev/sda2   512MB     swap
/dev/sda3   30G       ext4     /

创建文件系统

$ mkfs.ext2 /dev/sda1
$ mkfs.ext4 /dev/sda3
$ mkswap /dev/sda2

挂载到目录下准备开始安装工作

$ mount /dev/sda3 /mnt/gentoo
$ mkdir /mnt/gentoo/boot
$ mount /dev/sda1 /mnt/gentoo/boot

2. 前置基础配置

在chroot到运行环境的目录前,需要做一些配置的准备工作。

确认DNS的配置

$ nano -w /etc/resolv.conf

下载tarball

  • 这里使用的是stage3以及portage的最新snapshot
  • 下载最新的snapshot可以减少之后sync时需要传输的文件
  • 请自己对应寻找最新的stage3和snapshot

stage3的内容就是后面搭建系统最基本需要包含的文件,例如目录树结构,编译器,系统库和必要的配置文件等。

portage snapshot是最新的portage打包文件,它包含了portage树里软件包的信息,安装软件包时需要依赖它。

$ cd /mnt/gentoo
$ wget 'http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/x86/current-stage3/default/default/20130326/stage3-i486-20130326.tar.bz2'
$ wget 'http://ftp.jaist.ac.jp/pub/Linux/Gentoo/snapshots/portage-latest.tar.bz2'

解压stage3和portage snapshot

$ tar xvpf stage3-i486-20130326.tar.bz2 # 注意解压到/mnt/gentoo
$ tar xvf portage-latest.tar.bz2 -C /mnt/gentoo/usr # 注意解压到/mnt/gentoo/usr

配置make.conf

这个文件的作用是emerge安装软件包时,portage的配置信息,下面将详细解说

$ nano -w /mnt/gentoo/etc/portage/make.conf
CFLAGS="-march=i486 -O2 -pipe" # 编译时的CPU优化参数,-march如何设置请参考http://en.gentoo-wiki.com/wiki/Safe_Cflags
CXXFLAGS="${CFLAGS}"
CHOST="i686-pc-linux-gnu" # 编译的目标系统的架构,参考同上

MAKEOPTS="-j2" # make的参数,-j即运行的job数量,gentoo手册建议是物理CPU核数+1,例如是物理双核的,这里可以设置-j3

GENTOO_MIRRORS="http://ftp.jaist.ac.jp/pub/Linux/Gentoo/" # 下载distfiles(源代码、patch等)的镜像地址

SYNC="rsync://ftp.jaist.ac.jp/gentoo-portage" # emerge --sync时的rsync镜像地址

USE="unicode bash-completion ipv6" # USE Flag,这里不必纠缠,是portage的一部分,可以暂时不管

至此完成了porage的基本配置

挂载其他必要的东西

$ mount -t proc none /mnt/gentoo/proc
$ mount --rbind /dev /mnt/gentoo/dev

chroot进安装运行环境

$ chroot /mnt/gentoo /bin/bash
$ env-update
$ . /etc/profile
$ export PS1="(chroot) $PS1"

至此已经进入了chroot环境,在这里所做的操作都是对最终运行环境生效的。

同步portage树

$ emerge --sync

emerge是通过portage对软件包进行操作的包管理器,相当于debian的apt等。

配置时区

设置系统的时区;Linux/Unix系统一般认为主板上的硬件时间是UTC的(即GWT标准时),在OS里设置时区以适应用户

$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 例如UTC+8区

准备工作基本就绪,下面进入最重要的步骤。

3. 配置安装内核

某在写这篇大冒险前几天安装时发现现在stage3已经带了最新的stable内核(3.7.10),如果各位读者发现内核源代码没有的话,请先安装;这里某默认大家都使用最常见的内核版本

$ emerge -av gentoo-sources

确认内核版本选择情况

$ eselect kernel list

Available kernel symlink targets:
  [1]   linux-3.7.10-gentoo *

$ eselect kernel set 1

eselect是portage提供对gentoo系统的配置管理工具

这里使用社区已经提供的自动化内核编译配置工具genkernel

$ emerge -av genkernel

开始编译内核

$ genkernel --menuconfig all
$ genkernel --menuconfig --lvm all # 适合配置了lvm2的用户

内核选项配置是很大的一个话题,默认这里内核已经有常用选项,在VBox里没有问题。想了解更多有关内核的配置,请移步Linux Kernel Projects。

退出menuconfig界面后genkernel便开始自动编译内核的过程(例如make module/bzImage/ramdisk等),并自动安装。

检查内核已正常安装

$ ls /boot/kernel-*
$ ls /boot/initramfs-*

一般来说,这里最可能出问题,所以请仔细和耐心一点。

4. 其他必要的系统配置

内核配置安装完毕,系统还有其他一些必要的配置工作需要进行,才能保证安装的完整。

配置/etc/fstab

fstab负责管理系统boot后如何挂载磁盘,典型配置如下:

/dev/sda1   /boot       ext2  defaults   1 2
/dev/sda2   none        swap  sw         0 0
/dev/sda3   /           ext4  noatime    0 1
/dev/cdrom  /mnt/cdrom  auto  noauto,ro  0 0
proc        /proc       proc  defaults   0 0

主机名

/etc/conf.d/hostname管理主机名。

$ nano -w /etc/conf.d/hostname

###

hostname="tux"

另外不要忘记在/etc/hosts里添加别名。

网络配置

gentoo利用启动脚本文件的名字来标记多个同类服务的不同实例,例如网卡配置就是如此。

$ cd /etc/init.d
$ ln -s net.lo net.eth0
$ rc-update add net.eth0 default # 配置开机启动

rc-update是管理init系统配置的工具。

/etc/conf.d/net管理主机的网络配置信息。

$ nano -w /etc/conf.d/net

###

动态获取

config_eth0="dhcp"

或者静态

config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"
routes_eth0="default via 192.168.0.1"

root密码

$ passwd

配置locale

根据需要修改locale配置,在需要生成的locale前去掉注释,例如en_US.UTF-8zh_CN.UTF-8

$ nano -w /etc/locale.gen # 修改locale.gen配置
$ locale-gen # 生成locale

安装system logger

$ emerge -av syslog-ng
$ rc-update add syslog-ng default

(可选) 安装cron

它有很多实现,使用常见的

$ emerge -av vixie-cron
$ rc-update add vixie-cron default

(可选) 文件索引

如果喜爱使用locate命令寻找文件,那么安装

$ emerge -av mlocate

(可选) 远程访问的常见手段,sshd

$ rc-update add sshd default

(可选) 安装文件系统工具,例如某使用reiserfs

$ emerge -av reiserfsprogs

(可选) 网络工具

$ emerge -av dhcpcd # DHCP客户端
$ emerge -av ppp    # PPPoE客户端

至此,完成了系统绝大多数的配置

5. 安装bootloader

即使系统配置安装完毕,磁盘上如果没有bootloader,那么硬件还是无法知道如何引导至新安装的系统。我们的情景比较简单,传统的BIOS、MBR磁盘;某将采用grub(不是grub2哦)。

首先是安装

$ emerge -av grub

写入挂载信息/etc/mtab

$ grep -v rootfs /proc/mounts > /etc/mtab

在磁盘上安装bootloader

$ grub-install --no-floppy /dev/sda

配置grub

$ nano -w /boot/grub/grub.conf

###

default 0
timeout 5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux 3.7.10
root (hd0,0)
kernel /boot/kernel-gentoo-x86-3.7.10-gentoo real_root=/dev/sda3 radeon.modeset=1
initrd /boot/initramfs-gentoo-x86-3.7.10-gentoo

保存后退出。

至此我们已经完成了Gentoo系统安装的全部步骤,下面将退出chroot,完成善后工作。

退出chroot,并卸载磁盘。

$ exit
$ cd ~
$ umount -l /mnt/gentoo/dev{/shm,/pts,}
$ umount -l /mnt/gentoo{/boot,/proc,}
$ reboot

并移除CD ROM里的镜像,现在我们可以进入刚刚安装完毕的Gentoo里玩了XDD

后话

虽然Gentoo是安装完了,不过这才是刚刚开始,进入全新的系统后,会发现几乎什么都没有。

所以下次大冒险的话题将是介绍一些Gentoo系统基本命令以及用法,帮助大家快速熟悉它。

另外,有什么想了解的话题,也可以和某联系XDDD

__END__