Outils du site

Outils pour utilisateurs


Panneau latéral

P2PFR:Wiki

p2p:rtorrent:pyroscope-rtorrent-ps:script-rtmanager (lu 2575 fois)

Ceci est une ancienne révision du document !


rtmanager.sh

Un script fait maison pour accueillir les utilisateurs d'une session SSH sur la seedbox, c'est pas du très propre, encore en développement, et je n'ai pas de dépot git.

Date: 21 janvier 2017

rtmanager.sh
#!/bin/bash
 
 
### ENV + AUTH
 
 
RTBIN="/home/rtorrentuser/bin"
RTCFGOPTS='--config-dir /home/rtorrentuser/.pyroscope -D rtorrent_rc=/home/rtorrentuser/.rtorrent.rc'
 
RTCMD="$RTBIN/rtcontrol $RTCFGOPTS"
 
function rt_is_admin() {
 
	if [ "$USER" = "rtorrentuser" ]; then
		return 0
	else
		return 1
	fi
}
 
if [ "$USER" = "rtorrentuser" ]; then
	if [ "$#" -eq 0  ]; then
		RTUSER="flexget"
	else
		RTUSER="$1"
	fi
else
		RTUSER="$USER"
fi
 
RTPATHCOMPLETE="/mnt/local/1/downloads/rtorrent/complete/$RTUSER"
RTPATHWORK="/mnt/local/1/downloads/rtorrent/work"
 
 
### RTCONTROL
 
 
function rt_print_user_torrents() {
	$RTCMD -q "realpath=*$RTPATHCOMPLETE/*"
}
 
function rt_print_user_incomplete() {
	$RTCMD -q "realpath=*$RTPATHCOMPLETE/*" "is_complete=no"
}
 
function rt_print_user_complete() {
	$RTCMD -q "realpath=*$RTPATHCOMPLETE/*" "is_complete=yes"
}
 
function rt_print_user_trackers() {
	$RTCMD -q "realpath=*$RTPATHCOMPLETE/*" -o alias -s alias \* | uniq -c
}
 
function rt_print_orphans() {
	$RTCMD -qO orphans.txt \*
}
 
function rt_user_search() {
 
	if [ $# -gt 1 ]; then
		return_value=true
		__ret1="$1"
		__ret2="$2"
		shift 2
	fi
 
 
	echo "Rechercher des téléchargements selon quel motif ?"
	echo "Exemple: bisounours"
	echo "Exemple: cité*peur"
 
	echo -n "rechercher> "
	read critere
 
	if [ "$critere" != "" ]; then
 
		critere="*$critere*" # on jokerise, pas pratique sinon
 
		resultats=$(mktemp)
		$RTCMD -q "realpath=*$RTPATHCOMPLETE/*" "$critere" | tee $resultats
		let nbresu=$(cat $resultats | wc -l)/2
	fi
 
	if [ "$nbresu" = "0" ]; then
		echo "Aucun résultat trouvé."
	else
		echo "Il y a $nbresu résultat(s)."
	fi
 
 
	[ $return_value ] && eval $__ret1="'$critere'" && eval $__ret2="'$nbresu'"
}
 
function rt_del_user_torrents() {
 
	action="purge"
 
	if [ "$1" = "cull" ]; then
		action="cull"
	fi
 
 
	rt_user_search critere nbresu
 
	if [ "$nbresu" -gt "0" ]; then
 
		let cptsuppr=0
 
		echo "Êtes-vous sûr de vouloir supprimer ces téléchargements ? (o/O/y/Y/n/N)"
		if [ "$action" = "cull" ]; then
			echo -n '!'
		fi
 
		echo -n "supprimer> "
		read confirmation
 
		case $confirmation in
			o|O|y|Y)
				$RTCMD -q "realpath=*$RTPATHCOMPLETE/*" "$critere" --"$action" --yes && let cptsuppr="$cptsuppr+1" # > /dev/null
											# --cull ou --purge)
				;;
			n|N|*)
				echo "Rien." > /dev/null	
				;;
		esac
 
		if [ "$cptsuppr" -eq "0" ]; then
				echo "Aucun téléchargement supprimé."
		else
				echo "$cptsuppr téléchargement(s) supprimé(s)"
		fi
 
	fi
}
 
# idem que _event.download.finished, sauf qu'on fait le choix de virer les symlinks de /work/
function rt_move_then_restart() {
 
	# vérifier si ce qu'on souhaite déplacer est en fait un lien symbolique
	origin=$($RTCMD "hash=$1" -qo path.strip)
 
	is_sym=0
 
	if [ -L "$origin" ]; then
		is_sym=1
	fi
 
 
        $RTCMD "hash=$1" -q --stop
        $RTCMD "hash=$1" -q --exec "directory.set={{item.custom_targetdir}}" -o custom_targetdir --yes
 
	if [ "$is_sym" -eq "1" ]; then
		rm "$origin"
	else
        	$RTCMD "hash=$1" -q --spawn "mv {{item.path}} {{item.custom_targetdir}}" -o custom_targetdir
	fi
 
        sleep 1
 
        $RTCMD "hash=$1" -q --start
}
 
function rt_test_permissions() {
 
        dir1="$($RTCMD "hash=$1" -qo custom_targetdir)"
 
	if [ ! -w "$dir1" ]; then
		echo "$dir1 n'est pas accessible en écriture."
		return 1
	fi
 
	return 0
}
 
# Si _event.download.finished n'a pas fait son boulot, on peut le faire a posteriori avec cette fonction
# Inconvénient : se lance avec les permissions de $USER
function rt_move_work_torrents() {
	hashlist=$($RTCMD -q "path=*$RTPATHWORK/*" -o hash)
 
	echo "$hashlist"
 
	let cpt=0
	let igncpt=0
 
	if [ "$hashlist" != "" ]; then
 
		for h in "$hashlist"
		do
			if rt_test_permissions "$h"; then
				rt_move_then_restart "$h" && let cpt="$cpt+1"
			else 
				let ign="$ign+1"
			fi
		done
 
		echo "$cpt téléchargement(s) déplacé(s)."
	else
		echo "Aucun téléchargement déplacé."
	fi
 
	if [ $igncpt -gt 0 ]; then
		echo "$igncpt téléchargements ont été ignorés : pas les permissions requises"
	fi
 
}
 
# Il y a un problème avec cette fonction : si t'as pas les permissions en lecture, il va penser que le lien symbolique est cassé et doit être viré.
function rt_del_broken_symlinks() {
	cpt=0
 
	for f in $RTPATHWORK/*
	do
		if [ -h "$f" ]; then
			echo "est symb: $f"
		fi
 
		if [ -r "$f" ]; then
			echo "je peux lire: $f"
		fi
 
		if [ -w "$f" ]; then
			echo "je peux écrire dans: $f"
		fi
 
		if [ -e "$f" ]; then
			echo "il existe ! $f"
		fi
 
 
		# lien sym, lisible, n'existe pas
		if [ -h "$f" -a -r "$f" -a ! -e "$f" ]; then
			echo "bwana: $f"
#			rm "$f" && let cpt=$cpt+1
		fi
	done
 
	echo "$cpt liens cassé(s) supprimé(s)."
}
 
 
### MENU
 
 
function menu_welcome() {
 
clear
 
cat << EOF
Salut $RTUSER,
 
Voici quelques options pour gérer tes téléchargements :
 
EOF
 
}
 
function menu_actions() {
 
cat << EOF
[ACTIONS]
 
	1 : Lister tous les téléchargements de $RTUSER
	2 : Lister les téléchargements incomplets
	3 : Lister les téléchargements terminés
	4 : Lister des téléchargements selon leur nom
	5 : Statistiques des trackers
 
	6 : Supprimer des téléchargements sans supprimer les fichiers terminés
	7 : /!\ Supprimer des téléchargements, y compris les fichiers terminés
 
EOF
 
rt_is_admin && menu_actions_admin
 
cat << EOF
[MENU]
 
	q ou Q : Pour quitter ce menu (accès au shell)
	m ou M : Pour réafficher ce menu
	z ou Z : Pour afficher un dinosaure
 
EOF
 
}
 
function menu_actions_admin() {
 
cat << EOF
[ADMIN]
 
	8 : Lister les fichiers orphelins (non chargés dans rtorrent)
	9 : Déplacer les fichiers qui pour une raison X sont restés dans /work/
	10 : Retirer les liens symboliques cassés de /work/
 
EOF
 
}
 
function menu_dinosaur() {
	num=$(( ( RANDOM % 8 ) + 1 ))
 
	cat $RTBIN/dinosaur.$num
}
 
function menu_unknown_option() {
	echo "Option inconnue."
	sleep 1
	clear
	menu_actions
}
 
function menu_ask() {
 
	echo -n "> "
 
	read choice
 
	case $choice in
		1)
			rt_print_user_torrents
			;;
		2)
			rt_print_user_incomplete
			;;
		3)
			rt_print_user_complete
			;;
		4)
			rt_user_search
			;;
		5)
			rt_print_user_trackers
			;;
		6)
			rt_del_user_torrents purge
			;;
		7)
			rt_del_user_torrents cull
			;;
		8)
			rt_is_admin && rt_print_orphans || menu_unknown_option
			;;
		9)
			rt_is_admin && rt_move_work_torrents || menu_unknown_option
			;;
		10)
			rt_is_admin && rt_del_broken_symlinks || menu_unknown_option
			;;
		q|Q)
			echo "Entrez rtmanager.sh pour relancer le script de gestion rtorrent."
			exit 0
			;;
		m|M)
			clear
			menu_actions
			menu_ask
			;;
		z|Z)
			menu_dinosaur
			;;
		"")
			menu_ask
			;;
		*)
			menu_unknown_option
			;;
	esac
}
 
menu_welcome
menu_actions
 
while :
do
	menu_ask
done
p2p/rtorrent/pyroscope-rtorrent-ps/script-rtmanager.1485015195.txt.gz · Dernière modification: le 21/01/2017 à 17h13 de 111110101011