summaryrefslogblamecommitdiffstats
path: root/src/initramfs/scripts/bin/servconfig
blob: f3b005194d193efe42aafee644c0046e7c4ecab3 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
         
                                            
                                         







                                                                         
 
                                                                       
                                                                       
                                                  
 
                                                                             

                                         

                                                                   
               
                

                                                                             
                       
                     
 
                                   
                                                     
 




                                                                     
        
 
                                                                             

                                                                         

                                                               
                      
                                                                      
 
                                                             
                                                             
                                                                       
                                
 

                                                                             
                       
                      
 

                                                   







                                                               
                 
                   
    
                               

                          
                   

      
                                                   






                                                                     
                           
                 
 
                                                                             
                                                                            
          
                             
                                
              
  
                                                                  
                         

                                   

                                                                             
                                                                           
                                                                    



                                                                                
 
                                                                             


                                            
                                                                   




                                                                      



                                                     
      
                                         
    
                                                      
  
                                 
                           




                                                          
                                                                       
                                                                           
          
                                                                   


                                         
                                        
                                    

         





                                                        
                                                                             
                                            
             
 
                                                                             

                              
                                                         
          
 
                                                                   
                                                
           
 
                                                                     
             
 



                                                                           


                

                                                                    
                                                               
              
 

                                                                           




                                                                           
                                            


                                                                            
                                             
                                                                        
                                                                       
                                 

                                     
                                                                         




                                                               

                                             

                                                        
                               
                                                        
                                 
                                                                               
                                                                        
                                  

                                                                            
                                                                             
                              



                    
  
 


                                                           
                              
                                                                      

         
                                                                             

                      
                              



                                                                             

  
                                               
                                                           
                                                    
                           

                                         



                                                   
                                                         
                              
          
 


                                                                    
           

                                          
           
 

                         
 
                                                                             
                                           
                                   
                                                             


                                                       


            
                                                                             


                                                        
                                                                             


                                                                           

                                                                          
                                                                      
                                                 
                                                     
                                                                     
                                                               
                                              

                                     
                      
                                   

                     
       

      


                                                                  

                                                
                                                      
                                          



                                                                      
                                        

                                       
                                                    
                                          

      
  
 


                                                                
                                  
                                                   
#!/bin/sh
# Copyright (c) 2003..2006 - RZ Uni Freiburg
# Copyright (c) 2006..2011 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your feedback to feedback@openslx.org
#
# General information about OpenSLX can be found under http://openslx.org
#
# universal (distro independent) configuration script for OpenSLX linux
# diskless clients (executed in stage3 within initial ramfs). The file-
# system setup is completed when servconfig starts

#############################################################################
# check for configuration files to source

# functions common for all distros, messages contains all error and
# info output
. /etc/messages
. /etc/functions
# load distro specific configuration functions. Distro specific functions may
# overwrite functions defined in /etc/functions
. /etc/distro-functions
. /etc/slxsystem.conf

# load variables defined by plugins
[ -f /tmp/env/wrapper.env ] && . /tmp/env/wrapper.env

# script run timer
[ $DEBUGLEVEL -eq 8 ] && echo "** SW setup started at $(sysup)"

# heavy debugging output in level 3 and below 8 ...
[ $DEBUGLEVEL -gt 3 -a $DEBUGLEVEL -lt 8 -o $DEBUGLEVEL -eq 12 ] && \
  set -x

#############################################################################
# read and unify configuration options - default configuration file, from
# dhcp, ldap ...
# wait for the appearance of configuration from several sources
cfgcomplete
. /etc/initramfs-setup
[ $DEBUGLEVEL -eq 8 ] && echo "** Config info is complete at $(sysup)"

# copy additional configuration and var files and directories
# admins can place there files in /var/lib/openslx/config/...
# to be packed during stage2 into (/srv/dxs)/tftpboot/client-config...)
cp -a /rootfs/* /mnt 2>/dev/null

# copy passwd, group files for temporarily (within stage3 configuration) used
# by chown
cp /mnt/etc/passwd /etc
cp /mnt/etc/group /etc

# set greeting and add information on booted system
len=$(expr length ${SLXVERSION}${SYSTEM_NAME})
if [ $len -le 28 ] ; then
  vdstr="Stateless Workstation (V${SLXVERSION}/${SYSTEM_NAME})"
  smax=28
else
  vdstr="V${SLXVERSION}/${SYSTEM_NAME}"
  smax=52
fi
while [ $len -le $smax ] ; do
  vdstr="$vdstr "
  len=$(($len + 1))
done
len=$(expr length ${host_name})
while [ $len -le 30 ] ; do
  space="$space "
  len=$(($len + 1))
done
echo "
   WELCOME TO                 $space        \n (\l)
           _____  ______  ______ __    __    _______ __     __    __
          /  _   |   _   |   ___|  |  |  |  |   ____|  |   |  |  |  |
         |  | |  |  |_|  |  |_  |   |    |  |  |___ |  |        /  /
         |  | |  |   ___/|   _|      |   |   ____   |  |     |    |
         |  |_|  |  |    |  |___|  |  |  |   ____|  |  |___ /  /
           _____/|__|    |______|__|  |__|  |_______|______|__|  |__|

   $vdstr (c) <OpenSLX.ORG>
" >/mnt/etc/issue

#############################################################################
# set localization and add entries to initialize keytable and consolefont to
# boot.slx
if [ -z "${country}" ] ; then
  error "$scfg_country" nonfatal
  country="us"
fi
# do localization (this functions simply sets a list of variables)
localization "${country}"
# start distrospecific localization
dlocale

#############################################################################
# setup passwd and shadow for local system users like root, bin, daemon and
# nobody if no user/admin provided passwd exists ... fixme: see #206
if [ ! -e /initramfs/plugin-conf/auth.conf ]; then
  [ ! -e /rootfs/etc/shadow ] && \
    basepasswd $(sed "/+::0/d;s/root://;s/:.*//" /rootfs/etc/shadow 2>/dev/null)
fi

#############################################################################
# dns and ip configuration
# hostname of the machine
echo "$host_name" >/proc/sys/kernel/hostname
echo -e "# /etc/hosts - file generated by $0 during OpenSLX stage3\
\n#\n# IP-Address  Full-Qualified-Hostname  Short-Hostname\n#\n\
127.0.0.1\tlocalhost\n::1\t\tlocalhost ipv6-localhost ipv6-loopback\n\
fe00::0\t\tipv6-localnet\nff00::0\t\tipv6-mcastprefix\nff02::1\
\t\tipv6-allnodes\nff02::2\t\tipv6-allrouters\nff02::3\t\t\
ipv6-allhosts\n" >/mnt/etc/hosts
if [ -n  "${domain_name}" ]; then
  echo -en "${clientip}\t" >>/mnt/etc/hosts
  for name in ${domain_name}; do
    echo -en "${host_name}.${name} " >>/mnt/etc/hosts
  done
  echo -e "${host_name}" >>/mnt/etc/hosts
else
  echo -e "${clientip}\t${host_name}" >>/mnt/etc/hosts
fi
# set up domainname and resolving
rm -rf /mnt/etc/resolv.conf

out=/mnt/etc/resolv.conf
echo -e "# /etc/resolv.conf - file generated by\n#\t$0:\n\
#\t${date}\n#options timeout:1 attempts:1 rotate" > $out

[ "x${domain_name}" != "x" ] && echo -e "domain ${domain_name}" >> $out
[ "x${domain_search}" != "x" ] && echo -e "search ${domain_search}" >> $out
# fallback
[ "x${domain_search}" == "x" ] && [ "x${domain_name}" != "x" ] && \
  echo -e "search ${domain_name}" >> $out

[ -n "${domain_name_servers}" ] && {
  for name in ${domain_name_servers}; do
    echo nameserver ${name} >> $out;
  done; }

unset out

# create hostname file
[ -n ${host_name} ] && [ -n ${domain_name} ] && \
  echo "${host_name}.${domain_name}" > /mnt/etc/hostname

#############################################################################
# run distro specific configuration function
config_distro

#############################################################################
# basic (non network) services

# at daemon - calling distro specific function config_atd
config_atd

# configuration of cron services - calling distro specific function
# config_cron (runlevel links, directories, ...)
config_cron

# setup system log services - distro dependent function config_syslog
config_syslog

# acpi and powersave - distro dependent function config_acpi, these daemons
# might require dbus
config_acpi

# configure udev
config_udev

# configure dbus - distro dependent function config_dreshal - handle
# all stuff regarding dependent services like dbus, resmgr, hal ...
# (check for runlevel scripts, passwd entries, directories ...)
config_dreshal

# configure automounter if auth-plugin is not used
if [ "x$automnt" != "xno" -a ! -e /initramfs/plugin-conf/auth.conf ] ; then
  # check if there is some user provided configuration (only auto.master is
  # important) and skip automatic setup
  if [ ! -f /rootfs/etc/auto.master ] ; then
    if [ -d /mnt/misc ] ; then
      echo -e "# /etc/auto.master - file generated by $0:\n\
/misc\t/etc/auto.misc" >/mnt/etc/auto.master
      echo -e "# /etc/auto.misc - file generated by $0:" >/mnt/etc/auto.misc
    else
      echo -e "# /etc/auto.master - file generated by $0:\n\
#/misc\t/etc/auto.misc" >/mnt/etc/auto.master
      echo -e "# /etc/auto.misc - file generated by $0:\nautomount for \
removable devices is mostly deprecated, so /misc is not\nactivated in \
auto.master." >/mnt/etc/auto.misc
    fi
    if [ -n "${automnt_src}" ] ; then
      # local directory and home directory server from initialramfs-setup
      [ -z "${automnt_dir}" ] && automnt_dir="/home"
      # remove leading and trailing slash
      automnt_dir=${automnt_dir#/}
      automnt_dir=${automnt_dir%/}
      test -d /${automnt_dir} || error "$scfg_erradir" nonfatal
      amserv=$(uri_token $automnt_src server)
      ampath=$(uri_token $automnt_src path)
      amdirn=$(echo ${automnt_dir}|sed "s,/,_,g")
      echo -e "/${automnt_dir}\t/etc/auto.${amdirn}\n" \
        >> /mnt/etc/auto.master
      echo -e "# /etc/auto.${amdirn} created by $0:\n" \
        > /mnt/etc/auto.${amdirn}
      # add '/' to path because uri_token removes any leading '/' (s. function)
      echo -e "*\t-rsize=32768,wsize=32768,rw\t${amserv}:/${ampath}/&" \
        >> /mnt/etc/auto.${amdirn}
      # no tempfs needed if automounter operates on /home
      [ "${automnt_dir}" = "home" ] && umount -t tmpfs /mnt/home 2>/dev/null
      # portmapper is needed for remote NFS sources and local nfs directories
      testmkd /mnt/var/lib/nfs
      config_portmap
    fi
  fi
  config_automount
fi

# configure print services / start requested printer daemon
config_printer

# configure bluetooth services
#[ -s /etc/hwinfo.bt ] if existance of bt devices should play any role
config_bt

#############################################################################
# network(ed) services

if [ -n "$ntp_servers" ]; then
  # rdate uses the time protocol (port 37 which is not the ntp standard port)
  # thus not every standard ntp-server might offer this service)
  ( rdate -s "$ntp_servers" 2>/dev/null || error "$scfg_rdate" nonfatal
    hwclock -w ) &
fi

# network time service (ntp) configuration file
if [ -n "$ntp_servers" -a ! -f /rootfs/etc/ntp.conf ]; then
  echo -e "# /etc/ntp.conf - file generated by $0: \
$date\n" >/mnt/etc/ntp.conf
  for name in $ntp_servers; do
    echo server $name >>/mnt/etc/ntp.conf
  done
fi
# copy timezone file defined with language settings
[ -z "$TZ" ] && TZ="$timezone"
ln -snf /usr/share/zoneinfo/${TZ} /mnt/etc/localtime || \
  error "$scfg_ntptz" nonfatal
config_ntp

# secure shell server - at the moment all clients share one "secret"
# key or the key has to be regenerated on every bootup or fetched on
# every bootup from somewhere
config_sshd

# simple network management protocol agent
config_snmp

# configure samba service
config_samba

#############################################################################
# NIS (variable typically fetched via dhcp)
# setup nis configuration if needed
if [ "x$nis_domain" != "x" -a "x$nis_servers" != "x" ] ; then
  echo $nis_domain >/mnt/etc/defaultdomain
  echo -e "# /etc/yp.conf - file generated by $0:\n#\t\
$date\n\nypserver "$nis_servers >/mnt/etc/yp.conf
  config_nis
fi

#############################################################################
# name service caching daemon if networked user database
config_nscd

#############################################################################
# preparation of /tmp directory (partition 44, nfs scratch, ramdisk). there
# might be the chance that we have a disk partition available, so wait for
# completion of detection, setup process
[ $DEBUGLEVEL -eq 8 ] && echo "** Waiting for /tmp completion at $(sysup)"
waitfor /tmp/tmpready 40000
[ $DEBUGLEVEL -eq 8 ] && echo "** Setup of /tmp completed at $(sysup)"
# create some directories and correct permissions
tmpisdisk=$(sed -n '/\/tmp/p' /tmp/fstab 2>/dev/null)
# if there is no local disk partition for /tmp then try to mount a rw
# scratch space (if defined in $scratch) and prepared on server
if [ -n "$scratch" -a -z "$tmpisdisk" ] ; then
  scrproto=$(uri_token $FILESRC prot)
  scrpath=$(uri_token $FILESRC path)
  testmkd /tmp/scratch
  # exports have to be per client!!
  case "$scrproto" in
    nbd)
      :
    ;;
    *)
      tmpserv=$(uri_token $scratch server)
      tmppath=$(uri_token $scratch path)
      # hanging mount processes might stop further setup - timeout
      # should be configured ...
      # fsmount proto server path target options
      fsmount nfs ${tmpserv} ${tmppath} /tmp/scratch \
        "rw,intr,soft,timeo=2,nosuid" && {
        if [ -d /tmp/scratch/${clientip} ] ; then
          mv /tmp/scratch/${clientip} /tmp/scratch/${clientip}.totrash
          rm -rf /tmp/scratch/${clientip}.totrash 2>/dev/null &
        fi
        testmkd /tmp/scratch/${clientip}
        # no need for tempfs there ...
        umount /mnt/tmp >/dev/null 2>&1
        fsmount nfs ${tmpserv} ${tmppath} /mnt/tmp \
          "rw,intr,soft,timeo=2,nosuid"; }
    ;;
  esac
fi

# script run timer
[ $DEBUGLEVEL -eq 8 ] && echo "** SW setup finished at $(sysup)"

# servconfig finished successfully
echo "servconfig finished at $(sysup)" > /tmp/svcfg