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



                                                                            
 


                                                                 
                
 
                                     
                       




                                                                
                                          






                                                                               
                                                                    



                                                         
                                                                  

                                                       

                                                    







                                                                         






























































                                                                              
                                                     
                  
                                       
                                               


                                                      




































                                                                   
                                                          
                                              


                                                                      
                                                                          








                                                                       






















                                                                             


                                                                  































                                                                              
                                       























































                                               


                                                         



                                                                            

                                         

                                                                    
    




                                  


                                       
 
                        
 
                   
 


                                      



                              








                                                                   

 
                                             

                                                                     
             

                                                  

                                                     


                                                      


















































































                                                                             

                               





















                                                                         


                                                                            


























                                                                          





                                                                       
# 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
#
# this file is distributed under the GPLv2, see ~/openslx/COPYING
#
# Dirk von Suchodoletz <dvs@OpenSLX.com>, 22-12-2006
# mj0 09-11-2006
#
# (c) 2006 - RZ Universitaet Freiburg
# (c) 2006 OpenSLX GmbH

# 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 "DXS VERSION = 4.1.0\nINITRAMFS GENERATION DATE = $date" \
  >> /mnt/etc/SuSE-release
# 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.ld," \
#  -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
}

# 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.ld
  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??)
sed -e "s,DISPLAYMANAGER=.*,DISPLAYMANAGER=\"$start_xdmcp\"," \
    -e "s,.*_XSERVER.*,DISPLAYMANAGER_STARTS_XSERVER=\"$dm\"," \
    -e "s,.*_AUTOLOGIN.*,DISPLAYMANAGER_AUTOLOGIN=\"\"," \
    -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.ld
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=/usr/X11R6/bin/X +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.ld
}

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

# 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.ld
    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.ld
    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. chance to overwrite settings in hwautocfg for
# xorg.conf
displayvars () {
XBinPath=/usr/X11R6/bin/Xorg
}