# Chromebook C101PAにFedoraをインストールする(失敗)
###### tags: `Linux` `Install` `Chromebook`
実施日: 2018年04月28日
## 参考サイト
- https://fedoraproject.org/wiki/Architectures/ARM/Chromebook
## 注意事項
- ファイル名、デバイス名などは出力に合わせて適宜修正すること
## 作業ログ
今回は、`Fedora-Workstation-armhfp-27-1.6-sda.raw.xz`を利用した。
適当なフォルダにファイルを移動した後に、以下のコマンドを実行していく。
まずは、ダウンロードしたディスクイメージからファイルをrootfsのみ取り出す。
```shell
# 解凍
$ unxz -v Fedora-Workstation-armhfp-27-1.6-sda.raw.xz
# loop deviceにmap
$ sudo kpartx -av Fedora-Workstation-armhfp-27-1.6-sda.raw
# rootfsのみ取り出す
$ sudo dd if=/dev/mapper/loop0p4 of=Fedora-Workstation-armhfp-27-1.6-rootfs.ext4 conv=fsync
# fsck
$ sudo e2fsck -f Fedora-Workstation-armhfp-27-1.6-rootfs.ext4
```
次に、roofsに対して新しいUUIDを割り振る。
```shell
$ UUID=`uuidgen`
$ sudo tune2fs -U "${UUID}" -L "ROOTFS" Fedora-Workstation-armhfp-27-1.6-rootfs.ext4
```
次に、ディスク全体のイメージの作成を行う。
```shell
$ truncate --size=10GiB Chromebook.raw
$ sgdisk -a 8192 -n 1:0:+24M -t 1:7F00 -c 1:"KERN-A" -A 1:=:0x011F000000000000 \
-n 2:0:+24M -t 2:7F00 -c 2:"KERN-B" -A 2:=:0x011A000000000000 \
-n 3:0:+1G -t 3:8300 -c 3:"BOOT" \
-n 4:0:+1G -t 4:8200 -c 4:"SWAP" \
-n 5:0:0 -t 5:8300 -c 5:"ROOTFS" Chromebook.raw
$ sudo kpartx -avg Chromebook.raw
$ sudo dd if=Fedora-Workstation-armhfp-27-1.6-rootfs.ext4 of=/dev/mapper/loop2p5 bs=2M conv=fsync
$ sudo e2fsck -fy /dev/mapper/loop2p5
$ sudo resize2fs -f /dev/mapper/loop2p5
```
ディスクイメージにswapと`/boot`を作成する。
```shell
$ UUID_SWAP=`uuidgen`
$ sudo mkswap -U "${UUID_SWAP}" -L "SWAP" /dev/mapper/loop2p4
$ UUID_BOOT=`uuidgen`
$ sudo mkfs.ext4 -m0 -U "${UUID_BOOT}" -L "BOOT" /dev/mapper/loop2p3
```
マウントをしてfstabをセットする。
```shell
$ sudo mount /dev/mapper/loop2p5 /mnt
$ sudo mount /dev/mapper/loop2p3 /mnt/boot
$ sudo su -c "cat <<-EOF > /mnt/etc/fstab
UUID=$UUID / ext4 defaults 1 1
UUID=$UUID_SWAP swap swap defaults 0 0
UUID=$UUID_BOOT /boot ext4 defaults 0 2
EOF"
```
アンマウント。
```shell
$ sudo umount --recursive /mnt
```
SDカードへ書き込み。
```shell
$ sudo dd if=Chromebook.raw of=/dev/sde bs=2M conv=fsync
$ sudo partprobe /dev/sde
```
GPTのバックアップヘッダーをストレージの最後へ移動させて、rootfsを最大まで拡張する。
```shell
$ sudo sgdisk -a8192 -e -d5 -n5:0:0 -t5:8300 -c5:'ROOTFS' -p /dev/sde
$ sudo e2fsck -f /dev/sde5
$ sudo resize2fs /dev/sde5
```
作成したSDカードを、DevelopperModeへ変更したChromeOSへ接続し、Chromeを起動した状態で`Ctrl+Alt+T`と打鍵しcroshを起動後`shell`コマンドを実行し`bash`へ入る。
デフォルト状態でのlsblkとby-uuidでの認識状況は以下のような状態。
```shell
chronos@localhost /media/removable/BOOT $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 60.4G 0 disk
├─sda1 8:1 1 24M 0 part
├─sda2 8:2 1 24M 0 part
├─sda3 8:3 1 1G 0 part /media/removable/BOOT
├─sda4 8:4 1 1G 0 part
└─sda5 8:5 1 58.3G 0 part /media/removable/ROOTFS
loop0 7:0 0 3.1G 0 loop
└─encstateful 254:1 0 3.1G 0 dm /mnt/stateful_partition/encrypted
loop1 7:1 0 429.3M 1 loop /run/containers/android_jyYgLm/root
loop2 7:2 0 9.1M 1 loop /run/containers/android_jyYgLm/root/vend
loop3 7:3 0 4K 1 loop /opt/google/containers/arc-removable-med
loop4 7:4 0 4K 1 loop /opt/google/containers/arc-sdcard/mountp
loop5 7:5 0 4K 1 loop /opt/google/containers/arc-obb-mounter/m
loop6 7:6 0 429.3M 1 loop
loop7 7:7 0 9.1M 1 loop
loop8 7:8 0 4K 1 loop
zram0 253:0 0 3.7G 0 disk [SWAP]
mmcblk0rpmb 179:48 0 4M 0 disk
mmcblk0boot0 179:16 0 4M 1 disk
mmcblk0boot1 179:32 0 4M 1 disk
mmcblk0 179:0 0 14.7G 0 disk
├─mmcblk0p1 179:1 0 10.5G 0 part /mnt/stateful_partition
├─mmcblk0p2 179:2 0 16M 0 part
├─mmcblk0p3 179:3 0 2G 0 part
├─mmcblk0p4 179:4 16M 0 part
├─mmcblk0p5 179:5 2G 0 part
├─mmcblk0p6 179:6 512B 0 part
├─mmcblk0p7 179:7 512B 0 part
├─mmcblk0p8 179:8 16M 0 part /usr/share/oem
├─mmcblk0p9 179:9 512B 0 part
├─mmcblk0p10 179:10 512B 0 part
├─mmcblk0p11 179:11 8M 0 part
└─mmcblk0p12 179:12 16M 0 part
chronos@localhost /media/removable/BOOT $ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx. 1 root root 10 Apr 28 22:22 00eb0aa5-ba2f-4745-8e3a-c33702074d96 -> ../../sda3
lrwxrwxrwx. 1 root root 15 Apr 28 14:48 22335af9-2f02-474b-878c-c8e923f4b2e2 -> ../../mmcblk0p1
lrwxrwxrwx. 1 root root 15 Apr 28 14:48 55e9e69f-a65b-48fe-a476-90f22a110fce -> ../../mmcblk0p8
lrwxrwxrwx. 1 root root 10 Apr 28 22:22 683229af-33ce-4e37-9205-e59c45151c48 -> ../../sda5
lrwxrwxrwx. 1 root root 16 Apr 28 14:48 C5CA-7E15 -> ../../mmcblk0p12
lrwxrwxrwx. 1 root root 10 Apr 28 14:48 cde2b005-f344-4586-b1cd-50a5732e44c2 -> ../../dm-1
lrwxrwxrwx. 1 root root 10 Apr 28 22:22 edabc97d-359b-46f4-be4d-4dc96324c69c -> ../../sda4
```
カーネルのインストールのため、以下のコマンドを実行する。
```shell
$ cd /media/removable/BOOT/
$ sudo dd if=/dev/mmcblk0p2 of=/tmp/kern-a.blob conv=fsync
$ cat <<-EOF | sudo tee /media/removable/BOOT/kcmdline
console=tty1 debug verbose root=PARTUUID=683229af-33ce-4e37-9205-e59c45151c48 rootwait rw lsm.module_locking=0
EOF
$ sudo openssl genrsa -F4 -out fedora_2048.pem 2048
$ sudo openssl req -batch -new -x509 -key fedora_2048.pem -out fedora_2048.crt
$ sudo sh -c "dumpRSAPublicKey -cert fedora_2048.crt > fedora_2048.keyb"
$ sudo vbutil_key --pack fedora.vbpubk --key fedora_2048.keyb --algorithm 4 --version 1
$ sudo vbutil_key --pack fedora.vbprivk --key fedora_2048.pem --algorithm 4
$ sudo rm -f fedora_2048.{pem,crt,keyb}
$ sudo vbutil_keyblock --pack fedora.keyblock --datapubkey fedora.vbpubk --flags 15
$ sudo vbutil_kernel --oldblob /tmp/kern-a.blob \
--repack /media/removable/BOOT/chromeos-kernel.img \
--config /media/removable/BOOT/kcmdline \
--keyblock /media/removable/BOOT/fedora.keyblock \
--signprivate /media/removable/BOOT/fedora.vbprivk \
--arch arm --version 1
$ sudo vbutil_kernel --verbose --verify /media/removable/BOOT/chromeos-kernel.img
$ sudo dd if=/media/removable/BOOT/chromeos-kernel.img of=/dev/sda1
$ sudo dd if=/media/removable/BOOT/chromeos-kernel.img of=/dev/sda2
```
モジュールとファムウェアーをコピーする。
```shell
$ sudo cp -r /lib/modules/* /media/removable/ROOTFS/lib/modules/.
$ sudo cp -r /lib/firmware/* /media/removable/ROOTFS/lib/firmware/.
```
外部USBから起動できるようにChromeOSの設定を変更する。
```shell
$ sudo crossystem dev_boot_usb=1
```
ChromeOSをを再起動させ、`Ctrl+U`にて、USBから起動を行う。
しかし、起動しない。SDカードへのアクセスは見受けられるが、画面は真っ黒のままだった。
悲しいなぁ。
明日、別途ArchLinuxのインストールを試みる。