JAVA開発の基本〜環境構築〜VMイメージの作成手順

# VMイメージの作成手順(書きかけ)
この記事は[Java開発の基本〜環境構築〜](todo)の補足手順です。
VMイメージを作成するにあたり[こちらを参照](https://qiita.com/tamago3keran/items/260899458959d3214dcf)しました。
作成されたイメージは[git](todo)にて公開しています。

## 環境情報
### OS情報
* VirtualBox: Version 6.0.6 r130049 (Qt5.6.3)
* ホストOS: macOS Mojave 10.14.3
* ゲストOS: CentOS 7.6-1810

### ソフトウェア情報
* Open JDK8(デフォルト)
* Eclipse 4.8 Photon
* Postgres11
* Apache Maven 3.6.1
* git(デフォルト)

 
## 環境作成手順

### 仮想マシンの作成
VirtualBoxを起動した「New」をクリックすると下記のような画面になります。
任意で名前と保存先を指定してください。ちなみにVMはめちゃくちゃ容量を食うので外部ストレージを指定しています。
Typeに「Linux」
Versionに「Red Hat(64-bit)」


<img width="1163" alt="VMイメージ作成1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/2dddcd53-a9fb-aba5-50f1-1d37e170fa01.png">

このまま基本デフォルトの設定でいいので「Continue」クリックし続けるとイメージが作成されます。

### 仮想マシンの設定
この作業は後からでもできます。
settingをクリックして作成したマシンイメージの設定をします。
<img width="1156" alt="VMイメージ作成2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/6d975ffe-159d-34ce-caa7-104b13b6b9ed.png">

System>Motherboardでイメージのメモリの割り当てを増やします。
<img width="1162" alt="VM設定_メモリ割り当て.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/790a3dce-8b90-67d3-8fc4-1b2939b66a76.png">

### OSのダウンロード
[CentOsのダウンロードサイト](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso)でイメージをダウンロード。全部同じっぽいので家から一番近そうなところからダウンロードしましょう。

### OSのインストール
ストレージタブを選択してダウンロードしたisoイメージを指定する。
<img width="1155" alt="VM設定_iso取り込み.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/adf540bd-a893-e745-bcf8-da2a5a004105.png">
Virtulマシンを起動する。
OSのインストールを選択する。
*VMからカーソルがでない時はcommandキーを押すと抜けられます。
![VM設定_osのインストール1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/4105731c-68a3-9f74-99b7-2763ae1724c9.png)

言語選択などを経て、インストールソースなどの設定をする。
![VM設定_osのインストール2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/e02f12d6-f386-ce89-5ccd-ae4e1208c5c4.png)

ソフトウェア構成を設定
「開発ツール」と「DNSネームサーバー」にチェックを入れる。
![VM設定インストールパターン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/2e5be96a-2d89-c5c7-8f04-6fcd0b1b804e.png)

rootユーザーのパスワード設定をして適当にユーザーを作成しておく。
![VM設定_ユーザーの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/d0ec3737-f9c9-940e-d31e-edc2c9f9304e.png)

## ソフトウェアのインストール
ダウンロードしたパッケージに入っていないeclipse、postgres、mavenのインストールをします。

### eclipse

作成したuser以下にeclipseをダウンロード

wget使ってやろうと思いましたがファイルが解凍できず。。。  
結局ホストOSでダウンロードした物をゲストOSに移動させました。
手順はここを参照
うまくいかなかった時のコマンド
```
$ cd /home/[作成したユーザー] #ディレクトリの移動
$ mkdir eclipsePhoton $$ cd _$ #ダウンロードディレクトリを作成して移動
$ wget https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2019-03/R/eclipse-jee-2019-03-R-linux-gtk-x86_64.tar.gz&mirror_id=1142 ##本体のダウンロード

```

ダウンロードしたファイルを展開する。

```
$ tar -zxvf eclipse-jee-2019-03-R-linux-gtk-x86_64.tar.gz
$ #ダウンロードした場所によってtar.gzファイルの名称は異なるかもしれません
```
日本語化の手順については[こちら](https://www.linuxacademy.ne.jp/lablog/programmer/625/)を参照

### トラブル系メモ
*色々調べてなんとなく解決している箇所なので、記載に誤りがある等の私的、細かい補足をしてくれる方おりました是非お願いします!!
#### VMマシンでクリックできなくなる

setting>display>Graphics Controller
VMSVGAからVBoxSVGAに変更

#### ゲストOSからネットに接続できない。  
virtualbox管理画面の`setting>Network`をの`Attached to`が`NAT`になっていることを確認。  

ゲストOSのコマンドラインで下記コマンドを実行して接続状況を確認。

````
$ nmcli
````
`enp0s3`の接続状況を確認。（数字が異なっていたり、ethとなっている場合もあるかもしれないので各自読み替えてください。）ここが`接続済み`となっている場合には別の原因で接続できていないので他を探してください。。。
`enp0s3`がゲストOSからネットへの出口になっているらしいので、ここを解放してweb に接続されたことを確認する。
  
```
$ nmcli connection up enp0s3 #コネクションを解放
$ nmcli　#接続済みに変更されていることを確認
$ ping 8.8.8.8 #webに接続されたことを確認
```
自動でコネクションが解放されるように設定する。

```
$ nmcli con mod enp0s3 connection.autoconnect "yes"
$ nmcli con show enp0s3
$ #「connection.autoconnect」が「はい」になっていることを確認
```

### 小技
#### ホストOSからSSH接続できるようにする
VMに入ったり出たりしながらこの記事を書くのがつらいので、ホストOS(MacのOSX)からVMのterminalにSSH接続できるようにします。

VMの`設定>ネットワーク>Advance>Port Forwarding`と辿り、このように設定します。<img width="976" alt="VM設定_ポートフォワーディング.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/9d0ca53a-b2e1-e6e1-fe18-407aec2dd69c.png">

ホストOSのターミナルを開いて下記のコマンドを実行して、求められたらパスワードを入力します。
```
$ ssh -p 2222 user@127.0.0.1
$ #ssh -p {ポート番号} {ゲストOSのユーザー} @{ゲストOSのIP（ローカルホスト）}
```