有馬総一郎のブログ

(彼氏の事情)

2024年02月03日 10:06:50 JST - 7 minute read - Linux

ASUS Chromebook Flip C101PAにArch Linuxをインストールする

Chomebookの名機として名高いASUS Chromebook Flip C101PA、スポート期限は2023年8月1と期限切れとなっている、このまま使い続けるのはリスクがある。

ASUS Chromebook Flip C101PA
ASUS Chromebook Flip C101PA

ChromebookはUSBブートが難しい

じゃあ、 インストールを準備する - ChromeOS Flex ヘルプをインストールしようにも、ChromeOS FlexによるUSBブートすら認めなくてインストール出来ない。

というか、何故かChromebookはChromeOS以外のブート起動を許しておらず、サポート切れになったらLinuxで使えばいいじゃん、みたいなことを許していない。ChromeOSのままLinuxを使う方法は、 Chromebook で Linux をセットアップする - Chromebook ヘルプとChromeOSの機能として備わっているが、完全に入れ替えるのは難しい。

MrChromebox.techが詳しいが、同サイトの Supported Devicesに載ってないものは、基本、サポート切れのChromebookの延命出来ないと思った方が良いかも知れない。

Debian, Arch Linuxならインストールが可能

ただ、C101PAは延命処置が可能である。

と、恐らくブート領域を偽装?してDebianやArch Linuxをインストール出来る。実は去年試してどちらも成功したのだけど、記事にしなかった。何故か、それはどちらも不安定で、そのまま使用するには厳しかったからだ。

一番上の Cadmiumphoshというスマホ、タブレットっぽいデスクトップ環境と、 swayは真逆にi3wのようなタイル型デスクトップ環境を選択してインストールできる。しかし、どちらも初めての環境で日本語入力環境にも上手くできない…

なにより致命的なのがスリープすると復帰できない。これが痛すぎて、上二つのDebianはパスだった2

三つめ、一番下のArch Linuxは、準備されるのがCLI環境だけなので、自分でデスクトップ環境を入れるのだけど、やはりエラーがたまに出たり不安定。

そこまで苦労してデスクトップ環境を準備できても、やはりC101PAはLinuxのデスクトップ環境であっても、もはやスペック不足。ということで、一年ぐらい放置していたが、2月になって、再度インストールしてみた。

何故か、デスクトップ環境を入れずに、本当にキングジム ポメラみたいにすれば良いと思った。テキストしか映らない環境なら、本当に執筆に集中するしかなくなる。

デベロッパーモード

まずはデベロッパーモードにする。

  1. 電源を切る

  2. ESC+更新ボタンを両方押しながら電源を付ける

  3. OS回復画面が表示されたらCtrl+dを押す

  4. 「OSの確認機能をオフにする(デベロッパーモードにする)」か確認されるので、Enter押す

    Chromebook デベロッパーモード移行
  5. 再起動してデベロッパーモードに移行が始まる

    Chromebook デベロッパーモード移行
    Chromebook デベロッパーモード移行

  6. デベロッパーモードに移行が完了する

  7. 再起動する

外部ストレージからのブートを可能にする

  1. デベロッパーモードでは、電源オンにしたときにCtrl+d押さないとChromeOSが起動しなくなったので、Ctrl+dを押してChromeOSを起動する

    Chromebook確認機能オフ
  2. ChromeOSの初期設定画面が始まるので、ゲストモードでも良いから、初期設定を完了する

    Chromebook初期設定画面
  3. Ctrl+Alt+tを押して crosh shellを起動する

    crosh shell起動
  4. shellを入力してEnterを押してbash shellを起動する

  5. sudo crossystem dev_boot_usb=1 dev_boot_signed_only=0を入力する3

  6. 再起動する

Arch Linuxインストール手順

やるなら、マイクロSDカードに挿入するより、アダプタを用意してUSB-Aに挿入した方がやりやすいと思う。というのもマイクロSDカード挿入だとデバイスパスが /dev/mmcblk1p2になってWikiと異なってしまうので。

また、SDカードへのインスールはChromebook上でなくても出来るが、以下はChromebookでcrosh shellからbash shellを起動して行なった。

  1. SDカードをアンマウントする

    sudo umount /dev/sda*

  2. GPTパーティションテーブルを作成する。

    1. sudo fdisk /dev/sda
    2. fdiskプロンプトでgを押し、次にwを押す
  3. ChromeOS固有のGPTパーティションを作成する

    1. sudo cgpt create /dev/sda
    2. sudo cgpt add -i 1 -t kernel -b 8192 -s 65536 -l Kernel -S 1 -T 5 -P 10 /dev/sda
  4. rootfs4パーティションを作成する

    1. sudo cgpt show /dev/sda

    2. 上のコマンドの下から二番目 Sec GPT Tableの開始サイズを記憶しておく

    3. sudo cgpt add -i 2 -t data -b 73728 -s `expr xxxxx - 73728` -l Root /dev/sda

      xxxxxにSec GPT Tableの開始サイズを代入して実行する

  5. パーティションを追加して、rootパーティションを作成する

    1. sudo partx -a /dev/sda

      エラーが出ても/dev/sda1/dev/sda2と分かれば良し

    2. sudo mkfs.ext4 /dev/sda2

      sda22 なので注意

  6. C101PA用(ARMv8)のArch Linux ARMをSDカードに展開する

    1. cd /tmp
    2. curl -LO http://os.archlinuxarm.org/os/ArchLinuxARM-gru-latest.tar.gz
    3. mkdir root
    4. sudo mount /dev/sda2 root
    5. tar -xf ArchLinuxARM-gru-latest.tar.gz -C root
  7. カーネルをカーネルパーティションに出力する

    sudo dd if=root/boot/vmlinux.kpart of=/dev/sda1

    sda11 なので注意

  8. SDカードアンマウント

    1. sudo umount root
    2. sync

以上、SDカードへのArch Linuxの書き込みが完了。

作業ログ

以下、作業ログ

chronos@bob-rev4 / $ sudo umount /dev/sda*
chronos@bob-rev4 / $ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

The device contains 'vfat' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

Command (m for help): g

Created a new GPT disklabel (GUID: D1D01F72-EC00-504D-B8A8-3B279F74E7D2).
The device contains 'vfat' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

chronos@bob-rev4 / $ sudo cgpt create /dev/sda
chronos@bob-rev4 / $ sudo cgpt add -i 1 -t kernel -b 8192 -s 65536 -l Kernel -S 1 -T 5 -P 10 /dev/sda
chronos@bob-rev4 / $ sudo cgpt show /dev/sda
       start        size    part  contents
           0           1          PMBR
           1           1          Pri GPT header
           2          32          Pri GPT table
        8192       65536       1  Label: "Kernel"
                                  Type: ChromeOS kernel
                                  UUID: 06B47598-646F-D549-886F-0F2B0AA6FEF6
                                  Attr: priority=10 tries=5 successful=1 error_counter=0 
    62333919          32          Sec GPT table
    62333951           1          Sec GPT header
chronos@bob-rev4 / $ sudo cgpt add -i 2 -t data -b 73728 -s `expr 62333919 - 73728` -l Root /dev/sda
chronos@bob-rev4 / $ sudo partx -a /dev/sda 
partx: /dev/sda: error adding partitions 1-2
chronos@bob-rev4 / $ ls /dev/sda           
sdd   sdd1  sdd2  
chronos@bob-rev4 / $ sudo mkfs.ext4 /dev/sda2
mke2fs 1.47.0 (5-Feb-2023)
Found a PMBR partition table in /dev/sda2
Proceed anyway? (y,N) y
Creating filesystem with 7773303 4k blocks and 1945888 inodes
Filesystem UUID: 3a6d862e-614d-4e16-8ced-d604b8007665
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): 
done
Writing superblocks and filesystem accounting information: done   

chronos@bob-rev4 / $ 
chronos@bob-rev4 / $ cd /tmp
chronos@bob-rev4 /tmp $ curl -LO http://os.archlinuxarm.org/os/ArchLinuxARM-gru-latest.tar.gz


chronos@bob-rev4 /tmp $ ls -l ArchLinuxARM-gru-latest.tar.gz 
-rw-r--r--. 1 chronos chronos 407454003 Feb  1 13:55 ArchLinuxARM-gru-latest.tar.gz
chronos@bob-rev4 /tmp $ rm -rf root 2>/dev/null
chronos@bob-rev4 /tmp $ mkdir root
chronos@bob-rev4 /tmp $ sudo mount /dev/sda2 root
chronos@bob-rev4 /tmp $ sudo tar -xf ArchLinuxARM-gru-latest.tar.gz -C root
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.security.capability'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.security.capability'
chronos@bob-rev4 /tmp $ sudo dd if=root/boot/vmlinux.kpart of=/dev/sda1
44784+0 records in
44784+0 records out
22929408 bytes (23 MB, 22 MiB) copied, 15.0869 s, 1.5 MB/s
chronos@bob-rev4 /tmp $ sudo umount root
chronos@bob-rev4 /tmp $ sudo sync

Wi-Fi機器を認識しない

これで、マイクロSDカードを差し込んだまま再起動して、Ctrl+uを押してブート起動する。

これで、rootログインしてユーザ作るなりパッケージをインストールすれば良いのだけど…

しかし、Wi-Fi機器を認識しないというトラブルに遭遇する。linux-firmware-marvellをインストールすれば良いという回答があるが、インストールしても認識しない…詰んだ…去年の2023年は認識したはずなのに…ということで去年のを持ってくる。

Index of /aarm/repos/2022/12/31/os/から linux-firmware-marvell-20231110.74158e7a-1-any.pkg.tar.xz をダウンロードしてpacman -U ./linux-firmware-marvell-20231110.74158e7a-1-any.pkg.tar.xzして、再起動して認識するようになった…やれやれ…

How to Prevent Packages From Getting Updated in Arch Linuxを参考にlinux-firmware-marvellがアップグレードしないようにする。

/etc/pacman.conf

IgnorePkg = linux-firmware-marvell

これでOK。

pacman キーリングを初期化

pacman-key --init
pacman-key --populate archlinuxarm

pacman-key --populate archlinuxarm最初エラーになったが、良く分からんがpacman-key --refresh-keyしたら?出来るようになった。

そして、pacman -S archlinux-keyringでパッケージ更新・インストールの準備が整う。さあ、これからC101PAをポメラ化していくぞ!

pacman -Syu

  1. 自動更新ポリシー - Chrome Enterprise and Education ヘルプ ↩︎

  2. 更にリポジトリが古くて、/etc/apt/sources.list を書き換える必要があるように思えた。 ↩︎

  3. Wikiにはsudo suroot になれとあるが、私の環境では出来なかった ↩︎

  4. rootfsとbootfsについて #初心者 - Qiita ↩︎