|
|
@ -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 |