Files
rtinst/rtinst.sh
T
2014-10-07 17:54:13 +01:00

493 lines
15 KiB
Bash

#!/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 name>/$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 "<?php" | tee /var/www/rutorrent/conf/users/$user/config.php > /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/<Server IP>/$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 "<?php" | tee /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 "\$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