2009-07-28/15:30
FreeBSD的Packages和Ports绝对是一种完美的应用程序的安装和配置及反安装的解决方案,可以说完全可以同RedHat的RPM方案相比,只不过RPM的商业运做比较成功罢了。
下面是FreeBSD HandBook中文版里面的一些技巧,供大家参考。
4.5.安装中出现的问题
4.5.1. 一些问题与解答
4.5.1.1.我认为应该作一个有关modem 的讨论?
哦,你必须想到你电脑的串口。我们使用串口从一个Unix 系统到另一个系统传送程序。
4.5.1.2.应该用package 来安装额外的程序?
是的,通常这是最快速、最简单的方法。
4.5.1.3.为什么用port 来烦人呢?
几个原因:
1,一些软件的发布许可可能不允许采用二进制的方式分发。它们必须采用源代码的方
式分发。
2,一些人不信任二进制分发。至少带上源代码,你可以自己阅读,寻找可能存在的问
题。
3,如果你有本地的补丁,那你可能在打补丁的时候需要源代码。
4,你可能在程序的编译方式上与做这些程序的人有不同的看法。无论是建构调试版,
还是把它们分开,一些人喜欢采用最优化的设置来编译以达到最强大。通常发布的
软件包在设置方面都是比较保守的。如果port 对一个特殊的处理器在使用代码上有
一个编译选项,或是需要支持一个额外的设备,你可能需要亲自对这个port 进行编
译,不需要为提供每一个额外的支持而生成许多不同的软件包。有很多这样的例子。
如果一个软件包可能对一些特殊尺寸的纸张提供了默认的支持,那我们就要提供多
种软件包,每一种对应一种尺寸的纸张。
5,一些人喜欢围着代码转。如果它们觉得无聊,或想攻克它,或想从中学点东西,诸
如此类的,它们可能会去读它。
6, 如果你不能得到源代码,那它就不是软件了。
4.5.1.4. 什么是补丁?
一个补丁(patch)是一个小文件,主要描述文件如何从一个版本升级到另一个版本。
第12 页FreeBSD 使用手册
它一般是纯文本的,基本上说是些象“delete line 23”,“add these two lines after line
468”,或“change line 197 to this ”这样的东西。它们以diff 闻名,因为它们是由diff
这个程序产生。
4.3.1.5. tarball 是指什么?
它就是以.tar 结尾的文件,或者是诸如以.tar.gz,.tar.Z,.tar.bz2,.tgz 结尾的文件。
基本上,它是一个已经被打包或压缩的目录树。这种技术最早被用于磁带机上,但后来它被
广泛运用于互联网上用来发布程序源代码。你可以看到在它里面有些什么文件,甚至你可以
亲自使用标准的UNIX tar 程序解开它们,只要这样做:
% tar tvzf foobar.tar.gz
% tar xzvf foobar.tar.gz
% tar tvf foobar.tar
% tar xvf foobar.tar
4.5.1.6. 那checksum 呢?
这是一个由统计检查文件里所有资料而产生的数字。如果有任何字符改变了,那
checksum 就不会再跟统计的结果一样,所以经过简单的比较就可以看出差异。
4.5.1.7. 我照上面说的方法从光盘编译port 都很顺,怎么一安装kermit 就出错?
# make install
>> cku190.tar.gz doesn’t seem to exist on this system.
>> Attempting to fetch from .
为什么找不到,难道这张光盘没有用?
就像在从光盘编译ports 那节所解释的,有些port 因为授权的限制不能放进光盘。Kermit
就是个例子。Kermit 的授权不允许把它做的tarball 放进光盘,所以必须自己动手下载
------真是抱歉!
会有这些错误信息是因为当时没有连上网络。只要从MASTER_SITES (列在Makefile 里)中
所列的任一个网站把文件下载下来,就可以重新开始安装的步骤了。
4.5.1.8. 我照做了,可是当要把文件放进/usr/ports/distfiles 时却得到没有许可的错误
信息。
Port 的机制是到/usr/ports/distfiles 中找tarball,可是因为它是符号连接(symlink)
到光盘的,所以那个目录只读而且也没有办法复制任何东西进去。用下面说的方法就可以让
它去找其它地方:
第13 页FreeBSD 使用手册
# make DISTDIR=/where/you/put/it install
4.5.1.9. Ports 的设计是只有把所有东西都放在/usr/ports 下才能用吗?系统管理员说要
把所有东西都放在/u/people/guests/wurzburger 下,不过这样好象不能用。
可以用PORTSDIR 和PREFIX 这两个变量来告诉port 用别的目录。例如,
# make PORTSDIR=/u/people/guests/wurzburger/ports install
会在/u/people/guests/wurzburger/ports 里编译port 并把所有东西安装在/usr/local 下。
# make PREFIX=/u/people/guests/wurzburger/local install
会在/usr/ports 里编译port 并安装至/u/people/guests/wurzburger/local。毫无疑问的,
# make PORTSDIR=.../ports PREFIX=.../local install
会结合这两种(要在这页完整的写出来太长了,不过它应该给你点概要了)。如果不想每次安
装一个port 就要把这些字再打一次,把这设置放到环境变量里会是个好主意。读读shell
的联机手册来获得做这些事的指导。
4.5.1.10. 我没有FreeBSD 的光盘,不过我想要把所有的tarball 放在手边,这样就不用
每次装一个port 就要等待下载。有什么好方法可以一次全下载下来吗?
要得到ports collection 每个tarball 的话,执行:
# cd /usr/ports
# make fetch
4.5.1.11. 我知道从临近的FreeBSD mirror 站下载比较快。可是有办法从其它
MASTER_SITES 上面没有的站下载port 吗?
可以。如果知道的话,例如 比MASTER_SITES 上面列的任何站都近,
那就这么做:
# cd /usr/ports/directory
# make
MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/
fetch
4.5.1.12. 要怎样在make 去下载文件前先知道所需的文件?
make fetch-list 会列出一个port 所需的文件。
4.5.1.13. 有办法在port 编译前停止吗?我想在它安装前hack 一下程序代码,不过每次
都要边看边按control-C 很讨厌。
用make extract 会在源代码下载完并解开后停止。
第14 页FreeBSD 使用手册
4.5.2. 帮助!Port 损坏了
如果你遇到port 不能用了,可以这样做:
1. 修复它!在“如何编译一个port”那一节能帮助你这样做。
2. 遇到困难时,可以通过email 寻求帮助!只需要发一封email 给port 的维护者。输入
make maintainer 或读一下Makefile 文件找到维护者的email 地址。记住要包括这个
port 的名称和port 的版本,还有遇到的错误。如果你没有得到维护者的回复,你可能
要使用send-pr 命令提交一个bug 报告。
3. 忘掉它吧!这是一个最好的解决办法,很少的ports 能被分为“不可或缺的”。有时当
一个port 升级时,一些问题可能会被修复。
4. 可以从你附近的ftp 站点上下载一些升级包。主力站点是,在它的
Packages directory 中有很多“主要的”软件包。但你最好先检查一下当地的镜象站
点!因为这样工作起来可能要快一点。使用pkg_add 程序将这些软件包安装到你的系统。