mirror of
https://github.com/RasppleII/a2server.git
synced 2024-12-22 17:29:34 +00:00
69d041eff6
This won't reinstall your boot blocks for you if they're not the latest version. If you'd like to test this (and please test this!), you'll need to move your existing boot blocks out of the way so it can install new ones. Probably actually checking will happen when the Python stuff is ready.
551 lines
27 KiB
Bash
Executable File
551 lines
27 KiB
Bash
Executable File
#! /bin/bash
|
|
# vim: set tabstop=4 shiftwidth=4 expandtab 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.
|
|
|
|
# Ensure URL we'll use ends in a /
|
|
case "$A2SERVER_SCRIPT_URL" in
|
|
*/) scriptURL="$A2SERVER_SCRIPT_URL" ;;
|
|
*) scriptURL="${A2SERVER_SCRIPT_URL:-http://ivanx.com/a2server}/" ;;
|
|
esac
|
|
|
|
gsosDir="/media/A2SHARED/A2FILES"
|
|
imagesDir=$gsosDir/GSOS.INSTALLER/IMAGES
|
|
imageToolsDir=$gsosDir/GSOS.INSTALLER/IMAGE.TOOLS
|
|
netInstallDir=$gsosDir/GSOS.INSTALLER/NET.INSTALL
|
|
|
|
p8Dir="/media/A2SHARED/A2FILES"
|
|
diskToolsP8Dir=$p8Dir/DISK.TOOLS.P8
|
|
|
|
commDir="/media/A2SHARED/A2FILES/COMM"
|
|
spectrumDir=$commDir/SPECTRUM
|
|
protermDir=$commDir/PROTERM
|
|
zlinkDir=$commDir/Z.LINK
|
|
adtproDir=$commDir/ADTPRO
|
|
|
|
gsosURL="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"
|
|
|
|
# bail out on automated netboot setup unless -b is also specified
|
|
[[ -f /tmp/a2server-autoAnswerYes ]] && autoAnswerYes=1 || autoAnswerYes=
|
|
if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
|
|
|
|
if [[ ! $autoAnswerYes ]]; then
|
|
echo
|
|
echo "Do you want to set up A2SERVER to be able to boot Apple II"
|
|
echo -n "computers over the network? "
|
|
read
|
|
fi
|
|
|
|
if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
|
|
|
|
nbmode=1
|
|
echo
|
|
|
|
sudo true
|
|
mkdir -p /tmp/netboot
|
|
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 ]]; then
|
|
echo "A2SERVER: Downloading Apple II Boot Blocks..."
|
|
cd /tmp/netboot
|
|
|
|
wget --max-redirect 0 -qO Disk_7_of_7-Apple_II_Setup.sea.bin ${gsosURL}Disk_7_of_7-Apple_II_Setup.sea.bin
|
|
if (( $? != 0 )); then
|
|
wget -qO Disk_7_of_7-Apple_II_Setup.sea.bin ${gsosBackupURL}Disk_7_of_7-Apple_II_Setup.sea.bin
|
|
fi
|
|
unar -k skip Disk_7_of_7-Apple_II_Setup.sea.bin &> /dev/null
|
|
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
|
|
|
|
# copy the Boot Blocks into the right place
|
|
mkdir -p a2setup
|
|
sudo mount -t hfs -o ro,loop APPLE2SETUP.HDV a2setup
|
|
sudo mkdir -p /usr/local/etc/netatalk/a2boot
|
|
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
|
|
# 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.3 version here.
|
|
echo -n -e "\xb0\xb2\xad\xc1\xf5\xe7\xad\xb1\xb5" | sudo dd of="p8" bs=38 seek=1 conv=notrunc 2> /dev/null
|
|
echo -n -e "\x12\x11\x0b\x10\x0f\x0e\x0d" | sudo dd of="p8" bs=3958 seek=1 conv=notrunc 2> /dev/null
|
|
echo -n -e "\xb0\xb2\xad\xc1\xf5\xe7\xad\xb1\xb5" | sudo dd of="ProDOS16 Image" bs=3110 seek=1 conv=notrunc 2> /dev/null
|
|
echo -n -e "\x12\x11\x0b\x10\x0f\x0e\x0d" | sudo dd of="ProDOS16 Image" bs=7030 seek=1 conv=notrunc 2> /dev/null
|
|
echo -n -e "\xb0\xb2\xad\xc1\xf5\xe7\xad\xb1\xb5" | sudo dd of="Apple :2f:2fe Boot Blocks" bs=79 seek=1 conv=notrunc 2> /dev/null
|
|
echo -n -e "\x12\x11\x0b\x10\x0f\x0e\x0d" | sudo dd of="Apple :2f:2fe Boot Blocks" bs=7071 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 ]]; then
|
|
rm /tmp/2.tools &> /dev/null
|
|
wget -q -O /tmp/2.tools "${scriptURL}scripts/a2server-2-tools.txt"
|
|
chmod ugo+x /tmp/2.tools
|
|
/tmp/2.tools
|
|
rm /tmp/2.tools
|
|
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)
|
|
|
|
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 "0: don't install GS/OS now"
|
|
echo "1: delete installed GS/OS, then install new GS/OS"
|
|
echo "2: install GS/OS over existing system"
|
|
echo
|
|
echo -n "What do you wanna do? "
|
|
read
|
|
if [[ $REPLY == "1" || $REPLY == "2" ]]; then
|
|
gsosReinstall=$REPLY
|
|
if (( $gsosReinstall == 1 )); 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 "You can set up GS/OS for network boot. This may take a while."
|
|
echo "0: don't install GS/OS"
|
|
echo "1: GS/OS 6.0.1 (official Apple release, May 1993)"
|
|
echo "2: GS/OS 6.0.2 (community release by Antoine Vignau, July 2015)"
|
|
echo "3: GS/OS 6.0.3 (community release by Tony Diaz, August 2015)"
|
|
echo
|
|
echo -n "Which flavor would you like? "
|
|
read
|
|
fi
|
|
[[ $autoAnswerYes ]] && gsosVersion=1
|
|
if [[ $REPLY == "1" || $REPLY == "2" || $REPLY == "3" ]]; then
|
|
gsosInstall=$REPLY
|
|
|
|
# get GS/OS disks from Internet Archive and put them in IMAGES
|
|
# also dump contents into NET.INSTALL and modify scripts to work from there
|
|
# echo
|
|
# echo "Come back in a while."
|
|
echo
|
|
echo "A2SERVER: Downloading GS/OS 6.0.${gsosInstall} installer disk images..."
|
|
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 "$imagesDir/* $imagesDir/.AppleDouble/*" 2> /dev/null
|
|
rm "$netInstallDir/* $netInstallDir/.AppleDouble/*" 2> /dev/null
|
|
afpsync -v $gsosDir > /dev/null
|
|
|
|
for diskname in ${diskNames[@]}; do
|
|
outfile="$imagesDir/$(tr [:lower:] [:upper:] <<< $diskname)"
|
|
(( activeDisk++ ))
|
|
echo "A2SERVER: Disk ${activeDisk} of ${#diskNames[@]}: $diskname"
|
|
if (( $gsosInstall == 1 )); then
|
|
wget --max-redirect 0 -qO "Disk_${activeDisk}_of_7-$diskname.sea.bin" "${gsosURL}Disk_${activeDisk}_of_7-$diskname.sea.bin"
|
|
if (( $? != 0 )); then
|
|
wget -qO "Disk_${activeDisk}_of_7-$diskname.sea.bin" "${gsosBackupURL}Disk_${activeDisk}_of_7-$diskname.sea.bin"
|
|
fi
|
|
unar -k skip "Disk_${activeDisk}_of_7-$diskname.sea.bin" &> /dev/null
|
|
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
|
|
wget -qO $outfile "$gsosURL/IIGS%20System%206.0.2%20-%20Disk%20${activeDisk}%20${diskWebNames[$activeDisk-1]}.po"
|
|
elif (( $gsosInstall == 3 )); then
|
|
wget -qO $outfile "$gsosURL/$diskname.po"
|
|
fi
|
|
cppo -s -ad $outfile $netInstallDir 2> /dev/null
|
|
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]})
|
|
[[ ${sourcePathMixed:0:1} != '/' ]] && sourcePathMixed="${pathPrefix}/$sourcePathMixed"
|
|
sourcePath=$(tr [:lower:] [:upper:] <<< $sourcePathMixed)
|
|
targetPath=$gsosDir/$(tr ':' '/' <<< ${scriptEntry[6]} | tr [:lower:] [:upper:])
|
|
# 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
|
|
[[ ! -d $targetParent ]] && mkdir -p $targetParent
|
|
cp -p ${gsosDir%/*}$sourcePath $targetPath
|
|
[[ ! -d $targetParent/.AppleDouble ]] && 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 "$targetPath"
|
|
[[ -f $targetParent/.AppleDouble/$targetFile ]] && rm "$targetParent/.AppleDouble/$targetFile"
|
|
fi
|
|
fi
|
|
(( entryIndex++ ))
|
|
done
|
|
unset IFS
|
|
}
|
|
|
|
mkdir -p /tmp/netboot
|
|
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: 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
|
|
|
|
if [[ ! $autoAnswerYes ]]; then
|
|
echo
|
|
echo "Do you want to download and install utilities for working with"
|
|
echo -n "disk images and archive files in GS/OS? "
|
|
read
|
|
fi
|
|
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
|
|
wget -q -nc http://www.ninjaforce.com/downloads/Asimov.shk
|
|
nulib2 -x -s Asimov.shk > /dev/null
|
|
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
|
|
cd /tmp/netboot
|
|
wget -qO gshk.sea http://web.archive.org/web/20131031160750/http://nulib.com/library/gshk11.sea
|
|
#wget -qO gshk.sea http://www.nulib.com/library/gshk11.sea
|
|
nulib2 -x -s gshk.sea > /dev/null
|
|
cp -p GSHK $imageToolsDir/GSHK
|
|
afpsync -v $gsosDir > /dev/null
|
|
cat GSHK_rsrc_ >> $imageToolsDir/.AppleDouble/GSHK
|
|
afptype -p S16 -a DB07 -q $imageToolsDir/GSHK
|
|
fi
|
|
|
|
echo -n "MountIt 1.4"
|
|
# get MountIt (for GS/OS)
|
|
if [[ -f $imageToolsDir/MOUNTIT.SHK ]]; then
|
|
echo " is already installed."
|
|
else
|
|
echo
|
|
cd /tmp/netboot
|
|
wget -q -nc http://www.brutaldeluxe.fr/products/apple2gs/MOUNTIT.SHK
|
|
cp -p MOUNTIT.SHK $imageToolsDir/MOUNTIT.SHK
|
|
afpsync -v $gsosDir > /dev/null
|
|
afptype -p SHK -q $imageToolsDir/MOUNTIT.SHK
|
|
fi
|
|
fi
|
|
|
|
if [[ ! $autoAnswerYes ]]; then
|
|
echo
|
|
echo "Do you want to download and install utilities for working with"
|
|
echo -n "disk images and archive files in ProDOS 8? "
|
|
read
|
|
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
|
|
wget -qO shrinkit.sdk http://web.archive.org/web/20131031160750/http://www.nulib.com/library/shrinkit.sdk
|
|
[[ ! -f shrinkit.sdk ]] && wget -qO shrinkit.sdk "http://appleii.ivanx.com/a2server/files/shrinkit.sdk"
|
|
nulib2 -xs shrinkit.sdk > /dev/null
|
|
cppo -s -ad SHRINKIT /SHRINKIT/SHRINKIT $diskToolsP8Dir 2> /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
|
|
wget -q -O dsk2file.shk http://www.dwheeler.com/6502/oneelkruns/dsk2file.zip
|
|
nulib2 -x -s dsk2file.shk > /dev/null
|
|
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
|
|
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
|
|
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 2> /dev/null
|
|
cppo -s -ad A2SYSDISK32.HDV /UTILITIES/UTIL.0 $diskToolsP8Dir 2> /dev/null
|
|
cppo -s -ad A2SYSDISK32.HDV /UTILITIES/UTIL.1 $diskToolsP8Dir 2> /dev/null
|
|
cppo -s -ad A2SYSDISK32.HDV /UTILITIES/UTIL.2 $diskToolsP8Dir 2> /dev/null
|
|
afpsync -v $sharepath > /dev/null
|
|
fi
|
|
|
|
fi
|
|
|
|
if [[ ! $autoAnswerYes ]]; then
|
|
echo
|
|
echo "Do you want to download serial communications software for"
|
|
echo -n "GS/OS and ProDOS 8? "
|
|
read
|
|
fi
|
|
if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
|
|
|
|
echo "A2SERVER: Downloading communications software..."
|
|
|
|
mkdir -p $commDir
|
|
|
|
echo -n "Spectrum"
|
|
# get Spectrum
|
|
if [[ -f $commDir/SPECTRUM/SPECTRUM.HDV ]]; then
|
|
echo " is already installed."
|
|
else
|
|
mkdir -p $spectrumDir
|
|
echo
|
|
cd /tmp/netboot
|
|
wget -qO- http://www.speccie.co.uk/speccie/software/spectrum.2mg | dd bs=64 skip=1 of=SPECTRUM.HDV 2> /dev/null
|
|
wget -qO- http://www.speccie.co.uk/speccie/software/spectrum_extras.2mg | dd bs=64 skip=1 of=EXTRAS.HDV 2> /dev/null
|
|
wget -qO- http://www.speccie.co.uk/speccie/software/spectrum_sounds.2mg | dd bs=64 skip=1 of=SOUNDS.HDV 2> /dev/null
|
|
wget -qO- http://www.speccie.co.uk/speccie/software/spectrum_manuals.2mg | dd bs=64 skip=1 of=MANUALS.HDV 2> /dev/null
|
|
cppo -s -ad SPECTRUM.HDV $spectrumDir
|
|
cppo -s -ad EXTRAS.HDV $spectrumDir
|
|
cppo -s -ad MANUALS.HDV $spectrumDir
|
|
cppo -s -ad SOUNDS.HDV $spectrumDir
|
|
afpsync -v $gsosDir > /dev/null
|
|
fi
|
|
|
|
echo -n "ProTERM and Z-Link"
|
|
# get A2CLOUD disk and copy from there
|
|
if [[ -f $commDir/PROTERM/PROTERM ]]; then
|
|
echo " are already installed."
|
|
else
|
|
mkdir -p $protermDir
|
|
mkdir -p $protermDir/.AppleDouble
|
|
mkdir -p $zlinkDir
|
|
mkdir -p $zlinkDir/.AppleDouble
|
|
echo
|
|
cd /tmp/netboot
|
|
wget -qO A2CLOUD.HDV "http://ivanx.com/a2server/files/A2CLOUD.HDV"
|
|
cppo -ad A2CLOUD.HDV . > /dev/null
|
|
cd A2CLOUD
|
|
mv *PT3* *PROTERM* $protermDir
|
|
mv Z.LINK $zlinkDir
|
|
cd .AppleDouble
|
|
mv *PT3* *PROTERM* $protermDir/.AppleDouble
|
|
mv Z.LINK $zlinkDir/.AppleDouble
|
|
afpsync -v $gsosDir > /dev/null
|
|
fi
|
|
|
|
echo -n "ADTPro and VSDRIVE"
|
|
if [[ -f $commDir/ADTPRO/ADTPRO ]]; then
|
|
echo " are already installed."
|
|
else
|
|
mkdir -p $adtproDir
|
|
mkdir -p $adtproDir/.AppleDouble
|
|
echo
|
|
cd /tmp/netboot/A2CLOUD
|
|
mv *ADTPRO* *VEDRIVE* *VSDRIVE* $adtproDir
|
|
cd .AppleDouble
|
|
mv *ADTPRO* *VEDRIVE* *VSDRIVE* $adtproDir/.AppleDouble
|
|
afpsync -v $gsosDir > /dev/null
|
|
fi
|
|
|
|
fi
|
|
|
|
# clean up
|
|
cd
|
|
[[ -d /tmp/netboot ]] && rm -rf /tmp/netboot
|
|
[[ -d ~/GNUstep ]] && rm -rf ~/GNUstep
|
|
|
|
# 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://appleii.ivanx.com/a2server for info using it."
|
|
|
|
fi
|
|
|
|
if [[ ! $autoAnswerYes ]]; 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
|
|
fi
|
|
if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
|
|
echo "A2SERVER: Downloading Farallon bridge patch..."
|
|
wget -O /tmp/FARALLON.PO "http://appleii.ivanx.com/a2server/files/FARALLON.B1.PO" &> /dev/null
|
|
if [[ -d $gsosDir/SYSTEM/SYSTEM.SETUP ]]; then
|
|
cppo -s -ad /tmp/FARALLON.PO /ATALKPATCH/ATALKIRQ $gsosDir/SYSTEM/SYSTEM.SETUP &> /dev/null
|
|
echo
|
|
echo "A2SERVER: The Farallon bridge patch is installed."
|
|
else
|
|
cppo -s -ad /tmp/FARALLON.PO /ATALKPATCH/ATALKIRQ $gsosDir &> /dev/null
|
|
echo
|
|
echo "On your Apple IIgs, copy the file ATALKIRQ in /A2SHARED to the"
|
|
echo "SYSTEM.SETUP folder of the SYSTEM folder of your GSOS startup disk,"
|
|
echo "or, if you can't, download the patch from the A2SERVER web site."
|
|
fi
|
|
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
|