前言
在第一期的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。
对于本例来说,大家需要准备好以下东西
- VirtualBox虚拟机
- LiveCD
- Internet连接,并选择一个速度较快的镜像
- 命令行操作的基础知识
大家可以根据自己实际情况挑选镜像,个人的经验是国内的镜像速度最快是网易,不过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的安装总体分为几个步骤,每个步骤有多种做法,本例采用最简便的方法,以便读者快速上手(顺序可能和官方手册有少许出入):
- 准备好磁盘
- 前置基础配置
- 配置安装内核(chroot)
- 其他必要的系统配置(chroot)
- 安装bootloader(chroot)
安装
在VBox虚拟机的CD ROM装上LiveCD,启动后默认的syslinux里直接回车即可进入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-8
和zh_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__