summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Burnicki <martin.burnicki@meinberg.de>2017-09-04 12:00:00 +0200
committerMartin Burnicki <martin.burnicki@meinberg.de>2017-09-04 12:00:00 +0200
commitf17a858507f59c68eaff942e9dda9d37906e5d4b (patch)
tree31155703ff0bc4727420eede6984dbd42759a8b6
parent5321b64b41aa3d070eb7f028a0adfb2d488404f4 (diff)
downloadmbgtools-nbsd-f17a858507f59c68eaff942e9dda9d37906e5d4b.tar.gz
mbgtools-nbsd-f17a858507f59c68eaff942e9dda9d37906e5d4b.zip
Add scripts 99-mbgclock and installautonodecreate.sh
Submitted by Frank Kardel.
-rwxr-xr-xmbgclock/99-mbgclock103
-rwxr-xr-xmbgclock/installautonodecreate.sh34
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