mirror of
https://github.com/RasppleII/a2server.git
synced 2024-12-22 17:29:34 +00:00
aaea9245de
Legacy code in the remaining scripts to have them run from the website using a2sDevel detection has been purged. That doesn't mean everything now runs locally always—that's going to require a finer pick through the code I haven't done yet. This is a start though, and doing it found a couple of bugs I've managed to fix already.
215 lines
6.0 KiB
Bash
Executable File
215 lines
6.0 KiB
Bash
Executable File
#! /bin/bash
|
|
# vim: set tabstop=4 shiftwidth=4 noexpandtab filetype=sh:
|
|
|
|
# download and install a2server tools:
|
|
# mkatinit, mkvolinfo, afptype, afpsync, aliases, nulib2
|
|
|
|
a2sScriptURL="https://raw.githubusercontent.com/RasppleII/a2server/master"
|
|
a2sBinaryURL="http://blocksfree.com/downloads"
|
|
|
|
# Find the path of our source directory
|
|
a2sSource="$( dirname "${BASH_SOURCE[0]}" )/.."
|
|
pushd $a2sSource >/dev/null
|
|
a2sSource="$PWD"
|
|
popd >/dev/null
|
|
if [[ ! -f "$a2sSource/.a2server_source" ]]; then
|
|
printf "\na2server: cannot find a2server source directory in $a2sSource.\n\n"
|
|
exit 1
|
|
fi
|
|
|
|
useExternalURL=1
|
|
[[ $A2SERVER_NO_EXTERNAL ]] && useExternalURL=
|
|
|
|
debianVersion="$(lsb_release -rs)"
|
|
isRpi=
|
|
arch=
|
|
if [[ -f /usr/bin/raspi-config ]]; then
|
|
isRpi=1
|
|
arch='rpi'
|
|
elif [[ "$(lsb_release -ds)" = Debian* ]]; then
|
|
if [[ "$debianVersion" -ge 7 || $debianVersion == [a-z]* ]]; then
|
|
uname_m="$(uname -m)"
|
|
if [[ $uname_m == "i686" ]]; then
|
|
arch='debian_x86'
|
|
elif [[ $uname_m == "x86_64" ]]; then
|
|
arch='debian_x64'
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
debianName=$(lsb_release -cs)
|
|
|
|
echo "A2SERVER: Installing A2SERVER tools..."
|
|
|
|
# delete older nulib2 which doesn't correctly handle zero-length forks in GSHK-created archives
|
|
if hash nulib2 &> /dev/null; then
|
|
# FIXME make this sed more robust
|
|
nulib2version=$(nulib2 | sed -n 2p | sed 's|^.*v\([0-9]\)\.\([0-9]\)\.\([0-9]\).*$|\1\2\3|' 2> /dev/null)
|
|
if (( $nulib2version < 310 )); then
|
|
sudo apt-get -y purge nulib2 &> /dev/null
|
|
sudo rm $(command -v nulib2) &> /dev/null
|
|
fi
|
|
fi
|
|
|
|
if ! hash nulib2 &> /dev/null; then
|
|
|
|
echo "A2SERVER: Installing nulib2..."
|
|
|
|
cd /tmp
|
|
if [[ $arch && ! -f /tmp/a2server-compileAlways ]]; then
|
|
{ wget -qO- "${a2sBinaryURL}/picopkg/nulib2-3.1.0a2-${arch}.tgz" | sudo tar Pzx; } &> /dev/null
|
|
fi
|
|
|
|
if ! hash nulib2 &> /dev/null; then
|
|
|
|
if [[ ! -f /tmp/a2server-packageReposUpdated ]]; then
|
|
# prepare for installing packages
|
|
sudo apt-get -y update
|
|
touch /tmp/a2server-packageReposUpdated
|
|
fi
|
|
|
|
# Dependencies: build-dep for nulib
|
|
sudo apt-get -y install build-essential zlib1g-dev
|
|
sudo apt-get -y clean
|
|
|
|
cd /tmp
|
|
rm -rf /tmp/nulib2 &> /dev/null
|
|
mkdir /tmp/nulib2
|
|
cd /tmp/nulib2
|
|
if [[ $useExternalURL ]]; then
|
|
# nulib2 does not have this tagged so we use github's auto-zipball feature
|
|
# note: topdir is nulib2-<full hash>
|
|
# note2: .tar.gz also works
|
|
wget -q -O nulib2-3.1.0a2.zip "https://github.com/fadden/nulib2/archive/20fe7ef.zip"
|
|
unzip nulib2-3.1.0a2.zip 2> /dev/null
|
|
rm nulib2-3.1.0a2.zip &> /dev/null
|
|
fi
|
|
if [ ! -d nulib2* ]; then
|
|
wget -q -O nulib2-3.1.0a2.zip "${a2sBinaryURL}/source/nulib2-3.1.0a2.zip"
|
|
unzip nulib2-3.1.0a2.zip 2> /dev/null
|
|
rm nulib2-3.1.0a2.zip &> /dev/null
|
|
fi
|
|
cd nulib2*
|
|
cd nufxlib
|
|
./configure
|
|
make
|
|
sudo make install
|
|
cd ../nulib2
|
|
./configure
|
|
make
|
|
sudo make install
|
|
cd
|
|
rm -rf /tmp/nulib2
|
|
fi
|
|
|
|
else
|
|
echo "A2SERVER: Nulib2 has already been installed."
|
|
fi
|
|
|
|
# download and install The Unarchiver, for expanding Apple disk images
|
|
# http://wakaba.c3.cx/s/apps/unarchiver.html
|
|
|
|
if ! hash unar &> /dev/null; then
|
|
|
|
echo "A2SERVER: Installing The Unarchiver..."
|
|
|
|
if [[ ! -f /tmp/a2server-packageReposUpdated ]]; then
|
|
# prepare for installing packages
|
|
sudo apt-get -y update
|
|
touch /tmp/a2server-packageReposUpdated
|
|
fi
|
|
|
|
# jessie and later: Just use the unar package
|
|
if [[ "$debianName" != "wheezy" ]]; then
|
|
sudo apt-get -y install unar
|
|
sudo apt-get clean
|
|
fi
|
|
|
|
if ! hash unar &> /dev/null; then
|
|
if [[ $arch && ! -f /tmp/a2server-compileAlways ]]; then
|
|
# Dependencies: for unar
|
|
sudo apt-get -y install libgnustep-base1.22
|
|
sudo apt-get clean
|
|
{ wget -qO- "${a2sBinaryURL}/picopkg/unar-${arch}_${debianName}.tgz" | sudo tar Pzx; } &> /dev/null
|
|
fi
|
|
|
|
# If all else fails, compile from source.
|
|
if ! hash unar &> /dev/null; then
|
|
|
|
# Dependencies: build-deps for unar
|
|
sudo apt-get -y install build-essential libgnustep-base-dev libz-dev libbz2-dev libssl-dev libicu-dev unzip
|
|
sudo apt-get clean
|
|
|
|
rm -rf /tmp/unar &> /dev/null
|
|
mkdir /tmp/unar
|
|
cd /tmp/unar
|
|
if [[ $useExternalURL ]]; then
|
|
wget -O unar-1.8.1.zip "https://github.com/incbee/Unarchiver/archive/unar-1.8.1.zip"
|
|
unzip -o unar-1.8.1.zip &> /dev/null
|
|
fi
|
|
if [ ! -d *Unarchiver*/XADMaster ]; then # need single bracket for glob
|
|
wget -O unar-1.8.1.zip "${a2sBinaryURL}/source/unar-1.8.1.zip"
|
|
unzip -o unar-1.8.1.zip &> /dev/null
|
|
fi
|
|
cd *Unarchiver*/XADMaster
|
|
make -f Makefile.linux
|
|
sudo mv lsar unar /usr/local/bin
|
|
cd ../Extra
|
|
sudo mv lsar.1 unar.1 /usr/local/man/man1
|
|
cd
|
|
rm -rf /tmp/unar
|
|
fi
|
|
sudo mandb &> /dev/null
|
|
fi
|
|
else
|
|
echo "A2SERVER: The Unarchiver has already been installed."
|
|
fi
|
|
|
|
if ! hash unzip &> /dev/null; then
|
|
echo "A2SERVER: Installing unzip..."
|
|
if [[ ! -f /tmp/a2server-packageReposUpdated ]]; then
|
|
# prepare for installing packages
|
|
sudo apt-get -y update
|
|
touch /tmp/a2server-packageReposUpdated
|
|
fi
|
|
|
|
# Dependencies: unzip
|
|
sudo apt-get -y install unzip
|
|
sudo apt-get clean
|
|
else
|
|
echo "A2SERVER: unzip has already been installed."
|
|
fi
|
|
|
|
a2sTools="afpsync afptype mkatinit mkvolinfo cppo debupdate"
|
|
a2sHelp="a2server-help.txt"
|
|
a2sConfScripts="a2server-aliases a2serverrc"
|
|
for _tool in $a2sTools; do
|
|
sudo install -m 755 "$a2sSource/scripts/tools/$_tool" "/usr/local/bin/$_tool"
|
|
done
|
|
for _help in $a2sHelp; do
|
|
sudo install -m 644 "$a2sSource/scripts/tools/$_help" "/usr/local/etc/$_help"
|
|
done
|
|
for _confscript in $a2sConfScripts; do
|
|
sudo install -m 755 "$a2sSource/scripts/tools/$_confscript" "/usr/local/etc/$_tool"
|
|
done
|
|
|
|
# 1.3.0: a2serverrc is now called from /etc/bash.bashrc,
|
|
# which in turn calls a2server-aliases
|
|
if grep 'a2server-aliases' /etc/bash.bashrc >/dev/null; then
|
|
sudo sed -i 's/a2server-aliases/a2serverrc/' /etc/bash.bashrc
|
|
fi
|
|
if ! grep 'a2serverrc' /etc/bash.bashrc >/dev/null; then
|
|
echo "source /usr/local/etc/a2serverrc" | sudo tee -a /etc/bash.bashrc >/dev/null
|
|
fi
|
|
|
|
motd="/etc/motd"
|
|
if [[ ! $(grep A2SERVER $motd) ]]; then
|
|
sudo tee -a $motd >/dev/null <<EOF
|
|
|
|
Type 'system-shutdown' to turn off A2SERVER.
|
|
Type 'a2server-setup' to configure network boot.
|
|
Type 'a2server-help' for a list of other commands.
|
|
|
|
EOF
|
|
fi
|