LPIC対策 ~RedHat系のパッケージ管理(rpm, yum)~

## はじめに
- LPIC試験対策のためにパッケージ管理を理解したいと思った。
- RedHat系はrpm,yumパッケージという二種類のパッケージ管理コマンドがある。
 - Macはbrewコマンド、Debian系のOS（Ubuntu, Kali Linuxなど）はaptコマンド、、、他のOSだと１OSにつき１パッケージ管理コマンドがデフォルトで用意されている（*Macはちょっと異なる。。。）
 - なぜ、、RedHat系だけ二種類のコマンドがデフォルトで用意されているのだろうか？？？

## ふたつの共通点
- Red Hat(CentOS)のパッケージマネージャ。
- パッケージのインストール、アンインストール更新が可能。

## RPMパッケージマネージャ
##### 由来
RPM(<b>R</b>edHat <b>Package</b> <b>M</b>anager)

#### 特徴
- 依存関係を管理してくれる ≒ 依存関係を<font color="purple">指定</font>してくれる
* 解決はしてくれない。ただ教えてくれるだけ。

### rpmコマンドの使い方

#####　パッケージのインストール

```:shell
rpm -ivh package_filename
```
<details>
```
例：　rpm -ivh firefox-78.4.1-1.el7.centos.x86_64.rpm // rpm 
    yum install firebox                             // yum
```
</details>

<table>
<thead>
<tr>
<th>オプション</th>
<th>長いオプション</th>
<th>意味</th>
</tr>
<thead>
<tbody>
<tr>
<td>-i</td>
<td>--install</td>
<td>パッケージをインストール</td>
</tr>
<tr>
<td>-v</td>
<td></td>
<td>情報表示を増やす</td>
</tr>
<tr>
<td>-h</td>
<td>--hash  (#)</td>
<td>インストール時の経過を<b>#（ハッシューマーク）</b>で表示する</td>
</tr>
</tbody>
</table>

#####　パッケージのアップデート
```:shell
rpm -Uvh package_filename
```

<table>
<thead>
<tr>
<th>オプション</th>
<th>名称</th>
<th>意味</th>
</tr>
<thead>
<tbody>
<tr>
<td>-U</td>
<td>--upgrade</td>
<td>パッケージをアップグレードする(なければインストール)</td>
</tr>
</tbody>
</table>

##### パッケージのアンインストール
```:shell
rpm -evh package_name
```
<table>
<thead>
<tr>
<th>オプション</th>
<th>長いオプション</th>
<th>意味</th>
</tr>
<thead>
<tbody>
<tr>
<td>-e</td>
<td>--erase</td>
<td>パッケージをアンインストールする</td>
</tr>
</table>

###### その他オプション

<table>
<thead>
<tr>
<th>オプション</th>
<th>長いオプション</th>
<th>意味</th>
</tr>
<thead>
<tbody>

<td>-ql</td>
<td>--query --list</td>
<td>パッケージに含まれるファイルを表示する</td>
</tr>
<tr>
<td>-qa</td>
<td>--list -all</td>
<td>インストール済みのすべてのrpmパッケージの一覧を表示する</td>
</tr>
</table>

## YUMパッケージマネージャ
##### 由来
<b>Y</b>ellowdog <b>U</b>pdater <b>M</b>odified(イエロードッグアップデーターの修正版)

=> 元々はYellow Dog Linuxのパッケージ管理システムであるYUP(Yellowdog Updater)というもののが前身にあった。YUPをRedHat *Version* にしたのが`Yum`!!!
<details><summary>このようなことから</summary>
<font color="red">Yu<font color="red">M</font><font color="blue">odified(修正)</font></font>と呼ばれている。
</details>

##### 特徴
- 自動で依存関係を<font color="orange"><b>解決</b></font>してくれる。

##### yumコマンドの使い方
##### 更新の確認
- 使用しているシステムに利用可能な更新があるインストール済みのパッケージを確認する。
<details>
例： Appstoreを開いてアップデート可能なアプリを確認する行為。(*この時点ではアップデートボタンはクリックしていない。)
![スクリーンショット 2021-06-03 20.12.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541740/a3296c3b-4204-669c-fad9-c9b6d81d9cb8.png)
</details>
    
```:shell
yum check-update
``` 

##### パッケージのインストール

```:shell
yum install package_name
```
##### パッケージの更新
- 一度に更新するパッケージ数を１つ、複数、または全てのパッケージから選択できる。
<ol>
<li>単一パッケージの更新</li>
  
 <details>
![スクリーンショット 2021-06-03 20.12.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541740/a3296c3b-4204-669c-fad9-c9b6d81d9cb8.png)
例： 画像でいうとNumbersアプリのアップデートボタンをクリックする。 == `yum update Numbers`
</details>

 ```:shell
 yum update package_name
 ```

<li>2. 全てのパッケージとそれらの依存関係の更新</li>

- パッケージとその依存関係をすべて更新するには、引数なし。

<details>
![スクリーンショット 2021-06-03 20.12.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541740/a3296c3b-4204-669c-fad9-c9b6d81d9cb8.png)
例： 右上の<b>すべてをアップデート</b>ボタンをクリックする。
</details>

```:shell
yum update
```

<li>3. パッケージの削除</li>

- パッケージのインストールと同様に、yum を使用するとパッケージのアンインストールができます。

```
yum remove package_name
```


### 依存関係とは。。。
- ある作成したプログラムを動作させる際に、動作させるために必要な別のプログラムがある場合、作成したプログラムは、必要なプログラムに依存しているまたは依存関係にあると言います。


```:python(簡単な依存関係)
1. a = 1+2
2. b = a +3 
```
マルチスレッド（同時実行）が不可能 => 依存関係がある


### yumはもう古い？
- yumコマンドは廃止されるらしい。。。
=> 後継ツールは`dnfコマンド！！`

> yum はpython2系なのでいつまでも使い続けられない。。。（現在はpython3系が主流）

<u>dnfはpython3系で動くためdnfコマンドが後継ツールになった!!!</u>

<h3><font color="red">dnfコマンドの使い方はyumコマンドと同じなので使いやすい・覚えやすい！！！</font></h3>


### 補足
- <a href="https://debimate.jp/2019/02/23/linux-command-option%E3%81%AE%E6%85%A3%E7%BF%92%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AAoption%E4%B8%80%E8%A6%A7/" target="blank">Linux Command Optionの慣習</a>