diff options
author | Martin Burnicki <martin.burnicki@meinberg.de> | 2017-09-04 12:00:00 +0200 |
---|---|---|
committer | Martin Burnicki <martin.burnicki@meinberg.de> | 2017-09-04 12:00:00 +0200 |
commit | f17a858507f59c68eaff942e9dda9d37906e5d4b (patch) | |
tree | 31155703ff0bc4727420eede6984dbd42759a8b6 | |
parent | 5321b64b41aa3d070eb7f028a0adfb2d488404f4 (diff) | |
download | mbgtools-nbsd-f17a858507f59c68eaff942e9dda9d37906e5d4b.tar.gz mbgtools-nbsd-f17a858507f59c68eaff942e9dda9d37906e5d4b.zip |
Add scripts 99-mbgclock and installautonodecreate.sh
Submitted by Frank Kardel.
-rwxr-xr-x | mbgclock/99-mbgclock | 103 | ||||
-rwxr-xr-x | mbgclock/installautonodecreate.sh | 34 |
2 files changed, 137 insertions, 0 deletions
diff --git a/mbgclock/99-mbgclock b/mbgclock/99-mbgclock new file mode 100755 index 0000000..044a6fd --- /dev/null +++ b/mbgclock/99-mbgclock @@ -0,0 +1,103 @@ +#!/bin/sh +# +# create device nodes for mbgclock module +# +# will create new nodes with defaults below +# will keep user, group mode if a character device node with the name already +# exists but has the wrong major, minor numbers +# +# copyright 2017 +# +RMNODE=: # ignore deletions for now - to activate replace : with /bin/rm +STAT=/usr/bin/stat +EXPR=/bin/expr +RM=/bin/rm +LOGGER=/usr/bin/logger +MKNOD=/sbin/mknod + +MBGSTATUS=: +if type mbgstatus > /dev/null 2>&1; then + MBGSTATUS=mbgstatus # possibly use +fi + +logprio=daemon.info +drvname=mbgclock +defaultmode=0644 +defaultuser=root +defaultgroup=wheel +drvmajor=`$MKNOD -l $drvname | awk '{ print $NF; }'` +script=${0##/} + +# functions + +drvmbgclock() { + _op=$1 + _drv=$2 + _f="/dev/$_drv" + _i=${2##$drvname} + + case "$_op" in + device-attach) + # remove non character devices unconditionally + if [ -e "$_f" -a ! -c "$_f" ]; then + $RM -f "$_f" + fi + user=$defaultuser + group=$defaultgroup + mode=$defaultmode + if [ -c "$_f" ]; then + if eval `$STAT -s "$_f"` && eval `$STAT -f 'major=%Hr minor=%Lr' "$_f"`; then + user="$st_uid" + group="$st_gid" + mode=`$EXPR "$st_mode" : '.*\\(....\\)'` + if [ "$major" -eq "$drvmajor" -a "$minor" -eq "$_i" ]; then + $LOGGER -t $script -p $logprio "Node $_f has correct major $drvmajor and minor $_i" + else + $RM -f "$_f" + fi + fi + fi + + if [ -c "$_f" ] || $MKNOD -u "$user" -g "$group" -m "$mode" "$_f" c "$drvmajor" "$_i"; then + $LOGGER -t $script -p $logprio "Node for $_drv: `ls -l $_f`" + if $MBGSTATUS "$_f" > /dev/null 2>&1; then + $LOGGER -t $script -p $logprio `$MBGSTATUS "$_f"` + fi + else + $LOGGER -t $script -p $logprio "Failed to create $_f: $?" + return 1 + fi + return 0 + ;; + device-detach) + if $RMNODE -f "$_f" && [ ! -e "$_f" ]; then + $LOGGER -t $script -p $logprio "Node $_f removed" + fi + ;; + esac +} + +# script start + +if [ $# -lt 2 ]; then + echo "usage: $0 <op> <driver> [<driver>...]" + exit 1 +fi + +rc=0 +op=$1 +shift + +for drv +do + case "$drv" in + "$drvname"[0-9]*) + drvmbgclock "$op" "$drv" + ;; + *) + # logger -t $script -p $logprio "skipping $op device $drv" + ;; + esac +done + +exit $rc diff --git a/mbgclock/installautonodecreate.sh b/mbgclock/installautonodecreate.sh new file mode 100755 index 0000000..8431f51 --- /dev/null +++ b/mbgclock/installautonodecreate.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +mpath=/stand/`uname -m`/`uname -r`/modules/mbgclock/mbgclock.kmod + +if [ ! -f "$mpath" ]; then + echo "mbgclock.kmod is not installed in $mpath - install mbgclock.kmod there" + exit 1 +fi + +if [ -d /libexec/devpubd-hooks ]; then + echo "Copying 99-mbgclock to /libexec/devpubd-hooks" + + cp 99-mbgclock /libexec/devpubd-hooks + + if egrep -q '^[ ]*mbgclock[ ]*$' /etc/modules.conf; then + echo "mbgclock module already present in /etc/modules.conf" + else + echo "Enable loading of mbgclock.kmod at boot in /etc/modules.conf" + echo mbgclock >> /etc/modules.conf + fi + + if egrep -qi '^[ ]*devpubd=yes' /etc/rc.conf; then + echo "devpubd is enabled - fine" + else if egrep -qi '^[ ]*devpubd=' /etc/rc.conf; then + echo "devpubd seems explicitly disabled" + echo "check /etc/rc.conf and enable devpubd for automatic device node creation" + else + echo "enabling devpubd in /etc/rc.conf" + echo "devpubd=YES # enable for Meinberg mbgclock module on `date`" >> /etc/rc.conf + fi + fi +else + echo "devpubd does not seem to exist on this system" +fi |