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 ftp://kermit.columbia.edu/kermit/archives/.
为什么找不到 , 难道这张光盘没有用?
就像在从光盘编译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 吗?
可以 。如果知道的话 , 例如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 程序将这些软件包安装到你的系统 。
- 三星Galaxy S7和Galaxy S7 Edge怎么样?
- 海尔Z1000M和海尔Z8000的比较
- Windows11无法访问指定设备路径和文件怎么解决
- 红豆赤小豆区别 如何区分赤小豆和红豆
- UT320和UT318对比
- 实验和试验的意思和区别
- 零下1度和零下5度哪个冷
- 0是开还是1是开 开关上0是和1谁是开
- 健康卡和社保卡的区别
- 转业和复员的区别
