mirror of
https://github.com/RasppleII/a2cloud.git
synced 2024-12-21 06:29:57 +00:00
099f5b3f44
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.
243 lines
8.0 KiB
Bash
Executable File
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
|