#!/bin/bash PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/bin:/sbin FULLREL=$(cat /etc/issue.net) SERVERIP=$(ip a s eth0 | awk '/inet / {print$2}' | cut -d/ -f1) RELNO=0 WEBPASS='' PASS1='' PASS2='' cronline1="@reboot sleep 10; /usr/local/bin/rtcheck irssi rtorrent" cronline2="*/10 * * * * /usr/local/bin/rtcheck irssi rtorrent" DLFLAG=1 genpasswd() { local genln=$1 [ -z "$genln" ] && genln=8 tr -dc A-Za-z0-9 < /dev/urandom | head -c ${genln} | xargs } random() { local min=$1 local max=$2 local RAND=`od -t uI -N 4 /dev/urandom | awk '{print $2}'` RAND=$((RAND%((($max-$min)+1))+$min)) echo $RAND } get_scripts() { local script_name=$1 local script_dest=$2 local attempts=0 local script_size=0 local bindest="/usr/local/bin" while [ $script_size = 0 ] do rm -f $script_name attempts=$(( $attempts + 1 )) if [ $attempts = 20 ] then echo "There is a problem downloading the scripts. Please check your network or there may be an issue with the github website" echo "If the Github website is down, you can try again later" exit 1 fi wget --no-check-certificate https://raw.githubusercontent.com/arakasi72/rtinst/master/$script_name script_size=$(du -b $script_name | cut -f1) done if ! [ -z "$script_dest" ] then mv -f $script_name $script_dest if case $script_dest in *"${bindest}"*) true;; *) false;; esac; then chmod 755 $script_dest fi fi } # determine system if [ "$FULLREL" = "Ubuntu 14.04.1 LTS" ] || [ "$FULLREL" = "Ubuntu 14.04 LTS" ] then RELNO=14 elif [ "$FULLREL" = "Ubuntu 13.10" ] then RELNO=13 elif [ "$FULLREL" = "Ubuntu 12.04.4 LTS" ] then RELNO=12 elif [ "$FULLREL" = "Ubuntu 12.04.5 LTS" ] then RELNO=12 elif [ "$FULLREL" = "Debian GNU/Linux 7" ] then RELNO=7 else echo "Unable to determine OS or OS unsupported" exit fi # get options while getopts ":d" optname do case $optname in "d" ) DLFLAG=0 ;; * ) echo "incorrect option, only -d allowed" && exit 1 ;; esac done shift $(( $OPTIND - 1 )) # Check if there is more than 0 argument if [ $# -gt 0 ] then echo "No arguments allowed $1 is not a valid argument" exit 1 fi # set and prepare user if test "$SUDO_USER" = "root" || { test -z "$SUDO_USER" && test "$LOGNAME" = "root"; } then echo "Enter the name of the user to install to" echo "This will be your primary user" echo "It can be an existing user or a new user" echo confirm_name=1 while [ $confirm_name = 1 ] do read -p "Enter user name: " answer addname=$answer check_name=1 while [ $check_name = 1 ] do read -p "Is $addname correct? " answer case $answer in [Yy]* ) confirm_name=0 && check_name=0 ;; [Nn]* ) confirm_name=1 && check_name=0 ;; * ) echo "Enter y or n";; esac done done user=$addname if id -u $user >/dev/null 2>&1 then echo "$user already exists" else echo "adding $user" adduser --gecos "" $user fi if [ $(dpkg-query -W -f='${Status}' sudo 2>/dev/null | grep -c "ok installed") -eq 0 ]; then echo "Installing sudo" apt-get -y install sudo > /dev/null; fi if groups $user | grep -q -E ' sudo(\s|$)' then echo "$user already has sudo privileges" else adduser $user sudo fi elif ! [ -z "$SUDO_USER" ] then user=$SUDO_USER else echo "Script must be run using sudo or root" exit 1 fi home="/home/$user" # download rt scripts and config files mkdir $home/rtscripts cd $home/rtscripts get_scripts rt /usr/local/bin/rt get_scripts rtcheck /usr/local/bin/rtcheck get_scripts rtupdate /usr/local/bin/rtupdate get_scripts edit_su /usr/local/bin/edit_su get_scripts rtpass /usr/local/bin/rtpass get_scripts rtsetpass /usr/local/bin/rtsetpass get_scripts rtdload /usr/local/bin/rtdload get_scripts rtadduser /usr/local/bin/rtadduser get_scripts rtremove /usr/local/bin/rtremove get_scripts .rtorrent.rc get_scripts ru.config get_scripts ru.ini get_scripts nginxsitedl get_scripts nginxsite cd $home # secure ssh portline=$(grep 'Port ' /etc/ssh/sshd_config) if [ "$portline" = "Port 22" ] then sshport=$(random 21000 29000) perl -pi -e "s/Port 22/Port $sshport/g" /etc/ssh/sshd_config fi perl -pi -e "s/X11Forwarding yes/X11Forwarding no/g" /etc/ssh/sshd_config perl -pi -e "s/PermitRootLogin without-password/PermitRootLogin no/g" /etc/ssh/sshd_config perl -pi -e "s/PermitRootLogin yes/PermitRootLogin no/g" /etc/ssh/sshd_config usedns=$(grep UseDNS /etc/ssh/sshd_config) if [ -z "$usedns" ] then echo "UseDNS no" | tee -a /etc/ssh/sshd_config > /dev/null else perl -pi -e "s/$usedns/UseDNS no/g" /etc/ssh/sshd_config fi groupadd sshuser allowlist=$(grep AllowUsers /etc/ssh/sshd_config) if ! [ -z "$allowlist" ] then for sshuser in $allowlist do if ! [ "$ssh_user" = "AllowUsers" ]; then adduser $ssh_user sshuser fi done perl -pi -e "s/$allowlist//g" /etc/ssh/sshd_config fi echo "AllowGroups sudo sshuser" | tee -a /etc/ssh/sshd_config > /dev/null if [ -z "$(groups $user | grep sshuser)" ]; then adduser $user sshuser fi service ssh restart # prepare system cd $home if [ "$FULLREL" = "Ubuntu 12.04.5 LTS" ] then wget --no-check-certificate https://help.ubuntu.com/12.04/sample/sources.list cp /etc/apt/sources.list /etc/apt/sources.list.bak mv sources.list /etc/apt/sources.list fi apt-get update && apt-get -y upgrade apt-get clean && apt-get autoclean apt-get -y install autoconf build-essential ca-certificates comerr-dev curl cfv dtach htop irssi libcloog-ppl-dev libcppunit-dev libcurl3 libncurses5-dev libterm-readline-gnu-perl libsigc++-2.0-dev libperl-dev libtool libxml2-dev ncurses-base ncurses-term ntp patch pkg-config php5 php5-cli php5-dev php5-fpm php5-curl php5-geoip php5-mcrypt php5-xmlrpc pkg-config python-scgi screen subversion texinfo unrar-free unzip zlib1g-dev libcurl4-openssl-dev mediainfo if [ $RELNO = 13 ] then apt-get -y install php5-json fi # install ftp ftpport=$(random 41005 48995) if [ $RELNO = 12 ] then apt-get -y install python-software-properties add-apt-repository -y ppa:thefrontiergroup/vsftpd apt-get update fi if [ $RELNO = 7 ] then echo "deb http://ftp.cyconet.org/debian wheezy-updates main non-free contrib" | tee -a /etc/apt/sources.list.d/wheezy-updates.cyconet2.list > /dev/null aptitude update aptitude -o Aptitude::Cmdline::ignore-trust-violations=true -y install -t wheezy-updates debian-cyconet-archive-keyring vsftpd else apt-get -y install vsftpd fi perl -pi -e "s/anonymous_enable=YES/anonymous_enable=NO/g" /etc/vsftpd.conf perl -pi -e "s/#local_enable=YES/local_enable=YES/g" /etc/vsftpd.conf perl -pi -e "s/#write_enable=YES/write_enable=YES/g" /etc/vsftpd.conf perl -pi -e "s/#local_umask=022/local_umask=022/g" /etc/vsftpd.conf perl -pi -e "s/rsa_private_key_file/#rsa_private_key_file/g" /etc/vsftpd.conf perl -pi -e "s/rsa_cert_file=\/etc\/ssl\/certs\/ssl-cert-snakeoil\.pem/rsa_cert_file=\/etc\/ssl\/private\/vsftpd\.pem/g" /etc/vsftpd.conf echo "chroot_local_user=YES" | tee -a /etc/vsftpd.conf > /dev/null echo "allow_writeable_chroot=YES" | tee -a /etc/vsftpd.conf > /dev/null echo "ssl_enable=YES" | tee -a /etc/vsftpd.conf > /dev/null echo "allow_anon_ssl=NO" | tee -a /etc/vsftpd.conf > /dev/null echo "force_local_data_ssl=YES" | tee -a /etc/vsftpd.conf > /dev/null echo "force_local_logins_ssl=YES" | tee -a /etc/vsftpd.conf > /dev/null echo "ssl_sslv2=YES" | tee -a /etc/vsftpd.conf > /dev/null echo "ssl_sslv3=YES" | tee -a /etc/vsftpd.conf > /dev/null echo "ssl_tlsv1=YES" | tee -a /etc/vsftpd.conf > /dev/null echo "require_ssl_reuse=NO" | tee -a /etc/vsftpd.conf > /dev/null echo "listen_port=$ftpport" | tee -a /etc/vsftpd.conf > /dev/null echo "ssl_ciphers=HIGH" | tee -a /etc/vsftpd.conf > /dev/null openssl req -x509 -nodes -days 3650 -subj /CN=$SERVERIP -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem service vsftpd restart # install rtorrent cd $home mkdir source cd source svn co https://svn.code.sf.net/p/xmlrpc-c/code/stable xmlrpc curl http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.4.tar.gz | tar xz curl http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.4.tar.gz | tar xz cd xmlrpc ./configure --prefix=/usr --enable-libxml2-backend --disable-libwww-client --disable-wininet-client --disable-abyss-server --disable-cgi-server make make install cd ../libtorrent-0.13.4 ./autogen.sh ./configure --prefix=/usr make -j2 make install cd ../rtorrent-0.9.4 ./autogen.sh ./configure --prefix=/usr --with-xmlrpc-c make -j2 make install ldconfig cd $home mkdir rtorrent cd rtorrent mkdir .session downloads watch cd $home mv -f $home/rtscripts/.rtorrent.rc $home/.rtorrent.rc perl -pi -e "s//$user/g" $home/.rtorrent.rc # install rutorrent cd $home mkdir /var/www cd /var/www svn checkout http://rutorrent.googlecode.com/svn/trunk/rutorrent svn checkout http://rutorrent.googlecode.com/svn/trunk/plugins rm -r rutorrent/plugins mv plugins rutorrent rm rutorrent/conf/config.php mv $home/rtscripts/ru.config /var/www/rutorrent/conf/config.php mkdir /var/www/rutorrent/conf/users/$user mkdir /var/www/rutorrent/conf/users/$user/plugins echo " /dev/null echo | tee -a /var/www/rutorrent/conf/users/$user/config.php > /dev/null echo "\$scgi_port = 5000;" | tee -a /var/www/rutorrent/conf/users/$user/config.php > /dev/null echo "\$XMLRPCMountPoint = \"/RPC2\";" | tee -a /var/www/rutorrent/conf/users/$user/config.php > /dev/null echo | tee -a /var/www/rutorrent/conf/users/$user/config.php > /dev/null echo "?>" | tee -a /var/www/rutorrent/conf/users/$user/config.php > /dev/null cd rutorrent/plugins mkdir conf mv $home/rtscripts/ru.ini conf/plugins.ini if [ $RELNO = 14 ] then apt-add-repository -y ppa:jon-severinsson/ffmpeg apt-get update fi apt-get -y install ffmpeg # install nginx apt-get -y install nginx-full apache2-utils WEBPASS=$(genpasswd) htpasswd -c -b /var/www/rutorrent/.htpasswd $user $WEBPASS openssl req -x509 -nodes -days 3650 -subj /CN=$SERVERIP -newkey rsa:2048 -keyout /etc/ssl/ruweb.key -out /etc/ssl/ruweb.crt perl -pi -e "s/user www-data;/user www-data www-data;/g" /etc/nginx/nginx.conf perl -pi -e "s/worker_processes 4;/worker_processes 1;/g" /etc/nginx/nginx.conf perl -pi -e "s/pid \/run\/nginx\.pid;/pid \/var\/run\/nginx\.pid;/g" /etc/nginx/nginx.conf perl -pi -e "s/# server_tokens off;/server_tokens off;/g" /etc/nginx/nginx.conf perl -pi -e "s/access_log \/var\/log\/nginx\/access\.log;/access_log off;/g" /etc/nginx/nginx.conf perl -pi -e "s/error\.log;/error\.log crit;/g" /etc/nginx/nginx.conf if [ $RELNO = 14 ] | [ $RELNO = 13 ] then cp /usr/share/nginx/html/* /var/www fi if [ $RELNO = 12 ] | [ $RELNO = 7 ] then cp /usr/share/nginx/www/* /var/www fi mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.old cd $home mv $home/rtscripts/nginxsite /etc/nginx/sites-available/default mv $home/rtscripts/nginxsitedl /etc/nginx/conf.d/rtdload if [ $DLFLAG = 0 ] then perl -pi -e "s/#include \/etc\/nginx\/conf\.d\/rtdload;/include \/etc\/nginx\/conf\.d\/rtdload;/g" /etc/nginx/sites-available/default fi perl -pi -e "s//$SERVERIP/g" /etc/nginx/sites-available/default if [ $RELNO = 12 ] then perl -pi -e "s/fastcgi_pass unix\:\/var\/run\/php5-fpm\.sock/fastcgi_pass 127\.0\.0\.1\:9000/g" /etc/nginx/sites-available/default fi service nginx restart && service php5-fpm restart # install autodl-irssi adlport=$(random 36001 36100) adlpass=$(genpasswd $(random 12 16)) apt-get -y install git libarchive-zip-perl libnet-ssleay-perl libhtml-parser-perl libxml-libxml-perl libjson-perl libjson-xs-perl libxml-libxslt-perl libxml-libxml-perl libjson-rpc-perl libarchive-zip-perl mkdir -p $home/.irssi/scripts/autorun cd $home/.irssi/scripts wget --no-check-certificate -O autodl-irssi.zip http://update.autodl-community.com/autodl-irssi-community.zip unzip -o autodl-irssi.zip rm autodl-irssi.zip cp autodl-irssi.pl autorun/ mkdir -p $home/.autodl touch $home/.autodl/autodl.cfg && touch $home/.autodl/autodl2.cfg cd /var/www/rutorrent/plugins git clone https://github.com/autodl-community/autodl-rutorrent.git autodl-irssi mkdir /var/www/rutorrent/conf/users/$user/plugins/autodl-irssi touch /var/www/rutorrent/conf/users/$user/plugins/autodl-irssi/conf.php echo " /dev/null echo | tee -a /var/www/rutorrent/conf/users/$user/plugins/autodl-irssi/conf.php > /dev/null echo "\$autodlPort = $adlport;" | tee -a /var/www/rutorrent/conf/users/$user/plugins/autodl-irssi/conf.php > /dev/null echo "\$autodlPassword = \"$adlpass\";" | tee -a /var/www/rutorrent/conf/users/$user/plugins/autodl-irssi/conf.php > /dev/null echo | tee -a /var/www/rutorrent/conf/users/$user/plugins/autodl-irssi/conf.php > /dev/null echo "?>" | tee -a /var/www/rutorrent/conf/users/$user/plugins/autodl-irssi/conf.php > /dev/null cd $home/.autodl echo "[options]" | tee autodl2.cfg > /dev/null echo "gui-server-port = $adlport" | tee -a autodl2.cfg > /dev/null echo "gui-server-password = $adlpass" | tee -a autodl2.cfg > /dev/null perl -pi -e "s/if \(\\$\.browser\.msie\)/if \(navigator\.appName \=\= \'Microsoft Internet Explorer\' \&\& navigator\.userAgent\.match\(\/msie 6\/i\)\)/g" /var/www/rutorrent/plugins/autodl-irssi/AutodlFilesDownloader.js # set permissions chown -R www-data:www-data /var/www chmod -R 755 /var/www/rutorrent chown -R $user:$user $home cd $home edit_su rm /usr/local/bin/edit_su rm -r $home/rtscripts su $user -c '/usr/local/bin/rt start' su $user -c '/usr/local/bin/rt -i start' sleep 2 sudo -u $user screen -S irssi -p 0 -X stuff "/WINDOW LOG ON $home/ir.log$(printf \\r)" sudo -u $user screen -S irssi -p 0 -X stuff "/autodl update$(printf \\r)" echo -n "updating autodl-irssi" while ! ((tail -n1 $home/ir.log | grep -c -q "You are using the latest autodl-trackers") || (tail -n1 $home/ir.log | grep -c -q "Successfully loaded tracker files")) do sleep 1 echo -n " ." done echo sudo -u $user screen -S irssi -p 0 -X stuff "/WINDOW LOG OFF$(printf \\r)" sleep 1 sudo -u $user screen -S irssi -p 0 -X quit sleep 2 su $user -c '/usr/local/bin/rt -i start > /dev/null' rm $home/ir.log echo "autodl-irssi update complete" (crontab -u $user -l; echo "$cronline1" ) | crontab -u $user - (crontab -u $user -l; echo "$cronline2" ) | crontab -u $user - echo echo "crontab entries made. rtorrent and irssi will start on boot for $user" echo echo "ftp client should be set to explicit ftp over tls using port $ftpport" | tee -a $home/rtinst.info echo if [ $DLFLAG = 0 ] then find $home -type d -print0 | xargs -0 chmod 755 echo "Access https downloads at https://$SERVERIP/download/$user" | tee -a $home/rtinst.info echo fi echo "rutorrent can be accessed at https://$SERVERIP/rutorrent" | tee -a $home/rtinst.info echo "rutorrent password set to $WEBPASS" | tee -a $home/rtinst.info echo "to change rutorrent password enter: rtpass" | tee -a $home/rtinst.info echo if ! [ -z "$sshport" ] then echo "IMPORTANT: SSH Port set to $sshport - Ensure you can login before closing this session" echo "ssh port changed to $sshport" | tee -a $home/rtinst.info > /dev/null fi echo echo "The above information is stored in rtinst.info in your home directory." echo "To see contents enter: cat $home/rtinst.info" chown $user rtinst.info