Transformer son serveur dédié en seedbox super classe en quelques minutes

14 mars 2013 96
Attention ! Ce post a plus de 1 an, ce qui signifie qu'il n'est pas forcément à jour !

Edit du 26/10/2013

Le script a pas mal évolué ! Voici un mini changelog :

  • Update des dernières versions de rTorrent et libTorrent
  • Update de mediainfo
  • Ajout de la compatibilité pour debian 7 (en ce qui concerne la 6, je suis pas si sûr)
  • Mise à jour du repo xmlrpc qui faisait crasher rTorrent
  • Mise à jour de h5ai
  • Ajout d’une petite interface graphique au démarrage (thanks synoga)
  • Sécurisation de rTorrent
  • Ajout d’un certificat autosigné (maintenant, tout passe par le https)
  • Ajout du support pour le SFTP
  • Maintenant, plutôt que tout effectuer en root, on passe par l’utilisateur
  • Ajout d’un script pour lancer rTorrent au démarrage, ce qui évite les plantage en cas de redémarrage

Et sûrement d’autres petits trucs que j’ai oublié. Le script est testé et tourne actuellement sur ma debian 7 64 bit chez Online. Vous le trouverez ici https://raw.github.com/kai23/linux-scripts/master/script.sh

Un énorme merci à Synoga, membre de GKs, pour tout l’aide apportée côté sécurité !


Hello à tous !

Je suis en train de travailler actuellement sur un serveur dédié pour tout un tas de raisons. J’ai choisi une dédibox de chez online, pour la bande passante et le proc, majoritairement.

Après quelques jours de galère et de conf en tout genre, je me suis dit que ce serait sympa de pouvoir partager tout ce que j’ai fait.
Le but de ce tutoriel est de transformer votre serveur dédié en véritable seedbox / serveur internet. Attention, je ne parlerai pas ici de sécurité ou autres notions trop poussées. Le Net regorge de tutoriels intéressants à ce sujet que je ne pourrais totalement expliciter.

Nous partirons sur une debian 6.0 tout fraîchement installée. On commence donc par se connecter en SSH à notre machine distante, puis on se connecte en tant que root
Voici nos specs ! :D

  • Avoir Rtorrent d’installé et configuré
  • Avoir Apache d’installé et configuré
  • Avoir Rutorrent d’installé
  • Installer une jolie conf pour les fichiers
  • Avoir un serveur ftp configuré permettant d’accéder au downloads

En gros, ce serait d’avoir tout ça :

L'interface qui permettrait de se balader dans les différents fichiers

L’interface qui permettrait de se balader dans les différents fichiers

L'interface de RuTorrent, avec le thème Oblivion ainsi que deux plugins

L’interface de RuTorrent, avec le thème Oblivion ainsi que deux plugins

Allez ! Sans plus attendre, nous voici en train de nous connecter à notre machine :

ssh user@ip_server

Une fois que le mot de passe est saisi, et que vous êtes connecté, faites un

su root

Voilà. Vous êtes root.

1. Mise à jour et récupération des paquets nécessaires

Avant toute chose, on va commencer par mettre à jour le système. Let’s go !

apt-get update -y && apt-get upgrade -y

And here we go ! La ligne suivante va permettre d’installer tous les paquets dont on va avoir besoin :

apt-get install -y apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl libapache2-mod-scgi build-essential make gcc autoconf curl libcurl3 libcurl4-openssl-dev zip unzip gcc libc6-dev linux-kernel-headers diff wget bzip2 screen ffmpeg libcppunit-dev libncurses5-dev libncursesw5-dev subversion libsigc++ dtach imagemagick proftpd zsh git

Pour pas vous laisser dans l’ombre, voici ce que cette commande va installer :

  • Apache2 (le serveur web) et quelques librairies (surtout SCGI pour libtorrent)
  • PHP 5 et quelques composants de base (PEAR, imap, json,tidy, xmlrpc, etc)
  • Des outils tels que make, gcc, autoconf, curl, zip et unzip, gcc, diff, wget, bzip2
  • ffmpeg et imagemagick, c’est pour RuTorrent
  • NCurses pour RTorrent (Screen pour le lancer en arrière plan)
  • Subversion et Git
  • Quelques librairies C++ pour la compilation de RTorrent
  • Et enfin proftpd pour installer un serveur FTP, et zsh pour la surprise :D

C’est bon ? Maintenant c’est parti pour l’installation de Rtorrent !

2. Installation de RTorrent

On commence par faire ça propre, en créant un dossier pour les sources

mkdir sources
cd sources

Puis on récupère tout ce dont on va avoir besoin :

svn co https://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/advanced/ xmlrpc-c
wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.2.tar.gz
wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.2.tar.gz

Puis on va extraire tout ça, et supprimer les archives :

tar xvzf libtorrent-0.13.2.tar.gz rtorrent-0.9.2.tar.gz
tar xvzf libtorrent-0.13.2.tar.gz
tar xvzf rtorrent-0.9.2.tar.gz
rm *.tar.gz

On va commencer par compiler xmlrpc, qui est une dépendance de LibTorrent, qui est lui-même une dépendance de de RTorrent (magnifique hein ?)

cd xmlrpc-c/
./configure
make && make install

Maintenant on va faire la même chose pour libtorrent :

cd ../libtorrent-0.13.2/
./configure
make && make install

Puis pour RTorrent :

cd ../rtorrent-0.9.2/
./autogen.sh
./configure --with-xmlrpc-c
make && make install

Ensuite, on va nettoyer tout ça :

cd
rm -Rf sources

Et il y parfois une petite erreur dans la compilation de libtorrent. Pour cela, il suffit de lancer :

ldconfig

Bien !
Maintenant que RTorrent est installé, il va falloir le configurer.

3. Configuration de RTorrent

Pour cela, il y a quelques dossiers à créer et un fichier de conf à faire. On va commencer par les dossiers :

mkdir ~/session/
mkdir /var/www/downloads/
Et on va appliquer les permissions pour que tout le monde puisse y accédier :
chmod -R 777 /var/www/downloads/
chmod -R 777 ~/session/

Maintenant, il va falloir ajouter le fichier de configuration. Celui-ci s’appelle « .rtorrent.rc ». Vous pouvez donc le créer à la racine de votre home directory

cd
nano .rtorrent.rc

Puis il vous suffit d’ajouter cela :

directory = /var/www/downloads
session = ~/session
port_range = 6890-6999
port_random = no
check_hash = no
use_udp_trackers = yes
schedule = watch_directory,15,15,load_start=~/watch/*.torrent
dht = auto
dht_port = 6881
scgi_port = 127.0.0.1:5000

En gros, ça spécifie l’adresse d’écoute, le fichier pour les téléchargements. Ça permet aussi de dire que l’on souhaite ne PAS vérifier chaque téléchargement (ce qui est pratique lorsque l’on n’a pas un serveur hyper puissant).

Maintenant que c’est fait, on va pouvoir lancer RTorrent en arrière-plan :

killall rtorrent
screen -fn -dmS rtd nice -19 rtorrent

4. Installation de RuTorrent

On va passer maintenant à l’installation de RuTorrent. C’est un simple « site web », que l’on place dans /var/www/ (le répertoire d’apache pour les sites web). Pour cela, donc :

cd /var/www
svn checkout http://rutorrent.googlecode.com/svn/trunk/rutorrent/
cd rutorrent
rm -R plug-ins
svn checkout http://rutorrent.googlecode.com/svn/trunk/plugins/
chmod -R 777 /var/www/

Dans l’ordre :

  • On va dans le répertoire d’apache,
  • On récupère RuTorrent via SVN
  • On supprime le dossier de plug-ins par défaut
  • On récupère les plug-ins via SVN
  • On change les permissions de notre /var/www/

5. Configuration d’apache

Maintenant, il va falloir dire à Apache qu’on veut les .htaccess pour pouvoir protéger à minima l’accès à notre serveur. On commence par aller dans le dossier à protéger :

cd /var/www/

Puis de créer un password dans le .htpasswd

htpasswd -mbc .htpasswd admin VOTREMOTDEPASSE

Ensuite, on va faire le .htaccess. Pour cela, on va l’écrire (dans /var/www/) et on va mettre ça à l’intérieur :

AuthName "Restricted"
AuthType Basic
AuthUserFile "/var/www/.htpasswd"
Require valid-user

Juste pour dire que l’on veut protéger l’accès au dossier et ses sous-dossiers.
Mais par défaut, les .htaccess ne sont pas activés sur apache. En effet, pour des raisons de sécurité, il vaut mieux modifier les fichiers de conf. Mais on ne va pas se prendre la tête comme ça. On commence par aller dans le dossier des sites d’apache.

cd /etc/apache2/sites-enabled/

Puis on va changer les « AllowOverride None » en « AllowOverride All »

sed '0,/AllowOverride None/ s//AllowOverride All/' 000-default >> 000-default.1
sed '0,/AllowOverride None/ s//AllowOverride All/' 000-default.1 >> 000-default

Maintenant que les .htaccess sont activés, on a encore besoin d’activer certains modules d’apache, que voici :

a2enmod rewrite
a2enmod ssl
a2enmod auth_digest
a2enmod scgi

Et d’ajouter cette ligne à la fin du /etc/apache2/apache2.conf

SCGIMount /RPC2 127.0.0.1:5000

ou directement :

echo "SCGIMount /RPC2 127.0.0.1:5000" >> /etc/apache2/apache2.conf

Et enfin, on va redémarrer apache pour bien tout prendre en compte :

service apache2 restart

6. Installation de _h5ai

h5ai est une amélioration de votre localhost. C’est pour que tout soit bien plus beau ! :)

Vous pouvez avoir une démo ici : http://larsjung.de/h5ai/sample/

Pour cela

  • on va dans le /var/www/
  • on récupère le h5ai
  • on le dézippe
  • on ajoute une ligne à la fin du .htaccess pour qu’il le prenne en compte
cd /var/www/
wget http://release.larsjung.de/h5ai/h5ai-0.22.1.zip
unzip h5ai-0.22.1.zip
rm h5ai-0.22.1.zip
rm index.html
echo "DirectoryIndex index.html index.php /_h5ai/server/php/index.php" >> .htaccess
chmod -R 777 /var/www/

Et voilà !

7. Installation de mediaInfo

Ça, c’est uniquement pour que RuTorrent de vous mette pas l’erreur. Mediainfo sert juste à donner des infos sur le média, tel que le bitrate, format, taille, etc.

On retourne dans notre dossier home et on crée le dossier :

cd
mkdir mediainfo
cd mediainfo

Si vous êtes en 64 bits, voici ce qu’il faut installer :

wget http://mediaarea.net/download/binary/libzen0/0.4.28/libzen0_0.4.28-1_amd64.Debian_6.0.deb
wget http://mediaarea.net/download/binary/libmediainfo0/0.7.61/libmediainfo0_0.7.61-1_amd64.Debian_6.0.deb
wget http://mediaarea.net/download/binary/mediainfo/0.7.61/mediainfo_0.7.61-1_amd64.Debian_6.0.deb

Et si vous êtes en 32 bits,

wget http://mediaarea.net/download/binary/libzen0/0.4.28/libzen0_0.4.28-1_i386.Debian_6.0.deb
wget http://mediaarea.net/download/binary/libmediainfo0/0.7.61/libmediainfo0_0.7.61-1_i386.Debian_6.0.deb
wget http://mediaarea.net/download/binary/mediainfo/0.7.61/mediainfo_0.7.61-1_i386.Debian_6.0.deb

Puis un

dpkg -i *.deb

Pour installer mediainfo et les librairies dont il a besoin
On va donc supprimer le dossier qui ne sert plus à rien :

cd && rm -Rf mediainfo

8. Configuration du FTP

On commence par aller dans le dossier du FTP :

cd /etc/proftpd/

Puis on va changer quelques configurations. D’abord, le dossier par défaut autorisé :

sed -i 's/^# DefaultRoot/DefaultRoot/g' proftpd.conf
sed -i 's/~/\/var\/www\/downloads\//g' proftpd.conf

On désactive l’IPv6

sed -i 's/UseIPv6[[:space:]]*on/UseIPv6 off/g' proftpd.conf

On autorise l’autorisation de reprise d’upload :

echo "AllowStoreRestart on" >> proftpd.conf

De même pour la reprise des téléchargements

echo "AllowRetrieveRestart on" >> proftpd.conf

Puis on redémarre le serveur ! :)

service proftpd restart

9. Extra

Pour ça c’est vraiment « pour le fun », mais on va changer le bash pour utiliser « zsh » ainsi que « Oh-my-zsh » pour magnifier un peu notre shell. Voici :

cd
wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
wget https://www.kai23.fr/zshrc
rm .zshrc
mv zshrc .zshrc
chsh -s $(which zsh)

Donc là :

  • on récupère « Oh My Zsh »
  • on récupère un .zshrc ( que vous pouvez voir ici : https://www.kai23.fr/zshrc )
  • on supprime l’ancien .zshrc pour le remplacer par le nouveau,
  • on change le bash par défaut.

Déconnectez-vous et reconnectez-vous. C’est tout bon ! :)

10. Conclusion

Voilà pour ce loooooong tutoriel ! Il faut savoir que j’ai créé un script qui permet d’automatiser tout ça, que vous pouvez avoir ici :
https://github.com/kai23/linux-scripts/blob/master/script.sh

Ainsi, après votre première connexion en SSH, vous pouvez faire un

wget https://raw.github.com/kai23/linux-scripts/master/script.sh

puis un

chmod +x script.sh

pour le passer en exécutable, puis

./script.sh

pour l’exécuter. À part la fenêtre pour « proftpd », rien n’arrêtera ce script de folie, et en 5 min, vous aurez tout ce que j’ai expliqué un peu plus haut !

Bonne journée à vous tous, moi je vais suivre la conf pour la Galaxy S4 ! :D