Building a Class Network

The examples below refer to comp243f03 network.
* Building the servers:

  (1) Enable remote administration using rsh: add each other's name in
      /root/.rhosts. E.g.,

      nee root

  (2) Create directory structure. E.g., on nee:

      /usr/classnet/home                -- home directories
                   /home/root/bin-admin -- admin tools, e.g., do_all_machines
                                           (see below) 
                             /pkgs      -- packages
                             /surge     -- surge files
      /playpen                          -- extra disk space

  (3) Export directories by adding entries in /etc/exports, e.g., in nee:

/usr/classnet -maproot=0 foghorn100 taz10 brain10 daffy100 bugs100 stone30 speedy30 pepe100 ophelia20 porky20
/playpen -maproot=0 foghorn100 taz10 brain10 daffy100 bugs100 stone30 speedy30 pepe100 ophelia20 porky20

      Make sure the line 


      is present in /etc/rc.conf.

  (4) The server should mount each other, e.g., in nee, create mount points
      (i.e., directories)

      and add the following lines to /etc/mount.local

/sbin/mount -t nfs -o rw foghorn100:/usr/classnet /net/foghorn100/classnet &
/sbin/mount -t nfs -o rw foghorn100:/playpen /net/foghorn100/playpen & 

  (5) Add routing rules for each subnetwork. Since the routing rules must
      be reloaded after each reboot, add then to /etc/rc.local, e.g., in nee:

# static routing for class net
route add -net
route add -net
route add -net

      where the final IP corresponds to the subnetwork router.

* Building a subnetwork
  (0) Configure the physical topology and then the network
      interface. You can find out the names of the interfaces
      and their speed using ifconfig -a (e.g. xl0, fxp0).
      Configure the ip address and network mask in /etc/rc.conf.
      For example, attaching pepe (last byte 36) to
      ifconfig_fxp0="inet netmask"
      In addition, configure the default router and the hostname,
      also in /etc/rc.conf.

  (1) Add server(s) to /root/.rhosts:

      nee root
      foghorn root

      This enables remote administration from these two hosts.
      Test with "rsh marina100 hostname". IMPORTANT: all the hosts
      names in .rhosts must be resolvable using /etc/hosts (otherwise,
      rsh command to this host will hang while the host tries to
      contact unreachable DNS servers).

  (2) Add DNS resolution for local names in /etc/hosts. This
      includes the servers: nee100

      and hosts in the subnetworks: lorenzo10

  (3) Add firewall rules to enable local traffic in
      /etc/rc.firewall (create a new section, e.g., classnet):
      add pass ip from to any

      and change the default firewall configuration in
      /etc/rc.conf (firewall_type="classnet")

  (4) Enable local routing by adding gateway_enable="yes" in
      /etc/rc.conf for the local router (e.g., daffy100). 

  (5) Enable routing from the server to the hosts in the private
      network. For example, enable routing in nee (see 4),
      add a routing rule in /etc/rc.local of the form:

      route add -net

      (route local network through daffy100) 

      Note that daffy-5 does not need routing rules, since it only
      has to get packet to 192.168.10 and 192.168.100, and those
      are directly attached networks.  

      You can always check the static routing rules using netstat -r.

  (6) Enable NFS: in each NFS client, add mount commands in
      /etc/mount.local, e.g., (in brain10)

      /sbin/mount -t nfs -o rw nee100:/usr/classnet /net/nee100/classnet &

      (make sure the mount point directory exists), and add
      each NFS client to /etc/exports in the file servers, e.g.,
      in nee add
      /usr/classnet -maproot=1 brain10

      (restart the daemon with kill -SIGHUP `cat /var/run/`
       -- in bash, only -HUP in other shells) 
  (7) Install extra delays for each local network. This requires a
      a kernel with the dummnynet, and the following entries /etc/rc.local,
      (in daffy100)

# Artifical RTTs for
sysctl -w net.inet.ip.dummynet.hash_size=256
ipfw pipe 1 config delay 0ms mask all
ipfw add 10 pipe 1 ip from to any out
sysctl -w net.inet.ip.dummynet.delay_cdf_p1=20
sysctl -w net.inet.ip.dummynet.delay_cdf_p2=200

      This is only needed in the routers/apache servers in the example
      shown above.

* Remote administration:

  (1) Our script is "do_all_machines" particularly useful for maintaining
      groups of machine. Copy the it from /usr/dirt/bin (don't forget
      to also copy and update the path in do_all_machine). Examples:

  ./do_all_machines -n -t -M all_192.168.list -cmd "rsh MACHINE hostname" 
  (use -n to avoid NFS check and -t to continue after the task fails in
   on of the machines).

  ./do_all_machines -n -t -M all_192.168.list -cmd "rsh MACHINE 'shutdown -r now &'" 

  ./do_all_machines -n -t -M all_192.168.list -cmd "rcp mount.local root@MACHINE:/etc"

* Apache and SURGE:

  (1) Install apache using pkg_add, e.g., 

pkg_add /net/nee100/classnet/home/root/pkgs/apache-1.3.24_7.tgz

      and copy SURGE files into /usr/local/www/data

tar -zxf /net/nee100/classnet/home/root/surge/surge_data.tar.gz

   (2) Install surge, e.g.,

cp -R /net/nee100/classnet/home/root/surge/generator /usr/local/surge
chmod 777 /usr/local/surge
       (don't forget chmod!)

Félix Hernández-Campos
Last modified: Sun Sep 28 20:13:37 Eastern Daylight Time 2003