29 Commits

Author SHA1 Message Date
Ivan X
a3a7a9479d set internal version to 1.5.1; expanded version history 2017-10-29 05:21:55 -04:00
Ivan X
34836dcbb4 updated version history 2016-05-28 11:00:35 -04:00
Ivan X
7b7917d417 changed rawgit.com to raw.githubusercontent.com to resolve https issues 2016-05-28 10:11:26 -04:00
T. Joseph Carter
938db3c46b 2-tools: Make jessie+ condition actually jessie+ 2016-04-10 01:38:10 -07:00
Ivan X
4d1b5db5e3 cppo fixes temp directory paths on OS X 2016-02-19 21:46:46 -05:00
Ivan X
7d1a06a916 added text files from files subdirectory 2016-02-17 22:25:23 -05:00
Ivan X
f9b120002a Merge branch 'master' of https://github.com/RasppleII/a2server 2016-02-17 05:44:58 -05:00
Ivan X
49d50e49ac Fixed inaccurate text at end of a2server-setup for ROM 01 IIgs 2016-02-17 05:43:59 -05:00
T. Joseph Carter
dfa1e26c80 README.md: code spans to avoid _ errors
Put a couple of filenames in code spans so that _ characters in them
would not turn on unwanted <em> in HTML.  This is something GitHub's
Markdown markup doesn't do because it's almost never what you want, but
everything else does because that's what John Gruber designed.
2016-02-15 03:52:32 -08:00
T. Joseph Carter
d86e3bfa88 5-netboot: Guidance on choosing GS/OS version
Closes #45.
2016-01-30 15:27:33 -08:00
T. Joseph Carter
cd20570999 *.txt: Fix Debian wheezy/jessie version checks
Found some checks that assumed all Debian was wheezy, and also a bunch
of use of cut assuming that there will never be a Debian version higher
than 9.0.  Let's just futureproof that code right now.  This closes #56
and uses the method described therein anywhere -c 1 is used now.  For
the checks against -c 1-2, we still use -d . -f 1 as described in the
issue, but modify the following conditionals to test for just the
numeric, without the decimal.
2016-01-30 03:25:27 -08:00
T. Joseph Carter
cd8271cd56 setup/index.txt: Print version once
A minor thing, but reducing slightly duplicated code is always a good
thing, and printing the version number is never a bad idea.
2016-01-29 04:22:54 -08:00
Ivan X
750b9998df fixed bug in entering 30-day month dates in clock.patch 2016-01-19 07:38:23 -05:00
Ivan X
9ba5258fe0 expanded README.md 2016-01-18 06:26:40 -05:00
Ivan X
50875f5c3f internet archive backup for MountIt 2016-01-17 22:27:41 -05:00
Ivan X
ca4e3b76e6 another revision to version history 2016-01-17 22:04:42 -05:00
Ivan X
3a82176d0a slight revision to version history 2016-01-17 17:28:13 -05:00
Ivan X
061c3c1897 show first prompt if < 1.5.0 2016-01-17 17:16:35 -05:00
Ivan X
dea2ea2ce2 fixed netboot user setup 2016-01-17 15:37:02 -05:00
Ivan X
bb5f42462e fixed issues with download Apple II titles from original hosts 2016-01-17 15:03:40 -05:00
Ivan X
59d293ec84 no longer skips first prompt if using -i option 2016-01-17 13:16:21 -05:00
Ivan X
9dfbe0e9f3 removed "Attempting" status language because it bugged me 2016-01-17 13:09:38 -05:00
Ivan X
ca12a4a9e9 better detection of distribution URL during startup message 2016-01-17 13:07:39 -05:00
Ivan X
94b6dcaa26 fixed a2server-setup and -update aliases not respecting env vars
using new installer -i flag in a2server-update to trigger reinstall
2016-01-17 12:23:24 -05:00
Ivan X
da204bd05b set version number to 1.5.0; updated version history 2016-01-17 11:49:03 -05:00
Ivan X
fbc1ce5ba2 fixed detection of installed comm software; minor text changes 2016-01-17 10:06:01 -05:00
Ivan X
b7528026de fixed cppo cleanup on exit 2016-01-17 10:05:35 -05:00
Ivan X
60f88e4e8a use rawgit.com for default A2SERVER_SCRIPT_URL 2016-01-16 23:47:03 -05:00
Ivan X
13343a5c2a doesn't add eth0 to atalk.conf if something already there
improve content and formatting of /etc/init.d/netatalk status messages
2016-01-16 20:58:10 -05:00
16 changed files with 2298 additions and 146 deletions

View File

@@ -13,22 +13,84 @@ relatively modern piece of it. As such they should be preserved as they are.
## Developer note
To use the scripts on a server other than Ivan's, you'll want to export
the shell variable A2SERVER_SCRIPT_URL to the base URL of this repository
on your server. The base-URL should be slash-terminated. You can then run
the following snippet:
To use the scripts on your own server, including your local machine:
~~~ bash
wget -O a2server-setup ${A2SERVER_SCRIPT_URL}setup/index.txt; source a2server-setup
export A2SERVER_SCRIPT_URL=http://yoururl.com/
~~~
A simple method for installing from a local subdirectory is to `cd` to it and
then type `python -m SimpleHTTPServer`. Then
`export A2SERVER_SCRIPT_URL="http://localhost:8000/"`
or use the IP address of the host machine on your LAN instead of localhost.
To prevent needing to recompile various packages from source code during
installation, a number of precompiled binary files are downloaded for Raspbian,
Debian-x86, and Debian-amd64. If you wish to host these on your own server:
~~~ bash
export A2SERVER_BINARY_URL=http://yoururl.com/files/
~~~
You do not need to use a subdirectory called "files", or the same server, but
that's the normal arrangement. The precompiled packages are available here:
`http://ivanx.com/a2server/files/dist/a2serverbinaries.tar.gz`
Several Apple II third-party binaries are downloaded during installation, as
well as third-party source code if precompiled binaries are unavailable or
you don't wish to use them. If you want these external dependencies locally
during development, they need to go into a folder called "external" in
the binaries URL, and that needs to contain folders called "appleii" and
"source". To download all of these external packages, download and run the
shell script at
`http://ivanx.com/a2server/files/dist/getexternal.sh`.
Once you have those:
~~~ bash
export A2SERVER_NO_EXTERNAL=1
~~~
You may want to put the above exports into `~/.bashrc` or `~/.bash_profile`.
If you want to host scripts locally installed on your own machine or another
computer on your LAN, type the following, and export "http://localhost:8000/"
or "http://lan.ip.address:8000/" for the above URL's.
~~~
python -m SimpleHTTPServer
~~~
Once you're set, you can then run the following snippet to install A2SERVER:
~~~
wget -O setup ${A2SERVER_SCRIPT_URL}setup/index.txt; source setup
~~~
Offline install:
Using locally hosted binaries and external dependencies, it's possible to
install completely offline if dependent packages have been installed.
If precompiled binaries are available, on Wheezy:
~~~
sudo apt-get -y install unzip libgnustep-base1.22 libdb5.1 libgcrypt11 libssl1.0.0 attr fuse libglib2.0-0 libattr1 libfuse2
~~~
If precompiled binaries are available, on Jessie:
~~~
sudo apt-get -y install unzip unar libdb5.3 libgcrypt20 libssl1.0.0 attr fuse libglib2.0-0 libattr1 libfuse2
~~~
If precompiled binaries are not available, on Wheezy:
~~~
sudo apt-get -y install unzip build-essential zlib1g-dev libgnustep-base-dev libz-dev libbz2-dev libssl-dev libicu-dev libdb5.1-dev libgcrypt11-dev libglib2.0-dev libattr1-dev libfuse-dev
~~~
If precompiled binaries are not available, on Jessie:
~~~
sudo apt-get -y install unzip unar build-essential zlib1g-dev unzip libssl-dev libdb5.3-dev libgcrypt11-dev libglib2.0-dev libattr1-dev libfuse-dev
~~~
You should probably export A2SERVER_SCRIPT_URL in your .bashrc or whatever
file configures your development environment. Also be advised that as of
version 1.24 of A2SERVER, you must use the snippet above.
[Ivan's site]: http://appleii.ivanx.com/a2server/

1749
files/A2FILES-list.txt Normal file

File diff suppressed because it is too large Load Diff

66
files/dist/getexternal.sh vendored Executable file
View File

@@ -0,0 +1,66 @@
#! /bin/bash
# vim: set tabstop=4 shiftwidth=4 expandtab filetype=sh:
if ! hash wget; then
echo "wget is not installed. On a Mac, install it with MacPorts or Homebrew."
fi
echo "Downloading items..."
mkdir -p files/external/source
wget -O files/external/source/ciopfs-0.4.tar.gz http://www.brain-dump.org/projects/ciopfs/ciopfs-0.4.tar.gz
wget -O files/external/source/macipgw.zip https://github.com/zero2sixd/macipgw/archive/2a5f6a7521a627e46b18468d44f4306fb0a7b7ab.zip
wget -O files/external/source/netatalk-2.2.4.tar.gz http://downloads.sourceforge.net/project/netatalk/netatalk/2.2.4/netatalk-2.2.4.tar.gz
wget -O files/external/source/nulib2-3.1.0a2.zip https://github.com/fadden/nulib2/archive/20fe7efb4d37fedf807416c16d74d51d893ea48a.zip
wget -O files/external/source/unar-1.8.1.zip https://github.com/incbee/Unarchiver/archive/unar-1.8.1.zip
mkdir -p files/external/appleii
wget --max-redirect 0 -O files/external/appleii/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
wget -O files/external/appleii/Asimov.shk http://www.ninjaforce.com/downloads/Asimov.shk
wget -O files/external/appleii/MOUNTIT.SHK http://www.brutaldeluxe.fr/products/apple2gs/MOUNTIT.SHK
wget -O files/external/appleii/Marinetti3.0b8.po http://www.a2retrosystems.com/downloads/Marinetti3.0b8.po
wget -O files/external/appleii/PPPX.1.3d4.SHK http://www.apple2.org/marinetti/PPPX.1.3d4.SHK
wget -O files/external/appleii/dsk2file.shk http://www.dwheeler.com/6502/oneelkruns/dsk2file.zip
wget -O files/external/appleii/gshk11.sea http://www.nulib.com/library/gshk11.sea
wget -O files/external/appleii/shrinkit.sdk http://www.nulib.com/library/shrinkit.sdk
wget -O files/external/appleii/spectrum_gold_2mg.zip http://www.speccie.co.uk/speccie/software/spectrum_gold_2mg.zip
wget -O files/external/appleii/uthernet2ll.bxy http://www.speccie.co.uk/speccie/software/uthernet2ll.bxy
wget -O files/external/appleii/uthernetll.bxy http://www.speccie.co.uk/speccie/software/uthernetll.bxy
unset safeUrl samUrl snapUrl safeVer samVer snapVer
html=$(wget -qO- http://speccie.co.uk/speccie/Site/Download_Centre_files/widget1_markup.html)
safeUrl=$(echo "$html" | grep -i 'safe2.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2 | tr -d '"')
samUrl=$(echo "$html" | grep -i 'sam2.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2 | tr -d '"')
snapUrl=$(echo "$html" | grep -i 'snap.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2 | tr -d '"')
wget -O files/external/appleii/safe2.bxy "$safeUrl"
wget -O files/external/appleii/sam2.bxy "$samUrl"
wget -O files/external/appleii/snap.bxy "$snapUrl"
for gsosInstall in {1..3}; do
activeDisk=0
mkdir -p files/external/appleii/gsos60${gsosInstall}
diskNames=( Install System.Disk SystemTools1 SystemTools2 Fonts synthLAB )
if (( $gsosInstall == 1 )); then
gsosURL="http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Apple_II/Apple_IIGS_System_6.0.1/"
wget --max-redirect 0 -O files/external/appleii/gsos601/Disk_7_of_7-Apple_II_Setup.sea.bin http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/English-North_American/Apple_II/Apple_IIGS_System_6.0.1/Disk_7_of_7-Apple_II_Setup.sea.bin
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
for diskname in ${diskNames[@]}; do
outfile="files/external/appleii/gsos60${gsosInstall}/$diskname.po"
(( activeDisk++ ))
if (( $gsosInstall == 1 )); then
wget --max-redirect 0 -O files/external/appleii/gsos601/"Disk_${activeDisk}_of_7-${diskname}.sea.bin" "${gsosURL}Disk_${activeDisk}_of_7-${diskname}.sea.bin"
elif (( $gsosInstall == 2 )); then
wget -O $outfile "$gsosURL/IIGS%20System%206.0.2%20-%20Disk%20${activeDisk}%20${diskWebNames[$activeDisk-1]}.po"
elif (( $gsosInstall == 3 )); then
wget -O $outfile "$gsosURL/$diskname.po"
fi
done
done

152
files/netatalk-init.d-clean.txt Executable file
View File

@@ -0,0 +1,152 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides: netatalk
# Required-Start: $remote_fs $syslog
# Should-Start: avahi-daemon
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 1
### END INIT INFO
#
# netatalk Netatalk 2.2.4 initscript
# Author: Thomas Kaiser <Thomas.Kaiser@phg-online.de>
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Netatalk"
NAME=netatalk
SCRIPTNAME=/etc/init.d/$NAME
# Guard to prevent execution if netatalk was removed.
test -x /usr/local/sbin/afpd || exit 0
# Set defaults. Please change these options in /etc/default/netatalk
ATALK_NAME=`/bin/hostname --short`
ATALK_UNIX_CHARSET='LOCALE'
ATALK_MAC_CHARSET='MAC_ROMAN'
CNID_METAD_RUN=yes
AFPD_RUN=yes
AFPD_MAX_CLIENTS=50
AFPD_UAMLIST="-U uams_dhx2.so"
AFPD_GUEST=nobody
CNID_CONFIG="-l log_note"
ATALKD_RUN=no
PAPD_RUN=no
TIMELORD_RUN=no
#A2BOOT_RUN=no
ATALK_ZONE=
ATALK_BGROUND=no
# old /etc/default/netatalk expected hostname in $HOSTNAME by default
HOSTNAME=`/bin/hostname`
# Read in netatalk configuration.
if [ -f /etc/default/netatalk ]; then
. /etc/default/netatalk
fi
# Start Netatalk servers.
atalk_startup() {
if [ x"$ATALKD_RUN" = x"yes" ]; then
# Try to load the AppleTalk kernel module if it was intended.
if grep -q '^appletalk$' /etc/modules; then
/sbin/modprobe appletalk || echo "[could not load appletalk module]"
fi
# Start atalkd server.
/usr/local/sbin/atalkd
# register workstation
/usr/local/bin/nbprgstr -p 4 "$ATALK_NAME:Workstation$ATALK_ZONE"
/usr/local/bin/nbprgstr -p 4 "$ATALK_NAME:netatalk$ATALK_ZONE"
echo -n " atalkd"
fi
# prepare startup of file services
if [ "x$CNID_METAD_RUN" = "xyes" -a -x /usr/local/sbin/cnid_metad ] ; then
echo -n " cnid_metad"
/usr/local/sbin/cnid_metad $CNID_CONFIG
fi
if [ x"$AFPD_RUN" = x"yes" ]; then
/usr/local/sbin/afpd $AFPD_UAMLIST -g $AFPD_GUEST -c $AFPD_MAX_CLIENTS \
-n "$ATALK_NAME$ATALK_ZONE"
echo -n " afpd"
fi
if [ "x$ATALKD_RUN" = "xyes" ]; then
if [ "x$PAPD_RUN" = "xyes" ]; then
/usr/local/sbin/papd
echo -n " papd"
fi
if [ x"$TIMELORD_RUN" = x"yes" ]; then
/usr/local/sbin/timelord
echo -n " timelord"
fi
fi
}
case "$1" in
start)
if [ "x$ATALK_BGROUND" = "xyes" -a "x$ATALKD_RUN" = "xyes" ]; then
echo "Starting Netatalk services in the background."
atalk_startup >/dev/null &
else
echo -n "Starting Netatalk services (this will take a while): "
atalk_startup
echo "."
fi
;;
stop)
echo -n "Stopping Netatalk Daemons:"
echo -n " afpd"
start-stop-daemon --stop --quiet --oknodo --exec /usr/local/sbin/afpd
echo -n " cnid_metad"
start-stop-daemon --stop --quiet --oknodo --exec /usr/local/sbin/cnid_metad
if test -x /usr/local/sbin/papd; then
echo -n " papd"
start-stop-daemon --stop --quiet --oknodo --exec /usr/local/sbin/papd
fi
if test -x /usr/local/sbin/timelord; then
echo -n " timelord"
start-stop-daemon --stop --quiet --oknodo --exec /usr/local/sbin/timelord
fi
if test -x /usr/local/sbin/atalkd; then
echo -n " atalkd"
start-stop-daemon --stop --quiet --oknodo --exec /usr/local/sbin/atalkd
fi
echo "."
;;
restart)
$0 force-reload
;;
force-reload)
echo -n "Restarting Netatalk Daemons (this will take a while)"
$0 stop
echo -n "."
sleep 2
echo -n "."
if $0 start; then
echo "done."
fi
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

View File

@@ -7,7 +7,7 @@
# 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}/" ;;
*) scriptURL="${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current}/" ;;
esac
case "$A2SERVER_BINARY_URL" in
*/) binaryURL="$A2SERVER_BINARY_URL" ;;
@@ -22,7 +22,7 @@ arch=
if [[ -f /usr/bin/raspi-config ]]; then
isRpi=1
arch='rpi'
elif lsb_release -a 2> /dev/null | grep -q 'Distributor ID:.Debian' && [[ $(cut -c 1 <<< $debianVersion) -ge "7" ]]; then
elif lsb_release -a 2> /dev/null | grep -q 'Distributor ID:.Debian' && [[ $(cut -d . -f 1 <<< $debianVersion) -ge "7" ]]; then
uname_m="$(uname -m)"
if [[ $uname_m == "i686" ]]; then
arch='debian_x86'
@@ -33,10 +33,10 @@ fi
debianName=
if [[ $debianVersion ]]; then
debianMajor=$(cut -c 1-2 <<< $debianVersion)
if [[ $debianMajor == "8." ]]; then
debianMajor=$(cut -d . -f 1 <<< $debianVersion)
if [[ $debianMajor == "8" ]]; then
debianName="jessie"
elif [[ $debianMajor == "7." ]]; then
elif [[ $debianMajor == "7" ]]; then
debianName="wheezy"
else
debianName="unknown"
@@ -120,7 +120,7 @@ if ! hash unar &> /dev/null; then
fi
# jessie and later: Just use the unar package
if [[ $debianName == "jessie" ]]; then
if [[ $debianMajor -ge 8 ]]; then
sudo apt-get -y install unar
sudo apt-get clean
fi

View File

@@ -17,7 +17,7 @@
# Ensure URL we'll use ends in a /
case "$A2SERVER_SCRIPT_URL" in
*/) scriptURL="$A2SERVER_SCRIPT_URL" ;;
*) scriptURL="${A2SERVER_SCRIPT_URL:-http://appleii.ivanx.com/a2server}/" ;;
*) scriptURL="${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current}/" ;;
esac
case "$A2SERVER_BINARY_URL" in
*/) binaryURL="$A2SERVER_BINARY_URL" ;;
@@ -32,7 +32,7 @@ arch=
if [[ -f /usr/bin/raspi-config ]]; then
isRpi=1
arch='rpi'
elif lsb_release -a 2> /dev/null | grep -q 'Distributor ID:.Debian' && [[ $(cut -c 1 <<< $debianVersion) -ge "7" ]]; then
elif lsb_release -a 2> /dev/null | grep -q 'Distributor ID:.Debian' && [[ $(cut -d . -f 1 <<< $debianVersion) -ge "7" ]]; then
uname_m="$(uname -m)"
if [[ $uname_m == "i686" ]]; then
arch='debian_x86'
@@ -43,10 +43,10 @@ fi
debianName=
if [[ $debianVersion ]]; then
debianMajor=$(cut -c 1-2 <<< $debianVersion)
if [[ $debianMajor == "8." ]]; then
debianMajor=$(cut -d . -f 1 <<< $debianVersion)
if [[ $debianMajor == "8" ]]; then
debianName="jessie"
elif [[ $debianMajor == "7." ]]; then
elif [[ $debianMajor == "7" ]]; then
debianName="wheezy"
else
debianName="unknown"
@@ -249,10 +249,13 @@ sudo sed -i 's/#ATALK_BGROUND=no/ATALK_BGROUND=yes/' /etc/default/netatalk
if [[ ! $(grep 'kernelRelease' /etc/init.d/netatalk) ]]; then
sudo sed -i 's@\(\tif \[ x\"$ATALKD_RUN\)@\n\t# check for valid AppleTalk kernel module\n\t[[ $ATALKD_RUN == "yes" ]] \&\& { kernelRelease=$(uname -r); kernelMajor=$(cut -d "." -f 1 <<< $kernelRelease); kernelMinor=$(cut -d "." -f 2 <<< $kernelRelease | sed '"'"'s/\\(^[0-9]*\\)[^0-9].*$/\\1/'"'"'); kernelPatch=$(cut -d "." -f 3- <<< $kernelRelease | sed '"'"'s/\\(^[0-9]*\\)[^0-9].*$/\\1/'"'"'); [[ ( $kernelMajor -eq 3 \&\& $kernelMinor -ge 12 \&\& $kernelMinor -le 15 ) \&\& ( ! ( -f /usr/bin/raspi-config \&\& $kernelMinor -eq 12 \&\& $kernelPatch -ge 25 ) ) \&\& ( ( ! -f /lib/modules/$kernelRelease/kernel/net/appletalk/appletalk.ko ) || $(sha1sum /lib/modules/$kernelRelease/kernel/net/appletalk/appletalk.ko | cut -f 1 -d " ") != "ecb239fc084c36de93f6926e7749b80f6024f269" ) ]] \&\& { ATALKD_RUN=no; echo "[AppleTalk networking is not available.]" 1>\&2; } }\n\n\1@' /etc/init.d/netatalk
fi
sudo sed -i 's/Starting Netatalk services (this will take a while): /Starting Netatalk services"\n\t\t\t[[ $ATALKD_RUN == "yes" ]] \&\& echo -n " (this will take 45 seconds)"\n\t\t\techo -n ":/' /etc/init.d/netatalk
sudo sed -i 's/Starting Netatalk services in the background./Netatalk services will be available in 45 seconds./' /etc/init.d/netatalk
sudo sed -i 's/-n "Restarting Netatalk Daemons (this will take a while)"/"Restarting Netatalk Daemons."/' /etc/init.d/netatalk
# enable MacIPgw support after launching atalkd
if ! grep -q -i 'macipgw' /etc/init.d/netatalk; then
sudo sed -i ':a;N;$!ba;s@\(echo -n " atalkd"\)\(.*# prepare\)@\1\n\n # start MacIPgw (TCP over AppleTalk) service\n ps aux | grep -q "[m]acipgw" \&\& sudo killall macipgw 2> /dev/null\n atalkd_interface=$(grep "^[^ #]" /etc/netatalk/atalkd.conf | tail -1 | cut -d " " -f 1)\n sysctl -w net.ipv4.ip_forward=1 > /dev/null\n macipgw -n 8.8.8.8 192.168.151.0 255.255.255.0\n /sbin/iptables -t nat -A POSTROUTING -o ${atalkd_interface} -j MASQUERADE\n /sbin/iptables -A FORWARD -i ${atalkd_interface} -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT\n /sbin/iptables -A FORWARD -i tun1 -o ${atalkd_interface} -j ACCEPT\n\n echo -n " macipgw"\n\2@' /etc/init.d/netatalk
sudo sed -i ':a;N;$!ba;s@\(echo -n " atalkd"\)\(.*# prepare\)@\1\n\n\t\t# start MacIPgw (TCP over AppleTalk) service\n\t\tps aux | grep -q "[m]acipgw" \&\& sudo killall macipgw 2> /dev/null || :\n\t\tatalkd_interface=$(grep "^[^ #]" /etc/netatalk/atalkd.conf | tail -1 | cut -d " " -f 1)\n\t\tsysctl -w net.ipv4.ip_forward=1 > /dev/null\n\t\tmacipgw -n 8.8.8.8 192.168.151.0 255.255.255.0\n\t\t/sbin/iptables -t nat -A POSTROUTING -o ${atalkd_interface} -j MASQUERADE\n\t\t/sbin/iptables -A FORWARD -i ${atalkd_interface} -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT\n\t\t/sbin/iptables -A FORWARD -i tun1 -o ${atalkd_interface} -j ACCEPT\n\n\t\techo -n " macipgw"\n\2@' /etc/init.d/netatalk
sudo sed -i 's@\(start-stop-daemon --stop --quiet --oknodo --exec /usr/local/sbin/atalkd.*$\)@\1\n echo -n " macipgw"\n sudo killall macipgw 2> /dev/null@' /etc/init.d/netatalk
fi
@@ -292,12 +295,12 @@ sudo sed -i 's/^~/#share1\n\n#share2/' \
sudo sed -i 's/^:DEFAULT/#:DEFAULT/' \
/usr/local/etc/netatalk/AppleVolumes.default
if [[ ! $(grep ^eth0 /usr/local/etc/netatalk/atalkd.conf) && ! $(grep ^wlan0 /usr/local/etc/netatalk/atalkd.conf) ]]; then
# if [[ ! $(grep ^eth0 /usr/local/etc/netatalk/atalkd.conf) && ! $(grep ^wlan0 /usr/local/etc/netatalk/atalkd.conf) ]]; then
if [[ $(tac /usr/local/etc/netatalk/atalkd.conf | sed '/./,$!d' | head -1 | cut -c 1) == "#" ]]; then
# enable netatalk on the default network interface
# needs -router and -zone to prevent GS/OS AppleShare CDEV crash when used
# with Dayna or Asante bridges
echo -e 'eth0 -router -phase 2 -net 1 -zone "A2SERVER"' \
| sudo tee -a /usr/local/etc/netatalk/atalkd.conf > /dev/null
echo -e 'eth0 -router -phase 2 -net 1 -zone "A2SERVER"' | sudo tee -a /usr/local/etc/netatalk/atalkd.conf > /dev/null
fi
# Raspberry Pi
@@ -522,12 +525,12 @@ if [[ -f "/lib/modules/$kernelRelease/kernel/drivers/net/appletalk/ipddp.ko" ]];
sudo /etc/init.d/netatalk stop &> /dev/null
sudo rmmod ipddp 2> /dev/null
sudo rmmod appletalk 2> /dev/null
echo "A2SERVER: Attempting to replace AppleTalk kernel module for MacIP use..."
echo "A2SERVER: Replacing AppleTalk kernel module (IPDDP disabled) for MacIP use..."
sudo mv /lib/modules/$kernelRelease/kernel/net/appletalk/appletalk.ko /tmp 2> /dev/null
if [[ ${arch%_*} == "debian" ]]; then
echo "A2SERVER: Attempting to fetch AppleTalk kernel module for Debian..."
echo "A2SERVER: Fetching AppleTalk kernel module for Debian..."
wget -qO /tmp/appletalk.tgz ${binaryURL}precompiled/appletalk-$kernelRelease-${arch}.tgz
if [[ $? -eq 0 ]]; then
# if we found a prebuilt one on a2server site, install it and load it
@@ -555,7 +558,7 @@ if [[ -f "/lib/modules/$kernelRelease/kernel/drivers/net/appletalk/ipddp.ko" ]];
# kernel module compile adapted from from: http://askubuntu.com/a/338403/288003
for i in 1; do
echo "A2SERVER: Attempting to build AppleTalk kernel module..."
echo "A2SERVER: Building AppleTalk kernel module..."
[[ -f /boot/config-$kernelRelease ]] || break
sudo apt-get -y install linux-headers-$kernelRelease linux-source-$kernelMajorMinor || break
sudo apt-get -y install build-essential
@@ -639,7 +642,7 @@ if [[ ( ! $(ps aux | grep [a]talkd) ) && ( $isRpi ) ]]; then
# if no AppleTalk module, try to download it from a2server site
if [[ ! -f /lib/modules/$kernelRelease/kernel/net/appletalk/appletalk.ko ]]; then # check for rpi kernel module
echo "A2SERVER: Attempting to install AppleTalk kernel module for Raspbian..."
echo "A2SERVER: Installing AppleTalk kernel module for Raspbian..."
wget -qO /tmp/appletalk.ko.gz ${binaryURL}appletalk-$kernelRelease-rpi.ko.gz
if [[ $? -eq 0 ]]; then
# if we found a prebuilt one on a2server site, install it and load it

View File

@@ -10,7 +10,7 @@
# 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}/" ;;
*) scriptURL="${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current}/" ;;
esac
case "$A2SERVER_BINARY_URL" in
*/) binaryURL="$A2SERVER_BINARY_URL" ;;
@@ -93,7 +93,7 @@ updateP8YearTables () {
# 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 tables for the Thunderclock driver in ProDOS 8;
# 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
@@ -171,11 +171,13 @@ updateP8YearTables () {
[[ -f /tmp/a2server-autoAnswerYes ]] && autoAnswerYes=1 || autoAnswerYes=
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 ]]; then
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=
@@ -270,8 +272,8 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; 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
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
@@ -280,8 +282,8 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
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
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
@@ -338,11 +340,22 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
if [[ $gsosReinstall ]]; then
if [[ ! $autoAnswerYes ]]; then
echo
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 " 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
@@ -500,7 +513,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
# if [[ ! $autoAnswerYes && (! $gsosInstall || $gsosInstall -lt 2) ]] && ! checkP8YearTables 603; then
# echo
# echo -n "Do you want to update the ProDOS 8 Thunderclock year tables? "
# echo -n "Do you want to update the ProDOS 8 Thunderclock year table? "
# read
# fi
# if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then
@@ -511,7 +524,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
# patch ProDOS 8 Thunderclock driver year table based on today's date
echo
echo "A2SERVER: Updating ProDOS 8 Thunderclock driver year tables..."
echo "A2SERVER: Updating ProDOS 8 Thunderclock driver year table..."
mkdir -p /tmp/netboot
rm -r /tmp/netboot/* 2> /dev/null
wget -qO /tmp/netboot/clock.patch.py "${scriptURL}scripts/clock.patch.py"
@@ -578,8 +591,10 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
mkdir -p /tmp/netboot/gshk
cd /tmp/netboot/gshk
if [[ $useExternalURL ]]; then
wget -qO gshk11.sea http://web.archive.org/web/20131031160750/http://nulib.com/library/gshk11.sea
#wget -qO gshk11.sea http://www.nulib.com/library/gshk11.sea
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
@@ -603,6 +618,9 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
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
@@ -632,7 +650,10 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
echo
cd /tmp/netboot
if [[ $useExternalURL ]]; then
wget -qO shrinkit.sdk http://web.archive.org/web/20131031160750/http://www.nulib.com/library/shrinkit.sdk
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
@@ -673,8 +694,8 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; 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
unar -k skip Apple_II_System_Disk_3.2.sea.bin &> /dev/null
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 ${binaryURL}external/appleii/Apple_II_System_Disk_3.2.sea.bin
@@ -694,7 +715,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
p8CommInstalled=
[[ -f $commDir/ProTERM/PROTERM && -f $commDir/Z.Link/Z.LINK && -f $commDir/ADTPro/ADTPRO && -f $commDir/ADTPro/VSDRIVE ]] && p8CommInstalled=1
gsosCommInstalled=
[[ -f $commDir/Spectrum/Spectrum && -f $commDir/SAM2/SAM2 && -f $commDir/SAFE2/SAFE2 && $commDir/SNAP/SNAP && $gsosDir/System/CDevs/TCPIP ]] && gsosCommInstalled=1
[[ -f $commDir/Spectrum/Spectrum && -f $commDir/SAM2/SAM2 && -f $commDir/SAFE2/SAFE2 && -f $commDir/SNAP/SNAP && -f $gsosDir/System/CDevs/TCPIP ]] && gsosCommInstalled=1
commInstalled=
if [[ $gsosInstalled ]]; then
[[ $gsosCommInstalled && $p8CommInstalled ]] && commInstalled=1
@@ -724,15 +745,15 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
unset safeUrl samUrl snapUrl safeVer samVer snapVer
if [[ $useExternalURL ]]; then
html=$(wget -qO- http://speccie.co.uk/speccie/Site/Download_Centre_files/widget1_markup.html)
safeUrl=$(echo "$html" | grep -i 'safe2.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2)
samUrl=$(echo "$html" | grep -i 'sam2.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2)
snapUrl=$(echo "$html" | grep -i 'snap.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2)
safeUrl=$(echo "$html" | grep -i 'safe2.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2 | tr -d '"')
samUrl=$(echo "$html" | grep -i 'sam2.*bxy' | tr '<>' '\n' | grep href | cut -d '=' -f 2 | tr -d '"')
snapUrl=$(echo "$html" | 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-)
spectrumVer=$(echo "$html" | grep 'Spectrum.*Gold.2mg' | tr '<>' '\n' | grep '^Spectrum.*2mg$' | cut -d ' ' -f 2)
fi
echo -n "Spectrum $spectrumVer"
# get Spectrum
if [[ -f $commDir/Spectrum/Spectrum ]]; then
@@ -809,7 +830,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
if [[ $? != 0 || ! -f PPPX.1.3d4.SHK || $(wc -c < PPPX.1.3d4.SHK) != "22068" ]]; then
wget -qO PPPX.1.3d4.SHK ${binaryURL}external/appleii/PPPX.1.3d4.SHK
fi
cppo -ad -s PPPX.1.3d4.SHK . &> /dev/null
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
@@ -869,7 +890,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
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- ${scriptURL}files/safe2-setup.tgz | tar Pzx
wget -qO- ${binaryURL}safe2-setup.tgz | tar Pzx
afpsync -v $gsosDir > /dev/null
fi
@@ -939,7 +960,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then
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- ${scriptURL}files/snap-setup.tgz | tar Pzx
wget -qO- ${binaryURL}snap-setup.tgz | tar Pzx
# cpAD Fonts/SIS.3.10 $gsosDir/System/Fonts
# cpAD Fonts/SIS.4.10 $gsosDir/System/Fonts
# cpAD Tools/HTMLTool/TOOL130 $gsosDir/System/Tools

View File

@@ -14,7 +14,7 @@ password="your password"
[[ $isRaspberryPw ]] && password="'raspberry'"
isDebian=
[[ ( -f /etc/debian_version ) && ( $(cut -c 1-2 < /etc/debian_version) == "7." ) && ( $(uname -m) == "i686" ) ]] && isDebian=1
b_release -a 2> /dev/null | grep -q 'Distributor ID:.Debian' && [[ ( -f /etc/debian_version ) && ( $(cut -d . -f 1 < /etc/debian_version) -ge "7" ) ]] && isDebian=1
if [[ $isDebian ]]; then
if { lspci 2> /dev/null | grep -q VirtualBox; }; then

View File

@@ -100,7 +100,7 @@ while True: # 999 REM get the user's input
if (mo == 4 or # 1162 IF (MO = 4 OR MO = 6 OR MO = 9 OR MO = 11) AND DA > 30 THEN 1050
mo == 6 or
mo == 9 or
mo == 11): x = -1; continue
mo == 11) and da > 30: x = -1; continue
# 1170 REM Convert year string into numeric value
yr = int(day) # 1180 YR = VAL (DAY$)
if yr < 0 or yr > 99: x = -1; continue # 1190 IF YR < 0 OR YR > 99 THEN 1050: REM Only allow 0-99

View File

@@ -2,17 +2,17 @@
# vim: set tabstop=4 shiftwidth=4 expandtab filetype=sh:
alias a2server-help="more /usr/local/etc/a2server-help.txt"
alias a2server-setup="wget -q -O /tmp/a2server-setup ${A2SERVER_SCRIPT_URL}setup/index.txt || { echo \"Can't download A2SERVER setup scripts. Do you has internet?\"; false; } && source /tmp/a2server-setup"
alias a2server-setup='wget -q -O /tmp/a2server-setup ${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current/}setup/index.txt || { echo "Can'"'"'t download A2SERVER setup scripts. Do you has internet?"; false; } && source /tmp/a2server-setup'
alias a2server-version="cat /usr/local/etc/A2SERVER-version"
alias a2server-update="wget -q -O /tmp/a2server-update ${A2SERVER_SCRIPT_URL}update/index.txt || { echo \"Can't download A2SERVER setup scripts. Do you has internet?\"; false; } && source /tmp/a2server-update"
alias a2server-update='wget -q -O /tmp/a2server-update ${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current/}update/index.txt || { echo "Can'"'"'t download A2SERVER setup scripts. Do you has internet?"; false; } && source /tmp/a2server-update'
alias system-shutdown='sudo shutdown -h now'
alias system-restart='sudo shutdown -r now'
alias raspi-config='[[ -f /usr/bin/raspi-config ]] && sudo /usr/bin/raspi-config || echo "raspi-config not found. Are you using a Raspberry Pi with Raspbian?"'
alias raspbian-update='wget -qO /tmp/raspbian-update ${A2SERVER_SCRIPT_URL}scripts/raspbian-update.txt; source /tmp/raspbian-update'
alias raspbian-update='wget -qO /tmp/raspbian-update ${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current/}scripts/raspbian-update.txt || { echo "Can'"'"'t download A2SERVER setup scripts. Do you has internet?"; false; } && source /tmp/raspbian-update'
alias rasppleii-update='raspbian-update a2cloud a2server'
alias welcome-message-edit='sudo nano /etc/motd'
@@ -25,7 +25,7 @@ alias ifreset='sudo rm /etc/udev/rules.d/70-persistent-net.rules; echo Interface
alias netatalk-stop="sudo /etc/init.d/netatalk stop; bonjour-off"
alias netatalk-start="sudo /etc/init.d/netatalk start; bonjour-on; grep -q 'ATALKD_RUN=yes' /etc/default/netatalk"
alias netatalk-restart="sudo /etc/init.d/netatalk restart; bonjour-on; grep -q 'ATALKD_RUN=yes' /etc/default/netatalk"
alias netatalk-restart="sudo /etc/init.d/netatalk restart; bonjour-on; grep -q 'ATALKD_RUN=yes' /etc/default/netatalk"
alias netatalk-off='sudo /etc/init.d/netatalk stop; bonjour-off; sudo update-rc.d -f netatalk remove &> /dev/null'
alias netatalk-on='sudo update-rc.d netatalk defaults &> /dev/null; bonjour-on; sudo /etc/init.d/netatalk restart'
@@ -33,8 +33,8 @@ alias bonjour-off="sudo mv /etc/avahi/services/afpd.service /etc/avahi/services/
alias bonjour-on="sudo mv /etc/avahi/services/afpd.service_disabled /etc/avahi/services/afpd.service &> /dev/null"
alias netatalk-router-on='sudo sed -i '"'"'s/^eth0.*$/eth0 -router -phase 2 -net 1 -zone "A2SERVER"/'"'"' /usr/local/etc/netatalk/atalkd.conf; sudo sed -i '"'"'s/^wlan0.*$/wlan0 -router -phase 2 -net 1 -zone "A2SERVER"/'"'"' /usr/local/etc/netatalk/atalkd.conf; netatalk-restart'
alias netatalk-router-off='sudo sed -i '"'"'s/^eth0.*$/eth0/'"'"' /usr/local/etc/netatalk/atalkd.conf; sudo sed -i '"'"'s/^wlan0.*$/wlan0/'"'"' /usr/local/etc/netatalk/atalkd.conf; netatalk-restart'
alias netatalk-router-on='sudo sed -i '"'"'s/^\([^# ]*\)\( .*\)$/\1 -router\2 -zone "A2SERVER"/'"'"' /usr/local/etc/netatalk/atalkd.conf; netatalk-restart'
alias netatalk-router-off='sudo sed -i '"'"'s/^\([^#].*\) -router\(.*\) -zone [^ ]*\(.*\)$/\1\2\3/'"'"' /usr/local/etc/netatalk/atalkd.conf; netatalk-restart'
alias netatalk-eth='sudo sed -i 's/^wlan0/eth0/' /usr/local/etc/netatalk/atalkd.conf; netatalk-restart'

View File

@@ -1,6 +1,6 @@
#! /bin/bash
# vim: set tabstop=4 shiftwidth=4 expandtab filetype=sh:
export A2SERVER_SCRIPT_URL="${A2SERVER_SCRIPT_URL:-http://ivanx.com/a2server/}"
export A2SERVER_SCRIPT_URL="${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current/}"
export A2SERVER_BINARY_URL="${A2SERVER_BINARY_URL:-http://ivanx.com/a2server/files/}"
source /usr/local/etc/a2server-aliases

View File

@@ -41,6 +41,7 @@ import shutil
import errno
import uuid
import subprocess
import tempfile
# Intentionally fails on pre-2.6 (no b'') so user can see what's wrong
b'ERROR: cppo requires Python 2.6 or later, including 3.x.'
@@ -749,9 +750,9 @@ def quitNow(exitCode=0):
"If the directory")
print("is shared by Netatalk, please type 'afpsync' now.")
if g.SHK: # clean up
for file in os.listdir("/tmp"):
for file in os.listdir('/tmp'):
if file.startswith("cppo-"):
shutil.rmtree(file)
shutil.rmtree('/tmp' + "/" + file)
sys.exit(exitCode)
def usage(exitcode=1):
@@ -1175,11 +1176,27 @@ if (g.SHK or
if (len(args) == 4):
g.extractFile = args[2]
if g.extractFile:
targetPath = args[3]
if os.path.isdir(targetPath):
g.targetDir = targetPath
elif (targetPath.rsplit("/", 1) > 1):
g.targetDir = targetPath.rsplit("/", 1)[0]
g.targetName = targetPath.rsplit("/", 1)[1]
if not os.path.isdir(g.targetDir):
print("Target directory not found.")
quitNow(2)
else:
if not g.CAT:
if not os.path.isdir(args[2]):
print("Target directory not found.")
quitNow(2)
if g.SHK:
g.PNAME = 0
if not g.CAT:
targetDir = (args[3] if g.extractFile else args[2])
unshkdir = ("/tmp/cppo-" + str(uuid.uuid4()))
unshkdir = ('/tmp' + "/cppo-" + str(uuid.uuid4()))
makedirs(unshkdir)
result = os.system("/bin/bash -c 'cd " + unshkdir + "; " +
"result=$(nulib2 -xse " + os.path.abspath(g.imageFile) +
@@ -1201,7 +1218,7 @@ if g.SHK:
extractPath = (unshkdir + "/" + g.extractFile)
extractPathDir = os.path.dirname(extractPath)
# move the extracted file to the root
newunshkdir = ("/tmp/cppo-" + str(uuid.uuid4()))
newunshkdir = ('/tmp' + "/cppo-" + str(uuid.uuid4()))
makedirs(newunshkdir)
for filename in os.listdir(extractPathDir):
shutil.move(extractPathDir + "/" + filename, newunshkdir)
@@ -1340,22 +1357,6 @@ if (not g.SHK and
(slyce(args[2],0,1) != ":")):
usage()
if g.extractFile:
targetPath = args[3]
if os.path.isdir(targetPath):
g.targetDir = targetPath
else:
g.targetDir = targetPath.rsplit("/", 1)[0]
g.targetName = targetPath.rsplit("/", 1)[1]
if not os.path.isdir(g.targetDir):
print("Target directory not found.")
quitNow(2)
else:
if not g.CAT:
if not os.path.isdir(args[2]):
print("Target directory not found.")
quitNow(2)
if g.D33:
diskName = os.path.basename(g.imageFile)
if (diskName[-4:].lower() == ".dsk" or

View File

@@ -9,12 +9,12 @@
# to download and execute, type:
# wget ivanx.com/a2server/setup; source setup
a2serverVersion="132"
a2serverVersion="151"
# 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}/" ;;
*) scriptURL="${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current}/" ;;
esac
case "$A2SERVER_BINARY_URL" in
*/) binaryURL="$A2SERVER_BINARY_URL" ;;
@@ -27,15 +27,16 @@ isRpi=
[[ -f /usr/bin/raspi-config ]] && isRpi=1
isDebian=
lsb_release -a 2> /dev/null | grep -q 'Distributor ID:.Debian' && [[ ( -f /etc/debian_version ) && ( $(cut -c 1 < /etc/debian_version) -ge "7" ) ]] && isDebian=1
lsb_release -a 2> /dev/null | grep -q 'Distributor ID:.Debian' && [[ ( -f /etc/debian_version ) && ( $(cut -d . -f 1 < /etc/debian_version) -ge "7" ) ]] && isDebian=1
if [[ -f /usr/local/etc/A2SERVER-version ]]; then
echo "A2SERVER version available: $a2serverVersion"
echo "A2SERVER version installed: $(cat /usr/local/etc/A2SERVER-version)"
if [ -f /usr/local/etc/A2SERVER-version ]; then
installedVersion="$(cat /usr/local/etc/A2SERVER-version)"
fi
echo "A2SERVER version available: $a2serverVersion"
echo "A2SERVER version installed: ${installedVersion:=None}"
echo
[[ $scriptURL != *"ivanx.com"* ]] && echo "Using script URL: $scriptURL"
[[ $scriptURL != *"ivanx.com"* && $scriptURL != *"raw.githubusercontent.com/RasppleII/a2server"* ]] && echo "Using script URL: $scriptURL"
[[ $binaryURL != *"ivanx.com"* ]] && echo "Using binary URL: $binaryURL"
[[ ! $useExternalURL ]] && echo -e "Not using external URLs. Downloads must be available from:\n ${binaryURL}external/appleii/\n ${binaryURL}external/source/\n (See the A2SERVER developer page for more information.)"
@@ -77,10 +78,7 @@ while [[ $1 ]]; do
updateRasppleII=1
elif [[ $1 == "-v" ]]; then
shift
if [[ ! -f /usr/local/etc/A2SERVER-version ]]; then
echo "A2SERVER version available: $a2serverVersion"
echo "A2SERVER version installed: none"
fi
# Version was already printed
[[ $0 == "-bash" ]] && return 1 || exit 1
elif [[ $1 ]]; then
echo "options:"
@@ -116,6 +114,10 @@ fi
a2server_update=0
doSetup=1
if { [[ -f /usr/local/etc/A2SERVER-version ]] && (( $(head -c 3 /usr/local/etc/A2SERVER-version) < 151 )); }; then
a2server_update=1
fi
unsupportedOS=1
if [[ $isRpi ]]; then #supported Raspbian? (16-Feb-15, 20-Jun-14, 09-Jan-14, etc)
fwhash=$(zcat /usr/share/doc/raspberrypi-bootloader/changelog.Debian.gz | grep -m 1 'as of' | awk '{print $NF}')
@@ -147,13 +149,12 @@ if [[ $unsupportedOS ]]; then
echo
echo "WARNING: A2SERVER and its installer scripts have only been tested on"
echo "Debian and Raspbian. Continuing is probably fine, but might not be."
echo "Worst case could make your operating system no longer work properly,"
echo "or cause data to be lost."
echo "More information is at http://ivanx.com/a2server."
echo "Theoretical worst case would be your operating system no longer works"
echo "properly or data is lost, so consider backing up first."
fi
doSetup=1
if [[ ! -f /usr/local/etc/a2server-help.txt ]] || (( $a2server_update )); then
if [[ $installAll || ! -f /usr/local/etc/a2server-help.txt ]] || (( $a2server_update )); then
echo
echo "Setting up A2SERVER will take up to 60 minutes, during which"
echo "you'll see a bunch of stuff spit out across the screen."
@@ -279,9 +280,10 @@ if (( $doSetup )); then
echo "via the AppleShare control panel."
if [[ -f /srv/A2SERVER/A2FILES/System/Start.GS.OS ]]; then
echo
echo "You can network boot GS/OS. On a ROM 01 IIgs, set slot 1 or 2, and slot 7,"
echo 'to AppleTalk, and Startup Slot to 7 or "Scan". On a ROM 3 IIgs, set'
echo "slot 1 or 2, and Startup Slot, to AppleTalk."
echo "You can network boot GS/OS."
echo "On a ROM 01 IIgs, set slot 1 (printer port), or slot 2 (modem port)"
echo "to Your Card, and slot 7 to AppleTalk, and Startup Slot to 7 or Scan."
echo "On a ROM 3 IIgs, set slot 1 or 2, and Startup Slot, to AppleTalk."
fi
if [[ -f /srv/A2SERVER/A2FILES/BASIC.System ]]; then
echo

108
update/devhistory.txt Normal file
View File

@@ -0,0 +1,108 @@
1.0.0: Jan 2012: initial release
1.0.1: Jan 2012: fixes Netatalk date-stamp bug (thanks to Steven Hirsch)
1.0.2: Jan 2013: Netatalk 2.2.4; OS X 10.7+ login fixed; netboot fixes;
Raspbian "Wheezy" support; Ubuntu 12.04 LTS support
1.1.0: Apr 2013: Full GS/OS install; eliminated GS.SYSTEM volume;
Raspberry Pi enhancements; lots of improvements to installer;
more utilities installed for Apple II; improved cppo
NOTE: fresh install required, can't update earlier version
1.1.1: Jun 2013: Wi-Fi support; updates/additions to commands in a2server-help;
bug fixes and improvements to install script; appletalk kernel
module for Raspbian (instead of replacement kernel); RPi
console (onboard serial) set to 19,200 bps during boot
1.1.2: Oct 2013: resolves issue of no AppleTalk in Raspbian 2013-09-10 and
later; faster command-line installation on Raspberry Pi
(nulib2 and unar binaries are downloaded rather than compiled)
1.1.3: Jan 2014: shares ADTPro disks folder as ADTDISKS; added environment
variables for shared folders; can resolve by name
"a2server.local" if network client has Bonjour/zeroconf;
server presents itself as Shared computer to Macs on network;
VM based on Debian 7
1.1.4: Jan 2014: fixes bug with network boot if ADTPro disks folder is shared
1.1.5: Jul 2014: a2server-setup fixes Raspbian 20-Jul-14 AppleTalk kernel panic
1.2.0: Aug 2014: a2server-setup and Netatalk startup script addresses AppleTalk
kernel panic on any Linux kernel 3.12-3.15; Netatalk starts
in background, preventing startup delay; a2server-setup always
configures Netatalk startup script and can download a new one
if missing; a2server-setup on Raspbian or Debian 7 x86 is
faster because it downloads binaries rather than compiling
from source; unbit/unexec/usq unarchivers added; additional
virtual machine which has both A2SERVER and A2CLOUD installed
1.2.1: Jan 2015: minor fixes; support for LED blink on Raspbian 2015-01-31
1.2.2: Mar 2015: installer improvements: now has command line options,
including unattended install; installer sets passwords
automatically to 'apple2'; status messages are now prefixed by
A2SERVER:; can update Raspple II (Raspbian OS,
NOOBS install manager, A2SERVER, and A2CLOUD); minor fixes.
1.2.3: May 2015: changed Apple software links to Internet Archive
1.2.4: Jul 2015: offer to download A2CLOUD disk contents onto A2FILES volume
1.2.4+:Oct 2015: support for using A2SERVER scripts from a location other than
[unannounced] ivanx.com/a2server for development purposes
1.2.5: Nov 2015: netboot install option for GS/OS 6.0.2/3
netboot always downloads GS/OS disk images even if present
provides error if a2setup doesn't have internet
remove persisting a2server-setup options after aborted install
fixed installer bug that omits first and last script elements
download images from Apple, with Internet Archive as a backup
install HFS.FST during netboot install
1.2.5+:Nov 2015: Merged Ivan's 1.2.5 release, removed support for Ubuntu for
[unannounced] now (see RasppleII/a2server#11), patched ProDOS 8 in boot
files for current year table, install unar from a package if
it exists.
1.2.6: Nov 2015: full, ready to use install of Spectrum; install unzip
[unannounced]
1.2.6+:Nov 2015: merged Ivan's 1.2.6 (into github master branch)
[unannounced]
1.2.7: Dec 2015: preliminary Jessie support; case insensitive file system for
[unannounced] A2FILES; removes GSFILES if empty; DOS3.3.FST and TEACH are
installed with netboot installation; minor bug fixes and
tweaks; Ubuntu support removed; branches unified
1.2.8: Dec 2015: can specify alternate host for binaries and external files;
[unannounced] 64-bit Debian precompiled binaries; move /media/A2SHARED/*
to /srv/A2SERVER; internet access (MacIP support);
1.2.9: Jan 2016: cppo supports ShrinkIt, DOS 3.3, DSK, 2MG; MountIt fully
[unannounced] installed; nulib2 fixes handling empty forks (thanks Andy);
-c installer option compiles all software (no binaries)
1.3.0: Jan 2016: Marinetti 3.0b8 installed, with preconfigured MacIP
[unannounced]
1.3.1: Jan 2016: patch Prodos 8 Thunderclock year table based on current date
[unannounced]
1.3.2: Jan 2016: install SAFE2, SAM2, and SNAP, configured for Apple II sites;
[unannounced] -i installer option reinstalls A2SERVER
1.5.0: Jan 2016: defaults to GitHub for location of installer scripts
[unannounced]
1.5.1: May 2016: changed URLs from rawgit.com to raw.githubusercontent.com
to resolve https problems during install; OS X temp dir
path corrected; added getexternal.sh to repo;
cppo changes; minor text changes (JTC); better Debian
version checking (JTC)
[unannounced]
1.5.1r2: Oct 2017: set internal version to 1.5.1; expanded version history
[unannounced]

View File

@@ -4,7 +4,7 @@
# 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}/" ;;
*) scriptURL="${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current}/" ;;
esac
currentVersion=$(wget -qO- "${scriptURL}setup/index.txt" | grep '^a2serverVersion' | cut -d '"' -f 2)
@@ -37,9 +37,8 @@ else
read
fi
if [[ ${REPLY:0:1} == "y" || ${REPLY:0:1} == "Y" ]]; then
sudo rm /usr/local/etc/A2SERVER-version &> /dev/null
# sudo rm /usr/local/etc/netatalk/a2boot/* &> /dev/null
wget -q -O /tmp/setup "${scriptURL}setup/index.txt"; source /tmp/setup "$@"
wget -q -O /tmp/setup "${scriptURL}setup/index.txt"; source /tmp/setup -i "$@"
fi
unset currentVersion 2> /dev/null

View File

@@ -48,44 +48,33 @@
1.2.3: May 2015: changed Apple software links to Internet Archive
1.2.4: Jul 2015: offer to download A2CLOUD disk contents onto A2FILES volume
1.2.4: Jul 2015: install option for ProTERM, Z.Link, ADTPro, Spectrum images
1.2.4+:Oct 2015: support for using A2SERVER scripts from a location other than
ivanx.com/a2server for development purposes
[not released]
1.2.5: Nov 2015: netboot install option for GS/OS 6.0.2/3; install HFS.FST
during netboot install
1.2.5: Nov 2015: netboot install option for GS/OS 6.0.2/3
netboot always downloads GS/OS disk images even if present
provides error if a2setup doesn't have internet
remove persisting a2server-setup options after aborted install
fixed installer bug that omits first and last script elements
download images from Apple, with Internet Archive as a backup
install HFS.FST during netboot install
1.2.6: Nov 2015: full, ready to use install of Spectrum
[unannounced; released briefly, then withdrawn]
1.2.5+:Nov 2015: Merged Ivan's 1.2.5 release, removed support for Ubuntu for
now (see RasppleII/a2server#11), patched ProDOS 8 in boot
files for current year table, install unar from a package if
it exists.
[not released]
1.5.0: Jan 2016: mixed case filenames for A2FILES; remove GSFILES if empty;
install Marinetti 3.0b8 with internet access via MacIP;
fully install Spectrum, SAFE2, SAM2, SNAP, MountIt; install
DOS3.3 and TEACH; remove Ubuntu support; move/media/A2SHARED/*
to /srv/A2SERVER; faster install (precompiled binaries) on
64-bit Debian; cppo supports ShrinkIt, DOS 3.3, DSK, 2MG,mixed
case filenames; nulib2 handles empty forks (thanks Andy);
new installer options; patch P8 Thunderclock driver year table
for current date; install from any host URL for development;
source code at GitHub (thanks Joseph)
1.2.6: Nov 2015: full, ready to use install of Spectrum; install unzip
[released briefly, then withdrawn]
1.2.6+:Nov 2015: merged Ivan's 1.2.6
[not released]
1.5.1: Jan 2016: fixed GitHub URLs to prevent https errors during installation
(thanks to http://blogs.yahoo.co.jp/ushi_cow/57459736.html);
bug fixes and minor text changes
1.2.7: Dec 2015: codebase unified; preliminary Jessie support; case insensitive
file system for A2FILES; removes GSFILES if empty; DOS3.3.FST
and TEACH are installed with netboot installation; minor bug
fixes and tweaks
[not released]
1.2.8: Dec 2015: moved /media/A2SHARED to /srv/A2SERVER
macipgw installed
files subdirectory reorganized
64-bit Debian binaries
A2SERVER_SCRIPT_URL now works everywhere
A2SERVER_BINARY_URL can now be specified
self-hosted binaries fallback, or preferred with A2SERVER_NO_EXTERNAL
better information at start and end of install
[not released]
Big thanks to: Anthony Martino, Henry Courbis, Joseph Carter, Jason King,
Andy McFadden, Steven Hirsch, Geoff Body, Peter Wong, Tony Diaz, David Schmidt,
David Schmenk, Ewen Wannop, Andrew Roughan, Antoine Vignau, Martin Haye,
Ken Gagne, Peter Neubauer, James Littlejohn, Ninjaforce; the creators of
Netatalk, The Unarchiver, ciopfs, macipgw; and the entire Apple II community.
Redistribution of Spectrum, SAFE2, SAM2, SNAP by permission of Ewen Wannop.
Thanks for using A2SERVER!