ZYpp

**ZYpp**（または**Libzypp**、ジップ）はopenSUSEやSUSE Linux Enterprise用のYaST、ZypperおよびPackageKit実装などのLinuxアプリケーションの動力源となるパッケージ管理システムエンジンである。ZYppは、ZYppよりも基礎的なパッケージ管理システムと違い、パッケージ依存を計算して充足可能性の解決策を提供する。ZYppはノベルがスポンサーとなっているフリーでオープンソースなソフトウェアプロジェクトであり、GNU General Public License v2以降の条項に基づいてライセンスされている。ZYppはその大部分がC++により実装されている。

**Zypper**（ジッパー）はローカルメディアや（ネットワーク接続された）リモートメディアにより提供されるソフトウェアパッケージのインストール、削除、更新および検索を行うための、ZYppのネイティブコマンドラインインタフェースである。Zypperと等価なグラフィカルツールはYaSTパッケージ管理モジュールである。openSUSEではバージョン10.2 beta1からZypperを利用している。openSUSE 11.1でZypperはバージョン1.0となった。2009年6月2日、Ark Linuxは依存性解決についてのレビューを完了し、古いを置き換えるためZYppとそのツールを選択したことをアナウンスし、Ark Linuxが最初にZypperを採用したLinuxディストリビューションとなった。ZypperはMeeGo、Sailfish OS、およびTizenといったモバイルLinuxディストリビューションの一部でもある。

## 歴史
### 目的
ノベルは2003年にXimianとSuSE GmbHとの連続買収に続き、これまでノベルで使用されていた2つのパッケージ管理システムである、YaSTパッケージマネージャととを接近させるための最善の手段として、これら2つの統合を決定した。2005年以前における既存のオープンソースツールとその成熟度を見たところ、どのツールも要求を満たしていないだけではなく、XimianやSUSEが開発した既存のLinux管理インフラソフトウェアでスムーズに動作させることが不可能であった。このため、既存のツールから最善のアイデアを得て新しい実装に取り組むことが決定された。この結果として生み出されたLibzyppを、SUSE Linuxや、Novell ZENworks管理スイートにおけるLinux管理コンポーネントのソフトウェア管理エンジンとするよう計画された。

### 初期
Libzyppの解決策は、インストールされたシステムのパッケージを更新するために書かれたRed Carpetの解決策からの移植であった。完全なインストールプロセスのためにRed Carpetの解決策を使用すると限界に達してしまうだけではなく、弱い依存関係やパッチサポートなどの拡張機能をその解決策に追加してしまうと、壊れやすく予測不可能となってしまった。このZYppの解決策における最初のバージョンは満足な処理を行ったが、2006年5月に登場したopenSUSE 10.1リリースではZMDデーモンを結合した企業向けエンタープライズ製品においてシステムパッケージが期待通りに動作しなかった。2006年12月のopenSUSE 10.2リリースでは再び訪れたZYpp v2を使うことで、それ以前のリリースの欠陥をいくつか修正した。その後ZMDは10.3リリースから削除され、企業向けエンタープライズ製品用のみ残された。ZYpp v3は同等な他の既存のパッケージマネージャと比べても優れた機能をopenSUSEに提供したが、速度性能を大きく制限してしまう実装のため、いくつかの欠点に悩まされた。

### SAT解決策の統合
Libzyppが改善を必要とした部分は、依存解決策の速度であった。libsolvは修正BSDライセンスの下で書かれてリリースされている。

Optimal Package Install/Uninstall Manager (OPIUM) やMANCOOSIなどのプロジェクトは、SAT解決策で依存関係の問題を解決しようとしていた。Advanced Packaging Tool (APT) などの伝統的な解決策では、時に容認できない欠陥が明らかになる。ZYppスタックにSATアルゴリズムと統合することが決定した。使われる解決アルゴリズムは有名なMinisatの解決策を基本にしたものであった。openSUSE 11.0で見えたSAT解決の実装は2つのメジャーではあるが独立したブロックを基本としている:

* パッケージや依存情報を保存して取り出すためにデータ辞書アプローチを使う。新しいsolv形式が作成され、これはリポジトリを文字列辞書、関係辞書、そして全てのパッケージ依存物として貯蔵する。複数のsolvリポジトリを読み込んでマージするための所要時間はわずか数ミリ秒である。
* パッケージ依存の算出に充足可能性を利用する。充足可能性問題はよく研究された問題であり利用可能な多くの模範解決策がある。パッケージ解決策の複雑さは、SAT解決策を利用する他の領域よりもはるかに単純であるため、模範パッケージ解決策はとても高速である。さらにそれは複雑なアルゴリズムを必要としないため、問題解決が不可能な理由の証明を導いて理解可能な提案を提供できる。

数ヶ月の作業の後、SAT解決策と統合されたこの4代目ZYppバージョンのベンチマーク結果は期待以上のものであり、YaSTやZypperは他のRPMベースのパッケージマネージャよりもスピードやサイズが勝った状態で動作する。

## 使用方法
Zypperの使用方法を以下に記す。なお、括弧内はコマンドの省略形となっている。
### リポジトリ管理
; リポジトリの一覧を表示

```bash
zypper repos（lr）
```


; リポジトリの更新

```bash
zypper refresh（ref）
```


### ソフトウエア管理
; パッケージのインストール

```bash
zypper install（in） パッケージ名
```


; 特定のパッケージの削除

```bash
zypper remove（rm） パッケージ名
```


; 不要になったパッケージを自動的に削除

```bash
zypper remove（rm） --clean-deps パッケージ名
```


### 更新管理
パッケージを個別に更新する方法と、修正（パッチ）によって更新する方法が存在する。
; パッケージの更新

```bash
zypper update（up）
```


; 利用可能な更新の一覧を表示

```bash
zypper list-updates（lu）
```


; 修正をインストール

```bash
zypper patch
```


; 適用可能な修正の一覧を表示

```bash
zypper list-patches（lp）
```


### 問い合わせ
; パッケージの検索

```bash
zypper search（se） パッケージ名
```


; パッケージの詳細情報を表示

```bash
zypper info（if） パッケージ名
```


### イースター・エッグ

```bash
zypper moo
```


## 関連項目

* openSUSE
* YaST
* Dandified Yum (DNF) - ZYppのために開発されたlibsolvを依存性解決に使用

## 脚注

## 外部リンク
*  
* Sneak peeks at openSUSE new package management
* Distrowatch.com