Gentoo Linux常见问题

Daniel Robbins  Author
Colin Morey  Reviewer
John P. Davis  Editor
Eric Stockbridge  Editor
Stoyan Zhekov  Editor
Carl Anderson  Editor
Jorge Paulo  Editor
Sven Vermeulen  Editor
Benny Chuang  Editor
Jonathan Smith  Editor
范华  Translator
张乐  Editor

更新于2006年 2月 13日
本文档的原始版本最后更新于2007年 10月 15日

1. 问题:

让我们开始

请注意很多问题都已经在官方的Gentoo文档和指南中给出了答案。这里只是简单列出一些常见问题。为了解决那些这里没有作出解答的问题,同时为了对Gentoo和GNU/Linux的工作机制有个更深入的理解,请您阅读一下文档或者是man page。

安装

软件包管理系统

使用方法

维护

开发

资源

2. 让我们开始

Gentoo这个词该如何发音,它有什么意义吗?

Gentoo是一种体型较小的,行动快速的企鹅,读音为"gen-too"("Gentoo"中的"g"不发重音,它类似于"gentle"中的"g"),Gentoo企鹅的学名是Pygoscelis papua。Gentoo这个名字是福克兰群岛(马尔维纳斯群岛)的居民给它们取的。

Gentoo有什么与众不同的地方?

Gentoo使用了一个类似于BSD ports的系统,叫作Portage。Portage是一个软件包管理系统,在Gentoo系统上安装和维护软件时它带来了很大的弹性。它为用户提供了编译时选项支持(通过设置USE标记),条件性依赖关系,软件包安装前总结,安全的安装(通过使用sandbox)和卸载软件,系统profile,配置文件的保护特性

使用Gentoo,你可以通过源代码构建一个完整的系统,并且可以使用你自己的优化选项。对于什么软件包需要安装、什么软件包不需要安装,你可以拥有完全的控制权。Gentoo为你提供了多样化的选择,你可以按照你自己的参数选择来安装Gentoo,而这也是为什么Gentoo会被称作元发行版的原因。

Gentoo是一个活跃的发行版,整个版本使用的是一个快速的开发模型:补丁被迅速的整合进主流的开发树,文档的更新速度是以天来计算的,Portage的功能上的增加很频繁,官方版本一年发布两次。

3. 安装

当我使用了“-O9 -ffast-math -fomit-frame-pointer”优化选项后系统变的很不稳定,请问有什么解决办法吗?

请不要自寻麻烦的使用高于-O3的优化选项,对于现有版本的gcc来说它并不支持这些。太激进的优化选项有时会使编译器的编译流程产生的汇编代码做出完全不同的事。

在你提交一个bug之前,请尝试使用CFLAGS -O2 -march=<your_arch>编译。

如何才能更改root(或是其他用户)的密码?

你可以使用passwd命令改变你登录用户的密码。作为root来讲,你可以通过passwd username命令改变任何一个用户的密码。如要获取进一步的信息,请参考man passwd.

如何添加一个普通用户?

使用命令adduser username将会添加一个名为“username”的用户,然而这样做不会提供给这个用户很多你想给他的权限。所以请最好使用如下的命令:

代码 3.1: 添加用户

# useradd -m -G users,audio,wheel username

这将会在系统中添加一个名为“username”的用户。audio选项把他们添加到了audio组以便他们可以获得声音设备的访问权。wheel选项把他们添加到了wheel组中,它允许用户使用su命令来获得root用户的权限。

为什么一个用户无法通过su来变成root?

因为安全上的原因,只有wheel组的成员才可以通过su命令变成root,为了把一个用户加入wheel组,你可以使用下面的命令。

代码 3.2: 把用户添加进wheel组

# gpasswd -a username wheel

我如何做才能禁用掉devfs?

Gentoo可以使用内核级的devfs、用户层的udev或者静态的/dev目录。随着2.6版本内核的来临以及在各个架构平台上的逐渐稳定,我们推荐使用udev。请查看udev指南获得一些如何配置udev的信息。

如果你想要使用静态的/dev,请在/etc/conf.d/rc中设置RC_DEVICES="static"

我能把Gentoo从一个版本升级到另一个版本而不去重装吗?

实际上,不同的版本安装好以后没有什么不同。Gentoo 1.4和之后的版本都是基于glibc-2.3.x。使用命令emerge --sync && emerge -uDN world可以使你的整个系统升级到“最新的Gentoo”。每个版本之间的区别只在于安装媒介和预编译包的不同。请阅读Gentoo升级指南以获得更多有关profile和它们在升级过程中所扮演角色的信息。

我的内核无法启动,我现在该怎么办?

你不必重新按照安装时的步骤重新做一遍,只需要检查一下内核和所有与之相关联的步骤是否必须重来就可以了。假设你的Gentoo的安装是/dev/hda1 (/boot)、/dev/hda3 (/)、 /dev/hda2为swap:

代码 3.3: 重新配置内核

启动安装光盘直到你得到了一个提示符
我们首先挂载所有的分区:
# mount /dev/hda3 /mnt/gentoo
# mount /dev/hda1 /mnt/gentoo/boot
# swapon /dev/hda2
# mount -t proc none /mnt/gentoo/proc
然后我们chroot进入Gentoo的环境并配置内核:
# chroot /mnt/gentoo /bin/bash
# env-update && source /etc/profile
# cd /usr/src/linux
# make menuconfig
现在修正那些以前选错的或者选上以前未选的选项
接着退出并编译你的内核:
# make && make modules_install
现在拷贝你的bzImage文件覆盖掉以前的那个:
# cp arch/i386/boot/bzImage /boot/<kernel_name>
如果你使用的是LILO,重新运行一下lilo——GRUB用户可以跳过这步:
# /sbin/lilo
现在退出chroot环境并重新启动。
# exit
# umount /mnt/gentoo/proc /mnt/gentoo/boot /mnt/gentoo
# reboot

如果问题是出在你的bootloader的配置上,那么可以使用相同的步骤,只不过用重新配置(不需要重新编译)你的bootloader这一步取代配置/编译内核就可以了。

我的代理服务器需要认证,我该怎么办?

要让Portage在这样的情况下自动使用,可以在/etc/make.conf中这样定义:

代码 3.4: /etc/make.conf

HTTP_PROXY="http://username:[email protected]:portnumber"
FTP_PROXY="ftp://username:[email protected]:portnumber"
RSYNC_PROXY="rsync://username:[email protected]:portnumber"

怎样刻录一个ISO文件?

你需要使用raw模式刻录这个文件。这意味着你不能将这个文件简单的放置在CD上,而是需要把它视作一张完整的CD。

你有很多CD刻录工具可以使用,要一个一个的介绍它们是很徒劳无益的,然而介绍几个比较普及的工具并没有什么害处。

我该为自己的CPU选择哪一个CD/stage?

首先,你需要找出你使用的是什么CPU。假设它是一块Pentium-M。接着你需要找出这块CPU的通用指令集是什么,和什么指令集相兼容。你可以在CPU的生产厂商的网站上寻求答案,然而Google也同样很有效率:-)。

如果你还是无法肯定的话,选择一个“低级”点的CD/stage,像是i686甚至是x86(或者是你所使用的架构中的等价物)。这可以确保你的系统可以工作,但是可能比那些进一步优化过的系统会慢一些。

请注意除了Gentoo建立二进制stage时所使用的编译选项之外,还有非常多的选项可以使用。请看一下gcc指南来了解如何配置-march.

我无法在重启后连接到网络,哪里出错了呢?

首先你需要检查一下内核是否找到了你的网卡。使用命令ifconfig -a并看一下eth0或是wlan0(在确认有无线网卡的情况下)。你可能会需要加载特定的内核模块使得内核能够正确的监测到网卡。如果是这种情况的话,请确认这些内核模块已经在/etc/modules.autoload.d/kernel-2.6(或是kernel-2.4,如果仍然使用2.4内核的话)中列出了.

如果你忘记了在内核中加入对你网卡的支持,你需要重新配置一次内核。

如果你的网卡已经被内核识别,但是你使用DHCP来配置网络的话,有可能是你忘记emerge dhcpcd了。你需要用安装CD重新启动你的电脑并安装dhcpcd.

我们也提供了如何使用安装CD修复你的系统的相关信息。

我想从grub或是lilo启动Windows,但是黑屏了,我该怎么办呢?

这是一个已知的问题。Windows在当它不是安装在第一个硬盘时会拒绝启动。要搞定这个,你需要在引导管理器的配置文件中作一些小改进来“欺骗”一下Windows并让它相信它是安装在第一个硬盘上的。请注意在下面的例子中,Gentoo安装在hda(第一个硬盘),Windows安装在hdb(第二个硬盘)。根据你的需要改变配置文件。

代码 3.5: grub.conf中关于Windows双重启动条目的例子

title Windows XP
     map (hd1) (hd0)
     map (hd0) (hd1)
     rootnoverify (hd1,0)
     chainloader +1

代码 3.6: lilo.conf中关于Windows双重启动条目的例子

other=/dev/hdb1
     label=WindowsXP
     table=/dev/hdb
     map-drive = 0x80
     to = 0x81
     map-drive = 0x81
     to = 0x80

这会使Windows相信它安装在第一个硬盘上并且会没有疑问的启动。更多的信息可以参考GRUB文档man lilo.conf,取决于你使用哪个引导程序。

我该怎样使用Stage1或Stage2的tarball来安装Gentoo?

Gentoo的安装手册只是描述了如何使用stage3的tarball来安装Gentoo的过程。不过,Gentoo还是提供了stage1和stage2的tarball。但是它们是为开发所预备的(发布工程团队从stage1的tarball产生stage3的tarball),一般用户不应该使用它们:一个stage3 tarball可以很好的被用来自举一个系统。为此你必须有一个可用的互联网连接。

自举的意思是为你的系统建立一个工具链(C库和编译器),之后安装所有的核心系统软件包。要自举一个系统,先安装一个stage3。在你开始配置内核之前,修改一下bootstrap.sh以便它适合你的需要,接着就运行它。

代码 3.7: 自举系统

# cd /usr/portage/scripts
# vi bootstrap.sh

# ./bootstrap.sh

下一步,使用新建的工具链重新建立所有的核心系统软件包。尽管stage3的taball已经提供了它们,我们还是需要重新建立它们。

代码 3.8: 重建所有的核心系统包

# emerge -e system

现在你可以继续配置内核。并且你将不能再使用预编译的GRP软件包了.

4. 软件包管理系统

软件包是以什么格式保存的?

我们实际上并不“保存”任何软件包。相反,Gentoo提供了可以为你所需某个特定版本的软件解决依赖关系、获得源代码并且编译成可执行文件的这样的一组脚本。我们通常只为快照或是某发行版本建立二进制文件。文档Gentoo Ebuild HOWTO从各个方面交代了ebuild脚本里的细节。

对于完整的ISO发布,我们使用.tbz2的格式建立了一套完整的二进制软件包,这种格式是和.tar.bz2格式兼容的,只是文件最后附加了一些元信息。我们可以通过它们来快速高效地安装一个可用的 ( 虽然是没有完全优化过的)某个版本的软件包。

使用Gentoo的Portage建立RPM包(Redhat package manager文件)也是可能的,但是目前来说还是无法使用已有的RPM文件在Gentoo上安装软件。

我想自己执行./configure这步,可以吗?

可以的,但是这么做既费事,也不是推荐的做法。因为做这一步需要对Portage的内部机制和命令有很好的理解,所以相反我们推荐由你自己为ebuild打补丁并让它为你做你想要的任何事,然后再把它放进Portage overlay里(这也是为什么它会存在的道理)。这样做对管理来说有好处,并且这样可以兼顾到易用性。请查看一下Ebuild HOWTO了解更多详情。

我该怎样做才能在防火墙后使用emerge?

关于这个问题请看一下代理rsync, 和手动下载源代码文件

如果我不能用rsync,该怎么办?

如果你在处在屏蔽了rsync的防火墙的后面,你可以使用emerge-webrsync通过普通的HTTP请求来获取并安装一个Portage的快照。请查看一下代理部分文档中的关于通过proxy下载源文件和Portage快照的相关信息。

我家里使用的是很慢的modem连接。我能在其他地方下载源文件后再把它们加入到自己的 系统中吗?

当然可以,你可以运行emerge --pretend package查看一下系统将会安装什么程序,为了找到那些软件包和在哪里能下载到它们,你可以运行emerge -fp package。下载源文件并存放在任何媒介中后带回家里。把源文件放到/usr/portage/distfiles/后简单地运行emerge package就可以了。预告一下,这是一个冗长的过程.

源文件的tarball集中存放在/usr/portage/distfiles/中。把这些文件删除安全吗?

删除这些文件对于日常的性能来说没有什么负面的影响。然而,保留最近版本的文件还是明智的;我们经常为某个软件的同一个版本发布好几个ebuild。如果删除了这些文件,那么在你下次升级的时候还是必须从网上重新下载它们。用户已经开发了一些程序可以用来帮你删除旧版本只保留最近版本的源文件。注意虽然这个工具看起来管用,不过它不是官方维护的。如果使用您要自己担负风险。

在/var/tmp/portage中有什么?把这个文件夹中的文件和目录删除安全吗?

在编译的过程中,Gentoo把软件包的源代码保存在/var/tmp/portage中。这些文件和文件夹在一次成功地merge之后通常是会被删除掉的,然后有时候还是会出错。emerge没有运行的时候删除其目录中所有的条目是安全的。为了确保没有问题,在清空这个目录之前请一定先运行一下pgrep emerge

5. 使用方法

怎样设置国际化键盘布局?

修改/etc/conf.d/keymaps中的KEYMAP变量。为使终端能正确显示你的键盘布局里的扩展字符,你还需要在/etc/conf.d/consolefont之中定义变量CONSOLETRANSLATIONCONSOLEFONT(想要了解更多如何本地化你的使用环境的详情,请参考我们的本地化指南)。

代码 5.1: 重新启动keymaps

# /etc/init.d/keymaps restart
# /etc/init.d/consolefont restart

DNS域名解析只对root用户起作用。

/etc/resolv.conf的权限不正确;使用chmod来修正:

代码 5.2: 改变/etc/resolv.conf的权限

# chmod 0644 /etc/resolv.conf

为什么我的用户没办法使用他们自己的crontab?

你需要把那个用户加入cron组。

怎样让numlock在启动时自动打开?

如果你在命令行环境下工作,你只需运行命令rc-update add numlock default &&/etc/init.d/numlock start.

每个GUI提供了不同的工具来做这件事;请查看一下相关的在线手册或是帮助获得相关信息。

如何在我登出的时候对我的终端清屏?

要把你的终端清屏,在~/.bash_logout脚本中加入clear: 

代码 5.3: 在登出时候对终端进行清屏

$ echo clear >> ~/.bash_logout

如果你想新添加的用户自动拥有这个功能的话,在/etc/skel/.bash_logout中添加相同的内容。

代码 5.4: 使新用户在登出时清屏

# echo clear >> /etc/skel/.bash_logout

我无法用su得到的root帐户启动X应用程序

这种情况只发生在当你是通过图形界面登录的时候。startx的用户没有这个问题。这个问题是Gentoo的PAM里的一个bug,解决方法也相当简单:在/etc/profile中添加下面这一行。

代码 5.5: export XAUTHORITY

export XAUTHORITY="${HOME}/.Xauthority"

6. 维护

ReiserFS和文件系统损坏——如何才能修复它们,等等

如果ReiserFS磁盘分区损坏了,你可以尝试使用Gentoo安装光盘启动并运行命令reiserfsck --rebuild-tree来检查损坏的文件系统。这么做可以使你的文件系统重新可用,虽然你可能会因为文件系统损坏而丢失一些文件或目录。

7. 开发

我在哪里报告问题?

请您使用我们的Bugzilla.如果你不能肯定你的问题确实是个bug,你可以加入FreeNodeIRC网络中的#gentoo-cn#gentoo频道询问一下。

每隔多久会推出一个新版本?

Gentoo的软件包通常会在主要的作者释出新的代码后不久就进行更新。至于何时Gentoo本身会发布新的stage/profile/ISO,请查看Release Engineering项目主页。新的版本会在gentoo-announce邮件列表中宣布。你可以查看一下有关升级的问题以获得更多信息。

我的扬声器像发疯似的乱叫,怎么做才能禁用终端响铃?

终端响铃声可以使用setterm关闭,如下所示:

代码 7.1: 使用setterm

# setterm -blength 0

如果想在启动时就关闭终端响铃,你要把这条命令加入/etc/conf.d/local.start之中。然而,这只是禁用掉了现在正在使用终端的响铃。想要在其他的终端上禁用响铃的话,把这条命令的输出重定向到目标终端去即可,如下所示:

代码 7.2: 使用setterm (bis)

# setterm -blength 0 >/dev/vc/1

你需要用想要禁用响铃的那个终端来替换/dev/vc/1.

8. 资源

我在哪里能找到Gentoo Linux更多的信息?

http://www.gentoo.org/doc/zh_cn/里,你可以找到Gentoo的官方文档。

我能买到Gentoo Linux的CD吗?

每一个我们所支持的架构的安装CD在我们的Gentoo Store上都能找到。当你在我们的商店中购买了CD,你也同时在支持我们的开发工作。所以,如果有可能的话,请考虑从我们的商店购买CD。

你也可以从我们的Get Gentoo!网页中列出的代销商那里得到崭新的CD。

这个FAQ没有关于我的问题的解答,我现在该怎么做呢?

首先,应该浏览一下相关的文档,这是个好的起步。如果失败了,你可以参考一些在Google中列出的Gentoo Linux邮件列表。如果你要在邮件列表里搜索东西,比如搜索“foo”只需要键入“lists.gentoo.org foo”就可以了。如果所有这一切都失败了,或是你只是想和其他Gentoo用户待在一起,请加入我们的irc:irc.freenode.net上的#gentoo-cn#gentoo频道.