作業用miniroot作成 -2-

なんか、普通にシェル環境が使えたほうがいいとのリクエストがある。
あと、プリセットのuboot scriptで起動したほうが楽。
ついでに、いくつかカスタム。


そういえば、こんな技もあったな。
http://d.hatena.ne.jp/kinneko/20070126/p2

パスワード空のユーザーを作り、inittabで
1:2345:respawn:/bin/login username
としておくと、gettyを飛ばして動作できる。もちろんジョブコントロールも可能。

バイスを直接さわる作業用なので、rootアカウントをパスワードなしにしておく。

kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/passwd
root::0:0:root:/root:/bin/bash
kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/shadow
root::15533:0:99999:7:::
kinneko@BuildSV:~/ARMinimal$ sudo vi /media/etc/inittab 
#1:2345:respawn:/sbin/getty 38400 tty1
1:2345:respawn:/bin/login root

起動してみる。

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent               
permitted by applicable law.                                                    
-bash: no job control in this shell                                             
root@BuildSV:~# 

うまくきた。


ホスト名はminirootがいいな。
作成環境のを引きずるみたい。

kinneko@BuildSV:~$ sudo vi /media/etc/hostname 
miniroot


inittabで他が生きているので、これも定期的に出る。
これもキモチわるい。

INIT: Id "3" respawning too fast: disabled for 5 minutes
INIT: Id "5" respawning too fast: disabled for 5 minutes
INIT: Id "4" respawning too fast: disabled for 5 minutes
INIT: Id "6" respawning too fast: disabled for 5 minutes
INIT: Id "2" respawning too fast: disabled for 5 minutes

kinneko@BuildSV:~$ sudo vi /media/etc/inittab  
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

止める。


内部eMMCだけでなく、SDCardにもアクセスしたいとリクエスト。
Android環境を見てみる。

brw------- root     root     179,  12 2012-07-12 11:15 mmcblk1p4
brw------- root     root     179,  11 2012-07-12 11:15 mmcblk1p3
brw------- root     root     179,  10 2012-07-12 11:15 mmcblk1p2
brw------- root     root     179,   9 2012-07-12 11:15 mmcblk1p1
brw------- root     root     179,   8 2012-07-12 11:15 mmcblk1
brw------- root     root     179,   4 2012-07-12 11:15 mmcblk0p4
brw------- root     root     179,   3 2012-07-12 11:15 mmcblk0p3
brw------- root     root     179,   2 2012-07-12 11:15 mmcblk0p2
brw------- root     root     179,   1 2012-07-12 11:15 mmcblk0p1
brw------- root     root     179,   0 2012-07-12 11:15 mmcblk0

あれ?
7つまでなのか。

root@miniroot:~# ls -l /dev/mmc*                                                
brw-r--r-- 1 root root 179, 0 Jul 12 06:37 /dev/mmcblk0
brw-r--r-- 1 root root 179, 1 Jul 12 06:37 /dev/mmcblk0p1
brw-r--r-- 1 root root 179, 2 Jul 12 06:38 /dev/mmcblk0p2
brw-r--r-- 1 root root 179, 3 Jul 12 06:38 /dev/mmcblk0p3
brw-r--r-- 1 root root 179, 4 Jul 12 06:38 /dev/mmcblk0p4
brw-r--r-- 1 root root 179, 5 Jul 12 06:38 /dev/mmcblk0p5
brw-r--r-- 1 root root 179, 6 Jul 12 06:38 /dev/mmcblk0p6
brw-r--r-- 1 root root 179, 7 Jul 12 06:38 /dev/mmcblk0p7
brw-r--r-- 1 root root 179, 8 Jul 12 06:39 /dev/mmcblk0p8
root@miniroot:~# rm -rf /dev/mmcblk0p8
root@miniroot:~# mknod /dev/mmcblk1 b 179 8
root@miniroot:~# mknod /dev/mmcblk1p1 b 179 9
root@miniroot:~# mknod /dev/mmcblk1p2 b 179 10
root@miniroot:~# mknod /dev/mmcblk1p3 b 179 11
root@miniroot:~# mknod /dev/mmcblk1p4 b 179 12
root@miniroot:~# mknod /dev/mmcblk1p5 b 179 13
root@miniroot:~# mknod /dev/mmcblk1p6 b 179 14
root@miniroot:~# mknod /dev/mmcblk1p7 b 179 15
root@miniroot:~# mknod /dev/mmcblk1p8 b 179 16
root@miniroot:~# ls -l /dev/mmc*                                                
brw-r--r-- 1 root root 179,  0 Jul 12 06:37 /dev/mmcblk0
brw-r--r-- 1 root root 179,  1 Jul 12 06:37 /dev/mmcblk0p1
brw-r--r-- 1 root root 179,  2 Jul 12 06:38 /dev/mmcblk0p2
brw-r--r-- 1 root root 179,  3 Jul 12 06:38 /dev/mmcblk0p3
brw-r--r-- 1 root root 179,  4 Jul 12 06:38 /dev/mmcblk0p4
brw-r--r-- 1 root root 179,  5 Jul 12 06:38 /dev/mmcblk0p5
brw-r--r-- 1 root root 179,  6 Jul 12 06:38 /dev/mmcblk0p6
brw-r--r-- 1 root root 179,  7 Jul 12 06:38 /dev/mmcblk0p7
brw-r--r-- 1 root root 179,  8 Jul 12 11:25 /dev/mmcblk1
brw-r--r-- 1 root root 179,  9 Jul 12 11:25 /dev/mmcblk1p1
brw-r--r-- 1 root root 179, 10 Jul 12 11:25 /dev/mmcblk1p2
brw-r--r-- 1 root root 179, 11 Jul 12 11:25 /dev/mmcblk1p3
brw-r--r-- 1 root root 179, 12 Jul 12 11:25 /dev/mmcblk1p4
brw-r--r-- 1 root root 179, 13 Jul 12 11:25 /dev/mmcblk1p5
brw-r--r-- 1 root root 179, 14 Jul 12 11:25 /dev/mmcblk1p6
brw-r--r-- 1 root root 179, 15 Jul 12 11:25 /dev/mmcblk1p7
brw-r--r-- 1 root root 179, 16 Jul 12 11:25 /dev/mmcblk1p8

ddできることを確認。


"-bash: no job control in this shell"が出るのも美しくない。
美しくないばかりか、コマンドを途中で殺せないので不便。
http://d.hatena.ne.jp/kinneko/20081029/p7
/dev/consoleを引き継いでいる以上は無理か。
この対策にはいくつか例がある。
原始的な方法だとこんなの。

1:2345:respawn:/bin/login -f root </dev/ttyS0 >/dev/ttyS0 2>&1

何も道具がいらない。
gettyで外部プログラムを起動する方法。
cで書くのと、シェルスクリプトの2つ。

T0:23:respawn:/sbin/getty -l /usr/local/bin/autologin -n -L ttyS0 115200 vt102

autologin.cの例。

#include <unistd.h>

int main(void) {
   execlp("login", "login", "-f", "USERNAME", NULL);
}

cc autologin.c -o autologinと普通にコンパイル
シェルスクリプトの例。

vi /usr/local/bin/autologin
#!/bin/sh
exec /bin/login -f root

最後はsuloginを使う方法。

T0:23:respawn:/sbin/getty -l /sbin/sulogin -n -L ttyS0 115200 vt102

getty外部プログラムとシェルスクリプトの組み合わせを採用。

kinneko@BuildSV:~$ sudo vi /media/usr/local/bin/autologin
kinneko@BuildSV:~$ sudo chmod +x /media/usr/local/bin/autologin
kinneko@BuildSV:~$ sudo vi /media/etc/inittab 
T0:23:respawn:/sbin/getty -l /usr/local/bin/autologin -n -L ttyS0 115200 vt102

ダメだ...
autologin単体では動くのだけどな。
原始的な方法を試してみる。

/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
/bin/sh: cannot open /dev/ttyS0: No such file                                   
INIT: Id "1" respawning too fast: disabled for 5 minutes                        
INIT: no more processes left in this runlevel 

あらま。

root@miniroot:~# mknod /dev/ttyS0 c 4 64                                        
root@miniroot:~# ls -l /dev/ttyS0                                               
crw-r--r-- 1 root root 4, 64 Jul 12 11:39 /dev/ttyS0

うまくいった。