From b0a83e81230c8a6e83c139307079b33c1cd9441f Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 11 Jun 2009 13:25:47 +0000
Subject: [PATCH] core/busybox-initscripts: added klogd script and mdev stuff

we split the syslogd and klogd into different scripts since klog should
not be run in vserver while syslog should.

the mdev config and helper scripts were moved from alpine-baselayout too
---
 core/busybox-initscripts/APKBUILD     |  26 ++++---
 core/busybox-initscripts/dvbdev       |  18 +++++
 core/busybox-initscripts/ide_links    |  23 ++++++
 core/busybox-initscripts/klogd.confd  |   1 +
 core/busybox-initscripts/klogd.initd  |  20 ++++++
 core/busybox-initscripts/mdev.conf    | 100 ++++++++++++++++++++++++++
 core/busybox-initscripts/syslog.confd |   1 -
 core/busybox-initscripts/syslog.initd |   7 +-
 core/busybox-initscripts/usbdev       |  62 ++++++++++++++++
 core/busybox-initscripts/usbdisk_link |  34 +++++++++
 10 files changed, 279 insertions(+), 13 deletions(-)
 create mode 100644 core/busybox-initscripts/dvbdev
 create mode 100644 core/busybox-initscripts/ide_links
 create mode 100644 core/busybox-initscripts/klogd.confd
 create mode 100644 core/busybox-initscripts/klogd.initd
 create mode 100644 core/busybox-initscripts/mdev.conf
 create mode 100644 core/busybox-initscripts/usbdev
 create mode 100644 core/busybox-initscripts/usbdisk_link

diff --git a/core/busybox-initscripts/APKBUILD b/core/busybox-initscripts/APKBUILD
index 2d8557ba4f0b..10a1458476ec 100644
--- a/core/busybox-initscripts/APKBUILD
+++ b/core/busybox-initscripts/APKBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Natanael Copa <ncopa@alpinelinux.org>
 pkgname=busybox-initscripts
 pkgver=2.0
-pkgrel=0
+pkgrel=1
 pkgdesc="Init scripts for busybox daemons"
 url="http://git.alpinelinux.org/cgit/aports/tree/core/busybox-initscripts"
 license="GPL-2"
@@ -10,33 +10,43 @@ depends="busybox"
 makedepends=
 install=
 subpackages=
-source="cron.initd dnsd.initd httpd.initd inetd.initd mdev-mount.initd
-	mdev.initd rdate.initd syslog.initd watchdog.initd
-	cron.confd rdate.confd syslog.confd watchdog.confd"
+source="cron.initd dnsd.initd httpd.initd inetd.initd klogd.initd 
+	mdev-mount.initd mdev.initd rdate.initd syslog.initd watchdog.initd
+	cron.confd klogd.confd rdate.confd syslog.confd watchdog.confd
+	mdev.conf dvbdev ide_links usbdev usbdisk_link"
 
 build() {
 	local i
 	cd "$srcdir"
 
-	mkdir -p "$pkgdir"/etc/conf.d "$pkgdir"/etc/init.d 
+	mkdir -p "$pkgdir"/etc/conf.d "$pkgdir"/etc/init.d "$pkgdir"/lib/mdev
 	for i in *.initd; do
 		install -m755 "$srcdir"/$i "$pkgdir"/etc/init.d/${i%.*} || return 1
 	done
 	for i in *.confd; do
 		install -m644 "$srcdir"/$i "$pkgdir"/etc/conf.d/${i%.*} || return 1
 	done
+	install -m644 mdev.conf "$pkgdir"/etc
+	install -m755 dvbdev ide_links usbdev usbdisk_link "$pkgdir"/lib/mdev/
 }
 
 md5sums="45b4ca78fad54f56018b9a2e9358dc68  cron.initd
 3af526f4de1a607f7932a15f7c8e8eb1  dnsd.initd
 f7daf05f9984aa398fdbd3fe02e82678  httpd.initd
 dad8e381142dfb42483de324aff4cf28  inetd.initd
+e22077bfe7b8b0fe7c06cfe208e68dca  klogd.initd
 823308d5691bd6ece04a040b23925d40  mdev-mount.initd
 ef3e93fe17964dd600364b1340654b5b  mdev.initd
 533288e7df1fdfc029b1048b8e6c770f  rdate.initd
-b1bd58e5580d6d2bd88bd6cfb0ae8876  syslog.initd
+b5b23dd06cea120bd8d850b54bca0b59  syslog.initd
 254186e513ff9fb9ede6a2e92257b247  watchdog.initd
 8ddb8d040c9c7a32c63039a2c80ff496  cron.confd
+60bc14cc3163d76f41bcc93dc0f9984b  klogd.confd
 22adbf155ffc4595206ded6daad07812  rdate.confd
-69d83e8af870c419847b81bee1ccd2d9  syslog.confd
-0bb55dde32f5e119111fa4938daaef3d  watchdog.confd"
+77fb31a75511247bf4e3430565a276bc  syslog.confd
+0bb55dde32f5e119111fa4938daaef3d  watchdog.confd
+022b670c549e402573797cc72fa12032  mdev.conf
+ad1556961294e4aa2abca6be52138b7c  dvbdev
+5c8725b4cbdeda23b00f08124a0d20bf  ide_links
+1acfd58dfd1cf324c90ca3a3be519510  usbdev
+30b0c85956b6701caf55309a17e537f6  usbdisk_link"
diff --git a/core/busybox-initscripts/dvbdev b/core/busybox-initscripts/dvbdev
new file mode 100644
index 000000000000..f0186c176cd8
--- /dev/null
+++ b/core/busybox-initscripts/dvbdev
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# MDEV=dvb0.demux1 -> ADAPTER=dvb0 -> N=0
+ADAPTER=${MDEV%.*}
+N=${ADAPTER#dvb}
+# MDEV=dvb0.demux1 -> DEVB_DEV=demux1
+DVB_DEV=${MDEV#*.}
+
+case "$ACTION" in
+	add|"")
+		mkdir -p dvb/adapter${N}
+		mv ${MDEV} dvb/adapter${N}/${DVB_DEV}
+		;;
+	remove)
+		rm -f dvb/adapter${N}/${DVB_DEV}
+		rmdir dvb/adapter${N} 2>/dev/null
+		rmdir dvb/ 2>/dev/null
+esac
diff --git a/core/busybox-initscripts/ide_links b/core/busybox-initscripts/ide_links
new file mode 100644
index 000000000000..be0c95aa9c0e
--- /dev/null
+++ b/core/busybox-initscripts/ide_links
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+[ -f /proc/ide/$MDEV/media ] || exit
+
+media=`cat /proc/ide/$MDEV/media`
+for i in $media $media[0-9]* ; do
+	if [ "`readlink $i 2>/dev/null`" = $MDEV ] ; then
+		LINK=$i
+		break
+	fi
+done
+
+# link exist, remove if necessary and exit
+if [ "$LINK" ] ; then
+	[ "$ACTION" = remove ] && rm $LINK
+	exit
+fi
+
+# create a link
+num=`ls $media[0-9]* 2>/dev/null | wc -l`
+ln -sf $MDEV "$media`echo $num`"
+[ -e "$media" ] || ln -sf $MDEV "$media"
+
diff --git a/core/busybox-initscripts/klogd.confd b/core/busybox-initscripts/klogd.confd
new file mode 100644
index 000000000000..100deedaac53
--- /dev/null
+++ b/core/busybox-initscripts/klogd.confd
@@ -0,0 +1 @@
+KLOGD_OPTS=""
diff --git a/core/busybox-initscripts/klogd.initd b/core/busybox-initscripts/klogd.initd
new file mode 100644
index 000000000000..5cf7e6fd1684
--- /dev/null
+++ b/core/busybox-initscripts/klogd.initd
@@ -0,0 +1,20 @@
+#!/sbin/runscript
+
+depend() {
+	need clock hostname
+	provide logger
+	keyword novserver
+}
+
+start() {
+	ebegin "Starting busybox kernel logging"
+	start-stop-daemon --start --exec /sbin/klogd -- ${KLOGD_OPTS}
+	eend $?
+}
+
+stop () {
+	ebegin "Stopping busybox kernel logging"
+	start-stop-daemon --stop --exec /sbin/klogd
+	eend $?
+}
+
diff --git a/core/busybox-initscripts/mdev.conf b/core/busybox-initscripts/mdev.conf
new file mode 100644
index 000000000000..6ee65a20e54b
--- /dev/null
+++ b/core/busybox-initscripts/mdev.conf
@@ -0,0 +1,100 @@
+# 
+# This is a sample mdev.conf.
+#
+
+# Devices:
+# Syntax: %s %d:%d %s
+# devices user:group mode
+
+# null does already exist; therefore ownership has to be changed with command
+null	root:root 0666	@chmod 666 $MDEV
+zero	root:root 0666
+grsec	root:root 0660
+full	root:root 0666
+
+random	root:root 0666
+urandom	root:root 0444
+hwrandom root:root 0660
+
+# console does already exist; therefore ownership has to be changed with command
+console	root:tty 0600	@chmod 600 $MDEV && mkdir -p vc && ln -sf ../$MDEV vc/0
+fd0	root:floppy 0660
+kmem	root:root 0640
+mem	root:root 0640
+port	root:root 0640
+ptmx	root:tty 0666
+
+# ram.*
+ram([0-9]*)	root:disk 0660 >rd/%1
+loop([0-9]+)	root:disk 0660 >loop/
+sd[a-z].*	root:disk 0660 */lib/mdev/usbdisk_link
+hd[a-z][0-9]*	root:disk 0660 */lib/mdev/ide_links
+md[0-9]		root:disk 0660
+
+tty		root:tty 0666
+tty[0-9]	root:root 0600
+tty[0-9][0-9]	root:tty 0660
+ttyS[0-9]*	root:uucp 0660
+pty.*		root:tty 0660
+vcs[0-9]*	root:tty 0660
+vcsa[0-9]*	root:tty 0660
+
+
+ttyLTM[0-9]	root:dialout 0660 @ln -sf $MDEV modem
+ttySHSF[0-9]	root:dialout 0660 @ln -sf $MDEV modem
+slamr		root:dialout 0660 @ln -sf $MDEV slamr0
+slusb		root:dialout 0660 @ln -sf $MDEV slusb0
+fuse		root:root  0666
+
+# dri device
+card[0-9]	root:video 0660 =dri/
+
+# alsa sound devices and audio stuff
+pcm.*		root:audio 0660	=snd/
+control.*	root:audio 0660	=snd/
+midi.*		root:audio 0660	=snd/
+seq		root:audio 0660	=snd/
+timer		root:audio 0660	=snd/
+
+adsp		root:audio 0660 >sound/
+audio		root:audio 0660 >sound/
+dsp		root:audio 0660 >sound/
+mixer		root:audio 0660 >sound/
+sequencer.*	root:audio 0660 >sound/
+
+# misc stuff
+agpgart		root:root 0660  >misc/
+psaux		root:root 0660  >misc/
+rtc		root:root 0664  >misc/
+
+# input stuff
+event[0-9]+	root:root 0640 =input/
+mice		root:root 0640 =input/
+mouse[0-9]	root:root 0640 =input/
+ts[0-9]		root:root 0600 =input/
+
+# v4l stuff
+vbi[0-9]	root:video 0660 >v4l/
+video[0-9]	root:video 0660 >v4l/
+
+# dvb stuff
+dvb.*		root:video 0660 */lib/mdev/dvbdev
+
+# load drivers for usb devices
+usbdev[0-9].[0-9]	root:root 0660 */lib/mdev/usbdev
+usbdev[0-9].[0-9]_.*	root:root 0660
+
+# net devices
+tun[0-9]*	root:root 0600 =net/
+tap[0-9]*	root:root 0600 =net/
+
+# zaptel devices
+zap(.*)		root:dialout 0660 =zap/%1
+dahdi!(.*)	root:dialout 0660 =dahdi/%1
+
+# raid controllers
+cciss!(.*)	root:disk 0660 =cciss/%1
+ida!(.*)	root:disk 0660 =ida/%1
+rd!(.*)		root:disk 0660 =rd/%1
+
+sr[0-9]		root:cdrom 0660 >cdrom
diff --git a/core/busybox-initscripts/syslog.confd b/core/busybox-initscripts/syslog.confd
index 14c39c769008..5f23b819d5e3 100644
--- a/core/busybox-initscripts/syslog.confd
+++ b/core/busybox-initscripts/syslog.confd
@@ -1,2 +1 @@
 SYSLOGD_OPTS=""
-KLOGD_OPTS=""
diff --git a/core/busybox-initscripts/syslog.initd b/core/busybox-initscripts/syslog.initd
index 63ef5fc69f06..390cd6def339 100644
--- a/core/busybox-initscripts/syslog.initd
+++ b/core/busybox-initscripts/syslog.initd
@@ -1,20 +1,19 @@
 #!/sbin/runscript
 
 depend() {
+	need clock hostname klogd
 	provide logger
 }
 
 start() {
 	ebegin "Starting busybox system logging"
-	start-stop-daemon --start --exec /usr/sbin/klogd -- ${KLOGD_OPTS}
-	start-stop-daemon --start --exec /usr/sbin/syslogd -- ${SYSLOGD_OPTS}
+	start-stop-daemon --start --exec /sbin/syslogd -- ${SYSLOGD_OPTS}
 	eend $?
 }
 
 stop () {
 	ebegin "Stopping busybox system logging"
-	start-stop-daemon --stop --exec /usr/sbin/klogd
-	start-stop-daemon --stop --exec /usr/sbin/syslogd
+	start-stop-daemon --stop --exec /sbin/syslogd
 	eend $?
 }
 
diff --git a/core/busybox-initscripts/usbdev b/core/busybox-initscripts/usbdev
new file mode 100644
index 000000000000..b1aff296cd2e
--- /dev/null
+++ b/core/busybox-initscripts/usbdev
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+# script is buggy; until patched just do exit 0
+#exit 0
+
+# add zeros to device or bus
+add_zeros () {
+	case "$(echo $1 | wc -L)" in
+		1)	echo "00$1" ;;
+		2)	echo "0$1" ;;
+		*)	echo "$1"
+	esac
+	exit 0
+}
+
+
+# bus and device dirs in /sys
+local USB_PATH=$(echo $MDEV | sed -e 's/usbdev\([0-9]\).[0-9]/usb\1/')
+USB_PATH=$(find /sys/devices -type d -name "$USB_PATH")
+local USB_DEV_DIR=$(echo $MDEV | sed -e 's/usbdev\([0-9]\).\([0-9]\)/\1-\2/')
+
+# dir names in /dev
+local BUS=$(add_zeros $(echo $MDEV | sed -e 's/^usbdev\([0-9]\).[0-9]/\1/'))
+local USB_DEV=$(add_zeros $(echo $MDEV | sed -e 's/^usbdev[0-9].\([0-9]\)/\1/'))
+
+
+# try to load the proper driver for usb devices
+case "$ACTION" in
+	add|"")
+		# load usb bus driver
+		for i in $USB_PATH/*/modalias ; do
+			modprobe `cat $i` 2>/dev/null
+		done
+		# load usb device driver if existent
+		if [ -d $USB_PATH/$USB_DEV_DIR ]; then
+			for i in $USB_PATH/$USB_DEV_DIR/*/modalias ; do
+				modprobe `cat $i` 2>/dev/null
+			done
+		fi
+		# move usb device file
+		mkdir -p bus/usb/$BUS
+		mv $MDEV bus/usb/$BUS/$USB_DEV
+		;;
+	remove)
+		# unload device driver, if device dir is existent
+		if [ -d $USB_PATH/$USB_DEV_DIR ]; then
+			for i in $USB_PATH/$USB_DEV_DIR/*/modalias ; do
+				modprobe -r `cat $i` 2>/dev/null
+		done
+		fi
+		# unload usb bus driver. Does this make sense?
+		# what happens, if two usb devices are plugged in
+		# and one is removed?
+		for i in $USB_PATH/*/modalias ; do
+			modprobe -r `cat $i` 2>/dev/null
+		done
+		# remove device file and possible empty dirs
+		rm -f bus/usb/$BUS/$USB_DEV
+		rmdir bus/usb/$BUS/ 2>/dev/null
+		rmdir bus/usb/ 2>/dev/null
+		rmdir bus/ 2>/dev/null
+esac
diff --git a/core/busybox-initscripts/usbdisk_link b/core/busybox-initscripts/usbdisk_link
new file mode 100644
index 000000000000..750242bb5cfc
--- /dev/null
+++ b/core/busybox-initscripts/usbdisk_link
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# NOTE: since mdev -s only provide $MDEV, don't depend on any hotplug vars.
+
+current=$(readlink usbdisk)
+
+if [ "$current" = "$MDEV" ] && [ "$ACTION" = "remove" ]; then
+	rm -f usbdisk usba1 
+fi
+[ -n "$current" ] && exit
+
+if [ -e /sys/block/$MDEV ]; then
+	SYSDEV=$(readlink -f /sys/block/$MDEV/device)
+	# if /sys device path contains '/usb[0-9]' then we assume its usb
+	# also, if its an usb without partitions we require FAT
+	if [ "${SYSDEV##*/usb[0-9]}" != "$SYSDEV" ]; then
+		# do not create link if there is not FAT
+		dd if=/dev/$MDEV bs=512 count=1 2>/dev/null | strings | grep FAT >/dev/null || exit 0
+
+		ln -sf $MDEV usbdisk
+		# keep this for compat. people have it in fstab
+		ln -sf $MDEV usba1
+	fi
+
+elif [ -e /sys/block/*/$MDEV ] ; then
+	PARENT=$(dirname /sys/block/*/$MDEV)
+	SYSDEV=$(readlink -f $PARENT/device)
+	if [ "${SYSDEV##*/usb[0-9]}" != "$SYSDEV" ]; then
+		ln -sf $MDEV usbdisk
+		# keep this for compat. people have it in fstab
+		ln -sf $MDEV usba1
+	fi
+fi
+
-- 
GitLab