USBメモリにVirtualBoxでLubuntuを入れる作業記録

今回は8GBのUSBメモリに実作業もギリギリできる(?)形でLinuxを入れてみた。

# 1. 目的
PCは借りれるが、中身を変えられない環境で作業すること。
BIOSの変更は元に戻せばいいとの許可をもらっている。

# 2. こちらで用意できるもの
8GBのUSBメモリ(USB3.0)
(最近は1000円程度で32GBのUSB3.0のやつが買えます)

# 3. 実現手段検討
## (1) 大枠
USBメモリに予めLinuxを入れて現地に赴き、PCを借りてBIOSの設定を変えてUSBメモリからLinuxを起動して作業する。

## (2) ディストリビューション選択
日本語を簡単に使えるようにしたいので、Ubuntu系。
ある程度軽いのがいいので、Lubuntu。
18.10を入れようとしたが、8GBでは入らない(Lubuntuは最近それほど低スペを追求していない)。
→Lubuntu 18.04LTS amd64を選定。

## (3) インストール方法選択
以下の2択
(A)UNetbootinを使ってLiveUSBを作る方式
(B)VirtualBoxを使ってUSBにインストールする方式

始め(A)を試みたが、作業結果を保存できなかったため、毎回apt upgradeから始めるのもしんどいので断念。
(他にもファイルシステムがVFATなので2GB以上のファイルがNGとか、大文字小文字が区別できないなど、不安要素があった)
今回は(B)で実施。

## (4) 起動方法選択
これは現地のPCに合わせる必要がある。
(A)MBR方式
(B)UEFI方式
今回は現地のPCがWindows 10でUEFIなことが分かっているので(B)

# 4. 作業
## (1) VirtualBox起動
現地に行く前に自分のPC(Windows 10)上で作業する。
この際、今回使用するUSBメモリがUSB3.0なので、VirtualBoxに**VirtualBox Extension Pack[^VirtualBox Extension Pack]をインストール**する必要があった。
これを入れない場合、扱えるUSB機器がUSB1.0までになる。
なお、VirtualBox Extension Packを使用できるのは個人利用/教育・評価目的だけなので注意。
また、VirtualBoxは**管理者権限で実行する**(UnixライクなOSの場合、rootで実行する)。
こうしないと、ゲストOSからUSB機器を操作できない。

## (2) 仮想マシンの作成
仮想マシンを作成するが、今回作成する仮想マシンは少々特殊。

1. EFI起動[^MBRの場合]
2. HDDを持たない
3. USB接続フィルタを設定する

以下でその方法を記述する。

### 1. EFI起動

![efi.png](https://qiita-image-store.s3.amazonaws.com/0/374336/1e5ed466-64bb-6467-d3ac-74b8df6dfbf9.png)
 
### 2. HDDを持たない
下図のようにCD/DVDドライブしかなく、そこにLubuntuのインストールISOが指定されてるだけ(ダウンロードして設定する必要あり)。
![nohdd.png](https://qiita-image-store.s3.amazonaws.com/0/374336/66984441-fba4-e6c9-bb09-cce7591e61bc.png)

### 3. USB接続フィルタを設定する
USBメモリを挿して、以下のように設定する。

![usb.png](https://qiita-image-store.s3.amazonaws.com/0/374336/b897aef9-b36d-3439-5dfc-cb2435f7af72.png)

こうしておくことで、仮想マシン起動後USBが接続された場合、ホストから接続を奪ってゲストに繋がるようになる。
Extension Packがインストールされていない場合、USB1.1までしか選択できない。

## (3) 仮想マシン起動

ここから先は普通にインストールするだけなので、割愛する。
最初に最小構成を選択する点だけ注意。

## (4) 仮想マシン上でUSB起動

正しくインストールされていれば、仮想マシン上のUEFIでUSB起動する。
EFIの画面が出る場合もあると思うが、exitしてUSBで起動するように選択すれば大丈夫。
起動すると、8GB中、4GBほどすでに使用されていた。
少し設定しておいた方がいい項目があると思うので、それだけやっておく。

### 1. ソフトウェアの更新
割愛

### 2. ハードウェアクロック設定変更

WindowsはM/B上にあるハードウェアクロックをローカルタイム(時差込みの時間)として使用するが、LubuntuはデフォルトでUTC(時差なしの時間)として見る。すると、Lubuntuは起動時9時間先の時間としてハードウェアクロックを読み取ることになるが、すぐにNTP(ネットワーク上の時間)で補正してシステム時刻を正しくするので大きな問題にはならない。しかし、システム時刻の補正と同時に**ハードウェアクロックを書き換えてしまう**ため、ハードウェアクロックに9時間前の時間が書き込まれることになる。すると次にWindowsで起動したとき、9時間前の時間が表示されてしまう。WindowsにもNTPを利用した時間合わせの機能があるが、それほど頻繁には機能しないので、手作業による修正が必要になってしまう。(VirtualBoxではハードウェアクロックも仮想なので、書き換えても問題はない。しかし、実機をUSBで起動した場合は書き換わってしまう)

そこでLubuntuのハードウェアクロック読み取り/書き込み設定を変更し、UTC→ローカルタイムに変更する[^Make_Linux_use_.27Local.27_time]。

```console
timedatectl set-local-rtc 1
```

以降の設定は趣味なので、やる必要はない。

### 3. 不要アプリの削除

この時点で4.6GB使用しており、残り1.7GBしか使えないとの表示になっているため、少しでも削った。

```console
sudo apt purge pidgin sylpheed transmission-gtk transmission-common abiword gnumeric mtpaint simple-scan audacious gnome-mpv xfburn guvcview
sudo apt autoremove --purge
```
→4.5GB使用/残り1.8GB(ほぼ効果なし)

### 4. aptで取得したパッケージキャッシュの削除

```console
sudo apt clean
```
→3.9GB使用/残り2.4GB

### 5. 基本的なビルドツールのインストール

```console
sudo apt install build-essential
sudo apt clean
```

→4.0GB使用/残り2.3GB

### 6. python環境の設定[^Ubuntu 18.04 LTSでのVirtualenvを用いたPython環境構築方法]

```console
sudo apt install virtualenv virtualenvwrapper
sudo apt clean
```
→4.1GB使用/残り2.2GB

### 7. Visual Studio Codeのインストール[^Ubuntu / DebianにコマンドでVSCode (Visual Studio Code) をインストールする方法]

```console
sudo apt install curl
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install code
sudo apt clean
```
→4.2GB使用/残り2.1GB

これ以上は重量級だったり、やること次第なので保留。

## (5) 実機でUSB起動

1. 仮想マシンをシャットダウンし、VirtualBoxも閉じて、Windows 10もリブート。
2. BIOSを起動し、USB起動を選択

→無事起動して今この記事を書いてるところ

# 5. まとめ

```console
user@user-VirtualBox:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  1.5M  796M   1% /run
/dev/sdb2       6.6G  4.2G  2.1G  68% /
tmpfs           3.9G   53M  3.9G   2% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sdb1       511M  6.1M  505M   2% /boot/efi
tmpfs           798M   12K  798M   1% /run/user/1000
```
bootの500MBがもったいない。。。
32GBのUSBメモリなら使ってる開発環境を全部載せても大丈夫そう。
なお、USBメモリなので遅いときはあるが、RAMに載れば快適。

[^VirtualBox Extension Pack]: [VirtualBox Extension Pack](https://www.virtualbox.org/wiki/Downloads)
[^MBRの場合]: MBRの場合はこのチェックを外すことになるが、こうした場合、インストール直後のリセットでVMから起動できない。VMからUSBのMBRから起動するためには、USBメモリをホスト側の物理デバイスとしてマウントする特殊なvmdkを作成する必要がある。が、今回は説明しない。
[^Make_Linux_use_.27Local.27_time]: [Make_Linux_use_.27Local.27_time](https://help.ubuntu.com/community/UbuntuTime#Make_Linux_use_.27Local.27_time)
[^Ubuntu 18.04 LTSでのVirtualenvを用いたPython環境構築方法]: [Ubuntu 18.04 LTSでのVirtualenvを用いたPython環境構築方法](https://qiita.com/SUZUKI_Masaya/items/7b075a5db918b224dc8d)
[^Ubuntu / DebianにコマンドでVSCode (Visual Studio Code) をインストールする方法]: [Ubuntu / DebianにコマンドでVSCode (Visual Studio Code) をインストールする方法](https://www.karelie.net/ubuntu-debian-command-install-vscode/)