[Fai-commit] r4894 - in people/faiguy/bugfixes: . 480531 480531/bin
meissner-guest at alioth.debian.org
meissner-guest at alioth.debian.org
Sat May 10 22:06:35 UTC 2008
Author: meissner-guest
Date: 2008-05-10 22:06:19 +0000 (Sat, 10 May 2008)
New Revision: 4894
Added:
people/faiguy/bugfixes/480531/
people/faiguy/bugfixes/480531/bin/
people/faiguy/bugfixes/480531/bin/fai-setup
Log:
fai-setup now compute the real network address for /etc/exports
Copied: people/faiguy/bugfixes/480531/bin/fai-setup (from rev 4893, trunk/bin/fai-setup)
===================================================================
--- people/faiguy/bugfixes/480531/bin/fai-setup (rev 0)
+++ people/faiguy/bugfixes/480531/bin/fai-setup 2008-05-10 22:06:19 UTC (rev 4894)
@@ -0,0 +1,245 @@
+#! /bin/bash
+
+# $Id$
+#*********************************************************************
+#
+# fai-setup -- set up FAI
+#
+# This script is part of FAI (Fully Automatic Installation)
+# (c) 2000-2007 by Thomas Lange, lange at informatik.uni-koeln.de
+# Universitaet zu Koeln
+#
+#*********************************************************************
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# A copy of the GNU General Public License is available as
+# `/usr/share/common-licences/GPL' in the Debian GNU/Linux distribution
+# or on the World Wide Web at http://www.gnu.org/copyleft/gpl.html. You
+# can also obtain it by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#*********************************************************************
+
+PATH=/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
+
+set -e
+
+cfdir=/etc/fai
+
+options=$@ # all options are also passed to make-fai-nfsroot
+
+while getopts ervC:f:kKV: opt ; do
+ case "$opt" in
+ C) cfdir=$OPTARG ;;
+ v) verbose=1 ; v=-v ;;
+ e) expert=1 ;;
+ esac
+done
+
+
+. $cfdir/fai.conf
+. $cfdir/make-fai-nfsroot.conf
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+add_export_line() {
+
+ # add a line to /etc/exports
+
+ pattern=$1
+ shift
+ options="$@"
+
+ [ -f /etc/exports ] && grep -q "^$pattern[[:space:]]" /etc/exports && return
+ echo "Adding line to /etc/exports: $pattern $options"
+ echo "$pattern $options" >> /etc/exports
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+add_fai_account() {
+
+ if id $LOGUSER 2>/dev/null 1>&2 ; then
+ echo Account \$LOGUSER=$LOGUSER already exists.
+ echo Make sure that all install clients can
+ echo log into this account without a password.
+ return
+ fi
+
+ adduser --system --disabled-password --home /var/log/fai --gecos "FAI account for log files" $LOGUSER
+ # there's a bug when the encrypted password is !, so change it to *
+ perl -pi.bak -e "s#^$LOGUSER:.:(.+):/bin/false#$LOGUSER:*:\1:/bin/bash#" /etc/passwd
+ # get the home dir of a user in a variable; do not exit when set -e is used
+ # loguserhome is unset if $LOGUSER does not exists
+ # this is not a evil hack, it's a very clever piece of code
+ loguserhome=$(eval "cd ~$LOGUSER 2>/dev/null && pwd;true")
+ touch $loguserhome/.account_created_by_fai_package
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+setup_fai_account() {
+
+ # most things should be executed as user $LOGUSER, since root may not have write
+ # permissions to $loguserhome (e.g if mount via NFS without no_root_squash)
+
+ set +e
+ loguserhome=$(eval "cd ~$LOGUSER 2>/dev/null && pwd;true")
+ sshdir=$loguserhome/.ssh
+ if [ -z "$loguserhome" ]; then
+ echo "Can't determine home directory for user $LOGUSER."
+ echo "LOGUSER= $LOGUSER loguserhome= $loguserhome"
+ exit 8
+ fi
+
+ if [ "$FAI_LOGPROTO" = "ssh" ]; then
+ # set up ssh on the server
+ mkdir -p -m 700 $loguserhome/.ssh
+
+ #Generating keys for LOGUSER
+ [ -f $sshdir/id_rsa ] || {
+ ssh-keygen -t rsa -N '' -f $sshdir/id_rsa -C "$LOGUSER@$HOSTNAME"
+ cat $sshdir/id_rsa.pub >> $sshdir/authorized_keys
+ }
+
+ [ -f $sshdir/id_dsa ] || {
+ ssh-keygen -t dsa -N '' -f $sshdir/id_dsa -C "$LOGUSER@$HOSTNAME"
+ cat $sshdir/id_dsa.pub >> $sshdir/authorized_keys
+ }
+
+ #Adding servers keys to known_hosts list of LOGUSER.
+ #So that installed clients can ssh $LOGUSER@$HOSTNAME without password
+ if [ ! -f $sshdir/known_hosts ]; then
+ [ -f /etc/ssh/ssh_host_dsa_key.pub ] && DSASERVER=$(sed -e "s/= .*$/=/" /etc/ssh/ssh_host_dsa_key.pub)
+ [ -f /etc/ssh/ssh_host_rsa_key.pub ] && RSASERVER=$(sed -e "s/= .*$/=/" /etc/ssh/ssh_host_rsa_key.pub )
+ # determine all IP addresses, and their host names
+ ips=$(LC_ALL=C ifconfig| perl -ne '/addr:([\d.]+)/ && print"$1\n"'|grep -v 127.0.0.1)
+ for ip in $ips; do
+ hname=$(getent hosts $ip| tr -s ' ' ',')
+ [ -z "$hname" ] && hname=$ip
+ echo "Adding $hname to known_hosts."
+ [ -z "$DSASERVER" ] || echo "$hname $DSASERVER" >> $sshdir/known_hosts
+ [ -z "$RSASERVER" ] || echo "$hname $RSASERVER" >> $sshdir/known_hosts
+ done
+ echo "$sshdir/known_hosts created."
+ else
+ echo "$sshdir/known_hosts remained unchanged."
+ fi
+
+ chmod 0600 $sshdir/authorized_keys
+ echo "$sshdir/authorized_keys created."
+ fi
+ if [ "$FAI_LOGPROTO" = "rsh" -a ! -f $loguserhome/.rhosts ]; then
+ # use .rhosts authentication
+ echo "+ at faiclients root" > $loguserhome/.rhosts
+ chmod go-rwx $loguserhome/.rhosts
+ echo "$loguserhome/.rhosts created."
+ fi
+
+ logusergid=$(id -ng $LOGUSER)
+ echo "User account $LOGUSER set up."
+ set -e
+}
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+compute_network() {
+
+ # this dark magic calculates the network from a given ipaddress and netmask
+
+ inputAddr=$1
+ inputMask=$2
+
+ fsnm="${inputMask%.*}"
+ lsnm="${inputMask##*.}"
+ foct="${inputAddr%.*}"
+ loct="${inputAddr##*.}"
+ nwz=""
+ if [ "$lsnm" = "0" ]; then
+ nwz=".0"
+ lsnm="${fsnm##*.}"
+ fsnm="${fsnm%.*}"
+ loct="${foct##*.}"
+ foct="${foct%.*}"
+ if [ "$lsnm" = "0" ]; then
+ nwz=".0$nwz"
+ lsnm="${fsnm##*.}"
+ fsnm="${fsnm%.*}"
+ loct="${foct##*.}"
+ foct="${foct%.*}"
+ if [ "$lsnm" = "0" ]; then
+ nwz=".0$nwz"
+ lsnm=$fsnm
+ loct=$foct
+ foct=""
+ fi
+ fi
+ fi
+ let snb=256-$lsnm
+ let loct=$loct/$snb*$snb
+ if [ "$foct" ]; then
+ tnw="$foct.$loct$nwz"
+ else
+ tnw="$loct$nwz"
+ fi
+ echo $tnw
+}
+
+# compute_network $addr $mask
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+{ # start huge block for capturing output
+
+if [ -n "$LOGUSER" ]; then
+ add_fai_account
+ setup_fai_account
+fi
+
+make-fai-nfsroot $options
+
+if [ -n "$LOGUSER" ]; then
+ # chown only if cd was successful
+ cd $loguserhome
+ if [ $? -eq 0 ]; then
+ chown $LOGUSER:$logusergid . .rhosts || true
+ [ -d .ssh ] && chown -R $LOGUSER:$logusergid .ssh || true
+ fi
+ mkdir -p $TFTPROOT
+ chown -R $LOGUSER:$logusergid $TFTPROOT || true
+fi
+
+if [ -z "$FAI_CONFIGDIR" ]; then
+ echo "FAI_CONFIGDIR not set in /etc/fai/fai.conf."
+ echo "Using /srv/fai/config as default."
+ FAI_CONFIGDIR=/srv/fai/config
+fi
+mkdir -p $FAI_CONFIGDIR
+
+# in expert mode, do not export nfs directories
+if [ -z "$expert" ]; then
+ test -f /etc/init.d/nfs-kernel-server && nfsserver=nfs-kernel-server
+ test -f /etc/init.d/nfs-user-server && nfsserver=nfs-user-server
+
+ addr=$(LC_ALL=C ifconfig $SERVERINTERFACE | grep -v 127.0.0.1 | perl -ne '/addr:([\d.]+)/ && print"$1\n"'|head -1)
+ mask=$(LC_ALL=C ifconfig $SERVERINTERFACE | grep -v 127.0.0.1 | perl -ne '/Mask:([\d.]+)/ && print"$1\n"'|head -1)
+ addr=$(compute_network $addr $mask)
+ add_export_line $FAI_CONFIGDIR "$addr/$mask(async,ro,no_subtree_check)"
+ add_export_line $NFSROOT "$addr/$mask(async,ro,no_subtree_check,no_root_squash)"
+ if [ -z "$nfsserver" ]; then
+ echo "Could not find the type of your nfs server. Maybe"
+ echo "no nfs server is installed. I can't restart it."
+ else
+ /etc/init.d/$nfsserver reload
+ fi
+fi
+
+if [ ! -d $FAI_CONFIGDIR/class ]; then
+ echo ""
+ echo " You have no FAI configuration space yet. Copy the simple examples with:"
+ echo " cp -a /usr/share/doc/fai-doc/examples/simple/* $FAI_CONFIGDIR"
+ echo " Then change the configuration files to meet your local needs."
+ echo ""
+fi
+echo "FAI setup finished."
+} 2>&1 | tee /var/log/fai/fai-setup.log
+echo "Log file written to /var/log/fai/fai-setup.log"
More information about the Fai-commit
mailing list