a2cloud/scripts/install_emulators
T. Joseph Carter 099f5b3f44 Move .desktop file creation to install_emulators
I don't like how this is done, but I don't like any part of how the
emulators are handled right now.  At least the mess is in the right spot
now, save for the thing that conditionally execs a login shell to make
sure gsport groups take effect at the end.  That whole restart thing is
also a mess I haven't thought about yet.
2018-05-06 03:42:05 -07:00

243 lines
8.0 KiB
Bash
Executable File

#! /bin/bash
# vim: set tabstop=4 shiftwidth=4 noexpandtab filetype=sh:
# install_emulators - temporary script for emulators from ivan.sh
#
# To the extent possible under law, T. Joseph Carter and Ivan Drucker have
# waived all copyright and related or neighboring rights to the a2cloud
# scripts themselves. Software used or installed by these scripts is subject
# to other licenses. This work is published from the United States.
a2cBinaryURL="http://blocksfree.com/downloads"
# Find the path of our source directory
a2cSource="$( dirname "${BASH_SOURCE[0]}" )/.."
pushd $a2cSource >/dev/null
a2cSource="$PWD"
popd >/dev/null
if [[ ! -f "$a2cSource/.a2cloud_source" ]]; then
printf "\na2cloud: cannot find a2cloud source directory in $a2cSource.\n\n"
exit 1
fi
# Make sure ras2_{os,arch} get set
. "$a2cSource/scripts/system_ident" -q
install_gsport() {
### Emulators: GSport
if ! hash gsport 2> /dev/null || ! hash gsportx 2> /dev/null || ! hash gsportfb 2> /dev/null; then
# FIXME: This is a _TERRIBLE_ name/place for this...
gsportConfigFile='/usr/local/lib/config.txt'
echo "A2CLOUD: Installing GSport..."
local gsportWork="$(mktemp -d /tmp/gsport.XXXXXXXXXXXX)"
pushd "$gsportWork" >/dev/null
if [[ ! $noPicoPkg ]]; then
### Emulators: GSport: Install pre-built binaries
sudo apt-get -y install libpcap0.8
sudo apt-get -y clean
wget "${a2cBinaryURL}/picopkg/gsport-${ras2_os}_${ras2_arch}.tgz"
if [[ -f gsport-${ras2_os}_${ras2_arch}.tgz ]]; then
sudo tar Pzxf gsport-${ras2_os}_${ras2_arch}.tgz
fi
fi
if ! hash gsport 2> /dev/null || ! hash gsportx 2> /dev/null || ! hash gsportfb 2> /dev/null; then
### Emulators: GSport: Install from source
echo "A2CLOUD: Building GSport from source..."
sudo apt-get -y install build-essential &> /dev/null
sudo apt-get -y install libx11-dev libxext-dev xfonts-base libpcap0.8-dev
sudo apt-get -y clean
wget -O gsport.tar.gz http://downloads.sourceforge.net/project/gsport/GSport-0.31/gsport_0.31.tar.gz
tar --strip-components=1 -zxf gsport.tar.gz
cd src
rm -f vars
buildGSport=1
cp vars_fbrpilinux vars_fb
if [[ -n $isRpi ]]; then
cp vars_pi vars_x
else
cp vars_x86linux vars_x
case "$ras2_arch" in
x86_64)
sed -i 's/-march=i686/-march=x86-64/' vars_x
sed -i 's/-march=armv6/-march=x86-64/' vars_fb
;;
i686)
sed -i 's/-march=armv6/-march=i686/' vars_fb
;;
*)
buildGSport=
echo "A2CLOUD: cannot build GSport; unknown machine architecture."
;;
esac
fi
sed -i 's/^LDFLAGS =.*$/LDFLAGS = -ldl/' vars_x
sed -i 's/^LDFLAGS =.*$/LDFLAGS = -ldl/' vars_fb
if [[ -n $buildGSport ]]; then
for varsFile in vars_x vars_fb; do
rm -f vars
cp $varsFile vars
make clean
make
sudo install -o root -g root -m 755 ../gsport${varsFile:5:2} /usr/local/bin
done
gcc -o ../to_pro to_pro.c &> /dev/null
gcc -o ../partls partls.c &> /dev/null
sudo install -o root -g root -m 755 ../to_pro /usr/local/bin
sudo install -o root -g root -m 755 ../partls /usr/local/bin
sudo install -o root -g root -m 666 ../config.txt "$gsportConfigFile"
cd "${gsportConfigFile%/*}"
sudo ln -s "${gsportConfigFile##*/}" gsport_config.txt 2> /dev/null
fi
cd /tmp/a2cloud-install 2> /dev/null
rm -rf gsport 2> /dev/null
fi
if [[ $slot6 ]]; then
### Emulators: GSport: Place blank disk images in slot 6
echo "A2CLOUD: Putting blank disks in GSport slot 6..."
sudo sed -i 's@^s6d1.*$@s6d1 = /usr/local/share/gsdisks/slot6drive1.po@' "$gsportConfigFile"
sudo sed -i 's@^s6d2.*$@s6d2 = /usr/local/share/gsdisks/slot6drive2.po@' "$gsportConfigFile"
if [[ ! -f /usr/local/share/gsdisks/slot6drive1.po || ! -f /usr/local/share/gsdisks/slot6drive2.po ]]; then
wget -qO- "${a2BinaryURL}/gsport/slot6.tgz" | sudo tar Pzx 2> /dev/null
fi
fi
if ! grep -q '^g_appletalk_turbo' "$gsportConfigFile"; then
### Emulators: GSport: Enable AppleTalk Turbo support
if grep -q 'bram1[00]' "$gsportConfigFile"; then
sudo sed -i 's/^\(bram1\[00\]\)/g_appletalk_turbo = 1\n\n\1/' "$gsportConfigFile"
else
echo -e '\ng_appletalk_turbo = 1' | sudo tee -a "$gsportConfigFile" > /dev/null
fi
fi
sudo sed -i 's/^g_appletalk_turbo = 0/g_appletalk_turbo = 1/' "$gsportConfigFile"
if ! grep -q 'g_ethernet[^_]' "$gsportConfigFile"; then
### Emulators: GSport: Enable Uthernet emulation
if grep -q 'bram1[00]' "$gsportConfigFile"; then
sudo sed -i 's/^\(bram1\[00\]\)/g_ethernet = 1\n\n\1/' "$gsportConfigFile"
else
echo -e '\ng_ethernet = 1' | sudo tee -a "$gsportConfigFile" > /dev/null
fi
fi
sudo sed -i 's/g_ethernet = 0/g_ethernet = 1/' "$gsportConfigFile"
### Emulators: GSport: Setup groups and wrapper scripts
echo "A2CLOUD: Updating GSport launch and setup files..."
sudo addgroup gsport &> /dev/null
sudo chgrp gsport /usr/local/bin/gsportfb
sudo chmod u+s /usr/local/bin/gsportfb
sudo chgrp gsport /usr/local/bin/gsportx
sudo chmod u+s /usr/local/bin/gsportx
sudo install -o root -g root -m 755 "$a2cSource/setup/gsport" /usr/local/bin/gsport
sudo install -o root -g root -m 755 "$a2cSource/setup/gsport-setup" /usr/local/bin/gsport-setup
popd >/dev/null
rm -rf "$gsportWork"
else
echo "A2CLOUD: GSport is already installed."
fi
}
install_linapple() {
### Emulators: LinApple
if ! hash linapple 2> /dev/null; then
echo "A2CLOUD: Installing LinApple..."
local linappleWork="$(mktemp -d /tmp/linapple.XXXXXXXXXXXX)"
pushd "$linappleWork" >/dev/null
if [[ ! $noPicoPkg ]]; then
### Emulators: LinApple: Install pre-built binaries
wget "${a2cBinaryURL}/picopkg/linapple-${ras2_os}_${ras2_arch}.tgz"
if [[ -f linapple-${ras2_os}_${ras2_arch}.tgz ]]; then
sudo tar Pzxf linapple-${ras2_os}_${ras2_arch}.tgz
fi
fi
if ! hash linapple 2> /dev/null; then
### Emulators: LinApple: Install from source
echo "A2CLOUD: Building LinApple from source..."
sudo apt-get -y install build-essential
sudo apt-get -y install libsdl1.2-dev libcurl4-openssl-dev zlib1g-dev libzip-dev
sudo apt-get -y clean
wget -q -O linapple_src-2b.tar.bz2 http://downloads.sourceforge.net/project/linapple/linapple/linapple_2b/linapple_src-2b.tar.bz2
tar jxf linapple_src-2b.tar.bz2
cd linapple_src-2b/src
make
sudo make install
fi
popd >/dev/null
rm -rf "$linappleWork"
else
echo "A2CLOUD: LinApple is already installed."
fi
echo "A2CLOUD: Updating LinApple launch file..."
sudo install -o root -g root -m 755 "$a2cSource/setup/linapple" /usr/local/bin/linapple
}
install_desktop() {
# FIXME: HACK HACK HACK! We're only messing with ~/Desktop in the least
# because I'm not 100% sure that if we put things in the menu that you'll
# get them. Didn't used to be the case. If that's changed, we should stop.
mkdir -p ~/Desktop
sudo mkdir -p /usr/local/share/applications
# FIXME: Is there a reason we're running these in a lxterminal with Terminal=false
if [[ -f /usr/local/bin/gsport ]]; then
sudo tee /usr/local/share/applications/gsport.desktop > ~/Desktop/gsport.desktop <<-EOF
[Desktop Entry]
Name=GSport
Comment=Apple IIgs Emulator
Exec=lxterminal -e /usr/local/bin/gsport
Icon=/usr/local/share/gsport32.ico
Terminal=false
Type=Application
Categories=AppleII
EOF
if [[ ! -f /usr/local/share/gsport32.ico ]]; then
sudo wget -O /usr/local/share/gsport32.ico https://raw.githubusercontent.com/david-schmidt/gsport/master/src/gsport32.ico
fi
fi
# LinApple:
if [[ -f /usr/local/bin/linapple ]]; then
sudo tee /usr/local/share/applications/linapple.desktop > ~/Desktop/linapple.desktop <<-EOF
[Desktop Entry]
Name=LinApple
Comment=Apple IIe Emulator
Exec=lxterminal -e /usr/local/bin/linapple
Icon=/usr/local/linapple/icon.bmp
Terminal=false
Type=Application
Categories=AppleII
EOF
fi
}
noPicoPkg=
slot6=
while [[ $1 ]]; do
case $1 in
-c)
noPicoPkg=1
;;
-6)
slot6=1
;;
*)
;;
esac
done
install_gsport
install_linapple
install_user_desktop
### Emulators: Set Groups
sudo usermod -a -G audio,video,netdev,gsport,plugdev $USER &> /dev/null