ss5 est un service de proxy SOCKS très
performant, développé par une seule personne je tiens à le souligner !
J’ai eu à l’installer sur une Debian 5, et j’ai donc réalisé un petit script
pour automatiser tout cela.
On installe…
N’oubliez pas de préciser le numéro de version complet dans la variable VER
:
1234567891011121314151617
#!/bin/bashVER="3.8.4-1"DIR="/tmp/ss5_install"apt-get update
apt-get -y install build-essential libpam0g-dev libpam-devperm libldap2-dev libssl-dev
if ! [ -d "$DIR"];then mkdir $DIRficd$DIR wget
http://downloads.sourceforge.net/project/ss5/ss5/$VER/ss5-$VER.tar.gz
tar xzf ss5-$VER.tar.gz
VER=`echo$VER | cut -d "-" -f 1`cd ss5-$VER./configure --with-defaultport=80 && make clean && make && make install
Une particularité du .tar.gz de ss5 c’est de ne pas intégrer le
numéro de sous-version (“-2” par exemple) dans le nom du dossier, ce qui
oblige à cette pirouette dans le script :
VER=`echo $VER | cut -d "-" -f 1`
…et on démarre !
J’ai aussi créé un script pour init.d (assez basique), basé sur
/etc/init.d/skeleton. Il intègre quelques options comme le port par défaut
ou le lancement en mode daemon (DAEMON_ARGS="-t -u root -b 0.0.0.0:80") :
#! /bin/sh### BEGIN INIT INFO# Provides: ss5# Required-Start: $remote_fs# Required-Stop: $remote_fs# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Initscript for ss5# Description:### END INIT INFO# PATH should only include /usr/* if it runs after the mountnfs.sh scriptPATH=/bin/:/usr/bin:/sbin:/usr/sbin
DESC="ss5 proxy server"NAME=ss5
DAEMON=/usr/sbin/$NAMEDAEMON_ARGS="-t -u root -b 0.0.0.0:80"PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME# Exit if the package is not installed[ -x "$DAEMON"]||exit 0
# Load the VERBOSE setting and other rcS variables. /lib/init/vars.sh
# Define LSB log_* functions.# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.. /lib/lsb/init-functions
## Function that starts the daemon/service#do_start(){# Return# 0 if daemon has been started# 1 if daemon was already running# 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \||return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \$DAEMON_ARGS\||return 2
}## Function that stops the daemon/service#do_stop(){# Return# 0 if daemon has been stopped# 1 if daemon was already stopped# 2 if daemon could not be stopped# other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAMERETVAL="$?"["$RETVAL"= 2 ]&&return 2
# Wait for children to finish too if this is a daemon that forks# and if the daemon is only ever run from this initscript.# If the above conditions are not satisfied then add some other code# that waits for the process to drop all resources that could be# needed by services started subsequently. A last resort is to# sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON["$?"= 2 ]&&return 2
# Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILEreturn"$RETVAL"}case"$1" in
start)["$VERBOSE" != no ]&& log_daemon_msg "Starting $DESC""$NAME" do_start
case"$?" in
0|1)["$VERBOSE" != no ]&& log_end_msg 0 ;;
2)["$VERBOSE" != no ]&& log_end_msg 1 ;;
esac ;;
stop)["$VERBOSE" != no ]&& log_daemon_msg "Stopping $DESC""$NAME" do_stop
case"$?" in
0|1)["$VERBOSE" != no ]&& log_end_msg 0 ;;
2)["$VERBOSE" != no ]&& log_end_msg 1 ;;
esac ;;
restart|force-reload) log_daemon_msg "Restarting $DESC""$NAME" do_stop
case"$?" in
0|1) do_start
case"$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to startesac ;;
*)# Failed to stop log_end_msg 1
;;
esac ;;
*)echo"Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac