StableモードのLinuxで開発はキツかった話

普通はdeveloper modeでやる**開発環境の構築をstable modeでやって失敗した話**です。

# まえがき
本記事は失敗事例を取り扱った記事です。
こうしたら間違いなく失敗する、というものなので反面教師にしてください。
真似をしたら詰むものが多いです（ローカルが汚染される）。
詰んだ時はLinuxを再インストールしましょう！

今回の開発環境構築に取り組むにあたって分かったのですが、Chromebook内のLinuxはコンテナになっているらしいため、ポカしてローカル環境を汚染してもすぐにやり直すことができます。
所要時間は10分くらいです。

あと、StableモードでLinuxを動作させる場合は、ガンガンsudoコマンド付けても大丈夫です。
できることが非常に限定的な上にChromebookのセキュリティ機構が有効だからです。
パーミッションや権限云々を考えるのも面倒なので全コマンドにsudo付けちゃえばいいと思います。

# 本記事に至るきっかけ
2018年5月、ChromebookはLinuxアプリに対応しました。
これを知ったのは同年9月頃のことです。

その頃、私は学生としてプログラミングをしておりました。
その中で、Pythonでの開発をChromebookでいつでも・どこでも・時間を気にせずに開発したいと思ったことがきっかけとなり、Chromebookで開発環境を構築しようと決意しました。

参考：
[Chromebook are ready for your next coding project](https://www.blog.google/products/chromebooks/linux-on-chromebooks/)

# 目標
Chromebookに次のソフトをインストールし、仮想開発環境を構築する。

 - virtualbox
 - vagrant
 - docker
 - sublime text
 - python3.7.1

# 私のやったこと
いくつかあるのでリストアップします。

    1. 自分のマシンスペックを調べる
    2. Chromebook内のLinux環境を調べる
    3. よく使われるコマンドをインストールする
    4. vagrant を入れようと試みる
    5. VirtualBox を入れようと試みる
    6. VMware を入れようと試みる
    7. docker を入れようと試みる
    8. sublime-text を入れようと試みる
    9. atom を入れようと試みる
    10. python 最新版をインストールする
    11. Anaconda を入れようと試みる

## 自分のマシンスペックを調べる
購入先の店やサイト、価格comなどから色々調べましょう。
コマンド打たないので、当然ですが上手くいきます。

|表題|内容|
|:-:|:-:|
|製品名|Chromebook Flip C213NA-N3350|
|CPU|Celeron Dual-Core N3350(Apollo Lake)|
|プロセッサ|1.1GHz|
|メモリ|4GB|
|ストレージ|eMMC 32GB|
|OS|Chrome OS|

※ストレージはChrome OS によって8GBほど使われています。
※Chrome OSのバージョンは69でした。

参考：
[価格.com](http://kakaku.com/)

## Chromebook内のLinux環境を調べる

ディストリビューションを調べる

```
$ sudo cat /etc/issue
-> Debian GNU/Linux 9 \n \l
```

カーネルを調べる

```
$ uname -a
-> Linux penguin 4.14.67-07156-gc116f2c8c400 #1 SMP PREEMPT Sun Sep 9 14:28:13 PDT 2018 x86_64 GNU/Linux
```

カーネルがChromeOS独自のものっぽいです。
もう嫌な予感がする。
とりあえず上手くいきました。

参考：
[Linuxの各種スペック確認](https://qiita.com/speedstar18fct/items/dc8f2b97f0be659de65f)
[Linux　bit数確認](https://qiita.com/NISTKE2023/items/71fc506bd90c556d9863)

## よく使われるコマンドをインストールする

curlだけじゃ厳しかったので。

```
$ sudo apt update
$ sudo apt install software-properties-common wget make
```

makeコマンドは何かと入り用になるので入れました。
上手くいきました。

参考：
[Ubuntu Linuxで、add-apt-repositoryしようとして「コマンドがない」って言われたら](https://kazuhira-r.hatenablog.com/entry/20160116/1452933387)
[wgetのインストール](http://programdl.hatenablog.com/entry/2017/11/11/144850)

## vagrantを入れようと試みる
失敗しました（VirtualBoxやVMwareが動作しなかったため）。
[この記事](https://qiita.com/hidekuro/items/fc12344d36d996198e96)を見てやってみよう、という気持ちになったのですが、使うマシンが悪かったようです。
後述のVirtualBoxやVMwareがなければvagrantは動作しません。
両方とも動作しなかったのでvagrantの導入は断念いたしました。

## VirtualBoxを入れようと試みる
ほぼ失敗しました。
アプリの起動まではできましたが、仮想環境は一切立ち上がりませんでした。
プロセッサの力不足＋stable modeであったことが原因と考えられます。

VirtualBoxをインストールするためには[VirtualBox公式サイト](https://www.virtualbox.org/wiki/Linux_Downloads)を参考に、ファイルを編集する必要があります。
今回はVirtualBox 5.2をインストールします

```
$ cd /etc/apt
$ sudo vim sources.list
```
sources.listはsudo apt updateのときに参照されます。
次のようにソースを追記してください。

```conf:sources.list
# 最初から記述されています
deb http://deb.debian.org/debian stretch main
deb http://security.debian.org/debian-security stretch/updates main
# 以下のソースを追記
deb https://download.virtualbox.org/virtualbox/debian stretch contrib
```

この直後にsudo apt updateやsudo apt-key（以下略）をしようとするとエラーが出ることがあります。
原因はgnupg,gnupg1,gnupg2がないこと、対象リポジトリの公開鍵を信用していないことです。
そのため、次のように入力することで解決できます。

```
$ sudo apt install gnupg gnupg1 gnupg2
$ sudo apt update
$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
$ sudo apt update
$ sudo apt install virtualbox-5.2
```

これでインストールは成功しますし、起動もします。
ただし、コマンドから動作を確認すると…

```
$ sudo VBoxManage --version
-> libkmod: ERROR ../libkmod/libkmod-module.c:1655 kmod_module_new_from_loaded: could not open /proc/modules: No such file or directory Error: could not get list of modules: No such file or directory WARNING: The vboxdrv kernel module is not loaded. Either there is no module available for the current kernel (4.14.67-07156-gc116f2c8c400) or it failed to load. Please recompile the kernel module and install it by sudo /sbin/vboxconfig You will not be able to start VMs until this problem is fixed. 5.2.20r125813
```

**The vboxdrv kernel module is not loaded**とあるので、Linuxカーネルが対応していない的なことを言われています。
詰んだかもしれない。

諦めて代替案を探すと、どうやらVirtualBoxよりもVMwareの方がChromebookと相性が良さそうです。
次はVMwareにTRY！！

参考：
[Linux: apt-get時のGPG error(NO_PUBKEY)の解決例](https://yukun.info/linux-apt-get-gpg-error-no-pubkey/)
[vagrant up エラー](https://qiita.com/moriyant/items/f27a3897b73bc2d4b374)
[VMwareとGoogleがパートナーとしてChrome OSの管理をWorkspace Oneに導入…アプリケーション環境の完全統一化を目指す](https://jp.techcrunch.com/2017/05/10/20170509vmware-and-google-extend-partnership-to-include-chromebook-management/)
[VMwareニュースリリース](https://www.vmware.com/jp/company/news/releases/2017/vmw-googlepartnership-051017.html)

## VMwareを入れようと試みる
VMware公式サイトからVMwareをダウンロードしましょう。
Chromebookの設定→詳細設定→ダウンロード→保存先の横にある変更ボタン→

# 結論
- Chromebookを使ってローカル環境上で開発するならPixelbookを買おう！もしくはクラウド上で開発する。
- そもそもプログラミングは開発者モードですべきです！StableモードはLinux上のDaemonが封じられたり色々と不便です。
- 今後のChrome OSアップデートに期待。
- ChromebookやChromeOSに関する文献は日本ではまだ少ないです。Google翻訳使って海外の文献を読みましょう。

参考：
[TECH::NOTE（おすすめLinuxアプリまとめ）](https://tech-camp.in/note/technology/49259/)

# 更新履歴

2018/12/07
「よく使われるコマンドをインストールする」を追記しました。
2018/12/05
「Chromebook内のLinux環境を調べる」を追記しました。結論直しました。
2018/12/04
本文にsudoコマンド云々の話を追記しました。全文の表現を直しました。
2018/11/25
自分のマシンスペックについて記述しました。全文の表現を少し直しました。
2018/11/17
書き始めました。