【ほぼメモ】PineTab 2にArch Linux ARMをフルディスク暗号化でインストールし、キーボード無しでも操作できるようにする。

PineTab 2にArch Linux ARMをインストールしたので誰かの参考になればとメモを残します。
PineTab 2を買うような人なら誰でもできることかもしれませんが。

# 2025/2/10 追記
OSK-SDLは動作するようになっていました。
画面回転がおかしくなった場合、[ここ](https://forum.pine64.org/showthread.php?tid=18322&pid=122044#pid122044)を参考に直します。

## 用意すべきもの
- PineTab 2
- 256GB以上のSDカード(512GBくらいが推奨)
- USBのWi-Fiドングル

## どのようなゴール？
- フルディスク暗号化されたArch Linux ARM
- UIはGNOME
- キーボードなしでディスク復号、ログイン、日本語入力ができるようにする

## 手順

### 作業用のSDカードにArch Linux ARM(KDE)をインストール
SDカードからeMMCを操作します。起動できたら`sudo pacman -Syu --overwrite=*`でアップグレードしておきましょう。このときバージョンによってはUSBのWi-Fiドングルが必要になります。アップグレードが終わったら必要なくなります。

### eMMCにArch Linux ARM(barebone)をインストール
eMMCに基となるArch Linux ARMをフラッシュします。
終わったら電源を切りSDカードを抜いて電源を入れると、eMMCからArch Linux ARMが起動し、パーティションが拡張されます。
また`sudo pacman -Syu`を実行しておきましょう。`nmtui`を使えばコマンド不要でWi-Fiに接続できます。

### eMMCデータの退避
またSDから起動します。
mmcblk0p1とmmcblk0p2をマウント。SDカードに適当なディレクトリを2つ作成し、`sudo rsync -aAXv`でコピーしておきます。

### パーティションの調整
今のままのパーティション構成だと/bootが小さすぎてmkinitcpioに失敗します。
partedを使用してmmcblk0p1を512MB程度に拡張します。私はFAT32でフォーマットしました。**このとき、mmcblk0の最初の32MBには触らずフリースペースとして残しておきます。ここにはU-bootのブートローダが入っているので触ると起動しなくなります。** もし触ってしまったらddで32MBだけコピーしましょう。
残りのスペースはLUKS2で暗号化し、ext4でフォーマットします。ここが/となります。

### eMMCにリストア
先ほど`sudo rsync -aAXv`でコピーしたファイルを再度rsyncを使って2つのパーティションに戻します。終わったらmmcblk0p1はアンマウントします。

### 初期RAMディスクの変更
mmcblk0p2をマウントしたディレクトリに対してarch-chrootします。そして/bootにmmcblk0p1をマウントします。
chrootできたら、/etc/mkinitcpio.confを編集します。HOOKSの`filesystems`の前に`encrypt`を挿入します。終わったら`mkinitcpio -P`で初期RAMディスクを作り直しておきます。

### カーネルパラメータの変更
/bootにcdします。
boot.txtを編集し、`setenv bootargs`に`console=tty0` `console=ttyS0,115200` `cryptdevice=/dev/mmcblk0p2:root` `root=/dev/mapper/root` を追記または変更します。
保存したら`sh ./mkscr`を実行します。

### fstabのUUID修正
/etc/fstabを修正します。/と/bootの設定が記述されているので、実際のUUIDに変更する必要があります。blkidコマンドで確認します。
/は/dev/mapper/から始まるデバイスのUUIDです。mmcblk0p2のUUIDではありません。

### 起動できるか確認する
これでCLI環境でのフルディスク暗号化が整いました。SDカードから起動しているOSをシャットダウンし、eMMCから起動してみます。

### タッチ操作だけで復号できるようにする
このままだとキーボードがないと起動できないゴミなので、OSK-SDLを初期RAMディスクに含めます。/bootの容量が128MBのままだとここで詰みます。
eMMCから起動するとCLIで起動するハズなので、`sudo pacman -S osk-sdl`でOSK-SDLを入れます。
入ったら、/etc/mkinitcpio.confを編集し、HOOKSの`encrypt`の直前に`osk-sdl`と入れます。
保存したら`sudo mkinitcpio -P`を実行します。「limaが無い」とエラーが出ますが無視でいいです。けっこう時間がかかるので待ちます。

### デスクトップ環境をインストールする
私が試した限りでは、タッチのみで日本語入力ができるのはPhoshとGNOMEだけです。PhoshはPCっぽくなさすぎるのでGNOMEを入れましょう。
いきなりGNOMEを入れると派手に中華フォントになるので、先に`sudo pacman -S noto-fonts-cjk`でフォントを入れておきます。
できたら、`sudo pacman -S gnome`でGNOMEをインストールします。
インストールが終了したら、`sudo systemctl enable gdm`します。
また、これは私が悪いだけかもしれませんが、/etc/profile.d/gsk-renderer-shを編集し、`ngl`を`gl`に変えておきます。これをしないと私の環境ではウィンドウが化けます。パッケージ入れ忘れたのかな？
これで再起動してみましょう。

### タッチ操作で日本語入力できるようにする
`sudo pacman -S fcitx5-mozc fcitx5-configtool`でとりあえず日本語入力ツールを揃えます。
そして、GNOMEの拡張機能`Kimpanel`と`GJS OSK`をインストールします。これはブラウザで検索したら出てくるのでかんたんです。
この記事を書いた時点ではGJS OSKはそのままで有効化できません。./.local/share/gnome-shell/extensions/のしたにあるGJS OSKのmetadata.jsonを編集します。バージョンを書いてあるところがあるので、今使っているGNOMEのバージョンを追加しておきます。要は偽装です。
あとはGSJ OSKの設定からレイアウトを大きめにし、Fcitx5の入力メソッドにmozcを追加するなどすれば設定は終わりです。

### 完了！
再起動すると、GJS OSKが有効になっているはずです。GJS OSKでCtrl+Spaceを押すと、日本語入力ができるはずです。あとは好みに合わせてください。(なげやり)
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">GNOMEのタッチ操作で日本語入力<br>めちゃくちゃレスポンス遅いし反応も鈍い <a href="https://t.co/pK1YcRoRDH">pic.twitter.com/pK1YcRoRDH</a></p>&mdash; v34 (@v34103080) <a href="https://twitter.com/v34103080/status/1850841908614201437?ref_src=twsrc%5Etfw">October 28, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>