PROGRAM=/usr/sbin/cpqarrayd
RUNLEVEL=2
diff --git a/scripts/cronie/crond b/scripts/cronie/crond
new file mode 100755
index 0000000..201f609
--- /dev/null
+++ b/scripts/cronie/crond
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+. /etc/sysconfig/cronie
+
+PROGRAM=/usr/sbin/crond
+ARGS="$CRONIE_ARGS"
+RUNLEVEL=3
+PIDFILE=/var/run/crond.pid
+
+. /etc/init.d/smgl_init
diff --git a/scripts/cronie/cronie.conf b/scripts/cronie/cronie.conf
new file mode 100644
index 0000000..540dc4b
--- /dev/null
+++ b/scripts/cronie/cronie.conf
@@ -0,0 +1,3 @@
+# For the arguments and description see cron(8)
+
+CRONIE_ARGS=""
diff --git a/scripts/dbus/smgl-messagebus b/scripts/dbus/smgl-messagebus
index 073f159..8fa7b36 100755
--- a/scripts/dbus/smgl-messagebus
+++ b/scripts/dbus/smgl-messagebus
@@ -3,24 +3,33 @@
PROGRAM=/usr/bin/dbus-daemon
ARGS="--system"
RUNLEVEL=3
+NEEDS="+remote_fs"
PIDFILE=/var/run/dbus/pid
. /etc/init.d/smgl_init
start() {
echo "Starting system message bus..."
- mkdir -p /var/run/dbus
- if test ! -f $PIDFILE; then
- # don't use loadproc here, as that fails if some user is running
- # a session bus
- $PROGRAM $ARGS
- evaluate_retval
- echo "Creating dbus machine uuid..."
- /usr/bin/dbus-uuidgen --ensure
- evaluate_retval
- else
- print_status warning "$PIDFILE exists, messagebus is running or has
crashed"
+ mkdir -p $(dirname $PIDFILE)
+ # make sure there is actually a process there...
+ if [ -f $PIDFILE ]; then
+ echo "Found $PIDFILE doing extra checks..."
+ if ! ps ax | grep "dbus-daemon" | grep -q $(cat $PIDFILE) ; then
+ print_status warning "$PIDFILE exists, but messagebus is not running
under this PID"
+ echo "Attempting cleanup and new startup..."
+ rm -f $PIDFILE
+ else
+ echo "Seems to be running..."
+ return 0
+ fi
fi
+ # don't use loadproc here, as that fails if some user is running
+ # a session bus
+ $PROGRAM $ARGS
+ evaluate_retval
+ echo "Creating dbus machine uuid..."
+ /usr/bin/dbus-uuidgen --ensure
+ evaluate_retval
}
FB_DIR=/opt/firebird/bin
FB=fbserver
+if [[ ! -f $FB_DIR/$FB ]];then
+# 2.5 has a combined classic-super server using libfbembed.so
+ FB=fb_smp_server
+fi
# as of rc2, preferred method of stopping is to kill the process
PROGRAM=/bin/false
RUNLEVEL=DEV
@@ -26,21 +26,31 @@ start_devfs()
fi
}
-start_udev()
-{ (
- . /etc/udev/udev.conf
- # mount sysfs
- echo "Mounting sysfs at /sys"
- mount -n -t sysfs none /sys
- echo "Mounting ramfs at $udev_root"
- mount -n -t ramfs none $udev_root
- # create some needed stuff
- ln -s /proc/self/fd $udev_root/fd
+udev_mknodes()
+{
+ if [ ! -d $udev_root/fd ]; then
+ ln -fs /proc/self/fd $udev_root/fd
+ fi
ln -s /dev/fd/0 $udev_root/stdin
ln -s /dev/fd/1 $udev_root/stdout
ln -s /dev/fd/2 $udev_root/stderr
mkdir $udev_root/shm
mkdir $udev_root/pts
+}
+
+start_udev()
+{ (
+ . /etc/udev/udev.conf
+ echo "Checking if devtmpfs or ramfs is used for $udev_root ..."
+ if findmnt devtmpfs > /dev/null 2>&1; then
+ echo "devtmpfs is used for $udev_root"
+ else
+ echo "ramfs is used for $udev_root"
+ echo "Mounting ramfs at $udev_root"
+ mount -n -t ramfs none $udev_root
+ fi
+ # create some needed stuff
+ udev_mknodes
# strip out kernel sublevel and patchlevel so we can check against them
# since we don't support 1.x linux kernels then we don't have to check that
@@ -84,6 +94,52 @@ start_udev()
kill -USR1 1
) }
+start_static_udev()
+{ (
+ . /etc/udev/udev.conf
+ # create some needed stuff - and insist on it
+ udev_mknodes
+
+ # strip out kernel sublevel and patchlevel so we can check against them
+ # since we don't support 1.x linux kernels then we don't have to check that
+ PATCHLEVEL=$(uname -r | cut -d. -f2)
+ SUBLEVEL=$(uname -r | cut -d. -f3)
+ tmp=$(uname -r | cut -d. -f3 | sed 's/^[0-9]*//g')
+ SUBLEVEL=${SUBLEVEL/$tmp/}
+
+ # kernel 2.6.15-rc1 and higher don't use hotplug
+ if [ $SUBLEVEL -ge 15 -a $PATCHLEVEL -ge 6 ]; then
+ echo "don't need hotplug for this kernel"
+ builtin echo > /proc/sys/kernel/hotplug
+ else
+ # Now uses udevsend as the hotplug multiplexer
+ echo "Setting udevsend as hotplug agent"
+ sysctl -w kernel.hotplug="/sbin/udevsend" > /dev/null 2>&1
+ echo "Creating initial udev device nodes"
+ /sbin/udevstart
+ fi
+
+ if [ -f /etc/udev/udev.missing ]; then
+ echo "Processing /etc/udev/udev.missing"
+ cd /dev
+ while read line; do
+ if [ "${line:0:1}" == "#" ]; then continue; fi
+ for ((i=0; i<7; i++)); do
+ val[$i]=${line%%:*}
+ line=${line#*:}
+ done
+ if [ "${val[1]}" == "d" ]; then
+ mkdir -p ${val[0]}
+ else
+ mknod ${val[0]} ${val[1]} ${val[2]} ${val[3]}
+ fi
+ chmod ${val[4]} ${val[0]}
+ chown ${val[5]}:${val[6]} ${val[0]}
+ done < /etc/udev/udev.missing
+ cd /
+ fi
+) }
+
start_static()
{
exit 0
@@ -94,6 +150,12 @@ start()
# mount proc
echo "Mounting /proc"
mount -n -t proc proc /proc
+ # mount sys
+ echo "Mounting /sys"
+ mount -n -t sysfs sysfs /sys
+ # mount run
+ echo "Mounting /run"
+ mount -n -t tmpfs tmpfs /run
eval "start_$DEVICES"
}
diff --git a/scripts/init.d/devices.conf b/scripts/init.d/devices.conf
index 287f0cc..aefd80b 100644
--- a/scripts/init.d/devices.conf
+++ b/scripts/init.d/devices.conf
@@ -1,2 +1,2 @@
-# type of device management, "static", "devfs" or "udev"
+# type of device management, "static", "devfs", "udev" or "static_udev"
DEVICES=devfs
diff --git a/scripts/init.d/mountall.sh b/scripts/init.d/mountall.sh
index eead8c3..95954c3 100755
--- a/scripts/init.d/mountall.sh
+++ b/scripts/init.d/mountall.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
# vim:set ts=2 sw=2 et:
PROGRAM=/bin/false
@@ -26,7 +26,10 @@ function recursive_rm() {
. /etc/init.d/smgl_init
diff --git a/scripts/mpd/mpd.conf b/scripts/mpd/mpd.conf
index 2f6d22a..b14337c 100644
--- a/scripts/mpd/mpd.conf
+++ b/scripts/mpd/mpd.conf
@@ -1,245 +1,407 @@
# An example configuration file for MPD
# See the mpd.conf man page for a more detailed description of each
parameter.
+# Files and directories
#######################################################
+#
+# This setting controls the top directory which MPD will search to discover
the
+# available audio files and add them to the daemon's online database. This
+# setting defaults to the XDG directory, otherwise the music directory will
be
+# be disabled and audio files will only be accepted over ipc socket (using
+# file:// protocol) or streaming files over an accepted protocol.
+#
+#music_directory "~/music"
+#
+# This setting sets the MPD internal playlist directory. The purpose of this
+# directory is storage for playlists created by MPD. The server will use
+# playlist files not created by the server but only if they are in the MPD
+# format. This setting defaults to playlist saving being disabled.
+#
+#playlist_directory "~/.mpd/playlists"
+#
+# This setting sets the location of the MPD database. This file is used to
+# load the database at server start up and store the database while the
+# server is not up. This setting defaults to disabled which will allow
+# MPD to accept files over ipc socket (using file:// protocol) or streaming
+# files over an accepted protocol.
+#
+#db_file "~/.mpd/database"
+#
+# These settings are the locations for the daemon log files for the daemon.
+# These logs are great for troubleshooting, depending on your log_level
+# settings.
+#
+# The special value "syslog" makes MPD use the local syslog daemon. This
+# setting defaults to logging to syslog, otherwise logging is disabled.
+#
+#log_file "~/.mpd/log"
+#
+# This setting sets the location of the file which stores the process ID
+# for use of mpd --kill and some init scripts. This setting is disabled by
+# default and the pid file will not be stored.
+#
+#pid_file "~/.mpd/pid"
+#
+# This setting sets the location of the file which contains information about
+# most variables to get MPD back into the same general shape it was in before
+# it was brought down. This setting is disabled by default and the server
+# state will be reset on server start up.
+#
+#state_file "~/.mpd/state"
+#
+# The location of the sticker database. This is a database which
+# manages dynamic information attached to songs.
+#
+#sticker_file "~/.mpd/sticker.sql"
+#
+###############################################################################
-######################## OPTIONAL PATHS ########################
+
+# General music daemon options
################################################
+#
+# This setting specifies the user that MPD will run as. MPD should never run
as
+# root and you may use this setting to make MPD change its user ID after
+# initialization. This setting is disabled by default and MPD is run as the
+# current user.
#
-# If you wish to use mpd --kill to stop MPD, then you must
-# specify a file here in which to store MPD's process ID.
+#user "nobody"
#
-#pid_file "~/.mpd/mpd.pid"
+# This setting specifies the group that MPD will run as. If not specified
+# primary group of user specified with "user" setting will be used (if set).
+# This is useful if MPD needs to be a member of group such as "audio" to
+# have permission to use sound card.
#
-# If specified, MPD will save its current state (playlist,
-# current song, playing/paused, etc.) at exit. This will be
-# used to restore the session the next time it is run.
+#group "nogroup"
#
-#state_file "~/.mpd/mpdstate"
+# This setting sets the address for the daemon to listen on. Careful
attention
+# should be paid if this is assigned to anything other then the default, any.
+# This setting can deny access to control of the daemon.
#
-################################################################
+# For network
+#bind_to_address "any"
+#
+# And for Unix Socket
+#bind_to_address "~/.mpd/socket"
+#
+# This setting is the TCP port that is desired for the daemon to get assigned
+# to.
+#
+#port "6600"
+#
+# This setting controls the type of information which is logged. Available
+# setting arguments are "default", "secure" or "verbose". The "verbose"
setting
+# argument is recommended for troubleshooting, though can quickly stretch
+# available resources on limited hardware storage.
+#
+#log_level "default"
+#
+# If you have a problem with your MP3s ending abruptly it is recommended
that
+# you set this argument to "no" to attempt to fix the problem. If this solves
+# the problem, it is highly recommended to fix the MP3 files with vbrfix
+# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
+# point gapless MP3 playback can be enabled.
+#
+#gapless_mp3_playback "yes"
+#
+# This setting enables MPD to create playlists in a format usable by other
+# music players.
+#
+#save_absolute_paths_in_playlists "no"
+#
+# This setting defines a list of tag types that will be extracted during the
+# audio file discovery process. Optionally, 'comment' can be added to this
+# list.
+#
+#metadata_to_use
"artist,album,title,track,name,genre,date,composer,performer,disc"
+#
+# This setting enables automatic update of MPD's database when files in
+# music_directory are changed.
+#
+#auto_update "yes"
+#
+# Limit the depth of the directories being watched, 0 means only watch
+# the music directory itself. There is no limit by default.
+#
+#auto_update_depth "3"
+#
+###############################################################################
-######################## DAEMON OPTIONS ########################
+# Symbolic link behavior
######################################################
+#
+# If this setting is set to "yes", MPD will discover audio files by
following
+# symbolic links outside of the configured music_directory.
#
-# If started as root, MPD will drop root privileges and run as
-# this user instead. Otherwise, MPD will run as the user it was
-# started by. If left unspecified, MPD will not drop root
-# privileges at all (not recommended).
+#follow_outside_symlinks "yes"
#
-user "musicdaemon"
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links inside of the configured music_directory.
#
-# The address and port to listen on.
+#follow_inside_symlinks "yes"
#
-bind_to_address "any"
-port "6600"
+###############################################################################
+
+
+# Zeroconf / Avahi Service Discovery
##########################################
+#
+# If this setting is set to "yes", service information will be published with
+# Zeroconf / Avahi.
#
-# Controls the amount of information that is logged. Can be
-# "default", "secure", or "verbose".
+#zeroconf_enabled "yes"
#
-log_level "default"
+# The argument to this setting will be the Zeroconf / Avahi unique name for
+# this MPD server on the network.
#
-################################################################
+#zeroconf_name "Music Player"
+#
+###############################################################################
-########################## PERMISSIONS #########################
+# Permissions
#################################################################
#
-# MPD can require that users specify a password before using it.
-# You may specify one ore more here, along with what users who
-# log in with that password are allowed to do.
+# If this setting is set, MPD will require password authorization. The
password
+# can setting can be specified multiple times for different password
profiles.
#
#password "password@read,add,control,admin"
#
-# Specifies what permissions a user who has not logged in with a
-# password has. By default, all users have full access to MPD
-# if no password is specified above, or no access if one or
-# more passwords are specified.
+# This setting specifies the permissions a user has who has not yet logged
in.
#
#default_permissions "read,add,control,admin"
#
-################################################################
+###############################################################################
+
-########################## AUDIO OUTPUT ########################
+# Audio Output
################################################################
#
-# MPD supports many audio output types, as well as playing
-# through multiple audio outputs at the same time. You can
-# specify one or more here. If you don't specify any, MPD will
-# automatically scan for a usable audio output.
+# MPD supports various audio output types, as well as playing through
multiple
+# audio outputs at the same time, through multiple audio_output settings
+# blocks. Setting this block is optional, though the server will only attempt
+# autodetection for one sound card.
#
-# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs>
-# for examples of other audio outputs.
+# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples
of
+# other audio outputs.
#
# An example of an ALSA output:
#
#audio_output {
-# type "alsa"
-# name "My ALSA Device"
-# device "hw:0,0" # optional
-# format "44100:16:2" # optional
+# type "alsa"
+# name "My ALSA Device"
+## device "hw:0,0" # optional
+## format "44100:16:2" # optional
+## mixer_type "hardware" # optional
+## mixer_device "default" # optional
+## mixer_control "PCM" # optional
+## mixer_index "0" # optional
#}
#
# An example of an OSS output:
#
#audio_output {
-# type "oss"
-# name "My OSS Device"
-# device "/dev/dsp" # optional
-# format "44100:16:2" # optional
+# type "oss"
+# name "My OSS Device"
+## device "/dev/dsp" # optional
+## format "44100:16:2" # optional
+## mixer_type "hardware" # optional
+## mixer_device "/dev/mixer" # optional
+## mixer_control "PCM" # optional
#}
#
# An example of a shout output (for streaming to Icecast):
#
#audio_output {
-# type "shout"
-# name "My Shout Stream"
-# host "localhost"
-# port "8000"
-# mount "/mpd.ogg"
-# password "hackme"
-# quality "5.0"
-# bitrate "128"
-# format "44100:16:1"
-# user "source" # optional
-# description "My Stream Description" # optional
-# genre "jazz" # optional
-# public "no" # optional
+# type "shout"
+# encoding "ogg" # optional
+# name "My Shout Stream"
+# host "localhost"
+# port "8000"
+# mount "/mpd.ogg"
+# password "hackme"
+# quality "5.0"
+# bitrate "128"
+# format "44100:16:1"
+## protocol "icecast2" # optional
+## user "source" # optional
+## description "My Stream Description" # optional
+## genre "jazz" # optional
+## public "no" # optional
+## timeout "2" # optional
+## mixer_type "software" # optional
#}
#
-# Force all decoded audio to be converted to this format before
-# being passed to the audio outputs.
+# An example of a recorder output:
#
-#audio_output_format "44100:16:2"
-#
-################################################################
-
-
-############################# MIXER ############################
-#
-# MPD needs to know what mixer settings to change when you
-# adjust the volume. If you don't specify one here, MPD will
-# pick one based on which ones it was compiled with support for.
-#
-# An example for controlling an ALSA mixer:
+#audio_output {
+# type "recorder"
+# name "My recorder"
+# encoder "vorbis" # optional, vorbis or lame
+# path "/var/lib/mpd/recorder/mpd.ogg"
+## quality "5.0" # do not define if bitrate is
defined
+# bitrate "128" # do not define if quality is
defined
+# format "44100:16:1"
+#}
#
-#mixer_type "alsa"
-#mixer_device "default"
-#mixer_control "PCM"
+# An example of a httpd output (built-in HTTP streaming server):
#
-# An example for controlling an OSS mixer:
+#audio_output {
+# type "httpd"
+# name "My HTTP Stream"
+# encoder "vorbis" # optional, vorbis or lame
+# port "8000"
+# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
+## quality "5.0" # do not define if bitrate is
defined
+# bitrate "128" # do not define if quality is
defined
+# format "44100:16:1"
+# max_clients "0" # optional 0=no limit
+#}
#
-#mixer_type "oss"
-#mixer_device "/dev/mixer"
-#mixer_control "PCM"
+# An example of a pulseaudio output (streaming to a remote pulseaudio server)
#
-# If you want MPD to adjust the volume of audio sent to the
-# audio outputs, you can tell it to use the software mixer:
+#audio_output {
+# type "pulse"
+# name "My Pulse Output"
+## server "remote_server" # optional
+## sink "remote_server_sink" # optional
+#}
#
-#mixer_type "software"
+## Example "pipe" output:
#
-################################################################
-
-
-######################### NORMALIZATION ########################
+#audio_output {
+# type "pipe"
+# name "my pipe"
+# command "aplay -f cd 2>/dev/null"
+## Or if you're want to use AudioCompress
+# command "AudioCompress -m | aplay -f cd 2>/dev/null"
+## Or to send raw PCM stream through PCM:
+# command "nc example.org 8765"
+# format "44100:16:2"
+#}
#
-# Specifies the type of ReplayGain to use. Can be "album" or
-# "track". ReplayGain will not be used if not specified. See
-# <http://www.replaygain.org> for more details.
+## An example of a null output (for no audio output):
#
-#replaygain "album"
+#audio_output {
+# type "null"
+# name "My Null Output"
+# mixer_type "none" # optional
+#}
#
-# Sets the pre-amp used for files that have ReplayGain tags.
+# This setting will change all decoded audio to be converted to the specified
+# format before being passed to the audio outputs. By default, this setting
is
+# disabled.
#
-#replaygain_preamp "0"
+#audio_output_format "44100:16:2"
#
-# Enable on the fly volume normalization. This will cause the
-# volume of all songs played to be adjusted so that they sound
-# as though they are of equal loudness.
+# If MPD has been compiled with libsamplerate support, this setting
specifies
+# the sample rate converter to use. Possible values can be found in the
+# mpd.conf man page or the libsamplerate documentation. By default, this is
+# setting is disabled.
#
-#volume_normalization "no"
+#samplerate_converter "Fastest Sinc Interpolator"
#
-################################################################
+###############################################################################
-########################### BUFFERING ##########################
+# Normalization automatic volume adjustments
##################################
#
-# The size of the buffer containing decoded audio. You probably
-# shouldn't change this.
+# This setting specifies the type of ReplayGain to use. This setting can have
+# the argument "off", "album" or "track". See <http://www.replaygain.org>
+# for more details. This setting is off by default.
#
-#audio_buffer_size "2048"
+#replaygain "album"
#
-# How much of the buffer to fill before beginning to play.
+# This setting sets the pre-amp used for files that have ReplayGain tags. By
+# default this setting is disabled.
#
-#buffer_before_play "0%"
+#replaygain_preamp "0"
#
-# Similar options for the HTTP stream buffer. If you hear
-# skipping while playing HTTP streams, you may wish to increase
-# these.
+# This setting enables on-the-fly normalization volume adjustment. This will
+# result in the volume of all playing audio to be adjusted so the output has
+# equal "loudness". This setting is disabled by default.
#
-#http_buffer_size "128"
-#http_prebuffer_size "25%"
+#volume_normalization "no"
#
-################################################################
+###############################################################################
-########################### HTTP PROXY #########################
+# MPD Internal Buffering
######################################################
#
-# Specifies the HTTP proxy to use for playing HTTP streams.
+# This setting adjusts the size of internal decoded audio buffering. Changing
+# this may have undesired effects. Don't change this if you don't know what
you
+# are doing.
#
-#http_proxy_host "proxy.isp.com"
-#http_proxy_port "8080"
-#http_proxy_user "user"
-#http_proxy_password "password"
+#audio_buffer_size "2048"
#
-################################################################
+# This setting controls the percentage of the buffer which is filled before
+# beginning to play. Increasing this reduces the chance of audio file
skipping,
+# at the cost of increased time prior to audio playback.
+#
+#buffer_before_play "10%"
+#
+###############################################################################
-############################# LIMITS ###########################
+# Resource Limitations
########################################################
#
-# These are various limits to prevent MPD from using too many
-# resources. You should only change them if they start
-# restricting your usage of MPD.
+# These settings are various limitations to prevent MPD from using too many
+# resources. Generally, these settings should be minimized to prevent
security
+# risks, depending on the operating resources.
#
-#connection_timeout "60"
-#max_connections "5"
-#max_playlist_length "16384"
-#max_command_list_size "2048"
-#max_output_buffer_size "8192"
+#connection_timeout "60"
+#max_connections "10"
+#max_playlist_length "16384"
+#max_command_list_size "2048"
+#max_output_buffer_size "8192"
#
-################################################################
+###############################################################################
-###################### CHARACTER ENCODINGS #####################
+# Character Encoding
##########################################################
#
-# If file or directory names do not display correctly, then you
-# may need to change this. In most cases it should be either
-# "ISO-8859-1" or "UTF-8". You must recreate your database
-# after changing this (use mpd --create-db).
+# If file or directory names do not display correctly for your locale then
you
+# may need to modify this setting.
#
-#filesystem_charset "ISO-8859-1"
+#filesystem_charset "UTF-8"
#
-# The encoding that ID3v1 tags should be converted from.
+# This setting controls the encoding that ID3v1 tags should be converted
from.
#
-#id3v1_encoding "ISO-8859-1"
+#id3v1_encoding "ISO-8859-1"
#
-################################################################
+###############################################################################
-######################### OTHER OPTIONS ########################
-#
-# The metadata types MPD will recognize.
-#
-#metadata_to_use
"artist,album,title,track,name,genre,date,composer,performer,disc"
-#
-# Enable this if you wish to use your MPD created playlists in
-# other music players.
-#
-#save_absolute_paths_in_playlists "no"
+# SIDPlay decoder
#############################################################
+#
+# songlength_database:
+# Location of your songlengths file, as distributed with the HVSC.
+# The sidplay plugin checks this for matching MD5 fingerprints.
+# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
+#
+# default_songlength:
+# This is the default playing time in seconds for songs not in the
+# songlength database, or in case you're not using a database.
+# A value of 0 means play indefinitely.
+#
+# filter:
+# Turns the SID filter emulation on or off.
+#
+#decoder {
+# plugin "sidplay"
+# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt"
+# default_songlength "120"
+# filter "true"
+#}
#
-################################################################
+###############################################################################
+
diff --git a/scripts/mysql/mysql b/scripts/mysql/mysql
index a04bede..3055426 100644
--- a/scripts/mysql/mysql
+++ b/scripts/mysql/mysql
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
# This file is public domain and comes with NO WARRANTY of any kind
#
diff --git a/scripts/nas/nasd b/scripts/nas/nasd
index baee4b6..482c236 100755
--- a/scripts/nas/nasd
+++ b/scripts/nas/nasd
@@ -1,10 +1,6 @@
#!/bin/bash
-if [ ! -e /etc/exports ] ; then
+if [[ ! -e /etc/exports ]]; then
$FAILURE
echo "Please create an /etc/exports file. Exiting without starting nfs..."
$NORMAL
exit 1
fi
+if [[ -e /usr/sbin/rpc.idmapd ]]; then
+ HASNFS4=1
+fi
+
+# pseudo fs stuff
+mount_nfsd()
+{
+ if grep -q 'nfsd' /proc/filesystems; then
+ if ! grep -q 'nfsd' /etc/mtab; then
+ required_executable /bin/mount
+ echo "mounting nfsd"
+ mount -t nfsd nfsd /proc/fs/nfsd
+ evaluate_retval
+ fi
+ fi
+}
+umount_nfsd()
+{
+ if grep -q 'nfsd' /etc/mtab; then
+ required_executable /bin/umount
+ echo "unmounting nfsd"
+ umount /proc/fs/nfsd
+ evaluate_retval
+ fi
+}
+mount_pipefs()
+{
+ if grep -q 'rpc_pipefs' /proc/filesystems; then
+ if ! grep -q 'rpc_pipefs' /etc/mtab; then
+ required_executable /bin/mount
+ echo "mounting pipefs"
+ mount -t rpc_pipefs rpc_pipefs /var/lib/nfs/rpc_pipefs
+ evaluate_retval
+ fi
+ fi
+}
+umount_pipefs()
+{
+ if grep -q 'rpc_pipefs' /etc/mtab; then
+ required_executable /bin/umount
+ echo "unmounting pipefs"
+ umount /var/lib/nfs/rpc_pipefs
+ evaluate_retval
+ fi
+}
+
+# for making sure these exist
+mknfsdirs() {
+ local d
+ for d in /var/lib/nfs/{rpc_pipefs,v4recovery,v4root}; do
+ [[ ! -d "${d}" ]] && mkdir -p "${d}"
+ done
+}
+
# may be outsourced
get_kernel_pids()
{
@@ -30,51 +84,87 @@ get_kernel_pids()
start()
{
- echo "Starting full NFS services (server & locking)"
- # why do we reexport before the daemons are up?
- # doesn't seem to matter much
- required_executable /usr/sbin/exportfs
- echo -n "exportfs"
- /usr/sbin/exportfs -r
- evaluate_retval
+ local bins
+ echo "Starting NFS services (client & server)"
+
+ bins="statd nfsd mountd"
+ if [[ ! -z $HASNFS4 ]]; then
+ mknfsdirs
+ mount_nfsd
+ mount_pipefs
+ bins="${bins} idmapd"
+ fi
+
+ for b in $bins; do
+ required_executable /usr/sbin/rpc.$b
+ done
# nfs-howto says: these daemons in this order
# userspace does not bother about lockd since linux 2.2.18
- for d in mountd nfsd statd rquotad
- do
- required_executable /usr/sbin/rpc.$d
- local opts=
- if [[ $d == mountd ]]; then opts="$MOUNTDOPTS"
- if [[ ! -z "$MOUNTD_PORT" ]]; then opts="$opts -p $MOUNTD_PORT"
- fi
- elif [[ $d == nfsd ]]; then opts="$NUMSERVERS"
- elif [[ $d == statd && ! -z $STATD_PORT ]]; then opts="-p $STATD_PORT"
+ for d in ${bins} rquotad; do
+ if [[ -x /usr/sbin/rpc.$d ]]; then
+ local opts=
+
+ if [[ $d == 'mountd' ]]; then
+ opts="$MOUNTDOPTS"
+
+ if [[ ! -z "$MOUNTD_PORT" ]]; then
+ opts="$opts -p $MOUNTD_PORT"
+ fi
+ elif [[ $d == 'nfsd' ]]; then
+ opts="$NUMSERVERS"
+ elif [[ $d == 'statd' && ! -z $STATD_PORT ]]; then
+ opts="-p $STATD_PORT"
+ fi
+
+ echo -n $d
+ loadproc /usr/sbin/rpc.$d $opts
fi
- echo -n $d
- loadproc /usr/sbin/rpc.$d $opts
done
+
+ required_executable /usr/sbin/exportfs
+ echo -n "exportfs"
+ /usr/sbin/exportfs -r
+ evaluate_retval
}
stop()
{
- echo "Stopping NFS services"
+ local bins
+ echo "Stopping NFS services (client & server)"
echo -n "unexporting filesystems"
/usr/sbin/exportfs -au
evaluate_retval
+
+ bins="statd nfsd mountd"
+ if [[ ! -z $HASNFS4 ]]; then
+ umount pipefs
+ umount_nfsd
+ bins="${bins} idmapd"
+ fi
+
+ for b in $bins; do
+ required_executable /usr/sbin/rpc.$b
+ done
# all in one loop to simplify code, reversed order
# atm. only nfsd is really in-kernel (and lockd self-managed)
- for d in rquotad statd nfsd mountd
- do
- local kpid=$(get_kernel_pids $d)
- if [[ -z $kpid ]]; then
- echo -n "killing $d"
- killproc /usr/sbin/rpc.$d
- else
- echo "not killing kernel $d (PID $kpid)"
+ for d in ${bins} rquotad; do
+ if [[ -x /usr/sbin/rpc.$d ]]; then
+ local kpid=$(get_kernel_pids $d)
+
+ if [[ -z $kpid ]]; then
+ echo -n "killing $d"
+ killproc /usr/sbin/rpc.$d
+ else
+ if [[ $d == 'nfsd' ]]; then
+ echo "Removing kernel nfsd"
+ /usr/sbin/rpc.nfsd 0
+ else
+ echo "not killing kernel $d (PID=${kpid})"
+ fi
+ fi
fi
- echo "Removing kernel nfsd"
- /usr/sbin/rpc.nfsd 0
done
}
-if [ -d /etc/sysconfig/network ] ; then
- for i in /etc/sysconfig/network/*.dev ; do
- i=$( basename ${i%.dev} )
+if [ -f /etc/network/interfaces ] ; then
+ for i in $(grep "^iface" /etc/network/interfaces | awk '{print $2}') ; do
[ "$i" = "lo" -a "$IGNORE_LO" = "yes" ] && continue
IFACES="${IFACES},$i"
done
@@ -13,8 +12,8 @@ fi