ChromebookのLinux開発環境構築

ChromeOSでLinuxアプリが使える機能「Project Crostini」でLinuxの開発環境を構築したときの、セットアップの手順を記してます。
基本的に個人用のメモです。

Windows版は下記です:
[Windowsを購入したら最初にすること｜s2terminal｜note](https://note.mu/s2terminal/n/nfeb08fe7620b)

## 環境
- [ASUS Chromebook Flip C436FA](https://www.asus.com/jp/2-in-1-PCs/ASUS-Chromebook-Flip-C436FA/) Core i7 / 16GB RAMモデル (C436FA-E10162)
    - Intel Core i7-10510U
    - ChromeOS Version 86.0
    - Debian 10.4

Google Pixelbookなど、AMDアーキテクチャで最近発売されたChromebookならば、本稿の手順はほぼ同様に適用できると思います。

一方、ASUS C101PA (OP1)やLenovo IdeaPad Duet (MediaTek Helio P60T)などARMアーキテクチャのChromebookでは、本稿の手順は一部適用できない箇所があります。またASUS C302CA (Core m3-6Y30)など「"Crostiniに対応している"という情報が無い」Chromebookでは、そもそも本稿の方法でLinux環境を構築することはできません。もし今Chromebookの購入を検討している段階の場合は、機種のCrostini対応状況をよく調べてください。

## Linuxを有効にする
[Chromebook公式ヘルプのセットアップ手順](https://support.google.com/chromebook/answer/9145439?hl=ja)を参考に、Linux(ベータ版)を有効にします。

セットアップできたら、まずはパッケージを更新しておきます。

```bash
$ sudo apt-get update && sudo apt-get dist-upgrade
```

## 日本語環境の構築
日本版のChromebookだったとしても、Crostini上ではデフォルトでは日本語は利用できません。

### 日本語フォントのインストール
文書用に[IPAフォント](https://www.ipa.go.jp/osc/ipafont)と、コーディング用に[Myrica](https://myrica.estable.jp/)を使います。

IPAフォントはaptでインストールできます。

```bash
$ sudo apt install fonts-ipafont fonts-ipaexfont
```

[Myrica](https://myrica.estable.jp/)は、`~/.fonts`に配置することで使えるようになります。

```bash
$ mkdir /tmp/fonts; cd $_
$ wget https://github.com/tomokuni/Myrica/raw/master/product/Myrica.zip
$ unzip Myrica.zip
$ mv ./Myrica.TTC ~/.fonts/
$ fc-cache --force --verbose
```

### 日本語入力のセットアップ
fcitx-mozcを使います。

```bash
$ sudo apt install fcitx-mozc
```
インストールしたら、Chromeのアプリケーションシェルフ(虫眼鏡ボタン)から「Linuxアプリ」→「Fcitx」と起動します。そのあと`fcitx-configtool`を実行します。

```bash
$ fcitx-configtool
```
「Input Method」に「Mozc(Japanese)」をaddします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50391/b4010642-d081-2e47-c7db-4048791323d6.png)


必要に応じて、Global ConfigでTrigger Input Methodも変更します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50391/42d1636d-5bba-5af2-62b2-a379025311a3.png" width="320px"/>

設定が終わったら、下記コマンドでfcitxを起動します。

```
$ fcitx-autostart
```

ターミナルなどで日本語入力できるかどうかを試すと、設定がうまくいっているか確認できます。日本語入力と英数入力の切り替えはデフォルトでは「Ctrk+Space」ですが、「かな英数」キーでも切り替えができるようにして使っています。

## dotfiles
[自分用のdotfiles](https://github.com/s2terminal/dotfiles)を取ってきて、読み込むようにします。

```bash
$ cd
$ git clone git@github.com:s2terminal/dotfiles.git
$ echo '. ~/dotfiles/.bashrc' >> ~/.bashrc
$ echo '[include]
  path = ~/dotfiles/.gitconfig' >> ~/.gitconfig
```

SSHホスト名やGitユーザ名などは別管理していますので、上記のようにincludeするようにしておくと複数の設定リポジトリやローカルマシンにだけ置く物(秘密鍵など)を共存させることができます。

```bash
$ echo 'Include ~/secret_dotfiles/.ssh/config' >> ~/.ssh/config
$ echo '[include]
  path = ~/secret_dotfiles/.gitconfig' >> ~/.gitconfig
```

参考: [設定ファイルを複数ファイルに分割して管理する構文のまとめ \- Qiita](https://qiita.com/skkzsh/items/20af9affd5cc1e9678f8)

## VS Code
[VS Code公式のLinux用セットアップガイド](https://code.visualstudio.com/docs/setup/linux)に従って、インストールします。

```bash
$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
$ sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
$ sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
```

```bash
$ sudo apt-get install apt-transport-https
$ sudo apt-get update
$ sudo apt-get install code # or code-insiders
```

[2020年9月のアップデートでLinux用ARMビルドが公式に提供されるようになった](https://code.visualstudio.com/updates/v1_50#_linux-arm-builds)ので、ASUS C101PAやLenovo IdeaPad Duetなどでも普通にインストールできると思います。

### VS Codeの設定同期
[2020年7月のアップデートで設定同期がVS Code安定版に入った](https://code.visualstudio.com/updates/v1_48#_settings-sync)ので、VS Codeのコマンドパレットから`>Settings SYnc: Turn On...`から有効化することで、他の端末と設定を同期できます。

なおGitHubアカウントかMicrosoftアカウントのどちらを使うか聞かれますが、[Microsoftアカウントでの設定同期はLinuxで現状うまくいかない](https://github.com/microsoft/vscode/issues/95306)ため、GitHubアカウントを使うほうがいいでしょう。

その他、問題が発生した場合は下記などを参考に対処します。

- [VSCode公式の機能で設定を同期する【Insiders Preview】 \- Qiita](https://qiita.com/suzuki_sh/items/c52414b5bd03d52d4de5)
- [Settings Sync in Visual Studio Code](https://code.visualstudio.com/docs/editor/settings-sync#_linux)
- [Sync requests to re\-login every 2 minutes\. · Issue \#92972 · microsoft/vscode](https://github.com/microsoft/vscode/issues/92972#issuecomment-625751232)

### VS Codeの日本語化
日本語化するには[Japanese Language Pack for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja)をインストールする必要があります。VS Codeを起動してクイックオープン(Ctrl+P)に`ext install MS-CEINTL.vscode-language-pack-ja`を入力します。

先に「日本語入力のセットアップ」の項で述べた日本語フォントをインストールしていないと、日本語化した時に豆腐になります。また、日本語入力のセットアップが完了していないとVS Codeでも日本語を入力することができません。

## ターミナル
2020年夏頃のバージョンアップ(ChromeOS 81？)から[標準のターミナルのデザインがきれいになって、タブ管理もできるようになりました](https://www.aboutchromebooks.com/news/how-to-preview-the-new-terminal-settings-early-in-chrome-os-81/)。ChromeOS同士で設定も同期するので、基本的にはこれでいいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50391/defa6e2b-59ec-0c39-8293-28e1ebc8b434.png)

必要であれば[Hyper™](https://hyper.is/#installation)などのターミナルも、Linux版をインストールできます。

## Firefox
Chromebookには当然ChromeがWebブラウザとしてデフォルトでインストールされていますが、それとは別にLinux版Firefoxをインストールして使うこともできます。
しかしaptでインストールしたFirefoxは `Firefox ESR` というバージョンになります。この `Firefox ESR` は動作がカクついたりと厳しいため、最新のLinux向けFirefoxを導入する方がいいです。
最新のLinux向けFirefoxを導入するには [Flatpak](https://flatpak.org/) というパッケージマネージャから導入するといいです。

```
$ sudo apt install flatpak
$ flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ flatpak install firefox
```
Firefoxはネットワーク設定がアプリ内で独立しているため、限られたインターネットアクセスにのみProxyを使いたい場合などにChromeとは別のブラウザとして利用できます。

## Docker
Debianのインストール手順に沿って、ふつうにインストールできます。

- [Install Docker Engine on Debian \| Docker Documentation](https://docs.docker.com/engine/install/debian/)
- [Post\-installation steps for Linux \| Docker Documentation](https://docs.docker.com/engine/install/linux-postinstall/)
- [Install Docker Compose \| Docker Documentation](https://docs.docker.com/compose/install/)

## 参考
- [Crostini導入編: 健康で文化的な最低限度の生活のためのChromebook設定 \- はだメモ](https://scrapbox.io/hada/Crostini%E5%B0%8E%E5%85%A5%E7%B7%A8:_%E5%81%A5%E5%BA%B7%E3%81%A7%E6%96%87%E5%8C%96%E7%9A%84%E3%81%AA%E6%9C%80%E4%BD%8E%E9%99%90%E5%BA%A6%E3%81%AE%E7%94%9F%E6%B4%BB%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEChromebook%E8%A8%AD%E5%AE%9A)