Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#!/bin/rc
2
 
3
# desc: initialize disks for a venti server
4
# prereq: mountdist
5
 
6
switch($1){
7
case checkready checkdone
8
	if(! ~ $fstype fossil+venti){
9
		fmtventi=notdone
10
		export fmtventi
11
		exit
12
	}
13
	if(! test -e /bin/venti/fmtarenas || ! test -e /bin/venti/fmtisect || ! test -e /bin/venti/fmtindex){
14
		bind -a /n/dist/386/bin/venti /bin/venti
15
		if(! test -e /bin/venti/fmtarenas || ! test -e /bin/venti/fmtisect || ! test -e /bin/venti/fmtindex){
16
			fmtventi=notdone
17
			export fmtventi
18
			exit
19
		}
20
	}
21
	ff=`{ls /dev/sd*/arenas* /dev/fs/arenas* >[2]/dev/null}
22
	if(~ $#ff 0){
23
		fmtventi=notdone
24
		export fmtventi
25
		exit
26
	}
27
	gg=()
28
	for(f in $ff)
29
		if(isventi $f)
30
			gg=($gg $f)
31
	if(~ $#gg 0){
32
		fmtventi=ready
33
		export fmtventi
34
		exit
35
	}
36
 
37
	ventiarena=$gg(1)
38
	export ventiarena
39
 
40
	fmtventi=done
41
	export fmtventi
42
	exit
43
 
44
case go
45
	ff=`{ls /dev/sd*/arenas* /dev/fs/arenas* >[2]/dev/null}
46
	if(~ $#ff 0){
47
		echo 'You need to create a partition or partitions to hold the Venti arenas.'
48
		echo 'The arena partition names must begin with "arenas".'
49
		echo
50
		fmtventi=notdone
51
		export fmtventi
52
		exit
53
	}
54
	default=(-d $"ff)
55
	if(! ~ $#ventiarena 0){
56
		default=(-d $"ventiarena)
57
	}
58
	echo You have the following Venti arena partitions.
59
	ls -l $ff
60
	echo
61
 
62
	prompt $default 'Venti arena partitions to use'
63
	aa=`{echo $rd}
64
	bad=no
65
	for(a in $aa){
66
		if(! ~ $a $ff){
67
			echo 'Bad venti arena partition' $a
68
			fmtventi=notdone
69
			export fmtventi
70
			exit
71
		}
72
	}
73
	ventiarena=$aa
74
	export ventiarena
75
 
76
	gg=`{ls /dev/sd*/isect* /dev/fs/isect* >[2]/dev/null}
77
	if(~ $#gg 0){
78
		echo 'You need to create a partition or partitions to hold the Venti indices.'
79
		echo 'The index partition names must begin with "isect".'
80
		echo
81
		fmtventi=notdone
82
		export fmtventi
83
		exit
84
	}
85
	default=(-d $"gg)
86
	if(! ~ $#ventiindex 0){
87
		default=(-d $"ventiindex)
88
	}
89
 
90
	echo You have the following Venti index partitions.
91
	ls -l $gg
92
	echo
93
 
94
	prompt $default 'Venti index partitions to use'
95
	aa=`{echo $rd}
96
	bad=no
97
	for(a in $aa){
98
		if(! ~ $a $gg){
99
			echo 'Bad venti index partition' $a
100
			fmtventi=notdone
101
			export fmtventi
102
			exit
103
		}
104
	}
105
	ventiindex=$aa
106
	export ventiindex
107
 
108
	n=-1
109
	fmta=()
110
	for(a in $ventiarena){
111
		do=yes
112
		n=`{hoc -e 1+$n}
113
		if(isventiarenas $a){
114
			echo File $a is already formatted as a Venti arenas partition.
115
			prompt -d no 'Reformat '$a yes no
116
			do=$rd
117
		}
118
		if(~ $do yes)
119
			fmta=($fmta arenas$n:$a)
120
	}
121
 
122
	n=-1
123
	fmti=()
124
	for(a in $ventiindex){
125
		do=yes
126
		n=`{hoc -e 1+$n}
127
		if(isventiisect $a){
128
			echo File $a is already formatted as a Venti index section.
129
			prompt -d no 'Reformat '$a yes no
130
			do=$rd
131
		}
132
		if(~ $do yes)
133
			fmti=($fmti isect$n:$a)
134
	}
135
 
136
	echo Formatting Venti arenas and indices (this takes a while).
137
	# do each disk in parallel
138
	echo good >/tmp/fmt
139
	dd=()
140
	for(a in $fmta $fmti){
141
		d=`{echo $a | sed 's!.*:(/.*/).*!\1!'}
142
		if(! ~ $d $dd)
143
			dd=($dd $d)
144
	}
145
	for(d in $dd){
146
		{
147
			for(a in $fmta){
148
				i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'}
149
				if(~ $i(2) $d){
150
					echo $i(3) ...
151
					venti/fmtarenas $i(1) $i(3) || echo bad >/tmp/fmt
152
					echo done with $i(3)
153
				}
154
			}
155
			for(a in $fmti){
156
				i=`{echo $a | sed 's!(.*):(/.*/)(.*)!\1 \2 \2\3!'}
157
				if(~ $i(2) $d){
158
					echo $i(3) ...
159
					venti/fmtisect $i(1) $i(3) || echo bad >/tmp/fmt
160
					echo done with $i(3)
161
				}
162
			}
163
		} &
164
	}
165
	wait
166
	if(~ bad `{cat /tmp/fmt}){
167
		echo There were errors formatting the indices and arenas.
168
		fmtventi=ready
169
		export fmtventi
170
		exit errors
171
	}
172
 
173
	echo Done formatting Venti arenas and indices.
174
 
175
	v=$ventiarena(1)
176
	echo Storing Venti config on $v...
177
	{
178
		echo index main
179
		for(i in $ventiindex)
180
			echo isect $i
181
		for(a in $ventiarena)
182
			echo arenas $a
183
	} | venti/conf -w $v
184
 
185
	echo Initializing index...
186
	venti/fmtindex $v
187
 
188
	echo Done with Venti!
189
}
190