Blame


1 60d96f2e 2012-01-26 0intro #!/usr/local/plan9/bin/rc
2 60d96f2e 2012-01-26 0intro
3 60d96f2e 2012-01-26 0intro # the venti configuration is stored at the 248kB offset in the first index
4 60d96f2e 2012-01-26 0intro # partition and extends for at most 8 kB.
5 60d96f2e 2012-01-26 0intro
6 60d96f2e 2012-01-26 0intro rfork e
7 60d96f2e 2012-01-26 0intro fn usage {
8 60d96f2e 2012-01-26 0intro echo 'usage: venti/conf [-w] /dev/sdC0/v.arenas' >[1=2]
9 60d96f2e 2012-01-26 0intro exit usage
10 60d96f2e 2012-01-26 0intro }
11 60d96f2e 2012-01-26 0intro
12 60d96f2e 2012-01-26 0intro wflag=no
13 60d96f2e 2012-01-26 0intro while(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){
14 60d96f2e 2012-01-26 0intro switch($1){
15 60d96f2e 2012-01-26 0intro case -w
16 60d96f2e 2012-01-26 0intro wflag=yes
17 60d96f2e 2012-01-26 0intro case *
18 60d96f2e 2012-01-26 0intro usage
19 60d96f2e 2012-01-26 0intro }
20 60d96f2e 2012-01-26 0intro shift
21 60d96f2e 2012-01-26 0intro }
22 60d96f2e 2012-01-26 0intro if(~ $1 --)
23 60d96f2e 2012-01-26 0intro shift
24 60d96f2e 2012-01-26 0intro
25 60d96f2e 2012-01-26 0intro if(~ $wflag no && ! ~ $#* 1)
26 60d96f2e 2012-01-26 0intro usage
27 60d96f2e 2012-01-26 0intro if(~ $wflag yes && ! ~ $#* 1 2)
28 60d96f2e 2012-01-26 0intro usage
29 60d96f2e 2012-01-26 0intro
30 60d96f2e 2012-01-26 0intro disk=$1
31 60d96f2e 2012-01-26 0intro if(! 9 test -f $disk){
32 60d96f2e 2012-01-26 0intro echo 'unknown disk' $1 >[1=2]
33 60d96f2e 2012-01-26 0intro exit nodisk
34 60d96f2e 2012-01-26 0intro }
35 60d96f2e 2012-01-26 0intro
36 60d96f2e 2012-01-26 0intro fn sigexit {
37 60d96f2e 2012-01-26 0intro #rm -f /tmp/venticonf.$pid
38 60d96f2e 2012-01-26 0intro }
39 60d96f2e 2012-01-26 0intro
40 60d96f2e 2012-01-26 0intro if(~ $wflag yes){
41 60d96f2e 2012-01-26 0intro {echo venti config; cat $2} >/tmp/venticonf.$pid || exit oops
42 60d96f2e 2012-01-26 0intro if(! 9 test -s /tmp/venticonf.$pid){
43 60d96f2e 2012-01-26 0intro echo 'config is empty; will not install' >[1=2]
44 60d96f2e 2012-01-26 0intro exit emptyconfig
45 60d96f2e 2012-01-26 0intro }
46 60d96f2e 2012-01-26 0intro if(9 test `{9 ls -l /tmp/venticonf.$pid | awk '{print $6}'} -gt 8192){
47 60d96f2e 2012-01-26 0intro echo 'config is too long; max is a little less than eight kilobytes' >[1=2]
48 60d96f2e 2012-01-26 0intro exit toolong
49 60d96f2e 2012-01-26 0intro }
50 60d96f2e 2012-01-26 0intro 9 dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 \
51 60d96f2e 2012-01-26 0intro >/tmp/_venticonf.old || exit backup
52 60d96f2e 2012-01-26 0intro 9 dd -quiet 1 -count 2 </dev/zero >> /tmp/venticonf.$pid || exit dd
53 60d96f2e 2012-01-26 0intro 9 dd -quiet 1 -bs 1024 -count 8 -if /tmp/venticonf.$pid \
54 60d96f2e 2012-01-26 0intro -of $disk -trunc 0 -oseek 248 || exit dd2
55 60d96f2e 2012-01-26 0intro exit 0
56 60d96f2e 2012-01-26 0intro }
57 60d96f2e 2012-01-26 0intro
58 60d96f2e 2012-01-26 0intro 9 dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 |
59 60d96f2e 2012-01-26 0intro zerotrunc >/tmp/venticonf.$pid
60 60d96f2e 2012-01-26 0intro
61 60d96f2e 2012-01-26 0intro if(! cmp <{sed 1q /tmp/venticonf.$pid} <{echo venti config}){
62 60d96f2e 2012-01-26 0intro echo 'config has bad header' >[1=2]
63 60d96f2e 2012-01-26 0intro exit badconfig
64 60d96f2e 2012-01-26 0intro }
65 60d96f2e 2012-01-26 0intro
66 60d96f2e 2012-01-26 0intro sed 1d /tmp/venticonf.$pid
67 60d96f2e 2012-01-26 0intro exit ''