Last active
May 18, 2021 12:49
-
-
Save rgstephens/2a13fd3f78f847bc3e1d768a577b25d2 to your computer and use it in GitHub Desktop.
Raspberry Pi Setup Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Whiptail examples - http://xmodulo.com/create-dialog-boxes-interactive-shell-script.html | |
oldhostname=$(hostname) | |
newhostname=$(whiptail --title "Hostname" --inputbox "Change hostname?" 10 60 $oldhostname 3>&1 1>&2 2>&3) | |
export exitstatus=$? | |
if [ $exitstatus != 0 ]; then | |
exit $exitstatus | |
fi | |
toemail=$(whiptail --title "gmail" --inputbox "Enter gmail (w/o @gmail.com) address to notify when script is done" 10 60 3>&1 1>&2 2>&3) | |
export exitstatus=$? | |
if [ $exitstatus != 0 ]; then | |
exit $exitstatus | |
fi | |
if [ -n "$toemail" ] | |
then | |
emailpass=$(whiptail --title "${toemail} Password" --passwordbox "Enter ${toemail}'s password" 10 60 3>&1 1>&2 2>&3) | |
fi | |
# pass=$(whiptail --title "Pi Password" --inputbox "Enter the Pi user password" 10 60 raspberry 3>&1 1>&2 2>&3) | |
timezone=$(whiptail --title "Timezone" --radiolist \ | |
"What is your timezone?" 15 60 4 \ | |
"US/Pacific" "" ON \ | |
"Europe/Berlin" "" OFF 3>&1 1>&2 2>&3) | |
export exitstatus=$? | |
if [ $exitstatus != 0 ]; then | |
exit $exitstatus | |
fi | |
newuser=$(whiptail --title "Username" --inputbox "Enter new username if you want one" 10 60 3>&1 1>&2 2>&3) | |
if [ -n "$newuser" ] | |
then | |
newuserpass=$(whiptail --title "${newuser} Password" --passwordbox "Enter ${newuser}'s password" 10 60 3>&1 1>&2 2>&3) | |
newuserpasscrypt=$(openssl passwd -crypt ${newuserpass}) | |
sudo useradd -b /home -c ${newuser} -g users -m -p ${newuserpasscrypt} -s /bin/bash ${newuser} | |
fi | |
# Optional packages to install | |
upgradetype=$(whiptail --title "Upgrade" --radiolist \ | |
"Which upgrade type" 20 60 15 \ | |
"none" "None" OFF \ | |
"upgrade" "upgrade" ON \ | |
"dist-upgrade" "dist-upgrade" OFF \ | |
3>&1 1>&2 2>&3) | |
# Optional packages to install | |
pkglist=$(whiptail --title "Install Checklist" --checklist \ | |
"Choose packages to install" 20 60 15 \ | |
"emacs" "Emacs" ON \ | |
"git" "Git" ON \ | |
"htop" "htop" ON \ | |
"dnsutils" "dnsutils" ON \ | |
"sendmail" "Sendmail & Mailutils" ON \ | |
"docker" "docker & compose" ON \ | |
"ctop" "ctop" ON \ | |
"xrdp" "XRDP & Conky" OFF \ | |
"dnsmasq" "DNSMasq" OFF \ | |
"shellinabox" "Shell In A Box" OFF \ | |
"rpi" "RPi Monitor" OFF \ | |
"chrome" "Chromium" OFF \ | |
"node" "Upgrade Node.js to 0.12.x" OFF \ | |
"mongodb" "MongoDB" OFF \ | |
"apache" "Apache" OFF \ | |
"freeboard" "Freeboard Dashboard" OFF \ | |
"mqtt" "MQTT Tools" OFF \ | |
"mosquitto" "Mosquitto" OFF \ | |
"mqtt" "MQTT Tools" OFF \ | |
3>&1 1>&2 2>&3) | |
export exitstatus=$? | |
if [ $exitstatus != 0 ]; then | |
exit $exitstatus | |
fi | |
# Configuration options | |
configopts=$(whiptail --title "Configure Options" --checklist \ | |
"Do you want these configured" 15 60 8 \ | |
"nodered" "Node Red nodes" OFF \ | |
"wpa" "WiFi credentials file" OFF \ | |
"Display.News" "Display.News X11 autostart file" OFF \ | |
"rpi" "RPi Monitor" OFF \ | |
3>&1 1>&2 2>&3) | |
export exitstatus=$? | |
if [ $exitstatus != 0 ]; then | |
exit $exitstatus | |
fi | |
#for pkg in $pkglist | |
#do | |
# case $pkg in | |
# \"mosca\") | |
# mqttuser=$(whiptail --title "MQTT User" --inputbox "Enter new Mosca MQTT user" 10 60 3>&1 1>&2 2>&3) | |
# if [ -n "$mqttuser" ] | |
# then | |
# mqttpass=$(whiptail --title "${mqttuser} Password" --passwordbox "Enter ${mqttuser}'s password" 10 60 3>&1 1>&2 2>&3) | |
# fi | |
# ;; | |
# esac | |
#done | |
#### start the setup process #### | |
STARTTIME=$(date +%s) | |
sudo echo "alias ll='ls -l'" >> ~/.bashrc | |
# Update timezone | |
sudo rm /etc/localtime | |
#sudo ln -s /usr/share/zoneinfo/US/Pacific /etc/localtime | |
sudo ln -s /usr/share/zoneinfo/${timezone} /etc/localtime | |
# change hostname | |
echo "-- Setting hostname" | |
if [ "$oldhostname" != "$newhostname" ] | |
then | |
sudo sed -i "s/$oldhostname/$newhostname/g" /etc/hostname | |
sudo sed -i "s/$oldhostname/$newhostname/g" /etc/hosts | |
fi | |
# create users | |
echo "-- Removing unneeded packages" | |
sudo apt-get remove -y wolfram-engine | |
sudo apt-get remove -y sonic-pi | |
sudo apt-get -y update | |
echo apt-get update status: $? | |
# update and upgrade | |
if [ "$upgradetype" != "upgrade" ] | |
then | |
echo "-- Upgrading all packages" | |
sudo apt-get -y upgrade | |
echo apt-get upgrade status: $? | |
fi | |
if [ "$upgradetype" != "dist-upgrade" ] | |
then | |
echo "-- Running dist-upgrade" | |
sudo apt-get -y dist-upgrade | |
echo apt-get dist-upgrade status: $? | |
fi | |
# remove unneeded packages, ideas from https://blog.samat.org/2015/02/05/slimming-an-existing-raspbian-install/ | |
# nmap network discovery | |
sudo apt-get -y nmap aptitude | |
## package selected from install list | |
for pkg in $pkglist | |
do | |
case $pkg in | |
\"node\") | |
#echo "-- Removing old Node.js, Mosca needs newer version" | |
#sudo apt-get -y remove nodejs-legacy nodejs-dev nodejs | |
#sudo apt-get -y remove npm | |
#echo "-- Installing latest Node.js for Mosca" | |
# these steps got me v4.4.0 in March 2016 | |
#curl -sL https://deb.nodesource.com/setup_4.x | sudo bash - | |
#sudo apt-get install -y build-essential python-dev python-rpi.gpio nodejs | |
# Need 0.12 for Mosca - this does 0.12.6 | |
#wget http://node-arm.herokuapp.com/node_archive_armhf.deb | |
#sudo dpkg -i node_archive_armhf.deb | |
#sudo ln -s /usr/local/bin/node /usr/bin/node | |
#sudo apt-get install -y npm | |
# Install startup files | |
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/nodered.service -O /lib/systemd/system/nodered.service | |
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start | |
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop | |
sudo chmod +x /usr/bin/node-red-st* | |
sudo systemctl daemon-reload | |
sudo systemctl start nodered | |
sudo systemctl enable nodered.service | |
# For older Pi's (installed 4.2.1 in March 2016) | |
# wget http://node-arm.herokuapp.com/node_latest_armhf.deb | |
# sudo dpkg -i node_latest_armhf.deb | |
# sudo apt-get install -y build-essential python-dev npm | |
;; | |
\"xrdp\") | |
echo "-- Installing XRDP" | |
sudo apt-get install -y xrdp | |
sudo apt-get install -y conky | |
;; | |
\"emacs\") | |
echo "-- Installing emacs" | |
sudo apt-get install -y emacs | |
;; | |
\"htop\") | |
echo "-- Installing htop" | |
sudo apt-get install -y htop | |
;; | |
\"git\") | |
echo "-- Installing git" | |
sudo apt-get install -y git | |
;; | |
\"dnsutils\") | |
echo "-- Installing dnsutils" | |
sudo apt-get install -y dnsutils | |
;; | |
\"docker\") | |
sudo apt install -y python3-pip | |
echo "-- Installing docker" | |
sudo apt-get install -y docker.io | |
echo "-- Installing docker-compose" | |
sudo pip3 install docker-compose | |
;; | |
\"ctop\") | |
echo "-- Installing ctop" | |
sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.2/ctop-0.7.2-linux-arm -O /usr/local/bin/ctop | |
sudo chmod +x /usr/local/bin/ctop | |
;; | |
\"dnsmasq\") | |
echo "-- Installing dnsmasq" | |
# DNS & DHCP | |
sudo apt-get -y install dnsmasq | |
;; | |
\"sendmail\") | |
echo "-- Installing sendmail" | |
# Sendmail | |
sudo apt-get -y install sendemail libio-socket-ssl-perl libnet-ssleay-perl | |
sudo apt-get -y mail mbox mailutils | |
;; | |
\"shellinabox\") | |
echo "-- Installing shellinabox" | |
# shell in a box /Webgui | |
sudo apt-get -y install shellinabox | |
;; | |
\"rpi\") | |
echo "-- Installing RPi Monitor" | |
# RPi Monitor | |
sudo apt-get -y install apt-transport-https ca-certificates | |
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 2C0D3C0F | |
sudo wget http://goo.gl/rsel0F -O /etc/apt/sources.list.d/rpimonitor.list | |
sudo apt-get update | |
sudo apt-get -y install rpimonitor | |
sudo apt-get -y install aptitude | |
sudo apt-get upgrade | |
sudo /usr/share/rpimonitor/scripts/updatePackagesStatus.pl | |
# Remove the RPi Monitor list because it causes cache problems updating other packages | |
sudo rm /etc/apt/sources.list.d/rpimonitor.list | |
# RPi Monitor | |
#wget https://github.com/XavierBerger/RPi-Monitor-deb/raw/master/packages/rpimonitor_2.10.1-1_all.deb | |
#wget https://github.com/XavierBerger/RPi-Monitor-deb/blob/master/packages/rpimonitor_2.10-1_all.deb | |
;; | |
\"chrome\") | |
echo "-- Installing Chromium" | |
# chrome | |
wget https://dl.dropboxusercontent.com/u/87113035/chromium-browser-l10n_45.0.2454.85-0ubuntu0.15.04.1.1181_all.deb | |
wget https://dl.dropboxusercontent.com/u/87113035/chromium-browser_45.0.2454.85-0ubuntu0.15.04.1.1181_armhf.deb | |
wget https://dl.dropboxusercontent.com/u/87113035/chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.15.04.1.1181_armhf.deb | |
sudo dpkg -i chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.15.04.1.1181_armhf.deb | |
sudo dpkg -i chromium-browser-l10n_45.0.2454.85-0ubuntu0.15.04.1.1181_all.deb chromium-browser_45.0.2454.85-0ubuntu0.15.04.1.1181_armhf.deb | |
rm chromium* | |
;; | |
\"mongodb\") | |
echo "-- Installing MongoDB" | |
# Mongo test commands: https://docs.mongodb.org/manual/reference/mongo-shell/ | |
# Logfile: /var/log/mongodb/mongod.log | |
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 | |
#echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list | |
#sudo apt-get update | |
#sudo apt-get install -y mongodb-org | |
#sudo service mongod start | |
sudo apt-get -y install mongodb | |
# sudo systemctl status mongodb.service | |
;; | |
\"apache\") | |
echo "-- Installing Apache" | |
sudo apt-get -y install apache2 php5 libapache2-mod-php5 | |
sudo service apache2 restart | |
;; | |
\"freeboard\") | |
echo "-- Installing Freeboard" | |
git clone https://github.com/Freeboard/freeboard.git | |
sudo ln -s freeboard /var/www/freeboard | |
# /etc/apache2/sites-available/000-default.conf | |
# <VirtualHost *:81> | |
# DocumentRoot /var/www/freeboard | |
# </VirtualHost> | |
;; | |
\"mqtt\") | |
echo "-- Installing MQTT Tools" | |
sudo npm install mqtt-cli -y -g | |
;; | |
\"mosquitto\") | |
echo "-- Installing Mosquitto" | |
sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key | |
sudo apt-key add mosquitto-repo.gpg.key | |
cd /etc/apt/sources.list.d/ | |
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list | |
sudo apt-get update | |
# sudo apt-get -y install mosquitto | |
sudo apt-get -y install mosquitto mosquitto-clients python-mosquitto | |
sudo git https://gist.github.com/basuke/7777918 /etc/init.d.mosquitto | |
;; | |
*) | |
;; | |
esac | |
done | |
## config options | |
echo "-- Configuration options" | |
for pkg in $configopts | |
do | |
case $pkg in | |
\"nodered\") | |
echo "-- Add nodered packages" | |
mkdir .node-red | |
cd .node-red | |
npm install -y node-gyp node-red-node-mongodb request thethingbox-node-timestamp node-red-contrib-deduplicate node-red-contrib-textbelt | |
# Startup services | |
sudo systemctl enable nodered.service | |
;; | |
\"wpa\") | |
sudo cp wpa_supplicant.conf /etc/wpa_supplicant | |
;; | |
\"Display.News\") | |
sudo cp 80autostart /etc/X11/Xsession.d | |
;; | |
\"rpi\") | |
sudo cp /usr/share/rpimonitor/web/addons/top3/top3.cron /etc/cron.d/top3 | |
sudo echo "web.addons.1.name=Shellinabox" >>/etc/rpimonitor/data.conf | |
sudo echo "web.addons.1.addons=shellinabox" >>/etc/rpimonitor/data.conf | |
sudo echo "web.addons.2.name=Top3" >>/etc/rpimonitor/data.conf | |
sudo echo "web.addons.2.addons=top3" >> /etc/rpimonitor/data.conf | |
sudo sed -i "s/$nbtop=3/$nbtop=10/" /usr/share/rpimonitor/web/addons/top3/top3 | |
sudo service rpimonitor restart | |
;; | |
*) | |
;; | |
esac | |
done | |
ENDTIME=$(date +%s) | |
ELAPSED=$(($ENDTIME - $STARTTIME)) | |
NICETIME=$(printf '%dh:%dm:%ds\n' $(($ELAPSED/3600)) $(($ELAPSED%3600/60)) $(($ELAPSED%60))) | |
# Send a text message | |
ip=`ifconfig|xargs|awk '{print $7}'|sed -e 's/[a-z]*:/''/'` | |
if [ -n "$phonenum" ] | |
then | |
curl http://textbelt.com/text -d number=${phonenum} -d "message=Setup complete, ${NICETIME}, rebooting ${newhostname}, access at IP: ${ip}" | |
fi | |
if [ -n "$toemail" ] | |
then | |
sendemail -f ${toemail}@gmail.com -t ${toemail}@gmail.com -u "${newhostname} Pi Setup Complete" -m "message=Setup complete, ${NICETIME}, rebooting ${newhostname}, access at IP: ${ip}" -s smtp.gmail.com:587 -o tls=yes -xu ${toemail} -xp ${emailpass} | |
fi | |
echo "Setup complete, ${NICETIME}, rebooting ${newhostname}, access at IP: ${ip}" | |
echo "-- I'm done, rebooting" | |
sudo reboot |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment