Add arcade-bonnet.sh script
This commit is contained in:
parent
2c4d5a08f9
commit
e9626f7d8f
1 changed files with 184 additions and 0 deletions
184
arcade-bonnet.sh
Executable file
184
arcade-bonnet.sh
Executable file
|
|
@ -0,0 +1,184 @@
|
|||
#!/bin/bash
|
||||
|
||||
##### SET UP UDEV
|
||||
|
||||
if [ $(id -u) -ne 0 ]; then
|
||||
echo "Installer must be run as root."
|
||||
echo "Try 'sudo bash $0'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
clear
|
||||
|
||||
echo "This script installs software for the Adafruit"
|
||||
echo "Arcade Bonnet for Raspberry Pi. Steps include:"
|
||||
echo "- Update package index files (apt-get update)."
|
||||
echo "- Install Python libraries: smbus, evdev."
|
||||
echo "- Install arcadeBonnet.py in /boot and"
|
||||
echo " configure /etc/rc.local to auto-start script."
|
||||
echo "- Enable I2C bus."
|
||||
echo "- OPTIONAL: disable overscan."
|
||||
echo "Run time ~10 minutes. Reboot required."
|
||||
echo "EXISTING INSTALLATION, IF ANY, WILL BE OVERWRITTEN."
|
||||
echo
|
||||
echo -n "CONTINUE? [y/N] "
|
||||
read
|
||||
if [[ ! "$REPLY" =~ ^(yes|y|Y)$ ]]; then
|
||||
echo "Canceled."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# FEATURE PROMPTS ----------------------------------------------------------
|
||||
# Installation doesn't begin until after all user input is taken.
|
||||
|
||||
DISABLE_OVERSCAN=0
|
||||
INSTALL_HALT=0
|
||||
|
||||
# Given a list of strings representing options, display each option
|
||||
# preceded by a number (1 to N), display a prompt, check input until
|
||||
# a valid number within the selection range is entered.
|
||||
selectN() {
|
||||
for ((i=1; i<=$#; i++)); do
|
||||
echo $i. ${!i}
|
||||
done
|
||||
echo
|
||||
REPLY=""
|
||||
while :
|
||||
do
|
||||
echo -n "SELECT 1-$#: "
|
||||
read
|
||||
if [[ $REPLY -ge 1 ]] && [[ $REPLY -le $# ]]; then
|
||||
return $REPLY
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
echo -n "Disable overscan? [y/N] "
|
||||
read
|
||||
if [[ "$REPLY" =~ (yes|y|Y)$ ]]; then
|
||||
DISABLE_OVERSCAN=1
|
||||
fi
|
||||
|
||||
echo -n "Install GPIO-halt utility? [y/N] "
|
||||
read
|
||||
if [[ "$REPLY" =~ (yes|y|Y)$ ]]; then
|
||||
INSTALL_HALT=1
|
||||
echo -n "GPIO pin for halt: "
|
||||
read
|
||||
HALT_PIN=$REPLY
|
||||
fi
|
||||
|
||||
echo
|
||||
if [ $DISABLE_OVERSCAN -eq 1 ]; then
|
||||
echo "Overscan: disable."
|
||||
else
|
||||
echo "Overscan: keep current setting."
|
||||
fi
|
||||
if [ $INSTALL_HALT -eq 1 ]; then
|
||||
echo "Install GPIO-halt: YES (GPIO$HALT_PIN)"
|
||||
else
|
||||
echo "Install GPIO-halt: NO"
|
||||
fi
|
||||
echo
|
||||
echo -n "CONTINUE? [y/N] "
|
||||
read
|
||||
if [[ ! "$REPLY" =~ ^(yes|y|Y)$ ]]; then
|
||||
echo "Canceled."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# START INSTALL ------------------------------------------------------------
|
||||
# All selections are validated at this point...
|
||||
|
||||
# Given a filename, a regex pattern to match and a replacement string,
|
||||
# perform replacement if found, else append replacement to end of file.
|
||||
# (# $1 = filename, $2 = pattern to match, $3 = replacement)
|
||||
reconfig() {
|
||||
grep $2 $1 >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
# Pattern found; replace in file
|
||||
sed -i "s/$2/$3/g" $1 >/dev/null
|
||||
else
|
||||
# Not found; append (silently)
|
||||
echo $3 | sudo tee -a $1 >/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
echo
|
||||
echo "Starting installation..."
|
||||
echo "Updating package index files..."
|
||||
apt-get update
|
||||
|
||||
echo "Installing Python libraries..."
|
||||
apt-get install -y --force-yes python-pip python-dev python-smbus
|
||||
pip install evdev
|
||||
|
||||
echo "Installing Adafruit code in /boot..."
|
||||
cd /tmp
|
||||
curl -LO https://raw.githubusercontent.com/adafruit/Adafruit-Retrogame/master/arcadeBonnet.py
|
||||
# Moving between filesystems requires copy-and-delete:
|
||||
cp -r arcadeBonnet.py /boot
|
||||
rm -f arcadeBonnet.py
|
||||
if [ $INSTALL_HALT -ne 0 ]; then
|
||||
echo "Installing gpio-halt in /usr/local/bin..."
|
||||
curl -LO https://github.com/adafruit/Adafruit-GPIO-Halt/archive/master.zip
|
||||
unzip master.zip
|
||||
cd Adafruit-GPIO-Halt-master
|
||||
make
|
||||
mv gpio-halt /usr/local/bin
|
||||
cd ..
|
||||
rm -rf Adafruit-GPIO-Halt-master
|
||||
fi
|
||||
|
||||
# CONFIG -------------------------------------------------------------------
|
||||
|
||||
echo "Configuring system..."
|
||||
|
||||
# Enable I2C using raspi-config
|
||||
raspi-config nonint do_i2c 0
|
||||
|
||||
# Disable overscan compensation (use full screen):
|
||||
if [ $DISABLE_OVERSCAN -eq 1 ]; then
|
||||
raspi-config nonint do_overscan 1
|
||||
fi
|
||||
|
||||
if [ $INSTALL_HALT -ne 0 ]; then
|
||||
# Add gpio-halt to /rc.local:
|
||||
grep gpio-halt /etc/rc.local >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
# gpio-halt already in rc.local, but make sure correct:
|
||||
sed -i "s/^.*gpio-halt.*$/\/usr\/local\/bin\/gpio-halt $HALT_PIN \&/g" /etc/rc.local >/dev/null
|
||||
else
|
||||
# Insert gpio-halt into rc.local before final 'exit 0'
|
||||
sed -i "s/^exit 0/\/usr\/local\/bin\/gpio-halt $HALT_PIN \&\\nexit 0/g" /etc/rc.local >/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
# Auto-start arcadeBonnet.py on boot
|
||||
grep arcadeBonnet.py /etc/rc.local >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
# arcadeBonnet.py already in rc.local, but make sure correct:
|
||||
sed -i "s/^.*arcadeBonnet.py.*$/cd \/boot;python arcadeBonnet.py \&/g" /etc/rc.local >/dev/null
|
||||
else
|
||||
# Insert arcadeBonnet.py into rc.local before final 'exit 0'
|
||||
sed -i "s/^exit 0/cd \/boot;python arcadeBonnet.py \&\\nexit 0/g" /etc/rc.local >/dev/null
|
||||
fi
|
||||
|
||||
# Add udev rule (will overwrite if present)
|
||||
echo "SUBSYSTEM==\"input\", ATTRS{name}==\"retrogame\", ENV{ID_INPUT_KEYBOARD}=\"1\"" > /etc/udev/rules.d/10-retrogame.rules
|
||||
|
||||
# PROMPT FOR REBOOT --------------------------------------------------------
|
||||
|
||||
echo "Done."
|
||||
echo
|
||||
echo "Settings take effect on next boot."
|
||||
echo
|
||||
echo -n "REBOOT NOW? [y/N] "
|
||||
read
|
||||
if [[ ! "$REPLY" =~ ^(yes|y|Y)$ ]]; then
|
||||
echo "Exiting without reboot."
|
||||
exit 0
|
||||
fi
|
||||
echo "Reboot started..."
|
||||
reboot
|
||||
exit 0
|
||||
Loading…
Reference in a new issue