[arch-commits] Commit in autofs/trunk (PKGBUILD auto.master auto.misc auto.net autofs)
Andrea Scarpino
andrea at archlinux.org
Mon Mar 16 15:13:09 UTC 2009
Date: Monday, March 16, 2009 @ 11:13:09
Author: andrea
Revision: 30098
upgpkg: autofs 4.1.4-5
Modified:
autofs/trunk/PKGBUILD
autofs/trunk/auto.master
autofs/trunk/auto.misc
autofs/trunk/auto.net
autofs/trunk/autofs
-------------+
PKGBUILD | 54 ++++----
auto.master | 1
auto.misc | 8 -
auto.net | 2
autofs | 362 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
5 files changed, 388 insertions(+), 39 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2009-03-16 14:44:29 UTC (rev 30097)
+++ PKGBUILD 2009-03-16 15:13:09 UTC (rev 30098)
@@ -4,45 +4,47 @@
# Contributor: Manolis Tzanidakis
pkgname=autofs
-pkgver=5.0.4
-pkgrel=2
+pkgver=4.1.4
+pkgrel=5
pkgdesc="A kernel-based automounter for Linux."
arch=('i686' 'x86_64')
-url="http://wiki.autofs.net/FrontPage"
+url="ftp://ftp.kernel.org/pub/linux/daemons/autofs"
license=('GPL2')
-depends=('libldap' 'libxml2' 'heimdal')
-backup=(etc/autofs/auto.master etc/autofs/auto.misc etc/conf.d/autofs)
-source=("http://www.kernel.org/pub/linux/daemons/${pkgname}/v5/${pkgname}-${pkgver}.tar.bz2"
- 'autofs' 'autofs.conf.d' 'auto.master' 'auto.misc' 'auto.net' 'heimdal.patch')
-md5sums=('2646dde61edd08dd952255558c733c08'
- 'e857b28b8a660602d349a5e21edab9f0'
- 'ddd69346754419faee15fc4c7edeb8b8'
- '036bb5731400b7b0a89797e949169734'
- 'd8a15ec9186c5c0b36e5cea1e2739e8a'
- 'e4d945d63abc0488a47a5e2a750e8c3b'
- '1ee4825e26ad72bfe86acec3d3da5d2a')
+depends=('libldap')
+backup=(etc/autofs/auto.master etc/conf.d/autofs)
+source=($url/v4/${pkgname}-${pkgver}.tar.bz2
+ ${pkgname}
+ ${pkgname}.conf.d
+ auto.master
+ auto.misc
+ auto.net)
+md5sums=('7e3949114c00665b4636f0c318179657' '80b77182aa957646a2074433d3890518'\
+ 'ddd69346754419faee15fc4c7edeb8b8' '0543a0d172eaec300e8d08708440dd4b'\
+ '0be409ef0cdf0255ce701ed4ba9e46b5' '74d102e637e53050ef095f1cbd9d461b')
build() {
export MAKEFLAGS="-j1"
+
cd ${srcdir}/${pkgname}-${pkgver}
-
- sed -i "s:SUBDIRS = lib daemon modules man samples:SUBDIRS = lib daemon modules man:" Makefile.rules
- patch -Np1 -i ${srcdir}/heimdal.patch
-
- ./configure --prefix=/usr \
- --sysconfdir=/etc/autofs \
- --without-hesiod
+ sed -i "s:-O3 -fomit-frame-pointer -Wall:${CFLAGS}:" \
+ Makefile.rules
+ sed -i "s:SUBDIRS = lib daemon modules man samples:SUBDIRS = lib daemon modules man:" \
+ Makefile.rules
+ ./configure --prefix=/usr --sysconfdir=/etc/autofs
make || return 1
make INSTALLROOT=${pkgdir} install
local conf_file
for conf_file in auto.{master,misc}; do
- install -D -m 644 ${srcdir}/$conf_file ${pkgdir}/etc/autofs/$conf_file
+ install -D -m 644 ${srcdir}/$conf_file \
+ ${pkgdir}/etc/autofs/$conf_file
done
- install -m 755 ${srcdir}/auto.net ${pkgdir}/etc/autofs/auto.net
- sed -i "s:/etc:/etc/autofs:g" ${pkgdir}/usr/share/man/man5/auto.master.5
+ install -m 755 ${srcdir}/auto.net \
+ ${pkgdir}/etc/autofs/auto.net
+ sed -i "s:/etc:/etc/autofs:g" \
+ ${pkgdir}/usr/man/man5/auto.master.5
install -D -m 755 ${srcdir}/autofs ${pkgdir}/etc/rc.d/autofs
- install -D -m 644 ${srcdir}/autofs.conf.d ${pkgdir}/etc/conf.d/autofs
+ install -D -m 644 ${srcdir}/autofs.conf.d \
+ ${pkgdir}/etc/conf.d/autofs
}
-# vim: ts=2 sw=2 et ft=sh
Modified: auto.master
===================================================================
--- auto.master 2009-03-16 14:44:29 UTC (rev 30097)
+++ auto.master 2009-03-16 15:13:09 UTC (rev 30098)
@@ -3,4 +3,5 @@
# mountpoint map options
# For details of the format look at autofs(5).
-/media /etc/autofs/auto.media
\ No newline at end of file
+/var/autofs/misc /etc/autofs/auto.misc
+/var/autofs/net /etc/autofs/auto.net
Modified: auto.misc
===================================================================
--- auto.misc 2009-03-16 14:44:29 UTC (rev 30097)
+++ auto.misc 2009-03-16 15:13:09 UTC (rev 30098)
@@ -2,6 +2,8 @@
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage
-cdrom -fstype=iso9660,ro,nodev,nosuid :/dev/cdrom
-floppy -fstype=auto,async,nodev,nosuid,umask=000 :/dev/fl
-usbstick -fstype=auto,async,nodev,nosuid,umask=000 :/dev/sda1
+kernel -ro ftp.kernel.org:/pub/linux
+boot -fstype=ext2 :/dev/hda1
+removable -fstype=ext2 :/dev/hdd
+cd -fstype=iso9660,ro :/dev/hdc
+floppy -fstype=auto :/dev/fd0
Modified: auto.net
===================================================================
--- auto.net 2009-03-16 14:44:29 UTC (rev 30097)
+++ auto.net 2009-03-16 15:13:09 UTC (rev 30098)
@@ -21,7 +21,7 @@
# Newer distributions get this right
SHOWMOUNT="/usr/sbin/showmount --no-headers -e $key"
-$SHOWMOUNT | LC_ALL=C sort +0 | \
+$SHOWMOUNT | LC_ALL=C sort -k 1 | \
awk -v key="$key" -v opts="$opts" -- '
BEGIN { ORS=""; first=1 }
{ if (first) { print opts; first=0 }; print " \\\n\t" $1, key ":" $1 }
Modified: autofs
===================================================================
--- autofs 2009-03-16 14:44:29 UTC (rev 30097)
+++ autofs 2009-03-16 15:13:09 UTC (rev 30098)
@@ -6,24 +6,365 @@
# source application-specific settings
[ -f /etc/conf.d/autofs ] && . /etc/conf.d/autofs
+DAEMON=/usr/sbin/automount
+
if [ ! -z "$TIMEOUT" ]; then
daemonoptions="--timeout=$TIMEOUT $daemonoptions"
fi
-PID=`cat /var/run/autofs-running &> /dev/null`
+# Extract the schemes from /etc/nsswitch.conf
+# (function derived from RedHat)
+function getschemes()
+{
+ grep ^automount: /etc/nsswitch.conf | sed -e 's/^.*://' -e 's/\[.*\]/ /g'
+}
+
+# Process the schemes found in /etc/nsswitch.conf
+# (function derived from RedHat, with some modifications)
+function getrawmounts()
+{
+ for scheme in `getschemes` ; do
+ case "$scheme" in
+ files)
+ if [ -z "$filescheme" ] ; then
+ if getmounts_file /etc/autofs/auto.master; then
+ filescheme=1 # success
+ else
+ filescheme=0 # failure
+ fi
+ export filescheme
+ fi
+ ;;
+ nis)
+ if [ -z "$nisscheme" ] ; then
+ if getnismounts auto.master; then
+ nisscheme=1 # success
+ else
+ nisscheme=0 # failure
+ fi
+ export nisscheme
+ fi
+ ;;
+ ldap*)
+ if [ -z "$ldapscheme" ] ; then
+ if getldapmounts; then
+ ldapscheme=1 # success
+ else
+ ldapscheme=0 # failure
+ fi
+ export ldapscheme
+ fi
+ ;;
+ esac
+ done
+
+ if [ -z "$filescheme" -a -z "$nisscheme" -a -z "$ldapscheme" ]; then
+ # nothing configured in /etc/nsswitch.conf, fall back to old behaviour
+ if ! getmounts_file /etc/autofs/auto.master; then
+ if ! getnismounts auto.master; then
+ if ! getldapmounts; then
+ echo "no autofs mounts configured!" 1>&2
+ fi
+ fi
+ fi
+ else
+ if [ ! \( "$filescheme" == "1" -o "$nisscheme" == "1" -o "$ldapscheme" == "1" \) ]; then
+ # all schemes found in /etc/nsswitch.conf have failed
+ echo "no autofs mounts configured!" 1>&2
+ fi
+ fi
+}
+
+# This function will build a list of automount commands to execute in
+# order to activate all the mount points. It is used to figure out
+# the difference of automount points in case of a reload
+function getmounts()
+{
+ getrawmounts
+}
+
+function getmounts_file()
+{
+ # Check for local maps to be loaded
+ local map="$1"
+ shift
+ if [ -f "$map" ]; then
+ cat "$map" | sed -e '/^#/d' -e '/^$/d' | process_master_file
+ else
+ return 1
+ fi
+}
+
+function process_master_file()
+{
+ local line_options
+ local daemon_options
+ line_options="$@" # from `+auto.master <line_options>' in /etc/autofs/auto.master
+
+ while read dir map first_option options; do
+ all_options="$first_option $options"
+
+ case "$dir" in
+ +*)
+ # note: $map contains options instead of a map
+ getnismounts "${dir/+/}" "$line_options" "$map" "$all_options"
+ continue;
+ ;;
+ '/-')
+ # ignore (not supported) direct maps
+ continue;
+ ;;
+ esac
+
+ if [ ! -z "$dir" -a ! -z "$map" -a x`echo "$map" | cut -c1` != 'x-' ]; then
+ type=""
+ # Break up the maptype and map, if the map type is specified
+ maptype=`echo $map | cut -f1 -d:`
+ if [ "$maptype" != "$map" ]; then
+ # map has form <maptype>:<map>
+ type=$maptype
+ map=`echo $map | cut -f2- -d:`
+ else
+ # special handling of maps
+ case "$map" in
+ hesiod|userhome)
+ type=$map
+ map=""
+ ;;
+ ldap)
+ # /<mountpoint> ldap <ldap data> <options>
+ type=ldap
+
+ # extract LDAP data
+ map="$first_option"
+ all_options=$options
+ ;;
+ /*)
+ # map is absolute path
+ if [ -x $map ]; then
+ type=program
+ elif [ -f $map ]; then
+ type=file
+ else
+ # invalid absolute path, ignoring
+ type=""
+ fi
+ ;;
+ !*)
+ # map is executable file
+ type=program
+ map="${map/!/}"
+ ;;
+ *)
+ # map is relative path or empty
+ if [ ! -z "$map" ]; then
+ # map is relative path
+ if [ -x /etc/autofs/$map ]; then
+ type=program
+ map=/etc/autofs/$map
+ elif [ -f /etc/autofs/$map ]; then
+ type=file
+ map=/etc/autofs/$map
+ else
+ type=yp
+ fi
+ else
+ # map is empty, ignoring
+ type=""
+ fi
+ ;;
+ esac
+ fi
+
+ if [ "$type" ]; then
+ options="$line_options $all_options"
+
+ daemon_options=`munge_options daemon $daemonoptions $options`
+ options=`munge_options mount $options`
+
+ echo "$DAEMON $daemon_options -- $dir $type $map $localoptions $options" | sed -e 's/ */ /g'
+ fi
+ fi
+ done
+}
+
+function getnismounts()
+{
+ # Check for YellowPage maps to be loaded
+ local map="$1"
+ shift
+ if [ -e /usr/bin/ypcat ] && [ `ypcat -k "$map" 2>/dev/null | wc -l` -gt 0 ]; then
+ # exclude references to other nis maps (avoid self-references -> inf. loop)
+ # - e.g. a map may look like:
+ # $ ypcat -k auto.master
+ # +auto_master # <- = auto.master = erk!
+ # /net -hosts -nosuid,nobrowse
+ # /home auto_home -nobrowse
+ ypcat -k "$map" | grep -v '^+' | process_master_file "$@"
+ else
+ return 1
+ fi
+}
+
+function getldapmounts() {
+ if [ ! -x /usr/bin/ldapsearch -o -z "$LDAPURI" -o -z "$LDAPBASE" ]; then
+ return 1
+ fi
+
+ # TODO: Doesn't yet work for LDIF output where lines are continued on the
+ # next line (starting with space or tab). (See ldif(5))
+
+ ldapsearch -LLL -H $LDAPURI -b $LDAPBASE -x \
+ '(objectClass=automount)' cn automountInformation 2>/dev/null \
+ | while read attr val; do
+ case "$attr" in
+ dn:)
+ node=""
+ args=""
+ ;;
+ cn:)
+ node=$val
+ ;;
+ automountInformation:)
+ args=$val
+ ;;
+ *)
+ ;;
+ esac
+ if [ -n "$node" -a -n "$args" ]; then
+ echo "$node $args" | process_master_file "$@"
+ node=""
+ args=""
+ fi
+ done
+}
+
+# List active mounts
+function active()
+{
+ ps ax|grep "[0-9]:[0-9][0-9] $DAEMON " |
+ while read pid tt stat time command; do
+ echo $command
+ done
+}
+
+# Status lister.
+function status()
+{
+ echo "Configured Mount Points:"
+ echo "------------------------"
+ getmounts | sed 's/ -- / /'
+ echo ""
+ echo "Active Mount Points:"
+ echo "--------------------"
+ active
+}
+
+function munge_options()
+{
+ local which="$1"
+ shift
+
+ o="$@"
+ # bring `timeout' option in suitable format
+ o=`echo "$o" | sed -e 's/\(\(-\|, *\)t\(imeout\)\?\) \+/\1=/g'`
+ # remove dashes in front of options
+ o=`echo "$o" | sed -e 's/^-\+//' -e 's/ -\+/ /' -e 's/,-\+/,/g'`
+
+ echo "$o" | awk -v which="$which" '
+BEGIN {
+ RS="[, \n]"
+ FS="="
+ daemon_opts[ "timeout" ] = "timeout"
+ daemon_opts[ "t" ] = "timeout"
+}
+{
+ if ( $0 ~ /^$/ )
+ next
+ if ( $1 in daemon_opts ) {
+ daemon[ daemon_opts[ $1 ] ] = $2
+ } else if ($1 ~ /^D.+/) {
+ defines[ $1 ] = $2
+ } else {
+ mount[NR] = $0
+ }
+}
+END {
+ if ( which ~ "^daemon$" ) {
+ if ( "timeout" in daemon ) {
+ printf "--timeout=%s\n", daemon["timeout"]
+ }
+ } else {
+ for ( a in defines ) {
+ printf "-%s=%s ", a, defines[a]
+ }
+ for ( a in mount ) {
+ if ( length( out ) )
+ out=out "," mount[a]
+ else
+ out=mount[a]
+ }
+ printf "%s\n", out
+ }
+}
+'
+}
+
+function get_command_from_pid()
+{
+ ps ax | grep "[0-9]:[0-9][0-9] $DAEMON " | (
+ while read pid tt stat time command; do
+ if [ "$pid" = "$1" ] ; then
+ echo `echo "$command" | sed 's/--pid-file.*\.pid/ /'`
+ return 0
+ fi
+ done
+ )
+
+ return 0
+}
+
+# return true if at least one pid is alive
+function alive()
+{
+ if [ -z "$*" ]; then
+ return 1
+ fi
+ for i in $*; do
+ if kill -0 $i 2> /dev/null; then
+ return 0
+ fi
+ done
+
+ return 1
+}
+
+# Start the fun :)
+PID=`pidof -o %PPID /usr/sbin/automount`
case "$1" in
start)
- stat_busy "Starting Automounter"
- [ -z "$PID" ] && /usr/sbin/automount $daemonoptions &> /dev/null &
+ stat_busy "Starting automounter"
+ getmounts | while read cmd args; do
+ opt=${args%%-- *}
+ rest=${args#*-- }
+ mnt=${rest%% *}
+ rest=${rest#* }
+ echo -n " $mnt"
+ if [ ! -d /var/run/autofs ]; then
+ mkdir /var/run/autofs
+ fi
+ pidfile=/var/run/autofs/`echo $mnt | sed 's,_,__,g;s,/,_:,g'`.pid
+ $DAEMON $daemonoptions --pid-file=$pidfile $opt $mnt $rest
+ done
if [ $? -gt 0 ]; then
stat_fail
else
add_daemon autofs
stat_done
fi
- ;;
+ ;;
stop)
- stat_busy "Stopping Automounter"
+ stat_busy "Stopping automounter"
[ ! -z "$PID" ] && kill $PID &> /dev/null
if [ $? -gt 0 ]; then
stat_fail
@@ -31,13 +372,18 @@
rm_daemon autofs
stat_done
fi
- ;;
+ ;;
restart)
$0 stop
sleep 1
$0 start
- ;;
+ ;;
+ status)
+ status
+ ;;
*)
echo "usage: $0 {start|stop|restart}"
+ ;;
esac
-exit 0
+
+exit 0
More information about the arch-commits
mailing list