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