Windows10でCentOS7を入れるまでに試行錯誤した話

この記事は [ニフティグループ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/nifty) 23日目の記事です。
昨日は @hamakou108 さんの [dotfiles のリポジトリ管理で悲劇を防ぐために](https://qiita.com/shotaws/items/0519d3eb2c768456cfee) でした。
私も以前業務で、シンボリックリンクを辿ってリンク先を調べる時に詰まってしまった経験がありますが、
管理の面でも注意すべき点があるということで、とても参考になりました！

# はじめに
皆さんは普段どのような開発環境を使われているでしょうか？
私は現在業務ではMACのローカル環境でGo言語の開発を行っており、Dockerで整備された環境でコーディングを行っています。そこで、普段の環境はどのような環境で動いているのを理解したいと思い、今回はwindowsにて環境を１から構築してみました。


# やりたいこと
- Dockerの内部で何を代わりやっているのかを深く理解したい
- 自宅にあるWindows機でもGo言語の開発をするため同様の開発環境を揃えたい


# 前提
今回は、Windows 10からVirtualBox上でCentOS7を入れることを目標としています。
また、今後Goを開発する上で便利なターミナル上からsshログインもできるようにします。

環境構築についてはこちらを参考にさせていただきました。
[Visual Studio Codeで仮想マシン(VirtualBox)内のファイルを編集する]
(https://qiita.com/100/items/80a899fbaeb1e82b3f67)


#Windows 10にCentOS7を導入する
## ①VirtualBoxのインストール
[Downloads – Oracle VM VirtualBox]
(https://www.virtualbox.org/wiki/Downloads)からVirtual Box最新版をダウンロードする。

## ②CentOSのインストール
[CentOSのダウンロードページ]
(http://ftp.riken.jp/Linux/centos/7/isos/x86_64/)から、インストールディスクイメージをダウンロードする。

## ③VirtualBoxで仮想マシンを作成する
・新規をクリック
・名前やメモリーを決めて作成(基本デフォルトでOK)
・設定>ストレージから、②でダウンロードした.isoファイルをコントローラーに入れる。

## ④CentOSのインストール
・作成した仮想マシンを選択し、起動を押すとinstallが始まる。
・installが完了したら、言語設定画面がでるので「日本語」を選択する。
・「インストール先」からローカルの標準ディスクでディスクを選択する。
・「ネットワークとホスト名」からイーサーネットをオンにする。
・「インストール開始」が有効になるはずなので、インストールしている間に、「Rootのパスワード」と「ユーザーの作成」をやってしまう。
・インストールが完了したら「再起動」をクリック。

コンソール上でログインを求めらるのでログインして、CentOSの導入は完成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541383/fde7d1e5-ff47-bf5f-40be-50aa2a11326a.png)



#VirtualBox + CentOS 7にPoderosaを使ってsshでログインする
これだけでは不便なので、Poderosaを使ってsshログインできるようにします。

# ①ポートフォワーディングの設定
・VirtualBox内で、CentOSの設定のネットワークタブから、ポートフォワーディングを選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541383/f1f0f814-319b-a2be-3281-c7403800a43b.png)

- ホストポート：2222
- ゲストポート：22
- ホストIP：WindowsのIP
- ゲストIP：CentOSのIP

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541383/991b168a-cea0-fa22-6efe-7c4f425f60ba.png)

ここでPoderosa側で接続を試みたところ、拒否されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541383/a5c1a5bc-d5cb-d43e-a403-215ab1984afc.png)

調べると、
・NAT
・ホストオンリーアダプター
の２つを設定することで、「仮想マシンからは外部ネットワークに接続できて、外部ネットワークからは仮想マシンに接続できない状態」を作ることができるようですので、早速設定してみます。


# ②ホストネットワークマネージャーの設定
実際の詳細の設定手順は以下を参考にしました。
[CentOSにSSH接続してみる！VirtualBoxのNATとホストオンリーアダプターによるネットワーク設定のベストプラクティス！〜安全かつ快適な開発ができるようにする〜]
(https://qiita.com/nooboolean/items/96ae44d0090794dce8d1)

以下の画像のように、VirtualBoxのホストネットワークマネージャーの設定から、「アダプタを手動で設定」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541383/630c9b33-4d4b-7dcb-fd56-cfc6933eedb1.png)

# ③ネットワークマネージャーでの設定

ネットワークマネージャーの起動（CentOS内で操作）

```
# nmtui
```

各種IPアドレス等の設定を行います。詳細は割愛しますが、sshでログインする際に必要なIPアドレスを再度設定する必要があります。
上記②のホストネットワークマネージャーで手動で設定したIPv4のIPアドレスを下限に、ネットマスクを上限とした、IPアドレスを設定します。
以下の例では、IPv4 = **192.168.53.3** です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541383/a3f1da1a-b33b-47fa-14de-c1ba5a440cc8.png)


NetworkManegerとNetworkを再起動させ、変更を反映させます。

```
# systemctl restart NetworkManager 
# systemctl restart network 
```

# ④ホストOS側での接続
各種設定が終わりましたので、今度はホストOS側で接続を試みてみます。
まずは、Windowsコマンドプロンプト上で、SSHログインができることを確認します。
接続先となるホスト名は、先程の**③ネットワークマネージャー**で新規設定したIPv4アドレスになります。

```
C:\>ssh root@192.168.56.3
root@192.168.56.3's password:
Last login: Mon Dec 23 19:01:13 2019 from 192.168.56.1
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@localhost ~]#
```

CentOSへのsshログインが確認できましたね。
次に再度Poderosaでも接続を試してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541383/70068ae2-b047-42c3-9114-cc867b6dfec1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541383/9e9032d0-f964-192f-3f30-e1d6d67a825a.png)

先ほど繋がらなかった、Poderosaからの接続ができました。

これで、Windows機からも簡単に、Linux系のコマンドを使えるようになりました。
あとは、yumコマンド等で各種環境構築や、Dockerの構築など、全てCentOS上で実行できます。
Windowsの環境を汚さずに行えるので安心ですね。



# おわりに
今回は、WindowsからCentOSを導入してみたのですが、インストール時間やネットワークの設定等、思った以上に詰まりポイントもあり、5時間程構築に時間がかかり大変でした。
現在のところ、Windows 10 ではWSLでより簡単にlinux環境が構築できるようになりましたが、CentOSのディストリビューションはまだ対応していないようです。
そういった部分を考えると開発環境を揃えるためには、MAC端末でDokcerを構築するのが、アプリの開発の業務に集中できるので便利だと思います。
DokcerやGo言語開発までの環境構築、詰まりポイントについては、別の機会があれば紹介してみたいと思います。



明日は @esu_eichi さんが、社内データサイエンスコンペについて書いてくれるそうです！よろしくおねがいします。