commit 60d96f2e4385f0b4cee12add6dea545880a0e6a1 from: David du Colombier <0intro@gmail.com> date: Thu Jan 26 16:33:36 2012 UTC venti: import venti/conf from plan 9 R=rsc http://codereview.appspot.com/5572066 commit - 83b247a771a514792b972216e1ad32ae1f3fc316 commit + 60d96f2e4385f0b4cee12add6dea545880a0e6a1 blob - /dev/null blob + d587210344f18afc0abac51591b51d1e66701113 (mode 755) --- /dev/null +++ src/cmd/venti/srv/conf.rc @@ -0,0 +1,67 @@ +#!/usr/local/plan9/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(! 9 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(! 9 test -s /tmp/venticonf.$pid){ + echo 'config is empty; will not install' >[1=2] + exit emptyconfig + } + if(9 test `{9 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 + } + 9 dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 \ + >/tmp/_venticonf.old || exit backup + 9 dd -quiet 1 -count 2 > /tmp/venticonf.$pid || exit dd + 9 dd -quiet 1 -bs 1024 -count 8 -if /tmp/venticonf.$pid \ + -of $disk -trunc 0 -oseek 248 || exit dd2 + exit 0 +} + +9 dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 | + 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 '' blob - b11a461afdd850d95032e0fd3528cc1730a3a159 blob + 6a06e3e2e348c8fa5c25cb553fc0cb3d77f30a50 --- src/cmd/venti/srv/mkfile +++ src/cmd/venti/srv/mkfile @@ -55,6 +55,7 @@ TARG=\ checkarenas\ checkindex\ clumpstats\ + conf\ findscore\ fixarenas\ fmtarenas\ @@ -88,3 +89,11 @@ $SLIB: $LIBOFILES acid:D: lumpcache.acid cat $prereq >$target +$O.conf:D: conf.rc + { + echo '#!/usr/local/plan9/bin/rc' + echo '# THIS FILE IS AUTOMATICALLY GENERATED' + echo '# FROM /usr/local/plan9/src/cmd/venti/srv/conf.rc. DO NOT EDIT.' + echo + sed 1d conf.rc + } >$target && chmod +x $target