注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

phperwuhan的博客

记载一个phper的历程!phperwuhan.blog.163.com

 
 
 

日志

 
 

install ports/packages  

2009-09-18 15:27:26|  分类: freebsd |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

查找ports安装程序路径:whereis vim

详细的查找ports安装程序信息:

cd /usr/ports

make search name=vim

远程安装vim package:pkg_add -r vim

列表已安装的packages:pkg_info

比较packages版本:pkg_version

 

 

 pkg_version(1)是一个用来统计所有安装的软件包版本的工具。它可以用来比较本地 package 的版本与 ports 目录中的当前版本是否一致。

# pkg_version  cvsup                       =  docbook                     =  ...  

  在第二列的符号指出了安装版本的相关时间和本地ports目录树中可用的版本。

符号 含义
= 在本地ports树中与已安装的软件包版本相匹配。
< 已安装的版本要比在ports树中的版本旧。
> 已安装的版本要比在ports树中的版本新 (本地的port树可能没有更新)。
? 已安装的软件包无法在ports索引中找到。 (可能发生这种事情,举个例子, 您早先安装的一个 port 从 port 树中移出或改名了)
* 软件包有很多版本。
! 已安装的软件包在索引中存有记录, 但是由于某些原因 pkg_version 无法比较已安装的软件包与索引中相对应的版本号。

 

4.4.3 删除一个软件包

  要删除先前安装的软件package,只要使用pkg_delete(1) 工具。

# pkg_delete xchat-1.7.1  

  需要注意的是, pkg_delete(1) 需要提供完整的包名; 如果您只是指定了类似 xchat 而不是 xchat-1.7.1 这样的名字, 则它将拒绝执行操作。不过, 您可以使用 pkg_version(1) 来了解安装的 package 的版本。 除此之外, 也可以使用通配符:

# pkg_delete xchat\*  

  这时, 所有名字以 xchat 开头的 package 都会被删掉。

4.4.4 其它

  所有已安装的 package 信息都保存在 /var/db/pkg 目录下。安装文件的列表和每个 package 的内容和描述都能在这个目录的相关文件中找到。 

 

4.5 使用Ports Collection

  下面的几个小节中, 给出了关于如何使用 Ports 套件来在您的系统中安装或卸载程序的介绍。 关于可用的 make targets 以及环境变量的介绍, 可以在 ports(7) 中找到。

4.5.1 获得Ports Collection

  在您能使用 ports 之前, 您必须先获得 Ports Collection ── 本质上是 /usr/ports 目录下的一堆 Makefile、补丁和描述文件。

  在您安装 FreeBSD 系统的时候, sysinstall 会询问您是否需要安装 Ports Collection。 如果您选择 no, 那您可以用下面的指令来安装 Ports Collection:

CVSup 方法

保持您本地 Ports 套件最新的一种快捷的方法, 是使用 CVSup 协议来进行更新。 如果您希望了解更多关于 CVSup 的细节, 请参见 使用 CVSup

注意: 在 FreeBSD 系统里对 CVSup 的实现叫作 csup。 它首次出现在 FreeBSD 6.2中。 对于旧版本的 FreeBSD 用户而言可以通过 port/package 安装 net/csup

在首次运行 csup 之前, 务必确认 /usr/ports 是空的! 如果您之前已经用其他地方安装了一份 Ports 套件,则 csup 可能不会自动删除已经在上游服务器上删除掉的补丁文件。

  1. 运行 csup:

    # csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile  

    cvsup.FreeBSD.org 改为离您较近的 CVSup 服务器。 请参见 CVSup 镜像 (第 A.5.7 节) 中的镜像站点完整列表。

    注意: 有时可能希望使用自己的 ports-supfile, 比如说,不想每次都通过命令行来指定所使用的 CVSup 服务器。

    1. 这种情况下, 需要以 root 身份将 /usr/share/examples/cvsup/ports-supfile 复制到新的位置, 例如 /root 或您的主目录。

    2. 编辑 ports-supfile

    3. CHANGE_THIS.FreeBSD.org 修改成离您较近的 CVSup 服务器。 可以参考 CVSup 镜像 (第 A.5.7 节) 中的镜像站点完整列表。

    4. 接下来按如下的方式运行 csup

      # csup -L 2 /root/ports-supfile  
  2. 此后运行 csup(1) 命令将下载最近所进行的改动, 并将它们应用到您的 Ports Collection 上,不过这一过程并不重新联编您系统上的 ports。

Portsnap 方式

Portsnap 是另一种用于发布 Ports 套件的方法。 它最早从 FreeBSD 6.0 开始引入。 在较早的系统中, 您可以通过 ports-mgmt/portsnap package 来安装它:

# pkg_add -r portsnap  

请参见 使用 Portsnap 以了解关于全部 Portsnap 功能的详细描述。

  1. 如果您使用 FreeBSD 6.1-RELEASE, 或通过 port 或 package 安装了较新版本的 Portsnap 的话, 可以直接跳过这一步。 /usr/ports 将在首次使用 portsnap(8) 命令时自动创建。 而如果您使用的是较早期版本的 Portsnap,就只能手工创建空的 /usr/ports 目录了。

    # mkdir /usr/ports  
  2. 下载压缩的 Ports 套件快照到 /var/db/portsnap。您可以根据需要在这之后关闭 Internet 连接。

    # portsnap fetch  
  3. 假如您是首次运行 Portsnap, 则需要将快照释放到 /usr/ports

    # portsnap extract  

    如果您已经有装好的 /usr/ports 而您只想更新,则应执行下面的命令:

    # portsnap update  

Sysinstall 方式

这种方法需要使用 sysinstall 从安装介质上安装 Ports 套件。注意, 安装的将是发布发行版时的旧版 Ports 套件。 如果您能访问 Internet,应使用前面介绍的方法之一。

  1. root 身份运行 sysinstall (对 FreeBSD 5.2 之前的版本, 应执行 /stand/sysinstall):

    # sysinstall  
  2. 用光标向下选择 Configure, 并按 Enter

  3. 向下并选择 Distributions, 按 Enter

  4. 选择 ports, 并按 Space

  5. 选择 Exit, 并按 Enter

  6. 选择所希望的安装介质, 例如 CDROM、 FTP, 等等。

  7. 选择 Exit 并按 Enter

  8. X 退出 sysinstall

4.5.2 安装 Ports

  当提到 Ports Collection 时, 第一个要说明的就是何谓 “skeleton”。 简单地说, port skeleton 是让一个程序在 FreeBSD 上简洁地编译并安装的所需文件的最小组合。 每个 port skeleton 包含:

  • 一个 MakefileMakefile 包括好几个部分, 指出应用程序是如何编译以及将被安装在系统的哪些地方。

  • 一个 distinfo 文件。这个文件包括这些信息:这些文件用来对下载后的文件校验和进行检查 (使用 md5(1)sha256(1)),来确保在下载过程中文件没有被破坏。

  • 一个 files 目录。 这个目录包括在 FreeBSD 系统上编译和安装程序需要用到的补丁。 这些补丁基本上都是些小文件,指出特定文件作了哪些修正。 它们都是纯文本的的格式,基本上是这样的 “删除第 10 行” 或 “将第 26 行改为这样 ...”, 补丁文件也被称作 “diffs”, 他们由 diff(1) 程序生成。

    这个目录也包含了在编译 port 时要用到的其它文件。

  • 一个 pkg-descr 文件。这是一个提供更多细节,有软件的多行描述。

  • 一个 pkg-plist 文件。 这是即将被安装的所有文件的列表。它告诉 ports 系统在卸载时需要删除哪些文件。

  一些ports还有些其它的文件, 例如 pkg-message。 ports 系统在一些特殊情况下会用到这些文件。 如果您想知道这些文件更多的细节以及 ports 的概要,请参阅 FreeBSD Porter's Handbook

  port里面包含着如何编译源代码的指令, 但不包含真正的源代码。 您可以在网上或 CD-ROM 上获得源代码。 源代码可能被开发者发布成任何格式。 一般来说应该是一个被 tar 和 gzip 过的文件, 或者是被一些其他的工具压缩或未压缩的文件。 ports中这个程序源代码标示文件叫 “distfile”, 安装 FreeBSD port的方法还不止这两种。

注意: 您必须使用 root 用户登录后安装 ports。

警告: 在安装任何 port 之前, 应该首先确保已经更新到了最新的 Ports Collection,并检查 http://vuxml.freebsd.org/ 中是否有与那个 port 有关的安全问题。

在安装应用程序之前, 可以使用 portaudit 来自动地检查是否存在已知的安全问题。 这个工具同样可以在 Ports Collection (ports-mgmt/portaudit) 中找到。 在安装新的 port 之前,可以考虑先运行一下 portaudit -F 来抓取最新的漏洞数据库。在每天的周期性系统安全检察时, 数据库会被自动更新, 并且会在这之后实施安全审计。欲了解进一步的情况,请参阅 portaudit(1)periodic(8)

  Ports 套件假定您有可用的 Internet 连接。 如果您没有, 则需要将 distfile 手工放到 /usr/ports/distfiles 中。

  要开始操作, 首先进入要安装 port 的目录:

# cd /usr/ports/sysutils/lsof  

  一旦进入了 lsof 的目录,您将会看到这个port的结构。下一步就是 make,或说 “联编” 这个 port。 只需在命令行简单地输入 make 命令就可轻松完成这一工作。 做好之后,您可以看到下面的信息:

# make  >> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.  >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.  ===>  Extracting for lsof-4.57  ...  [extraction output snipped]  ...  >> Checksum OK for lsof_4.57D.freebsd.tar.gz.  ===>  Patching for lsof-4.57  ===>  Applying FreeBSD patches for lsof-4.57  ===>  Configuring for lsof-4.57  ...  [configure output snipped]  ...  ===>  Building for lsof-4.57  ...  [compilation output snipped]  ...  #  

  注意,一旦编译完成,您就会回到命令行。 下一步安装 port, 要安装它只需要在 make 命令后跟上一个单词 install 即可:

# make install  ===>  Installing for lsof-4.57  ...  [installation output snipped]  ...  ===>   Generating temporary packing list  ===>   Compressing manual pages for lsof-4.57  ===>   Registering installation for lsof-4.57  ===>  SECURITY NOTE:        This port has installed the following binaries which execute with        increased privileges.  #  

  一旦您返回到提示符,您就可以运行您刚刚安装的程序了。因为 lsof 是一个赋予特殊权限的程序, 因此显示了一个安全警告。在编译和安装 ports 的时候, 您应该留意任何出现的警告。

  删除工作目录是个好主意, 这个目录中包含了全部在编译过程中用到的临时文件。这些文件不仅会占用宝贵的磁盘空间, 而且可能会给升级新版本的 port 时带来麻烦。

# make clean  ===>  Cleaning for lsof-4.57  #  

注意: 使用 make install clean 可以一步完成 makemake installmake clean 这三个分开的步骤的工作。

注意: 一些 shell 会缓存环境变量 PATH 中指定的目录里的可执行文件, 以加速查找它们的速度。 如果您使用的是这类 shell, 在安装 port 之后可能需要执行 rehash 命令,然后才能运行新安装的那些命令。 这个命令可以在类似 tcsh 的 shell 中使用。 对于类似 sh 的 shell, 对应的命令是 hash -r。 请参见您的 shell 的文档以了解进一步的情况。

  某些第三方 DVD-ROM 产品, 如 FreeBSD Mall 的 FreeBSD Toolkit 中包含了 distfiles。 这些文件可以与 Ports 套件配合使用。 将 DVD-ROM 挂接到 /cdrom。如果您使用不同的挂接点, 则应设置 make 变量 CD_MOUNTPTS。如果盘上有需要的 distfiles, 则会自动使用。

注意: 请注意, 少数 ports 并不允许通过 CD-ROM 发行。这可能是由于下载之前需要填写注册表格, 或者不允许再次发布, 或者有一些其它原因。如果您希望安装在 CD-ROM 上没有的 port, 就需要在线操作了。

  ports 系统使用 fetch(1) 去下载文件,它有很多可以设置的环境变量, 其中包括 FTP_PASSIVE_MODEFTP_PROXY, 和 FTP_PASSWORD。如果您在防火墙之后,或使用 FTP/HTTP代理, 您就可能需要设置它们。 完整的说明请看 fetch(3)

  当使用者不是所有时间都能连接上网络, 则可以利用 make fetch。 您只要在顶层目录 (/usr/ports) 下运行这个命令, 所有需要的文件都将被下载。这个命令也同样可以在下级类别目录中使用, 例如: /usr/ports/net。 注意, 如果一个port有一些依赖的库或其他 port,它将 下载这些依赖的 port 的 distfile 文件, 如果您想获取所有依赖的 port 的所有 distfile, 请用 fetch-recursive 命令代替 fetch命令。

注意: 您可以在一个类别或在顶级目录编译所有的 port, 或者使用上述提到的 make fetch命令。 这样是非常危险的,因为有一些port不能并存。 或者有另一种可能, 一些port会安装两个不同的文件,但是却是相同的文件名。

  在一些罕见的例子中, 用户可能需要在除了 MASTER_SITES 以外的一个站点(本地已经下载下来的文件)去获得一个文件包。 您可以用以下命令不使用 MASTER_SITES:

# cd /usr/ports/directory  # make MASTER_SITE_OVERRIDE= \  ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch  

  在这个例子中,我们把 MASTER_SITES这个选项改为了 ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/

注意: 一些 port 允许 (或甚至要求) 您指定编译选项来 启用/禁用应用程序中非必需的功能, 一些安全选项, 以及其他可以订制的内容。 具有代表性的包括 www/mozillasecurity/gpgme、 以及 mail/sylpheed-claws。 如果存在这样的选项,通常会在编译时给出提示。

4.5.2.1 改变默认的 Ports 目录

  有时, 使用不同的工作临时目录和目标目录可能很有用 (甚至是必要的)。 可以用 WRKDIRPREFIXPREFIX 这两个变量来改变默认的目录。 例如:

# make WRKDIRPREFIX=/usr/home/example/ports install  

  将在 /usr/home/example/ports 中编译 port 并把所有的文件安装到 /usr/local

# make PREFIX=/usr/home/example/local install  

  将在 /usr/ports 编译它并安装到 /usr/home/example/local

  当然,

# make WRKDIRPREFIX=../ports PREFIX=../local install  

  将包含两种设置 (没有办法在这一页把它写完, 但您应该已经知道怎么回事了)。

  另外, 这些变量也可以作为环境变量来设置。 请参考您的 shell 的联机手册上关于如何设置环境变量的说明。

4.5.2.2 处理 imake

  一些 port 使用 imake (这是 X Window 系统的一部分) 不能正常地配合 PREFIX, 它们会坚持把文件安装到 /usr/X11R6 下面。 类似地, 一些 Perl port 会忽略 PREFIX 并把文件安装到 Perl 的目录中。 让这些 port 尊重 PREFIX 是困难甚至是不可能的事情。

4.5.2.3 重新配置 Ports

  当你在编译某些 ports 的时候,可能会弹出一个基于 ncurses 的菜单来让你来选择一些编译选项。 通常用户都希望能够在一个 port 被编译安装了以后还能再次访问这份菜单以添加删除或修改这些选项。实际上有很多方法来做这件事情。 一个方法进入那个 port 的目录后键入 make config,之后便会再次显示出菜单和已选择的项目。 另一个方法是用 make showconfig, 这会给你显示出所有的配置选项。还有一个方法是执行 make rmconfig,这将删除所有已选择的项目。 有关这些选项更详细的内容请参阅 ports(7)

4.5.3 卸载已经安装的 Ports

  现在您已经了解了如何安装 ports, 并希望进一步了解如何卸载,特别是在错误地安装了某个 port 之后。我们将卸载前面例子 (假如您没有注意的话, 是 lsof) 中安装的 port。 Ports 可以同 packages 以完全相同的方式 (在 Packages 一节 中进行了介绍) 卸载, 方法是使用 pkg_delete(1) 命令:

# pkg_delete lsof-4.57  

4.5.4 升级 Ports

  首先, 使用 pkg_version(1) 命令来列出 Ports Collection 中提供了更新版本的那些 port:

# pkg_version -v  

4.5.4.1 /usr/ports/UPDATING

  在您更新了 Ports 套件之后, 在升级 port 之前, 应查看 /usr/ports/UPDATING。 这个文件中介绍了在升级时用户应注意的问题,以及一些可能需要进行的操作。 这可能包括更改文件格式、 配置文件位置的变动,以及与先前版本的兼容性等等。

  如果 UPDATING 与本书中介绍的内容不同, 请以 UPDATING 为准。

4.5.4.2 使用 Portupgrade 来更新 Ports

  portupgrade 工具是设计来简化升级已安装的 port 的操作的。 它通过 ports-mgmt/portupgrade port 来提供。 您可以像其它 port 那样,使用 make install clean 命令来安装它:

# cd /usr/ports/ports-mgmt/portupgrade  # make install clean  

  使用 pkgdb -F 命令来扫描已安装的 port 的列表,并修正其所报告的不一致。 在每次升级之前, 有规律地执行它是个好主意。

  运行 portupgrade -a 时, portupgrade 将开始并升级系统中所安装的所有过时的 ports。如果您希望在每个升级操作时得到确认, 应指定 DE>-iDE> 参数。

# portupgrade -ai  

  如果您只希望升级某个特定的应用程序, 而非全部可用的 port, 应使用 portupgrade pkgname。 如果 portupgrade 应首先升级指定应用程序的话, 则应指定 DE>-RDE> 参数。

# portupgrade -R firefox  

  要使用预编译的 package 而不是 ports 来进行安装, 需要指定 DE>-PDE>。 如果指定了这个选项, portupgrade 会搜索 PKG_PATH 中指定的本地目录, 如果没有找到,则从远程站点下载。 如果本地没有找到, 而且远程站点也没有成功地下载预编译包, 则 portupgrade 将使用 ports。 要禁止使用 port, 可以指定 DE>-PPDE>。

# portupgrade -PP gnome2  

  如果只想下载 distfiles (或者, 如果指定了 DE>-PDE> 的话, 是 packages) 而不想构建或安装任何东西, 可以使用 DE>-FDE>。要了解更多细节, 请参考 portupgrade(1)

4.5.4.3 使用 Portmanager 来升级 Ports

  Portmanager 是另一个用以简化已安装 port 升级操作的工具。 它可以通过 ports-mgmt/portmanager port 安装:

# cd /usr/ports/ports-mgmt/portmanager  # make install clean  

  可以通过这个简单的命令来升级所有已安装的 port:

# portmanager -u  

  如果希望 Portmanager 在进行每步操作之前都给出提示,应使用 DE>-uiDE> 参数。 Portmanager 也可以用来在系统中安装新的 ports。 与通常的 make install clean 命令不同,它会在联编和安装您所选择的 port 之前升级所有依赖包。

# portmanager x11/gnome2  

  如果关于所选 port 的依赖有任何问题, 可以用 Portmanager 来以正确的顺序重新构建它们。 完成之后, 有问题的 port 也将被重新构建。

# portmanager graphics/gimp -f  

  要了解更多信息, 请参见 portmanager(1)

4.5.4.4 使用 Portmaster 升级 Ports

  Portmaster 是另外一个用来升级已安装的 ports 的工具。 Portmaster 被设计成尽可能使用 “基本” 系统中能找到的工具(它不依赖于其他的 ports) 和 /var/db/pkg/ 中的信息来检测出需要升级的 ports。你可以在 ports-mgmt/portmaster 找到它:

# cd /usr/ports/ports-mgmt/portmaster  # make install clean  

  Portmaster groups ports into four categories:

  Portmaster 把 ports 分成4类:

  • Root ports (不依赖其他的 ports,也不被依赖)

  • Trunk ports (不依赖其他的 ports,但是被其他的 ports 依赖)

  • Branch ports (依赖于其他的 ports,同时也被依赖)

  • Leaf ports (依赖于其他的 ports,但不被依赖)

  你可以使用 DE>-LDE> 选项列出所有已安装的 ports 和查找存在更新的 ports:

# portmaster -L  ===>>> Root ports (No dependencies, not depended on)  ===>>> ispell-3.2.06_18  ===>>> screen-4.0.3          ===>>> New version available: screen-4.0.3_1  ===>>> tcpflow-0.21_1  ===>>> 7 root ports  ...  ===>>> Branch ports (Have dependencies, are depended on)  ===>>> apache-2.2.3          ===>>> New version available: apache-2.2.8  ...  ===>>> Leaf ports (Have dependencies, not depended on)  ===>>> automake-1.9.6_2  ===>>> bash-3.1.17          ===>>> New version available: bash-3.2.33  ...  ===>>> 32 leaf ports    ===>>> 137 total installed ports          ===>>> 83 have new versions available  

  可以使用这个简单的命令升级所有已安装的 ports:

# portmaster -a  

注意: Portmaster 默认在删除一个现有的 port 前会做一个备份包。如果新的版本能够被成功安装, Portmaster 将删除备份。 使用 DE>-bDE> 后 Portmaster 便不会自动删除备份。加上 DE>-iDE> 选项之后 Portmaster 将进入互动模式, 在升级每个 port 以前提示你给予确认。

  如果你在升级的过程中发现了错误,你可以使用 DE>-fDE> 选项升级/重新编译所有的 ports:

# portmaster -af  

  同样你也可以使用 Portmaster 往系统里安装新的 ports,升级所有的依赖关系之后并安装新的 port:

# portmaster shells/bash  

  更多的详细信息请参阅 portmaster(8)

4.5.5 Ports 和磁盘空间

  使用 Ports 套件会最终用完磁盘空间。 在通过 ports 联编和安装软件之后,您应记得清理临时的 work 目录, 其方法是使用 make clean 命令。您可以使用下面的命令来清理整个 Ports 套件:

# portsclean -C  

  随着时间的推移, 您可能会在 distfiles 目录中积累下大量源代码文件。 您可以手工删除这些文件, 也可以使用下面的命令来删除所有 port 都不引用的文件:

# portsclean -D  

  除此之外, 也可以用下列命令删去目前安装的 port 没有使用的源码包文件:

# portsclean -DD  

注意: 这个 portsclean 工具是 portupgrade 套件的一部分。

  不要忘记删除那些已经安装, 但已不再使用的 ports。用于自动完成这种工作的一个好工具是 ports-mgmt/pkg_cutleaves port。

 

 

4.6 安装之后还要做点什么?

  通常,您通过port安装完一个软件后,可以阅读它带的一些文档(如果它包含文档的话),或需要编辑它的配置文件,来确保这个软件的运行,或在机器启动的时候启动(如果它是一个服务的话),等等。

  对于不同的软件有着不同的配置步骤。不管怎样,如果您装好了一个软件,但是不知道下一步怎么办的时候, 这些小技巧可能可以帮助您:

  • 使用 pkg_info(1) 命令,它能找到安装了哪些文件,以及装在哪里。 举个例子,如果您安装了 FooPackage version 1.0.0, 那么这个命令

    # pkg_info -L foopackage-1.0.0 | less  

    将显示这个软件包安装的所有文件,您要特别注意在man/目录里面的文件, 它们可能是手册,etc/目录里面的配置文件,以及 doc/目录下面更多的文档。

    如果您不确定已经安装好的软件版本,您可以使用这样的命令

    # pkg_info | grep -i foopackage  

    它将会找到所有已安装的软件包名字中包含foopackage 的软件包。 对于其他的查找, 您只需要在命令行中替换 foopackage

  • 一旦一些软件手册已被您确认安装,您可以使用 man(1) 查看它。同样的,如果有的话,您还可以完整的查看一遍配置文件的示例,以及任何额外的文档。

  • 如果应用软件有网站, 您还可以从网站上找到文档,常见问题的解答,或其他更多。如果您不知道它们的网站地址,请使用下面的命令

    # pkg_info foopackage-1.0.0  

    一个 WWW: 行, 如果它存在,它将提供一个这个应用程序的网站URL.

  • Ports 如果需要在服务器启动时运行(就像互联网服务器), 它通常会把一个脚本的样例放入 /usr/local/etc/rc.d 目录。为了保证正确性, 您可以查看这个脚本,并编辑或更改这个脚本的名字。 详情请看启动服务

 

4.7 如何处理坏掉的 Ports

  如果您发现某个 port 无法正常工作, 有几件事值得尝试, 包括:

  1. 问题报告数据库 中查找是否有尚未提交的修正。 如果有, 可以使用所提议的修正。

  2. 要求 port 的监护人 (maintainer) 提供帮助。 输入 make maintainer 或阅读 Makefile 查找监护人的电子邮件地址。 请记得把 port 的名字和版本写在邮件里 (Makefile 中的 $FreeBSD:这一行) 并把错误输出的头几行发给 maintainer。

    注意: 某些 ports 并非一个人维护, 而是写了一个 邮件列表。 许多, 但并非所有 port, 使用类似 DE><freebsd-listname@FreeBSD.org>DE> 这样的地址。请在提出问题时考虑这一点。

    特别地, 由 DE><freebsd-ports@FreeBSD.org>DE> 监护的 port, 实际上并没有人维护。 订阅这个邮件列表的人们会感谢您提供的修正和支持。我们一直都需要更多志愿者!

    如果您没有得到回应, 则可以使用 send-pr(1) 来提交问题报告 (请参见 如何撰写 FreeBSD 问题报告)。

  3. 修正它! Porter 手册 中提供了关于 “Ports” 基础设施的详细信息,通过了解这些内容, 您就能修正偶然坏掉的 port, 或甚至提交自己的 port 了!

  4. 从较近的 FTP 站点下载一个编译好的安装包。 “中央的” package collection 在 ftp.FreeBSD.orgpackages 目录中, 但 在此之前 一定记得先看看 本地镜像 上是否已经有了! 通常情况下这些安装包都可以直接使用, 而且应该比自行编译快一些。安装过程本身可以通过 pkg_add(1) 来完成。

 

11.5 启动服务

Contributed by Tom Rhodes.

  许多用户会选择使用 Ports Collection 来在 FreeBSD 上安装第三方软件。很多情况下这可能需要进行一些配置以便让这些软件能够在系统初始化的过程中启动。 服务, 例如 mail/postfixwww/apache13 就是这些需要在系统初始化时启动的软件包中的两个典型代表。这一节解释了启动第三方软件所需要的步骤。

  FreeBSD 包含的大多数服务,例如 cron(8),就是通过系统启动脚本启动的。 这些脚本也许会有些不同, 这取决于 FreeBSD 版本。但是不管怎样, 需要考虑的一个重要方面是他们的启动配置文件要能被基本启动脚本识别捕获。

  在 rc.d 出现之前, 应用程序会把一个简单的启动脚本放到 /usr/local/etc/rc.d 目录中,这个目录中的脚本会被系统初始化脚本读取。

  尽管很多人已经花费了相当多的时间来把旧的配置方式融入到新系统中,仍然有许多第三方软件需要把脚本放到上面提到的目录中。 是否使用 rc.d 会对这些脚本的执行带来一些变化。 在 FreeBSD 5.1 之前采用的是旧式的配置, 当然, 绝大多数情况下, 新式的脚本也会工作的很好。

  每个脚本都应该遵守 FreeBSD 版本所需求的一些规定:每个脚本必须是能够被系统执行,通常可以使用 chmod 命令设置成 555 权限。 它还应该能接受 start 选项来启动程序并且接受 stop 选项来结束程序。

  一个简单的脚本看起来可能会像这样:

#!/bin/sh  echo -n ' utility'    case "$1" in  start)          /usr/local/bin/utility          ;;  stop)          kill -9 `cat /var/run/utility.pid`          ;;  *)          echo "Usage: `basename $0` {start|stop}" >&2          exit 64          ;;  esac    exit 0  

  这个脚本提供了 stopstart 两个选项, 用以操作 utility

  可以用如下方法来启动:

# /usr/local/etc/rc.d/utility start  

  现在不是所有第三方软件都需要在 rc.conf 中进行如此的配置, 不过几乎每天都有新的 port 被修改来采用这种配置方法。您应在安装的最后阶段查看所显示的信息, 以了解某个具体的应用是否需要这样的配置。某些第三方软件会提供启动脚本, 以便与 rc.d 配合使用;这些内容将在下一节介绍。

11.5.1 扩展应用程序配置

  现在 FreeBSD 提供了 rc.d,这使得对应用软件的启动进行配置变得更加方便, 并提供了更多的其他功能。 例如, 使用在 rc.d 一节中所介绍的关键字,应用程序就可以设置在某些其他服务, 例如 DNS 之后启动;除此之外, 还可以通过 rc.conf 来指定一些额外的启动参数,而不再需要将它们硬编码到启动脚本中。 基本的启动脚本如下所示:

#!/bin/sh  #  # PROVIDE: utility  # REQUIRE: DAEMON  # KEYWORD: shutdown    #  # DO NOT CHANGE THESE DEFAULT VALUES HERE  # SET THEM IN THE /etc/rc.conf FILE  #  utility_enable=${utility_enable-"NO"}  utility_flags=${utility_flags-""}  utility_pidfile=${utility_pidfile-"/var/run/utility.pid"}    . /etc/rc.subr    name="utility"  rcvar=`set_rcvar`  command="/usr/local/sbin/utility"    load_rc_config $name    pidfile="${utility_pidfile}"    start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}"    run_rc_command "$1"  

  这个脚本将保证 utility 能够在 daemon 服务之后启动。 它同时也提供了设置和跟踪 PID, 也就是进程 ID 文件的方法。

  可以在 /etc/rc.conf 中加入:

utility_enable="YES"  

  这个方法也使得命令行参数、包含 /etc/rc.subr 中所提供的功能, 兼容 rcorder(8) 工具并提供更简单的通过 rc.conf 文件来配置的方法。

11.5.2 用服务来启动服务

  其他服务, 例如 POP3 服务器, IMAP, 等等, 也可以通过 inetd(8) 来启动。这一过程包括从 Ports Collection 安装相应的应用程序, 并把配置加入到 /etc/inetd.conf 文件, 或去掉当前配置中的某些注释。 如何使用和配置 inetdinetd 一节中进行了更为深入的阐述。

  一些情况下, 通过 cron(8) 来启动系统服务也是一种可行的选择。 这种方法有很多好处, 因为 cron 会以 crontab 的文件属主身份执行那些进程。 这使得普通用户也能够执行他们的应用。

  cron 工具提供了一个独有的功能, 以 @reboot 来指定时间。 这样的设置将在 cron(8) 启动时运行,通常这也是系统初始化的时候。

  评论这张
 
阅读(618)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017