![cinap_lenrek](/assets/img/avatar_default.png)
the rc & operator changes stdin to /dev/null, so we have to do the <[0=1] inside the {} this never showed up as an issue because many fileservers just read 9p messages from standard output.
76 lines
1.1 KiB
Bash
Executable file
76 lines
1.1 KiB
Bash
Executable file
#!/bin/rc
|
|
|
|
fn showlocaldev {
|
|
echo $1' ' $2
|
|
if(~ $#bootargs 0){
|
|
if(! ~ $#cdboot 0){
|
|
if(~ $2 9660)
|
|
bootargs=local!$1
|
|
}
|
|
if not {
|
|
if(! ~ $2 '' dos)
|
|
bootargs=local!$1
|
|
}
|
|
}
|
|
}
|
|
|
|
fn showlocaldevs{
|
|
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 led
|
|
;
|
|
case plan9 nvram swap
|
|
echo $p
|
|
case *
|
|
showlocaldev $p `{fstype $p}
|
|
}
|
|
}
|
|
}
|
|
for(d in /shr/sd*) if(test -d $d) {
|
|
echo $d':'
|
|
for(p in $d/*.^(iso paq)) if(test -f $p){
|
|
t=`{fstype $p}
|
|
~ $#t 0 || showlocaldev $p $t
|
|
}
|
|
}
|
|
}
|
|
|
|
fn configlocal{
|
|
diskparts
|
|
}
|
|
|
|
fn bootfs{
|
|
{$1 -s -f $*(2-) <[0=1] &} | echo 0 >/srv/boot
|
|
}
|
|
|
|
fn connectlocal{
|
|
if(~ $#* 0){
|
|
echo local method needs an argument
|
|
}
|
|
if not {
|
|
if(test -f $1)
|
|
t=`{fstype $1}
|
|
if not {
|
|
t=$1; shift
|
|
}
|
|
switch($t){
|
|
case ''
|
|
fatal unknown fstype $1
|
|
case 9660
|
|
bootfs 9660srv $*
|
|
case dos
|
|
bootfs dossrv $*
|
|
case *
|
|
bootfs $t $*
|
|
}
|
|
}
|
|
}
|
|
|
|
mlocal=(configlocal connectlocal)
|
|
mt=(mlocal $mt)
|