BerryBoot 用のBoot img 作成でドはまり

かなり、ハマッてしまったのでポイントを後ほど、メモしておくことにします。

何にはまったかっていうと、Fedora21 ~ 22 の各種ARM 用のイメージファイルを BerryBoot の img にする手順がうまくいかなくて、以下のようになって、Kernel panic でBoot しないわけで。くじけそうになった最後にやっとできました。

 

オフィシャルの手順は、以下のように紹介されています。

Adding your own custom operating systems to the menu

$ sudo kpartx -av image_you_want_to_convert.img
add map loop0p1 (252:5): 0 117187 linear /dev/loop0 1
add map loop0p2 (252:6): 0 3493888 linear /dev/loop0 118784
$ sudo mount /dev/mapper/loop0p2 /mnt
$ sudo sed -i ‘s/^\/dev\/mmcblk/#/g’ /mnt/etc/fstab
$ sudo mksquashfs /mnt converted_image_for_berryboot.img -comp lzo -e lib/modules
$ sudo umount /mnt
$ sudo kpartx -d image_you_want_to_convert.img

実際にやってみると、まぁ、いろいろあるのはいつものこと。

ポイントは、ルートファイルシステム直下のシンボリックリンクを実態にして、逆側から張りなおすこと!そうしないと、以下のようになって、RAM ディスクの kernel から、動かす img の ファイルシステムがマウントできません。後ほど、手順をつけておきます。次やるとき、絶対忘れる自信があるので。

写真

とりあえず出来たので画像メモを貼り付け。

写真_2

で、各種初期設定をすればOK

写真_1

もうね、疲れました。が、ARM の IoT デバイスのノウハウが貯まったということで、少し前進。各ディストリビューションも ARM 用のオフィシャルイメージの準備もしてきているわけですし。野良イメージは怖いので、とりあえずはオフィシャルのを使えるようになったということで、満足。

Fedora_ARM さて、QKして気力、体力も復活したので、忘れないうちにメモしておきます。

オフィシャルの ARM イメージは上のリンクから辿って、以下のようなファイルが落とせます。ファイルサイズの大きい順では、

Size byte   M,GB  FineName
———-  —-  —————————————–
1194022996  1.1G  Fedora-Workstation-armhfp-22-3-sda.raw.xz
1129186356  1.1G  Fedora-KDE-armhfp-22-3-sda.raw.xz
837507064  799M  Fedora-Xfce-armhfp-22-3-sda.raw.xz
761534064  726M  Fedora-LXDE-armhfp-22-3-sda.raw.xz
552451864  527M  Fedora-SoaS-armhfp-22-3-sda.raw.xz
427291172  407M  Fedora-Server-armhfp-22-3-sda.raw.xz
301285980  287M  Fedora-Minimal-armhfp-22-3-sda.raw.xz

となります。

今までは、GUI環境などはまったく無視してきたので、どの環境がよいのかはわかりませんが、下2つはサーバ用途ですので、今回はFedora の代表的な顔である、Workstation を入れてみたいと思います。まぁ、最後は結局全部入れることになるわけですが。

 

さて、今回の手順は、BerryBoot の インストールできる状態のイメージの作成ということですが、今回は、さらに iscsi boot する環境でそれをテストしてみたいと思います。とは、言っても通常のSDカードやUSBデバイス(USBメモリやUSB HDD)に入れるのとそれほど変わりはありません。

前提条件をまとめますと以下のようになります。

今回の環境

・BerryBoot で、ISCSI Bootの SCSI デバイスにルートを入れる

・BerryBoot 用のimg があれば、インストールはBerryBoot のインスーラーがいれてくれる

・ARM 物理環境は、RasPi2 + 2GB SDCard (実際は250Mもあれば足ります)+ LAN (WiFi でもいけるようです)

・iSCSI のターゲットは、FreeNAS (この説明は除外)で、仮想環境で提供。本体はosx

・img 作成には、ubuntu 12 を使用

作業の流れは、以下のようになります。

1) FedoraのARMオフィシャルサイトより、イメージを取得

2) 圧縮されているので展開し、img の状態に。

3) img の中にあるルートパーティションをマウント

4) ルート直下のシンボリックリンクを修正

5) fstab をコメントアウト

6) lzo 圧縮した BerryBoot 用の img を作成

7) 後処理

手順 1

ubuntu上で、作業します。

オフィシャルサイトより、イメージをゲット。全部 root でやってますので、sudo は付けていません。

# wget https://download.fedoraproject.org/pub/fedora/linux/releases/22/Workstation/armhfp/Images/Fedora-Workstation-armhfp-22-3-sda.raw.xz

CHECKSUM

# sha256sum Fedora-Workstation-armhfp-22-3-sda.raw.xz

※sum を確認

手順 2

ファイルは何なのか確認。

# file Fedora-Workstation-armhfp-22-3-sda.raw.xz
Fedora-Workstation-armhfp-22-3-sda.raw.xz: XZ compressed data

XZ 圧縮なので、xzcat で展開して、img とします。

# xzcat -v Fedora-Workstation-armhfp-22-3-sda.raw.xz > Fedora-Workstation-armhfp-22-3-sda.img

速ければ、1分ちょいくらいです。

手順 3

img ファイルの中のルートファイルシステムをマウントします。kpartx だと簡単ですが、無い環境用に、手動でやる方法も書いておきます。kpartx -a で、イメージファイルの中のパーティションをブロックデバイスに割付ます。

# kpartx -av Fedora-Workstation-armhfp-22-3-sda.img
add map loop0p1 (252:0): 0 999424 linear /dev/loop0 2048
add map loop0p2 (252:1): 0 1000482 linear /dev/loop0 1001472
add map loop0p3 (252:2): 0 9765625 linear /dev/loop0 2001954★ここをマウント

# mkdir /mnt/fedora22
# mount /dev/mapper/loop0p3 /mnt/fedora22/

確認します。

# ll /mnt/fedora22/
合計 92
dr-xr-xr-x.  18 root root  4096  5月 22 04:00 ./
drwxr-xr-x    3 root root  4096  7月 19 09:39 ../
lrwxrwxrwx.   1 root root     7  8月 16  2014 bin -> usr/bin/
drwxrwxr-x.   2 root root  4096  5月 22 03:58 boot/
drwxr-xr-x.   4 root root  4096  5月 22 04:14 dev/
drwxr-xr-x. 126 root root 12288  5月 22 04:28 etc/
drwxr-xr-x.   2 root root  4096  8月 16  2014 home/
lrwxrwxrwx.   1 root root     7  8月 16  2014 lib -> usr/lib/
drwx——.   2 root root 16384  5月 22 03:58 lost+found/
drwxr-xr-x.   2 root root  4096  8月 16  2014 media/
drwxr-xr-x.   2 root root  4096  8月 16  2014 mnt/
drwxr-xr-x.   2 root root  4096  8月 16  2014 opt/
drwxrwxr-x.   2 root root  4096  5月 22 03:58 proc/
dr-xr-x—.   2 root root  4096  5月 22 04:28 root/
drwxr-xr-x.  32 root root  4096  5月 22 04:12 run/
lrwxrwxrwx.   1 root root     8  8月 16  2014 sbin -> usr/sbin/
drwxr-xr-x.   2 root root  4096  8月 16  2014 srv/
drwxrwxr-x.   2 root root  4096  5月 22 03:58 sys/
drwxrwxrwt.   7 root root  4096  5月 22 04:28 tmp/
drwxr-xr-x.  11 root root  4096  5月 22 04:00 usr/
drwxr-xr-x.  21 root root  4096  5月 22 04:12 var/

kpartx が無い場合は、以下で。

        ▼パーティションのサイズを調べて、個別にマウントさせる

parted Fedora-Xfce-armhfp-22-3-sda.img

    GNU Parted 2.3
    /nfs/Fedora-Xfce-armhfp-22-3-sda.img を使用
    GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
    (parted) u★
    単位は?  [compact]? b★
    (parted) print★
    モデル:  (file)
    ディスク /nfs/Fedora-Xfce-armhfp-22-3-sda.img: 4743757824B
    セクタサイズ (論理/物理): 512B/512B
    パーティションテーブル: msdos

    番号  開始         終了         サイズ       タイプ   ファイルシステム  フラグ
     1    1048576B     512753663B   511705088B   primary  ext3
     2    512753664B   1025000447B  512246784B   primary  linux-swap(v1)
     3    1025000448B  4525000191B  3499999744B  primary  ext4
          ^^^^^^^^^^
    (parted) q★
    root@ubu:/nfs# 

    # mount -o loop,offset=1025000448 Fedora-Xfce-armhfp-22-3-sda.img /mnt/fedora22
                           ^^^^^^^^^^※ B は取ってね
    # df -h
    Filesystem              Size  Used Avail Use% Mounted on
    ::
    /dev/loop1              3.2G  2.3G  843M  74% /mnt/fedora22

手順 4

ルート直下のシンボリックリンクを修正します。理屈はよくわかっていませんが、逆から張りなおすことでとりあえずブートしています。lib と bin と sbin を消して、実体を移動させ、逆からシンボリックを張っています。