Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281567
  • 博文数量: 87
  • 博客积分: 4061
  • 博客等级: 上校
  • 技术积分: 1032
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-12 16:28
文章分类

全部博文(87)

文章存档

2012年(1)

2009年(85)

2008年(1)

我的朋友

分类: BSD

2009-01-21 11:34:10

freebsd下安装软件 packages/ports 使用说明
这篇写给 hopenet2 (HopeNet-FreeBSD-CDROM2) 用的,若无 HopeNet-FreeBSD-CDROMs,
还是可透过网路来享用 FreeBSD packages,大部分只要将文件的 /cdrom/ 改成ftp://freebsd.ntu.edu.tw/freebsd/ 即可。

packages 为 FreeBSD 「招牌特色」之一,喜欢「玩软体」的人更不可错过这个「招牌特色」! ;-)

= FreeBSD packages 使用说明 =
(hopenet2)

若已知想安装的 package 名称为何,如 joe (一个很受欢迎的 unix editor):
cd /cdrom/packages/All; pkg_add joe-2.8.tgz
装完後在 /var/db/pkg/joe-2.8/ 会留下相关的记录。
想知道这个 packages 装了什麽东西、装在何处,可以 tar tvfz joe-2.8.tgz 看看。

若不知道有什麽 package 可用,只是想试试各种 editor,可看一下
/cdrom/packages/editors/ 的 packages,假设看到了 emacs-19.34b.tgz 觉得有
兴趣,想知道这套 package 有什麽特色:
pkg_info emacs-19.34b.tgz

此外,less /cdrom/INDEX 有简要的说明,善用 INDEX 可很快找到合用的
package。

X X X X X X X X X X

packages/All/ 是编好现成可用的 binary,若想自己从 source 编,可透过 ports
来做这件事,举例来说,若想看看 pine-3.96.tgz 的 source:

请把 hopenet2 (也就是本张光碟) umount(umount /cdrom),换成 hopenet1 再
mount 上去(mount /cdrom)。

cd /cdrom/cvs-2.2/ports; less INDEX 查得(/^pine)位於 /usr/ports/mail
下:
mkdir -p /usr/ports/mail; cp -pR mail/pine /usr/ports/mail
mkdir -p /usr/ports/distfiles
cd /usr/ports/mail/pine
less files/md5 查得需要 pine3.96.tar.gz 这个档,也就是得设法将这个档
放到 /usr/ports/distfiles :
cp /cdrom/distfiles/pine3.96.tar.gz /usr/ports/distfiles
cd /usr/ports/mail/pine
make install
若要产生 package -> make package
至於 make 後面可加什麽 -> less /usr/share/mk/bsd.port.mk
如 "make extract", "make patch", "make configure" ....

/cdrom/distfiles/ 收集有 /cdrom/pkg/ (常用到的 packages) 相关的 source,
这些 source file 的「原始位(发源地)」可从 Makefile 看出,files/md5 列出
了需要用到的档名,除了到「发源地(通常在国外)」抓这些档外,也可先查查附近
的网站有没有这些档,建议的查询顺序为:
1. /cdrom/disftiles
2. ftp://freebsd.csie.nctu.edu.tw/pub/distfiles
3. ftp://freebsd.ntu.edu.tw/freebsd/distfiles
4. archie -c 要找的档名,archie 有现成的 package 可装,如:
pkg_add /cdrom/pkg/archie-1.4.1.tgz
man archie 可查得更多的讯息 (export ARCHIE_HOST=archie.ncu.edu.tw.)

找到需要的案後,放到 /usr/ports/distfiles ,待会 make 时就不会到「发源地」
辛苦的抓档。

/etc/make.conf 也可设定 /usr/ports/distfiles 缺少的档优先从何处抓取,如:
MASTER_SITE_BACKUP?=
ftp://freebsd.csie.nctu.edu.tw/pub/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}

ports 还有其它有趣的用法,比如说想找中文相关的 ports
cd /cdrom/cvs-2.2/ports; make search key=chinese less
其它用法请参阅 ports 的 Makefile,或查查 Handbook(00www-mirror/)相关的章节。

X X X X X X X X X X

若自己有特殊需求,决定修改 source,试过後觉得很满意,想分享给其它朋友,举例
来说,pine 对中文处理有点问题,woju 做了些修改,让 pine 能中文相容:
cd /usr/ports/mail/pine/work/pine3.95/pine
cp send.c send.c.orig

cd .. (也就是回到 /usr/ports/mail/pine/work/pine3.95)
diff -u pine/send.c.orig pine/send.c > /usr/ports/mail/pine/patches/patch-woju2
... 其它的修改 ...
把相关档案压成 /cdrom/woju/patches/pine-3.95-8bit-patches.tgz
然後很高兴的到网路上 (tw.bbs.comp.386bsd) 和大家分享 :-)

上头用到 diff 的部分,woju 习惯用 "diff -u",vanilla 做了如下补充:
"core team 的标准做法是 diff -ruN old new"

/cdrom/woju/patches/*.txt 有相关的参考资料。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
FreeBSD Packages和Ports使用技巧
 
 
FreeBSD Packages和Ports使用技巧
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 吗?
可以。如果知道的话,例如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 程序将这些软件包安装到你的系统。
阅读(1358) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~