FreeBSD Packages和Ports使用技巧( 二 )


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 吗?
可以 。如果知道的话 , 例如ftp.FreeBSD.org 比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 站点上下载一些升级包 。主力站点是ftp.freebsd.org , 在它的
Packages directory 中有很多“主要的”软件包 。但你最好先检查一下当地的镜象站
点!因为这样工作起来可能要快一点 。使用pkg_add 程序将这些软件包安装到你的系统 。

推荐阅读