该文档对于gentoo linux的安装也精简了一些非必须的和选择性软件。
(如:不同的开机管理程序,根据不同网络情况可能用到的协议)以便可以更快的完成安装。这也使该文档更加精简,阅读起来不需要太多的耐心,很快就可以阅读到需要的资讯。
如因为此文档而发生的任何损害请自行负责。
此文档欢迎在网络上的流传,没有任何版权,但请保留文档完整性、注明出处以及我的电子邮件。
欢迎您的批评与指教:[email protected] 斑竹 2007-07-19
1.1 快速安装的参考
安装光盘的ISO镜像文件放在:http://www.gentoo.org/main/en/where.xml
Minimal CD 提供了可引导的基本安装镜像,并且不包含安装必需的stage3和portage,需要独立下载。
我的建议是浏览 http://www.gentoo.org/main/en/mirrors.xml
选择其中离你较近的服务器去下载最新的:
gentoo/snapshots/portage-latest.tar.bz2
gentoo/releases/<cpu type>/stage3-×-×.tar.bz2
然后将下载的文件加到Minimal CD的ISO中刻录,可以省去一些步骤。
Universal CD 提供了不需要连接网络就可以安装Gentoo所需的软件,但奇怪的是没有提供x86版本的光盘。
LiveCD 提供了可直接用光盘运行的Gentoo桌面系统,还包含了预编译的套件,如:KDE, GNOME 等…
如果你仅下载了Minimal CD,则在安装过程中需要连接网络下载stage3和portage。
要快速的完成Gentoo Linux安装,建议你有1.6Ghz以上中央处理器(Amd,Intel,PowerPC)和512MB内存,并且硬盘上有至少1.6 G的磁盘空间。
(实际上只安装基本的系统用不了多少空间,对系统硬件的要求也相当的低,不包含Xwindows的系统64MB内存就可以运行,但编译过程会变得漫长。)
1.2 准备安装
如果你的计算机BIOS设置默认为CD-ROM优先,可直接使用镜像刻录的CD启动系统,否则需要进入BIOS中设定CD-ROM启动或在系统启动时按下F8选择CD-ROM启动(大部分BIOS支持,但有例外)。
如果用光盘启动,屏幕显示boot之后就没了任何内容,可以尝试禁用帧缓冲(framebuffer)。
boot: gentoo-nofb
光盘启动后:
#date (设定时间正确的时间,data MMDDhhmmYYYY-M月D日h时m分Y年)
#modprobe 模块名称(如设备:3w-9xxx,r8169)
#net-setup eth0 (图形界面设定网络)
手动设定网络:
# ifconfig eth0 192.168.1.10/24 (设定IP和网络掩码)
# route add default gw 192.168.1.1 (设定网关)
# echo nameserver 192.168.1.1 > /etc/resolv.conf(设定DNS)
给硬盘分区:
#fdisk /dev/had (分割磁盘,硬件设备名规则是:普通硬盘为hda;scsi为sda;RAID阵列为cciss)
一个常见的分区表例子:
—————————————————————–
# fdisk -l /dev/sda
Disk /dev/sda: 599.9 GB, 599978409984 bytes
255 heads, 63 sectors/track, 72943 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 12 96358+ 83 Linux
/dev/sda2 13 110 787185 82 Linux swap / Solaris
/dev/sda3 111 72943 585031072+ 83 Linux
—————————————————————–
fdisk常用指令例子:
—————————————————————–
Command (m for help):p (显示现有分区)
Command (m for help):d (删除分区)
Partition number (1-4):(输入要删除的分区号)
Command (m for help):n (新建分区)
Command action
e extended (输入e回车将会建立扩展分区)
p partiton partition(1-4) (输入p回车将会建立主分区)
Partiton number (1-4): (输入要创建的分区号)
当看到first cylider后按下回车,然后在last cylinder 后输入"+分区容量M" (如:给启动分区划+32M)
Command (m for help):t (改变分区类型,比如swap的文件系统类型应该选择为82)
Command (m for help):a (设置启动分区)
Partition number (1-4): (输入分区编号后回车)
Command (m for help):w (将所有操作写入磁盘)
—————————————————————–
用fdisk切好磁盘分区后就可以创建文件系统了,需要注意的是把启动分区用fdisk设置bootable flag(可引导标识)。
可使用 mke2fs, mke2fs -j, mkreiserfs, mkfs.xfs and mkfs.jfs 来创建Linux的文件系统*1。创建和启用交换分区应该使用mkswap 和 swapon。
自使用Gentoo linux以来,我一直用Reiser作为除启动分区以外的文件系统,Reiser对于web网站大量的小文件,的确有更好的性能。即使Reiser还有一些未发掘的小问题也不影响使用。但我不建议使用Reiser来作为开机分区的文件系统。
(使用ext2)
# mke2fs /dev/sda1
(如果使用ext3)
# mke2fs -j /dev/sda3
(如果使用reiser)
# mkreiserfs /dev/sda3
(创建并激活交换分区)
# mkswap /dev/sda2 && swapon /dev/sda2
将根分区挂载到/mnt/gentoo:
# mount /dev/sda3 /mnt/gentoo
Reiserfs文件系统需要加上参数:
# mount -t reiserfs /dev/sda3 /mnt/gentoo
创建和挂载开机启动区:
# cd /mnt/gentoo
# mkdir boot
# mount /dev/sda1 /mnt/gentoo/boot
注意:如果你把/home或/opt放在不同分区,你应该也在/mnt/gentoo下创建对应的目录,并把对应的分区都挂载。
# mount /dev/sda4 /mnt/gentoo/home
# mount /dev/sda5 /mnt/gentoo/opt
如果你没有stage3、portage现在开始下载,并解压缩:
# cd /mnt/gentoo
# wget ftp://gentoo.osuosl.org/pub/gentoo/releases/<cpu type>/current/stages/stage3-<cpu type>tar.bz2
# tar xjpf stage3*
# cd /mnt/gentoo/usr
# wget http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2
# tar xjpf portage*
改变根路径:
# cd /
# mount -t proc proc /mnt/gentoo/proc(挂载proc文件系统)
# cp -L /etc/resolv.conf /mnt/gentoo/etc/ (复制DNS解析)
# chroot /mnt/gentoo /bin/bash (改变目录到新环境)
# env-update && source /etc/profile (更新环境变量)
有网络的话可以在这个时候执行emerge –sync更新目录树。
开始安装Gentoo:
1.3 安装gentoo
设定/etc/make.conf中的(USR,CFLAGS,MAKEOPTS优化参数)
双核心中央处理器应该给编译器加上参数:
MAKEOPTS="-j3"
MAKEOPTS值通常是cpu核心数量+1.
CFLAGS 和 CXXFLAGS变量将定义最优化 gcc C 和 C++ 编译器的参数。虽然我们以通用的方式定义,您将需要分开定义适合您提高效能的设定。原因是每个程序使用的都不同。
常用的优化参数*2设置:
32 bit profile (x86)
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
64 bit profile (amd64)
CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=nocona -O2 -pipe"
CXXFLAGS="${CFLAGS}"
如果你使用Core或Core 2 CPU,GCC 4.1上 Core Solo/Duo使用-march=prescott;Core 2 Duo/Solo则使用-march=nocona。
双核心版本的Core就像这样:
CXXFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
GCC 4.2上使用同样的-march设置,外加-mtune=generic。
优化参数设定完成后可以调用bogo查看编译器是否识别了双核心中央处理器。
结果样本:
—————————————————————–
单核心处理器
# grep bogo /proc/cpuinfo
bogomips : 3337.81
双核心处理器
# grep bogo /proc/cpuinfo
bogomips : 6300.00
bogomips : 6000.00
—————————————————————–
设置系统时区:
(郁闷,Gentoo的时区中没有北京,只有上海和重庆)
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
如果你直接使用系统硬件时钟,应该:
# cp /usr/share/zoneinfo/GMT /etc/localtime
如果你的硬件时钟是使用 UTC,你需要在档案中加入 CLOCK="local",不然你会发现时间偏移了。而且 windows 假设你的计算机使用本地时间。所以如果你用双重开机,你需要设定这个变量,不然你的时间会乱七八遭。
编辑clock文件把时区加进去。
# nano -w /etc/conf.d/clock
clock文件样本
—————————————————————–
CLOCK="UTC"
TIMEZONE="Asia/Shanghai"
CLOCK_OPTS=""
SRM="no"
ARC="no"
—————————————————————–
现在指定你想要使用的 locale:
# nano -w /etc/locales.build
locales.build文件样本
—————————————————————–
en_US/ISO-8859-1
en_US.UTF-8/UTF-8
—————————————————————–
设置本地语言:
# nano -w /etc/locale.gen (一般来说去掉前两行的注释就可用了)
样本如下:
—————————————————————–
en_US ISO-8859-1
en_US.UTF-8 UTF-8
—————————————————————–
非必须的修改,默认的编辑器改为vim:
因为gentoo默认的文件编辑器为nano,用惯了vim之后让我很不习惯。
# emerge vim
# nano -w /etc/rc.conf
注释掉nano
#EDITOR="/bin/nano"
EDITOR="/usr/bin/vim"
接下来设置主机名和域名:
# cd /etc
# echo "127.0.0.1 borneol.net borneol localhost" > hosts
# sed -i -e ‘s/HOSTNAME.*/HOSTNAME="borneol"/’ conf.d/hostname
# hostname borneol
# hostname -f (检查设置的域名)
borneol.net
核心配置:
# emerge gentoo-sources(安装操作系统源代码)
# cd /usr/src/linux
# make menuconfig(配置系统核心)
一般来说默认的核心配置文件直接编译也能很好的工作,但…也有例外。
编译核心选项实在有太多内容,也不适合初学者,但在这里我给出参考资料的链接,或许你有兴趣可以尝试。
Linux 2.6.19.x 内核编译配置选项简介
http://chenzhang.com/diz/viewthread.php?tid=789&fpage=1
# make -j2 (编译核心)
# make modules_install (安装)
# cp arch/i386/boot/bzImage /boot/kernel (拷贝核心到启动分区)
配置文件系统:
编辑你的/etc/fstab文件,以便系统重新启动后可以根据fstab文件挂载分区。
/etc/fstab样本
—————————————————————–
/dev/sda1 /boot ext3 noauto,noatime 1 2
/dev/sda2 / reiserfs noatime 0 1
/dev/sda3 /none swapsw 0 0
—————————————————————–
配置网络:
# cd /etc/conf.d
新建net文件
# nano net
net文件静态ip样本
—————————————————————–
config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default gw 192.168.0.1" )
—————————————————————–
net文件动态dhcp样本
—————————————————————–
config_eth0=( "dhcp" )
dhcp_eth0="nodns nontp nonis"
—————————————————————–
让您的网络接口开机时自动启动,您要把底下这些加入预设的 runlevel 中。
# rc-update add net.eth0 default
1.4系统设置
# passwd (设定Root密码)
# nano -w /etc/rc.conf (配置系统设定)
# nano -w /etc/conf.d/keymaps (配置键盘布局)
安装系统 Log 软件
# emerge syslog-ng
# rc-update add syslog-ng default
非必要,但很多时候会用到的 Cron 服务器
# emerge vixie-cron
# rc-update add vixie-cron default
dhcp客户端
# emerge dhcpcd
常用的文件系统工具
# emerge xfsprogs (xfs文件系统)
# emerge reiserfsprogs (reiser文件系统)
# emerge jfsutils (jfs文件系统)
1.5 开机管理程序
# emerge grub
# nano -w /boot/grub/grub.conf
grub.conf文件样本
—————————————————————–
# 将为开机预设。0为第一,1为第二,以此类推。
default 0
# 使用预设前等待的开机秒数。
timeout 30
# 将漂亮又肥大的 splash-image 启用:)
# 如果您没有安装显示卡,请批注这行
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title=Gentoo Linux
# 核心的分区(或是操作系统)
root (hd0,0)
kernel /boot/kernel root=/dev/sda3
# 以下三行为 Windows 系统适合的双重开机。
# 在我们的例子,Windows是放在 /dev/sda6
title=Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1
—————————————————————–
安装grub
# grub(启动grub)
# root (hd0,0) (确定启动分区,按下回车后会显示该分区的文件系统,如果该分区为ext3格式grub也会显示为ext2)
# setup (hd0) (安装MBR到该分区,按下回车后会显示安装信息)
# quit
当然你也可以安装lilo来作为开机程序,但我更喜欢grub。
接下来你可以重新启动系统shutdown -r now。
然后投入Gentoo的怀抱吧。
================================================
传统的文件系统:ext2
ext2 文件系统是 Linux 的缺省文件系统,也是传统的 UNIX 文件系统(即基于 Berkeley 的快速文件系统,FFS)。在 ext2 中,文件名最大长度为 255 个字符,并且理论上的最大文件系统大小为 4 TB。(Linux 的块设备驱动器则不能超过 2047 GB,什么时候可以买到具有如此之大的存储空间的单块磁盘,别忘了告诉我一声)。
由于其使用广泛,市场上出现了针对 Windows 和 Mac OS X 的 ext2 驱动器,允许您直接从这些操作系统中读取和写入 ext2 文件系统,这使它成为了共享设备(如移动硬盘)极好的格式。
ext2 文件系统支持所有的标准 UNIX 特性:
* 所有者用户 ID 和组 ID。
* 用来控制用户、组以及其他权限和操作系统标志的模式位。
* 条目创建、修改和访问时间(尽管大多数系统为了提高性能,在运行过程中没有开启访问时间跟踪,但这样就丧失了纯 POSIX 1003.1 的兼容性)的存储。
ext2 文件系统的最大缺点在于,与其最初的设计相比,硬盘的大小变大了许多。系统崩溃或出现电源故障后,需要使用 fsck 对文件系统进行检查,而对于具有大量目录和文件的新式硬盘来说,该操作过程非常耗时。
传统的但包括日记记录功能的文件系统:ext3
Linux 的 ext3 文件系统是大部分流行分发版的新的缺省文件系统。与 ext2 相比,它增加了:
* 元数据日记,以确保文件系统的结构总能保持有效状态。这样一来,在系统崩溃或掉电后,基本上不再需要冗长的 fsck 处理过程了。
* 经过散列的树目录索引,用来加速对大型目录的访问时间。
* 联机文件系统大小调整和从 ext2 到 ext3 的免格式化升级能力。
* 更大的最大文件和文件系统大小(分别为 2 和 32 TB)。
尽管与其竞争者(如 Reiser3 或 SGI 优秀的 XFS)相比,ext3 速度并不块,并且可伸缩性也不是很好,但是因为大量成熟的 ext2 维护和管理实用工具的存在,所以对 ext2 的良好兼容性使得它更具有吸引力。
先进高效的文件系统:Reiser
在 Reiser3 文件系统因为其速度和日记记录支持(甚至到现在,它仍是许多 Linux 分发版的缺省文件系统)而获得普遍认可之后,它的设计人员并不满足。
于是对其进行了重写,从而得到了 Reiser4,其中添加了一些附加的并且有趣的特性:
* 通过移动日志来实现有效的日记记录功能。
* 在磁盘空间和速度方面提供对小文件的有效支持。
* 快速处理具有大量文件的超大型目录(的确如此,即使单个目录中包含数百万文件,也不会影响其性能)。
* 源代码级的灵活插件结构,它允许将来很容易地在某个位置添加压缩和加密功能。
* 原子文件系统修改,它确保了磁盘上的文件系统总能保持有效状态。
* 通过刷新分配 (allocate-on-flush) 实现磁盘布局动态优化。
* 支持类似数据库的文件系统事务处理。
*2附:常见CPU优化参数
386:
CHOST="i386-pc-linux-gnu"
CFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i386 -O3 -pipe -fomit-frame-pointer"
486:
CHOST="i486-pc-linux-gnu"
CFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=i486 -O3 -pipe -fomit-frame-pointer"
Pentium (Intel):
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer"
Pentium MMX (Intel):
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"
Pentium PRO (Intel):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentiumpro -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentiumpro -O3 -pipe -fomit-frame-pointer"
Pentium II (Intel):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
Celeron (Intel):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium2 -O3 -pipe -fomit-frame-pointer"
Pentium III (Intel):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
Celeron2 (Intel):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"
Celeron (Willamette-Intel):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
Pentium 4 (Intel):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
K6 (AMD):
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=k6 -O3 -pipe -fomit-frame-pointer"
K6-2 (AMD):
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=k6-2 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=k6-2 -O3 -pipe -fomit-frame-pointer"
K6-3 (AMD):
CHOST="i586-pc-linux-gnu"
CFLAGS="-march=k6-3 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=k6-3 -O3 -pipe -fomit-frame-pointer"
Athlon (AMD):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"
Athlon-tbird, aka K7 (AMD):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-tbird -O3 -pipe -fomit-frame-pointer"
Athlon-tbird XP (AMD):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
Athlon 4(AMD):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-4 -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-4 -O3 -pipe -fomit-frame-pointer"
Athlon XP (AMD):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
Athlon MP (AMD):
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=athlon-mp -O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-march=athlon-mp -O3 -pipe -fomit-frame-pointer"
603 (PowerPC):
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
603e (PowerPC):
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
604 (PowerPC):
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
604e (PowerPC):
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
750 aka as G3 (PowerPC):
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-mcpu=750 -O3 -pipe -fomit-frame-pointer -fsigned-char"
CXXFLAGS="-mcpu=750 -O3 -pipe -fomit-frame-pointer -fsigned-char"
7400, aka G4 (PowerPC):
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-mcpu=7400 -O3 -pipe -fomit-frame-pointer -fsigned-char -maltivec"
CXXFLAGS="-mcpu=7400 -O3 -pipe -fomit-frame-pointer -fsigned-char -maltivec"
7450, aka G4 second generation (PowerPC):
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-mcpu=7450 -O3 -pipe -fomit-frame-pointer -fsigned-char -maltivec"
CXXFLAGS="-mcpu=7450 -O3 -pipe -fomit-frame-pointer -fsigned-char -maltivec"
PowerPC (If you don’t know which one):
CHOST="powerpc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer -fsigned-char"
Sparc:
CHOST="sparc-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer"
Sparc 64:
CHOST="sparc64-unknown-linux-gnu"
CFLAGS="-O3 -pipe -fomit-frame-pointer"
CXXFLAGS="-O3 -pipe -fomit-frame-pointer"
=================================================