WSLでCentOS7をインストールする

VPSを含めたZabbix監視環境を作成するためCentOS7の環境が必要になり仮想マシンを作成するより、
WSLを使用して構築したほうがいいのでは、と思いやってみた。

#要るもの
Windows10 PC　(homeでもproでもどっちでも)
#初期セットアップ
最初に**コントロールパネル〉プログラムと機能〉Windows の機能の有効化または無効化** で**Linux用Windows サブシステム**を有効化します。
追加完了後PCを再起動します。

もし、上の作業を実行しているのにも関わらずCentOS7をインストール後起動しない場合、
管理者としてPowerShellで下記のコマンドを実行します。

```
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```
実行後、pcを再起動します。
#CentOS7のファイルのインストール

CentOS7のファイルを下記のGitHubリポジトリよりダウンロードします。
[yuk7/CentWSL](https://github.com/yuk7/CentWSL)

ダウンロード後ファイルを解凍し任意のディレクトリに設置しますが、個人的にstoreからインストールするディストリビューションと同じく
C:\Users\username\AppData\Local\Packagesのディレクトリに設置したほうがいいかもしれません。
上のディレクトリに設置する場合のバッチファイルを作成してみました。
何台も設定する人向けですが使ってみてください。
[CentOS7Setup.bat](https://www.system-v.cf/wsl/CentOS7setup.bat)
<details><summary>batファイルの使い方</summary>
ダウンロード後、解凍したCentOS7のファイルに保存して実行してください。
実行後、"C:\Users\username\AppData\Local\Packages"ディレクトリにファイルの転送と転送後CentOS7.exeが実行され
CentOS7.exeがインストールされます。
</details>

ファイルを任意ディレクトリに設置したら、CentOS7.exeを実行してインストールを開始します。

```
Installing... 
Installation Complete! 
Press any key to continue... 
```

**Press any key to continue... **と表示されましたらインストール完了です。
CentOS7.exeのショートカットをデスクトップに作成したほうが楽です
なお、バッチファイルを使用した場合もしくは"C:\Users\username\AppData\Local\Packages"に設置した場合は
下記のパスでショートカットを作成できます。

```
%userprofile%\AppData\Local\Packages\CentOS7\CentOS7.exe
```

ショートカット作成後、正しく実行できれば成功です。
実行できずにエラーで"Error:0x80040154"が発生した場合は初期セットアップで記載しているコマンドを実行してください。

また、コマンドプロンプト側で以下のコマンドでインストールされているディストリビューションを確認できます。

```
C:\Users\username>wsl -l
Linux 用 Windows サブシステム ディストリビューション:
CentOS7 (既定)
```

#インストール後の設定

**rootパスワード**
インストール後はrootのパスワードは設定されていないポイです。
rootのパスワードを以下のように設定します。

```
[root@DESKTOP ~]# passwd root
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it does not contain enough DIFFERENT characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@DESKTOP ~]#

```

通常のCentOS7と同じく脆弱なパスワードを入力すると警告が出ます。
設定するパスワードを入力して完了です。

**SoftwareCollections.org リポジトリ設定**

OS標準パッケージとは別に、RHELおよびCentOS向けに新しいバージョンのパッケージを使用できるようにする
Software Collectionsを使えるようにします。

```
yum install centos-release-scl-rh -y
```

#SSHServerについて#
別端末よりssh接続してWSL環境を操作したい場合があると思います。
ストアから入手できるUbuntuの場合でもCentOS7でも、インストール後ではWSL環境へssh接続を使用することができません。
今回はCentOS7でssh接続してWSL環境を操作する方法を記載します。

**openssh-serverのインストール**
最初の段階でopenssh-serverがインストールされていないためインストールしていきます。

```
[root@DESKTOP ~]# yum install openssh-server -y
```

インストール完了後、sshd_configの設定でパスワード認証を有効にします。

```
[root@DESKTOP ~]# vi /etc/ssh/sshd_config
#To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes
```

サービスを再開させますが以下のエラーが発生して起動に失敗すると思われます。

```
[root@DESKTOP-8QR1L4E ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
Failed to get D-Bus connection: Operation not permitted
[root@DESKTOP-8QR1L4E ~]#
```

この場合は以下のようにコマンドを実行して対策します。
なお実行する前に/usr/bin/systemctlを別名でバックアップします。

```
[root@DESKTOP ~]# mv /usr/bin/systemctl /usr/bin/systemctl.old
[root@DESKTOP ~]# curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > /usr/bin/systemctl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  196k  100  196k    0     0   182k      0  0:00:01  0:00:01 --:--:--  182k
[root@DESKTOP ~]# chmod +x /usr/bin/systemctl
[root@DESKTOP ~]#
```

次はRSAキーを作成

```
[root@DESKTOP ~]# ssh-keygen -A
ssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519
[root@DESKTOP ~]#
```

上のコマンドを実行したら再度service sshd restartを実行します。

```
[root@DESKTOP-8QR1L4E ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
[root@DESKTOP-8QR1L4E ~]# systemctl enable sshd
[root@DESKTOP-8QR1L4E ~]#
```
上のコマンドを実行すると画像のようにWindowsセキュリティ警告が出てきたら、アクセスを許可するを押して完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323146/6947e25a-a531-dc79-ff71-f1839f6d2764.png)

あとはteratermでlocalhostかWindows機のIPアドレスを指定して接続できるか確認して完了です。

#参考にしたサイト
敬略称
[torutkのブログ:WSLでCentOSが利用できたかも？（CentOS 7）](https://torutk.hatenablog.jp/entry/2019/11/24/110818)
[GEEkFEED:wsl2上で無料でCentOS8を動かそう](https://www.geekfeed.co.jp/geekblog/install_CentOS8_on_wsl2_for_free)
[@ezmscrap:Windows Subsystem for Linuxにssh接続する](https://qiita.com/ezmscrap/items/30eaf9531e240c992cf1)
[@mzmiyabi:WSL（CentOS7）でsystemctlを実行するとFailed to get D-Bus connection: Operation not permittedになる](https://qiita.com/mzmiyabi/items/fec2c211e0325a5460a8)
[Windows 10のコマンドプロンプトからWSL上のLinuxコマンドを呼び出す（バージョン1803対応版）](https://www.atmarkit.co.jp/ait/articles/1805/24/news022.html)
[Windows Subsystem for Linux に関するドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/about)

#おまけ

**手動インストールした環境のアンインストール方法**

以下のコマンドを実行して設置したファイルを削除します。

```
wsl --unregister CentOS7
```