Small tutorial to have a Raspberry Pi 2 home server with Kodi as media player and rtorrent with automatic download of new tv show.
First of all to remove the rainbow square telling you that their is not enough power for all the thing plugged on your Raspberry Pi:
sudo su
echo avoid_warnings=2 >> /boot/config.txt
exit
To be able to install the last version of Kodi, we add the raspbian Kodi repository:
sudo su
echo deb http://archive.mene.za.net/raspbian wheezy contrib > /etc/apt/sources.list.d/mene.list
exit
and the associated key
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 5243CDED
Then we start with an update system:
sudo apt-get update
sudo apt-get upgrade
And we install all the necessary packages:
sudo apt-get install screen curl rtorrent sshfs python2.7 python-pip python-dev vim git kodi apt-transport-https fail2ban git
sudo pip install flexget Glances
To enable kodi at boot
sudo usermod -a -G audio,video,input,dialout,plugdev,tty kodi
sudo su
echo ENABLED=1 > /etc/default/kodi
exit
We configure bash and screen for a nicer interface:
# to get my .bashrc file
git clone https://gist.github.com/f72ca17613d12ff810e7.git
mv f72ca17613d12ff810e7/.bashrc ~/.bashrc
# to get my .vimrc file
git clone https://gist.github.com/e7deca9fa772aee852b4.git
mv e7deca9fa772aee852b4/.screenrc ~/.screenrc
# to get liquidprompt for a nicer bash
git clone https://github.com/nojhan/liquidprompt
mv liquidprompt .liquidprompt
# and we cleanup
rm -Rf f72ca17613d12ff810e7 e7deca9fa772aee852b4
We are going to create a sh
folder to store all our scripts
mkdir ~/sh/
# small script to send sms from command line with free (FR operator)
git clone https://gist.github.com/36865209d7c2bc2ed86a.git
mv 36865209d7c2bc2ed86a/sms.sh ~/sh/sms.sh
rm -Rf 36865209d7c2bc2ed86a
chmod +x ~/sh/sms.sh
rtorrent configuration
I have configured rtorrent to watch for new torrent in the folder ~/series
~/films
and ~/downloads
and to download them in their respective folder.
Once a torrent is removed from rtorrent, the corresponding .torrent file il deleted.
My configuration is set to a download and upload rate of 500kb/40kb between 8h30 and 24h and unilimited for both values the rest of the night.
# create a folder for the rtorrent session files
mkdir .session
# to get my .rtorrent.rc file
git clone https://gist.github.com/ddc3bf5c8616afa323ca.git
mv ddc3bf5c8616afa323ca/.rtorrent.rc ~/.rtorrent.rc
You can change the line port_range = 45698-45699
and dht_port = 42600
to open ports of your liking.
To launch rtorrent at startup we need to create the following init file:
git clone https://gist.github.com/e96a20ff75b022d62f77.git
sudo mv e96a20ff75b022d62f77/rtorrent /etc/init.d/rtorrent
sudo chmod +x /etc/init.d/rtorrent
This will create a screen session with rtorrent running in it for the user pi.
We now set flexget to periodically download our favorite TV shows.
For this wee need an account on the website showrss.info.
mkdir -p .config/flexget/
vim .config/flexget/config.yml
To edit the configuration file with vim you need to hit i
past the following content with your showrss.info id_user
and then press Esc
, type :x
then press Enter
.
tasks:
tv-shows:
rss: http://showrss.info/rss.php?user_id=user_id&hd=1&proper=1&magnets=false&namespaces=true&raw=true
all_series: yes
download: /home/pi/series/
We initialize flexget
flexget -V
And add it to cron to run it every 6 hours
crontab -e
By adding the following line at the end of the file
0 */6 * * * /usr/local/bin/flexget --cron execute
USB disk configuration
I had trouble auto-mounting my external 2To USB hard drive at boot so I used the following tricks
To auto-mount
sudo vim /etc/rc.local
sleep 15
/usr/local/sbin/udev-automounter.sh sda1
Then we can mount the disk and link the folder films
, series
and downloads
to our home directory for an easier access and to match the .rtorrent.rc
configuration file.
sudo udev-automounter.sh sda1
ln -s /media/2To_laurent/films films
ln -s /media/2To_laurent/series series
ln -s /media/2To_laurent/downloads downloads
To mount the disk automatically at boot we need to add the following line to the file /etc/rc.local
sudo vim /etc/rc.local
We check if the disk is not already mounted, if not we check that there are no mount folder left (i.e. badly unmounted) and then we mount it.
sleep 15
if [ -a /media/2To_laurent/films ]
then
echo already monted !
else
if [ -a /media/2To_laurent/ ]
then
rm -R /media/2To_laurent/
fi
/usr/local/sbin/udev-automounter.sh sda1
fi
Then we also need to add the following udev rule for the disk to be mounted when plugged:
sudo vim /etc/udev/rules.d/89-local.rules
# /etc/udev/rules.d/89-local.rules
# ADD rule: if we have a valid ID_FS_LABEL_ENC, and it's USB, mkdir and mount
ENV{ID_FS_LABEL_ENC}=="?*", ACTION=="add", SUBSYSTEMS=="usb", \
RUN+="/usr/local/sbin/udev-automounter.sh %k"
And we use 3 script for the smart mounting by itself:
git clone https://gist.github.com/251709ac502ed4677543.git
sudo mv 251709ac502ed4677543/udev-automounter.sh /usr/local/sbin/udev-automounter.sh
git clone https://gist.github.com/fbda1c210538215ce256.git
sudo mv fbda1c210538215ce256/udev-auto-mount.sh /usr/local/sbin/udev-auto-mount.sh
git clone https://gist.github.com/b218cd87f7efdcae8b32.git
sudo mv b218cd87f7efdcae8b32/udev-unmounter.sh /usr/local/sbin/udev-unmounter.sh
sudo chmod +x /usr/local/sbin/udev-automounter.sh /usr/local/sbin/udev-auto-mount.sh /usr/local/sbin/udev-unmounter.sh
ssh key authentification
You can remove the need of typing your password every time that you connect to your Raspberry by ssh by using a key authentication with no password on your personal computer.
We generate a rsa key:
ssh-keygen -t rsa -b 4096 -C "$(whoami)@$(hostname)-$(date -I)" -f ~/.ssh/id_rsa_berry
then we copy the public key to the raspberry server (192.168.0.1 is the local ip of the Raspberry):
ssh-copy-id -i ~/.ssh/id_rsa_berry.pub pi@192.168.0.1
We can also modify the file ~/.ssh/config
to use this key by default:
Host berry
Hostname 192.168.0.1
User pi
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa_berry
ServerAliveInterval 3600
ControlMaster auto
ControlPersist yes
ControlPath ~/.ssh/socket-%r@%h:%p
security
ssh
We can disable root login by edition the file:
sudo vim /etc/ssh/sshd_config
fail2ban
fail2ban is a software who watches ip with suspicious activities (brutforce attack) and temporarly ban them by modifying the iptable.
sudo apt-get install fail2ban
cd /etc/fail2ban
sudo cp jail.conf jail.local
sudo vim jail.local
because jail.conf
change with update we don’t want to modify it.
we ban for 24h:
bantime = 86400
then restart fail2ban
sudo service fail2ban restart
to know who is currently banned:
sudo iptables -L
If you want to ban those ip adresse definively:
sudo iptables -L | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | sudo awk '{system("iptables -A INPUT -s "$0" -j DROP")}'