インストールコマンド(rpm,yum,dnf,apt,dpkg)

## パッケージ管理
Linuxのパッケージは大きく分けて以下の2つの方式が存在する。
・Debian形式
・RPM形式

パッケージを個別管理する場合 __rpm__ や __dpkg__ などが存在し、依存関係などが記述された、言うなれば「依存表」のようなものを持っている。それを元に __yum__ や __apt__ といったツールを使用して、依存関係を解決し、コマンドひとつでパッケージ郡をインストール出来るようになっている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609668/d0fc8d24-69a3-0019-b2d3-259189eae600.png)




## 依存関係
ソースコードからコンパイルしてアプリケーションを導入するときは「configure」「make」「make install」とコマンドを入力するのが一般的。

①パッケージ内の依存関係
⇒一つのパッケージを構成するファイル群同士の依存関係
②パッケージ同士の依存関係
⇒あるパッケージAが動くためには、あるパッケージBも必要といった関係

## rpm 
　「rpm」は、Red Hat系のLinuxディストリビューションで使われている“RPM（Red Hat Package Manager）パッケージ”を扱うことができるパッケージ管理コマンド

__`rpm コマンドオプション [その他オプション] [パッケージ名など]`__

```:インストール
# rpm -ivh <パッケージ名>
```
```:パッケージをアップグレード
# rpm -Uvh <パッケージ名>
```
```:パッケージを削除
# rpm -e <パッケージ名>
```
```:インストールされているrpmパッケージを表示
# rpm -qa <パッケージ名>

特定のパッケージを調べるには「grep」
# rpm -qa | grep パッケージ名
```
```:インストールされているパッケージの情報を表示
# rpm -qi <パッケージ名>
```
```:パッケージによりインストールされているファイル一覧が表示
# rpm -ql <パッケージ>
```
```:そのファイルがどのパッケージにふくまれるのかを表示
# rpm -qf <ファイル名>
```
```:パッケージの依存関係を表示
# rpm -qR <パッケージ名>
```
```:手元のパッケージの情報を表示
# rpm -qip <ローカルのパッケージ名>
```
```:パッケージによりインストールされるファイル一覧が表示
# rpm -qlp <パッケージ名>
```

### rpmのオプション

__●コマンドオプション__
-i (--install):パッケージをインストール
-U (--upgrade):パッケージをアップグレード(なければインストール)
-F (--freshen):パッケージをアップグレード
-e (--erase):パッケージをアンインストール(削除)
-q (--query):問い合わせ（パッケージ情報の表示と検索）
-V (--verify):パッケージを検査


__●共通のオプション__
-v:情報表示を増やす
-vv:「-v」指定時よりも詳細な情報を表示する（デバッグ用）
--quite:情報表示を減らす（エラーメッセージのみになる）

__●インストール／更新／削除時に使用できる共通オプション__
-h (--hash):インストール時の経過を「#」マーク（ハッシュマーク）で表示
	--test:実際のインストールなどは行わず、テストのみ行う
	--nodeps:パッケージの依存関係を検証しない

__●インストール／更新時に使用できるオプション__
--excludepath OLDPATH:パスの名前が「OLDPATH」で始まるファイルをインストールしない
--excludedocs:「man」なども含め、文書であるとマーク付されたファイルをインストールしない
--includedocs:文書ファイルをインストールする（デフォルト）
--ignoresize:インストール前に、ディスクの空き領域をチェックしない
--ignorearch:パッケージのアーキテクチャ（CPUなど）がインストール先と一致しなくてもインストールやアップグレードを行う
--ignoreos:パッケージのOSがインストール先と一致しなくてもインストールやアップグレードを行う
--nosignature:パッケージまたはへッダの署名を検査しない
--nosuggest:不明な依存性を解消するパッケージを提案しない
--noscriopts:ファイルの配置だけを行いスクリプトは実行しない
--force:「--replacepkgs」「--replacefiles」「--oldpackage」相当
--replacepkgs:指定したパッケージが既にインストールされていてもインストール
--replacefiles:他のパッケージによってインストールされたファイルを置き換えてしまう場合でもインストール
--oldpackage:インストール済みのパッケージよりもバージョンが古くても更新

__●情報問い合わせ関連（-q、-Vと一緒に使用するオプション）__
-a(--all):インストールされているパッケージを一覧表示
-i:パッケージの情報を表示
-R(--requires):依存しているファイル名を表示
--provides:パッケージが提供する機能（ライブラリなど）を表示
--changelog:パッケージの更新情報を表示
-l(--list):パッケージに含まれるファイルを表示
-c(--configfiles):設定ファイルのみを表示する（「-l」を指定したものと見なす）
-d(--docfiles):文書ファイルのみを表示する（「-l」を指定したものと見なす）
-f ファイル名:指定したファイルがどのパッケージからインストールされたのかを表示する（フィールドあるいはフルパスで指定）
-p:パッケージ名ではなく、RPMパッケージファイルを指定して問い合わせる


## yum 
役割としてはRPMパッケージを統合管理
RPM単体ではパッケージ情報、依存関係などの情報を持ち合わせているものの、それを統合的に管理運用するシステムがない

__`yum [オプション] コマンド [パッケージ名など]`__

```:リポジトリにアップデートがないかチェックをかける
# yum check-update
```
```:リポジトリにアップデート、チェックおよび実際にアップデート
# yum update
```
```:リポジトリからパッケージをインストール。なお依存関係にあるパッケージも自動的に解決
# yum install <パッケージ名>
```
```:リポジトリからパッケージを検索
# yum search <パッケージ名>
```
```:インストールされているパッケージを削除
# yum remove <パッケージ名>
```
```:インストールされているパッケージの情報を表示
# yum info <パッケージ名>
```
```:インストールされているパッケージ一覧
# yum list installed
```

### yumの主なコマンド

__●パッケージ操作関係__
install:パッケージをインストール
reinstall:パッケージを再インストール
downgrade:パッケージをダウングレード
erase:パッケージを削除
update:システムのパッケージを更新
update-minimal:「重要な更新」だけを更新
upgrade:不要になったパッケージを考慮しながらパッケージを更新
distribution-synchronization:最新の利用可能なバージョンへインストール済みパッケージを同期
localinstall:パッケージファイル（RPMファイル）を指定してインストール
localupdate:パッケージファイル（RPMファイル）を指定してアップデート

__●情報関係のコマンド__
info:パッケージもしくはパッケージグループの詳細を表示
list:パッケージグループの一覧を表示
deplist:パッケージの依存性の一覧を表示
groups:パッケージグループの情報を表示
search:指定した文字列でパッケージの詳細を検索
provides:ファイルなどを指定して、該当するファイルを提供するパッケージを検索
repolist:ソフトウェアリポジトリの構成を表示
version:ホストが利用できるリポジトリのバージョンを表示

__●メンテナンス関係のコマンド・その他__
check:rpmデータベースの問題を確認
check-update:更新に利用できるパッケージを確認
clean:キャッシュデータを削除
shell:対話型のシェル（yumシェル）を実行
updateinfo:リポジトリの更新情報を表示

### yumの主なオプション
-y(--assumeyes):全ての問い合わせに「yes」で応答したものとして実行
--assumeno:全ての問い合わせに「no」で応答したものとして実行
-t(--tolerant):エラーを黙認
-R(--randomwait) 分:最大の待ち時間を指定
-c 構成ファイル:構成ファイルを指定
--installroot=場所:インストール先を指定
--downloaddir=場所:ダウンロード先を指定
--downloadonly:ダウンロードだけを行う
-C(--cacheonly):パッケージの情報をダウンロードせずキャッシュだけを使用
-x(--exclude) パッケージ:除外するパッケージを指定する（ワイルドカードも使用可能）
--color=指定:出力メッセージを色付きにするかどうかを「always」「auto」「never」のいずれかで指定
-q(--quiet):実行時にメッセージを出力しない
-v(--verbose):詳しいメッセージを出力


## dnf
「dnf」は、Red Hat系のLinuxディストリビューションで使われている“RPMパッケージ”を扱うためのパッケージ管理コマンド

__`dnf [オプション] コマンド [パッケージ名など]`__

```:指定したパッケージを更新
# dnf upgrade <パッケージ名>
```
```:「bash」パッケージを更新
# dnf upgrade bash
```
```:名前が「git」から始まるパッケージを更新
# dnf upgrade git*
```
```:指定したグループのパッケージを更新
# dnf group upgrade  <グループ名>
```
```:システムにインストールされているパッケージを全て更新
# dnf upgrade
```

### dnfの主なコマンド
__●パッケージ操作関係__
install:パッケージをインストール（既にインストールされていた場合は更新する）
reinstall:パッケージを再インストール
downgrade:パッケージをダウングレード
erase:パッケージを削除
remove:パッケージを依存関係のあるパッケージとともに削除
autoremove:依存関係のためにインストールされていた不要なパッケージを削除
update:システムのパッケージを更新
upgrade-minimal:不具合の修正や機能追加、セキュリティ対応など「重要な更新」だけを更新
distro-sync:最新の利用可能なバージョンへインストール済みパッケージを同期
mark install:指定したパッケージを手動でインストールしたものとする（autoremoveの対象外となることが利点、「dnf mark remove パッケージ名」でマークを削除）

__●情報関係のコマンド__
info:パッケージもしくはパッケージグループの詳細を表示
list:パッケージグループの一覧を表示
deplist:パッケージの依存性の一覧を表示
group:パッケージグループの情報を表示
search:指定した文字列でパッケージの詳細を検索
provides:ファイルなどを指定して、該当するファイルを提供するパッケージを検索
repolist:ソフトウェアリポジトリの構成を表示

__●メンテナンス関係／その他__
makecache:パッケージリストを格納したデータベース（リポメタデータ）をダウンロードし、キャッシュを作成／更新
check:ローカルのパッケージデータベースに問題がないかどうか確認
check-update:更新に利用できるパッケージを確認
clean:キャッシュデータを削除
shell:対話型のシェル（DNFシェル）を実行
updateinfo:リポジトリの更新情報を表示
history:パッケージのインストールや削除の履歴を表示

### dnfの主なオプション

__●dnfの主なオプション__
-y(--assumeyes):全ての問い合わせに「yes」で応答したものとして実行
--assumeno:全ての問い合わせに「no」で応答したものとして実行
-C(--cacheonly):パッケージの情報を全くダウンロードせずに、キャッシュだけを使用
	--refresh:コマンド実行前にパッケージ情報のキャッシュを強制的に更新
-R(--randomwait) 分:最大の待ち時間を指定
-c 構成ファイル:構成ファイルを指定
--enablerepo リポジトリID:指定したリポジトリを有効にする
--disablerepo リポジトリID:指定したリポジトリを無効にする
--repo リポジトリID:指定したリポジトリだけを有効にする（複数ある場合は「--repo」「--repoid」を複数回使用する）
--repoid リポジトリID:--repoと同じ
--nodocs:ドキュメントをインストールしない
--allowerasing:依存関係を解決するためにインストール済みパッケージの削除を許可
--installroot=場所:インストール先を指定
--downloaddir=場所:ダウンロード先を指定
--downloadonly:ダウンロードだけを行う
-x(--exclude) パッケージ:除外するパッケージを指定する（ワイルドカードも使用可能）
--showduplicates:dnfのサブコマンド「info」「search」で重複しているものも表示
--color=指定:出力メッセージを色付きにするかどうかを「always」「auto」「never」のいずれかで指定
-q(--quiet):実行時にメッセージを出力しない
-v(--verbose):詳しいメッセージを出力


## apt 
aptコマンドは、Debian系のディストリビューションに使われているパッケージ管理用のコマンド

__`apt [オプション] コマンド [パッケージ名やコマンド用オプションなど]`__

### aptの主なコマンド
__●パッケージの検索と操作__
list:パッケージ一覧を表示
search キーワード:パッケージの説明文からキーワードを検索して該当するパッケージを表示
show:指定したパッケージの情報を表示
install:指定したパッケージをインストール
remove:指定したパッケージを削除

__●設定とシステムメンテナンス__
edit-sources:sources.listファイル（パッケージのダウンロード元などを指定するファイル）を編集
update:パッケージのインデックスファイルを更新
upgrade:インストール済みのパッケージをまとめて更新
full-upgrade:upgradeと同様だが、更新に伴って使用できなくなるパッケージを削除するなどの調整も行う

### aptの主なオプション
-c=設定ファイル:使用する設定ファイルを指定（デフォルトの設定ファイルの後に読み込まれる）
-o=設定オプション:設定オプションを指定

## dpkgコマンド
「dpkg」とはdebianのパッケージである「deb」ファイルを取り扱うコマンド

__`dpkg [オプション] アクション`__

```:パッケージをインストール
# dpkg -i <アーカイブ名>
```
```:パッケージを削除
# dpkg -r <パッケージ名>
```
```:パッケージを設定ファイル含め完全に削除
# dpkg -P <パッケージ名>
```
```:パターンにマッチするパッケージを一覧表示、なにも指定しないとインストールされているパッケージ一覧表示
# dpkg -l もしくはパターン
```
### dpkgの主なアクション
-i (-install):パッケージをインストール
-r (--remove):設定ファイルを残してパッケージをアンインストール
-R (--purge):ディレクトリ内を再起的に処理


## インストールコマンドの違い
「rpmとはパッケージ個々」であり「yumはrpmを管理するマネージャ」
ネット上から拾ってきたパッケージに対して「CentOSではrpm」で「Ubuntuではdpkg」
「dnfはCentOS 7が採用しているyumの後継となるコマンド」


__rpm（個々のパッケージを扱う）__
・管理はパッケージ個々単位であり依存関係は自動解決されない
◎パッケージ単位での管理となるので「rpm」など「.rpm」ファイルを指定する。
・個々の細かいファイル情報も参照できる
◎リポジトリに依存しない
・個々で管理するときはrpmコマンドを使用する
・依存関係を自動解決させたいのなら、yumリポジトリに投入する必要がある

__yum（リポジトリから依存関係を含めて管理する）__
◎基本的にリポジトリの中のrpmを統合管理しており依存関係を自動解決
・インストール時は基本的に「yum search」でヒットする名前を指定すればよい
・リポジトリ上に存在しているインストールしていないパッケージの検索や情報閲覧が可能
・ディストリビューション内のパッケージのアップデートもyumを使用する
・Python 2とPython 3の両対応ではなくPython 2でしか動かない

__dnf__
・yumと同じサブコマンド、オプションを使用可能
・yumの後継となるパッケージ管理ツール
・「/etc/yum.repos.d」ディレクトリを使用

## 用語集
__・リポジトリ__：パッケージの提供元
__・パッケージ__：関連する様々な要素を一つにまとめたもの