Jump to content

Oberon/A2/myaos

From Wikibooks, open books for an open world
#!/bin/bash 
# A script to start UnixAos with a working directory which can be in a
# removable flash store. 
# A flash store is accommodated in multiple machines by copying 
# machine specific configurations into Configuration.XML and 
# Oberon.Text. 
# 
# Conditions for this script to work. 
# * The volume containing the working files has a reliable name.
#   The names in /dev/disk/by-label/ and /dev/disk/by-uuid/
#   are convenient.  For example, a volume labeled A will appear
#   as /dev/disk/by-label/A.  Additional details here.
#   http://reactivated.net/writing_udev_rules.html#builtin
#   https://wiki.debian.org/udev
# * Mounting of the working volume is specified in /etc/fstab.  
#   What if the volume is automounted at a second location?
#   If edit conflict is avoided, a second mount is probably harmless.
# * The following assignments to workingVolume and workingDirectory
#   are consistent with preceding information.
# * An appropriate entry exists in /etc/fstab.  Example. 
#   /dev/A /home/me/A ext2 defaults,user,users,exec,noauto 0 0 
# * /etc/sudoers.d/sudoers is adjusted to allow the user to fsck the
#   working filesystem.
#   me mycomputer = NOPASSWD: /sbin/fsck
#   Test fsck interactively.
# * If the working volume is removeable the user can mount it.
#   Note the user option in /etc/fstab. 
# * Prior to A2 revision 10272 the start scipt was /usr/bin/aos.
#   For revision 10272, the start script is /usr/local/bin/a2.
#   For a git repository <A2repo> and system <system> the start
#   script is <A2repo>/<system>/a2.sh.  
#   Eg. /home/me/A2repo/Linux64/a2.sh.
# * aos attempts to create the link <workingDirectory>/.aoshome
#   to aos but a FAT file system does not allow links.  Resolved by 
#   reformatting to ext2.  Ext2 in Wikipedia.
#
# This is the home part of the system drive.
#workingVolume=/dev/sda5
# This is a SD card.
#workingVolume=/dev/disk/by-uuid/65b50b9d-5256-4a06-b48b-2425d266387c
# This is the stainless steel Kingston USB store.
workingVolume=/dev/disk/by-partuuid/d59b8686-03
echo "workingVolume is $workingVolume."
#
workingDirectory=/home/me/A
echo "workingDirectory=$workingDirectory."
#
# For any hostname violating Oberon file name syntax, make a conformant name.
# Ref. https://www.tldp.org/LDP/abs/html/comparison-ops.html
if [[ $(hostname) = xo-53-1d-bb* ]]; then
     h="xo"
elif [[ $(hostname) = joule* ]]; then
     h="joule"
# Add more cases here.
else
     h=$(hostname --short)
fi
echo "Shortened hostname, h = $h"

UnixAos () {
  contextDir=$PWD
  cd $workingDirectory
  echo "Switched to working directory."
  if test -f Configuration.$h.XML
  then
    echo "Copying Configuration.$h.XML to Configuration.XML."
    /bin/cp Configuration.$h.XML Configuration.XML
    if test -f Oberon.$h.Text
    then
      echo "Copying Oberon.$h.Text to Oberon.Text."
      /bin/cp Oberon.$h.Text Oberon.Text
      /bin/rm --force --verbose AOS*.Log
      /bin/rm --force --verbose Trap*.txt
      /bin/rm --force --verbose .tmp.*
      echo "Starting UnixAos."
      /usr/bin/aos
   else
      echo "Oberon.$h.Text not present in $workingDirectory.  Aborting."
    fi
  else
    echo "Configuration.$h.XML not present in $workingDirectory.  Aborting."
  fi
  cd $contextDir
}

if test -b $workingVolume
then
  if findmnt -rn $workingVolume
  then
    echo "Working volume is mounted."
    UnixAos
  else
    echo "Working volume is not mounted."
    if /sbin/fsck -p $workingVolume
    then
      echo "Filesystem in $workingVolume passed fsck."
      # The mount is specified in /etc/fstab.
      mount -v $workingVolume
      UnixAos
    else
      echo "fsck found a problem in $workingVolume and attempted repair.  Try again."
    fi
  fi
else
  echo "$workingVolume containing working files not connected.  Aborting."
fi