[Initng-svn] r3627 - initng-ifiles/trunk
svn at initng.thinktux.net
svn at initng.thinktux.net
Sun Apr 2 13:06:12 CEST 2006
Author: deac
Date: Sun Apr 2 13:06:11 2006
New Revision: 3627
Modified:
initng-ifiles/trunk/Makefile.am
initng-ifiles/trunk/gen_system_runlevel
Log:
new gen_system_runlevel
Modified: initng-ifiles/trunk/Makefile.am
==============================================================================
--- initng-ifiles/trunk/Makefile.am (original)
+++ initng-ifiles/trunk/Makefile.am Sun Apr 2 13:06:11 2006
@@ -13,7 +13,7 @@
install-data-hook:
if GEN_RUNLEVEL
- $(top_srcdir)/gen_system_runlevel $(DESTDIR)
+ $(top_srcdir)/gen_system_runlevel -all -destdir="$(DESTDIR)"
endif
@echo
@echo "To make sure, initng uses the freshly installed ifiles, run:"
Modified: initng-ifiles/trunk/gen_system_runlevel
==============================================================================
--- initng-ifiles/trunk/gen_system_runlevel (original)
+++ initng-ifiles/trunk/gen_system_runlevel Sun Apr 2 13:06:11 2006
@@ -1,22 +1,32 @@
#!/bin/sh
add_service_to_list() {
- echo "Add Service ${2} to list ${1}" >&2
- echo "${2}" >>"${CONFDIR}/${1}"
+ echo "Add Service ${1}" >&2
+ echo "${1}"
}
add_services_to_list() {
list="${1}"
shift
- echo "Add Services ${*} to list ${list}"
for s
+ do add_service_to_list "${list}" "${s}"
+ done
+}
+
+# something like which, but simplier
+find_exe() {
+ for p in ${search_path}
do
- echo "${s}"
- done >>"${CONFDIR}/${list}"
+ if [ -e "${p}/${1}" ]
+ then
+ return 0
+ fi
+ done
+ return 1
}
-#This function works fine on Fedora. Feel free to use it, just don't
-#sabotage it ;-)
+# This function works fine on Fedora. Feel free to use it, just don't
+# sabotage it ;-)
get_default_sysvinit_runlevel() {
if [ -f /etc/inittab ]
then
@@ -26,106 +36,111 @@
fi
}
-#See comment above
-#Usage: Send sysvinit runlevel as first argument. The function will scan through
-#the runlevel and add all started services to initng's runlevels (depending
-#on the second argument, which is normally "default" or "system". The third
-#argument is the directory in which to check if the initng service exists,
-#this would normally be "daemon" or "system"
+# See comment above
+# Usage:
+# Send sysvinit runlevel as first argument. The function will scan through
+# the runlevel and add all started services to initng's runlevels (depending
+# on the second argument, which is normally "default" or "system". The third
+# argument is the directory in which to check if the initng service exists,
+# this would normally be "daemon" or "system"
copy_sysvinit_services() {
- if [ -d "/etc/rc${1}.d" ]
+ if [ -d "/etc/rc${2}.d" ]
then
- for i in /etc/rc${1}.d/S*
+ for i in /etc/rc${2}.d/S*
do
- sname=`basename $i`
+ sname=`basename ${i}`
sname=${sname##S[0-9][0-9]}
- if [ -f "/etc/initng/${3}/${sname}.i" ]
- then
- grep "${3}/${sname}" "${CONFDIR}/${2}" >/dev/null && \
- add_service_to_list "${2}" "${3}/${sname}"
- fi
+ [ -f "/etc/initng/${1}/${sname}.i" ] && \
+ echo "${1}/${sname}"
done
fi
}
-#On what distro's does this function do anything good? On Fedora it's just crap...
+copy_gentoo_services() {
+ for s in /etc/runlevels/${2}/*
+ do
+ [ -f "/etc/initng/${1}/${s}.i" ] && \
+ echo "${1}/${s}"
+ done
+}
+
+# On what distro's does this function do anything good?
+# On Fedora it's just crap...
check_and_add() {
- [ -f /etc/fedora-release ] && return 0
+ [ "${dist}" = fedora ] && return 0
TARGET=""
- ls /etc/rc2.d/S*${1}* >/dev/null 2>&1 TARGET="${2}"
- ls /etc/runlevels/*/*${1}* >/dev/null 2>&1 && TARGET="${2}"
+ ls /etc/rc2.d/S*${2}* >/dev/null 2>&1 TARGET="${1}"
+ ls /etc/runlevels/*/*${2}* >/dev/null 2>&1 && TARGET="${1}"
- if [ "$TARGET" ]
- then
- add_service_to_list "${3}" "${2}"
- return 1
- fi
- return 0
+ echo "${TARGET}"
}
gen_system() {
- rm "${CONFDIR}/system.virtual" 2>/dev/null
- add_services_to_list system.virtual system/udev system/clock \
- system/hostname system/urandom system/usb
+ local services="system/udev system/clock \
+ system/hostname system/urandom system/usb"
- [ -f /etc/fedora-release ] && \
- add_services_to_list system.virtual system/audit system/anacron
+ [ fedora = "${dist}" ] && \
+ services="${services} system/audit system/anacron"
if [ \( -x /usr/sbin/readahead -o -x /sbin/readahead \) -a -e /etc/readahead ]
then
- add_service_to_list system.virtual system/readahead
- echo "NOTE, if you have /usr mounted on another partition:"
- echo " cp /usr/sbin/readahead /sbin/readahead"
+ services="${services} system/readahead"
+ echo "NOTE, if you have /usr mounted on another partition:" >&2
+ echo " cp /usr/sbin/readahead /sbin/readahead" >&2
fi
- [ -e /etc/raidtab ] && add_service_to_list system.virtual system/sraid
+ [ -e /etc/raidtab ] && services="${services} system/sraid"
if [ -f /etc/debian_version ]
then
- add_service_to_list system.virtual "system/console-screen"
+ services="${services} system/console-screen"
[ -x /etc/init.d/ifupdown ] && \
- add_service_to_list system.virtual system/ifupdown-debian
+ services="${services} system/ifupdown-debian"
else
- add_service_to_list system.virtual system/consolefont
+ services="${services} system/consolefont"
fi
- ## Getty:
- if which agetty
- then
- add_service_to_list system.virtual "daemon/agetty"
- elif which getty
- then
- add_service_to_list system.virtual "daemon/getty"
- elif which mingetty
+ # Getty:
+ if find_exe agetty
+ then services="${services} daemon/agetty"
+ elif find_exe getty
+ then services="${services} daemon/getty"
+ elif find_exe mingetty
+ then services="${services} daemon/mingetty"
+ else
+ echo "Failed to find getty/agetty/mingetty, you must set that " \
+ "manually in /etc/initng/system.virtual" >&2
+ fi
+
+ if [ "${dist}" = gentoo ]
then
- add_service_to_list system.virtual "daemon/mingetty"
+ copy_gentoo_services system boot
else
- echo "Failed to find getty/agetty/mingetty, you must set that manually in /etc/initng/system.virtual"
+ get_default_sysvinit_runlevel
+ copy_sysvinit_services ${?} system.virtual system
fi
- get_default_sysvinit_runlevel
- copy_sysvinit_services ${?} "system.virtual" "system"
+ echo ${services} | tr ' ' '\n' | sort -u
}
gen_default() {
- add_service_to_list default.runlevel system
+ services="${services} system"
- #Add default.runlevel services for Fedora
- if [ -f /etc/fedora-release ]
- then
- add_services_to_list default.runlevel \
- daemon/dcron daemon/hald daemon/klogd daemon/portmap
+ # Add ${1} services for Fedora
+ case "${dist}" in
+ fedora)
+ services="${services} daemon/dcron daemon/hald daemon/klogd daemon/portmap"
- #Check network interfaces
+ # Check network interfaces
for i in $(ls /etc/sysconfig/network-scripts/ifcfg* | \
LANG=C sed -e '/\(ifcfg-lo\|rpmsave\|:\|rpmorig\|rpmnew\)/d' \
-e '/\(~\|\.bak\)$/d')
do
- if grep "ONBOOT=yes" "${i}" > /dev/null
+ if grep "ONBOOT=yes" "${i}" >/dev/null
then
i=$(basename "${i}")
- add_service_to_list default.runlevel "net/${i#ifcfg-}"
+ services="${services} net/${i#ifcfg-}"
fi
done
@@ -135,20 +150,19 @@
[ "${selinuxfs}" -a "`cat /proc/self/attr/current`" != 'kernel' \
-a -r "${selinuxfs}/enforce" \
-a "`cat ${selinuxfs}/enforce`" -eq 1 ] && \
- add_services_to_list default.runlevel \
- system/selinux/dev system/selinux/relabel
+ services="${services} system/selinux/dev system/selinux/relabel"
- #Below is because dm isn't started as SysVinit service in fedora :-/
+ # Below is because dm isn't started as SysVinit service in fedora :-/
if get_default_sysvinit_runlevel
then
preferred=
if [ -f /etc/sysconfig/desktop ]
then
. /etc/sysconfig/desktop
- if [ "${DISPLAYMANAGER}" = GNOME ] && which gdm
+ if [ "${DISPLAYMANAGER}" = GNOME ] && find_exe gdm >/dev/null
then
preferred=gdm
- elif [ "${DISPLAYMANAGER}" = KDE ] && which kdm
+ elif [ "${DISPLAYMANAGER}" = KDE ] && find_exe kdm >/dev/null
then
preferred=kdm
elif [ -n "${DISPLAYMANAGER}" ]
@@ -157,127 +171,208 @@
fi
fi
[ "${preferred}" ] || preferred=xdm
- add_service_to_list default.runlevel "daemon/${preferred}"
+ services="${services} daemon/${preferred}"
fi
- fi
-
- #Add the correct dm for Debian/Ubuntu
- if [ -f /etc/debian_version ]
- then
+ ;;
+ # Add the
+ gentoo)
+ ;;
+ # Add the correct dm for Debian/Ubuntu
+ debian)
dm=`sed -ne 's:^/usr/bin/::p' /etc/X11/default-display-manager`
case "${dm}" in
- gdm) add_service_to_list default.runlevel daemon/gdm ;;
- kdm) add_service_to_list default.runlevel daemon/kdm ;;
- xdm) add_service_to_list default.runlevel daemon/xdm ;;
+ gdm) services="${services} daemon/gdm" ;;
+ kdm) services="${services} daemon/kdm" ;;
+ xdm) services="${services} daemon/xdm" ;;
esac
- else
- check_and_add gdm daemon/gdm default.runlevel
- check_and_add kdm daemon/kdm default.runlevel
- check_and_add xdm daemon/xdm default.runlevel
- fi
-
- check_and_add ssh daemon/sshd default.runlevel
- check_and_add samba daemon/samba default.runlevel
+ ;;
+ *)
+ services="${services}
+ $(check_and_add daemon/gdm gdm)
+ $(check_and_add daemon/kdm kdm)
+ $(check_and_add daemon/xdm xdm)"
+ ;;
+ esac
+
+ services="${serices}
+ $(check_and_add daemon/sshd ssh)
+ $(check_and_add daemon/samba samba)"
- #add acpid
- which acpid && add_service_to_list default.runlevel daemon/acpid
+ # add acpid
+ find_exe acpid >/dev/null && services="${services} daemon/acpid"
- #add dbus
- which dbus-daemon && add_service_to_list default.runlevel daemon/dbus
+ # add dbus
+ find_exe dbus-daemon >/dev/null && services="${services} daemon/dbus"
# add hald
ls /etc/dbus*/event.d/*hal* >/dev/null 2>&1 && \
- add_service_to_list default.runlevel daemon/hald
+ services="${services} daemon/hald"
# Add cron
- if which cron
+ if find_exe cron
then
- check_and_add cron daemon/vixie-cron default.runlevel
- elif which dcron
+ services="${services} $(check_and_add daemon/vixie-cron cron)"
+ elif find_exe dcron
then
- check_and_add cron daemon/dcron default.runlevel
+ services="${services} $(check_and_add daemon/dcron cron)"
fi
# Networks thru ifplugd
- which ifplugd && \
- add_service_to_list default.runlevel daemon/ifplugd
- if [ -f /etc/debian_version ]
+ find_exe ifplugd && \
+ services="${services} daemon/ifplugd"
+ if [ "${dist}" = debian ]
then
- add_service_to_list default.runlevel net/all
- elif [ ! -f /etc/fedora-release ]
+ services="${services} net/all"
+ elif [ ! "${dist}" = fedora ]
then
- add_service_to_list default.runlevel net/eth0
+ services="${services} net/eth0"
fi
# Alsasound
[ -d /proc/asound ] && \
- add_service_to_list default.runlevel system/alsasound
+ services="${services} system/alsasound"
+ if echo "${services}" | grep -q 'system/alsasound'
+ then
+ echo ${services} | grep -q 'system/coldplug' ||
+ services="${services} system/alsasound/cards"
+ services="${services} system/alsasound/mixerstate"
+ fi
# Speed freq.
[ -d /sys/devices/system/cpu/cpu0/cpufreq ] && \
- add_service_to_list default.runlevel system/speedstep
+ services="${services} system/speedstep"
# Laptop Mode (Less hardrive on battery)
- if which laptop-mode || which laptop_mode
- then
- add_service_to_list default.runlevel system/laptop-mode
+ if find_exe laptop-mode || find_exe laptop_mode
+ then services="${services} system/laptop-mode"
fi
- #Syslogd
- if which syslog-ng >/dev/null
- then
- add_service_to_list default.runlevel daemon/syslog-ng
- elif which metalog >/dev/null
- then
- add_service_to_list default.runlevel daemon/metalog
- elif which syslogd >/dev/null
- then
- add_service_to_list default.runlevel daemon/syslogd
+ # Syslogd
+ if find_exe syslog-ng >/dev/null
+ then services="${services} daemon/syslog-ng"
+ elif find_exe metalog >/dev/null
+ then services="${services} daemon/metalog"
+ elif find_exe syslogd >/dev/null
+ then services="${services} daemon/syslogd"
fi
# These calls SHOULD work on every distro, I've just tested it on Fedora
# this far. If/when this works on all other thistros, we should be able
# to obsolete some of the crap above. /Daniel
- if [ ! -f /etc/debian_version ]
+ if ! [ "${dist}" = debian -o "${dist}" = gentoo ]
then
get_default_sysvinit_runlevel
- copy_sysvinit_services ${?} default.runlevel daemon
+ copy_sysvinit_services ${?} daemon
+ fi
+
+ echo "${services}" | sed -e 's/[ ][ ]*/\n/g' | grep -v '^$' | sort -u
+}
+
+gen_gentoo_list() {
+ echo 'Not implemented' >&2
+ return 1
+}
+
+create_list() {
+ if
+ if [ "${overwrite}" ]
+ then true
+ else [ \! -e "${CONFDIR}/${1}" ]
+ fi
+ then
+ echo "Automatically generating ${1}" >&2
+ if [ "${1}" = system.virtual ]
+ then gen_system >"${CONFDIR}/${1}"
+ elif [ "${1}" = default.runlevel ]
+ then gen_default >"${CONFDIR}/${1}"
+ elif [ "${dist}" = gentoo ]
+ then gen_gentoo_list ${1}
+ else return 1
+ fi
+ else
+ echo "${1} already exists, skipping..."
+ return 1
fi
}
-export overwrite=
-if [ "${1}" = "--overwrite" ]
-then
- export overwrite=true
+overwrite=
+all=
+search_path=
+dist=
+# DESTDIR=${DESTDIR}
+
+[ -e /etc/gentoo-release ] && dist=gentoo
+[ -e /etc/debian_version ] && dist=debian
+[ -e /etc/fedora-release ] && dist=fedora
+
+while [ ${#} -gt 0 ]
+do
+ case "${1}" in
+ -all) all=true ;;
+ -overwrite) overwrite=true ;;
+ -dist=*) dist=${1#-dist=} ;;
+ -dist)
+ shift
+ dist=${1}
+ ;;
+ -path=*) search_path=${1#-path=} ;;
+ -path)
+ shift
+ search_path=${1}
+ ;;
+ -destdir=*) DESTDIR=${1#-destdir=} ;;
+ -destdir)
+ shift
+ DESTDIR=${1}
+ ;;
+ -confdir=*) CONFDIR=${1#-confdir=} ;;
+ -confdir)
+ shift
+ CONFDIR=${1}
+ ;;
+ -help)
+ exe=$(basename "${0}")
+ echo 'USAGE:' >&2
+ echo " ${exe} [-overwrite] [-path=PATH] [-destdir=PATH] [-confdir=PATH] -all" >&2
+ echo " ${exe} [-overwrite] [-path=PATH] [-destdir=PATH] [-confdir=PATH] FILE" >&2
+ echo " ${exe} -help" >&2
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *) break ;;
+ esac
shift
-fi
-# Find and set DESTDIR
+done
-[ "${DESTDIR}" ] || export DESTDIR="${1}"
-export CONFDIR="${DESTDIR}/etc/initng"
+[ "${CONFDIR}" ] || CONFDIR="${DESTDIR}/etc/initng"
mkdir -p "${CONFDIR}"
-echo "Automatically generating system.virtual and default.runlevel"
-
-if if [ "${overwrite}" ]
- then true
- else [ -e "${CONFDIR}/system.virtual" ]
- fi
-then gen_system
-else
- skipped=true
- echo 'system.virtual already exists, skipping...'
+# for find_exe
+[ "${search_path}" ] || search_path=$(echo $(
+ for dir in $()/bin /sbin /usr/bin /usr/sbin /usr/kde/\*/bin \
+ /usr/kde/\*/sbin /opt/bin /opt/sbin /opt/\*/bin /opt/\*/sbin
+ do [ "$(echo ${dir})" ] && echo ${dir}
+ done | grep -v '*')
+)
+
+if [ "${all}" ]
+then
+ if [ "${dist}" = gentoo ]
+ then
+ set -- $({
+ ls --color=none /etc/runlevels | sed -e 's/$/.runlevel/'
+ echo system.virtual
+ } | grep -v boot.runlevel | sort -u)
+ else set -- system.virtual default.runlevel
+ fi
fi
-if if [ "${overwrite}" ]
- then true
- else [ -e "${CONFDIR}/default.runlevel" ]
- fi
-then gen_default
-else
- skipped=true
- echo 'default.runlevel already exists, skipping...'
-fi
+for l
+do create_list ${l}
+done
[ "${skipped}" ] && \
echo "Runlevels already exists, force overwrite with: '${0}' --overwrite"
More information about the Initng-svn
mailing list