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 として手で編集するのを省略できるぶん楽ですね。