Setting up Fossil D1242683514 Aa #Venti is necessary to get the most out of Fossil. See [setting up #Venti]. # #If you are using a Venti server on your local machine, you need to #find your local IP address (cat /net/ndb) and set # #! % venti=your-ip-address # #in your environment. # #The main data storage for Fossil is the Venti server. Fossil keeps #dirty blocks and ephemeral snapshots in a local disk partition #called the write buffer. # #The write buffer does not need to be as big as the file system you #wish to store, but it it doesn't hurt and it makes the #initialization easier. Rsc's laptop uses a fossil write buffer of a #gigabyte, and sources server uses a mere half gigabyte. # #Note that if you built a fossil (non-kfs) machine with the help of #the installer, many of the steps in this document have already been #done by the installer. It's probably worth your time to understand #what it did on your behalf, but you can skip over doing things until #the part about adding "listen" commands to serve files to other #machines. # #Format the write buffer with: # #! % fossil/flfmt /dev/sdC0/fossil # #Then create a file called flproto containing: # #! srv -p fscons #! srv fossil #! fsys main config /dev/sdC0/fossil #! fsys main open -AWP #! fsys main # #note: make sure the file ends in '\n' (i.e. hit enter after the last #line) -- otherwise, fossil will silently treat it as an error. # #See fossilcons(8) for more about what the commands mean. Run # #! % fossil/fossil -c '. flproto' #! % con -l /srv/fscons # #to start fossil, execute the flproto script, and connect to the #console. # #If any command in the script fails, the script does not continue. #Connecting to /srv/fscons should show you any errors. If you type #enter a few times you should get # #! prompt: #! main: #! main: # #(The first prompt is printed before the script runs. The last #command in the script changes the default file system to `main'; #subsequent prompts reflect this.) # #Draw a new window and mount fossil: # #! % mount -c /srv/fossil /n/fossil # #Now you have a console window and a window with fossil mounted. #You'll be switching between them quite a bit. The examples will show #the % prompt for the shell commands and main: for the fossil console #commands. # #The -AWP flags in the open command turn off authentication, turn on #arbitrary wstats, and turn off permission checking. # #The fossil file system has three main trees: /active, /archive, and #/snapshot. The active file system is in /active. When you mounted #/srv/fossil before, you attached to /active. See fossil(4) for more. # #Before you can create files with particular users and groups, you #need to add them to the users table. Execute the following at the #fossil console to create a users file: # #! main: create /active/adm adm sys d775 #! main: # #You'll probably want to use the same set of users from your current #file system. The file format has changed slightly from the old kfs #format, in that the first field is now a string rather than a #number. (The string is what gets stored in the fossil disk #structures, just like a number gets stored in the kfs and fs disk #structures.) You can convert by running: # #! % sed 's/^([^:]+):([^:]+)/\2:\2/' /adm/users >/n/fossil/adm/users # #Here, /adm/users comes probably from your local kfs. Then tell #fossil to reload the users file: # #! main: users -r /active/adm/users # #Test that the reload worked by running: # #! % echo hi >/n/fossil/foo #! % chgrp glenda /n/fossil/foo #! % ls -l /n/fossil/foo #! % rm /n/fossil/foo # #The chgrp should succeed. If it doesn't, the users table isn't right. # #Now you're in a good state for initializing the file system, which #you can do with: # #! % mount /srv/kfs /n/kfs #! % disk/mkfs -a -s /n/kfs /sys/lib/sysconfig/proto/allproto | #! disk/mkext -u -d /n/fossil # #If your kfs and fossil write buffer are on the same disk, you may #find that running one and then the other is much faster so they #don't contend for the disk: # #! % disk/mkfs -a -s /n/kfs /sys/lib/sysconfig/proto/allproto >/somewhere/else #! % disk/mkext -u -d /n/fossil </somewhere/else # #Now you have a file system. The users file probably just got #overwritten, so put it back: # #! main: users -w # #This will overwrite /adm/users with the current in-memory table. # #Take an archival snapshot: # #! main: snap -a # #(Note: even though a prompt is printed immediately after you hit #enter, the command takes up to 10 seconds to commence.) # #After a short pause, the disk will start whirring as all the blocks #you just copied get sent off to Venti. Eventually this will finish, #but it is likely to take a long time depending on what you copied to #your active system. When Fossil finishes archiving, it will print a #message like: # #! archive vac:080b64... # #to the console. The vac hash of the archive can be given to #fossil/flfmt to reset the fossil partition if it is ever lost, or to #vacfs to look at the archive. # #For kicks, kill off fossil and restart it: # #! % kill fossil | rc #! % fossil/fossil -c '. flproto' # #In your console window you'll have to connect to /srv/fscons again. # #Check that everything is there: # #! % mount /srv/fossil /n/fossil #! % mount /srv/fossil /n/archive main/archive #! % ls -l /n/fossil #! % ls -l /n/archive # #Neat, huh? # #Now we're ready to start things for real. Add the line # #! users -r /active/adm/users # #to the flproto file and remove the -AWP flags from open. Restart #fossil: # #! g% kill fossil | rc #! g% fossil/fossil -c '. flproto' #! g% mount /srv/fossil /n/fossil #! g% mount /srv/fossil /n/archive main/archive #! g% ls -l /n/archive # #If you want to serve the network you can run the commands # #! listen tcp!*!9fs #! listen il!*!9fs # #in flproto or at the console. Now others can connect. # #Note that if your fossil is your primary file system and is being #launched at boot time by boot(8) you should use the numerical forms #of the port numbers (tcp!*!564 and il!*!17008) instead of the #symbolic names because the ndb(8) servers won't be running yet. #Also, you will probably want to brand your flproto onto your fossil #partition using fossil/conf, see fossil(4). # #Connections (even over local /srv files) are authenticated using #factotum. If you are booting standalone and don't use p9sk1 keys, #you'll have to add a key to your factotum to use for the #authentication. Specifically, if # #! % grep p9sk1 /mnt/factotum/ctl # #doesn't find anything, then you should run # #! % echo 'key proto=p9sk1 user=you dom=local !password=local' >/mnt/factotum/ctl # #to set up a key. This will be necessary for the mount to work once #you lose the -AWP flags. # #The user name should be your user name on the local machine. The #password can be anything. (Since both mount and fossil are using the #same factotum and thus the same keys, the authentication will #succeed!) # #Congratulations! You have a fossil. # #See fossil(4) and fossilcons(8) for more information. # #BOOTING A STANDALONE FOSSIL SYSTEM # #NOTE: this section relates to an older type of kernels, called #'pcfl' which have now been deprecated for the 'pcf' ones, which #allow you to change fossil configurations without having to #recompile kernels. # #If you have installed Plan 9 directly onto a disk without using a #kfs partition then you do not need to read this section. # #This is complicated and clunky. You will have to debug something #along the way. You really need to understand how the system works #and how all the pieces fit together before you attempt this. # #It is possible to build a kernel that boots from a local fossil #system. The pc kernel configuration pcfl is the starting point. Copy #pcfl to pcyour-sys-name and then: # # * change cpuserver = 0 to cpuserver = 1 in port if you want a cpu # server. # * change fl to your own system name in the paths in the bootdir # section. # #You need to create /sys/lib/sysconfig/your-sys-name and populate it. #The files in /sys/lib/sysconfig/fl are a good starting point. You'll #want to edit them to suit your setup. In particular, you need to: # # * change boot's cpuserver=no to cpuserver=yes if desired # * change boot's venti command line if desired # * change flproto to fit your configuration; note that the srv file # must be named boot and not fossil. # * change venti.conf to fit your configuration. # #You may also have to edit the set of boot files in the configuration #file for the kernel to include fdisk, and run fdisk -p from your #boot script, if your venti partitions need so to be learned. # #Now you should be able to build a kernel and boot it. Note that you #have to run lnfs in order to build. # #It probably won't boot because something isn't set up quite right. #You're on your own for debugging. #