For information on editing, see the description of Plan 9 wiki syntax.
0 - WHAT WILL YOU GET * a standalone fs/auth/fileserver * a couple of cpu servers booted from network * a couple of terminal booted from network or a drawterm :) With that i will practice distributed programming with plan9 using one computer connected to internet. It would be better if you try to install a terminal and play a bit with it, to get used to use the plan9 environment properly. And even better if you have a couple of supported machines to see the real thing :=) 1 - INSTALL YOUR VMWARE_LIKE SOFTWARE The following considerations must be done prior to select a virtual machine software: * Boot from PXE support * Multiple concurrent instances * Supportfor bridget network with the host I choosed vmware 4.5.2 as its support all of the above and it is supported by Plan9 graphics system. The vmware 5.0 machine can be used but the install process must be done using text only, so if you're not proficent with ed, you better choose 4.5.2. qemu can be used as well but i know nothing about it, so may be someone wants to make this brief more complete. 2 - INSTALLING THE FIRST VIRTUAL MACHINE * Task: configfs Here we select fossil+venti as we first will set up a standalone plan9 auth/cpu/file server. Later we split that in different machines I suggest you to use the default partition layout and default slices layout. * Follow the in screen instructions and finish the installation. You should be able to do it without more indications as the installation program is intuitive enough. 3 - BOOT AND INITIAL SET UP * Log in as glenda At this moment fossil will start the first snapshot to venti so disk will be crazy for a little while. Take a coffe in the mean while, and later follow with the configuration instructions. * Add glenda to sys and adm groups ! % con /srv/fscons ! prompt: fsys main ! main: uname sys +glenda ! main: uname adm + glenda * Configure minimal NDB ! ipnet=devel.net ip=192.168.1.1 ipmask=255.255.255.0 ! ipgw=192.168.1.1 ! dns=130.206.1.3 ! fs=kenshin ! auth=kenshin ! authdom=lloth.net ! ! sys=kenshin ip=192.168.1.200 ether=000c29a15062 ! dom=kenshin.devel.net ! bootf=/386/9pccpuf ! proto=il * Set up the internet connection through your gateway ! % ip/ipconfig -g 192.168.1.1 ether /net/ether0 192.168.1.200 255.255.255.0 ! % echo refresh > /net/cs ! % echo refresh > /net/dns ! % ip/ping www.google.com If you can't reach google look through the wiki and 9fans archives to configure your network. * Update your plan9 installation from sources ! % pull -v * Compile the cpu/auth/fileserver standalone kernel and install it ! % cd /sys/src/9/pc ! % mk 'CONF=pccpuf' install ! % 9fat: ! % cp 9pccpuf.gz /n/9fat/ ! % acme /n/9fat/plan9.ini set the bootfile to 9pccpuf.gz * Set up boot process for a cpu ! % acme /rc/bin/cpurc Put the ip/ipconfig line to boot with network configured before the ndb/cs line and uncomment the lines marked as needed for booting other systems and for auth servers * Add bootes user and add it to the groups sys and adm and remove user glenda * Initialize nvram storage ! % echo blah > /dev/sdC0/nvram * Set up your timezone ! % cp /adm/timezone/CET /adm/timezone/local * Edit /lib/ndb/auth and uncomment the lines ! % con /srv/fscons ! prompt: fsys main ! main: uname bootes bootes ! main: uname sys +bootes ! main: uname adm +bootes ! main: uname sys -glenda ! main: uname adm -glenda 4. FIRST BOOT * Set up the nvram ! authid: bootes ! authdom: devel.net ! secstore: invent_a_secstore_password ! password: invent_a_bootes_password * Initialize user ! % /sys/lib/newuser This will not bring you to rio ! % auth/changeuser bootes Put the same password you invented in the last step, you can enter the other data as you want * First Drawterm ! c:\> drawterm-windows -a 192.168.1.200 -c 192.168.1.200 ! user[none]: bootes ! password: you know what to put here :) This will give you a rio environment. 5. Set up the multiboot environment * Set up the /cfg directory ! % con /srv/fscons ! prompt: fsys main ! main: create /active/cfg sys sys d775 ! main: % mkdir /cfg/pxe ! % mkdir /cfg/kenshin * Set up multiboot cpurc as jmk posted on 9fans (save the old one): ------------------------------------------------------ ! #!/bin/rc ! boottime=`{date} ! boottime=$"boottime ! ! # parallelism for mk ! NPROC=`{wc -l /dev/sysstat} ! NPROC=`{echo $NPROC|sed 's/ .*//'} ! ! # get rid of need for dirs in /n ! mntgen -s slashn && chmod 666 /srv/slashn ! ! # cs sets /dev/sysname ! ndb/cs ! sysname=`{cat /dev/sysname} ! prompt=($sysname^'# ' ' ') ! ! # site specific startup ! if(test -e /rc/bin/cpurc.local) ! . /rc/bin/cpurc.local ! ! # cpu specific startup ! if(test -e /cfg/$sysname/cpurc) ! . /cfg/$sysname/cpurc ! ! # if we're not a server, start a dns resolver ! if(! test -e /srv/dns) ! ndb/dns -r ! ! # reboot if we lose the file server ! aux/reboot ! ! # turn on dong's tcp port hog defense ! if( test -e /net/tcp/clone) ! echo -n tcpporthogdefense on > /net/tcp/0/ctl ! ! # keep other bootes processes from creating capabilities ! rm '#ยค/caphash' > /dev/null >[2=1] ! ! # start up internet if we don't already have an address ! if(! grep u /net/ipselftab | grep -sv 127.0.0.1) ! ip/ipconfig ! if(! grep -s 127.0.0.1 /net/ipselftab) ! ip/ipconfig loopback /dev/null 127.1 ! ! # start listeners if it hasn't already been done (dicey check) ! if(! netstat -n | grep -s 'tcp.*Listen.* (7|9|21|22|23|25|110|113|565|993|17007|17009|17010) .*') ! aux/listen -q tcp ! if(! netstat -n | grep -v 17008 | grep -s il.*Listen) ! aux/listen -q il ! ! if(! ps|grep -s timesync) ! aux/timesync -s /net -nl -d /sys/log/timesync.d oncore achille ! ! # cpu specific startup ! if(test -e /cfg/$sysname/cpustart) ! . /cfg/$sysname/cpustart ! ! exit 0 ------------------------------------------------------ * Now use the old cpurc to generate what we need for the standalone server /cfg/kenshin/cpurc ------------------------------------------------------ ! #!/bin/rc ! ! ip/ipconfig -g 192.168.1.1 ether /net/ether0 192.168.1.200 255.255.255.0 ! ! ndb/dns -r ! ! prompt=($sysname^'# ' ' ') ! ! aux/timesync hora.rediris.es ! ! ip/dhcpd ip/tftpd ! ! auth/keyfs -wp -m /mnt/keys /adm/keys >/dev/null >[2=1] ! auth/cron >>/sys/log/cron >[2=1] & ! ! aux/listen -q -t /rc/bin/service.auth -d /rc/bin/service il ! aux/listen -q -t /rc/bin/service.auth -d /rc/bin/service tcp ------------------------------------------------------ * Make fossil listen for network connections. Generate a flproto file like: ! cpu% cat flproto ! fsys main config /dev/sdC0/fossil ! fsys main open -c 3000 ! fsys main snaptime -s 60 -a 0500 -t 2880 ! listen tcp!*!564 ! cpu% cat flproto | fossil/conf -w /dev/sdC0/fossil 6. Test the new cpurc files, so reboot the machine If something fails, i hope the error message would be enought to let you fix the problem :) 7. Now create other virtual machine. * This one will need only a very small disk to store nvram. Will be enough with 1Kb but vmware will only let you choose 0.1GB, that is 100Mb. 8. Add a new machine * Set up the NDB ------------------------------------------------------ ! sys=ant ip=192.168.1.201 ether=000c29a15062 ! dom=ant.lloth.net ! bootf=/386/9pxeload ! proto=il ------------------------------------------------------ You will need to put the mac of the virtual machine so check it on your virtual machine ( in vmware set up to boot from network and copy the mac address ) * Set up the /cfg entry Create a file ith the mac address as name ! % acme /cfg/pxe/mac That file must contain a plan9.ini file ------------------------------------------------------ ! bootfile=ether0!/386/9pccpu ! bootargs=tcp!192.168.1.200!564 ! ! *nomp=1 ! *nodumpstack=1 ! partition=new ------------------------------------------------------ - Create the cpurc for this machine under /cfg/ant/cpurc ------------------------------------------------------ ! #!/bin/rc ! ! prompt=($sysname^'# ' ' ') ! ! aux/timesync hora.rediris.es ! ! aux/listen -q -t /rc/bin/service.auth -d /rc/bin/service il ! aux/listen -q -t /rc/bin/service.auth -d /rc/bin/service tcp ------------------------------------------------------ 9. Boot the new cpu machine * It will ask you for the nvram data, but this time you haven't created the partition, so it will fail to store it. * Create the nvram partition as follows: ! % disk/mbr /dev/sdC0/data ! % disk/fdisk /dev/sdC0/data ! >>> a p0 start ! cylinder: 0 ! end [0..208] 208 ! >>> w ! >>> q ! % disk/prep /dev/sdC0/plan9 ! >>> a 9fat ! start sector: 0 ! end [0..209715] 200000 ! >>> a nvram start ! sector: 200000 ! end [200000..209715] 209715 ! >>> w ! >>> q ! % disk/fdisk -p /dev/sdC0/data > /dev/sdC0/ctl * Reboot the cpu server and put the hostid info again Now we got the first machine booted from network up and running 10. Testing auth cpu% cpu -h ant -c rc ! Adding key: dom=lloth.net proto=p9sk1 ! user[bootes]: bootes ! password: ! ! cpu% cat /dev/sysname ! antcpu% * We can log to the cpu server and run tasks there Now that we have two machines, we can configure our prompt to show us where we are. Put this on /usr/bootes/lib/profile ! fn cd { builtin cd $1;awd; prompt=(`{cat /dev/sysname}^' '^`{pwd}^'%' ' ') } ! ! cpu% fn cd { builtin cd $1;awd; prompt=(`{cat /dev/sysname}^' '^`{pwd}^'% ' ' ') } ! cpu% cd ! kenshin /usr/bootes% acme lib/profile ! kenshin /usr/bootes% cpu -h ant -c rc ! ant /usr/bootes% ! ant /usr/bootes% ! ant /usr/bootes% Usually the path is too fancy. 11. Clone a machine and start up a new cpu server vmware 5 will let you clone machines, so i upgraded to it. I will not explain how to clone vmware machines as may be you just used other virtualization software (or even the real hardware) To start up a new server, when we have the machine ready, and its MAC address written somewhere is: * Set up the NDB file with the new machine * Set up the /cfg environment for that machine ! /cfg/pxe/mac file ! /cfg/system_name/cpurc * and boot it from the network I created 5 machines with 64MB of ram each one. As terminal i will use drawterm, as i upgraded to vmware 5, and vga is not supported and there are problems with cut&paste. . . 12. Adding users to the playground In the console of kenshin our main file server/auth/cpu we can add users as described in the wiki. ! % auth/changeuser gdiaz ! % con/srv/fscons ! prompt: fsys main ! main: uname gdiaz gdiaz ! % Now i can drawterm with the new user And make my first distributed application with plan9 :) ------------------------------------------------------ ! #!/bin/rc ! ! servers=(kenshin ant shrek niki connor kirk) ! timezones=(CET EDT Canada_Pacific Japan US_Hawaii Singapore) ! ! minx=0 ! miny=0 ! maxx=100 ! maxy=100 ! i=1 ! for (s in $servers) { ! echo vars: $timezones($i), $i, $minx , $maxx ! script=''''^'cat /adm/timezone/'^$timezones($i)^' > /env/timezone; clock'^'''' ! window -r $minx $miny $maxx $maxy cpu -h $s -c $script ! i = `{ echo $i+1 | bc } ! minx = `{echo $i^'*100' | bc } ! maxx = `{echo $minx^'+'^100 | bc } ! } ------------------------------------------------------