Index: /module/Configure/install.rdf =================================================================== --- /module/Configure/install.rdf (revision 1) +++ /module/Configure/install.rdf (revision 1) @@ -0,0 +1,32 @@ + + + + Install + LADVD + 0.9.2-1 + ladvd LLDP responder + Andreas Thienemann + + http://blog.vodkamelone.de/ + + No + + Admin + Thecus + + + Thecus + n5200 + N5200 + 2.00.00 + + + Thecus + n7700 + N7700 + 2.00.00 + + + Index: /module/Configure/license.txt =================================================================== --- /module/Configure/license.txt (revision 1) +++ /module/Configure/license.txt (revision 1) @@ -0,0 +1,16 @@ + +Copyright (c) 2008, 2009, 2010 + Sten Spans + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Index: /module/system/configtool =================================================================== --- /module/system/configtool (revision 1) +++ /module/system/configtool (revision 1) @@ -0,0 +1,142 @@ +#!/bin/sh +######################################################################################### +## +## configtool +## +## Commands: +## +## backup +## restore +## getconfig +## putconfig +## +## 2007-01-16 Andreas Vogel (omega) +## +######################################################################################### + +PreBackup () { + if [ -x $modDir/system/configprepare ] ; then + $modDir/system/configprepare backup $modName + ret=$? + else + ret=0 + fi + + return $ret +} + +PostRestore () { + if [ -x $modDir/system/configprepare ] ; then + $modDir/system/configprepare restore $modName + ret=$? + else + ret=0 + fi + + return $ret +} + +######################################################################################### +## +## Main +## +######################################################################################### + +cmd=$1 +modName=$2 +filename=$3 +warn=${4:-warn} + +## +## Use standard backup file if command is "backup" or "restore" +## +if [ "$cmd" == backup -o "$cmd" == restore ] ; then + filename="/raid/data/module/backup/$modName/backup-$modName.tar.gz" + + if [ "$cmd" == backup ] ; then + cmd=getconfig + elif [ "$cmd" == restore ] ; then + cmd=putconfig + warn=nowarn + fi +fi + +if [ -z "$filename" -o -z "$modName" ] ; then + echo "ERROR: illegal commandline: $0 $*" + exit 1 +fi + +MAGIC="CONFIG-$modName" +modDir=/raid/data/module/$modName +modVersion=$(awk '{print $2}' < "$modDir/VERSION") + +case "$cmd" in + getconfig|get) + dstFile=$filename + + if ! PreBackup ; then + echo "ERROR: PreBackup script failed!" + exit 1 + fi + + echo "$MAGIC $modVersion $(date '+%Y-%m-%d_%H:%M:%S')" > "$modDir/system/etc/MAGIC" + tar czpf "$dstFile" -C "$modDir/system" etc + status=$? + rm "$modDir/system/etc/MAGIC" + exit $status + ;; + + putconfig|put) + srcFile=$filename + tmpdir=/tmp/tmp.configtool + + if [ ! -r "$srcFile" ] ; then + if [ "$warn" != nowarn ] ; then + echo "ERROR: source file '$sourceFile' not readable!" + exit 1 + else + exit 0 + fi + fi + + rm -rf "$tmpdir" + mkdir -p "$tmpdir" + if ! tar xzf "$srcFile" -C "$tmpdir" ; then + echo "ERROR: cannot unpack tar file!" + rm -rf "$tmpdir" + exit 1 + fi + + cfgMagic=$(awk '{print $1;exit}' < "$tmpdir/etc/MAGIC") + cfgVersion=$(awk '{print $2;exit}' < "$tmpdir/etc/MAGIC") + cfgDate=$(awk '{print $3;exit}' < "$tmpdir/etc/MAGIC") + + if [ "$cfgMagic" != "$MAGIC" ] ; then + echo "ERROR: wrong magic '$cfgMagic' - expected '$MAGIC'!" + rm -rf "$tmpdir" + exit 1 + fi + rm "$tmpdir/etc/MAGIC" + + if ! tar cpf - -C "$tmpdir" etc | (cd "$modDir/system" ; tar xpf -) ; then + echo "ERROR: cannot copy from '$tmpdir' to '$modDir/system'!" + rm -rf "$tmpdir" + exit 1 + fi + + rm -rf "$tmpdir" + + if ! PostRestore ; then + echo "ERROR: PostRestore script failed!" + exit 1 + fi + ;; + + *) + echo "ERROR: invalid command '$cmd'!" + echo "Usage: $0 {backup|restore|getconfig|putconfig} " + exit 1 + ;; +esac + +exit 0 Index: /module/system/.htaccess =================================================================== --- /module/system/.htaccess (revision 1) +++ /module/system/.htaccess (revision 1) @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all Index: /module/Shell/enable.sh =================================================================== --- /module/Shell/enable.sh (revision 1) +++ /module/Shell/enable.sh (revision 1) @@ -0,0 +1,65 @@ +#!/bin/sh +############################################################################### +## +## Module enable/disable script +## +############################################################################### + +modName=$1 +modEnable=$2 + +############################################################################### +## +## Include module library +## +############################################################################### +modLibDir=/raid/data/module/$modName/Shell +{ [ -r "$modLibDir/module.lib" ] && source "$modLibDir/module.lib"; } || { echo error; exit 1; } + +############################################################################### +## +## Enable +## +############################################################################### +enable() { + $modRC start + + return $? +} + +############################################################################### +## +## Disable +## +############################################################################### +disable() { + $modRC stop + + return $? +} + +############################################################################### +## +## Main +## +############################################################################### + +result=fail + +case "$modEnable" in + No|no) + enable && result=pass + ;; + + Yes|yes) + disable && result=pass + ;; + + *) + ;; +esac + +echo $result + +exit 0 + Index: /module/Shell/install.sh =================================================================== --- /module/Shell/install.sh (revision 1) +++ /module/Shell/install.sh (revision 1) @@ -0,0 +1,39 @@ +#!/bin/sh +############################################################################### +## +## Module install script +## +############################################################################### + +modName=LADVD + +############################################################################### +## +## Include module library +## +############################################################################### +shellDir="/raid/data/module/$modName/Shell" +[ ! -d "$shellDir" -o ! -r "$shellDir/module.lib" ] && shellDir=/raid/data/tmp/module/Shell +{ [ -r "$shellDir/module.lib" ] && source "$shellDir/module.lib"; } || { echo fail; exit 1; } + +############################################################################### +## +## Start the module installation +## +############################################################################### +ModuleInstallStart + +############################################################################### +## +## Module specific installation stuff +## +############################################################################### + + +############################################################################### +## +## Finish module installation indicating success +## +############################################################################### +ModuleInstallEnd 0 + Index: /module/Shell/uninstall.sh =================================================================== --- /module/Shell/uninstall.sh (revision 1) +++ /module/Shell/uninstall.sh (revision 1) @@ -0,0 +1,38 @@ +#!/bin/sh +############################################################################### +## +## Module uninstall script +## +############################################################################### + +modName=LADVD + +############################################################################### +## +## Include module library +## +############################################################################### +shellDir=/raid/data/module/$modName/Shell +{ [ -r "$shellDir/module.lib" ] && source "$shellDir/module.lib"; } || { echo fail; exit 1; } + +############################################################################### +## +## Start module uninstall +## +############################################################################### +ModuleUninstallStart + +############################################################################### +## +## Module specific uninstallation stuff +## +############################################################################### + + +############################################################################### +## +## Finish module uninstall indicating success +## +############################################################################### +ModuleUninstallEnd 0 + Index: /module/Shell/module.rc =================================================================== --- /module/Shell/module.rc (revision 1) +++ /module/Shell/module.rc (revision 1) @@ -0,0 +1,142 @@ +#!/bin/sh +############################################################################### +## +## Startup script for Module +## +############################################################################### + +modName=LADVD + +cmd=$1 + +############################################################################### +## +## Include module library +## +############################################################################### +modLibDir=/raid/data/module/$modName/Shell +{ [ -r "$modLibDir/module.lib" ] && source "$modLibDir/module.lib"; } || { echo error; exit 1; } + +############################################################################### +## +## Start +## +############################################################################### +start () { + + ProcsRunning "ladvd" && $0 stop + + # Set interface to bind to + intf=$(echo $(grep '^[ ]*eth[0-9]*:' /proc/net/dev | cut -d : -f 1)) + args="-r" + IF_MODE=$(/opt/bin/sqlite /app/cfg/conf.db "SELECT v FROM conf WHERE k = 'nic1_mode_8023ad';") + if [ "$IF_MODE" != "none" ]; then + # Bonding + mgmt_ip=$(ip address show dev bond0 | awk '/inet/ { split($2, ip, "/"); print ip[1] }') + $modDir/system/sbin/ladvd $args -m $mgmt_ip $intf + else + # Normal mode + $modDir/system/sbin/ladvd $intf + fi + + if ! ProcsRunning "ladvd" &>/dev/null ; then + return 1 + fi + + return 0 +} + +############################################################################### +## +## Stop +## +############################################################################### +stop () { + + ProcKillall "ladvd" 15 + return $? +} + +############################################################################### +## +## Boot +## +############################################################################### +boot () { + $0 start + return $? +} + +############################################################################### +## +## Status +## +############################################################################### +status () { + + if nProcs=$(ProcsRunning "ladvd") ; then + echo "$modName running($nProcs)" + else + echo "$modName stopped!" + fi + + +} + +############################################################################### +## +## Main +## +############################################################################### + +case "$cmd" in + start) + echo "Starting $modName..." + if start ; then + echo "Started $modName!" + else + echo "Failed to start $modName!" + exit 1 + fi + ;; + + stop) + echo "Stopping $modName..." + if stop ; then + echo "Stopped $modName!" + else + echo "Failed to stop $modName!" + exit 1 + fi + ;; + + boot) + echo "Booting $modName..." + if boot ; then + echo "Booted $modName!" + else + echo "Failed to boot $modName!" + exit 1 + fi + ;; + + status) + status + ;; + + restart) + echo "Restarting $modName..." + if stop && start ; then + echo "Restarted $modName!" + else + echo "Failed to restart $modName!" + exit 1 + fi + ;; + + *) + echo "Usage: $0 {start|stop|restart|boot|status}" + exit 1 +esac + +exit 0 Index: /module/Shell/module.lib =================================================================== --- /module/Shell/module.lib (revision 1) +++ /module/Shell/module.lib (revision 1) @@ -0,0 +1,452 @@ +############################################################################### +## +## Module library +## +## 2007-01-16 Andreas Vogel (omega) +## +############################################################################### + +modInstDir=/raid/data/tmp/module # temporary module directory during install +modBaseDir=/raid/data/module # root of the module tree +modCfgDir=$modBaseDir/cfg # config directory for all modules +modBinDir=$modBaseDir/bin # directory for all module executables +modShlibDir=$modBaseDir/shlib # directory for all module shared libraries +modBackupDir=$modBaseDir/backup/$modName # directory holding backup data for each module +modDir=$modBaseDir/$modName # home directory for this module + +modRC=$modCfgDir/module.rc/$modName.rc # system start/stop script for this module +modDB=$modCfgDir/module.db # system module database + +modLogDir=$modBaseDir/log # directory for log files +modLog=$modLogDir/$modName.log # install/uninstall/update log file for module + +############################################################################### +## +## Include E-Mail library +## +############################################################################### +shellDir="/raid/data/module/$modName/Shell" +[ ! -d "$shellDir" -o ! -r "$shellDir/email.lib" ] && shellDir=/raid/data/tmp/module/Shell +{ [ -r "$shellDir/email.lib" ] && source "$shellDir/email.lib"; } || { echo fail; exit 1; } + +############################################################################### +## +## Now +## +############################################################################### +Now () { + echo $(date '+%Y-%m-%d %H:%M:%S') +} + +############################################################################### +## +## ModVersion +## +############################################################################### +ModVersion () { + local version=$(awk '{print $2}' < "$modDir/VERSION") + + if [ -z $version ] ; then + version="0.00.00" + fi + echo $version +} + +############################################################################### +## +## ModuleInit +## +############################################################################### +ModuleInit () { + [ -d $modBaseDir -a ! -d $modLogDir ] && mkdir $modLogDir &>/dev/null + [ ! -d $modLogDir ] && modLog=/raid/data/$modName.log + > $modLog +} + +############################################################################### +## +## ModuleStart +## +############################################################################### +ModuleStart () { + mode=$1 + + ModuleInit + + echo "START module $mode: $modName ($(Now))" >>$modLog + echo "------------------------------------------------------------------------------" >>$modLog +} + +############################################################################### +## +## ModuleInstallStart +## +############################################################################### +ModuleInstallStart () { + ModuleStart install + + allDirs="$modCfgDir $modCfgDir/module.rc \ + $modBaseDir/backup $modBackupDir \ + $modShlibDir $modBinDir \ + $modDir $modDir/Shell $modDir/system $modDir/system/etc $modDir/www" + + for dir in $allDirs ; do + echo "Create standard directory: $dir" >>$modLog + [ ! -d $dir ] && mkdir $dir >>$modLog 2>&1 + FileAttr root root 755 $dir >>$modLog 2>&1 + done + ln -sf Shell $modDir/shell + echo >>$modLog + + for dir in Shell system www ; do + echo "Copy standard directory: $modInstDir/$dir -> $modDir/$dir" >>$modLog + for file in $modInstDir/$dir/* ; do + [ -e "$file" ] && cp -r $file $modDir/$dir/ >>$modLog 2>&1 + done + done + echo >>$modLog + + echo "Copy license file: $modInstDir/Configure/license.txt -> $modDir/COPY" >>$modLog + rm -f $modDir/COPY >>$modLog 2>&1 + cp $modInstDir/Configure/license.txt $modDir/COPY >>$modLog 2>&1 + FileAttr root root 644 $modDir/COPY >>$modLog 2>&1 + + echo "Create module.rc link: $modRC -> $modDir/Shell/module.rc" >>$modLog + rm -f $modRC >>$modLog 2>&1 + ln -s $modDir/Shell/module.rc $modRC >>$modLog 2>&1 + + modVersion="$(grep '.*' $modInstDir/Configure/install.rdf | tr '<' ' ' | tr '>' ' ' | awk '{print $2;exit}')" + echo "$modName $modVersion $(Now)" > $modDir/VERSION + FileAttr root root 644 $modDir/VERSION >>$modLog 2>&1 + + ## + ## TODO: Patch the apache config file in order to allow .htaccess files in the module directory + ## + apacheCfg=/etc/httpd/conf/httpd.conf + echo "Apache config: Saving apache config file $apacheCfg -> $apacheCfg.ORIG" >>$modLog + [ ! -e "$apacheCfg.ORIG" ] && cp -p "$apacheCfg" "$apacheCfg.ORIG" >>$modLog 2>&1 + + grepLine='LoadModule access_module modules/mod_access.so' + if grep "$grepLine" "$apacheCfg" &>/dev/null ; then + echo "Apache config: add module_access to apache config file: $apacheCfg" >>$modLog + echo "$grepLine" > $tmpfile + cat "$apacheCfg" >> $tmpfile + mv $tmpfile "$apacheCfg" + fi + + grepLine='AllowOverride AuthConfig' + if grep "$grepLine" "$apacheCfg" &>/dev/null ; then + echo "Apache config: add 'AllowOverride Limit' apache config file: $apacheCfg" >>$modLog + sed -i -e "s/$grepLine/ AllowOverride Limit AuthConfig/g" "$apacheCfg" >>$modLog 2>&1 + fi + + ## + ## TODO: Augment PATH variable and add LD_LIBRARY_PATH variable to /etc/profile + ## + profile=/etc/profile + tmpfile=/tmp/profile.tmp + + echo "Backup SHELL profile settings: $profile -> $profile.ORIG" >>$modLog + [ ! -e "$profile.ORIG" ] && cp -p "$profile" "$profile.ORIG" >>$modLog 2>&1 + + grepLine1='true && export PATH=' + grepLine2='true && export LD_LIBRARY_PATH=' + + cat $profile | grep -v "$grepLine1" | grep -v "$grepLine2" > $tmpfile + echo 'true && export PATH="/raid/data/module/bin:$PATH"' >> $tmpfile + echo 'true && export LD_LIBRARY_PATH="/raid/data/module/lib:/opt/apache/lib:$LD_LIBRARY_PATH"' >> $tmpfile + mv $tmpfile $profile + + ## + ## TODO: This patching code can be removed after Thecus fixed their software + ## + rclocal=/app/cfg/rc.local + if grep '/img/bin/rc/rc.module >/dev/null 2>&1 &' $rclocal &>/dev/null ; then + echo "Patch $rclocal..." + if [ ! -e $rclocal.ORIG ] ; then + echo "Backup rc.local: $rclocal -> $rclocal.ORIG" >>$modLog + cp $rclocal $rclocal.ORIG >>$modLog 2>&1 + fi + sed -i -e 's#/img/bin/rc/rc.module >/dev/null 2>&1 &#/img/bin/rc/rc.module start >/dev/null 2>\&1 \&#' \ + $rclocal >>$modLog 2>&1 + fi + + echo >>$modLog + echo "---- Start module specific log -----------------------------------------------" >>$modLog + echo >>$modLog +} + +############################################################################### +## +## ModuleUpdateStart +## +############################################################################### +ModuleUpdateStart () { + ModuleStart update + + if [ -r "$modDir/VERSION" ] ; then + modVersion=$(awk '{print $2}' < "$modDir/VERSION") + else + modVersion="0.00.00" + fi + + echo >>$modLog + echo "---- Start module specific log -----------------------------------------------" >>$modLog + echo >>$modLog +} + +############################################################################### +## +## ModuleUninstallStart +## +############################################################################### +ModuleUninstallStart () { + ModuleStart uninstall + + echo "Stop module: $modRC stop" >>$modLog 2>&1 + $modRC stop >>$modLog 2>&1 + + if [ -r "$modDir/VERSION" ] ; then + modVersion=$(awk '{print $2}' < "$modDir/VERSION") + else + modVersion="0.00.00" + fi + + echo >>$modLog + echo "---- Start module specific log -----------------------------------------------" >>$modLog + echo >>$modLog +} + +############################################################################### +## +## ModuleEnd +## +############################################################################### +ModuleEnd () { + exitcode=$1 ; mode=$2 + + if [ "$exitcode" == "0" ] ; then + echo "FINISH module $mode: $modName ($(Now))" >>$modLog + exitMsg=pass + else + echo "ERROR($exitcode) module $mode: $modName ($(Now))" >>$modLog + exitMsg=fail + fi + + ## + ## Append this log to the log file containing all logs. + ## + modLogAll=${modLog}-all + echo >>$modLogAll + echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >>$modLogAll + echo >>$modLogAll + cat $modLog >>$modLogAll + + ## + ## Mail the result + ## + if [ -f $modLog -a -r $modLog ] ; then + case $mode in + install) modeNoun=Installation ; modeVerb=installed ;; + update) modeNoun=Update ; modeVerb=updated ;; + uninstall) modeNoun=Uninstallation ; modeVerb=uninstalled ;; + *) modeNoun=Unknown ; modeVerb=unknown ;; + esac + MailResult "$modName" "$modVersion" "$modLog" "$modeNoun" "$modeVerb" + fi + + echo $exitMsg +} + +############################################################################### +## +## ModuleInstallEnd +## +############################################################################### +ModuleInstallEnd () { + exitcode=$1 + + echo >>$modLog + echo "---- End module specific log -------------------------------------------------" >>$modLog + echo >>$modLog + + ## + ## Set file attributes for standard scripts + ## + for script in configtool ; do + echo "Setting file attribs for: $modDir/system/$script" >>$modLog + FileAttr root root 755 $modDir/system/$script >>$modLog 2>&1 + done + + ## + ## Restore saved config files if there are any + ## + echo "Restoring saved $modName configuration files (if any)" >>$modLog + $modDir/system/configtool restore $modName nowarn >>$modLog 2>&1 + + ModuleEnd $exitcode install +} + +############################################################################### +## +## ModuleUpdateEnd +## +############################################################################### +ModuleUpdateEnd () { + exitcode=$1 + + echo >>$modLog + echo "---- End module specific log -------------------------------------------------" >>$modLog + echo >>$modLog + + ModuleEnd $exitcode update +} + +############################################################################### +## +## ModuleUninstallEnd +## +############################################################################### +ModuleUninstallEnd () { + exitcode=$1 + + echo >>$modLog + echo "---- End module specific log -------------------------------------------------" >>$modLog + echo >>$modLog + + ## + ## Restore saved config files if there are any + ## + echo "Save $modName configuration files" >>$modLog + $modDir/system/configtool backup $modName >>$modLog 2>&1 + + ## + ## Delete module from config database + ## + echo "Delete module '$modName' from table 'module' in $modDB..." >>$modLog + /opt/bin/sqlite $modDB "delete from module where name = '$modName'" >>$modLog 2>&1 + + echo "Delete module '$modName' from table 'mod' in $modDB..." >>$modLog + /opt/bin/sqlite $modDB "delete from mod where module = '$modName'" >>$modLog 2>&1 + + echo "Remove start/stop script $modRC..." >>$modLog + rm -f $modRC >>$modLog 2>&1 + + echo "Remove module directory $modDir..." >>$modLog + rm -rf $modDir >>$modLog 2>&1 + + ModuleEnd $exitcode uninstall +} + +############################################################################### +## +## ProcsRunning +## +############################################################################### +ProcsRunning () { + searchPattern="$1" + + procs=$(ps w | grep -v grep | grep -E "$searchPattern" 2>/dev/null | wc -l 2>/dev/null) + [ -z $procs ] && procs=0 + + echo $procs + + return $(expr $procs == 0) +} + +############################################################################### +## +## ProcKillall +## +############################################################################### +ProcKillall () { + procPattern="$1" ; signal=${2:-9} + + if [ -z "$procPattern" ] ; then + return 0 + fi + + loop=0 + while true ; do + pidlist=$(ps -w | grep -v grep | grep -E "$procPattern" 2>/dev/null | awk '{print $1}') + for pid in $pidlist ; do + kill -$signal $pid &>/dev/null + done + + if ! ProcsRunning "$procPattern" &>/dev/null || test $loop -gt 10 ; then + break + fi + sleep 1 + let loop++ + done + + if ProcsRunning "$procPattern" &>/dev/null ; then + return 1 + fi + + return 0 +} + +############################################################################### +## +## MailResult +## +############################################################################### +MailResult() { + modName=$1 ; modVers=$2 ; instLogFile=$3 ; modeNoun=${4:-Installation} ; modeVerb=${5:-installed} + + tmpmsgfile=/tmp/tmp.TestMail.$$ + + cat > $tmpmsgfile <<-EOF + From: @mailEnvFrom@ + To: @mailEnvTo@ + Subject: $modeNoun finished for module $modName-$modVers + + Hello @mailEnvTo@, + + The module $modName-$modVers was $modeVerb on your Thecus N5200 device @hostname@. + + Please check the log output below for errors ($instLogFile): + ======================================================================= + +EOF + + cat $instLogFile >> $tmpmsgfile + + cat >> $tmpmsgfile <<-EOF + + ======================================================================= + + + ----------------------------------------------------------------------- + This is a software generated mail message on @hostname@ at @now@. +EOF + + MailSend "" "" $tmpmsgfile + rm -f $tmpmsgfile +} + + +############################################################################### +## +## FileAttr +## +############################################################################### +FileAttr () { + sOwner=$1 ; sGroup=$2 ; sMode=$3 ; shift ; shift ; shift + + if [ $# -le 0 ] ; then + echo "FileAttr: WARNING: no files given" + return 1 + fi + + ret=0 + + for file in $* ; do + chown $sOwner.$sGroup "$file" || ret=1 + chmod $sMode "$file" || ret=1 + done + + return $ret +} + Index: /module/Shell/update.sh =================================================================== --- /module/Shell/update.sh (revision 1) +++ /module/Shell/update.sh (revision 1) @@ -0,0 +1,41 @@ +#!/bin/sh +############################################################################### +## +## Module update script +## +############################################################################### + +modName=$1 +modVersion=$2 +modEnable=$3 +modURL=$4 + +############################################################################### +## +## Include module library +## +############################################################################### +modLibDir=/raid/data/module/$modName/Shell +{ [ -r "$modLibDir/module.lib" ] && source "$modLibDir/module.lib"; } || { echo error; exit 1; } + +############################################################################### +## +## Start the module update +## +############################################################################### +ModuleUpdateStart + +############################################################################### +## +## Module specific update stuff +## +############################################################################### + + +############################################################################### +## +## Finish module update indicating error +## +############################################################################### +ModuleUpdateEnd 1 + Index: /module/Shell/email.lib =================================================================== --- /module/Shell/email.lib (revision 1) +++ /module/Shell/email.lib (revision 1) @@ -0,0 +1,195 @@ +#!/bin/sh +############################################################################### +## +## This is a more general script library for sending +## E-Mail on the Thecus N5200. +## +## The main function is MailSend(). +## +## 2007-01-16 Andreas Vogel (omega) +## +## Changes: +## 09.01.2007 0.1 initial version +## 31.05.2007 0.2 change mail from for FW >= 1.00.10 (by Peter Futterknecht (peterfu)) +## +############################################################################### + +msmtp=/opt/bin/msmtp +sqlite=/opt/bin/sqlite +confdb=/app/cfg/conf.db + +MailGetRecipients() { + if [ -z "$mailRecipients" ] ; then + sqlcmd="select v from conf where k like 'notif_addr%'" + mailRecipients=$($sqlite $confdb "$sqlcmd" | tr "\n" " ") + fi + echo $mailRecipients +} + +MailGetAuthName() { + if [ -z "$mailAuthName" ] ; then + sqlcmd="select v from conf where k='notif_account'" + mailAuthName=$($sqlite $confdb "$sqlcmd") + fi + echo $mailAuthName +} + +MailGetAuthPasswd() { + if [ -z "$mailAuthPasswd" ] ; then + sqlcmd="select v from conf where k='notif_password'" + mailAuthPasswd=$($sqlite $confdb "$sqlcmd") + fi + echo $mailAuthPasswd +} + +MailGetAuthMethod() { + if [ -z "$mailAuthMethod" ] ; then + sqlcmd="select v from conf where k='notif_auth'" + mailAuthMethod=$($sqlite $confdb "$sqlcmd") + fi + echo $mailAuthMethod +} + +MailGetServer() { + if [ -z "$mailServer" ] ; then + sqlcmd="select v from conf where k='notif_smtp'" + mailServer=$($sqlite $confdb "$sqlcmd") + fi + echo $mailServer +} + +MailGetPort() { + if [ -z "$mailPort" ] ; then + sqlcmd="select v from conf where k='notif_smtport'" + mailPort=$($sqlite $confdb "$sqlcmd") + fi + echo $mailPort +} + +MailGetNotify() { + if [ -z "$mailNotify" ] ; then + if [ -n "$1" ];then + field="notif_$1" + sqlcmd="select v from conf where k='$field'" + mailNotify=$($sqlite $confdb "$sqlcmd") + fi + fi + echo $mailNotify +} + +MailGetFrom () { + if [ -z "$mailFrom" ] ; then + sqlcmd="select v from conf where k='notif_from'" + mailFrom=$($sqlite $confdb "$sqlcmd") + fi + if [ -z "$mailFrom" ] ; then + mailFrom="thecus@$(hostname)" + fi + echo $mailFrom +} + +############################################################################### +## +## +## +############################################################################### +MailSend () { + mailEnvFrom=$1 + mailEnvToList=$2 + msgOrFile=$3 + + if [ -z "$mailEnvFrom" ] ; then + mailEnvFrom=$(MailGetFrom) + fi + if [ -z "$mailEnvToList" ] ; then + mailEnvToList=$(MailGetRecipients) + fi + if [ -z "$(MailGetAuthName)" -o -z "$(MailGetAuthPasswd)" ] ; then + auth=$(MailGetAuthMethod) + else + auth=off + fi + + wanAddr=$(/sbin/ifconfig eth0 | grep 'inet addr:' | tr ':' ' ' | awk '{print $3;exit}') + lanAddr=$(/sbin/ifconfig eth1 | grep 'inet addr:' | tr ':' ' ' | awk '{print $3;exit}') + now=$(date '+%Y-%m-%d %H:%M:%S') + + tmpInFile=/tmp/tmp.MailSend.in.$$ + tmpOutFile=/tmp/tmp.MailSend.out.$$ + + if [ -f "$msgOrFile" ] ; then + cp "$msgOrFile" $tmpInFile + else + echo "$msgOrFile" > $tmpInFile + fi + + for mailEnvTo in $mailEnvToList ; do + sed \ + -e "s/@mailEnvFrom@/$mailEnvFrom/g" \ + -e "s/@mailEnvTo@/$mailEnvTo/g" \ + -e "s/@mailRecipients@/$(MailGetRecipients)/g" \ + -e "s/@mailAuthName@/$(MailGetAuthName)/g" \ + -e "s/@mailAuthPasswd@/$(MailGetAuthPasswd)/g" \ + -e "s/@mailAuthMethod@/$(MailGetAuthMethod)/g" \ + -e "s/@mailServer@/$(MailGetServer)/g" \ + -e "s/@mailPort@/$(MailGetPort)/g" \ + -e "s/@mailNotify@/$(MailGetNotify)/g" \ + -e "s/@wanAddr@/$wanAddr/g" \ + -e "s/@lanAddr@/$lanAddr/g" \ + -e "s/@hostname@/$(hostname)/g" \ + -e "s/@now@/$now/g" \ + < $tmpInFile > $tmpOutFile + + $msmtp --host="$(MailGetServer)" --port="$(MailGetPort)" \ + --auth="$auth" --user="$(MailGetAuthName)" --password="$(MailGetAuthPasswd)" \ + --from="$mailEnvFrom" \ + $mailEnvTo \ + < $tmpOutFile + done + + rm -f $tmpOutFile + rm -f $tmpInFile +} + + +############################################################################### +## +## +## +############################################################################### +TestMail() { + tmpmsgfile=/tmp/tmp.TestMail.$$ + + cat > $tmpmsgfile <<-EOF + From: @mailEnvFrom@ + To: @mailEnvTo@ + Subject: Test E-Mail from Thecus N5200 (@hostname@) + + Hello @mailEnvTo@ + + This is a test message. + + mailEnvFrom: '@mailEnvFrom@' + mailEnvTo: '@mailEnvTo@' + + mailRecipients: '@mailRecipients@' + mailAuthName: '@mailAuthName@' + mailAuthPasswd: '@mailAuthPasswd@' + mailAuthMethod: '@mailAuthMethod@' + mailServer: '@mailServer@' + mailPort: '@mailPort@' + mailNotify: '@mailNotify@' + + wanAddr: '@wanAddr@' + lanAddr: '@lanAddr@' + + hostname: '@hostname@' + now: '@now@' + + ======================================================= + This is a TEST mail message generated at @now@ on @hostname@. +EOF + + MailSend "" "" $tmpmsgfile + rm -f $tmpmsgfile +} Index: /module/.htaccess =================================================================== --- /module/.htaccess (revision 1) +++ /module/.htaccess (revision 1) @@ -0,0 +1,3 @@ +Order Deny,Allow +Deny from all + Index: /module/Thecus =================================================================== --- /module/Thecus (revision 1) +++ /module/Thecus (revision 1) @@ -0,0 +1,2 @@ +“ +¢£€€[Û=ûž7wš Index: /ladvd-mock-build.sh =================================================================== --- /ladvd-mock-build.sh (revision 1) +++ /ladvd-mock-build.sh (revision 1) @@ -0,0 +1,44 @@ +#!/bin/sh + +set -e -x + +mock_args="-r epel-4-i386 --uniqueext=ladvd_build" + +# Initialize the chroot +mock ${mock_args} --init + +# Install some more dependencies +mock ${mock_args} --install libevent-devel + +# Find out the homedir of the mockbuild user +mock_home=$(mock ${mock_args} -q --shell "runuser - mockbuild -c pwd") +build_dir="${mock_home}/ladvd" + +# Copy the sources into the mediatomb build dir +mock ${mock_args} --copyin \ + . \ + ${build_dir} + +# Change ownership information +mock ${mock_args} --chroot "chown -R mockbuild.mockbuild ${build_dir}" + +# Build the stuff +mock ${mock_args} --chroot "runuser - mockbuild -c 'cd ${build_dir}; ./build.sh'" + +# Build the release itself +mock ${mock_args} --chroot "runuser - mockbuild -c 'cd ${build_dir}; ./release.sh'" + +# Find the finished builds +files=$(mock ${mock_args} -q --shell "runuser - mockbuild -c \"cd ${build_dir}; ls *.mod *-src.tar.gz\"") + +# Retrieve module and sources +for file in $files; do +mock ${mock_args} --copyout \ + ${build_dir}/${file} \ + . +done + +exit 1 + +# Clean out +mock ${mock_args} --clean Index: /build.sh =================================================================== --- /build.sh (revision 1) +++ /build.sh (revision 1) @@ -0,0 +1,37 @@ +#!/bin/sh -e + +set -e + +D=${PWD} +D_PREFIX="/raid0/data/module/LADVD/system" + +rm -rf tmp + +mkdir tmp +mkdir tmp/build +mkdir tmp/install +mkdir tmp/install/sbin +mkdir tmp/install/var +mkdir tmp/install/var/run +mkdir tmp/install/var/run/ladvd +pushd tmp/build + +export CFLAGS="-O2 -g -march=i686 -mcpu=i686" + +# ladvd +tar xvfz ${D}/sources/ladvd-0.9.2.tar.gz +pushd ladvd-0.9.2 +./configure --prefix=${D_PREFIX} +sed -i ' + s/#define HAVE_DECL_GET_VLAN_REALDEV_NAME_CMD 0/#undef HAVE_DECL_GET_VLAN_REALDEV_NAME_CMD/; + s/#define HAVE_LINUX_ETHTOOL_H 1/#undef HAVE_LINUX_ETHTOOL_H/; + s/#define PACKAGE_USER "ladvd"/#define PACKAGE_USER "root"/; + s@#define PACKAGE_CHROOT_DIR "/var/run/" PACKAGE_NAME@#define PACKAGE_CHROOT_DIR "'${D_PREFIX}'/var/run/" PACKAGE_NAME@; + s@#define PACKAGE_PID_DIR "/var/run"@#define PACKAGE_PID_DIR "'${D_PREFIX}'/var/run"@' \ + src/config.h +sed -i '872d' \ + src/netif.c +make +install -D -p -m 755 src/ladvd ${D}/tmp/install/sbin/ladvd +ln -sf ${D}/tmp/install/sbin/ladvdc ladvd +popd Index: /release.sh =================================================================== --- /release.sh (revision 1) +++ /release.sh (revision 1) @@ -0,0 +1,26 @@ +#!/bin/bash + +set -ex + +D=${PWD} + +NAME=LADVD + +rm -rf tmp/${NAME} +mkdir tmp/${NAME} + +cp -a ${D}/module/* ${D}/tmp/${NAME}/ +cp -a ${D}/tmp/install/* ${D}/tmp/${NAME}/system/ + + +# Binary file +pushd ${D}/tmp/ +VERSION=$(cat ${D}/module/Configure/install.rdf | grep md:Version | cut -d '>' -f 2 | cut -d '<' -f 1) +tar cfvz ${D}/N5200_${NAME}-${VERSION}.mod --owner 0 --group 0 ${NAME}/ +popd + +# Source file +mkdir N5200_${NAME}-${VERSION}-src +cp -a build.sh release.sh ladvd-mock-build.sh module sources N5200_${NAME}-${VERSION}-src +tar cfvz ${D}/N5200_${NAME}-${VERSION}-src.tar.gz --owner 0 --group 0 N5200_${NAME}-${VERSION}-src +rm -rf N5200_${NAME}-${VERSION}-src