ref: d4124d48f9c7e85fdaa50640035080174c94196e
dir: /sys/src/cmd/venti/srv/conf.rc/
#!/bin/rc # the venti configuration is stored at the 248kB offset in the first index # partition and extends for at most 8 kB. rfork e fn usage { echo 'usage: venti/conf [-w] /dev/sdC0/v.arenas' >[1=2] exit usage } wflag=no while(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){ switch($1){ case -w wflag=yes case * usage } shift } if(~ $1 --) shift if(~ $wflag no && ! ~ $#* 1) usage if(~ $wflag yes && ! ~ $#* 1 2) usage disk=$1 if(! test -f $disk){ echo 'unknown disk' $1 >[1=2] exit nodisk } fn sigexit { #rm -f /tmp/venticonf.$pid } if(~ $wflag yes){ {echo venti config; cat $2} >/tmp/venticonf.$pid || exit oops if(! test -s /tmp/venticonf.$pid){ echo 'config is empty; will not install' >[1=2] exit emptyconfig } if(test `{ls -l /tmp/venticonf.$pid | awk '{print $6}'} -gt 8192){ echo 'config is too long; max is a little less than eight kilobytes' >[1=2] exit toolong } dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 \ >/tmp/_venticonf.old || exit backup dd -quiet 1 -bs 1024 -count 8 </dev/zero >> /tmp/venticonf.$pid || exit dd dd -quiet 1 -bs 1024 -count 8 -if /tmp/venticonf.$pid \ -of $disk -trunc 0 -oseek 248 || exit dd2 exit 0 } dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 | aux/zerotrunc >/tmp/venticonf.$pid if(! cmp <{sed 1q /tmp/venticonf.$pid} <{echo venti config}){ echo 'config has bad header' >[1=2] exit badconfig } sed 1d /tmp/venticonf.$pid exit ''