xref: /plan9/rc/bin/loadfossil (revision 03673ce56a3aeac7442d591897da78186bbb5bca)
18498559bSDavid du Colombier#!/bin/rc
28498559bSDavid du Colombier# loadfossil - populate a fossil partition or file
38498559bSDavid du Colombier#
48498559bSDavid du Colombier# due to name clashes in /srv, will only work on a machine
58498559bSDavid du Colombier# without a fossil named `fossil' already running.
68498559bSDavid du Colombier
78498559bSDavid du Colombierrfork en
88498559bSDavid du Colombier
98498559bSDavid du Colombierfn killfossil {
108498559bSDavid du Colombier	sleep 1
118498559bSDavid du Colombier	unmount /n/f &
128498559bSDavid du Colombier	sleep 1
138498559bSDavid du Colombier	rm -f /srv/^(fossil fossil.open fscons fscons.open)
148498559bSDavid du Colombier	kill fossil | rc
158498559bSDavid du Colombier	sleep 1
168498559bSDavid du Colombier}
178498559bSDavid du Colombier
188498559bSDavid du Colombierfn sendexpect {		# send expect timeout
198498559bSDavid du Colombier	echo $1
208498559bSDavid du Colombier	if(! dial/expect -qt $3 $2)
218498559bSDavid du Colombier		echo -n 'no '^$"1^'...' > /dev/cons
228498559bSDavid du Colombier}
238498559bSDavid du Colombier
248498559bSDavid du Colombierfn usage {
258498559bSDavid du Colombier	echo usage: $argv0 partition root proto fossil.conf >[1=2]
268498559bSDavid du Colombier	exit usage
278498559bSDavid du Colombier}
288498559bSDavid du Colombier
298498559bSDavid du Colombierfn sigexit {
308498559bSDavid du Colombier	rm -f /tmp/fossil-no-list.conf
318498559bSDavid du Colombier	exit
328498559bSDavid du Colombier}
338498559bSDavid du Colombierfn sigint sighup sigterm {
348498559bSDavid du Colombier	rm -f /tmp/fossil-no-list.conf
358498559bSDavid du Colombier	killfossil
368498559bSDavid du Colombier	exit note
378498559bSDavid du Colombier}
388498559bSDavid du Colombier
398498559bSDavid du Colombier# process arguments
408498559bSDavid du Colombierif (! ~ $#* 4)
418498559bSDavid du Colombier	usage
428498559bSDavid du Colombierargv0=$0
438498559bSDavid du Colombierfosspart=$1
448498559bSDavid du Colombiersrcroot=$2
458498559bSDavid du Colombierproto=$3
468498559bSDavid du Colombierfossconf=$4
478498559bSDavid du Colombier
488498559bSDavid du Colombierif (test -e /srv/fossil -o -e /srv/fossil.open) {
49*03673ce5SDavid du Colombier	echo $0: /srv/fossil* exists, not safe to start a new fossil >[1=2]
508498559bSDavid du Colombier	exit fossil-already-running
518498559bSDavid du Colombier}
528498559bSDavid du Colombier
538498559bSDavid du Colombier# initialise fossil
548498559bSDavid du Colombierfossil/flfmt -y $fosspart
558498559bSDavid du Colombier
568498559bSDavid du Colombier# install listen-less config for fossil creation
578498559bSDavid du Colombier{
581bdadbfaSDavid du Colombier	grep -v '^listen ' $fossconf
598498559bSDavid du Colombier	echo create /active/adm adm sys d775
608498559bSDavid du Colombier	echo create /active/adm/users adm sys 664
618498559bSDavid du Colombier} >/tmp/fossil-no-list.conf
628498559bSDavid du Colombierfossil/conf -w $fosspart /tmp/fossil-no-list.conf
638498559bSDavid du Colombier
648498559bSDavid du Colombier# start fossil
658498559bSDavid du Colombierfossil/fossil -f $fosspart
668498559bSDavid du Colombiermount -cC /srv/fossil.open /n/f
678498559bSDavid du Colombier
688498559bSDavid du Colombier# set up /adm/users
698498559bSDavid du Colombiercp /adm/users /n/f/adm
708498559bSDavid du Colombier{
718498559bSDavid du Colombier	echo
728498559bSDavid du Colombier	dial/drain &
738498559bSDavid du Colombier	sleep 2
748498559bSDavid du Colombier	sendexpect 'users -r /active/adm/users' ': ' 5
758498559bSDavid du Colombier} </srv/fscons.open >>/srv/fscons.open
768498559bSDavid du Colombier
778498559bSDavid du Colombier# remount with new users
788498559bSDavid du Colombierunmount /n/f
798498559bSDavid du Colombiermount -cC /srv/fossil.open /n/f
808498559bSDavid du Colombier
818498559bSDavid du Colombier# populate fossil
828498559bSDavid du Colombier@ {
838498559bSDavid du Colombier	# logs are boring, make them all appear empty
848498559bSDavid du Colombier	chmod +arw /tmp/empty-log >/tmp/empty-log
858498559bSDavid du Colombier	cd $srcroot/sys/log && {
868498559bSDavid du Colombier		for (f in [0-9a-z]* */*)
878498559bSDavid du Colombier			if (! ~ $f httpd mkfile smtpdb timesync.d vac year)
888498559bSDavid du Colombier				bind /tmp/empty-log $f
898498559bSDavid du Colombier	}
908498559bSDavid du Colombier	cd /tmp
918498559bSDavid du Colombier	disk/mkfs -u $srcroot/adm/users -U -d /n/f -s $srcroot $proto
928498559bSDavid du Colombier}
938498559bSDavid du Colombier
948498559bSDavid du Colombier# stop fossil gracefully
958498559bSDavid du Colombier{
968498559bSDavid du Colombier	echo
978498559bSDavid du Colombier	dial/drain &
988498559bSDavid du Colombier	sleep 2
998498559bSDavid du Colombier	sendexpect 'fsys all sync' ': ' 120
1008498559bSDavid du Colombier	sendexpect 'fsys all halt' ': ' 5
1018498559bSDavid du Colombier} </srv/fscons.open >>/srv/fscons.open
1028498559bSDavid du Colombierkillfossil
1038498559bSDavid du Colombier
1048498559bSDavid du Colombier# install permanent fossil configuration
1051bdadbfaSDavid du Colombierfossil/conf -w $fosspart $fossconf
106