分类: LINUX
2008-03-22 11:38:44
eix是个方便的工具,可以索引并快速搜索您的portage树。最新稳定版本为0.55,兼容Portage 2.1中新的元数据后端。
首先安装软件包,然后建立索引:
代码 5.1: Installing eix |
# emerge eix |
除了主portage目录树,update-eix也将会对你的PORTDIR_OVERLAY目录的ebuild建立索引。
完成之后,你就可以进行搜索了。可以用eix foo来搜索程序包,或者用eix -S bar来搜索程序包的简介。如果要搜索一个特定的程序包,可以使用eix -e packagename。默认的,你也可以在搜索的参数中使用正则表达式。
eix输出显示软件包的每个可用版本号。有~前缀的版本号表示该版本不稳定,!则表示该版本被完全屏蔽。
代码 5.2: eix firefox |
$ eix firefox |
最后一点提示,如果你希望一次执行emerge --sync和update-eix这两个命令,运行eix-sync就好了。
新的Portage 2.1版本带来了许多特性和改进。尽管其中的大多数都在make.conf例样和portage手册页中有说明,但大多数用户可能还不太明白。所以我们将展示如何使用其中的一些特性。
所有的特性都要在/etc/make.conf中设置。
Portage现能够在编译的同时下载其他软件包了,这在安装多个软件包时能节省很多时间。不必在正常emerge时另外运行emerge --fetchonly了,您只需要添加如下选项:
代码 5.1: Setting parallel-fetch in /etc/make.conf |
FEATURES="parallel-fetch" |
这个特性在某些Portage 2.1版本里失效,但是很快就会修复。
另一个可以进一步缩短安装时间的新选择是confcache。利用这一新特性,portage可以缓存很多配置脚本所做测试的结果,使得执行更加快 速。这也带来了小小的风险,有可能缓存错误值。提醒您注意,这项特性有一些bug。目前这个软件包已在大多数架构中有关键字,启用的必要步骤为:
代码 5.2: Enabling confcache |
将其加入/etc/make.conf |
另外一个很重要的新特性是记录ebuild打印的所有信息。要记录的信息内容以及如何处理记录都是可配置的。比如,我们可以将安装某个软件包时的警告以及错误信息保存到一个特定文件,添加配置如下:
代码 5.3: Configuring logging features in /etc/make.conf |
此处设置记录的内容 |
还有许多的选项设置,比如通过电子邮件发送消息记录。请查看make.conf.example以获得更多的信息。
改变虚拟终端在标准Linux系统中已经是一件非常容易的事情了。如果你在X中,你会使用Ctrl+Alt加上要去的那个终端的代表功能键,要返回图形界面也很容易,Ctrl+Alt+F7即可。如果不在X环境中,你需要更少的组合键就可以达到目的 - Alt+F2。
就像许多Unix类的环境中一样,达到目的的方法通常有许多种。同样的,sys-apps/kbd ebuild安装一个chvt二进制文件让你能够用一条命令转换去不同的终端中去。而唯一的参数就是一个代表你指定终端的整数。
代码 4.1: Changing terminals with chvt |
# chvt 1
|
如果在X环境下,您只能以root执行此命令,否则无效。但是在X之外可以以任何用户运行。如果您需要解决这个问题,可以使用app-admin/sudo来允许您的用户在X会话内使用chvt。
代码 4.2: Adding sudo access to chvt |
$ echo "%users $HOSTNAME=/usr/bin/chvt" >> /etc/sudoers
|
警告: 当修改sudo权限的时候请确定您知道自己在做什么,因为您是在允许某些命令以root权限运行。
当终端使用白色背景并且portage以黄色显示某些字(比如,用"%"标记的新useflag)的时候,那些字会很难辨认。要把emerge输出里的黄颜色(一致且全局的)改成某些更可读的颜色,只需要创建这个文件/etc/portage/color.map,其中包含一下内容:
代码 3.1: /etc/portage/color.map |
yellow=0xAA00AA |
一些可以在黑色和白色背景上都清晰可辨的颜色有:紫色:0xAA00AA 暗黄色:0xAA5500(看上去像棕色/橙色)
更多信息可以在下面这个论坛帖子里找到。
是一个非常有用的程序,特别是对于程序员和系统管理员来说。它有很多选项,而且要想在它长篇大论的man page里找到你想要使用方式不是那么容易。下面有一些有用的选项,你应该放到你的~/.screenrc里。
其中一个有用的选项目的是为了取代主screen键。不用“ctrl-A”,而改用“ctrl-O”。这是因为“ctrl-A”在很多程序里都另有他用,比如emacs、bash和links,这样就会产生冲突。
另外一个很炫的选项可以在底部设置一个标题栏。它能够显示当前已经打开的窗口的序号和标题,当前窗口被标为白字蓝底。还有一些状态信息显示在底部右侧。
代码 3.1: ~/.screenrc设置 |
# 使用视觉铃 |
以下是设置了标题栏(caption line)的效果图
图示 3.1: 启用了底行标题的GNU screen |
您有过这样的经历吗?当您更新system或world的时候,离开几个小时回来后却发现仅因为某个包失败而导致更新没有完成。
下列简单的命令和bash的“until”命令可以让您更新world或system至完成并跳过那些失败的软件包:
代码 3.1: 使用until来略过有问题的包 |
# sudo emerge -Du world || |
一旦命令执行完毕,您可以用以下命令找出哪些软件包更新失败:
代码 3.2: 检查安装失败的包 |
# emerge -Dup world |
警告: 在某些情形下,这将导致系统不稳定。使用此技巧前请务必检查emerge -Dup world的输出结果。
面对着社区里现存的这么多不同的overlay,人们可能面临的一个问题是,怎样才能找到含有想要的那个包的overlay。不幸的是, portage默认的搜索能力只能搜已经装在系统里的overlay。Stefan Schweizer本周在他的Gentoo星球blog里写了一篇非常好的文章,文章里详细写了一个工具的使用方法,它可以使搜索远程overlay这项 任务比以往任何时候都简单。
完成这项任务的包是app-portage/eix。你需要解除它的屏蔽来获得所有最新的最强大的功能:
代码 4.1: 安装app-portage/eix |
# echo app-portage/eix >> /etc/portage/package.keywords |
然后,为了确保eix拥有它所需要的有关可用overlay的所有信息,你可以执行下面的命令来更新它:
代码 4.2: 更新eix的全局overlay列表 |
# update-eix |
eix现在既可以在官方portage树中查找软件包,也可以在layman所列的所有overlays中查找。
代码 4.3: 搜索包 |
# eix -e xmms |
想了解更多信息,请查看eix的手册页,以及下述博客链接。
amd64系统上,要播放需32位编解码器(win32codecs)解码的多媒体文件,你可以使用media-video/mplayer-bin, 不过它看起来没有原生版本(译注:native version,专门为amd64编译的版本)好,且和系统整合不佳。KDE用户可以安装kmplayer──一个基于KDE的“前端”。如果你有 konqueror,kmplayer还会为它添加一个播放插件。这一技巧的步骤如下,首先如果有的话请先卸载原生版本的mplayer。然后,装上 kmplayer,并创建/usr/bin/mplayer符号链接:
代码 4.4: 创建mplayer link |
ln -sf /usr/bin/mplayer-bin /usr/local/bin/mplayer |
这样,原生版本的kmplayer就可以播放wmv文件,且可以在konqueror中“预览”它们了。
毫无疑问,Gentoo最好的特性之一就是她的软件包管理系统,Portage。Portage使得更新整个系统只需要一条简单的命令。可惜的是,有时候事情不会像想像中的那么顺利。几乎每一个Gentoo用户都有过这样的经历,睡前敲入命令emerge -uD world,然后钻进被窝满心希望早晨醒来的时候看到一个崭新的系统。但不幸的是,醒来的时候发现200个软件包安装到第三个的时候就失败而中断了。然后就需要排除故障并且开始emerge --resume。
输入update-world来省下你宝贵的时间。Update-world是一个bash脚本,是count_zero写的并于最近在论坛中。这个脚本控制更新的过程并且强制portage跳过失败的包继续编译余下的包直到完成。最后编译失败的软件包将被加入一个列表中方便以后查阅。
注意: 这个脚本需要用到“equery”命令,也就是说需要app-portage/gentookit这个软件包。 |
显然在使用之前需要先下载,把它放到某个path路径下,加上执行权限。
代码 3.1: 获得脚本 |
# wget -O /usr/bin/update-world |
现在我们准备好了,可以开始使用这个脚本了。
代码 3.2: 运行update-world |
# update-world --prepare
|
这条命令通过创建一个将要emerge的软件包列表(像emerge -uD --newuse world那样的)来开始升级过程。(或者您可以用update-world --empty创建系统上所有软件包的列表,和emerge -e world一样。)此命令在~/.update-world/下创建一个名叫“emergelist”列表。现在,您可以用最喜欢的编辑器随便修改这个列表——移除软件包,修改版本等等。当您觉得满意的时候,请继续下一步:
代码 3.3: 运行update-world(续) |
# update-world --install
|
这条命令启动编译过程,就像emerge -uD world那样。两者的不同之处在于,如果某个软件包由于某些原因编译失败,它将被加入~/.update-world/下的“failedlist”列 表。同时,将为那个包的portage日志文件(通常在/var/log/portage)建立一个链接,放在 ~/.update-world/[date]/log/。当升级结束时,您将一次得到所有编译失败的软件包列表,省去了不少时间。如果您需要中途停止, 只需要“Control-C”。升级可以在任何时候恢复,并且从上次停止的地方开始,只需要再次输入update-world --install。
MOTD(Message Of The Day)意为“今日讯息”。在多数系统上,当有人登录时,系统会使用/etc/motd会输出一些信息。在本期的心得技巧中我们来学习如何使用fortune和cowsay创建精美的MOTD。
首先需要安装两个包:
代码 4.1: 安装cowsay和fortune |
# emerge fortune-mod cowsay
|
接下来需从以下选项中选择一个字符:
代码 4.2: 选择你的字符 |
# ls /usr/share/cowsay-3.03/cows/ |
最后,更新/etc/motd文件:
代码 4.3: 更新/etc/motd |
# fortune | cowsay -f ren > /etc/motd
|
您也可以在/etc/cron.daily中创建一个如下文件以便每日都可生成一个新的motd。
代码 4.4: 设定cron任务 |
# echo '#!/bin/sh' >> /etc/cron.daily/motd |
您是否曾经在安装某软件的时候同时安装很多依赖关系?您是否想过在删除那些软件包的同时也希望删除所有的依赖关系?直觉告诉我们可以使用emerge --depclean,但这儿有一种不同的,或许更好的方法。
让我们来打个比方,比较OpenOffice.org和koffice。我们的计划是两个都装,都尝试一下,然后删除其中一个。首先:
代码 2.1: 创建.deps文件 |
# emerge openoffice -p | sed -ne \ |
这将保证不会记录下任何需要升级的软件包。然后进行安装并尝试运行。当您决定保留其中的某个时,只要简单的执行以下命令:
代码 2.2: 移除没有用的包/依赖关系 |
# emerge -aC $( |
本周的心得技巧受论坛中以下帖子启发整理而来:
您可以分析系统的emerge.log文件来获知编译某个软件包所需要的时间,当然也可以用来估计编译任务的耗时,或者您可以使用专门设计的genlop命令。
代码 4.1: genlop运行示例: |
# genlop -nt kdelibs |
该信息可以用于估算升级需要耗费的时间。该工具可以用于计算许多软件包集的emerge耗时,比如全局系统升级,通过以下命令:
代码 4.2: emerge world示例: |
# emerge -uDp world | genlop -p |
此时,如果有一个新的软件包你没有安装,比如你希望在一台没有安装X的机器上安装fluxbox:
代码 4.3: 应用于没有安装的软件的示例: |
# emerge -p fluxbox | genlop -p |
Genlop只会查询已知的软件包。如果你使用-q选项(genlop版本>=0.307),程序将会根据用户的CPU型号从在线数据库gentoo.linuxhowtos.org中查询编译耗时。
代码 4.4: 前面查询的结果是: |
# emerge -p fluxbox | genlop -p -q |
时间并不是100%准确;因为它没有考虑USE及内存速度,硬盘速度,或者别的因素。但通过多次取不同用户的平均值,这些因素变得不是那么重要。
早在12月4日的GWN的心得技巧一节就提到了一个很棒的更新脚本。12月后,开发者新锐们贴出了更多的更新脚本。其中一个被简单地称作update。
Update发端于guenther的和count_zero的。自2007年1月中旬已进入测试阶段。有个测试者夸口说它完美无瑕。
那这个脚本到底是用来干什么的呢?Update与其他更新脚本类似之处在于它能自动跳过安装失败的包,继续emerge列表中其他的包。此外,它还 有自动调用revdep-rebuild、自动挂载tmpfs以加快emerge、先同步、先下载文件、通过cron任务更新服务器等功能。另一个极佳的 特性是它自动隐藏了编译软件时打印出绝大部分无关信息,使得查看einfo和ewarn更容易,虽然在有了最新版的portage的情况下这个功能已不再 重要。你还能通过使用-q和-v选项来进一步减少或增加日志输出。
这里有来自gcc编译的一些。
代码 3.1: 获得此脚本 |
# wget -O /sbin/updatescript.sh |
大多数用户将会发现用这个脚本来更新系统还是满容易的。
代码 3.2: 用起来就是这么简单: |
# updatescript.sh |
最初的论坛贴子和这个脚本的下载链接在。感谢steveL提供这个脚本。
Linux下最伟大的事情是仅仅需要一个命令提示符,您就可以完成许多工作。当然,这是在牺牲你的手指肌肉前提下。真的是这样吗?这儿有一些小技巧来保护你可怜的手指头。
有时候,你已经厌倦了一次又一次输入相同的命令。
代码 2.1: 非常长的ls命令 |
$ ls -loBh --author --color=always --group-directories-first ~ |
使用别名命令来方便输入
代码 2.2: 让别名来帮你一把 |
$ alias ls='ls -loBh --author --color=always --group-directories-first' |
或者更好的选择是在你的.bashrc文件中输入别名,来永久保存。
代码 2.3: 永久保存 |
$ echo "alias ls='ls -loBh --author --color=always --group-directories-first'" >> ~/.bashrc |
现在,使用“ls”就会有如同“ls -loBh --author --color=always --group-directories-first”的效果。所以,现在您可以把一些长的命令用短得多的命令来代替。
有时使用别名可能还没有搜索历史来得快。绝大多数人都知道我们可以通过使用上下键来翻看最近在命令提示符中使用的命令。但是,你知道吗还有一种更快速的方法来获取最近的命令。
假设你要更新系统的环境变量并输出配置。你知道命令'env-update && source /etc/profile'大概在最近30个左右。
您可以按向上方向键大约30次,直到你找到命令后然后按回车,但是您记起了近期GWN里的一个很酷的窍门,于是您按下ctrl - r然后敲“env”。在您敲字母的同时,整行“env-update && source /etc/profile”魔法般地跳了出来。
代码 2.4: 反向搜索 |
(reverse-i-search)`env': env-update && source /etc/profile |
下一步,您按下回车键执行命令。如果您想在执行前编辑命令,您可以按向左或向右方向键,这样命令就放到提示符处,您就可以编辑了。对那些下了功夫精通vi的人,可以使用vi键位绑定。
代码 2.5: 打开vi键位绑定 |
$ set -o vi |
现在您可以键入“/”并输入搜索串。按“n”键滚动显示以前的条目,如果您意外翻过了想运行的命令,“N”键可以向前滚动。
有时候别名和命令历史没有任何帮助,因为您以前没有输入过那个命令。这时候Bash的命令行补全功能就派上了用场。在命令行里的大多数位置您都可以按“Tab”键来让Bash为您补全单词。命令甚至有时是命令参数都适用。当您想看很长的路径的目录内容时,这招极其好用。
下面命令只需27次击键而不是60次,包括按回车键。
代码 2.6: Tab补全 |
$ ls /usr/portage/profiles/default-linux/amd64/2007.0/desktop/ |
注意: 有些包可以加上“bash-completion”USE标志来增强对命令行补全的支持。 |
当您在修改重要文件之前作备份的时候,还有最后一招节省击键的好办法。多数人喜欢在做重大修改之前备份文件。下次,除了敲入如下:
代码 2.7: 备份文件 |
$ cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bak |
还可以利用Bash的大括号展开功能,输入以下命令得到同样的效果。
代码 2.8: 备份文件——精简版 |
$ cp /etc/X11/xorg.conf{,.bak} |
现在您知道如何利用大括号展开来备份文件了,您可以方便地使用以下命令查看修改:
代码 2.9: 快速查看修改 |
$ diff /etc/X11/xorg.conf{.bak,} |
当然,这只是Bash众多技巧中的冰山一脚。您可以看看以前GWN中关于Bash的心得技巧,如果您需要更多有用的Bash技巧,加入#bash或者查看这个有用的。
以前的GWN Bash技巧
本周秘笈终于轮到Synergy了。它是一个很容易上手的软件KVM,允许你在多个带有独立显示器的主机上使用同一套键盘和鼠标。Synergy甚至可以在Linux,OS X和Windows之间跨平台工作(可以拷贝和粘贴)。
Synergy的配置和使用非常的简单而且直接。选一台机器作为你的主鼠标和键盘应用机,这台机器将被配置为服务器而其他的机器将被配置为客户机。
Tip:当在一台带有多个显示设备的机器(例如配有外置显示器的笔记本)上运行synergyc(客户端)时,你需要多个synergyc实例。在每个显示设备上运行一个实例,并通过名称来指定0:0以后的显示设备。
Trick: 一旦连接到服务器,Synergyc便采用本机的主机名。因此当显示器连接到服务器时,任何超过0:0的显示器,都可以通过在主机名后添加数字来指定。在 每个显示器上使用相同的规则,并从每个显示器启动synergc。两个显示器,两个synergc实例,没有指定名称的那个运行在0:0上,另外一个有名 称的则运行在0:1上。
这有一个配置举例,用来说明如何在一台带有双显示器的机器上启动实例。我们把该机器称为wlt,服务器称为ws2,另外一台工作站称为ws1。请记 住,Windows上的安装包含了GUI,但在OS X和Linux上只有一个简单的文本文件被创建。这个例子就是该文本文件。
代码 2.1: 示例配置 |
# List the computer names that Synergy will run on |
Synergy通常运行在后台。它从终端分离出来并没有一个可见的窗口,实际上是不可见的。在未能保证配置正确之前,你应该使用命令行参数-f"在前端"启动synergy。
代码 2.2: 启动Synergy |
在synergy服务器端上: |
注意: 如果synergys或者synergyc不在你的PATH中,使用绝对路径名。 |
代码 2.3: 在有双显示器的wlt机器上像这样启动: |
On wlt 0:0: $ synergyc -f ws2 |
这仅仅是一个概要性的讲述,如果需要更多信息,请查看Synergy。
拥有老旧的台式或笔记本电脑并不意味着您已经错过一些视觉特效。KDE的透明功能让您拥有透明的窗口、windecos(窗口的边框)和 kicker(KDE面板)以及阴影。这是真正的透明,而不是仅仅捕捉并使用您的桌面。任何在透明窗口下面的窗口都是可见的,并且其变化会实时的反应出 来。
不管怎样,我们先说说如何配置。您需要加入xcomposite USE标记来启用合成支持,所以如果您安装KDE时没启用这个标记,您需要把它加入make.conf然后"emerge --newuse kwin kicker"。接下来您需要确保xorg.config里开启了合成支持,只需加入这几行:
代码 2.1: 配置xorg.config |
Section "Extensions" |
重新启动X并使用“xdpyinfo | grep Composite”来确保工作正常。如果一切OK,那么到控制中心 -> 桌面 -> 窗口行为的透明面板,开启期望的效果。你可能需要重新启动KDE来使更改生效。
许多人有冗长的配置文件,一遍遍地声明同样的块,却只是改改域名和主目录。
类似的问题已经被Fabien Coelho提出来了:
我讨厌复制-粘贴。当配置appache服务器时,我经常不得不复制-粘贴一些部分,特别是配置虚拟主机(virtual hosts),要打开类似的特性或参数时。为了避免这个问题,我需要服务器的运行配置文件有某种宏功能。[……]
—Fabien Coelho
为坚持“保持简单”的哲学,他只引入了两个新“命令”:
让我们看一个真实世界中的例子吧:
代码 3.1: mod_macro使用例子 |
|
如果适用的话,另一个例子将锁定一些目录:
代码 3.2: 另外一个mod_macro使用例子 |
|
正如你所看到的,你可以很容易的知道发生了什么,而用不着复制和粘贴任何代码片段:)。
要把它用在Gentoo上,只要emerge mod_macro,并且在/etc/conf.d/apache里用-D MACRO打开这个选项就行了。
关于该模块的更多信息可以在其找到。