# 类似于 debian/ubuntu 下面非常好用的命令行包和源管理工具 apt , dpkg , fedora 下面的 yum ,同样 opensuse 除了#拥有大家熟悉非常强大的图形界面包管理工具 yast2 software manager and yast2 repository manager 之外,也有相应的命令行工具,这就是 zypper ,下面我们详细介绍一下 zypper 及其使用
注:这篇文章是关于如何使用 zypper 的, zpyyer 是一个使用包管理库 libzypp 的命令行的包管理工具,它的语法非常类似于 rug (一个 zmd 的命令行前端),但是它的命令和选项集,以及产生的输出和行为等各方面就和 rug 有很大变化了,当然,如果你更熟悉和愿意使用 rug 风格, zypper 也可以工作在 rug 兼容模式下 。
版本信息: Version 0.8.23 这篇文章所描述的 zypper 版本是 0.8.23 。
一般的 zypper 命令语法是:
# zypper [global-options] command [command-options] [arguments] ... 中括号中的部分是可选参数,因此最简单的执行 zypper 方式就是打上 zypper 这个名字然后跟上一条命令,比如说,如果你需要给系统打包升级,只需要简单的 : # zypper update 另外,你也可以通过在命令前面打上 global options 来选择一个或者多个 global options (通用选项) 比如:下面的这行命令意思是:(执行这个命令,不用交互式的问任何问题,一切都自己定) # zypper --non-interactive update 用 options( 选项 ) 来指定特殊的命令,简单的把它们打在命令后面就可以了,比如:(对系统应用需要的不补丁包,别向我确认任何版权信息,我已经都读过了) # zypper update --auto-agree-with-licenses 一些命令需要一个多个参数:(安装或者升级 mplayer 这个软件包) # zypper install mplayer 一些 options (选项)也需要一些参数:(用更新的软件包升级系统) # zypper update -t package 所有上面这些合起来:(使用 生产仓库 来安装 mplayer 和 amarok 并显示进度) # zypper -v install --repo factory mplayer amarok
repository 软件仓库 -本地的或者远程的包含软件包和各种各样的包信息的目录。软件仓库以前也叫做安装源,服务和编目目录( install sources, services or catalogs ) alias 软件仓库别名- 软件仓库的别名是软件仓库名称的比较短小简洁的版本,经常用在处理软件仓库的命令和一些选项,比如 remove repo 或者 --repo resolvable 可解析的以来关系 -用来描述一个包,补丁,模组,产品,这些依赖关系解析器工作的对象,最常用到可解析的对象是包和补丁。 Pattern 模组 -用来表达一组具有相互依赖辅助功能的软件包的集合。比如说一个 Http Server 模组,它就包含了与这个服务有依赖关系的,以及运行和管理一个 http server 所需要的所有的软件包,所以当安装一个模组的时候,这些软件包都将被安装。 Product 产品 -代表了整个产品(比如说 opensuse11.0)
下面的选项都能够在任何 zypper 事物中应用 -V, --version 输出版本号 -v, --verbose 调试输出,打印全部异常轨迹 -t, --terse 简洁输出,目前不支持,只用于 updater applet 来内部调用 -q, --quiet 取消正常输出,只输出一些简短信息 ( 特别是 结果提示)和错误信息,但是,如果和冲突的命令比如 --verbose 选项一起使用, --verbose 选项的优先级更高些。 -s, --table-style 表类型(整数) -r, --rug-compatible 传换到 rug 兼容模式 -n, --non-interactive 传换到非交互模式,在这种模式下面,不会提示用户作任何决定,而是自动使用默认认为合理的设置。这在将 zypper 作为一个 cron ,或者作为脚本的一部分运行的时候特别有用。 --no-gpg-checks 忽略 GPG 检查失败,并且继续,如果使用这个选项,当发生 GPG 问题的时候, zypper 将打印比且记录一个警告信息并且不会中断任何操作而会继续。应当谨慎使用这个选项,因为你可能非常容易错过一些安全问题。 -R, --root <dir> 在一个不同的根目录上面操作。
Zypper 提供了一些命令。 其中最常用的可能就是 zypper update ,这条命令从已经定义的仓库下载并且安装需要的更新,如果你只需要更新软件,那么这个是你需要的唯一的命令。
一般语法:
help, -h 打印帮助,打印一般帮助可以用: # zypper -h 打印一个命令的帮助,用: # zypper -h [command]
一般语法: repos, lr 一个示例输出为: # zypper lr # | Enabled | Refresh | Type | Alias | Name --+---------+---------+--------+---------+-------------------------- 1 | Yes | No | rpm-md | factory | factory 2 | Yes | Yes | yast2 | guru | guru 3 | Yes | No | rpm-md | packman | Packman 10.3 4 | Yes | No | rpm-md | updates | openSUSE-10.3-Updates 5 | Yes | Yes | yast2 | main-no | Main Repository (NON-OSS) 6 | No Yes yast | main | Main Repository (OSS) 如果想要在列表中包含软件仓库的 URL ,请和 zypper lr 一起使用 -v 全局选项
安装任何软件包之前至少要先有一个软件仓库被定义。要添加一个软件仓库,清使用 addrepo 命令:
addrepo, ar <URI> <alias>
这个命令接受以下选项:
-r, --repo <FILE.repo>
添加指定的 .repo 文件定义的软件仓库
举个例子:
# zypper ar http://packman.iu-bremen.de/suse/10.3 pm * Adding repository 'pm' Repository 'pm' successfully added: Enabled: Yes Autorefresh: Yes URL: http://packman.iu-bremen.de/suse/10.3
removerepo, rr <URI|alias>
举个例子:
zypper rr http://packman.iu-bremen.de/suse/10.3
或者:
zypper rr pm
一般语法:
renamerepo, nr <alias> <new-alias>
这个命令目前只有用该百年软件仓库的别名,如果你希望改变软件仓库的显示,清编辑存放在 /etc/zypp/repos.d 目录相应的 .repo 文件。
一般语法:
install, in <packagename> ... install, in --capability <capability> ...
前一种形式通过你指定的名字来选择安装的软件包 :
# zypper install subversion gcc
安装名字为 subversion 和 gcc 的软件包
后一种形式则根据软件包所能提供的东西来选择安装的软件包:
# zypper install -C /usr/bin/svn file
安装了能够提供 /usr/bin/svn 的软件包
# zypper install -C subversion=1.4.4
安装了提供指定版本 subversion 的软件包
这条命令能够接受下列的选项标识:
-r, --repo <alias> - 只考虑用别名指定的软件仓库的以来关系。
-t, --type <resolvable> - 依赖关系的类型(默认:包依赖)
-n, --name - 选择由名字而不是提供能力来解析依赖。
-C, --capability - 有可提能力来解析。
-l, --auto-agree-with-licenses - 自动同意第三方版权确认提示。
--debug-solver - 为调试创建解析示例
-R, --force-resolution – 强迫解析器找到一个解决方案,即使意味着删除所有为满足条件的包。
一般语法 :
remove, rm <packagename> ... remove, rm --capability <capability> ...
它接受的选项和 install 命令相同,出了— force
一般语法:
search, se [pattern] ...
接受下列选项标志:
--match-all - 在所有搜索字符串中搜索一个匹配(默认)
--match-any - 在任何一个搜索字符串中搜索一个匹配。
--match-substrings - 匹配可能只是搜索字符串中的部分字符(默认)
--match-words - 匹配只能是搜索字符串中的整字
--match-exact - 精确包名称匹配
-d, --search-descriptions - 也在包提要嘻嘻和描述中搜索
-c, --case-sensitive - 区分大小写搜索
-i, --installed-only - 已安装包搜索
-u, --uninstalled-only - 之搜索未安装包
-t, --type - 只搜索指定类型的包 .
--sort-by-name - 按名称排序(默认)
--sort-by-catalog – 安分类排序
其中通配符*和?也是支持的 .
举例说明:
# zypper se zypper
* Reading installed packages [100%] S | Repository | Type | Name | Version | Arch --+------------+---------+--------+----------+------- | factory | package | zypper | 0.8.23-3 | i586 i | factory | package | zypper | 0.8.23-2 | x86_64
一般语法:
patch-check, pchk
这条命令将告诉你你的系统是否有可用的重要补丁如果有和补丁的个数。
例如:
zypper pchk * Reading repository '10.3 - Main Repository (NON-OSS)' cache * Reading repository 'openSUSE-10.3-DVD 10.3' cache * Reading repository 'openSUSE-10.3-Updates' cache * Reading installed packages [100%] 9 patches needed (0 security patches)
一般语法:
patches, pch
列出所有可用补丁,包括不需要的可不适用的
例如:
# zypper pch * Reading repository '10.3 - Main Repository (NON-OSS)' cache * Reading repository 'openSUSE-10.3-DVD 10.3' cache * Reading repository 'openSUSE-10.3-Updates' cache * Reading installed packages [100%] Repository: | Name | Version | Category | Status ----------------------+--------------------+---------+-------------+--------------- openSUSE-10.3-Updates | amarok | 4492-0 | recommended | Not Applicable openSUSE-10.3-Updates | cpio | 4474-0 | recommended | Needed openSUSE-10.3-Updates | evince | 4465-0 | recommended | Needed openSUSE-10.3-Updates | fetchmsttfonts.sh | 4347-0 | optional | Not Needed openSUSE-10.3-Updates | fvwm2 | 4475-0 | recommended | Needed openSUSE-10.3-Updates | glibc | 4467-0 | recommended | Needed openSUSE-10.3-Updates | gnome-main-menu | 4491-0 | recommended | Needed openSUSE-10.3-Updates | gtk2 | 4466-0 | recommended | Needed openSUSE-10.3-Updates | jfbterm | 4460-0 | recommended | Not Applicable openSUSE-10.3-Updates | ksh | 4489-0 | recommended | Needed openSUSE-10.3-Updates | libiniparser-32bit | 4488-0 | optional | Not Applicable openSUSE-10.3-Updates | release-notes | 4464-0 | recommended | Needed openSUSE-10.3-Updates | wvdial | 4461-0 | recommended | Needed
一般语法:
patch-info [patchname] ... info -t patch [patchname] ...
显示关于指定补丁的全部信息
例如 :
testicek2:~ # zypper patch-info amarok * Reading repository '10.3 - Main Repository (NON-OSS)' cache * Reading repository 'openSUSE-10.3-DVD 10.3' cache * Reading repository 'openSUSE-10.3-Updates' cache * Reading installed packages [100%] Information for patch amarok: Name: amarok Version: 4492-0 Arch: noarch Status: Not Applicable Category: recommended Created On: Thu 04 Oct 2007 05:48:07 PM CEST Reboot Required: No Package Manager Restart Required: No Interactive: No Summary: Fixes to improve stability and playback with yauap Description: This patch includes fixes to increase the stability of Amarok when playing music and improves the collaboration with the GStreamer/Yauap engine. Provides: patch: amarok == 4492-0 Requires: atom: amarok-yauap == 1.4.7-37.2 atom: amarok-lang == 1.4.7-37.2 atom: amarok-xine == 1.4.7-37.2 atom: amarok == 1.4.7-37.2 atom: yauap == 0.2.1-21.2 atom: amarok-libvisual == 1.4.7-37.2
一般语法:
list-updates, lu
列出所有可用更新。默认情况下,这条命令将列出所有可用的安全和需要补丁。用 -t 选项来选择你希望用那种依赖解析。
它接受下列标志作为选项:
-t, --type <type> - 依赖解析的类型(默认)
-r, --repo <alias> - 只列出指定别名的软件仓库的更新
--best-effort – 做最好的努力来更新,有可能更新到比最新最大版本号更低一些。
例如:
testicek2:~ # zypper lu * Reading repository '10.3 - Main Repository (NON-OSS)' cache * Reading repository 'openSUSE-10.3-DVD 10.3' cache * Reading repository 'openSUSE-10.3-Updates' cache * Reading repository 'factory' cache * Reading installed packages [100%] Repository: | Name | Version | Category | Status ----------------------+-----------------+---------+-------------+------- openSUSE-10.3-Updates | cpio | 4474-0 | recommended | Needed openSUSE-10.3-Updates | evince | 4465-0 | recommended | Needed openSUSE-10.3-Updates | fvwm2 | 4475-0 | recommended | Needed openSUSE-10.3-Updates | glibc | 4467-0 | recommended | Needed openSUSE-10.3-Updates | gnome-main-menu | 4491-0 | recommended | Needed openSUSE-10.3-Updates | gtk2 | 4466-0 | recommended | Needed openSUSE-10.3-Updates | ksh | 4489-0 | recommended | Needed openSUSE-10.3-Updates | release-notes | 4464-0 | recommended | Needed openSUSE-10.3-Updates | wvdial | 4461-0 | recommended | Needed
一般语法:
update, up
更新系统。默认这条命令将应用所有需要的补丁。如果需要更新其他类型的依赖请使用 -t 选项 .
-t, --type - 依赖解析的类型(默认:包类型)
-r, --repo <alias> - 只列出指定别名的软件仓库的更新。
--skip-interactive - 跳过更新过程中的交互。
-l, --auto-agree-with-licenses - 自动同意第三方版权提示信息。
--best-effort - 做最好的努力来更新,有可能更新到比最新最大版本号更低一些。
--debug-solver - 为调试创建解析试例。
-R, --force-resolution – 强迫解析器找到一个解决方案,即使意味着删除所有为满足条件的包。
例如:
testicek2:~ # zypper update * Reading repository '10.3 - Main Repository (NON-OSS)' cache * Reading repository 'openSUSE-10.3-DVD 10.3' cache * Reading repository 'openSUSE-10.3-Updates' cache * Reading installed packages [100%] The following packages are going to be upgraded: cpio fvwm2 evince glibc-i18ndata glibc-locale nscd glibc release-notes wvdial gnome-main-menu gtk2 ksh The following NEW packages are going to be installed: evince-lang gnome-main-menu-lang The following NEW patches are going to be installed: gnome-main-menu release-notes evince gtk2 glibc ksh fvwm2 wvdial cpio Overall download size: 28.0 M. After the operation, additional 2.9 M will be used. Continue? [yes/no]: y Downloading package evince-lang-2.20.0-5.2.i586, 519.4 K (2.0 M unpacked) Downloading: evince-lang-2.20.0-5.2.i586.rpm * Downloading [100%] * Installing: evince-lang-2.20.0-5.2 [100%] Downloading package glibc-i18ndata-2.6.1-18.2.i586, 3.6 M (10.0 M unpacked) Downloading patch rpm: ./rpm/i586/glibc-i18ndata-2.6.1-18.2.i586.patch.rpm, 111.5 K Downloading: glibc-i18ndata-2.6.1-18.2.i586.patch.rpm * Downloading [100%] * Installing: glibc-i18ndata-2.6.1-18.2 [100%] Downloading package glibc-2.6.1-18.2.i686, 1.7 M (3.9 M unpacked) Downloading delta: ./rpm/i686/glibc-2.6.1-18_18.2.i686.delta.rpm, 89.2 K Downloading: glibc-2.6.1-18_18.2.i686.delta.rpm * Downloading [100%] Applying delta: /var/adm/mount/AP_0x00000001/rpm/i686/glibc-2.6.1-18_18.2.i686.delta.rpm * Installing: glibc-2.6.1-18.2 [100%] Downloading package release-notes-10.3.17-0.1.noarch, 113.6 K (608.5 K unpacked) Downloading delta: ./rpm/noarch/release-notes-10.3.16_10.3.17-2_0.1.noarch.delta.rpm, 42.8 K Downloading: release-notes-10.3.16_10.3.17-2_0.1.noarch.delta.rpm * Downloading [100%] Applying delta: /var/adm/mount/AP_0x00000001/rpm/noarch/release-notes-10.3.16_10.3.17-2_0.1.noarch.delta.rpm * Installing: release-notes-10.3.17-0.1 [100%]
一般语法:
info, if [packagename] ...
显示指定包的所有信息。
例如:
# zypper info suspend * Reading repository '10.3 - Main Repository (NON-OSS)' cache * Reading repository 'openSUSE-10.3-DVD 10.3' cache * Reading repository 'openSUSE-10.3-Updates' cache * Reading installed packages [100%] Information for package amarok: Repository: openSUSE-10.3-Updates Name: amarok Version: 1.4.7-37.2 Arch: i586 Installed: No Status: not installed Installed Size: 8.3 M Summary: Media Player for KDE Description: Amarok is a media player for all kinds of media. This includes MP3, Ogg Vorbis, audio CDs, podcasts and streams. Play lists can be stored in .m3u or .pls files. Authors: -------- Christian Muehlhaeuser <[email protected]> Mark Kretschmann <[email protected]> Max Howell <[email protected]> Stanislav Karchebny <[email protected]>
你也可以导出你的软件仓库的列表到一个文件,并且日后在导入到另外一台机器。
导出:
zypper repos --export /tmp/foo.repo
导入:
zypper addrepo --repo file:///tmp/foo.repo
zypper 支持很多的全局选项,这使得它很适合一些子的嗯处理的过程如脚本。 zypper 用户手册中也列出了很多不同退出码表示的意思,通过这些退出码,你可以在自动处理过程中检查状态。下面是一些详细信息。
这种模式下面, zypper 不会提示用户回到任何问题,而是都用默认设置来替代。使用这个选项可以保证 zypper 不会因为等待标准输入活这无限循环而挂着。
举个例子,为了不进行一些确认信息而自动更新系统,你可以输入
# zypper --non-interactive update
这条命令不需要用户确认更新过程中的任何信息,忽略所有可能需要额外确认交互补丁,并且自动响应所有提示。
如果使用了这个选项,在 gpg 检查失败的时候 zypper 将总是选择继续,比如一个软件仓库文件没有签名,或者有签名但是 gpg 检查失败等等。
这个特殊的选项是为了安装,删除和更新命令而准备的,通过使用这个选项,用户将声明同意将要安装的版权信息中的所有条款, zypper 将同意所有版权信息。如果已经阅读了所有版权信息,并且想要自动安装相同的包到很多太机器,这个选项将非常有用,
下面将是 zypper 需要用户交互以及在非交互模式下面的响应的完整列表。所有设计的附加选项都拥有比非交互模式更高的优先级,所以如果使用了,那么他们意味的响应将自动被使用,而不管是不是非交互模式。
在 no-gpg 检查被应用的地方,一条信息或者一条警告将被些到标准错误设备或者记录下日志。
prompt |
default answer |
with --no-gpgp-checks |
note |
---|---|---|---|
accept unsigned file? |
N |
Y |
|
import key into keyring? |
N |
N |
a new key can be imported in the interactive mode only |
accept unknown key? |
N |
Y |
|
trust key? |
N |
Y |
|
verification of signed file failed, continue? |
N |
Y |
|
no digest for a file, continue? |
N |
Y |
|
accept unknown digest? |
N |
Y |
prompt |
default answer |
other answer |
note |
---|---|---|---|
proceed with installation/removal/update? |
Y |
in addition, the --no-confirm option can be used with the install/remove/update commands even without the global --non-interactive |
|
confirm 3rd party license |
N |
Y if --auto-agree-with-licenses is used |
in addition, for zypper update, --skip-interactive option can be used to exclude interactive patches from to-be-installed list (a heritage of rug) |
problem while installing/removing a resolvable, Abort/Retry/Ignore? |
ABORT |
this is ugly and can be improved in future |
|
problem while downloading a package, Abort/Retry/Ignore? |
ABORT |
this is also ugly, can be enhanced somehow in the future |
|
dependency conflict. Prompt for solution number, (c)ancel, or (r)etry |
c |
||
media change request |
ABORT |