SOURCES: ng-update (NEW) - taken from initng-ifiles 0.0.3.1 releas...
glen
glen at pld-linux.org
Thu Sep 20 15:09:15 CEST 2007
Author: glen Date: Thu Sep 20 13:09:15 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- taken from initng-ifiles 0.0.3.1 release (most sane one)
---- Files affected:
SOURCES:
ng-update (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/ng-update
diff -u /dev/null SOURCES/ng-update:1.1
--- /dev/null Thu Sep 20 15:09:15 2007
+++ SOURCES/ng-update Thu Sep 20 15:09:10 2007
@@ -0,0 +1,312 @@
+#!/bin/bash
+
+export RED='\E[31;01m'
+export GREEN='\E[32;01m'
+export YELLOW='\E[33;01m'
+export NORMAL="\033[0m"
+
+#Conf
+export DEFAULT="default"
+export VERBOSE=0 #This dosen't work well
+
+export script_dirs="$( ls -lA /etc/initng | grep '^d' | awk '{ print $NF }' )"
+export all_levels="$( ls -l /etc/initng/*.runlevel | awk '{ print $NF }' | cut -d / -f4 | cut -d . -f1 )"
+
+message() {
+ case "$1" in
+ -e)
+ shift
+ echo -e $RED"Error:"$NORMAL" $*"
+ ;;
+ -w)
+ shift
+ echo -e $YELLOW"Warning:"$NORMAL" $*"
+ ;;
+ -s)
+ shift
+ echo -e $GREEN"Success:"$NORMAL" $*"
+ ;;
+ esac
+}
+
+usage() {
+cat << FOO
+usage: ng-update a|add script1 [script2 ...] [runlevel1] [runlevel2 ...]
+ ng-update d|del|delete script1 [script2 ...] [runlevel1] [runlevel2 ...]
+ ng-update s|show|view [script] [runlevel]
+
+note: After ng-update executes, the script dependency cache is automatically
+ updated.
+
+examples:
+ ng-update add net/eth0 default
+ Adds the eth0 script (in /etc/initng) to the "default" runlevel.
+
+ ng-update del daemon/sysklogd
+ Removes sysklogd from all runlevels.
+
+ ng-update del net/eth2 default wumpus
+ Removes net/eth2 from runlevel default and wumpus
+
+FOO
+exit 1
+}
+
+add() {
+ shift
+ for q in "$@"
+ do
+ check_script ${q}
+ if [[ $? -eq 0 ]]
+ then
+ myscripts="${myscripts} ${myscript}"
+ else
+ check_level ${q}
+ if [[ $? -eq 0 ]]
+ then
+ mylevels="${mylevels} ${q}"
+ else
+ message -w "\"${q}\" isn't a script or a runlevel, it's being removed from list"
+ fi
+ fi
+ done
+
+ if [[ -z $( echo ${myscripts} | tr -d " " ) ]]
+ then
+ message -e "you didn't specify any script"
+ exit 1
+ fi
+ if [[ -z ${mylevels} ]]
+ then
+ mylevels=$DEFAULT
+ fi
+
+
+ for h in ${myscripts}
+ do
+
+ # Print some info when ng-update add if any in file.
+ if [[ -e "/etc/initng/${h}.i" ]]
+ then
+ echo
+ grep -e "# ng-update all" -e "# ng-update add" "/etc/initng/${h}.i" | sed "s/# ng-update all//" | sed "s/# ng-update add//" && echo && echo
+ fi
+
+
+ for i in ${mylevels}
+ do
+ if [[ -z $( grep /etc/initng/${i}.runlevel -e ${h}\$ ) ]]
+ then
+ echo ${h} | tr -d " " >> /etc/initng/${i}.runlevel
+ message -s "added \"${h}\" to runlevel \"${i}\""
+ else
+ message -w "\"${h}\" already installed in runlevel \"${i}\""
+ fi
+ done
+ done
+ exit 0
+}
+
+del() {
+ shift
+ for q in "$@"
+ do
+ check_level ${q}
+ if [[ $? -eq 0 ]]
+ then
+ mylevels="${mylevels} ${q}"
+ else
+ check_script ${q}
+ if [[ $? -eq 0 ]]
+ then
+ myscripts="${myscripts} ${myscript}"
+ else
+ myscripts="${myscripts} ${q}"
+ fi
+ fi
+ done
+
+ if [[ -z $( echo ${myscripts} | tr -d " " ) ]]
+ then
+ message -e "you didn't specify any script"
+ exit 1
+ fi
+ if [[ -z ${mylevels} ]]
+ then
+ mylevels=$all_levels
+ fi
+
+ for h in ${myscripts}
+ do
+ remlevels=""
+
+ # Print some info when ng-update add if any in file.
+ if [[ -e "/etc/initng/${h}.i" ]]
+ then
+ echo
+ grep -e "# ng-update all" -e "# ng-update del" "/etc/initng/${h}.i" | sed "s/# ng-update all//" | sed "s/# ng-update del//" && echo && echo
+ fi
+
+
+ for i in ${mylevels}
+ do
+ if [[ -n $( grep /etc/initng/${i}.runlevel -x -e ${h}\$ ) ]]
+ then
+ grep /etc/initng/${i}.runlevel -x -v -e ${h} > /etc/initng/${i}.new
+ mv /etc/initng/${i}.new /etc/initng/${i}.runlevel
+ remlevels="${remlevels} ${i}"
+ fi
+ done
+ [[ -n $( echo ${remlevels} | tr -d " " ) ]] && message -s "removed \"${h}\" from the runlevel(s):${remlevels}"
+ [[ -z $( echo ${remlevels} | tr -d " " ) ]] && message -w "\"${h}\" missing from all runlevels specified"
+ done
+ exit 0
+}
+
+show() {
+ case "$#" in
+ 1)
+ for g in ${script_dirs}
+ do
+ [[ $VERBOSE -eq 0 ]] || [[ -z $VERBOSE ]] && allscripts="${allscripts} $( ls -l /etc/initng/${g}/*.i 2>/dev/null | cut -d / -f5 | sed 's/\.i//g' )"
+ [[ $VERBOSE -eq 1 ]] && allscripts="${allscripts} $( ls -l /etc/initng/system/*.i 2>/dev/null | sed 's/\.i//g' | awk '{ print $NF }' | sed 's/\/etc\/initng\///' )"
+ done
+
+ for e in ${all_levels}
+ do
+ if [[ -n $( grep /etc/initng/$e.runlevel -e net/ ) ]]
+ then
+ [[ $VERBOSE -eq 0 ]] || [[ -z $VERBOSE ]] && allscripts="${allscripts} $( grep /etc/initng/${e}.runlevel -e net/ | sed 's/net\///' )"
+ [[ $VERBOSE -eq 1 ]] && allscripts="${allscripts} $( grep /etc/initng/${e}.runlevel -e net/eth )"
+ fi
+ export myscript_${e}="$( cat /etc/initng/${e}.runlevel )"
+ done
+
+ for f in ${allscripts}
+ do
+ [[ $VERBOSE -eq 0 ]] || [[ -z $VERBOSE ]] && printf "%20s | " ${f:0:19}
+ [[ $VERBOSE -eq 1 ]] && printf "%30s | " ${f:0:29}
+ for c in ${all_levels}
+ do
+ eval myscript=\$myscript_${c}
+ if [[ -n $( echo $myscript | grep $f ) ]]
+ then
+ echo -n "${c} "
+ else
+ printf "%${#c}s " " "
+ fi
+ done
+ echo ""
+ done
+ ;;
+
+ 2)
+ shift
+ check_script $1
+ if [[ $? -eq 0 ]]
+ then
+ [[ $VERBOSE -eq 0 ]] || [[ -z $VERBOSE ]] && printf "%20s | " ${1:0:19}
+ [[ $VERBOSE -eq 1 ]] && printf "%30s | " ${myscript:0:29}
+ for w in ${all_levels}
+ do
+ if [[ -n $( grep /etc/initng/$w.runlevel -e $1 ) ]]
+ then
+ echo -n "${w} "
+ else
+ printf "%${#w}s " " "
+ fi
+ done
+ echo ""
+ else
+ check_level $1
+ if [[ $? -eq 0 ]]
+ then
+ for o in $( cat /etc/initng/$1.runlevel | cut -d / -f2 )
+ do
+ [[ $VERBOSE -eq 0 ]] || [[ -z $VERBOSE ]] && printf "%20s | " ${o:0:19}
+ [[ $VERBOSE -eq 1 ]] && printf "%30 | " ${o:0:19}
+ echo -n "$1 "
+ echo ""
+ done
+ else
+ message -e "\"$1\" isn't a script or a runlevel"
+ fi
+ fi
+ ;;
+
+ *)
+ usage
+ ;;
+ esac
+}
+
+check_script() {
+ local spath
+ if [[ -e /etc/initng/$1.i ]] || [[ -n $( echo $1 | grep net/ ) ]]
+ then
+ myscript="$1"
+ return 0
+ fi
+ for z in ${script_dirs}
+ do
+ if [[ -n $( echo "${all_levels}" | grep $1 ) ]]
+ then
+ break
+ else
+ if [ -e /etc/initng/${z}/$1.i ]
+ then
+ myscript="${z}/$1"
+ return 0
+ fi
+ fi
+ done
+ spath="$1"
+ while ( echo "$spath" | grep / >/dev/null )
+ do
+ spath="$( echo $spath | sed -r 's/^(.*)\/(.*)/\1/' )"
+ echo $spath
+ if [[ -e /etc/initng/$spath.i ]]
+ then
+ message -w "Cannot check \"$1\" is a valid script"
+ myscript="$1"
+ return 0
+ fi
+ done
+ myscript="$1"
+ return 1
+}
+
+check_level() {
+ if [ -n "$( echo ${all_levels} | grep $1 )" ]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+check_am_root() {
+ if [[ "${EUID}" -ne 0 ]]
+ then
+ message -e "must be root"
+ exit 1
+ fi
+}
+
+case $1 in
+ add|a)
+ check_am_root
+ add $@
+ ;;
+ del|d|delete)
+ check_am_root
+ del $@
+ ;;
+ show|s|view)
+ show $@
+ ;;
+ *)
+ usage
+ ;;
+esac
+
================================================================
More information about the pld-cvs-commit
mailing list