All-In-One Installer Script
Contents
All-In-One Installer Script
The idea behind this page is to create a script which everyone can use to help automate the customisation/installation of software on their stora.
Screenshots
For those with any scripting/programming skills it should be fairly straightforward to add additional functions + programs to script. For those without, it should be fairly simple to use the script :)
Instructions
You will need to ssh into your stora, as pastebin seems to use windows based EOL we have to convert them to unix ones too.
-bash-3.2$ wget -O ./storaAIO.sh.dos http://pastebin.com/raw/QDjSFtTT -bash-3.2$ sed 's/\r$//' ./storaAIO.sh.dos > ./storaAIO.sh -bash-3.2$ rm ./storaAIO.sh.dos -bash-3.2$ chmod +x ./storaAIO.sh -bash-3.2$ sudo ./storaAIO.sh
Choose an option from the menu.
Collaboration
If you wish to add extra functionality to the script, please do so, but make sure it's been tested on your stora before updating the wiki :)
Script
#!/bin/sh ###################################################### # storaSetup.sh # # v0.03 (26.11.2010) # ###################################################### # Changelog: # # 0.01 - Initial Version # 0.02 - Uses functions, new menu system # 0.03 - Added Transmission # ###################################################### # variable setup temp="/tmp" ; # this is where temporary files are downloaded to nzb_home="/home/nzbget" ; # this is where nzbget will setup it's files nfs_kernel_check="2.6.22.18-Netgear" ; # minimum version needed for NFS TEXT="" # package locations SSHD_LOCATION="http://www.streetster.co.uk/dl/stora/sshd.tar.gz" IPKG_LOCATION="http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable/ipkg-opt_0.99.163-10_arm.ipk" NFS_LOCATION="http://www.streetster.co.uk/dl/stora/nfs-utils_STORA.tar.gz" NZBGETWEB_LOCATION="http://www.streetster.co.uk/dl/stora/nzbgetweb-1.4.zip" NZBGETD_LOCATION="http://www.streetster.co.uk/dl/stora/nzbgetd" RPCLIB_LOCATION="http://www.streetster.co.uk/dl/stora/xmlrpc-2.2.2.tar.gz" TRANSMISSIOND_LOCATION="http://www.streetster.co.uk/dl/stora/transmission-daemon" # You should not need to edit below this line... ###################################################### # FUNCTIONS # ###################################################### ###################################################### # drawMenu - user front-end ###################################################### drawMenu() { # clear the screen clear cat <<MENU_END ###################################################### # Welcome to the stora all-in-one script... ###################################################### What would you like to do: 1) Setup the PATH variable/environment 2) Swap the SSH Daemon with a clean version 3) Install the IPKG Package Manager 4) Move /opt to the harddrive 5) Install Kernel NFS 6) Remove Access Patrol 7) Install NZBget 8) Install NZBget-server 9) Install Transmission X. eXit Option: _ $1 MENU_END tput cup 19 10 read selection case $selection in 1) setPath; checkIt;; 2) replaceSSHd; checkIt;; 3) installIPKG; checkIt;; 4) moveOpt; checkIt;; 5) installNFS; checkIt;; 6) disableAP; checkIt;; 7) installNZBget; checkIt;; 8) installNZBgetServer; checkIt;; 9) installTransmission; checkIt;; X|x|Q|q) tput sgr0; echo ""; exit 0 ;; *) TEXT="Error: Invalid Selection"; ;; esac } ###################################################### # checkIt - displays message after function runs ###################################################### checkIt() { if [ "$?" -eq "0" ] then echo "OK." elif [ "$?" -eq "0" ] then echo "Download Failed." else echo "Failed." fi echo "" echo "Hit ENTER to continue..." read blah } ###################################################### # setPath - sets up the users /etc/environment ###################################################### setPath() { clear echo "Setting up PATH variable..." # return value ret="0" # setup new path variable NEW_PATH="/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/sbin:/opt/sbin:/usr/sbin:/sbin" #export the path too export PATH=$NEW_PATH # set the environment echo "PATH=$NEW_PATH" > /etc/environment # return return $ret } ###################################################### # replaceSSHd - replaces SSH daemon with clean version ###################################################### replaceSSHd() { clear echo "Replacing SSH Daemon..." # return value ret="0" # download wget -O $temp/sshd.tar.gz $SSHD_LOCATION # check file exists if [ -s $temp/sshd.tar.gz ] then # extract tar -xzf $temp/sshd.tar.gz -C $temp/ # backup original cp /usr/sbin/sshd /usr/sbin/sshd.original chmod -x /usr/sbin/sshd.original # replace and make executable mv $temp/sshd /usr/sbin/sshd chmod +x /usr/sbin/sshd # restart daemon /etc/init.d/sshd restart # clean-up rm $temp/sshd.tar.gz else ret="1" fi # return return $ret } ###################################################### # installIPKG - installs the IPKG package manager ###################################################### installIPKG() { clear echo "Install IPKG..." # return value ret="0" # download wget -O $temp/ipkg.ipk $IPKG_LOCATION # check file exists if [ -s $temp/ipkg.ipk ] then # extract tar -xzf $temp/ipkg.ipk -C $temp/ tar -xzf $temp/data.tar.gz -C / # setup sources echo "src cs08q1armel http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable" >> /opt/etc/ipkg.conf /opt/bin/ipkg update # clean-up rm $temp/ipkg.ipk rm $temp/data.tar.gz rm $temp/control.tar.gz rm $temp/debian-binary else ret="1" fi # return return $ret } ###################################################### # moveOpt - moves /opt to /home/opt ###################################################### moveOpt() { clear echo "Moving /opt to harddrive..." # return value ret="0" # copy everything cp -r /opt /home/opt # rename old mv /opt /opt-old # symbolic link to hdd ln -s /home/opt /opt # return return $ret } ###################################################### # installNFS - installs Kernel NFS ###################################################### installNFS() { clear echo "Installing Kernel NFS" # return value ret="0" # check kernel if [ `uname -r` = "$nfs_kernel_check" ] then # download wget -O $temp/nfs.tar.gz $NFS_LOCATION # check file exists if [ -s $temp/nfs.tar.gz ] then # extract tar -xzf $temp/nfs.tar.gz -C / # load/check module /sbin/depmod -a /sbin/modprobe nfsd /sbin/lsmod | grep nfsd # add default share echo "/home/0common 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)" > /etc/exports # remove v4 support mv /etc/sysconfig/nfs /etc/sysconfig/nfs.original cat /etc/sysconfig/nfs.original | sed 's/^#RPCNFSDARGS="-N\ 4"/RPCNFSDARGS="-N\ 4"/' > /etc/sysconfig/nfs # start daemons /etc/init.d/portmap start /etc/init.d/nfs start # start at boot /sbin/chkconfig --add portmap /sbin/chkconfig --level 235 portmap on /sbin/chkconfig --add nfs /sbin/chkconfig --level 235 nfs on # check it looks ok /sbin/exportfs -v # clean-up rm $temp/nfs.tar.gz else # download failed ret="1" fi else # wrong kernel ret="2" fi # return return $ret } ###################################################### # ###################################################### installNZBget() { clear echo "Installing NZBget..." # return value ret="0" # check if we have IPKG if [ ! -e /opt/bin/ipkg ] then # install ipkg echo "IPKG not found. Installing..." installIPKG fi # check if we have IPKG (again) if [ -e /opt/bin/ipkg ] then # install nzbget using ipkg /opt/bin/ipkg install nzbget # install unrar too /opt/bin/ipkg install unrar # set home directory, umask to 0000 and parcheck to yes... cat /opt/share/doc/nzbget/nzbget.conf.example | sed -e "s#~/download#$nzb_home#"\ -e "s#UMask=1000#UMask=0000#"\ -e "s#DirectWrite=no#DirectWrite=yes#"\ -e "s#PostProcess=#PostProcess=$nzb_home/postprocess.sh#"\ -e "s#ParCheck=no#ParCheck=yes#" > /usr/etc/nzbget.conf # copy example post-process script + conf cp /opt/share/doc/nzbget/postprocess-example.sh $nzb_home/postprocess.sh cp /opt/share/doc/nzbget/postprocess-example.conf $nzb_home/postprocess-example.conf # setup nzbget daemon wget -O $temp/nzbgetd $NZBGETD_LOCATION mv $temp/nzbgetd /etc/init.d/nzbgetd chmod +x /etc/init.d/nzbgetd # start at boot /sbin/chkconfig --add nzbgetd /sbin/chkconfig --level 235 nzbgetd on # start daemon /etc/init.d/nzbgetd start else # we don't have IPKG so fail ret="1" fi # return return $ret } ###################################################### # ###################################################### installNZBgetServer() { clear echo "Setting up NZBGET-web..." # return value ret="0" # download wget -O $temp/nzbgetweb.zip $NZBGETWEB_LOCATION wget -O $temp/xmlrpc.tar.gz $RPCLIB_LOCATION # grab unzip if we dont have it already if [ ! -e /opt/bin/unzip ] then /opt/bin/ipkg install unzip fi # we can share the http server by placing files in /var/www/ /opt/bin/unzip -d /var/www $temp/nzbgetweb.zip # we also need the PHP RPC library tar -xzf $temp/xmlrpc.tar.gz -C $temp/ cp -r $temp/xmlrpc-2.2.2/lib /var/www/nzbgetweb/lib # set permissions chgrp -R www /var/www/nzbgetweb/ chmod -R 755 /var/www/nzbgetweb/ chown -R apache /var/www/nzbgetweb/ # setup the alias cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.original echo 'Alias /nzbgetweb/ "/var/www/nzbgetweb/"' >> /etc/httpd/conf/httpd.conf # restart httpd daemon /sbin/service httpd reload # clean-up rm $temp/nzbgetweb.zip rm $temp/xmlrpc.tar.gz rm -r $temp/xmlrpc-2.2.2 # return return $ret } ###################################################### # disableAP - disables the Access Patrol ###################################################### disableAP() { clear echo "Disabling Access Patrol..." # return value ret="0" # stop service /etc/init.d/access-patrol stop echo "" echo "" # remove from boot /sbin/chkconfig --levels 2345 access-patrol off # remove executable flag chmod a-x /usr/sbin/access-patrol # return return $ret } ###################################################### # installTransmission - install bittorrent server ###################################################### installTransmission() { clear echo "Installing Transmission..." echo "" # check if we have IPKG if [ ! -e /opt/bin/ipkg ] then # install ipkg echo "IPKG not found. Installing..." installIPKG fi # get daemon user, use sudo-er by default echo -n "Please enter the daemon user: [$SUDO_USER] " read TRANSMISSION_USER if [ -z $TRANSMISSION_USER ] then TRANSMISSION_USER=$SUDO_USER fi # get transmission home location, use ~/transmission by default echo -n "Please enter the destination where you want files saved: [/home/$TRANSMISSION_USER/transmission/] " read TRANSMISSION_HOME if [ -z $TRANSMISSION_HOME ] then TRANSMISSION_HOME=/home/$TRANSMISSION_USER/transmission fi # get monitoring directory, use ~/transmission/monitor by default echo -n "Please enter the directory to monitor for new .torrent files: [/home/$TRANSMISSION_USER/transmission/monitor/] " read TRANSMISSION_MONITOR_HOME if [ -z $TRANSMISSION_MONITOR_HOME ] then TRANSMISSION_MONITOR_HOME=/home/$TRANSMISSION_USER/transmission/monitor fi # install using ipkg /opt/bin/ipkg install transmission # get daemon and setup home dir wget $TRANSMISSIOND_LOCATION -O $temp/transmission-daemon.default cat $temp/transmission-daemon.default | sed -e "s#TRANSMISSION_HOME=#TRANSMISSION_HOME=$TRANSMISSION_HOME#"\ -e "s#DAEMON_USER=#DAEMON_USER=\"$TRANSMISSION_USER\"#" > /etc/init.d/transmission-daemon # make executable chmod 755 /etc/init.d/transmission-daemon # create dirs if they dont exist if [ ! -d "$TRANSMISSION_HOME" ] then echo "Creating $TRANSMISSION_HOME..." mkdir -p "$TRANSMISSION_HOME" chmod 777 "$TRANSMISSION_HOME" chown $TRANSMISSION_USER:$TRANSMISSION_USER "$TRANSMISSION_HOME" fi if [ ! -d "$TRANSMISSION_MONITOR_HOME" ] then echo "Creating $TRANSMISSION_MONITOR_HOME..." mkdir -p "$TRANSMISSION_MONITOR_HOME" chmod 777 "$TRANSMISSION_MONITOR_HOME" chown $TRANSMISSION_USER:$TRANSMISSION_USER "$TRANSMISSION_MONITOR_HOME" fi # start/stop daemon to generate config file echo "Starting Transmission..." /etc/init.d/transmission-daemon start # kill the daemon echo "Killing Transmission" /etc/init.d/transmission-daemon stop # add extra excape chars TRANSMISSION_MONITOR_HOME=`echo $TRANSMISSION_MONITOR_HOME | sed 's#\/#\\\\\\\/#g'` # add configuration mv $TRANSMISSION_HOME/settings.json $TRANSMISSION_HOME/settings.json.original sleep 1 cat $TRANSMISSION_HOME/settings.json.original | sed "s#\"rpc-whitelist-enabled\": true,#\"rpc-whitelist-enabled\": false,\n \"watch-dir\":\"$TRANSMISSION_MONITOR_HOME\",\n \"watch-dir-enabled\":true,#" > $TRANSMISSION_HOME/settings.json # make daemon start at boot echo "Adding transmission-daemon to startup..." /sbin/chkconfig --add transmission-daemon /sbin/chkconfig --levels 2345 transmission-daemon on # start transmission and we're done /etc/init.d/transmission-daemon start return 0 } # end of functions # # nice and white tput bold # check that we are root before starting if [ $(whoami) != "root" ] then echo "" echo " Error: You must have root privileges to run this script." echo "" echo " Try again using 'sudo $0'." echo "" tput sgr0 # die exit 1 fi while [ 1 -lt 2 ] do if [ ! "$TEXT" = "" ] then foo="$TEXT" TEXT="" drawMenu "$foo" else drawMenu fi done # EOF
Forum
Original thread on this is here -- streetster @ 23.11.2010