欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

FreeBSD软件安装卸载工具--Ports和Packages详解

程序员文章站 2022-06-25 17:33:39
1、如何只抓取 tarball? 2、如何仅做到解开 tarball的步骤? 3、如何仅做到解开 tarball 并补上官方提供的 patch? 4、如何安装一个新的 port? 5、如何安装一个新的 po... 08-09-08...

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