免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1612 | 回复: 0
打印 上一主题 下一主题

FAQ - Ports and Packages [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-06 11:11 |只看该作者 |倒序浏览

               
FNP:FAQ - Ports and
Packages v 1.5
2004.08.20 Table of
Contents

1、如何只抓取 tarball?
2、如何仅做到解开
tarball的步骤?
3、如何仅做到解开 tarball
并补上官方提供的 patch?
4、如何安装一个新的 port?
5、如何安装一个新的
port,并将打包(package)起来?
6、如何打包一个
port,并将其所有相依的 ports 也打包起来?
7、如何对一个已经安装的 port
打包?
8、如何清理 ports
编辑期间所产生的暂存资料?
9、如何清理 ports
编辑期间所产生的暂存资料,以及其相对应的 tarball?
10、如何在安装 ports
前查询所需依赖/相关的套件?
11、如何移除已安装的 ports?
12、如何一并移除所相依的 ports?

13、如何重新安装已安装过的
ports?
14、如何以关键字搜寻 ports?
15、如何升级已安装的 ports?
16、如何查询目前系统安装了哪些套件?
17、如何查询目前系统有没有安装这个关键字的套件?

18、如何查询某个档案是属於哪些套件?
19、如何查询某个套件安装了哪些档案?
20、如何安装旧版的 ports?
21、如何更新 ports Mk?
22、如何解决安装 ports 时出现
sed -i 的错误?
23、如何列出所有可以升级的
ports?
24、如何得知 ports system
对某个 ports 所提供的编译叁数?
25、如何手动加入编译 ports
的叁数?
26、如何指定 ports 的安装路径?

27、安装 ports 出现
FORCE_PKG_REGISTER 的错误讯息
28、安装 ports 出现
Shared object libintl.so.X not found 的错误讯息
29、如何安装 packages?
30、如何强制安装 packages?
31、如何查询 packages 与其他
packages 之间的相依性?
32、如何远端安装 packages?
33、如何更新 INDEX 对照表?
34、如何更新 INDEX HTML?
35、如何针对某些 ports 不做
CVSup?
36、如何使用 CVSup 同步
ports collections?
37、安装 ports 出现 port
is outdated 的错误讯息
39、安装 ports 出现
OpenSSL vulnerabilities 的错误讯息
40、如何在 FreeBSD 上模拟
Linux 的环境?
41、如何在 FreeBSD 上安装
Linux rpm?
42、安装 ports
时,原本应该出现的清单选项不见了
43、如何检查是否有安装重覆的
ports/packages? `make deinstall' 与 `pkg_delete' 有什麽不同?
44、安装 ports 出现 local
modification time does not match remote 的
错误讯息


1、如何只抓取 tarball?

如果只希望抓取 tarball
下来的话,仅需下 make fetch 即可。
如果是要抓取单一的 port,以
editors/joe 为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make fetch
   
  

  
预设会将 joe 的 tarball
下载至 /usr/ports/distfiles/ 目录下。
如果是希望抓取安装此 ports
所有须要的其他 ports 的 tarball,以

systuils/portupgrade
为例的话,则:


  
   
   代码:
   
  
  
   
   cd
   /usr/ports/systuils/portupgrade/
   make
   fetch-recursive
   
  

  
预设会将此 ports 的
tarball 与所有须要的其他 ports 的 tarball,下载至 /usr/ports/distfiles/ 目录下。

如果是希望抓取全部所有 ports 的
tarball ,则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/
   make fetch
   
  

  
则会所将全部所有 ports 的
tarball 下载至 /usr/ports/distfiles/ 目录下。
如果是希望抓取全部 ftp 下所有
ports 的 tarball ,则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/ftp/
   
   make fetch
   
  

  
则会所将全部 ftp 下所有 ports
的 tarball 下载至 /usr/ports/distfiles/
目录下。

2、如何仅做到解开 tarball的步骤?

有时候习惯自己 patch/修正
原始码的时候,很常用到这个功能。
以 editors/joe
为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make extract
   
  

  
会将 tarball解开至
/usr/ports/editors/joe/work/ 目录下。


3、如何仅做到解开 tarball 并补上官方提供的 patch?

此方法与 2
有一些类似,不同於是先补上官方提供的 patch ,再行 patch 自己
的修正。以 editors/joe
为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make patch
   
  

  
会将 tarball解开至
/usr/ports/editors/joe/work/ 目录下,并已经 patch 上
官方提供的 patch。

4、如何安装一个新的 port?

如果系统上未安装此软体,则可以选择安装一个新的
port。
以 editors/joe
为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make install
   
  

  
如此会在系统上安装一个新的 joe
软体。如果需要在安装完成後,一并清除编辑
时期所留下来的暂存目录,则可叁考 FAQ
8 的方法,一起使用,如:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   #make clean
   
  

  
如果想要一次清掉所有 ports
产生的暂存资料,则只要回到 ports 的根目录执
行即可:



  
   
   代码:
   
  
  
   
   cd /usr/ports/
   #make clean
   
  

  
5、如何安装一个新的 port,并将打包(package)起来?

将安装完成的软体打包起来,有许多便利性:包括在丛集系统中,可供其它机器

使用,或将未来此软体出问题可重新利用此
package 重新快速安装。
以 editors/joe
为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   #make package
   
  

  
如此会在系统上安装一个新的 joe
软体,并将此软体打包(package)起来。

package 预设会在
/usr/ports/editors/joe/ 目录下,如果希望集中管理的话,
建议做如下的步骤:



  
   
   代码:
   
  
  
   
   mkdir -p
   /usr/ports/packages/All/
   
  

  
以後打包的 packages
都会存放在此目录下,并且系统会自动做分类,以方便管
理。如果需要在安装完成後,一并清除编辑
时期所留下来的暂存目录,则可叁
考 FAQ 8 的方法,一起使用,如:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make package clean
   
   
  

  

6、如何打包一个 port,并将其所有相依的 ports 也打包起来?

因为 FAQ 5 只有对最终的 port
才进行打包,中间依赖的 ports 并没有一起打
包,这会出现一个常遇到
的问题,就是如果编辑一个 port 需要依赖其它的
ports,那麽必须将其它 ports
也一起打包,否则安装 packages 会有相 依赖其
它 ports 的 packages
的问题。

sysutils/portupgrade 为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/sysutils/portupgrade/
   make
   DEPENDS_TARGET=package package
   
  

  
如此会在对所有 portupgrade
所相依赖的 ports 一并打包,也包括自己本身。

7、如何对一个已经安装的 port 打包?

如果安装好一个套软,事前并未打包,事後想打包的话,则:

以 editors/joe 为例的话



  
   
   代码:
   
  
  
   
   cd /var/db/pkg/
   pkg_create -b
   joe-{版本号}
   
  

  
会将已安装的 port 打包起来,放在
/var/db/pkg/ 目录下。

8、如何清理 ports 编辑期间所产生的暂存资料?

在编辑 port
的时候,会有编辑期间所需要的工作目录(work),因此通常安装好
一个套件後,会清除此暂存目录,以节省系
统磁碟空间。
以 editors/joe
为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make clean
   
  

  
如果是希望清除所有 ports
的暂存目录,则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/
   make clean
   
  

  
如果是希望清除全部 ftp
下所有的暂存目录,则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/ftp/
   
   make clean
   
  

  

9、如何清理
ports 编辑期间所产生的暂存资料,以及其相对应的 tarball?


在 FAQ 8
中,仅只是清除编辑期间所需要的工作目录(work),并没有将编译
ports 时一并下载的 tarball
删除(相对应之 tarball 预设会存放

/usr/ports/distfiles/),如果欲把 tarball 一并删除,
以 editors/joe
为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make distclean
   
  

  
make distclean
的步骤包含了 make clean 的功能,也就是说除了会删除
tarball
外,还会一并M除编辑期间所需要的工作目录。

如果是希望清除所有 ports
的暂存目录,及 tarball ,则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/
   make distclean
   
  

  
如果是希望清除全部 ftp
下所有的暂存目录,及 tarball,则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/ftp/
   
   make distclean
   
  

  

10、如何在安装 ports 前查询所需依赖/相关的套件?

在安装 ports
前,可以查询所需依赖/相关的套件。

mail/p5-Mail-SpamAssassin 为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/mail/p5-Mail-SpamAssassin/
   make
   all-depends-list #显示所有相关的套件
   make
   pretty-print-build-depends-list #显示编译期间所需要的套件
   make
   pretty-print-run-depends-list #显示此套件要执行时所需要的套件
   
  

  

11、如何移除已安装的 ports?

以 editors/joe
为例的话,则:


  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make deinstall
   
  

  
或是使用 pkg_delete



  
   
   代码:
   
  
  
   
   cd /var/db/pkg/
   pkg_delete
   joe-{version}
   
  

  
有时候套件之间的相依性会导致无法直接移除,如果要强制移除的话,则:




  
   
   代码:
   
  
  
   
   cd /var/db/pkg/
   pkg_delete -f
   joe-{version}
   
  

  
但很有可能会导致其它的套件执行起来出现问题。


至於二者的差别,请叁考FAQ 43

12、如何一并移除所相依的 ports?


sysutils/portupgrade 为例的话,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/sysutils/portupgrade/
   make
   deinstall-depends
   
  

  
执行此步骤前,请注意是否会移除应该保护的套件。建议先叁考
FAQ 10 的方法
来检查。

或是使用 pkg_delete



  
   
   代码:
   
  
  
   
   cd /var/db/pkg/
   pkg_delete -r
   portupgrade-{version}
   
  

  
至於二者的差别,请叁考FAQ 43




  
   
   代码:
   
  
  
   
   13、如何重新安装已安装过的
   ports?
   
  

  
重新安装的前提是,之前有安装过或目前已安装。以
editors/joe 为例的话,
则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make deinstall
   make clean
   make install 或
   make reinstall
   
  

  

14、如何以关键字搜寻 ports?

如果要从全部的 ports
collection 中找寻与关键字 "ldap" 有关的 ports,
则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/
   make search
   key=ldap
   
  

  
如果只要从与 ftp 相关的 ports
下找寻与关键字 "ldap" 有关的 ports,则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/ftp/
   
   make search
   key=ldap
   
  

  
还有另一个用法,方法只是将 key 换成
name 。如果已经知道要搜寻 ports 的
名称,或只想找名称相关的关键字
"ldap", 则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/
   make search
   name=ldap
   
  

  
如果只要从 ftp 相关的 ports
下找寻名称与关键字 "ldap" 有关的 ports,
则:



  
   
   代码:
   
  
  
   
   cd /usr/ports/ftp/
   
   make search
   name=ldap
   
  

  

15、如何升级已安装的 ports?

如果已经安装好套件,事後欲升级的话,必须先移除旧版本的
port,移除的方法
请叁考FAQ 11、FAQ 12及FAQ
13;之後再安装 port,安装的方法请叁考FAQ 4或
FAQ 5。

以 editors/joe 为例,且以
FAQ 11 及 FAQ 4 的方法,则:



  
   
   代码:
   
  
  
   
   cd /var/db/pkg/
   pkg_delete
   joe-{version}
   cd
   /usr/ports/editors/joe/
   make install
   
  

  
或是


  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make clean
   make reinstall
   
  

  

16、如何查询目前系统安装了哪些套件?

查询目前系统已安装的全部套件:



  
   
   代码:
   
  
  
   
   pkg_info
   
  

  
17、如何查询目前系统有没有安装这个关键字的套件?
此方法类似 FAQ 16 :



  
   
   代码:
   
  
  
   
   pkg_info | grep
   
  

  

18、如何查询某个档案是属於哪些套件?

如果想查询
/usr/local/bin/joe 是属於哪个套件的话,则:



  
   
   代码:
   
  
  
   
   pkg_info -W
   /usr/local/bin/joe
   
  

  
如果没有回传任何资讯的话,代表着这个档案是由
FreeBSD 内建的。


19、如何查询某个套件安装了哪些档案?

如果想查询目前系统所安装的 joe
包含了哪些档案,则:



  
   
   代码:
   
  
  
   
   pkg_info -L
   /var/db/pkg/joe-{version}
   
  

  

20、如何安装旧版的 ports?

有时候会因为相依性,或是新版有问题,而会想装旧版本的套件。

这里的方法是利用 CVS
的好处,回归到以前旧版本存在的日子,以安装旧版本的
套件。首先,若我们要回复到某一个套件的版本时,需要去查询
FreeBSD ports
CVS
repository。最常见的就是 Freshports 网站、 FreeBSD 的 Mailing
FreeBSD cvs 或是
FreeBSD ports cvsweb。

查到该套件版本所依存的日子後,就修改
CVS tag。一般预设 ports 的 CVS
tag 会写在
/usr/share/examples/cvsup/ports-supfile ,如要回朔到
2002/10/05 号的话,则:



  
   
   代码:
   
  
  
   
   # vi
   /usr/share/examples/cvsup/ports-supfile
   ******************************************
   
   default
   date=2002.10.05.00.00.00 #将 date 改成当日
   
  

  
然後按照一般 CVSup
的时候一样,执行 CVSup (make update),此时的 ports
collections
就会回到当时的情形,那麽该套件 旧版本也会出现在 ports
collections
中,只要安装即可。

如果仅是想把某部份的 ports
回朔,则必须加上额外的资讯,如仅希望把
lang/perl5.8
回朔,而得知此属於 lang 中的一支,则:



  
   
   代码:
   
  
  
   
   # vi
   /usr/share/examples/cvsup/ports-supfile
   ******************************************
   
   #ports-all #将
   ports-all 标示起来
   ports-lang #加入这行
   
  

  
最後,执行
CVSup,并安装即可。目前若希望单独回朔单一的 ports,
则比较麻烦。


21、如何更新 ports Mk?

Mk (/usr/ports/Mk/)
是编译 ports 时所叁考的设定,有时若发生 ports
collections 太新,而导致
Mk 的内容不符,此时 就是应该更新 Mk 的时候了。




  
   
   代码:
   
  
  
   
   cd /usr/src/
   make update
   cd
   /usr/src/share/mk
   make install
   
  

  

22、如何解决安装 ports 时出现 sed -i 的错误?

因为 BSD style 的 sed
,也就是 BSD 本身自有的 sed ,与一些 ports 编译期
间所执行的 sed
不一致,所以会导致一些语 法错误。此时先安装 sed_inplace
(textproc/sed_inplace),然後再安装原本无法安装的
ports:




  
   
   代码:
   
  
  
   
   cd
   /usr/ports/???/???/
   make
   -DUSE_REINPLACE install
   
  

  

23、如何列出所有可以升级的 ports?

ports collection
的更新速度很快,在每次更新 ports collections 後,往往
会出现比目前现在安装的套件还新的版本,可
以令系统自行整理并提供可升级套
件的列表:



  
   
   代码:
   
  
  
   
   pkg_version -c
   
  

  

24、如何得知 ports system 对某个 ports 所提供的编译叁数?

所有的 ports
collections 中所提供的编译叁数都会在对应的 Makefile 档案内
详述,如
sysutils/portupgrade 的话,
则是位在
/usr/ports/sysutils/portupgrade/Makefile 档案下。
可以对此档案浏览以得知编译时期可以下达的叁数,

如对
sysutils/portupgrade 有提供 NOPORTDOCS,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/sysutils/portupgrade/
   make -DNOPORTDOCS
   install # make NOPORTDOCS=yes install 亦同
   
  

  
那麽安装此 ports 时,会将
NOPORTDOCS 所对应的相关叁数指定进去。
有时候设定较人性化的 ports
会在安装前提供叁数供选择,但是其实大部份的
ports
都没有提供,因此必须自行去搜寻可编 译的叁数,在此我提供的方式如
下:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/sysutils/portupgrade/
   grep defined
   Makefile
   
  

  
如此几乎可以知道所有提供的可编译叁数,虽然有时会多出一些不相干的资料,

不会这个确实是一个不错可叁考的方式。


25、如何手动加入编译 ports 的叁数?

在 FAQ 24 中的方法,是
ports collections 有提供的前提之下,有时候并不是
所有该软体所支援的叁数 都会收纳在
ports collections 中,因此有时候会需
要手动加入编译的叁数。如
ftp/pure-ftpd 中,如果不想把 inetd 的支援编入
的选项,并没有被 ports
collections 所纳入,因此必须手动加上这个 编译叁
数,如下:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/ftp/pure-ftpd/
   make
   CONFIGURE_ARGS+="--without-inetd" install
   
  

  

26、如何指定 ports 的安装路径?

预设 ports collecions
已安排安装的路径 (/usr/local/),如果不想将套件安
装在预设路径的话,可以手动指定安装路径。
以 editors/joe 为例,则:



  
   
   代码:
   
  
  
   
   cd
   /usr/ports/editors/joe/
   make PREFIX=/usr
   install
   
  

  
那麽 joe 就会将档案对应在 /usr
目录下,而不是预设的 /usr/local 目录下。


27、安装 ports 出现 FORCE_PKG_REGISTER 的错误讯息

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP