cdebootstrapを使ってRaspberry Pi 2にDebain jessie armhf をインストールする

今回もまたNFSrootを使用します。
まずはcdebootstrapでNFSでexportするディレクトリにroot file system の元を作成します。

 sudo mkdir /export/armhf_jessie
 sudo cdebootstrap --foreign --arch armhf --include=openssh-server,ntp,ca-certificates,vim,sudo jessie /export/armhf_jessie/ http://http.debian.net/debian/

次にここからRaspberry Pi 2を起動するようにします。
Raspberry Pi 2のSDカードの/boot/cmdline.txt は以下のようにNFSサーバの/export/armhf_jessie をrootに指定します。

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 root=/dev/nfs nfsroot=192.168.0.6:/export/armhf_jessie rw ip=dhcp elevator=deadline rootwait

前回のdebootstrapを使ったときと異なり、今回はinit=/bin/sh を追加する必要がありません。
/sbin/init が置き換えられていて、cdebootstrapのsecond stageが自動で実行されるようになっています。

しかし、実際に起動してみると以下のようなカーネルパニックを起こしました。

[    5.544858] VFS: Mounted root (nfs filesystem) on device 0:15.
[    5.552191] devtmpfs: mounted
[    5.555929] Freeing unused kernel memory: 416K (80776000 - 807de000)
trap: ERR: bad trap
[    5.905671] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100
[    5.905671] 
[    5.914815] CPU: 0 PID: 1 Comm: init Not tainted 4.1.7-v7+ #2
[    5.920551] Hardware name: BCM2709
[    5.923987] [<80018440>] (unwind_backtrace) from [<80013e0c>] (show_stack+0x20/0x24)
[    5.931734] [<80013e0c>] (show_stack) from [<80558548>] (dump_stack+0x98/0xe0)
[    5.938959] [<80558548>] (dump_stack) from [<8055473c>] (panic+0xa4/0x204)
[    5.945836] [<8055473c>] (panic) from [<8002937c>] (do_exit+0xa0c/0xa64)
[    5.952536] [<8002937c>] (do_exit) from [<80029470>] (do_group_exit+0x50/0xcc)
[    5.959755] [<80029470>] (do_group_exit) from [<8002950c>] (__wake_up_parent+0x0/0x30)
[    5.967670] [<8002950c>] (__wake_up_parent) from [<8000f980>] (ret_fast_syscall+0x0/0x54)
[    5.975847] CPU2: stopping
[    5.978559] CPU: 2 PID: 0 Comm: swapper/2 Not tainted 4.1.7-v7+ #2
[    5.984727] Hardware name: BCM2709
[    5.988141] [<80018440>] (unwind_backtrace) from [<80013e0c>] (show_stack+0x20/0x24)
 ...

trap: ERR がまずそうですが、調べてみるとこれはbashの拡張で、sh(dash)では使えないことがわかりました。
/sbin/cdeboostrap-foregin を修正します。
また、nfsrootのせいかrootfsをremountするところでエラーが発生するので、これを無視するようにしました。
そして、rootfile systemの構築はできるようになったのですが、rootのパスワードが未設定なのでログインできません。
なのでついでにそのシェルスクリプトの中でuserというsudo可能なユーザーを登録するようにしました。
これがそのpatchです。
cdebootstrap-foregin.patch

これで起動するとroot file systemを構築した後にuserというユーザーのパスワード入力のプロンプトが出ます。そしてオリジナルの/sbin/initが起動してログインプロンプトが出るので、先ほど登録したuserでログインできます。
そして、/etc/resolv.conf や/etc/hostname, /etc/hosts などの編集を行ってください。
cdebootstrapでの最初のブートのブートログ

debootstrapと比べるとcdebootstrapの方がinit=/bin/sh として手で編集するのを省略できるぶん楽ですね。