Vagrant上のLubuntuでVSCode+Docker環境を作りたい~Vagrant Box化編~

# 対象としている人

VisualStadio CodeのRemote-Containerを使いたいけど、Windows10 Homeな人。
（どんだけニッチなんだよ）

# 経緯

Remote-Containerを使おうと思ったらDockerToolboxは対応していなかったし、
かといって、ProにしてもVirtualBoxが使えなくなるらしいので、じゃあ、もう開発用の環境作ろうかなと。

# 前提

- VirtualBoxが入っている
- Vagrantが入っている
- OSがWindows10である

# 前回までの記事

- [Lubuntu構築編](https://qiita.com/hatman621221/items/a74dd49a678ecaa2f2ae)

----

# Vagrant Box化

Lubuntuに限らず、開発環境はポコポコと量産できるのが良いなと思うのでVagrantで簡単に作れるようにします。
CentOSなどサーバはやったことあるけど、Desktopは初めてなのでメモも兼ねて。


## VirtualBox Guest Addition

1. デバイス>Guest Additions CDイメージの挿入...を選択
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128200/6c9c0f3d-0084-eb93-52e1-0e9bfe159740.png)

1. 開いたらツールから「端末で開く」を選択
  ![VirtualBox_lubuntu_24_07_2019_04_58_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128200/fc0f878c-145a-cdd3-e083-3b7f88643531.png)
1. 以下のコマンドを実行
   ※タブ補完が効かない（拡張子が.runだから？）のでlsコマンドで確認してからコピペするのが吉

  ```
  $ sudo sh ./VBoxLinuxAdditions.run
  ```
  
1. 正常に終わったら一応再起動して、イメージのスナップショットを撮る

### 困った：インストール後画面が黒くなった件

マウスカーソルだけはLubuntuっぽくなるものの、画面が真っ黒に。
慌てず、表示>仮想スクリーン1を選択し、一番小さいサイズを選択してみると表示される（かも）
でも、解像度が圧倒的に低いので、表示されてからいい感じのを選択すると良いと思う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128200/7a105249-e4c8-a15d-29ea-375ab825beb8.png)

## 不要なソフトを削除する

正直ゲームとかOfficeソフトとか要らんので削除する。

### Terminalを使って

#### いらなそうなパッケージを検索する手順

1. `sudo dpkg -l`でパッケージ一覧を出す
2. `/xxxxx`でパッケージ名を検索

#### 実際やったこと

```bash
$ sudo apt-get purge \
 libreoffice-* \
 2048-qt \
 bluez bluedevil bluez-* \
 skanlite \
 vlc \
 quassel quassel-data \
 gstreamer* \
 fonts-lohit*
$ sudo apt autoremove
```


### GUIで選びながら

1. システムツール>Discoverを選択
  ![VirtualBox_lubuntu_24_07_2019_05_22_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128200/552d2ab4-3529-e83e-7b31-b542731d7c9c.png)

1. Installedをクリックするとインストール済のものが出てくるので鬼のように消す

### 結果

```shell
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            960M     0  960M   0% /dev
tmpfs           200M  992K  199M   1% /run
/dev/sda1       9.8G  4.2G  5.1G  46% /
tmpfs           996M  6.5M  990M   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           996M     0  996M   0% /sys/fs/cgroup
tmpfs           200M  8.0K  200M   1% /run/user/1000
```
数GBは削除でき。。たかな。

## Box化
公式の手順を参考に
[Creating a Base Box](https://www.vagrantup.com/docs/boxes/base.html)
[VirtualBox Base Boxes] (https://www.vagrantup.com/docs/virtualbox/boxes.html)

あと先人の知恵を拝借し
[Vagrant box 作成手順(CentOS 7.4)](https://qiita.com/KisaragiZin/items/0f7f0d1b728153a1db8d)


### SSHインストールと設定

#### sshdインストール

```shell:sshdインストール
$ sudo apt-get install -y ssh
$ sudo systemctl start ssh
$ sudo systemctl enable ssh
```

#### SSH鍵設定

```shell-session:SSH鍵設定
$ sudo apt-get install -y curl
$ mkdir -p /home/vagrant/.ssh
$ chmod 700 /home/vagrant/.ssh
$ curl -k -L -o authorized_keys https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub
$ chmod 600 authorized_keys 
$ chown -R vagrant:sudo /home/vagrant/.ssh/
```

#### sshの設定を変更

```
sudo vi /etc/ssh/ssh_config
```

```config:ssh_config
# 以下を追加
UseDNS no
```

```shell:sshリスタート
sudo systemctl restart sshd
```

### SUDO設定

```shell-session:visudo立ち上げ
$ sudo -s
# visudo
```

viじゃなくてnanoで立ち上がるので注意。。。

```config:visudo
# 以下を追加
vagrant ALL=(ALL) NOPASSWD: ALL
```

### パッケージの最新化

```console
# apt-get update
# apt-get upgrade
# apt-get clean
```

### boxサイズを小さくするおまじない

0埋めファイルを作成して、削除するとboxサイズが小さくなるらしい。

```console
$ dd if=/dev/zero of=/EMPTY bs=1M
$ rm -f /EMPTY
```

ここまで終わったらシャットダウン

```console
$ shutdown -h now
```

## いよいよBox化

### Boxの作成と追加

powershellで(別にコマンドプロンプトでもOK)

```powershell
> mkdir lubuntu
> cd lubuntu

#  --base：作成対象の仮想マシン名(VirualBoxのリストに書いてあるやつ)、
# --output：出力 box ファイル名
> vagrant package --base lubuntu --output lubuntu-19.04-x86_64.box

# boxを追加
> vagrant box add --name lubuntu-19.04-x86_64 .\lubuntu-19.04-x86_64.box
```

### 確認してみる

Vagrantfileが作成されるので、別のディレクトリを作成するといいかも

```powershell:確認
> vagrant box list
lubuntu-19.04-x86_64 (virtualbox, 0)

# Vagrantfileを作成
> vagrant init lubuntu-19.04-x86_64

# 起動
> vagrant up

# sshで入る
> vagrant ssh
```

### 確認できたら削除

```powershell
> vagrant destroy
```