From a3a7a9479d62a424030891406401a9c1a36b03e0 Mon Sep 17 00:00:00 2001 From: Ivan X Date: Sun, 29 Oct 2017 05:21:55 -0400 Subject: [PATCH 1/2] set internal version to 1.5.1; expanded version history --- setup/index.txt | 4 ++-- update/devhistory.txt | 9 ++++++++- update/versionhistory.txt | 3 ++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/setup/index.txt b/setup/index.txt index 385e6da..e838c7d 100755 --- a/setup/index.txt +++ b/setup/index.txt @@ -9,7 +9,7 @@ # to download and execute, type: # wget ivanx.com/a2server/setup; source setup -a2serverVersion="150" +a2serverVersion="151" # Ensure URL we'll use ends in a / case "$A2SERVER_SCRIPT_URL" in @@ -114,7 +114,7 @@ fi a2server_update=0 doSetup=1 -if { [[ -f /usr/local/etc/A2SERVER-version ]] && (( $(head -c 3 /usr/local/etc/A2SERVER-version) < 150 )); }; then +if { [[ -f /usr/local/etc/A2SERVER-version ]] && (( $(head -c 3 /usr/local/etc/A2SERVER-version) < 151 )); }; then a2server_update=1 fi diff --git a/update/devhistory.txt b/update/devhistory.txt index 76db249..4750319 100644 --- a/update/devhistory.txt +++ b/update/devhistory.txt @@ -98,4 +98,11 @@ [unannounced] 1.5.1: May 2016: changed URLs from rawgit.com to raw.githubusercontent.com - to resolve https problems during install + 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] diff --git a/update/versionhistory.txt b/update/versionhistory.txt index 2b1dc95..fc172af 100644 --- a/update/versionhistory.txt +++ b/update/versionhistory.txt @@ -68,7 +68,8 @@ source code at GitHub (thanks Joseph) 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) + (thanks to http://blogs.yahoo.co.jp/ushi_cow/57459736.html); + bug fixes and minor text changes Big thanks to: Anthony Martino, Henry Courbis, Joseph Carter, Jason King, Andy McFadden, Steven Hirsch, Geoff Body, Peter Wong, Tony Diaz, David Schmidt, From 5e0feab69c007ad9966630b37b9f7476cebaf38e Mon Sep 17 00:00:00 2001 From: Ivan X Date: Sun, 5 Nov 2017 01:39:21 -0400 Subject: [PATCH 2/2] support for Debian and Raspbian Stretch suppress null byte read warnings in Bash 4.4 enable SSH server on Raspberry Pi if disabled Internet Archive backup URL's for external downloads, where possible compiles AppleTalk kernel if -c flag is specified, rather than downloading better cleanup after AppleTalk kernel compile notification if AppleTalk kernel module doesn't load fixed download links for communication software fixed bugs possibly preventing compile of macipgw and ciopfs fixed minor bugs during initial setup prompts os option (Raspbian update) removed from a2server-setup --- files/dist/getexternal.sh | 15 +++--- scripts/a2server-2-tools.txt | 4 +- scripts/a2server-3-sharing.txt | 68 +++++++++++++++++++++------ scripts/a2server-5-netboot.txt | 45 +++++++++++------- scripts/tools/afptype.txt | 6 +-- setup/index.txt | 86 +++++++++++++++------------------- update/devhistory.txt | 11 +++++ update/versionhistory.txt | 6 +++ 8 files changed, 150 insertions(+), 91 deletions(-) diff --git a/files/dist/getexternal.sh b/files/dist/getexternal.sh index c2c5e3d..e3a276d 100755 --- a/files/dist/getexternal.sh +++ b/files/dist/getexternal.sh @@ -23,15 +23,14 @@ wget -O files/external/appleii/PPPX.1.3d4.SHK http://www.apple2.org/marinetti/PP 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 +wget -O files/external/appleii/spectrum_gold_2mg.zip http://speccie.uk/speccie/downloads/spectrum_gold_2mg.zip +wget -O files/external/appleii/uthernet2ll.bxy http://speccie.uk/speccie/downloads/uthernet2ll.bxy +wget -O files/external/appleii/uthernetll.bxy http://speccie.uk/speccie/downloads/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 '"') +unset safeUrl samUrl snapUrl +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 '"') wget -O files/external/appleii/safe2.bxy "$safeUrl" wget -O files/external/appleii/sam2.bxy "$samUrl" wget -O files/external/appleii/snap.bxy "$snapUrl" diff --git a/scripts/a2server-2-tools.txt b/scripts/a2server-2-tools.txt index d0c132e..38db5b6 100755 --- a/scripts/a2server-2-tools.txt +++ b/scripts/a2server-2-tools.txt @@ -34,7 +34,9 @@ fi debianName= if [[ $debianVersion ]]; then debianMajor=$(cut -d . -f 1 <<< $debianVersion) - if [[ $debianMajor == "8" ]]; then + if [[ $debianMajor == "9" ]]; then + debianName="stretch" + elif [[ $debianMajor == "8" ]]; then debianName="jessie" elif [[ $debianMajor == "7" ]]; then debianName="wheezy" diff --git a/scripts/a2server-3-sharing.txt b/scripts/a2server-3-sharing.txt index f1b209c..86a40d0 100755 --- a/scripts/a2server-3-sharing.txt +++ b/scripts/a2server-3-sharing.txt @@ -16,12 +16,12 @@ # Ensure URL we'll use ends in a / case "$A2SERVER_SCRIPT_URL" in - */) scriptURL="$A2SERVER_SCRIPT_URL" ;; - *) scriptURL="${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current}/" ;; + */) scriptURL="$A2SERVER_SCRIPT_URL" ;; + *) scriptURL="${A2SERVER_SCRIPT_URL:-https://raw.githubusercontent.com/RasppleII/a2server/current}/" ;; esac case "$A2SERVER_BINARY_URL" in - */) binaryURL="$A2SERVER_BINARY_URL" ;; - *) binaryURL="${A2SERVER_BINARY_URL:-http://ivanx.com/a2server/files}/" ;; + */) binaryURL="$A2SERVER_BINARY_URL" ;; + *) binaryURL="${A2SERVER_BINARY_URL:-http://ivanx.com/a2server/files}/" ;; esac useExternalURL=1 [[ $A2SERVER_NO_EXTERNAL ]] && useExternalURL= @@ -44,7 +44,9 @@ fi debianName= if [[ $debianVersion ]]; then debianMajor=$(cut -d . -f 1 <<< $debianVersion) - if [[ $debianMajor == "8" ]]; then + if [[ $debianMajor == "9" ]]; then + debianName="stretch" + elif [[ $debianMajor == "8" ]]; then debianName="jessie" elif [[ $debianMajor == "7" ]]; then debianName="wheezy" @@ -53,6 +55,14 @@ if [[ $debianVersion ]]; then fi fi +# enable SSH (disabled by default in Raspbian from late 2016 onward) +if [[ $isRpi && $debianMajor -ge 8 ]] && ! ps aux | grep -q '[s]shd'; then + echo "A2SERVER: Enabling ssh access..." + sudo systemctl enable ssh &> /dev/null && sudo systemctl start ssh &> /dev/null +else + echo "A2SERVER: ssh access is already enabled." +fi + # skip this if already done if [[ -f /usr/local/etc/A2SERVER-version ]] && (( $(head -c 3 /usr/local/etc/A2SERVER-version) >= 101 )); then @@ -100,15 +110,18 @@ else if [[ $(apt-cache search '^libdb5.1$') ]]; then # Wheezy # Dependencies: netatalk 2.2.4 sudo apt-get -y install libdb5.1 - elif [[ $(apt-cache search '^libdb5.3$') ]]; then # Jessie + elif [[ $(apt-cache search '^libdb5.3$') ]]; then # Jessie or Stretch # Dependencies: netatalk 2.2.4 sudo apt-get -y install libdb5.3 else break fi - if [[ $(apt-cache search '^libssl1.0.0$') ]]; then + if [[ $(apt-cache search '^libssl1.0.0$') ]]; then # Wheezy or Jessie # Dependencies: netatalk 2.2.4 sudo apt-get -y install libssl1.0.0 + elif [[ $(apt-cache search '^libssl1.0.2$') ]]; then # Stretch + # Dependencies: netatalk 2.2.4 + sudo apt-get -y install libssl1.0.2 else break fi @@ -116,7 +129,7 @@ else if [[ $(apt-cache search '^libgcrypt11$') ]]; then # Wheezy # Dependencies: netatalk 2.2.4 sudo apt-get -y install libgcrypt11 - elif [[ $(apt-cache search '^libgcrypt20$') ]]; then # Jessie + elif [[ $(apt-cache search '^libgcrypt20$') ]]; then # Jessie or Stretch # Dependencies: netatalk 2.2.4 sudo apt-get -y install libgcrypt20 else @@ -135,8 +148,24 @@ else done if [[ $compileFromSource ]]; then + # Dependencies: build-deps for netatalk 2.2.4 - sudo apt-get -y install build-essential libssl-dev + sudo apt-get -y install build-essential + + if [[ $(dpkg -l | grep libssl-dev | tr -s ' ' | cut -d ' ' -f 3 | cut -c 1-3) == "1.1" ]]; then + echo "A2SERVER: WARNING: libssl-dev 1.1 is already installed; removing." + sudo apt-get -y purge libssl-dev + sudo apt -y autoremove + fi + + if [[ $(apt-cache search '^libssl1.0-dev$') ]]; then # Stretch + # Dependencies: build-deps for netatalk 2.2.4 + sudo apt-get -y install libssl1.0-dev + else # probably Jessie or Wheezy + # Dependencies: build-deps for netatalk 2.2.4 + sudo apt-get -y install libssl-dev + fi + if [[ $(apt-cache search '^libdb5.1-dev$') ]]; then # Wheezy # Dependencies: build-deps for netatalk 2.2.4 sudo apt-get -y install libdb5.1-dev @@ -148,7 +177,8 @@ else # Dependencies: build-deps for netatalk 2.2.4 sudo apt-get -y install libdb-dev fi - if [[ $(apt-cache search '^libgcrypt11-dev$') ]]; then # Jessie or Wheezy + + if [[ $(apt-cache search '^libgcrypt11-dev$') ]]; then # Stretch, Jessie or Wheezy # Dependencies: build-deps for netatalk 2.2.4 sudo apt-get -y install libgcrypt11-dev else @@ -156,6 +186,7 @@ else # Dependencies: build-deps for netatalk 2.2.4 sudo apt-get -y install $(apt-cache search '^libgcrypt.*dev$' | sort -r | head -1 | cut -d ' ' -f 1) fi + sudo apt-get clean # get Netatalk @@ -179,10 +210,10 @@ else # props to Steven Hirsch for these sed -i ':a;N;$!ba;s/case FILPBIT_ATTR :\n *change_mdate = 1;\n/case FILPBIT_ATTR :\n/g' etc/afpd/file.c sed -i 's/rtmp->rt_iface == iface/rtmp->rt_iface != iface/g' etc/atalkd/main.c - + # prepare to build Netatalk ./configure --enable-debian --enable-ddp --enable-a2boot - + # uninstall Netatalk if already installed [[ -f /usr/local/sbin/afpd ]] && sudo make uninstall @@ -193,7 +224,7 @@ else # to remove the Netatalk source code (optional), type: cd rm -rf /tmp/netatalk - fi + fi fi # --- Install MacIPgw @@ -215,7 +246,7 @@ if ! hash macipgw &> /dev/null; then unzip macipgw.zip 2> /dev/null rm macipgw.zip &> /dev/null fi - if [[ ! -d macipgw-master ]]; then + if [ ! -d macipgw* ]; then wget -qO macipgw.zip "${binaryURL}external/source/macipgw.zip" unzip macipgw.zip 2> /dev/null rm macipgw.zip &> /dev/null @@ -421,11 +452,16 @@ if ! hash ciopfs &> /dev/null; then cd /tmp/ciopfs if [[ $useExternalURL ]]; then wget -q -O ciopfs-0.4.tar.gz http://www.brain-dump.org/projects/ciopfs/ciopfs-0.4.tar.gz + if (( $? != 0 )); then + wget -q -O ciopfs-0.4.tar.gz http://web.archive.org/web/20160911102924/http://www.brain-dump.org/projects/ciopfs/ciopfs-0.4.tar.gz + fi tar zxf ciopfs-0.4.tar.gz &> /dev/null + rm ciopfs-0.4.tar.gz &> /dev/null fi if [ ! -f ciopfs*/ciopfs.c ]; then # single brackets required for glob wget -q -O ciopfs-0.4.tar.gz ${binaryURL}external/source/ciopfs-0.4.tar.gz tar zxf ciopfs-0.4.tar.gz &> /dev/null + rm ciopfs-0.4.tar.gz &> ?dev/null fi cd ciopfs* make @@ -529,7 +565,7 @@ if [[ -f "/lib/modules/$kernelRelease/kernel/drivers/net/appletalk/ipddp.ko" ]]; sudo mv /lib/modules/$kernelRelease/kernel/net/appletalk/appletalk.ko /tmp 2> /dev/null - if [[ ${arch%_*} == "debian" ]]; then + if [[ ! $compileFromSource && ${arch%_*} == "debian" ]]; then echo "A2SERVER: Fetching AppleTalk kernel module for Debian..." wget -qO /tmp/appletalk.tgz ${binaryURL}precompiled/appletalk-$kernelRelease-${arch}.tgz if [[ $? -eq 0 ]]; then @@ -542,6 +578,7 @@ if [[ -f "/lib/modules/$kernelRelease/kernel/drivers/net/appletalk/ipddp.ko" ]]; sudo sed -i "s/ATALKD_RUN=no/ATALKD_RUN=yes/" /etc/default/netatalk sudo /etc/init.d/netatalk restart &> /dev/null else + echo "A2SERVER: failed to load AppleTalk kernel module" # if we didn't load it successfully, remove it sudo rm /lib/modules/$kernelRelease/kernel/net/appletalk/appletalk.ko 2> /dev/null fi @@ -592,6 +629,7 @@ if [[ -f "/lib/modules/$kernelRelease/kernel/drivers/net/appletalk/ipddp.ko" ]]; sudo rm /usr/src/$kernelSrc sudo rm -r /usr/src/linux-source-$kernelMajorMinor sudo apt-get -y purge linux-source-$kernelMajorMinor + sudo apt -y autoremove done fi diff --git a/scripts/a2server-5-netboot.txt b/scripts/a2server-5-netboot.txt index 26e9c0b..a54aaae 100755 --- a/scripts/a2server-5-netboot.txt +++ b/scripts/a2server-5-netboot.txt @@ -30,6 +30,7 @@ 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 @@ -135,11 +136,11 @@ updateP8YearTables () { 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) ]]; then + 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) ]]; then + 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 @@ -570,6 +571,9 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then 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 @@ -673,6 +677,9 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then cd /tmp/netboot if [[ $useExternalURL ]]; then 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 @@ -744,17 +751,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 | 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) + 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 $spectrumVer" + echo -n "Spectrum" # get Spectrum if [[ -f $commDir/Spectrum/Spectrum ]]; then echo " is already installed." @@ -768,7 +773,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then 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 + wget -qO spectrum_gold_2mg.zip http://speccie.uk/speccie/downloads/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 @@ -816,6 +821,9 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then # TCP/IP update (3.0b8) if [[ $useExternalURL ]]; then wget -qO Marinetti3.0b8.po http://www.a2retrosystems.com/downloads/Marinetti3.0b8.po + if (( $? != 0 )); then + wget -qO Marinetti3.0b8.po http://web.archive.org/web/20171105043713/http://a2retrosystems.com/downloads/Marinetti3.0b8.po + fi fi if [[ $? != 0 || ! -f Marinetti3.0b8.po || $(wc -c < Marinetti3.0b8.po) != "819200" ]]; then wget -qO Marinetti3.0b8.po ${binaryURL}external/appleii/Marinetti3.0b8.po @@ -827,6 +835,9 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then if [[ $useExternalURL ]]; then wget -qO PPPX.1.3d4.SHK http://www.apple2.org/marinetti/PPPX.1.3d4.SHK fi + 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 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 @@ -840,7 +851,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then # Uthernet Link Layer if [[ $useExternalURL ]]; then - wget -qO uthernetll.bxy http://www.speccie.co.uk/speccie/software/uthernetll.bxy + wget -qO uthernetll.bxy http://speccie.uk/speccie/downloads/uthernetll.bxy fi if [[ $? != 0 || ! -f uthernetll.bxy || $(wc -c < uthernetll.bxy) -eq 0 ]]; then wget -qO uthernetll.bxy ${binaryURL}external/appleii/uthernetll.bxy @@ -849,7 +860,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then # Uthernet II Link Layer if [[ $useExternalURL ]]; then - wget -qO uthernet2ll.bxy http://www.speccie.co.uk/speccie/software/uthernet2ll.bxy + wget -qO uthernet2ll.bxy http://speccie.uk/speccie/downloads/uthernet2ll.bxy fi if [[ $? != 0 || ! -f uthernet2ll.bxy || $(wc -c < uthernet2ll.bxy) -eq 0 ]]; then wget -qO uthernet2ll.bxy ${binaryURL}external/appleii/uthernet2ll.bxy @@ -871,7 +882,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then mkdir -p /tmp/netboot/safe2 cd /tmp/netboot/safe2 if [[ $useExternalURL ]]; then - [[ ! $safeUrl ]] && safeUrl="http://www.speccie.co.uk/speccie/software/safe229.bxy" + [[ ! $safeUrl ]] && safeUrl="http://speccie.uk/speccie/downloads/safe230.bxy" wget -qO safe2.bxy "$safeUrl" cppo -s -ad safe2.bxy . &> /dev/null fi @@ -905,7 +916,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then mkdir -p /tmp/netboot/sam2 cd /tmp/netboot/sam2 if [[ $useExternalURL ]]; then - [[ ! $samUrl ]] && samUrl="http://www.speccie.co.uk/speccie/software/sam205.bxy" + [[ ! $samUrl ]] && samUrl="http://speccie.uk/speccie/downloads/sam206.bxy" wget -qO sam2.bxy "$samUrl" cppo -s -ad sam2.bxy . &> /dev/null fi @@ -942,7 +953,7 @@ if [[ ! $autoAnswerYes || -f /tmp/a2server-setupNetBoot ]]; then mkdir -p /tmp/netboot/snap cd /tmp/netboot/snap if [[ $useExternalURL ]]; then - [[ ! $snapUrl ]] && snapUrl="http://www.speccie.co.uk/speccie/software/snap118.bxy" + [[ ! $snapUrl ]] && snapUrl="http://speccie.uk/speccie/downloads/snap118.bxy" wget -qO snap.bxy "$snapUrl" cppo -s -ad snap.bxy . &> /dev/null fi diff --git a/scripts/tools/afptype.txt b/scripts/tools/afptype.txt index 66cf3f9..42ca539 100755 --- a/scripts/tools/afptype.txt +++ b/scripts/tools/afptype.txt @@ -158,7 +158,7 @@ readchars () { && ( $3 -ge 0 ) ]] || return 23; } # args are valid dd if="$1" bs=1 skip=$(($2)) $([[ $3 ]] && echo -n "count=$3") \ - 2> /dev/null + 2> /dev/null | tr -d ' \0' } readcharDec () { @@ -175,7 +175,7 @@ readcharDec () { && ( $2 -ge 0 ) ]] || return 22; } # args are valid charX="$(dd if="$1" bs=1 skip=$(($2)) \ - count=1 2> /dev/null; echo -n X)" + count=1 2> /dev/null | tr -d '\0'; echo -n X)" [[ ${#charX} -gt 1 ]] || { echo -n 0; return 0; } echo -n "${charX:0:1}" | od -t u1 | \ head -1 | sed 's/[0\ ]*//' | tr -d ' \n' @@ -195,7 +195,7 @@ readcharHex () { && ( $2 -ge 0 ) ]] || return 22; } # args are valid charX="$(dd if="$1" bs=1 skip=$(($2)) \ - count=1 2> /dev/null; echo -n X)" + count=1 2> /dev/null | tr -d '\0'; echo -n X)" [[ ${#charX} -gt 1 ]] || { echo -n "00"; return 0; } printf %02X $(echo -n "${charX:0:1}" | od -t u1 | \ head -1 | sed 's/[0\ ]*//' | tr -d ' \n') diff --git a/setup/index.txt b/setup/index.txt index e838c7d..3fc8d6d 100755 --- a/setup/index.txt +++ b/setup/index.txt @@ -9,7 +9,7 @@ # to download and execute, type: # wget ivanx.com/a2server/setup; source setup -a2serverVersion="151" +a2serverVersion="152" # Ensure URL we'll use ends in a / case "$A2SERVER_SCRIPT_URL" in @@ -29,6 +29,7 @@ isRpi= isDebian= 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 +installedVersion= if [ -f /usr/local/etc/A2SERVER-version ]; then installedVersion="$(cat /usr/local/etc/A2SERVER-version)" fi @@ -46,7 +47,6 @@ installAll= setupNetBoot= setupWindowsSharing= compileAlways= -updateRasppleII= rm /tmp/a2server-* 2> /dev/null while [[ $1 ]]; do if [[ $1 == "-r" ]]; then @@ -72,10 +72,6 @@ while [[ $1 ]]; do shift compileAlways="-c" touch /tmp/a2server-compileAlways - elif [[ $1 == "-os" || $1 == "os" ]]; then - # elif [[ ${1,,} == "rasppleii" || ${1,,} == "raspple" || ${1,,} == "rasappleii" || ${1,,} == "rasapple" || ${1,,} == "raspple2" || ${1,,} == "rasapple2" ]]; then - shift - updateRasppleII=1 elif [[ $1 == "-v" ]]; then shift # Version was already printed @@ -89,20 +85,10 @@ while [[ $1 ]]; do echo "-b: auto-setup network boot (use with -y)" echo "-w: auto-setup Windows file sharing (use with -y)" echo "-c: compile non-package items, rather than downloading binaries" - if [[ $isRpi ]]; then - echo "-os: update Raspbian OS, A2CLOUD, A2SERVER, and Apple II Pi" - fi [[ $0 == "-bash" ]] && return 1 || exit 1 fi done -if [[ $updateRasppleII ]]; then - echo "A2SERVER: Updating Raspple II (takes up to an hour)..." - wget -qO /tmp/raspbian-update "${A2SERVER_SCRIPT_URL}scripts/raspbian-update.txt" - source /tmp/raspbian-update a2cloud a2server $autoAnswerYes $skipRepoUpdate - [[ $0 == "-bash" ]] && return 0 || exit 0 -fi - if { [[ -f /usr/local/etc/A2SERVER-version ]] && (( $(head -c 3 /usr/local/etc/A2SERVER-version) < 110 )); }; then echo echo "WARNING: The current A2SERVER installer scripts haven't been tested for" @@ -114,7 +100,7 @@ fi a2server_update=0 doSetup=1 -if { [[ -f /usr/local/etc/A2SERVER-version ]] && (( $(head -c 3 /usr/local/etc/A2SERVER-version) < 151 )); }; then +if { [[ -f /usr/local/etc/A2SERVER-version ]] && (( $(head -c 3 /usr/local/etc/A2SERVER-version) < 152 )); }; then a2server_update=1 fi @@ -124,23 +110,25 @@ if [[ $isRpi ]]; then #supported Raspbian? (16-Feb-15, 20-Jun-14, 09-Jan-14, etc fwsupported="-8aca5762- -462f3e3f476f7b6- -c32bc633039cd9- -9d34d0475f9- -d4f5315cfac4e- -6f4a90c8cb8817f- -5dd9b4962e- -17c8799375- -960832a6c2590635216c296b6ee0bebf67b21d50- - -2a329e0c7d8ea19c085bac5633aa4fccee0f21be-" + -2a329e0c7d8ea19c085bac5633aa4fccee0f21be- + -b2420fc150ae4616f5d9ec24bdaedc630586a529-" [[ "$fwsupported" == *-$fwhash-* ]] && unsupportedOS= # [[ ($fwhash == "8aca5762") || ($fwhash == "462f3e3f476f7b6") || ($fwhash == "c32bc633039cd9") || ($fwhash == "9d34d0475f9") || ($fwhash == "d4f5315cfac4e") || ($fwhash == "6f4a90c8cb8817f") || ($fwhash == "5dd9b4962e") || ($fwhash == "17c8799375") ]] && unsupportedOS= elif [[ $isDebian ]]; then # supported Debian? debianVersion=$(cat /etc/debian_version) - debianSupported="-8.2- -7.9- -7.8- -7.6- -7.3-" + debianSupported="-9.2- -8.2- -7.9- -7.8- -7.6- -7.3-" [[ $debianSupported == *-$debianVersion-* ]] && unsupportedOS= fi if [[ $unsupportedOS && $isRpi ]]; then echo - echo "A2SERVER and its installer scripts have been tested on Raspbian Wheezy and" - echo "Jessie, though not this specific firmware version ($fwhash). Just FYI." + echo "A2SERVER and its installer scripts have been tested on Raspbian Stretch," + echo "Jessie, and Wheezy, though not this specific firmware version" + echo "(${fwhash:0:7}). Just FYI." unsupportedOS= elif [[ $unsupportedOS && $isDebian ]]; then echo - echo "A2SERVER and its installer scripts have been tested on Debian 7 and 8," + echo "A2SERVER and its installer scripts have been tested on Debian 7/8/9," echo "though not this specific point release ($debianVersion). Just FYI." unsupportedOS= fi @@ -180,34 +168,38 @@ if (( $doSetup )); then if (( $doSetup )); then - userPw=$(sudo grep "^$USER" /etc/shadow | cut -f 2 -d ':') - [[ $userPw == "$(echo 'apple2' | perl -e '$_ = ; chomp; print crypt($_, $ARGV[0])' "${userPw%"${userPw#\$*\$*\$}"}")" ]] && isApple2Pw=1 || isApple2Pw= - [[ $userPw == "$(echo 'raspberry' | perl -e '$_ = ; chomp; print crypt($_, $ARGV[0])' "${userPw%"${userPw#\$*\$*\$}"}")" ]] && isRaspberryPw=1 || isRaspberryPw= - - password="your password" - [[ $isApple2Pw ]] && password="'apple2'" - [[ $isRaspberryPw ]] && password="'raspberry'" - - - [[ $isRpi ]] && a2server="your Raspberry Pi" || a2server="A2SERVER" - if [[ ! $isApple2Pw && ! -f /usr/local/etc/A2SERVER-version ]]; then - if [[ ! $autoAnswerYes ]]; then - echo - echo "To ensure that all client computers are able to connect to" - echo "${a2server} using the same password, you probably want" - echo "to change your user password to 'apple2'." - echo - echo -n "Do you want to change the password for user '$USER' to 'apple2' now? " - read + checkPw=1 + while [[ $checkPw ]] ; do + userPw=$(sudo grep "^$USER" /etc/shadow | cut -f 2 -d ':') + [[ $userPw == "$(echo 'apple2' | perl -e '$_ = ; chomp; print crypt($_, $ARGV[0])' "${userPw%"${userPw#\$*\$*\$}"}")" ]] && isApple2Pw=1 || isApple2Pw= + [[ $userPw == "$(echo 'raspberry' | perl -e '$_ = ; chomp; print crypt($_, $ARGV[0])' "${userPw%"${userPw#\$*\$*\$}"}")" ]] && isRaspberryPw=1 || isRaspberryPw= + + password="your password" + [[ $isApple2Pw ]] && password="apple2" + [[ $isRaspberryPw ]] && password="raspberry" + checkPw= + + [[ $isRpi ]] && a2server="your Raspberry Pi" || a2server="A2SERVER" + if [[ ! $isApple2Pw && ! -f /usr/local/etc/A2SERVER-version ]]; then + if [[ ! $autoAnswerYes ]]; then + echo + echo "To ensure that all client computers are able to connect to" + echo "${a2server} using the same password, you probably want" + echo "to change your user password to 'apple2'." + echo + echo -n "Do you want to change the password for user '$USER' to 'apple2' now? " + read + fi + if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then + echo "A2SERVER: changing password for user '$USER' to 'apple2'..." + echo "$USER:apple2" | sudo chpasswd + checkPw=1 + fi fi - if [[ $autoAnswerYes || ${REPLY:0:1} == "Y" || ${REPLY:0:1} == "y" ]]; then - echo "A2SERVER: changing password for user '$USER' to 'apple2'..." - echo "$USER:apple2" | sudo chpasswd - fi - fi + done echo - echo "During this installation, enter ${password} if prompted for passwords." + echo "During this installation, enter '${password}' if prompted for passwords." echo sudo true diff --git a/update/devhistory.txt b/update/devhistory.txt index 4750319..9a0c67d 100644 --- a/update/devhistory.txt +++ b/update/devhistory.txt @@ -106,3 +106,14 @@ 1.5.1r2: Oct 2017: set internal version to 1.5.1; expanded version history [unannounced] + +1.5.2: Nov 2017: support for Stretch; suppress null byte read warnings in + Bash 4.4; enable SSH server on Raspberry Pi if disabled; + use Internet Archive backup URL's for external downloads if + possible; compile AppleTalk kernel if -c flag is + specified (rather than downloading); better cleanup after + AppleTalk kernel compile; notification if AppleTalk kernel + module doesn't load; fixed download links for comm software; + bug fixes when compiling macipgw and ciopfs; + os option (Raspbian update) removed from a2server-setup + diff --git a/update/versionhistory.txt b/update/versionhistory.txt index fc172af..ea0e2b8 100644 --- a/update/versionhistory.txt +++ b/update/versionhistory.txt @@ -70,6 +70,12 @@ 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.5.1r2: Oct 2017: corrected version number + +1.5.2: Nov 2017: support for Debian/Raspbian Stretch; fixes minor bugs during + install; enable SSH server if disabled on Raspberry Pi; fixes + changed download links for GS/OS communication software Big thanks to: Anthony Martino, Henry Courbis, Joseph Carter, Jason King, Andy McFadden, Steven Hirsch, Geoff Body, Peter Wong, Tony Diaz, David Schmidt,