PORTUPGRADE
Section: User Commands (1) FreeBSD
软件名称:
portupgrade portinstall - 通过ports或package升级安装包或者安装新软件的工具软件。
命令摘要:
portupgrade [-habcCDDefFijknNOpPPqrRsuvwWy ] [-A -file ... -command ]
[-B -file ... -command ] [-l -file ... -file ] [-L -file ... -format ]
[-S -file ... -command ] [-x -file ... -pkgname_glob ] [[-o -file ...
-origin ] [-m -file ... -make_args ] [-M -file ... -make_env ]
pkgname_glob ... ]
工具描述:
portupgrade命令的作用是通过ports或packages(二进制软件包)升级系统安装的软件包。portinstall命令等效于portupgrade -N。
在阅读这个手册页之前,你必须清楚一个port/package与其他的ports/packages可能有下面两种关系:
required(必须)
有些ports/packages是一个port/package建立或运行的必要条件。这个软件的port的Makefiles文件中使用 BUILD_DEPENDS 和 RUN_DEPENDS 宏分别来定义必须的建立和运行所需要的ports/packages.
dependent(隶属依赖)
某些ports/packages的建立或运行需要这个port/package软件包
警告:
请仔细阅读这个手册页,知悉你利用portupgrade将要做的更新操作。
当这个工具运行提示“pkgdb -F“时,立刻运行它。因为如果本地package数据库与当前的ports不一致的话,当同时升级一定数量的package时会导致本地package数据库出现错误的结果。
自从 portupgrade 允许在不 rebuilding 和 reinstalling
依赖包的情况下升级系统安装的package,这个工具有时会导致升级的软件包与其他相关的软件包二进制不兼容。对付这样的情况的方法是运行工具时必须使
用 -f,-r 和 -R 命令行选项。
当portupgrade更新package数据库时,不要中断这个程序。即使你没有任何的错误操作,中断这个程序会造成数据库不完整或者造成数据库数据
存在矛盾。运行 pkgdb -fu
可以重新建立这个数据库,如果不能修复,移除package数据库文件(/var/db/pkg/pkgdb.db)。
养成定期备份你的重要数据和配置文件的习惯,包括系统的package数据库文件。
选项:
这个工具支持以下命令行参数:
-h
--help
显示help,然后退出
-a
--all
对所有已经安装的packages进行操作,等效于使用通配符 ‘*’指定pkgname_glob
-A -file ... -CMD
--afterinstall -file ... -CMD
在每个软件包安装完之后,使用root权限运行指定的命令
-b
--backup-packages
升级软件包时保留先前版本packages的备份,保存在 PKG_TMPDIR 和 TMPDIR 环境变量指定的目录下。
--batch
在批处理模式下运行一个升级进程(with BATCH=yes)。
-B -file ... -CMD
--beforebuild -file ... -CMD
ports软件包在 build 之前,运行指定的命令。如果执行 CMD 失败退出,这个port/package的升级将被跳过。下面是一些典型的应用:
portupgrade -B 'cvs update' 'gnome*'
portupgrade -B 'ports_glob -M $(pwd) | (cd ../..; xargs cvs up)' slave/port
portupgrade -aB 'test ! `make -V IS_INTERACTIVE`'
-c
--clean
建立port之前执行 "make clean",这是默认的选项。参见下面的 -w 选项。
-C
--cleanup
Do “make clean ” after each installation. This is the default behavior. See the -W option below.
每个port安装完成之后,执行"make clean",这是默认的选项,参见下面的 -W 选项。
-D
--distclean
如果distfile的和校验失败,删除失败的distfile.
-e
--emit-summaries
每个port处理完成后显示摘要信息。
-f
--force
强制执行一个package的升级,即使是降级安装或者重新安装同样的版本,或者在pkgtools.conf中用 HOLD_PKGS 定义的port.
-F
--fetch-only
仅仅是下载distfiles或者packages(编译好的二进制软件包)(如果 -P 被指定)。不进行 build,升级,安装等操作。这个选项经常用在下载所有的distfile或package之后,进行安装和更新。
默认情况下,ports系统在建立或安装一个package失败时,与这个package相依赖的ports/packages也将被跳过。
--ignore-moved
忽略MOVED文件
-i
--interactive
打开交互模式,每个port/package安装或更新之前都要你进行确认,这个选项隐含使用 -v选项。
-j
--jet-mode
打开jet模式,这个选项目前还没有实现。
-k
--keep-going
强制升级一个package,即使一些这个package所必须的packages安装失败。
-l -file ... -FILE
--results-file -file ... -FILE
指定一个文件名,用来保存操作的结果,默认情况下,portupgrade不保存结果到文件。
-L -file ... -FORMAT
--log-file -file ... -FORMAT
指定一种类似 printf(3)风格的log文件命名格式。记录每个port的运行记录。具体参见例子3,如果port名作为参数,并且不包含%, "%s::%s"会被追加。
-m
--make-args
指定追加到每个port的make命令行后面的参数。
-M
--make-env
指定追加到每个port的make命令行后面的环境参数
-n
--noexecute
对命令行指定的任何package,包括相关的软件包不进行实际的安装或更新,只是显示将会进行哪些操作。这是一个“测试”功能,这个选项隐含使用 -v ,并且-i -y无效。
-N
--new
如果命令行指定的packagename没有安装,安装一个新的port/package. 在安装新的port/package之前,所有“必须的”软件包都会进行升级。
If this option is specified, you can specify a portorigin glob as
well as a pkgname glob to specify which port to install. See portsdb(1)
for the details of the ‘portorigin glob’
-o -file ... -ORIGIN
--origin -file ... -ORIGIN
Specify a port to upgrade the following package with.
-O
--omit-check
Omit sanity checks for
dependencies. By default, portupgrade checks if all the packages to
upgrade have consistent dependencies, though it takes extra time to
calculate dependencies. If you are sure you have run “pkgdb -F ” in
advance, you can specify this option to omit the sanity checks.
-p (小写p)
--package
当每个指定的port被安装或升级以后,建立一个package(二进制软件包),如果一个软件包被更新而且它的依赖软件包在命令行上给出(包括指定 -r的场合),同样也会被建立。
-P (大写P)
--use-packages
当packages(编译好的二进制软件包)可用时,使用package替代ports进行安装、升级。portupgrade在环境变量
PKG_PATH 中指定的本地目录中进行查找,如果找到就进行安装或升级。如果没有找到对应的编译好的二进制软件包,使用 pkg_fetch(1)
从远程网站进行下载,如果这两种搜索途径都找不到编译好的二进制软件包,使用port安装、升级。
-PP
--use-packages-only
即使你一直确保你的ports树是最新的,而且portupgrade能够找到最近版本的port,但只使用package,不使用ports,即便package在本地和远程网站都没有找到。
-q
--noconfig
忽略 $PREFIX/etc/pkgtools.conf 的内容。
-r
--recursive
对所有依赖给定软件包的那些软件包同样处理。具体的说是建立或运行需要给定软件包支持的那些软件包做同样的处理,这是一种递归操作。
-R
--upward-recursive
对给定软件包建立或运行所必须的那些软件包同样进行处理。(When specified with -F, fetch recursively, including the brand new, uninstalled ports that an upgraded port requires)
-s
--sudo
在 sudo(8) 下运行命令
-S -file ... -CMD
--sudo-command -file ... -CMD
指定一个替换 sudo(8)的命令。例如 “‘su root -c %s'",(默认情况使用 sudo )
-u
--uninstall-shlibs
不保留先前版本的共享库。默认情况下,portupgrade为了卸载程序的安全性考虑,保留先前版本的共享库。参见 pkg_deinstall(1) 手册页。
-v
--verbose
打开详细输出。
-w
--noclean
每个port在 build 之前,不进行 make clean 操作。参见上面的 -c 选项
-W
--nocleanup
每个port安装完成之后,不进行 make clean 操作。参见上面的 -C 选项。
--without-env-upgrade
不设置 UPGRADE_* 环境变量。
-x -file ... -GLOB
--exclude -file ... -GLOB
从匹配的packages中排除特定的软件包,这个操作是在响应 -r 和/或 -R 的递归依赖软件包之后运行。例如,下面的命令将升级所有第一个参数指定的软件包的有依赖关系的软件包,但是第二个参数指定的软件包不进行更新,排除在外。
portupgrade -rx XFree86 XFree86
-y
--yes
对所有的问题回答 "yes",这个选项隐含使用 -v ,也让 -n 失效。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/41486/showart_1082370.html