123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #!/usr/bin/env bash
- # This script is licensed under the GPL2 and includes modified content from the GPL2 licensed /etc/rc.d/functions script that used to be included in Archlinux
- ### Modified selection from the now deprecated /etc/rc.d/functions ###
- calc_columns () {
- STAT_COL=80
- if [[ ! -t 1 ]]; then
- USECOLOR=""
- elif [[ -t 0 ]]; then
- # stty will fail when stdin isn't a terminal
- STAT_COL=$(stty size)
- # stty gives "rows cols"; strip the rows number, we just want columns
- STAT_COL=${STAT_COL##* }
- elif tput cols &>/dev/null; then
- # is /usr/share/terminfo already mounted, and TERM recognized?
- STAT_COL=$(tput cols)
- fi
- if (( STAT_COL == 0 )); then
- # if output was 0 (serial console), set default width to 80
- STAT_COL=80
- USECOLOR=""
- fi
- # we use 13 characters for our own stuff
- STAT_COL=$(( STAT_COL - 13 ))
- if [[ -t 1 ]]; then
- SAVE_POSITION="\e[s"
- RESTORE_POSITION="\e[u"
- DEL_TEXT="\e[$(( STAT_COL + 4 ))G"
- else
- SAVE_POSITION=""
- RESTORE_POSITION=""
- DEL_TEXT=""
- fi
- }
- calc_columns
- # disable colors on broken terminals
- TERM_COLORS=$(tput colors 2>/dev/null)
- if (( $? != 3 )); then
- case $TERM_COLORS in
- *[!0-9]*) USECOLOR="";;
- [0-7]) USECOLOR="";;
- '') USECOLOR="";;
- esac
- fi
- unset TERM_COLORS
- deltext() {
- printf "${DEL_TEXT}"
- }
- stat_busy() {
- printf "${C_OTHER}${PREFIX_REG} ${C_MAIN}${1}${C_CLEAR} "
- printf "${SAVE_POSITION}"
- deltext
- printf " ${C_OTHER}[${C_BUSY}BUSY${C_OTHER}]${C_CLEAR} "
- }
- stat_done() {
- deltext
- printf " ${C_OTHER}[${C_DONE}DONE${C_OTHER}]${C_CLEAR} \n"
- }
- stat_fail() {
- deltext
- printf " ${C_OTHER}[${C_FAIL}FAIL${C_OTHER}]${C_CLEAR} \n"
- }
- status_started() {
- deltext
- echo -ne "$C_OTHER[${C_STRT}STARTED$C_OTHER]$C_CLEAR "
- }
- status_stopped() {
- deltext
- echo -ne "$C_OTHER[${C_STRT}STOPPED$C_OTHER]$C_CLEAR "
- }
- # Return PID of $1
- get_pid() {
- pidof -o %PPID $1 || return 1
- }
- # set colors
- if [[ $USECOLOR != [nN][oO] ]]; then
- if tput setaf 0 &>/dev/null; then
- C_CLEAR=$(tput sgr0) # clear text
- C_MAIN=${C_CLEAR}$(tput bold) # main text
- C_OTHER=${C_MAIN}$(tput setaf 4) # prefix & brackets
- C_SEPARATOR=${C_MAIN}$(tput setaf 0) # separator
- C_BUSY=${C_CLEAR}$(tput setaf 6) # busy
- C_FAIL=${C_MAIN}$(tput setaf 1) # failed
- C_DONE=${C_MAIN} # completed
- C_BKGD=${C_MAIN}$(tput setaf 5) # backgrounded
- C_H1=${C_MAIN} # highlight text 1
- C_H2=${C_MAIN}$(tput setaf 6) # highlight text 2
- else
- C_CLEAR="\e[m" # clear text
- C_MAIN="\e[;1m" # main text
- C_OTHER="\e[1;34m" # prefix & brackets
- C_SEPARATOR="\e[1;30m" # separator
- C_BUSY="\e[;36m" # busy
- C_FAIL="\e[1;31m" # failed
- C_DONE=${C_MAIN} # completed
- C_BKGD="\e[1;35m" # backgrounded
- C_H1=${C_MAIN} # highlight text 1
- C_H2="\e[1;36m" # highlight text 2
- fi
- fi
- PREFIX_REG="::"
- ### CJDNS service ###
- . /etc/default/cjdns
- PID=$(get_pid $CJDROUTE)
- case "$1" in
- start)
- stat_busy "Starting cjdns"
- #START CJDNS AND ENABLE THE DAEMON IF IT SUCCEEDS
- if [ -z "$PID" ]; then
- cjdns.sh start &> /dev/null
- if [ $? -gt 0 ]; then
- stat_busy "Unable to start the daemon"
- stat_fail
- exit 1
- else
- stat_done
- fi
- else
- stat_busy "The daemon is already running"
- stat_fail
- exit 1
- fi
- ;;
- stop)
- stat_busy "Stopping cjdns"
- cjdns.sh stop
- if [ $? -gt 0 ]; then
- stat_busy "The daemon was not running"
- stat_fail
- else
- stat_done
- fi
- ;;
- restart)
- $0 stop
- while [ ! -z "$PID" -a -d "/proc/$PID" ]; do sleep 1; done
- $0 start
- ;;
- status)
- stat_busy "The daemon is currently..."
- if [ $(cjdns.sh status | grep -c not) = 0 ]; then status_started; else status_stopped; fi
- ;;
- *)
- echo "usage: $0 {start|stop|restart|status}"
- esac
- exit 0
|