summaryrefslogblamecommitdiffstats
path: root/initramfs/distro-specs/suse/functions-default
blob: a072a49327cefe8e06a6cd514de893876f42674f (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                         



                                                                            




                                                                
                                          






                                                                               
                                                                    



                                                         
                                                                        
                          












                                                                       
                                                       

                                                    



                                                                         
                                               


                                                 

                                                                        
                                     





























                                                                        
                                      





























                                                                              
                                                     
                  
                                       
                                               


                                                      


































                                                                   

                                                           


                                                                


                                                                      
                                                                          






                                                                       
                                                                      
  






















                                                                             


                                                                  































                                                                              
                                   























































                                               


                                                         



                                                                            

                                         

                                                                    
    




                                  


                                       
 
                        
 
                   
 


                                      



                              








                                                                   

 
                                             

                                                                     
             

                                                  
                                                     
                                  


                                                      

                                                        
                                  



                                                              








                                                                       
















                                                                           
                                      



                                               

                               










                                                                             
                                      

                               





































                                                                         

                               





















                                                                         


                                                                            


























                                                                          
 
                                                                      
                
                                                           
 
# Copyright (c) 2003 - 2006 - RZ Uni Freiburg
# Copyright (c) 2006, 2007 - OpenSLX GmbH
#
# This program/file 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
#
# configuration script for general SuSE to configure linux diskless clients 
# (included by init, hwautocfg, servconfig within initial ramdisk after 
# inclusion of the main functions file). This file is the main base for the
# several SuSE distro versions

# empty functions are defined at the beginning of /etc/functions

# distro specific function called from servconfig script
config_distro () {
# no need to run start scripts in parallel
# enable magic sysrequest for the clients
echo -e "# /etc/${D_SYSCONFDIR}/sysctl - file modified by $0 version $version"\
  > /mnt/etc/${D_SYSCONFDIR}/sysctl.new
sed -e "s,ENABLE_SYSRQ=.*,ENABLE_SYSRQ=\"yes\"," \
  /mnt/etc/${D_SYSCONFDIR}/sysctl > /etc/sysctl
cat /etc/sysctl >> /mnt/etc/${D_SYSCONFDIR}/sysctl
# add specific path /var/X11R6/bin ...
echo -e "# stuff generated by $0 (out of InitRamFS written $date)\n\
PATH=\"\$PATH:/var/X11R6/bin\"\n\
test \"\$UID\" -ge 100 && PATH=\"\$PATH:.\"\n\
QTDIR=/usr/lib/qt3\nexport QTDIR\nno_proxy='localhost'\n\
export no_proxy" > /mnt/etc/SuSEconfig/profile
echo -e "SLX VERSION = $SLXVERSION\nINITRAMFS GENERATION DATE = $date" \
  >> /mnt/etc/SuSE-release
# create a stateless specific halt script
echo -e '#!/bin/sh\n# script generated in InitRamFS (SLX stage3)
. /etc/rc.status\n
trap "echo" SIGINT SIGSEGV SIGQUIT SIGTERM\nset +e\n\n
case "$0" in\n\t*halt)
\t   message="The system will be halted immediately."
\t   command="halt -p"\n\t   ;;\n\t*reboot)\n
\t   message="Please stand by while rebooting the system..."
\t   command="reboot"\n\t   ;;\nesac\n
rc_reset\ntest -e /etc/init.d/halt.local && {
\techo Running /etc/init.d/halt.local\n\t/bin/sh /etc/init.d/halt.local
\trc_status -v1 -r\n}
echo $message\nexec $command -d -f' > /mnt/etc/${D_INITDIR}/halt
# add the halt link to the 0 and 6 runlevel directories
ln -sf ../halt /mnt/etc/${D_INITDIR}/rc0.d/S20halt
ln -sf ../halt /mnt/etc/${D_INITDIR}/rc6.d/S20reboot
# enable execution of all important start scripts
# running stuff in parallel seems to be rather useless and generates some
# difficult to solve problems. If you want to try nevertheless enable the
# following line and disable the latter one (switching off that feature)
#sed -e "s,TARGETS =,TARGETS = xdm boot.slx," \
#  -i /mnt/etc/${D_INITDIR}/.depend.boot
sed -e "s,RUN_PARALLEL=.*,RUN_PARALLEL=\"no\"," \
  -i /mnt/etc/${D_SYSCONFDIR}/boot
# if YaST2 should be runnable (without much effect anyway) on the client
testmkd /mnt/var/log/YaST2
echo "$host_name" > /mnt/etc/HOSTNAME
}

# linking runlevel scripts
rllinker () {
local script="$1"
local start="$2"
local stop="$3"
# empty runlevel links - decision on running certain services is
# passed via configuration
for i in rc3.d/K$stop$script rc5.d/K$stop$script \
         rc3.d/S$start$script rc5.d/S$start$script ; do
  ln -sf ../$script /mnt/etc/${D_INITDIR}/$i
done
}

# group of functions for the normal runlevels - first parameter is start
# second stop
# function for ntp configuration
config_ntp () {
if [ -e /mnt/etc/${D_INITDIR}/ntp ] ; then
  if ! strinfile "ntp:" /mnt/etc/passwd ; then
    echo -e "ntp:x:74:65534:NTP daemon:/var/lib/ntp:/bin/false" \
      >>/mnt/etc/passwd
    echo -e "ntp:!:13099:0:99999:7:::" >>/mnt/etc/shadow
  fi
  testmkd /mnt/var/lib/ntp/var/run/ntp &>/dev/null
  if [ "x$start_ntp" = "xinitial" ] ; then
    echo -e "\t# entries added by $0 (InitRamFS from $date)\n\
\t( ntpdate -s -b $ntp_servers >${LOGFILE} 2>&1 && {\n\t  which \
hwclock &>/dev/null && hwclock -w;} ) &" \
      >>/mnt/etc/${D_INITDIR}/boot.slx
  elif [ "x$start_ntp" = "xyes" ] ; then
    rllinker "ntp" "07" "14"
  fi
fi
}

# function for atd
config_atd () {
if [ "x$start_atd" = "xyes" ]; then
  rllinker "atd" "14" "04"
fi
}

# function for configuration of cron services
config_cron () {
if [ "x$start_cron" = "xyes" ] ; then
  if [ -f /mnt/etc/${D_INITDIR}/cron ] ; then
    rllinker "cron" "18" "02"
    testmkd /mnt/var/spool/cron/lastrun
    testmkd /mnt/var/spool/cron/tabs
    echo -e "# /etc/crontab - file generated by $0:\n\
#\t$date\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin\
\nMAILTO=\n-*/15 * * * *\troot\ttest -x /usr/lib/cron/run-crons && \
/usr/lib/cron/run-crons >/dev/null 2>&1" >/mnt/etc/crontab
  else
    error "$df_errcron" nonfatal
  fi 
fi
}

# syslog service (different syslogs might be present)
config_syslog () {
if [ "x$start_syslog" != "xno" ] ; then
  if [ -f /mnt/etc/${D_INITDIR}/syslog ] ; then
    # logoutput depending on $start_syslog definitions
    sysngwriter /mnt/etc/syslog-ng/syslog-ng.conf
    rllinker syslog "02" "20"
  else
    error "$df_errsysl" nonfatal
  fi
fi
}

# secure shell service
config_sshd () {
if [ "x$start_sshd" = "xyes" ] ; then
  if [ -f /mnt/etc/${D_INITDIR}/sshd ] ; then
    testmkd /mnt/var/lib/sshd
    testmkd /mnt/var/lib/empty
    rllinker "sshd" "12" "10"
  else
    error "$df_errsshd" nonfatal
  fi
fi
}

# snmp agent for remote monitoring
config_snmp () {
if [ "x$start_snmp" = "xyes" ] ; then
  if [ -f /mnt/etc/${D_INITDIR}/snmpd ] ; then
    rllinker "snmpd" "24" "02"
    testmkd /mnt/var/lib/net-snmp >/dev/null 2>&1
  fi
    # fixme!!
    # write service monitor depending on services started
  fi
}

# configure X display manager (/etc/${D_SYSCONFDIR}/displaymanager)
config_dm_entry () {
local dm="$1"  
# should be stated that entries were made (fixmee how??)
# autologin is defined some other way ...
#    -e "s,.*_AUTOLOGIN.*,DISPLAYMANAGER_AUTOLOGIN=\"\"," \
sed -e "s,DISPLAYMANAGER=.*,DISPLAYMANAGER=\"$start_xdmcp\"," \
    -e "s,.*_XSERVER.*,DISPLAYMANAGER_STARTS_XSERVER=\"$dm\"," \
    -i /mnt/etc/${D_SYSCONFDIR}/displaymanager
# start the display manager as early as possible, but avoid that it is
# started twice during bootup ... late_dm can postpone the start of 
# displaymanager and X if problems with keyboard, console occur ...
# might be connected to running startup scripts in parallel, see above ...
if [ "x$late_dm" = "xyes" ] ; then
  ln -sf /etc/${D_INITDIR}/xdm /mnt/etc/${D_INITDIR}/rc5.d/S01xdm
  ln -sf /etc/${D_INITDIR}/xdm /mnt/etc/${D_INITDIR}/rc5.d/K18xdm
  sed -e "s,xdm: .*,xdm:," -i /mnt/etc/${D_INITDIR}/.depend.start
else
  ln -sf /etc/${D_INITDIR}/xdm /mnt/etc/${D_INITBOOTD}/S02xdm
  echo -e "\t(sleep 60; ln -sf ../xdm /etc/${D_INITDIR}/rc5.d/S01xdm; \
  rm /etc/${D_INITBOOTD}/S02xdm) &\n" >>/mnt/etc/${D_INITDIR}/boot.slx
fi
}

# configure X display manager (runlevel links and kind of manager)
config_xdm () {
config_dm_entry yes
}

# configure gdm as display manager
config_gdm () {
config_dm_entry yes
testmkd /mnt/var/lib/gdm
testmkd /mnt/var/log/gdm
strinfile "gdm:" /mnt/etc/passwd || echo "gdm:x:50:15:Gnome Display Manager \
Daemon:/var/lib/gdm:/bin/false" >>/mnt/etc/passwd
# hack - gdm should be user 50 and shadow group 15
chown 50:15 /mnt/var/lib/gdm /mnt/var/log/gdm
chmod 0750 /mnt/var/lib/gdm /mnt/var/log/gdm
xdmcp_hosts=`echo $x_display_manager|sed -e "s; ;,;"`
if [ "${DEBUGLEVEL}" -gt 0 ] ; then
  local debug="true"
else
  local debug="false"
fi
# check if a gdm.conf was provided via ConfTGZ
if [ ! -f /etc/opt/gnome/gdm/gdm.conf ] ; then
  echo -e "# /etc/opt/gnome/gdm/gdm.conf - file generated by $0\n\
[daemon]
AutomaticLoginEnable=false
TimedLoginEnable=false
#AlwaysRestartServer=false
Chooser=/opt/gnome/lib/gdm/gdmchooser
Greeter=/opt/gnome/lib/gdm/gdmgreeter
RemoteGreeter=/opt/gnome/lib/gdm/gdmgreeter
DefaultPath=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/bin:\
/opt/gnome/bin:/opt/kde3/bin:/opt/kde/bin:/usr/openwin/bin
RootPath=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/local/bin:/usr/bin:\
/usr/X11R6/bin:/bin:/usr/games:/opt/bin:/opt/gnome/bin:/opt/kde3/bin:\
/opt/kde/bin:/usr/openwin/bin:/opt/cross/bin
User=gdm
Group=shadow
#KillInitClients=true
LogDir=/var/lib/gdm
ServAuthDir=/var/lib/gdm
PostLoginScriptDir=/etc/opt/gnome/gdm/PostLogin/
PreSessionScriptDir=/etc/opt/gnome/gdm/PreSession/
PostSessionScriptDir=/etc/opt/gnome/gdm/PostSession/
DisplayInitDir=/etc/opt/gnome/gdm/Init
XKeepsCrashing=/etc/opt/gnome/gdm/XKeepsCrashing
RebootCommand=/sbin/shutdown -r now
HaltCommand=/sbin/shutdown -h now
SuspendCommand=/usr/bin/powersave --suspend-to-disk
BaseXsession=/etc/opt/gnome/gdm/Xsession
SessionDesktopDir=/usr/share/xsessions/:/etc/X11/sessions/:\
/etc/opt/gnome/dm/Sessions/:/opt/gnome/share/gdm/BuiltInSessions/:\
$vmsessions
BaseXsession=/etc/opt/gnome/gdm/Xsession
UserAuthFBDir=/tmp
UserAuthFile=.Xauthority
StandardXServer=${D_XORGBIN} +kb -I
Xnest=/usr/X11R6/bin/Xnest -audit 0 -name Xnest

[security]
AllowRoot=true
AllowRemoteRoot=true
AllowRemoteAutoLogin=false
CheckDirOwner=true
#UserMaxFile=65536
RetryDelay=1
#SessionMaxFile=524388
NeverPlaceCookiesOnNFS=true

[xdmcp]
Enable=$xdmcp
HonorIndirect=true
MaxPending=4
MaxPendingIndirect=4
MaxSessions=10
MaxWait=15
MaxWaitIndirect=15
DisplaysPerHost=2
Willing=/etc/X11/xdm/Xwilling

[gui]
#MaxIconWidth=128
#MaxIconWidth=128

[greeter]
Browser=false
#TitleBar=true
MinimalUID=500
Quiver=true
Welcome=Welcome to %n
LockPosition=true
BackgroundImage=0
BackgroundColor=#000000
ShowGnomeFailsafeSession=false
ShowXtermFailsafeSession=false
ShowLastSession=false
Use24Clock=true
GraphicalTheme=GDM-SuSE
GraphicalTheme=circles
GraphicalThemeDir=/opt/gnome/share/gdm/themes/
GraphicalThemeRand=false
#SystemMenu=true
InfoMsgFile=/opt/gnome/share/gdm/UserInfo
InfoMsgFont=monospace 10
SoundOnLogin=false
[chooser]
HostImageDir=/opt/gnome/share/hosts/
Broadcast=false
Multicast=false
Hosts=$xdmcp_hosts

[debug]
Enable=$debug" >/mnt/etc/opt/gnome/gdm/gdm.conf
  if [ "x$start_x" = "xindirect" ] ; then
    # when X server consumes to much mem set X -terminate
    echo -e "\n[servers]\n0=Terminal -audit 0 -indirect \
$host_name\n\n\
[server-Terminal]\nname=Terminal server\ncommand=/usr/X11R6/bin/X \
-audit 0\n\
flexible=true\nhandled=true\nchooser=true" >>/mnt/etc/opt/gnome/gdm/gdm.conf
  else
    echo -e "\n[servers]\n0=Standard\n\n\
[server-Standard]\nname=Standard server\ncommand=/usr/X11R6/bin/X\n\
flexible=true\nhandled=true" >>/mnt/etc/opt/gnome/gdm/gdm.conf
  fi
fi
}

# configure kdm as display manager
config_kdm () {
# first define directories for kdm
kdmrcdir=/etc/opt/kde3/share/config/kdm
xdmdir=/etc/X11/xdm

testmkd /mnt/${kdmrcdir}

config_dm_entry yes

# write configuration file
# use general config in /etc/functions
config_kdm_template
}

# configure bluetooth services
config_bt () {
if [ -e /mnt/etc/${D_SYSCONFDIR}/bluetooth ] ; then
  echo -e "# /etc/${D_SYSCONFDIR}/bluetooth - file modified by $0"\
    > /etc/bluetooth
  sed -e "s,START_SERVICES.*,START_SERVICES=\"yes\"," \
    /mnt/etc/${D_SYSCONFDIR}/bluetooth >> /etc/bluetooth
  cp /etc/bluetooth /mnt/etc/${D_SYSCONFDIR}/bluetooth
else
  : # no bluetooth components installed
fi
}

# set up keytable (function run in hwautocfg)
# kbd runlevel link is set via config_distro to avoid clashes between
# servconfig and hwautocfg settings
keytable () {
sed -e "s,KEYTABLE=.*,KEYTABLE=\"${KEYTABLE}\"," \
  -i /mnt/etc/${D_SYSCONFDIR}/keyboard
echo -e "\tloadkeys ${KEYTABLE} >${LOGFILE} 2>&1\n" \
  >>/mnt/etc/${D_INITDIR}/boot.slx
}

# consolefont and language (function run in hwautocfg)
consolefont () {
echo -e "\tsetfont ${CONSOLE_FONT} >${LOGFILE} 2>&1\n" \
  >>/mnt/etc/${D_INITDIR}/boot.slx
sed -e "s,RC_LANG=.*,RC_LANG=\"${LANG}\" # added in initrd," \
    -i /mnt/etc/${D_SYSCONFDIR}/language
}

# acpi and powersave daemons, required e.g. to shutdown the machine via
# power button, no need for early start
config_acpi () {
rllinker acpid "22" "12"
rllinker powersaved "23" "11"
# dbus is required to run acpid and powersaved
start_dreshal="yes"
}

# configure dbus (inter application communication for kde and gnome), hal
# (hardware abstraction layer - used e.g. by powersaved) and resmgr
# (resource manager - the user gets permissions to devices when loggin on)
# runlevel script for haldaemon is now haldaemon instead of hal
config_dreshal () {
local start="05"
local stop="18"
if [ "x$start_dreshal" = "xyes" ]; then
  if [ -f /mnt/etc/${D_INITDIR}/dbus ] ; then
    strinfile "messagebus:" /mnt/etc/passwd || \
      echo "messagebus:x:100:101:User for D-BUS:/var/run/dbus:/bin/false" \
        >> /mnt/etc/passwd
    strinfile "messagebus:" /mnt/etc/group || \
      echo "messagebus:!:101:" >> /mnt/etc/group
    testmkd /mnt/var/run/dbus
    # set permissions with userid
    echo -e "\tchown messagebus:messagebus /var/run/dbus 2>/dev/null" \
      >>/mnt/etc/${D_INITDIR}/boot.slx
    rllinker "dbus" "$start" "$stop"
  fi
  if [ -f /mnt/etc/${D_INITDIR}/resmgr ] ; then
    testmkd /mnt/var/run/resmgr/classes
    start="0"$(expr $start + 1)
    stop="0"$(expr $start - 1)
    rllinker "resmgr" "$start" "$stop"
  fi
  if [ -f /mnt/etc/${D_INITDIR}/haldaemon ] ; then
    strinfile "haldaemon:" /mnt/etc/passwd || \
      echo "haldaemon:x:105:103:User for haldaemon:/var/run/hal:/bin/false" \
        >> /mnt/etc/passwd
    strinfile "haldaemon:" /mnt/etc/group || \
      echo "haldaemon:!:103:" >> /mnt/etc/group
    testmkd /mnt/var/run/hal
    # set permissions with userid
    echo -e "\tchown haldaemon:haldaemon /var/run/hal 2>/dev/null" \
      >>/mnt/etc/${D_INITDIR}/boot.slx
    start="0"$(expr $start + 1)
    stop="0"$(expr $start - 1)
    rllinker "haldaemon" "$start" "$stop"
  fi
fi
}

# configure automounter
config_automount () {
if [ -e /mnt/etc/${D_SYSCONFDIR}/autofs ] ; then
  testmkd /var/lock/subsys
  echo -e "# /etc/${D_SYSCONFDIR}/autofs - file modified by\n#\t$0:\n#" \
  > /etc/autofs
  sed -e "s,AUTOFS_OPTIONS.*,AUTOFS_OPTIONS=\"--timeout 3\"," \
    /mnt/etc/${D_SYSCONFDIR}/autofs >> /etc/autofs
  cp /etc/autofs /mnt/etc/${D_SYSCONFDIR}/autofs
  rllinker "autofs" "18" "04"
else
  error "$df_erramt" nonfatal
fi
}
# start name service caching daemon
config_nscd () {
if [ -e /mnt/etc/${D_INITDIR}/nscd ] ; then
  testmkd /mnt/var/run/nscd
  rllinker "nscd" "02" "16"
else
  error "$df_errnsc" nonfatal
fi
}

# start portmapper (needed at least for nfs and nis services)
config_portmap () {
rllinker "portmap" "02" "20"
}

# start NIS
config_nis () {
if [ -f /mnt/etc/${D_INITDIR}/ypbind ] ; then
  rllinker "ypbind" "06" "16"
  config_portmap
  testmkd /mnt/var/yp/nicknames
else
  error "$df_erryp" nonfatal
fi
}

# start vmware
config_vmware () {
if [ -f /mnt/etc/${D_SYSCONFDIR}/vmware ] ; then
  rllinker "vmware-prep" "18" "02"
  rllinker "vmware" "20" "02"
  # if running start scripts in parallel vmware-prep is not recognized
  # first solution: just avoid running in parallel
  #sed 's/PARALLEL=.*/PARALLEL=no/' /mnt/etc/${D_SYSCONFDIR}/boot \
  #  > /tmp/boot
  #cp /tmp/boot /mnt/etc/${D_SYSCONFDIR}/boot
  # second solution: vmware-prep script should be added to .depends.start
  sed -e "s,TARGETS =,TARGETS = vmware-prep," \
    /mnt/etc/${D_INITDIR}/.depend.start >> /etc/.depend.start
  echo "vmware-prep: " >> /etc/.depend.start
  cp /etc/.depend.start /mnt/etc/${D_INITDIR}/.depend.start
  # this line should be added to /etc/hotplug.d/usb/50-usb.hotplug
  # to block linux from handling usb events during vmware sessions
  #sed -e '/USB-specific/{;i\' \
  #  -e 'ps aux |grep -i vmware| grep -v "grep" >/dev/null 2>&1 && exit 0' \
  #  -e ' }' -i /mnt/etc/hotplug.d/usb/50-usb.hotplug
else
  error "df_errvmw" nonfatal
fi
}

# initialize runlevel skript to be executed during system startup
# (before most of the normal boot init scripts)
# this script should operate like a normal runlevel script
d_mkrlscript () {
local switch="$1"
local name="$2"
local info="$3"
case "$1" in
  init)
    echo -e "#!/bin/sh\n# skeleton of /etc/${D_INITDIR}/$name created \
by $0\n# after you applied changes to the creation scripts you have to \
rerun\n# the mkdxsinitrd script to get them applied\n\
. /etc/rc.status\n. /etc/${D_SYSCONFDIR}/logfile\nrc_reset\ncase \
\"\$1\" in\n    start)\n\techo -n \"$info\"" >>/mnt/etc/${D_INITDIR}/$name
    chmod u+x /mnt/etc/${D_INITDIR}/$name
  ;;
  close)
    echo -e "\trc_status -v\n\t;;\n    stop)\n\t;;\nesac\nrc_exit" \
      >>/mnt/etc/${D_INITDIR}/$name
  ;;
esac
}

# Xorg variable settings. Lots of stuff changes for newer Xorg servers
displayvars () {
synapticsdrv="/usr/X11R6/lib/modules/input/synaptics_drv.o"
}