FreeBSD Script

Help us to make Torrent Ratio Keeper Better! Reply for bugs, errors and any suggestions.
Post Reply
CATS
Posts: 13
Joined: Sun Jun 26, 2011 7:18 am

FreeBSD Script

Post by CATS » Mon Dec 26, 2011 7:02 am

Sharing this so I don't have to spend a day making at again when I lose it :P

X-Mas ended up being productive after all




It will have to do until I have time for the complete Re write which will be nxt x-mas :P

I did have another script that automatically adjusted its self for other rc.d names but I accidentally overwritten it

for those that want stop to work you will have to find your java install path
and change

procname=/usr/local/diablo-jdk1.6.0/bin/java



also change

RatioKeeper_flags="${RatioKeeper_flags:-"-ui:1"}"

to

RatioKeeper_flags="${RatioKeeper_flags:-"-ui:0"}"

I left it like that for testing when its all working just change it to 0 and when you reboot it will be a daemon

Code has been updated to support the new features of the TRK test file

Code: Select all


#!/bin/sh
# PROVIDE: RatioKeeper
# BEFORE: DAEMON
# KEYWORD: shutdown

## Add RatioKeeper_enable="YES" in /etc/rc.conf
## echo 'RatioKeeper_enable="YES"'>>/etc/rc.conf
## save file as RatioKeeper in /usr/local/etc/rc.d/
## Please Contain RatioKeeper in its own Folder for Security reasons; because this script changes RatioKeepers home folder permissions
## RatioKeeper_flags=
##
## -ui:1|0 (launch TRK with gui or without. Default - 1)
## -active:1|0 (Activate TRK for the new tracker (Default Settings). Default value is 1)
## -upinc:0..1000 (Increase Uploaded Traffic for the new tracker (Default Settings). Default value is 75(%))
## -downdec:0..100 (Decrease Downloaded Traffic for the new tracker (Default Settings). Default value is 0, turned off)
## -seeder:1|0 (Turn on Seeder mode for the new tracker (Default Settings). Default value is 0)
## -noup:1|0 (Emulate Upload Problems for the new tracker (Default Settings). Default value is 0)
## -blocktracker:1|0 (Block Tracker Communications for the new tracker (Default Settings). Default value is 0)
## --- Add x-y% of downloaded to uploaded ---
## -adddowntoup:1|0 (Add x-y% of downloaded to uploaded for the new tracker (Default Settings). Default value is 0)
## -adddowntoupx:0..100000 (X of adddowntoup for the new tracker (Default Settings). Default value is 25)
## -adddowntoupy:0..100000 (Y of adddowntoup for the new tracker (Default Settings). Default value is 33)
## --- Limit torrent fake upload speed ---
## -limtorrent:1|0 (Make sure that your fake upload increase speed for single .torrent doesn't exceed X-Y kb/s for the new tracker (Default Settings). Default value is 0, turned off)
## -limtorrentx:0..100000 (X kb/s of limtorrent for the new tracker (Default Settings). Default value is 100)
## -limtorrenty:0..100000 (Y kb/s of limtorrent for the new tracker (Default Settings). Default value is 150
## --- Settings ---
## -port:1..65535 (TRK listens this port. You need to setup your torrent client to use the port as HTTP proxy. Default port is 3012. Example: localhost:3012)
## -lc:<TRK_license_key> (The license key activates TRK on your PC.)
## --help (display this help and exit)
##
## --- Options Available for New Versions ---
## http://www.torrentratiokeeper.com/download/TorrentRatioKeeperMonsterTest.jar
## -dir:/path ( Location of TRK settings )
##
## Example: RatioKeeper_flags="${RatioKeeper_flags:-"-ui:0 -seeder:1 -noup:0 -upinc:112 -downdec:0"}"



name=RatioKeeper

procname=/usr/local/diablo-jdk1.6.0/bin/java

Java_bin="${Java_bin:-"/usr/local/bin/java"}"
Java_arg="${Java_arg:-"-jar"}"

RatioKeeper_enable="${RatioKeeper_enable:-"NO"}"
RatioKeeper_home="${RatioKeeper_home:-"/usr/daemons/TRKM"}"
RatioKeeper_config="${RatioKeeper_config:-"-dir:/usr/daemons/TRKM"}"
#RatioKeeper_license="${RatioKeeper_license:-"-lc:XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"}"
RatioKeeper_jar="${RatioKeeper_jar:-"TorrentRatioKeeperMonster.jar"}"
RatioKeeper_flags="${RatioKeeper_flags:-"-ui:1"}"
RatioKeeper_user="${RatioKeeper_user:-"daemon"}"

. /etc/rc.subr

rcvar=`set_rcvar`

pidfile="/var/run/${name}/pid"

start_precmd=RatioKeeper_prestart
stop_postcmd=RatioKeeper_poststop


if [ -n "${RatioKeeper_java_home}" ] ; then
export JAVA_HOME="${RatioKeeper_java_home}"
fi


chmod -v -R 0777 ${RatioKeeper_home}
chown -v -R ${RatioKeeper_user} ${RatioKeeper_home}


required_files="${RatioKeeper_home}/${RatioKeeper_jar}"
java_command="$Java_bin $Java_arg $RatioKeeper_home/$RatioKeeper_jar"

command="/usr/sbin/daemon"
flags="-f -p ${pidfile} ${java_command} ${RatioKeeper_config} ${RatioKeeper_license} ${RatioKeeper_flags} ${log_args}"
echo $flags


RatioKeeper_prestart()
{
if [ "$RatioKeeper_user" = 'root' ]; then
err 1 "You must set RatioKeeper_user to a unprivileged user"
fi

if [ ! -d "/var/run/${name}" ]; then
if [ -e "/var/run/${name}" ]; then
unlink /var/run/${name}
fi
mkdir -p /var/run/${name}
fi

chmod 0755 /var/run/${name}
chown -R ${RatioKeeper_user} /var/run/${name}



}

RatioKeeper_poststop()
{
[ -e "$pidfile" ] && unlink $pidfile
[ -d "${pidfile%/pid}" ] && rmdir ${pidfile%/pid}

[ -e "$RatioKeeper_logfile" -a ! -s "$RatioKeeper_logfile" ] &&
unlink $RatioKeeper_logfile
}

load_rc_config "${name}"

# ${RatioKeeper_loglevel:="error"}
# ${RatioKeeper_logfile:="/var/tmp/${name}.log"}

required_dirs="$RatioKeeper_home"
command_args="-c $required_dirs -L $RatioKeeper_loglevel -l $RatioKeeper_logfile -P $pidfile"

run_rc_command "$1"


Last edited by CATS on Fri Dec 30, 2011 9:44 pm, edited 4 times in total.

User avatar
administrator
Support
Posts: 587
Joined: Fri Oct 31, 2008 10:37 am
Contact:

Re: FreeBSD Script

Post by administrator » Mon Dec 26, 2011 7:12 am

Thanks for sharing! :) Merry Xmas!

CATS
Posts: 13
Joined: Sun Jun 26, 2011 7:18 am

Re: FreeBSD Script

Post by CATS » Mon Dec 26, 2011 7:19 am

merry X-Mas to you as well

Thanks for the pm reply
script change ( keeping the other one up just in case I have to revert )
but soon their will be another script that depends on another file rc.status that will have more features

Code: Select all


#!/bin/sh
# PROVIDE: RatioKeeper
# BEFORE: DAEMON
# KEYWORD: shutdown

## Add RatioKeeper_enable="YES" in /etc/rc.conf
## echo 'RatioKeeper_enable="YES"'>>/etc/rc.conf
## save file as RatioKeeper in /usr/local/etc/rc.d/
## Please Contain RatioKeeper in its own Folder for Security reasons; because this script changes RatioKeepers home folder permissions
## RatioKeeper_flags=
##
## -ui:1|0 (launch TRK with gui or without. Default - 1)
## -active:1|0 (Activate TRK for the new tracker (Default Settings). Default value is 1)
## -upinc:0..1000 (Increase Uploaded Traffic for the new tracker (Default Settings). Default value is 75(%))
## -downdec:0..100 (Decrease Downloaded Traffic for the new tracker (Default Settings). Default value is 0, turned off)
## -seeder:1|0 (Turn on Seeder mode for the new tracker (Default Settings). Default value is 0)
## -noup:1|0 (Emulate Upload Problems for the new tracker (Default Settings). Default value is 0)
## -blocktracker:1|0 (Block Tracker Communications for the new tracker (Default Settings). Default value is 0)
## --- Add x-y% of downloaded to uploaded ---
## -adddowntoup:1|0 (Add x-y% of downloaded to uploaded for the new tracker (Default Settings). Default value is 0)
## -adddowntoupx:0..100000 (X of adddowntoup for the new tracker (Default Settings). Default value is 25)
## -adddowntoupy:0..100000 (Y of adddowntoup for the new tracker (Default Settings). Default value is 33)
## --- Limit torrent fake upload speed ---
## -limtorrent:1|0 (Make sure that your fake upload increase speed for single .torrent doesn't exceed X-Y kb/s for the new tracker (Default Settings). Default value is 0, turned off)
## -limtorrentx:0..100000 (X kb/s of limtorrent for the new tracker (Default Settings). Default value is 100)
## -limtorrenty:0..100000 (Y kb/s of limtorrent for the new tracker (Default Settings). Default value is 150
## --- Settings ---
## -port:1..65535 (TRK listens this port. You need to setup your torrent client to use the port as HTTP proxy. Default port is 3012. Example: localhost:3012)
## -lc:<TRK_license_key> (The license key activates TRK on your PC.)
## --help (display this help and exit)
##
## Example: RatioKeeper_flags="${RatioKeeper_flags:-"-ui:0 -seeder:1 -noup:0 -upinc:112 -downdec:0"}"




name=RatioKeeper

Java_bin="${Java_bin:-"/usr/local/bin/java"}"
Java_arg="${Java_arg:-"-jar"}"

RatioKeeper_enable="${RatioKeeper_enable:-"NO"}"
RatioKeeper_home="${RatioKeeper_home:-"/usr/daemons/TRKM"}"
RatioKeeper_jar="${RatioKeeper_jar:-"TorrentRatioKeeperMonster.jar"}"
RatioKeeper_flags="${RatioKeeper_flags:-"-lc:6FE73067-4F26-4B74-9709-BFD9E847D335 -ui:1"}"
RatioKeeper_user="${RatioKeeper_user:-"daemon"}"

. /etc/rc.subr

rcvar=`set_rcvar`

pidfile="/var/run/${name}/pid"
procname=/usr/local/diablo-jdk1.6.0/bin/java

start_precmd=${name}_prestart
stop_postcmd=${name}_poststop


if [ -n "${RatioKeeper_java_home}" ] ; then
export JAVA_HOME="${RatioKeeper_java_home}"
fi



required_files="${RatioKeeper_home}/${RatioKeeper_jar}"
java_command="$Java_bin $Java_arg $RatioKeeper_home/$RatioKeeper_jar"

command="/usr/sbin/daemon"
flags="-f -p ${pidfile} ${java_command} ${RatioKeeper_flags} ${log_args}"

chmod -R 0755 ${RatioKeeper_home}/
chown -R ${RatioKeeper_user} ${RatioKeeper_home}/


RatioKeeper_prestart()
{
if [ "$RatioKeeper_user" = 'root' ]; then
err 1 "You must set RatioKeeper_user to a unprivileged user"
fi

if [ ! -d "/var/run/${name}" ]; then
if [ -e "/var/run/${name}" ]; then
unlink /var/run/${name}
fi
mkdir -p /var/run/${name}
fi

chmod 0755 /var/run/${name}
chown -R ${RatioKeeper_user} /var/run/${name}



}

RatioKeeper_poststop()
{
[ -e "$pidfile" ] && unlink $pidfile
[ -d "${pidfile%/pid}" ] && rmdir ${pidfile%/pid}

[ -e "$RatioKeeper_logfile" -a ! -s "$RatioKeeper_logfile" ] &&
unlink $RatioKeeper_logfile
}

load_rc_config "${name}"

# ${RatioKeeper_loglevel:="error"}
# ${RatioKeeper_logfile:="/var/tmp/${name}.log"}

required_dirs="$RatioKeeper_home"
command_args="-c $required_dirs -L $RatioKeeper_loglevel -l $RatioKeeper_logfile -P $pidfile"


cd ${RatioKeeper_home}
run_rc_command "$1"


The New rewrite I am working on needs /etc/rc.status and the code for it is

Code: Select all

# /etc/rc.status
# vim: syntax=sh
# Definition of boot script return messages
#
# The bootscripts should use the variables rc_done and rc_failed to
# report whether they failed or succeeded. See /etc/init.d/skeleton for
# an example how the shell functions rc_status and rc_reset are used.
#
# These functions make use of the variables rc_done and rc_failed;
# rc_done_up and rc_failed_up are the same as rc_done and rc_failed
# but contain a terminal code to move up one line before the output
# of the actual string. (This is particularly useful when the script
# starts a daemon which produces user output with a newline character)
#
# The variable rc_reset is used by the master resource control script
# /etc/init.d/rc to turn off all attributes and switch to the standard
# character set.
#
# \033 ascii ESCape
# \033[<NUM>G move to column <NUM> (linux console, xterm, not vt100)
# \033[<NUM>C move <NUM> columns forward but only upto last column
# \033[<NUM>D move <NUM> columns backward but only upto first column
# \033[<NUM>A move <NUM> rows up
# \033[<NUM>B move <NUM> rows down
# \033[1m switch on bold
# \033[31m switch on red
# \033[32m switch on green
# \033[33m switch on yellow
# \033[m switch off color/bold
# \017 exit alternate mode (xterm, vt100, linux console)
# \033[10m exit alternate mode (linux console)
# \015 carriage return (without newline)
#

# Check if the service is used under systemd but not started with
if /bin/mountpoint -q /sys/fs/cgroup/systemd > /dev/null 2>&1 ; then
if test $PPID -ne 1 -a $# -eq 1 ; then
_rc_base=
case "$0" in
/etc/init.d/boot.*)
_rc_base=${0##*/boot.} ;;
/etc/init.d/*)
_rc_base=${0##*/} ;;
*/rc*)
_rc_base=${0##*/rc} ;;
esac
if test -n "$_rc_base" -a -x /bin/systemctl ; then
exec /bin/systemctl $1 "${_rc_base}.service"
fi
unset _rc_base
fi
if test -z "$REDIRECT" -a -x /sbin/showconsole ; then
REDIRECT="$(/sbin/showconsole 2>/dev/null)"
test -z "$CONSOLE" && CONSOLE=/dev/console
export REDIRECT CONSOLE
fi
fi

# Do _not_ be fooled by non POSIX locale
LC_ALL=POSIX
export LC_ALL

# Seek for terminal size and, if needed, set default size
rc_lc () {
if test -n "$REDIRECT" ; then
set -- $(stty size < "$REDIRECT" 2> /dev/null || echo 0 0)
else
set -- $(stty size 2> /dev/null || echo 0 0)
fi
LINES=$1
COLUMNS=$2
if test $LINES -eq 0 -o $COLUMNS -eq 0; then
LINES=24
COLUMNS=80
TERM=dumb
fi
}
trap 'rc_lc' SIGWINCH
test -n "$COLUMNS" -a -n "$LINES" || rc_lc
export LINES COLUMNS

# Make sure we have /sbin and /usr/sbin in PATH
case ":$PATH:" in
*:/sbin:*)
;;
*)
PATH=/sbin:/usr/sbin:/usr/local/sbin:$PATH
export PATH
;;
esac

if test -t 1 -a "$TERM" != "raw" -a "$TERM" != "dumb"; then
esc=`echo -en "\033"`
extd="${esc}[1m"
warn="${esc}[1;31m"
done="${esc}[1;32m"
attn="${esc}[1;33m"
norm=`echo -en "${esc}[m\017"`
stat=`echo -en "\015${esc}[${COLUMNS}C${esc}[10D"`

rc_done="${stat}${done}done${norm}"
rc_running="${stat}${done}running${norm}"
rc_failed="${stat}${warn}failed${norm}"
rc_missed="${stat}${warn}missing${norm}"
rc_skipped="${stat}${attn}skipped${norm}"
rc_dead="${stat}${warn}dead${norm}"
rc_unused="${stat}${extd}unused${norm}"
rc_unknown="${stat}${attn}unknown${norm}"
rc_done_up="${esc}[1A${rc_done}"
rc_failed_up="${esc}[1A${rc_failed}"
rc_reset="${norm}${esc}[?25h"
rc_save="${esc}7${esc}[?25l"
rc_restore="${esc}8${esc}[?25h"
rc_cuu () { test $1 -eq 0 && return; echo -en "\033[${1}A"; }
rc_cud () { test $1 -eq 0 && return; echo -en "\033[${1}B"; }
rc_timer_on () {
# Draw seconds of running timout to column.
# Two arguments: timeout in seconds and offset
local n=$1
local c=$2
(trap "exit 0" SIGTERM
while test $((n--)) -gt 0; do
sleep 1;
if test $n -gt 9 ; then
echo -en "\015${esc}[${c}C(${n}s) "
else
echo -en "\015${esc}[${c}C( ${n}s) "
fi
done) & _rc_timer_pid=$!
}
rc_timer_off () {
if test -n "$_rc_timer_pid" ; then
kill -TERM $_rc_timer_pid > /dev/null 2>&1
fi
unset _rc_timer_pid
}
else
esc=""
extd=""
warn=""
done=""
attn=""
norm=""
stat=""

rc_done="..done"
rc_running="..running"
rc_failed="..failed"
rc_missed="..missing"
rc_skipped="..skipped"
rc_dead="..dead"
rc_unused="..unused"
rc_unknown="..unknown"
rc_done_up="${rc_done}"
rc_failed_up="${rc_failed}"
rc_reset=""
rc_save=""
rc_restore=""
rc_cuu () { return; }
rc_cud () { return; }
rc_timer_on () { return; }
rc_timer_off () { return; }
fi

_rc_service=${0##*/[SK][0-9][0-9]}
_rc_status=0
_rc_status_all=0
_rc_todo=$1

rc_check ()
{
_rc_status_ret=$?
test $_rc_status_ret -eq 0 || _rc_status=$_rc_status_ret
test $_rc_status -eq 0 || _rc_status_all=$_rc_status
return $_rc_status_ret
}

rc_reset ()
{
_rc_status=0
_rc_status_all=0
rc_check
return 0
}

if test "$_rc_todo" = "status" ; then
rc_status ()
{
rc_check
_rc_status_ret=$_rc_status
local i
for i ; do
case "$i" in
-v|-v[1-9]|-v[1-9][0-9])
local vrt=""
local out=1
local opt="en"

test -n "${i#-v}" && vrt=${esc:+"${esc}[${i#-v}A"} || opt="e"
case "$_rc_status" in
0) vrt="$vrt$rc_running"; ;; # service running
1) vrt="$vrt$rc_dead" ; out=2 ;; # service dead (but has pid file)
2) vrt="$vrt$rc_dead" ; out=2 ;; # service dead (but has lock file)
3) vrt="$vrt$rc_unused" ; ;; # service not running
4) vrt="$vrt$rc_unknown"; ;; # status is unknown
esac
echo -$opt "$rc_save$vrt$rc_restore" 1>&$out

# reset _rc_status to 0 after verbose case
_rc_status=0 ;;
-r) rc_reset ;;
-s) echo -e "$rc_skipped" ; rc_failed 3 ;;
-u) echo -e "$rc_unused" ; rc_failed 3 ;;
*) echo "rc_status: Usage: [-v[<num>] [-r]|-s|-u]" 1>&2 ; return 0 ;;
esac
done
return $_rc_status_ret
}
elif test -n "$_rc_todo" ; then
rc_status ()
{
rc_check
test "$_rc_status" -gt 7 && rc_failed 1
_rc_status_ret=$_rc_status
case "$_rc_todo" in
stop)
# program is not running which
# is success if we stop service
test "$_rc_status" -eq 7 && rc_failed 0 ;;
esac
local i
for i ; do
case "$i" in
-v|-v[1-9]|-v[1-9][0-9])
local vrt=""
local out=1
local opt="en"

test -n "${i#-v}" && vrt=${esc:+"${esc}[${i#-v}A"} || opt="e"
case "$_rc_status" in
0) vrt="$vrt$rc_done" ; ;; # success
1) vrt="$vrt$rc_failed" ; out=2 ;; # generic or unspecified error
2) vrt="$vrt$rc_failed" ; out=2 ;; # invalid or excess args
3) vrt="$vrt$rc_missed" ; out=2 ;; # unimplemented feature
4) vrt="$vrt$rc_failed" ; out=2 ;; # insufficient privilege
5) vrt="$vrt$rc_skipped"; out=2 ;; # program is not installed
6) vrt="$vrt$rc_unused" ; out=2 ;; # program is not configured
7) vrt="$vrt$rc_failed" ; out=2 ;; # program is not running
*) vrt="$vrt$rc_failed" ; out=2 ;; # unknown (maybe used in future)
esac
echo -$opt "$rc_save$vrt$rc_restore" 1>&$out

# reset _rc_status to 0 after verbose case
_rc_status=0 ;;
-r) rc_reset ;;
-s) echo -e "$rc_skipped" 1>&2 ; rc_failed 5 ;;
-u) echo -e "$rc_unused" 1>&2 ; rc_failed 6 ;;
*) echo "rc_status: Usage: [-v[<num>] [-r]|-s|-u]" 1>&2 ; return 0 ;;
esac
done
return $_rc_status_ret
}
else
rc_status ()
{
rc_check
_rc_status_ret=$_rc_status
local i
for i ; do
case "$i" in
-v|-v[1-9]|-v[1-9][0-9])
local vrt=""
local out=1
local opt="en"

test -n "${i#-v}" && vrt=${esc:+"${esc}[${i#-v}A"} || opt="e"
case "$_rc_status" in
0) vrt="$vrt$rc_done" ; ;; # success
*) vrt="$vrt$rc_failed"; out=2 ;; # failed
esac
echo -$opt "$rc_save$vrt$rc_restore" 1>&$out

# reset _rc_status to 0 after verbose case
_rc_status=0 ;;
-r) rc_reset ;;
-s) echo -e "$rc_skipped" ; return 0 ;;
-u) echo -e "$rc_unused" ; return 0 ;;
*) echo "rc_status: Usage: [-v[<num>] [-r]|-s|-u]" 1>&2 ; return 0 ;;
esac
done
return $_rc_status_ret
}
fi

rc_failed ()
{
rc_reset
case "$1" in
[0-7]) _rc_status=$1 ;;
"") _rc_status=1
esac
rc_check
return $_rc_status
}

rc_exit ()
{
exit $_rc_status_all
}

rc_confirm()
{
local timeout="30"
local answer=""
local ret=0

case "$1" in
-t) timeout=$2; shift 2 ;;
esac
local message="$@, (Y)es/(N)o/(C)ontinue? [y] "
: ${REDIRECT:=/dev/tty}

while true ; do
read -t ${timeout} -n 1 -p "${message}" answer < $REDIRECT > $REDIRECT 2>&1
case "$answer" in
[yY]|"") ret=0; break ;;
[nN]) ret=1; break ;;
[cC]) ret=2; break ;;
*) echo; continue
esac
done
echo
return $ret
}

rc_active ()
{
local link
for link in /etc/init.d/*.d/S[0-9][0-9]${1} ; do
test -e $link || break
return 0
done
return 1
}

rc_splash()
{
return 0
}

# Wait between last SIGTERM and the next SIGKILL
# any argument specify a *path* of a process which
# process identity should *not* be checked.
rc_wait()
{
local -i etime=$SECONDS

if test -f /fastboot ; then
let etime+=2
else
let etime+=6
fi

local -i pid
local -i ppid=$$
local comm state rest
local parent_processes="$ppid"

while test $ppid -gt 1; do
read -t 1 pid comm state ppid rest < /proc/$ppid/stat
parent_processes="${parent_processes:+$parent_processes:}${ppid}"
done
for comm ; do
test -s $comm || continue
ppid="$(/sbin/pidofproc $comm 2> /dev/null)" || continue
parent_processes="${parent_processes:+$parent_processes:}${ppid}"
done
unset comm state ppid rest

local -i busy
while test $SECONDS -lt $etime; do
let busy=0
for proc in /proc/[0-9]* ; do
test -e $proc/exe || continue
let pid=${proc##*/}
case ":${parent_processes}:" in
*:${pid}:*) continue
esac
let busy=pid
break
done
test $busy -ne 0 || return 0
usleep 500000
done
}

rc_runlevel()
{
test -z "$RUNLEVEL" || return
set -- $(/sbin/runlevel)
PREVLEVEL=$1
RUNLEVEL=$2
export PREVLEVEL RUNLEVEL
}

cmdline=""
rc_cmdline()
{
local arg cmd key val
test -e /proc/cmdline || mount -nt proc proc /proc
test -n "$cmdline" || read -t 2 cmdline < /proc/cmdline
for arg; do
for cmd in $cmdline ; do
key="${cmd%%=*}"
key="${key//-/_}"
case "${key}" in
$arg)
case "$cmd" in
*=*) val="${cmd#*=}" ;;
*) val=yes
esac
echo $key=$val
return 0
esac
done
done
return 1
}



CATS
Posts: 13
Joined: Sun Jun 26, 2011 7:18 am

Re: FreeBSD Script

Post by CATS » Sat Dec 08, 2012 9:02 am

which reminds me ended up getting a seedbox for around $10 a mnth 100mbs :P

then used it as vpn as well

Post Reply