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導入の狙いだったのだ.
◆やったこと(再)
まず,なにが最初から入ってて,なにをあとからインストールしたのか,リストアップ.
$ 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するのも面倒なので,おいらはホームディレクトリにシンボリックリンクを張っている.
ln -s /mnt/chromos/GoogleDrive/MyDrive ~/
新旧両方で同じ構成にしておくと便利.
で,旧ホストで,自分のホーム全体をtarでまとめる.
cd /home
sudo tar cf ~/MyDrive/yourdirname.tar yourdirname/
(↑yourdirnameは自分のホームディレクトリ名)
これで,GoogleDriveの「MyDrive」に,ディレクトリごとまとめたtarballファイルができる.
GoogleDriveなので,少し同期するのに時間がかる(数十秒かな)のでちょっと待ってから,新ホストで,tarballを荷解きする.
cd /home
sudo tar xf ~/MyDrive/yourdirname.tar
これ,しれっと上書きされるので,新ホストで変更したファイルがあれば,別名保存しておくほうがいい.← このことを考えると,引っ越しは新ホストでいろいろ仕事をし始める前にするべきだ.
◆環境設定自動化のしくみづくり
完全自動化までいかずとも,半自動化ーーたとえばバッチファイル2発でオッケーとか,そういう感じで,新しいChromebookが来たときにはサクサクっと設定を済ませたい.複数のPCに対して同じ設定をするのはなにが必要なのか.
よく考えれば,差分は特に取る必要はなく,すでにインストールしてあればaptがリビジョンを判断してインストールするしないを決めてくれる.
ということは,
「これとこれは必要だよね」というパッケージのリストを作ればいい
ということになる.結局はそういうことかよ.すいません.
Linuxは,debianだとapt install
を使うのだが,インストールするべきパッケージ名のリストがある場合,一括インストールはどうすればいいのか.
あった.このスクリプトでえいやーだな.
◆ツールの選別選手権
で,ここからは,Chromebookで使うLinuxツール,アプリは何がいいのか?教材として必要なものはなにか?
つまり,Chromeアプリ,拡張機能,Androidアプリでもちと弱い機能のアプリは何か,ということだ.
- 言語
- Office系
◆番外編: Crostini linuxの究極救助法
上のほうで,Linuxはアーキテクチャが違うとバイナリ互換ではないという,当たり前田のクラッカー話をした.何を血迷ったかこの地雷を見事に踏んでしまったおかげで,究極のLinux復活法を発見したので報告する.
C101PAでいろんなものをインストールしていたので,C434Tが来てさあ使うぞ,となった時に自分の環境がない,ほしいアプリもない.当たり前だけど.で,この状態から,一刻も早く脱出したいがためにやった力技が,/usr 以下を全部コピってしまえ大作戦.
$ sudo tar czf ~/MyDocs/c101usr.tgz /usr
てな感じでGoogleDriveに/usr以下のtarballを作り,それをC434T側で解いて上書きしてしまうという作戦.
バリバリのバイナリコピーなのだ.で,C434T側で,
$ cd /
$ sudo tar zxf ~/MyDocs/c101usr.tgz
とやってしまったとたん,どんどんC434Tのアーキテクチャであるamd64のバイナリが,C101のアーキテクチャであるarm64のバイナリに上書きされていき,気づいた時には ls すらできない状態に陥ってしまった.
この時点でことの重大さを初めて自覚.あわててコピーを停止したがすでに遅し.shutdownもできない.
うあああああああああ.
ドンづまり.抜き差しならぬ.にっちもさっちもいかぬ.「オワタ感120%」の状況.
こんな状況,ググってもでてこんわ!
で,ふと冷静になって考えた.一番最初,Linux(ベータ版)をインストールするのはどうやったか?
→ 答えは簡単.ChromeOSの設定→LInux(ベータ版)を"ON"にすればいい.
ということは,「もう一度インストールし直すにはどうすればいいのか?」
→ 答えは簡単だった.
- Linux(ベータ版)を"OFF"にしてLinuxを削除する.
- その後,"ON"にしてLinuxを再インストール. これでよかったのだぁぁ.