summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-08-16 04:09:15 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-08-16 04:09:15 +0200
commit828f63711b7fd0c735d083e4b06b8937e846a830 (patch)
treeb032cf80db7fb4a313dac8863a4f7b04ee56faa4
parent9884f5f0ed65d5bb5789bd323484237ba16ce855 (diff)
downloadplan9front-828f63711b7fd0c735d083e4b06b8937e846a830.tar.xz
9boot: list known filesystem images on usb stick as boot filesystems
-rw-r--r--rc/bin/nusbrc1
-rwxr-xr-xsys/src/9/boot/local.rc61
-rw-r--r--sys/src/9/boot/nusbrc15
3 files changed, 36 insertions, 41 deletions
diff --git a/rc/bin/nusbrc b/rc/bin/nusbrc
index 85f9e768d..a9efcf8a6 100644
--- a/rc/bin/nusbrc
+++ b/rc/bin/nusbrc
@@ -25,6 +25,7 @@ if(! bind -a '#u' /dev)
}
}
fn detach {
+ # handled /sys/src/9/boot/nusbrc
}
rc < '#σ/usb/usbevent' &
}
diff --git a/sys/src/9/boot/local.rc b/sys/src/9/boot/local.rc
index 2808a9c0b..e67550691 100755
--- a/sys/src/9/boot/local.rc
+++ b/sys/src/9/boot/local.rc
@@ -2,24 +2,33 @@
fn showlocaldevs{
echo local devices found:
- for(d in /dev/sd*){
- if(test -r $d/ctl){
- q=`{sed 's,(inquiry|geometry),\
+ for(d in /dev/sd*) if(test -r $d/ctl){
+ q=`{sed 's,(inquiry|geometry),\
\1,g' $d/ctl | grep inquiry}
- echo $d':' $q(2-)
- for(i in `{ls -p $d}){
- p=$d/$i
- switch($i){
- case ctl raw log
- ;
- case 9fat plan9 nvram
- echo $p
- case *
- t=`{fstype $p}
- if(~ $#bootargs 0 && ! ~ $t '')
- bootargs=local!$p
- echo $p $t
- }
+ echo $d':' $q(2-)
+ for(i in `{ls -p $d}){
+ p=$d/$i
+ switch($i){
+ case ctl raw log
+ ;
+ case 9fat plan9 nvram
+ echo $p
+ case *
+ t=`{fstype $p}
+ if(~ $#bootargs 0 && ! ~ $t '')
+ bootargs=local!$p
+ echo $p $t
+ }
+ }
+ }
+ for(d in /shr/sd*) if(test -d $d) {
+ echo $d':'
+ for(p in $d/*.^(iso kfs paq)) if(test -f $p){
+ t=`{fstype $p}
+ if(! ~ $t ''){
+ if(~ $#bootargs 0)
+ bootargs=local!$p
+ echo $p $t
}
}
}
@@ -34,7 +43,7 @@ fn bootfs{
}
fn connectlocal{
- if(test -r $1)
+ if(test -f $1)
t=`{fstype $1}
if not {
t=$1; shift
@@ -44,22 +53,10 @@ fn connectlocal{
fatal unknown fstype $1
case 9660
bootfs 9660srv $*
+ case dos
+ bootfs dossrv $*
case kfs
bootfs disk/kfs $*
- case dos
- if(! test -f /srv/dos)
- dossrv
- m=/mnt/dosboot
- must mount /srv/dos $m $1
- shift
- if(~ $#* 0)
- f=$m/9front.iso
- if not
- f=$m/$1
- if(test -r $f)
- connectlocal $f
- if not
- connectlocal $*
case *
bootfs $t $*
}
diff --git a/sys/src/9/boot/nusbrc b/sys/src/9/boot/nusbrc
index 938895561..8d4fc46f0 100644
--- a/sys/src/9/boot/nusbrc
+++ b/sys/src/9/boot/nusbrc
@@ -17,16 +17,13 @@ if(! nusb/usbd)
@{
rfork ne
cd '#σ/usb'
- for(dev in sdU^$1.*){
- echo $dev...
+ for(dev in sdU^$1.*) if(test -d $dev) {
diskparts $dev
- for(part in $dev/dos* $dev/9fat){
- if(test -r $part) {
- mkdir -m 0700 '#σc/'^$dev
- {dossrv -s -f $part &} <[0=1] |
- echo 0 >'#σc/'^$dev/dos
- exit
- }
+ for(part in $dev/dos* $dev/9fat) if(test -r $part) {
+ mkdir -m 0700 '#σc/'^$dev || exit
+ {dossrv -s -f $part &} <[0=1] |
+ echo 0 >'#σc/'^$dev/dos
+ exit
}
}
} &