Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84089
  • 博文数量: 3
  • 博客积分: 1460
  • 博客等级: 上尉
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-13 20:42
文章分类
文章存档

2008年(3)

我的朋友
最近访客

分类: BSD

2008-05-06 11:11:48

    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 的错误讯息

     

阅读(1135) | 评论(0) | 转发(0) |
0

上一篇:Syslog Facility

下一篇:填涂卡代码查询

给主人留下些什么吧!~~