a2server/scripts/a2server-5-netboot.txt
T. Joseph Carter aaea9245de All scripts now run from source dir
Legacy code in the remaining scripts to have them run from the website
using a2sDevel detection has been purged.  That doesn't mean everything
now runs locally always—that's going to require a finer pick through the
code I haven't done yet.  This is a start though, and doing it found a
couple of bugs I've managed to fix already.
2018-04-11 06:59:48 -07:00

1092 lines
40 KiB
Bash
Executable File

#! /bin/bash
# vim: set tabstop=4 shiftwidth=4 noexpandtab filetype=sh:
# this script downloads and installs the Apple boot blocks required
# for booting an Apple II client over the network, and places
# BASIC.SYSTEM on the shared drive and configures it to be the startup
# program (for Apple IIe users, and IIgs users in ProDOS network mode).
# It also can download and install GS/OS for a network boot configuration.
a2sScriptURL="https://raw.githubusercontent.com/RasppleII/a2server/master"
a2sBinaryURL="http://blocksfree.com/downloads"
# Find the path of our source directory
a2sSource="$( dirname "${BASH_SOURCE[0]}" )/.."
pushd $a2sSource >/dev/null
a2sSource="$PWD"
popd >/dev/null
if [[ ! -f "$a2sSource/.a2server_source" ]]; then
printf "\na2server: cannot find a2server source directory in $a2sSource.\n\n"
exit 1
fi
useExternalURL=1
[[ $A2SERVER_NO_EXTERNAL ]] && useExternalURL=
gsosDir="/srv/A2SERVER/A2FILES"
imagesDir=$gsosDir/GSOS.Installer/Images
imageToolsDir=$gsosDir/GSOS.Installer/Image.Tools
netInstallDir=$gsosDir/GSOS.Installer/Net.Install
p8Dir="/srv/A2SERVER/A2FILES"
diskToolsP8Dir=$p8Dir/Disk.Tools.P8
commDir="/srv/A2SERVER/A2FILES/Comm"
gsosURL="http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Apple_II/Apple_IIGS_System_6.0.1/"
# alernate: http://web.archive.org/web/20080907081050/http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Apple_II/Apple_IIGS_System_6.0.1/
gsosBackupURL="http://archive.org/download/download.info.apple.com.2012.11/download.info.apple.com.2012.11.zip/download.info.apple.com%2FApple_Support_Area%2FApple_Software_Updates%2FEnglish-North_American%2FApple_II%2FApple_IIGS_System_6.0.1%2F"
# --- bashByter library routines
decToChar () {
# converts single-byte decimal value to equivalent character
# arg: decimal number from 0-255
# out: one character
#exit: 8=extraneous arg, 11=missing arg, 21=invalid arg
[[ $1 ]] || return 11
[[ $2 ]] && return 8
[[ ( $(printf %d "$1" 2> /dev/null ) == $1 ) \
&& ( $1 -ge 0 ) && ( $1 -le 255 ) ]] || return 21
# args are valid
echo -n -e "\x$(printf %02X "$1")"
}
charToDec () {
# converts single character to corresponding decimal value
# stdin OR arg: one character
# [arg overrides stdin; stdin is required for NUL (0) or LF (0x0A)]
# out: decimal value from 0-255
#exit: 8=extraneous arg, 9=invalid stdin,
# 11=missing stdin/arg, 21=invalid arg
[[ ( ! -t 0 ) && $1 ]] && { cat > /dev/null; return 8; }
[[ ( -t 0 ) ]] && { [[ $2 ]] && return 8; [[ $1 ]] || return 11; }
# arg/stdin is potentially valid (additional check below)
charX="$1X"; [[ $1 ]] || charX="$(cat; echo -n 'X';)"
[[ ${#charX} -le 2 ]] || return $(( $([[ $1 ]]; echo $?) ? 9 : 21 ))
# above line verifies that arg/stdin is valid
[[ ${#charX} -ne 2 ]] && { echo -n 0; return 0; }
echo -n "${charX:0:1}" | od -t u1 | \
head -1 | sed 's/[0\ ]*//' | tr -d ' \n'
}
# --- end bashByter
cpAD () {
# copy a file with its AppleDouble component in ./.AppleDouble
# arg1 = source path, # arg2 = destination directory (not filename)
afpsync=
if [[ $1 == "-s" ]]; then
afpsync=1
shift
fi
arg1="$1"
[[ "$arg1" == *"/"* ]] || arg1="./$arg1"
cp -p "$arg1" "$2"
mkdir -p "$2"/.AppleDouble
cp -p "${arg1%/*}"/.AppleDouble/"${arg1##*/}" "$2"/.AppleDouble
[[ $afpsync ]] && afpsync -v > /dev/null
}
checkP8YearTables () {
updateP8YearTables -c $1
return $?
}
updateP8YearTables () {
# JC: Geoff Body and Andrew Roughan helped Joseph Carter with this one
# Update ProDOS 8 year table (and spalsh date because may as well)
# Effectively, we're turning p8 into the 6.0.2 or 6.0.3 version here.
#
# ID: updates the year table for the Thunderclock driver in ProDOS 8;
# calculated from the day of week and date, as year is unavailable.
# accepts optional arguments for custom patches
# arg1 = year table, comma separated
# arg2 = date string for ProDOS splash screen in format "dd-Mmm-yy"
# OR for presets, arg1=602 or arg1=603, arg2 is empty
check=
if [[ $1 == "-c" ]]; then
check=1
shift
fi
patch1=""
patch2=""
if [[ $1 == "602" ]]; then
patch1=$(echo -n -e "\x12\x11\x0b\x10\x0f\x0e\x0d")
patch2=$(echo -n -e "\xb2\xb2\xad\xca\xf5\xee\xad\xb1\xb5")
elif [[ $1 == "603" ]]; then
patch1=$(echo -n -e "\x12\x11\x0b\x10\x0f\x0e\x0d")
patch2=$(echo -n -e "\xb0\xb2\xad\xc1\xf5\xe7\xad\xb1\xb5")
elif [[ $1 ]]; then # year table supplied as seven comma-separated values
for year in $(tr "," " " <<< $1); do
patch1=${patch1}$(echo -n -e "\x$(printf %02X $year)")
done
if [[ $2 ]]; then # splash screen date supplied, convert to high-ascii bytes
for c in $(sed "s/./& /g" <<< $2); do
patch2=${patch2}$(decToChar $(( $(charToDec $c) + 128 )))
done
fi
fi
wd=$PWD
cd /usr/local/etc/netatalk/a2boot
files=("p8" "ProDOS16 Image" "Apple :2f:2fe Boot Blocks" "$gsosDir/System/P8")
offset1=(3958 7030 7071 3958) # splash screen date
offset2=(38 3110 79 38) # year table
i=0
if [[ $check ]]; then
# check if patched -- we're not actually doing this any more; we're always patching
patched=0 # 0 is true in this case since it's the return value
while (( $i < ${#files[@]} )); do
[[ ! -f "${files[$i]}" ]] && { (( i++ )); continue; }
if [[ ! $patch1 || $patch1 != $(sudo dd if="${files[$i]}" skip=${offset1[$i]} bs=1 count=7 2> /dev/null | tr -d '\0') ]]; then
patched=1 # 1 is false
break
fi
if [[ ! $patch2 || $patch2 != $(sudo dd if="${files[$i]}" skip=${offset2[$i]} bs=1 count=9 2> /dev/null | tr -d '\0') ]]; then
patched=1 # 1 is false
break
fi
(( i++ ))
done
else
# perform patch
while (( $i < ${#files[@]} )); do
if [[ ! -f "${files[$i]}" ]]; then
(( i++ ))
continue
fi
if [[ $patch1 ]]; then
echo -n -e ${patch1} | sudo dd of="${files[$i]}" seek=${offset1[$i]} bs=1 conv=notrunc 2>/dev/null
fi
if [[ $patch2 ]]; then
echo -n -e ${patch2} | sudo dd of="${files[$i]}" seek=${offset2[$i]} bs=1 conv=notrunc 2>/dev/null
fi
(( i++ ))
done
patched=0 # 0 is true
fi
return $patched
cd "$wd"
}
# bail out on automated netboot setup unless -b is also specified
autoAnswerYes=
if [[ -f /tmp/a2server-autoAnswerYes ]]; then
autoAnswerYes=1
fi
netbootInstalled=
if [[ -f /usr/local/etc/netatalk/a2boot/ProDOS16\ Boot\ Blocks && \
-f /usr/local/etc/netatalk/a2boot/ProDOS16\ Image && \
-f /usr/local/etc/netatalk/a2boot/Apple\ :2f:2fe\ Boot\ Blocks && \
-f /usr/local/etc/netatalk/a2boot/p8 && \
-f /usr/local/etc/netatalk/a2boot/Basic.System && \
-f $gsosDir/USERS/USER1/SETUP/ATINIT && \
-f $gsosDir/USERS/"<ANY USER>"/SETUP/ATINIT ]] ; then
netbootInstalled=1
fi
REPLY=
if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
if [[ ! $autoAnswerYes ]]; then
if [[ ! $netbootInstalled ]]; then
echo
echo "Do you want to set up A2SERVER to be able to boot Apple II"
echo -n "computers over the network? "
read
else
echo "A2SERVER is already set up to boot Apple II computers over the network."
fi
fi
if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
nbmode=1
echo
sudo true
mkdir -p /tmp/netboot
rm -r /tmp/netboot/* 2> /dev/null
cd /tmp/netboot
# this will get "Disk 7" (Apple II Setup) as a raw (block dump) image
if [[ ! -f /usr/local/etc/netatalk/a2boot/ProDOS16\ Boot\ Blocks ]] \
|| [[ ! -f /usr/local/etc/netatalk/a2boot/ProDOS16\ Image ]] \
|| [[ ! -f /usr/local/etc/netatalk/a2boot/Apple\ :2f:2fe\ Boot\ Blocks ]] \
|| [[ ! -f /usr/local/etc/netatalk/a2boot/p8 ]] \
|| [[ ! -f /usr/local/etc/netatalk/a2boot/Basic.System ]]; then
echo "A2SERVER: Downloading Apple II Boot Blocks..."
cd /tmp/netboot
if [[ $useExternalURL ]]; then
wget --max-redirect 0 -qO Disk_7_of_7-Apple_II_Setup.sea.bin "${gsosURL}Disk_7_of_7-Apple_II_Setup.sea.bin"
unar -k skip Disk_7_of_7-Apple_II_Setup.sea.bin &> /dev/null
if (( $? != 0 )); then
wget -qO Disk_7_of_7-Apple_II_Setup.sea.bin "${gsosBackupURL}Disk_7_of_7-Apple_II_Setup.sea.bin"
unar -k skip Disk_7_of_7-Apple_II_Setup.sea.bin &> /dev/null
fi
fi
if [[ ! -f 'Disk 7 of 7-Apple II Setup.sea' ]]; then
wget -qO Disk_7_of_7-Apple_II_Setup.sea.bin "${a2sBinaryURL}/appleii/gsos601/Disk_7_of_7-Apple_II_Setup.sea.bin"
unar -k skip Disk_7_of_7-Apple_II_Setup.sea.bin &> /dev/null
fi
truncate -s 819284 'Disk 7 of 7-Apple II Setup.sea'
dd if='Disk 7 of 7-Apple II Setup.sea' of=APPLE2SETUP.HDV bs=84 skip=1 2> /dev/null
mkdir -p a2setup
sudo mount -t hfs -o ro,loop APPLE2SETUP.HDV a2setup
sudo mkdir -p /usr/local/etc/netatalk/a2boot
sudo rm -r /usr/local/etc/netatalk/a2boot/* 2> /dev/null
sudo cp -p a2setup/System\ Folder/* /usr/local/etc/netatalk/a2boot
sudo umount a2setup
sudo mv /usr/local/etc/netatalk/a2boot/Apple* /usr/local/etc/netatalk/a2boot/'Apple :2f:2fe Boot Blocks'
cd /usr/local/etc/netatalk/a2boot
# thanks to Geoff Body for these Boot Blocks patches
# fix cleartext password login bug
echo -n -e "\xA8\xA2\x01\xBD\x80\x38\x99\xA0\x38\xC8\xE8\xE0\x09\x90\xF4" | \
sudo dd of='Apple :2f:2fe Boot Blocks' bs=19779 seek=1 conv=notrunc 2> /dev/null
echo -n -e "\xA8\xA2\x01\xBD\x80\x10\x99\xA0\x10\xC8\xE8\xE0\x09\x90\xF4" | \
sudo dd of='ProDOS16 Image' bs=22583 seek=1 conv=notrunc 2> /dev/null
# enable typing "8" during GS/OS netboot to force ProDOS 8 boot
echo -n -e "\x92" | sudo dd of='ProDOS16 Image' bs=256 seek=1 conv=notrunc 2> /dev/null
echo -n -e "\x20\x7d\x14" | sudo dd of='ProDOS16 Image' bs=864 seek=1 conv=notrunc 2> /dev/null
echo -n -e "\xad\x00\xc0\x29\xff\x00\xc9\xb8\x00\xd0\x06\xa9\x02\x00\x8d\x53\x14\xa9\x10\x0f\x60" | \
sudo dd of='ProDOS16 Image' bs=1661 seek=1 conv=notrunc 2> /dev/null
fi
echo "A2SERVER: Boot Blocks have been installed."
# get a2server-tools if necessary
if [[ ! -f /usr/local/bin/mkatinit ]] \
|| [[ ! -f /usr/local/bin/afptype ]] \
|| [[ ! -f /usr/local/bin/mkvolinfo ]] \
|| [[ ! -f /usr/local/bin/afpsync ]] \
|| [[ ! -f /usr/local/bin/cppo ]]; then
"$a2sSource/scripts/a2server-2-tools.txt"
fi
# put BASIC.SYSTEM at root for ProDOS 8 startup
cp -p /usr/local/etc/netatalk/a2boot/Basic.System $gsosDir/BASIC.System
afpsync -v $gsosDir > /dev/null
afptype -p SYS -q $gsosDir/BASIC.System
# create tools for setting GS/OS or ProDOS 8 boot in battery RAM and rebooting. Props yet again to Geoff Body.
if [[ ! -f $p8Dir/NETBOOT.P8 ]]; then
echo
echo "A2SERVER: Creating NETBOOT.P8..."
touch $p8Dir/NETBOOT.P8
echo -n -e "\x38\x20\x1f\xfe\x90\x01\x60\xfb\x08\xc2\x30\xf4\x02\x00\xf4\x62\x00\xa2\x03\x0b\x22\x00\x00\xe1\x78\xf4\x00\x00\xf4\x00\x00\xab\xab\x2b\x38\xfb\xce\xf4\x03\xa9\x0c\x8d\x68\xc0\x9c\x47\xc0\x9c\x41\xc0\xa9\x09\x8d\x39\xc0\xa9\xc0\x8d\x39\xc0\x5c\x62\xfa\x00" \
| sudo dd of="$p8Dir/NETBOOT.P8" 2> /dev/null
afpsync -v $p8Dir > /dev/null
afptype -p SYS -q $p8Dir/NETBOOT.P8
fi
if [[ ! -f $gsosDir/NETBOOT.GSOS ]]; then
echo
echo "A2SERVER: Creating NETBOOT.GSOS..."
# create tool for setting GSOS boot in battery RAM and rebooting. Props yet again to Geoff Body.
touch $gsosDir/NETBOOT.GSOS
echo -n -e "\x38\x20\x1f\xfe\x90\x01\x60\xfb\x08\xc2\x30\xf4\x01\x00\xf4\x62\x00\xa2\x03\x0b\x22\x00\x00\xe1\x78\xf4\x00\x00\xf4\x00\x00\xab\xab\x2b\x38\xfb\xce\xf4\x03\xa9\x0c\x8d\x68\xc0\x9c\x47\xc0\x9c\x41\xc0\xa9\x09\x8d\x39\xc0\xa9\xc0\x8d\x39\xc0\x5c\x62\xfa\x00" \
| sudo dd of="$p8Dir/NETBOOT.GSOS" 2> /dev/null
afpsync -v $gsosDir > /dev/null
afptype -p SYS -q $gsosDir/NETBOOT.GSOS
fi
mkatinit -gs -d -f # GS/OS registered user and Guest starts up with SYSTEM/FINDER
mkatinit -d -f guest # ProDOS 8 Guest starts up with BASIC.SYSTEM (no registered user)
netbootInstalled=1
fi
if [[ $netbootInstalled ]]; then
gsosInstall=
gsosReinstall=1
if [[ -f "$gsosDir/SYSTEM/START.GS.OS" ]]; then
while true; do
gsosInstall=
gsosReinstall=
echo
echo "GS/OS is already installed on this volume."
echo "1: leave existing GS/OS system in place"
echo "2: delete installed GS/OS system, then install new GS/OS"
echo "3: install or upgrade GS/OS on top of existing GS/OS system"
echo
echo -n "Which would you like to do? "
read
if [[ $REPLY == "2" || $REPLY == "3" ]]; then
gsosReinstall=$REPLY
if (( $gsosReinstall == 2 )); then
echo
echo -n "Are you sure you want to delete your entire GS/OS System folder? "
read
if [[ ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
rm -r "$gsosDir/System"/* "$gsosDir/System/.AppleDouble"/* 2> /dev/null
afpsync &> /dev/null
echo
break
fi
else
echo -n "Are you sure you want to reinstall GS/OS over your existing system? "
read
if [[ ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
rm -r "$gsosDir/System/Start.GS.OS $gsosDir/System/.AppleDouble/Start.GS.OS" 2> /dev/null
afpsync &> /dev/null
echo
break
fi
fi
else
gsosInstall=1
break
fi
done
fi
if [[ $gsosReinstall ]]; then
if [[ ! $autoAnswerYes ]]; then
echo
echo "You can set up GS/OS for network boot. This may take a while."
echo
echo " 0: don't install GS/OS"
echo " 1: GS/OS 6.0.1 (May 1993) [official release]"
echo " The final version authorized by Apple. It has a few bugs,"
echo " but most of these can be patched. Predictable and might be"
echo " required if you use certain patches."
echo " 2: GS/OS 6.0.2 (Jul 2015)"
echo " A community effort released by Antoine Vignau with fixes for"
echo " some serious bugs and a few other enhancements."
echo " 3: GS/OS 6.0.3 (Aug 2015)"
echo " Continuing community effort released by Tony Diaz. Includes"
echo " previous work along with additional fixes/changes. Better"
echo " documentation of changes. Most will prefer this or Apple's"
echo " release above."
echo
echo -n "Which flavor would you like? "
read
fi
[[ $autoAnswerYes ]] && gsosVersion=1
if [[ $REPLY == "1" || $REPLY == "2" || $REPLY == "3" ]]; then
gsosInstall=$REPLY
if [[ gsosInstall -gt 1 ]]; then
updateP8YearTables
fi
# get GS/OS disks and put them in IMAGES
# also dump contents into NET.INSTALL and modify scripts to work from there
# echo
echo
echo "A2SERVER: Downloading GS/OS 6.0.${gsosInstall} installer disk images..."
mkdir -p /tmp/netboot
rm -r /tmp/netboot/* 2> /dev/null
cd /tmp/netboot
mkdir -p $imagesDir
mkdir -p $netInstallDir
activeDisk=0
diskNames=( Install System.Disk SystemTools1 SystemTools2 Fonts synthLAB )
if (( $gsosInstall == 1 )); then
:
elif (( $gsosInstall == 2 )); then
gsosURL="http://mirrors.apple2.org.za/Apple%20II%20Documentation%20Project/Software/Operating%20Systems/Apple%20IIGS%20System/Disk%20Images/"
diskNames=( Install System.Disk SystemTools1 SystemTools2 SystemTools3 Fonts1 Fonts2 synthLAB )
diskWebNames=( Install System%20disk System%20tools%201 System%20tools%202 System%20tools%203 Fonts%201 Fonts%202 Synthlab )
elif (( $gsosInstall == 3 )); then
gsosURL="ftp://ftp.apple.asimov.net/pub/apple_II/images/gs/os/gsos/Apple_IIGS_System_6.0.3/"
fi
# delete previously downloaded installer
rm -f "$imagesDir/* $imagesDir/.AppleDouble"/*
rm -f "$netInstallDir/* $netInstallDir/.AppleDouble"/*
afpsync -v $gsosDir > /dev/null
for diskname in ${diskNames[@]}; do
outfile="$imagesDir/$diskname.po"
(( activeDisk++ ))
echo "A2SERVER: Disk ${activeDisk} of ${#diskNames[@]}: $diskname"
if (( $gsosInstall == 1 )); then
if [[ $useExternalURL ]]; then
wget --max-redirect 0 -qO "Disk_${activeDisk}_of_7-${diskname}.sea.bin" "${gsosURL}Disk_${activeDisk}_of_7-${diskname}.sea.bin"
unar -k skip "Disk_${activeDisk}_of_7-${diskname}.sea.bin" &> /dev/null
if [[ ! -f "Disk ${activeDisk} of 7-${diskname}.sea" ]]; then
wget -qO "Disk_${activeDisk}_of_7-${diskname}.sea.bin" "${gsosBackupURL}Disk_${activeDisk}_of_7-${diskname}.sea.bin"
unar -k skip "Disk_${activeDisk}_of_7-${diskname}.sea.bin" &> /dev/null
fi
fi
if [[ ! -f "Disk ${activeDisk} of 7-${diskname}.sea" ]]; then
wget -qO "Disk_${activeDisk}_of_7-${diskname}.sea.bin" "${a2sBinaryURL}/appleii/gsos601/Disk_${activeDisk}_of_7-${diskname}.sea.bin"
unar -k skip "Disk_${activeDisk}_of_7-${diskname}.sea.bin" &> /dev/null
fi
truncate -s 819284 "Disk ${activeDisk} of 7-${diskname}.sea"
dd if="Disk ${activeDisk} of 7-${diskname}.sea" of=${outfile} bs=84 skip=1 &> /dev/null
elif (( $gsosInstall == 2 )); then
if [[ $useExternalURL ]]; then
wget -qO $outfile "$gsosURL/IIGS%20System%206.0.2%20-%20Disk%20${activeDisk}%20${diskWebNames[$activeDisk-1]}.po"
fi
if [[ $? -ne 0 || ! -f $outfile ]]; then
wget -qO $outfile "${a2sBinaryURL}/appleii/gsos602/$diskname.po"
fi
elif (( $gsosInstall == 3 )); then
if [[ $useExternalURL ]]; then
wget -qO $outfile "$gsosURL/$diskname.po"
fi
if [[ $? -ne 0 || ! -f $outfile ]]; then
wget -qO $outfile "${a2sBinaryURL}/appleii/gsos603/$diskname.po"
fi
fi
cppo -s -ad $outfile $netInstallDir
done
rm *.sea* &> /dev/null
sed -i "s/\([^\\]\r:\)/\1A2FILES:GSOS.Installer:Net.Install:/g" $netInstallDir/Install/Scripts/*
afpsync -v $gsosDir > /dev/null
# install GS/OS
# spec for GS/OS installer scripts: GS/OS Tech Note #64
# http://www.1000bit.it/support/manuali/apple/technotes/iigs/tn.iigs.064.html
processScript () {
scriptEntries=$(cat $1 | tr '\r' '#' | tr '~' '\n' | sed 's/4#D/5/')
IFS=$'\n'
scriptEntries=($scriptEntries)
pathPrefix="/A2FILES/GSOS.Installer/Net.Install"$(tr ':' '/' <<< ${scriptEntries[0]##S*\\\\#})
entryCount=${#scriptEntries[@]}
(( entryCount -= 2 ))
# echo "entryCount: $entryCount"
entryIndex=2
while (( entryIndex <= entryCount )); do
IFS='#'
scriptEntry=(${scriptEntries[entryIndex]})
# echo $entryIndex $entryCount ${scriptEntry[@]}
action=${scriptEntry[1]:0:1}
sourcePathMixed=$(tr ':' '/' <<< ${scriptEntry[5]})
if [[ ${sourcePathMixed:0:1} != '/' ]]; then
sourcePathMixed="${pathPrefix}/$sourcePathMixed"
fi
sourcePath=$sourcePathMixed
targetPath=$gsosDir/$(tr ':' '/' <<< ${scriptEntry[6]})
# volumeName=$(cut -d/ -f 2 <<< $sourcePath)
targetParent=${targetPath%/*}
targetFile=${targetPath##*/}
sourceParent=${sourcePath%/*}
sourceFile=${sourcePath##*/}
if [[ $action == 1 || $action == 2 ]]; then
mkdir -p $targetParent
echo "copying: $sourcePathMixed"
echo " to: $targetPath"
echo
mkdir -p $targetParent
cp -p ${gsosDir%/*}$sourcePath $targetPath
mkdir -p $targetParent/.AppleDouble
cp -p ${gsosDir%/*}$sourceParent/.AppleDouble/$sourceFile $targetParent/.AppleDouble/$targetFile
elif [[ $action == 3 || $action == 4 ]]; then
if [[ -f "$targetPath" ]]; then
echo "deleting $targetPath"
rm -f "$targetPath"
rm -f "$targetParent/.AppleDouble/$targetFile"
fi
fi
(( entryIndex++ ))
done
unset IFS
}
mkdir -p /tmp/netboot
rm -r /tmp/netboot/* 2> /dev/null
cd /tmp/netboot
echo "A2SERVER: Preparing GS/OS installer scripts..."
# work through installer scripts
echo "Script: Install.Sys.File"
processScript $netInstallDir/Install/Scripts/Instal.Sys.File
echo "Script: HFS.FST"
processScript $netInstallDir/Install/Scripts/HFS.FST
echo "Script: DOS33.FST"
processScript $netInstallDir/INSTALL/SCRIPTS/DOS3.3.FST
echo "Script: Teach"
processScript $netInstallDir/Install/Scripts/Teach
echo "Script: AppleShare"
processScript $netInstallDir/Install/Scripts/Appleshare
echo "Script: Server.Sys.File"
processScript $netInstallDir/Install/Scripts/Server.Sys.File
# sync netatalk database
afpsync -v $gsosDir > /dev/null
else
gsosInstall=
fi
fi
# patch ProDOS 8 Thunderclock driver year table based on today's date
echo
echo "A2SERVER: Updating ProDOS 8 Thunderclock driver year table..."
mkdir -p /tmp/netboot
rm -r /tmp/netboot/* 2> /dev/null
p8ClockPatch="$a2sSource/scripts/clock.patch.py"
updateP8YearTables $(python $p8ClockPatch $(LANG=C date +"%a %m/%d/%y"))
gsosInstalled=""
if [[ -f "$gsosDir/System/Start.GS.OS" ]]; then
gsosInstalled="GS/OS and "
fi
p8ToolsInstalled=
if [[ -f $diskToolsP8Dir/SHRINKIT && \
-f $diskToolsP8Dir/DSK2FILE && \
-f $diskToolsP8Dir/SYSUTIL ]]; then
p8ToolsInstalled=1
fi
gsosToolsInstalled=
if [[ -f $imageToolsDir/Asimov && \
-f $gsosDir/System/System.Setup/MountIt && \
-f $imageToolsDir/GSHK ]]; then
gsosToolsInstalled=1
fi
toolsInstalled=
if [[ $gsosInstalled ]]; then
if [[ $gsosToolsInstalled && $p8ToolsInstalled ]]; then
toolsInstalled=1
fi
else
toolsInstalled=$p8ToolsInstalled
fi
REPLY=
if [[ ! $autoAnswerYes ]]; then
if [[ ! $toolsInstalled ]]; then
echo
echo "Do you want to download and install utilities for working with"
echo -n "disk images and archive files in ${gsosInstalled}ProDOS 8? "
read
else
echo
echo "A2SERVER: Disk image and archive utilities are already installed."
fi
fi
if [[ $gsosInstalled ]]; then
if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
# download image tools and put them in IMAGE.TOOLS
echo "A2SERVER: Downloading GS/OS disk image utilities..."
mkdir -p $imageToolsDir
# get Asimov2 (for GS/OS)
echo -n "Asimov 2.0"
if [[ -f $imageToolsDir/Asimov ]]; then
echo " is already installed."
else
echo
cd /tmp/netboot
if [[ $useExternalURL ]]; then
wget -qO Asimov.shk "http://www.ninjaforce.com/downloads/Asimov.shk"
if (( $? != 0 )); then
wget -qO Asimov.shk "http://web.archive.org/web/20160330184627/http://www.ninjaforce.com/downloads/Asimov.shk"
fi
nulib2 -x -s Asimov.shk &> /dev/null
fi
if [[ ! -d Asimov ]]; then
wget -qO Asimov.shk "${a2sBinaryURL}/appleii/Asimov.shk"
nulib2 -x -s Asimov.shk &> /dev/null
fi
cp -p Asimov/Asimov $imageToolsDir/Asimov
afpsync -v $gsosDir > /dev/null
cat Asimov/Asimov_rsrc_ >> $imageToolsDir/.AppleDouble/Asimov
afptype -p S16 -q $imageToolsDir/Asimov
fi
echo -n "GS-ShrinkIt 1.1"
# get GS-ShrinkIt
if [[ -f $imageToolsDir/GSHK ]]; then
echo " is already installed."
else
echo
mkdir -p /tmp/netboot/gshk
cd /tmp/netboot/gshk
if [[ $useExternalURL ]]; then
wget -qO gshk11.sea "http://www.nulib.com/library/gshk11.sea"
if (( $? != 0 )); then
wget -qO gshk11.sea "http://web.archive.org/web/20131031160750/http://nulib.com/library/gshk11.sea"
fi
nulib2 -x -s gshk11.sea &> /dev/null
fi
if [[ ! -f GSHK ]]; then
wget -qO gshk11.sea "${a2sBinaryURL}/appleii/gshk11.sea"
nulib2 -x -s gshk11.sea &> /dev/null
fi
cp -p GSHK $imageToolsDir/GSHK
afpsync -v $gsosDir > /dev/null
cat GSHK_rsrc_ >> $imageToolsDir/.AppleDouble/GSHK
afptype -p S16 -a DB07 -q $imageToolsDir/GSHK
cd /tmp/netboot
fi
echo -n "MountIt 1.4"
# get MountIt (for GS/OS)
if [[ -f $gsosDir/System/System.Setup/MountIt ]]; then
echo " is already installed."
else
echo
mkdir -p /tmp/netboot/mountit
cd /tmp/netboot/mountit
if [[ $useExternalURL ]]; then
wget -q -O MOUNTIT.SHK "http://www.brutaldeluxe.fr/products/apple2gs/MOUNTIT.SHK"
if (( $? != 0 )); then
wget -q -O "http://web.archive.org/web/20150201044930/http://brutaldeluxe.fr/products/apple2gs/MOUNTIT.SHK"
fi
cppo -s -ad MOUNTIT.SHK System:System.Setup:MountIt . &> /dev/null
cppo -s -ad MOUNTIT.SHK ReadMe . &> /dev/null
fi
if [[ ! -f ReadMe ]]; then
wget -qO MOUNTIT.SHK "${a2sBinaryURL}/appleii/MOUNTIT.SHK"
cppo -s -ad MOUNTIT.SHK System:System.Setup:MountIt . &> /dev/null
cppo -s -ad MOUNTIT.SHK ReadMe . &> /dev/null
fi
cpAD ./MountIt $gsosDir/System/System.Setup
mkdir -p $gsosDir/GSOS.Installer/Image.Tools/MountIt
cpAD ./ReadMe $gsosDir/GSOS.Installer/Image.Tools/MountIt
afpsync -v $gsosDir > /dev/null
fi
fi
fi
if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
echo "A2SERVER: Downloading ProDOS 8 disk image utilities..."
mkdir -p $diskToolsP8Dir
echo -n "ShrinkIt 3.4"
# get ShrinkIt 3.4 (for ProDOS 8)
if [[ -f $diskToolsP8Dir/SHRINKIT ]]; then
echo " is already installed."
else
echo
cd /tmp/netboot
if [[ $useExternalURL ]]; then
wget -qO shrinkit.sdk "http://www.nulib.com/library/shrinkit.sdk"
if (( $? != 0 )); then
wget -qO shrinkit.sdk "http://web.archive.org/web/20131031160750/http://www.nulib.com/library/shrinkit.sdk"
fi
nulib2 -x -s -e shrinkit.sdk &> /dev/null
fi
if [[ ! -f "SHRINKIT#000118i" ]]; then
wget -qO shrinkit.sdk "${a2sBinaryURL}/appleii/shrinkit.sdk"
nulib2 -x -s -e shrinkit.sdk &> /dev/null
fi
cppo -s -ad "SHRINKIT#000118i" /SHRINKIT/SHRINKIT $diskToolsP8Dir &> /dev/null
afpsync -v $sharepath > /dev/null
fi
echo -n "DSK2FILE 5.8"
# get DSK2FILE (for ProDOS 8)
if [[ -f $diskToolsP8Dir/DSK2FILE ]]; then
echo " is already installed."
else
echo
cd /tmp/netboot
if [[ $useExternalURL ]]; then
# This should not be .zip *sigh*
wget -q -O dsk2file.shk "http://www.dwheeler.com/6502/oneelkruns/dsk2file.zip"
if (( $? != 0 )); then
wget -q -O dsk2file.shk http://web.archive.org/web/20120726132356/http://www.dwheeler.com/6502/oneelkruns/dsk2file.zip
fi
nulib2 -x -s dsk2file.shk &> /dev/null
fi
if [[ ! -f DSK2FILE58 ]]; then
wget -qO dsk2file.shk "${a2sBinaryURL}/appleii/dsk2file.shk"
nulib2 -x -s dsk2file.shk &> /dev/null
fi
cp -p DSK2FILE58 $diskToolsP8Dir/DSK2FILE
afpsync -v $sharepath > /dev/null
afptype -p SYS -q $diskToolsP8Dir/DSK2FILE
fi
echo -n "Apple System Utilities 3.1"
if [[ -f $diskToolsP8Dir/SYSUTIL ]]; then
echo " is already installed."
else
echo
cd /tmp/netboot
if [[ $useExternalURL ]]; then
wget --max-redirect 0 -qO Apple_II_System_Disk_3.2.sea.bin "http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Apple_II/Apple_II_Supplemental/Apple_II_System_Disk_3.2.sea.bin"
if (( $? != 0 )); then
wget -qO Apple_II_System_Disk_3.2.sea.bin "http://archive.org/download/download.info.apple.com.2012.11/download.info.apple.com.2012.11.zip/download.info.apple.com%2FApple_Support_Area%2FApple_Software_Updates%2FEnglish-North_American%2FApple_II%2FApple_II_Supplemental%2FApple_II_System_Disk_3.2.sea.bin"
fi
unar -k skip Apple_II_System_Disk_3.2.sea.bin &> /dev/null
fi
if [[ ! -f 'Apple II System Disk 3.2.sea' ]]; then
wget -qO Apple_II_System_Disk_3.2.sea.bin "${a2sBinaryURL}/appleii/Apple_II_System_Disk_3.2.sea.bin"
unar -k skip Apple_II_System_Disk_3.2.sea.bin &> /dev/null
fi
truncate -s 819284 'Apple II System Disk 3.2.sea'
dd if='Apple II System Disk 3.2.sea' of=A2SYSDISK32.HDV bs=84 skip=1 2> /dev/null
cppo -s -ad A2SYSDISK32.HDV /UTILITIES/SYSUTIL.SYSTEM $diskToolsP8Dir/SYSUTIL &> /dev/null
cppo -s -ad A2SYSDISK32.HDV /UTILITIES/UTIL.0 $diskToolsP8Dir &> /dev/null
cppo -s -ad A2SYSDISK32.HDV /UTILITIES/UTIL.1 $diskToolsP8Dir &> /dev/null
cppo -s -ad A2SYSDISK32.HDV /UTILITIES/UTIL.2 $diskToolsP8Dir &> /dev/null
afpsync -v $sharepath > /dev/null
fi
fi
p8CommInstalled=
if [[ -f $commDir/ProTERM/PROTERM && \
-f $commDir/Z.Link/Z.LINK && \
-f $commDir/ADTPro/ADTPRO && \
-f $commDir/ADTPro/VSDRIVE ]]; then
p8CommInstalled=1
fi
gsosCommInstalled=
if [[ -f $commDir/Spectrum/Spectrum && \
-f $commDir/SAM2/SAM2 && \
-f $commDir/SAFE2/SAFE2 && \
-f $commDir/SNAP/SNAP && \
-f $gsosDir/System/CDevs/TCPIP ]]; then
gsosCommInstalled=1
fi
commInstalled=
if [[ $gsosInstalled ]]; then
if [[ $gsosCommInstalled && $p8CommInstalled ]]; then
commInstalled=1
fi
else
commInstalled=$p8CommInstalled
fi
REPLY=
if [[ ! $autoAnswerYes ]]; then
if [[ ! $commInstalled ]]; then
echo
echo "Do you want to download communications software for"
echo -n "$gsosInstalled""ProDOS 8? "
read
else
echo
echo "A2SERVER: Communications software is already installed."
fi
fi
if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
echo "A2SERVER: Downloading communications software..."
mkdir -p $commDir
if [[ $gsosInstalled ]]; then
unset safeUrl samUrl snapUrl safeVer samVer snapVer
if [[ $useExternalURL ]]; then
safeUrl=$(wget -qO- http://speccie.uk/software/safe2/ | grep -i 'safe2.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2 | tr -d '"')
samUrl=$(wget -qO- http://speccie.uk/software/sam2/ | grep -i 'sam2.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2 | tr -d '"')
snapUrl=$(wget -qO- http://speccie.uk/software/snap/ | grep -i 'snap.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2 | tr -d '"')
safeVer=$(echo $safeUrl | rev | cut -d '/' -f 1 | cut -d '.' -f 2 | rev | cut -c 5- | sed 's/./.&/g' | cut -c 2-)
samVer=$(echo $samUrl | rev | cut -d '/' -f 1 | cut -d '.' -f 2 | rev | cut -c 4- | sed 's/./.&/g' | cut -c 2-)
snapVer=$(echo $snapUrl | rev | cut -d '/' -f 1 | cut -d '.' -f 2 | rev | cut -c 5- | sed 's/./.&/g' | cut -c 2-)
fi
echo -n "Spectrum"
# get Spectrum
if [[ -f $commDir/Spectrum/Spectrum ]]; then
echo " is already installed."
else
echo
mkdir -p $commDir/Spectrum
# remove images that might have been installed by 1.2.5
cd $commDir/Spectrum
rm SPECTRUM.HDV MANUALS.HDV SOUNDS.HDV EXTRAS.HDV &> /dev/null
# install Spectrum into GS/OS
mkdir -p /tmp/netboot/spectrum
cd /tmp/netboot/spectrum
if [[ $useExternalURL ]]; then
wget -qO spectrum_gold_2mg.zip "http://www.speccie.co.uk/speccie/software/spectrum_gold_2mg.zip"
unzip spectrum_gold_2mg.zip Spectrum.Gold.2mg &> /dev/null
fi
if [[ ! -f Spectrum.Gold.2mg || $(wc -c < Spectrum.Gold.2mg) -eq 0 ]]; then
wget -qO spectrum_gold_2mg.zip "${a2sBinaryURL}/appleii/spectrum_gold_2mg.zip"
unzip spectrum_gold_2mg.zip Spectrum.Gold.2mg &> /dev/null
fi
cppo -s -ad Spectrum.Gold.2mg . &> /dev/null
userFolder=$(tr [:lower:] [:upper:] <<< $USER)
for thisFolder in \
Installer/Extras/CDevs^System/CDevs \
Installer/Extras/Tools^System/Tools \
Installer/Extras/Fonts^System/Fonts \
Installer/Extras/System.Setup^System/System.Setup \
Installer/Help^System/Desk.Accs \
Installer/Spectrum.Sounds^System/Sounds \
Spectrum.*/Add.Ons^USERS/$userFolder/Add.Ons \
Spectrum.*/Spectrum.Script^USERS/$userFolder/Spectrum.Script \
Spectrum.*/Add.Ons^Comm/Spectrum/Add.Ons \
Spectrum.*/Spectrum.Script^Comm/Spectrum/Spectrum.Script \
Manuals^Comm/Spectrum/Manuals
do
mkdir -p $gsosDir/"${thisFolder##*^}"
cp -R Spectrum.Gold/${thisFolder%%^*}/* $gsosDir/"${thisFolder##*^}"
mkdir -p $gsosDir/"${thisFolder##*^}"/.AppleDouble
cp -R Spectrum.Gold/${thisFolder%%^*}/.AppleDouble/* $gsosDir/"${thisFolder##*^}"/.AppleDouble
done
cpAD Spectrum.Gold/Installer/SoundPatch $commDir/Spectrum
cpAD Spectrum.Gold/Spectrum.*/Spectrum $commDir/Spectrum
afpsync -v $gsosDir > /dev/null
fi
echo -n "Marinetti 3.0b8"
if [[ -f $gsosDir/System/CDevs/TCPIP ]]; then
echo " is already installed."
else
echo
mkdir -p /tmp/netboot/marinetti
cd /tmp/netboot/marinetti
# Marinetti 3.0b1 -- had to repackage because installer is GS/OS self-contained app
wget -qO MarinettiB1.SHK "${a2sBinaryURL}/appleii/MarinettiB1.SHK"
if (( $? != 0 )); then
wget -qO Marinetti3.0b8.po http://web.archive.org/web/20171105043713/http://a2retrosystems.com/downloads/Marinetti3.0b8.po
fi
cppo -ad -s -n MarinettiB1.SHK $gsosDir > /dev/null
# TCP/IP update (3.0b8)
if [[ $useExternalURL ]]; then
wget -qO Marinetti3.0b8.po "http://www.a2retrosystems.com/downloads/Marinetti3.0b8.po"
fi
if [[ $? != 0 || ! -f Marinetti3.0b8.po || $(wc -c < Marinetti3.0b8.po) != "819200" ]]; then
wget -qO Marinetti3.0b8.po "${a2sBinaryURL}/appleii/Marinetti3.0b8.po"
fi
cppo -ad Marinetti3.0b8.po /MARINETTI3.0B8/TCPIP $gsosDir/System/System.Setup > /dev/null
cppo -ad Marinetti3.0b8.po /MARINETTI3.0B8/CHANGELOG.3.0B8 $commDir/Marinetti > /dev/null
# PPP Scripted Link Layer update (1.3d4)
if [[ $useExternalURL ]]; then
wget -qO PPPX.1.3d4.SHK "http://www.apple2.org/marinetti/PPPX.1.3d4.SHK"
if (( $? != 0 )); then
wget -qO PPPX.1.3d4.SHK http://web.archive.org/web/20160331231844/http://www.apple2.org/marinetti/PPPX.1.3d4.SHK
fi
fi
if [[ $? != 0 || ! -f PPPX.1.3d4.SHK || $(wc -c < PPPX.1.3d4.SHK) != "22068" ]]; then
wget -qO PPPX.1.3d4.SHK "${a2sBinaryURL}/appleii/PPPX.1.3d4.SHK"
fi
cppo -ad -s PPPX.1.3d4.SHK . > /dev/null
cd PPPX.1.3d4
cpAD PPP.scripted $gsosDir/System/TCPIP
cpAD PPP.Script.DOC $commDir/Marinetti/Documentation
mkdir -p $commDir/Marinetti/PPP.scripted
cpAD Connect.Script $commDir/Marinetti/PPP.scripted
cpAD ChangeLog $commDir/Marinetti/PPP.scripted
# Uthernet Link Layer
if [[ $useExternalURL ]]; then
wget -qO uthernetll.bxy "http://www.speccie.co.uk/speccie/software/uthernetll.bxy"
fi
if [[ $? != 0 || ! -f uthernetll.bxy || $(wc -c < uthernetll.bxy) -eq 0 ]]; then
wget -qO uthernetll.bxy "${a2sBinaryURL}/appleii/uthernetll.bxy"
fi
cppo -ad -s -n uthernetll.bxy $gsosDir/System/TCPIP > /dev/null
# Uthernet II Link Layer
if [[ $useExternalURL ]]; then
wget -qO uthernet2ll.bxy "http://www.speccie.co.uk/speccie/software/uthernet2ll.bxy"
fi
if [[ $? != 0 || ! -f uthernet2ll.bxy || $(wc -c < uthernet2ll.bxy) -eq 0 ]]; then
wget -qO uthernet2ll.bxy "${a2sBinaryURL}/appleii/uthernet2ll.bxy"
fi
cppo -ad -s -n uthernet2ll.bxy $gsosDir/System/TCPIP > /dev/null
# MacIP Link Layer settings for A2SERVER
wget -qO- "${a2sBinaryURL}/a2server/macip-prefs.tgz" | tar Pxz
afpsync -v $gsosDir > /dev/null
fi
echo -n "SAFE2 $safeVer"
if [[ -f $commDir/SAFE2/SAFE2 ]]; then
echo " is already installed."
else
echo
mkdir -p $commDir/SAFE2
mkdir -p /tmp/netboot/safe2
cd /tmp/netboot/safe2
if [[ $useExternalURL ]]; then
if [[ ! $safeUrl ]]; then
safeUrl="http://www.speccie.co.uk/speccie/software/safe230.bxy"
fi
wget -qO safe2.bxy "$safeUrl"
cppo -s -ad safe2.bxy . &> /dev/null
fi
if [[ ! -f SAFE2.Archive/Safe2 ]]; then
wget -qO safe2.bxy "${a2sBinaryURL}/appleii/safe230.bxy"
cppo -s -ad safe2.bxy . &> /dev/null
fi
cd SAFE2.Archive
cpAD Safe2 $commDir/SAFE2
cpAD The.Manual $commDir/SAFE2
cpAD Read.Me.First $commDir/SAFE2
cpAD Version.History $commDir/SAFE2
cpAD Fonts/SAFE.8 $gsosDir/System/Fonts
cpAD Fonts/Shaston.16 $gsosDir/System/Fonts
cpAD TimeZone/TimeZone $gsosDir/System/CDevs
cpAD TimeZone/Tool056 $gsosDir/System/Tools
rm -r $gsosDir/System/Desk.Accs/Help.Files/SAFE2 2> /dev/null
mv Help/Help.Files/SAFE2 $gsosDir/System/Desk.Accs/Help.Files
wget -qO- "${a2sBinaryURL}/appleii/safe2-setup.tgz" | tar Pzx
afpsync -v $gsosDir > /dev/null
fi
echo -n "SAM2 $samVer"
if [[ -f $commDir/SAM2/SAM2 ]]; then
echo " is already installed."
else
echo
mkdir -p $commDir/SAM2
mkdir -p $commDir/SAM2/SAM2.Data
mkdir -p /tmp/netboot/sam2
cd /tmp/netboot/sam2
if [[ $useExternalURL ]]; then
if [[ ! $samUrl ]]; then
samUrl="http://www.speccie.co.uk/speccie/software/sam206.bxy"
fi
wget -qO sam2.bxy "$samUrl"
cppo -s -ad sam2.bxy . &> /dev/null
fi
if [[ ! -f SAM2.Archive/SAM2/SAM2 ]]; then
wget -qO sam2.bxy "${a2sBinaryURL}/appleii/sam206.bxy"
cppo -s -ad sam2.bxy . &> /dev/null
fi
cd SAM2.Archive
cpAD SAM2/SAM2 $commDir/SAM2
cpAD SAM2/SAM2.Data/Taglines $commDir/SAM2/SAM2.Data
cpAD Sounds/SP.Snds.Aux $gsosDir/System/Sounds
cpAD Fonts/SAM.8 $gsosDir/System/Fonts
cpAD Fonts/SAM.10 $gsosDir/System/Fonts
cpAD The.Manual $commDir/SAM2
cpAD Read.Me.First $commDir/SAM2
cpAD Version.History $commDir/SAM2
rm -r $gsosDir/System/Desk.Accs/Help.Files/SAM2 2> /dev/null
mv Help/Help.Files/SAM2 $gsosDir/System/Desk.Accs/Help.Files
afpsync -v $gsosDir > /dev/null
fi
echo -n "SNAP $snapVer"
if [[ -f $commDir/SNAP/SNAP ]]; then
echo " is already installed."
else
echo
mkdir -p $commDir/SNAP
mkdir -p /tmp/netboot/snap
cd /tmp/netboot/snap
if [[ $useExternalURL ]]; then
if [[ ! $snapUrl ]]; then
snapUrl="http://www.speccie.co.uk/speccie/software/snap118.bxy"
fi
wget -qO snap.bxy "$snapUrl"
cppo -s -ad snap.bxy . &> /dev/null
fi
if [[ ! -f SNAP.Archive/SNAP ]]; then
wget -qO snap.bxy "${a2sBinaryURL}/appleii/snap118.bxy"
cppo -s -ad snap.bxy . &> /dev/null
fi
cd SNAP.Archive
cpAD SNAP $commDir/SNAP
cpAD Fonts/SNAP.8 $gsosDir/System/Fonts
cpAD Fonts/SNAP.10 $gsosDir/System/Fonts
cpAD The.Manual $commDir/SNAP
cpAD Read.Me.First $commDir/SNAP
cpAD Change.List $commDir/SNAP
cpAD Quick.Start $commDir/SNAP
rm -r $gsosDir/System/Desk.Accs/Help.Files/SNAP 2> /dev/null
mv Help/Help.Files/SNAP $gsosDir/System/Desk.Accs/Help.Files
wget -qO- "${a2sBinaryURL}/appleii/snap-setup.tgz" | tar Pzx
afpsync -v $gsosDir > /dev/null
fi
fi
echo -n "ProTERM 3.1"
# get A2CLOUD disk and copy from there
if [[ -f $commDir/ProTERM/PROTERM ]]; then
echo " is already installed."
else
echo
mkdir -p $commDir/ProTERM
mkdir -p $commDir/ProTERM/.AppleDouble
cd /tmp/netboot
wget -qO A2CLOUD.HDV "${a2sBinaryURL}/appleii/A2CLOUD.HDV"
cppo -s -ad A2CLOUD.HDV . &> /dev/null
cd A2CLOUD
mv *PT3* *PROTERM* $commDir/ProTERM
cd .AppleDouble
mv *PT3* *PROTERM* $commDir/ProTERM/.AppleDouble
afpsync -v $gsosDir > /dev/null
fi
echo -n "Z-Link 12-15-91"
# get A2CLOUD disk and copy from there
if [[ -f $commDir/Z.Link/Z.LINK ]]; then
echo " is already installed."
else
echo
mkdir -p $commDir/Z.Link
mkdir -p $commDir/Z.Link/.AppleDouble
cd /tmp/netboot/A2CLOUD
mv Z.LINK $commDir/Z.Link
cd .AppleDouble
mv Z.LINK $commDir/Z.Link/.AppleDouble
afpsync -v $gsosDir > /dev/null
fi
echo -n "ADTPro 2.0.1"
if [[ -f $commDir/ADTPro/ADTPRO ]]; then
echo " is already installed."
else
mkdir -p $commDir/ADTPro
mkdir -p $commDir/ADTPro/.AppleDouble
echo
cd /tmp/netboot/A2CLOUD
mv *ADTPRO* *VEDRIVE* *VSDRIVE* $commDir/ADTPro
cd .AppleDouble
mv *ADTPRO* *VEDRIVE* *VSDRIVE* $commDir/ADTPro/.AppleDouble
afpsync -v $gsosDir > /dev/null
fi
fi
# clean up
cd
# rock and roll!
echo
echo
if [[ $gsosInstall ]]; then
echo "GS/OS network boot (for registered user and Guest) and"
fi
echo "ProDOS 8 network boot (for Guest only) is now configured."
echo "See http://ivanx.com/a2server for info using it."
fi
REPLY=
if [[ -d $gsosDir/SYSTEM/SYSTEM.SETUP ]]; then
if [[ ! $autoAnswerYes ]]; then
if [[ ! -f $gsosDir/SYSTEM/SYSTEM.SETUP/ATALKIRQ ]]; then
echo
echo "Do you want to download the patch required for using"
echo -n "a Farallon LocalTalk-to-Ethernet bridge with GS/OS? "
read
else
echo
echo "A2SERVER: The Farallon bridge patch has already been installed."
fi
fi
if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
# Farallon bridge patch for GS/OS courtesy of Geoff Body
echo "A2SERVER: Downloading Farallon bridge patch..."
wget -qO /tmp/FARALLON.PO "${a2sBinaryURL}/appleii/FARALLON.B1.PO" &> /dev/null
cppo -s -ad /tmp/FARALLON.PO /ATALKPATCH/ATALKIRQ $gsosDir/SYSTEM/SYSTEM.SETUP &> /dev/null
echo
echo "A2SERVER: The Farallon bridge patch is installed."
echo
echo "Note: Farallon bridges can only be used in GS/OS (with this patch)"
echo "and Apple IIe computers. Apple IIgs computers which network boot"
echo "directly into ProDOS 8 will freeze after a few minutes."
fi
fi
fi