dnf/yum で依存で入ったパッケージを autoremove で削除されないようにする

dnf でパッケージを削除するとき、そのパッケージが依存するパッケージも削除されようとします。

```sh
sudo dnf remove docker-ce
# ======================================================================================
#  Package                      Arch    Version                  Repository        Size 
# ======================================================================================
# Removing:                                                                             
#  docker-ce                    x86_64  3:18.09.2-3.fc29         @docker-ce-stable 81 M 
# Removing unused dependencies:                                                         
#  container-selinux            noarch  2:2.81-2.git484806a.fc29 @updates          38 k 
#  containerd.io                x86_64  1.2.2-3.3.fc29           @docker-ce-stable 76 M 
#  docker-ce-cli                x86_64  1:18.09.2-3.fc29         @docker-ce-stable 66 M 
#                                                                                       
# Transaction Summary                                                                   
# ======================================================================================
```

これは container-selinux containerd.io docker-ce-cli が docker-ce からの依存で入ったものであって、明示的にインストールしたものではないためです。

ですが docker-ce-cli は残したかったとします（docker-ce をインストールしちゃったけど実は docker コマンドが使いたいだけで Engine はいらないケース）。

docker-ce-cli を明示的にインストールしておけば大丈夫かと思いきや。

```sh
sudo dnf install docker-ce-cli
# Last metadata expiration check: 0:06:24 ago on Wed 20 Feb 2019 12:55:53 PM DST.
# Package docker-ce-cli-1:18.09.2-3.fc29.x86_64 is already installed.
# Dependencies resolved.
# Nothing to do.
# Complete!
```
インストール済だと効果ありませんでした。

```sh
sudo dnf remove docker-ce
# 変わらず
```

`--noautoremove` を付ければ依存してるパッケージは消えませんが、

```sh
sudo dnf remove --noautoremove docker-ce
# =======================================================================
#  Package             Arch    Version           Repository         Size 
# =======================================================================
# Removing:                                                              
#  docker-ce           x86_64  3:18.09.2-3.fc29  @docker-ce-stable  81 M 
#                                                                        
# Transaction Summary                                                    
# =======================================================================
```

逆に消えてほしいものが消えないし、後で `sudo dnf autoremove` するとやっぱ消えます。

```sh
sudo dnf autoremove
# ===============================================================================
#  Package             Arch    Version                   Repository         Size 
# ===============================================================================
# Removing:                                                                      
#  container-selinux   noarch  2:2.81-2.git484806a.fc29  @updates           38 k 
#  containerd.io       x86_64  1.2.2-3.3.fc29            @docker-ce-stable  76 M 
#  docker-ce-cli       x86_64  1:18.09.2-3.fc29          @docker-ce-stable  66 M 
#                                                                                
# Transaction Summary                                                            
# ===============================================================================
```

## dnf mark install <package>

`dnf mark install docker-ce-cli` で、依存ではなく明示的にインストールされたことになるので autoremove で消えなくなります。

```sh
sudo dnf mark install docker-ce-cli
# docker-ce-cli-1:18.09.2-3.fc29.x86_64 marked as user installed.

sudo dnf remove docker-ce
# =========================================================================================
#  Package                       Arch    Version                   Repository         Size 
# =========================================================================================
# Removing:                                                                                
#  docker-ce                     x86_64  3:18.09.2-3.fc29          @docker-ce-stable  81 M 
# Removing unused dependencies:                                                            
#  container-selinux             noarch  2:2.81-2.git484806a.fc29  @updates           38 k 
#  containerd.io                 x86_64  1.2.2-3.3.fc29            @docker-ce-stable  76 M 
#                                                                                          
# Transaction Summary                                                                      
# =========================================================================================
```

## yumdb set reason user <package>

yum にも autoremove あるので似たようなことになります。

```sh
sudo yum autoremove docker-ce
# =============================================================================
#  Package                    Arch    Version          Repository         Size 
# =============================================================================
# Removing:                                                                    
#  docker-ce                  x86_64  3:18.09.2-3.el7  @docker-ce-stable  81 M 
# Removing for dependencies:                                                   
#  container-selinux          noarch  2:2.74-1.el7     @extras            37 k 
#  containerd.io              x86_64  1.2.2-3.3.el7    @docker-ce-stable  88 M 
#  docker-ce-cli              x86_64  1:18.09.2-3.el7  @docker-ce-stable  66 M 
#                                                                              
# Transaction Summary                                                          
# =============================================================================
```

yum には mark サブコマンドはありません。

```sh
sudo yum mark install docker-ce-cli
# No such command: mark. Please use /bin/yum --help
```

代わりに `yumdb set reason user docker-ce-cli` とすれば大丈夫です。

```sh
sudo yumdb set reason user docker-ce-cli
# 1:docker-ce-cli-18.09.2-3.el7.x86_64
#      reason = user

sudo yum autoremove docker-ce
# =============================================================================
#  Package                    Arch    Version          Repository         Size 
# =============================================================================
# Removing:                                                                    
#  docker-ce                  x86_64  3:18.09.2-3.el7  @docker-ce-stable  81 M 
# Removing for dependencies:                                                   
#  container-selinux          noarch  2:2.74-1.el7     @extras            37 k 
#  containerd.io              x86_64  1.2.2-3.3.el7    @docker-ce-stable  88 M 
#                                                                              
# Transaction Summary                                                          
# =============================================================================
```