Chromebook C101PAの環境をC434Tに移植: Linuxを主体に


ASUSのChromebook C434Tをゲットしたので，C101PAの環境を移植したよ，というお話．

ChromeOSはGoogleアカウントによる諸々の環境の同期機能がある．Chromeアプリ，拡張機能，ブックマークなどChrome周辺の同期さらにはAndroidアプリ・設定の同期はかなり高度におこなわれる．

しかし，Crostiniによるlinux環境については当然，同期の対象にはならないので，自分で移植する必要がある．

以下にやった作業とか課題をメモした．これをベースにして，Chromebookの最大の強みでもあるlinux環境の移植の自動化，半自動化ができれば，他のchromebook導入が合理化できるんじゃないか，という甘い期待．

##◆移植の大枠
- Chromeアプリ，拡張機能はGoogleアカウントに紐付けられているので何もせずに同期可能．アプリ一覧を見ると勝手にインストールされている．
* Androidアプリも同様．一部同期できないのは，デバイスがアプリに対応していないもの．
* Linuxはベースとなってるアーキテクチャが違うとバイナリ互換性がないので注意！！あたりまえだけどな．(実はこの地雷踏んだ．その話はあとで)．C101からC434はarmからamdだから，バイナリーコピーは無理．すべてインストールしなおす必要がある．

##◆C101Pでやったこと…あんまり覚えてない．こら．

思い出してみる．C101Pで嬉しかったのは，ChromebookでLinuxが稼働したこと．C302は良いマシンだが，Crostiniが動かない．Croutonなら動くそうだが，なんだか面倒．つまり，C101PはLinuxアプリが使えることがものすっごく嬉しいってこと．

もう一点は，多くのAndroidアプリが稼働すること．もともとChromebookを使い始めたのは，あるAndroidアプリを12インチ以上の大画面で使いたいという要求から．ほかにもChromeアプリもあるけど，Androidアプリ版のほうが使い勝手がいいとか，そういうものも結構ある．

いずれにせよ，Chromeアプリでかゆいところに手が届いていない部分を，AndroidなりLInuxなりでカバーするというのがChromebook導入の狙いだったのだ．

##◆やったこと(再)

まず，なにが最初から入ってて，なにをあとからインストールしたのか，リストアップ．

```plaintext

$ apt list
(ズラズラズラ……)
(ズラズラズラ……)
(ズラズラズラ……)
(ズラズラズラ……)
```

`apt list`コマンドは「インストール(installed)」「自動(automatic)」という注釈がつく．ちなみにリスト一覧をみるだけなので，super userにならなくてもいい，つまり`sudo`コマンドは不要．

これを利用して，自分が手動でインストールしたものを切り出す．どうするかというと，
1. 出力されるリストから「"installed"かつ"automatic**ではない**"行」をgrepしてやる．
2. ついでに行頭のパッケージ名だけを切り出す．

こういう感じ．↓↓

``` 
$ apt list | grep 'installed' | grep -v 'automatic' | awk -F '/' '{print $1}' > C101list
```

これを新旧ホストでやる．ファイル名は適当にC101list, C423listとか．要するに手動インストールされたパッケージ名のみを切り出す作業．(listだけならsudoは不要)

```
$ diff C101list C423list | grep '^>'
```
これで差分をとってファイル保存．
その中でこれは必要というものを選択．

>	apt-file
apt-utils
dnsutils
expect
fdclone
fonts-ipafont
git
gthumb
iputils-ping
libreoffice
libreoffice-help-ja
locales-all
mupdf
task-japanese
vim-gtk
w3m
x11-apps


片っ端から` apt install`．

順番が関係あるかもしれないパッケージは前にもってくるとか，ちょっと気を使ったが，aptが適切に処理してくれるだろうから気にしなくてもいいかもね．

xargsとか使えばスマートにできるのだろうが，さほどの数でもないし，スクリプトにガシガシ書いて実行．すべてインストールできた．

##◆自分の環境のコピー

自分のホームにvimやらcshやらの設定ファイルがある．ある意味これが作業環境の命でもある．
ホームをそっくりコピーする．

ChromeOSはGoogleDriveをファイルシステムして認識でき，さらにlinuxで共有ができる．便利．

ただし自動的に共有はしてくれず，フォルダ毎に共有を明示的に切り替える必要がある．
>chromeのファイラで
　→ **GoogleDrive**を**右クリック**
　→ **「linuxと共有」**

でオッケー．これでlinuxからは，

`/mnt/chromeos/GoogleDrive`

で見える．いちいちここにcdするのも面倒なので，おいらはホームディレクトリにシンボリックリンクを張っている．

```plain
ln -s /mnt/chromos/GoogleDrive/MyDrive ~/
```

新旧両方で同じ構成にしておくと便利．
で，旧ホストで，自分のホーム全体をtarでまとめる．

```plain
cd /home
sudo tar cf ~/MyDrive/yourdirname.tar yourdirname/
(↑yourdirnameは自分のホームディレクトリ名)
```

これで，GoogleDriveの「MyDrive」に，ディレクトリごとまとめたtarballファイルができる．

GoogleDriveなので，少し同期するのに時間がかる(数十秒かな)のでちょっと待ってから，新ホストで，tarballを荷解きする．

```plain
cd /home
sudo tar xf ~/MyDrive/yourdirname.tar
```

これ，しれっと上書きされるので，新ホストで変更したファイルがあれば，別名保存しておくほうがいい．←　このことを考えると，**引っ越しは新ホストでいろいろ仕事をし始める前にするべき**だ．

##◆環境設定自動化のしくみづくり

完全自動化までいかずとも，半自動化ーーたとえばバッチファイル2発でオッケーとか，そういう感じで，新しいChromebookが来たときにはサクサクっと設定を済ませたい．複数のPCに対して同じ設定をするのはなにが必要なのか．

よく考えれば，差分は特に取る必要はなく，すでにインストールしてあればaptがリビジョンを判断してインストールするしないを決めてくれる．

ということは，
**「これとこれは必要だよね」というパッケージのリストを作ればいい**
ということになる．結局はそういうことかよ．すいません．

Linuxは，debianだと`apt install`を使うのだが，インストールするべきパッケージ名のリストがある場合，一括インストールはどうすればいいのか．

★[apt-getで一括インストール(Qiita)](https://qiita.com/digitarhythm/items/f2fa3efd92f27c557918)

あった．このスクリプトでえいやーだな．

## ◆ツールの選別選手権
で，ここからは，Chromebookで使うLinuxツール，アプリは何がいいのか？教材として必要なものはなにか？

つまり，Chromeアプリ，拡張機能，Androidアプリでもちと弱い機能のアプリは何か，ということだ．

- 言語
- Office系

##◆番外編: Crostini linuxの究極救助法
上のほうで，Linuxはアーキテクチャが違うとバイナリ互換ではないという，当たり前田のクラッカー話をした．何を血迷ったかこの地雷を見事に踏んでしまったおかげで，究極のLinux復活法を発見したので報告する．

C101PAでいろんなものをインストールしていたので，C434Tが来てさあ使うぞ，となった時に自分の環境がない，ほしいアプリもない．当たり前だけど．で，この状態から，一刻も早く脱出したいがためにやった力技が，/usr 以下を全部コピってしまえ大作戦．

```plain
$ sudo tar czf ~/MyDocs/c101usr.tgz /usr
```
てな感じでGoogleDriveに/usr以下のtarballを作り，それをC434T側で解いて上書きしてしまうという作戦．

バリバリのバイナリコピーなのだ．で，C434T側で，

```plain
$ cd /
$ sudo tar zxf ~/MyDocs/c101usr.tgz
```

とやってしまったとたん，どんどんC434Tのアーキテクチャであるamd64のバイナリが，C101のアーキテクチャであるarm64のバイナリに上書きされていき，気づいた時には ls すらできない状態に陥ってしまった．

この時点でことの重大さを初めて自覚．あわててコピーを停止したがすでに遅し．shutdownもできない．

うあああああああああ．

**ドンづまり．**抜き差しならぬ．にっちもさっちもいかぬ．「オワタ感120%」の状況．

####こんな状況，ググってもでてこんわ！

で，ふと冷静になって考えた．一番最初，Linux(ベータ版)をインストールするのはどうやったか？

→ 答えは簡単．ChromeOSの設定→**LInux(ベータ版)を"ON"にすればいい．**

ということは，「もう一度インストールし直すにはどうすればいいのか？」
####→ 答えは簡単だった．
1. Linux(ベータ版)を"OFF"にしてLinuxを削除する．
2. その後，"ON"にしてLinuxを再インストール．
**これでよかったのだぁぁ．**