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





                                                                           
                                                               


                                                   
                      
















                                                                               
                                                                  

                                                       

                                                    
















































































































                                                                              











                                                                       






















                                                                             


                                                                  































                                                                              
                                       























































                                               


                                                         



                                                                            

                                         

                                                                    
    





                                  


                                                       






















                                                                         
                                                    








                                                                    
                                                            
























                                                                 
                                             

                                                                     
             

                                                  

                                                     


                                                      






































































































































                                                                             
# Description:  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
#
# Author(s):    Dirk von Suchodoletz <dirk@goe.net>, 29-07-2006
#
# Copyright:    (c) 2006 - RZ Universitaet Freiburg
# 
# Version:      0.3.3a

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

# distro specific function called from servconfig script
config_distro () {
# 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 InitRD 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
# 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
config_syslog () {
if [ "x$start_syslog" = "xyes" ] ; then
  if [ -f /mnt/etc/${D_INITDIR}/syslog ] ; then
  # how to configure remote log server?
  # logging servers might be specified in $log_servers (from e.g. dhcp)
    echo -e "# File modified by $0 within initial ramdisk" \
      > /etc/syslog-ng.conf
    sed -e "s,.*dhcp/dev.*,,;s,.*named/dev.*,," \
      /mnt/etc/syslog-ng/syslog-ng.conf >> /etc/syslog-ng.conf
      cp /etc/syslog-ng.conf /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\"," \
    -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 ...
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 () {
config_dm_entry yes
# check if a kdmrc was provided via ConfTGZ
[ -f /rootfs/etc/opt/kde3/share/config/kdm/kdmrc ] || \
  echo -e "# /etc/opt/kde3/share/config/kdm/kdmrc - \
file generated by\n\
#\t$0: $date\n\
[General]\n\
ConfigVersion=2.3\nStaticServers=:0\nExportList=LANG\n\
PidFile=/var/run/kdm.pid\nAuthDir=/var/lib/xdm/authdir/authfiles/\n\
ServerVTs=-7\nConsoleTTYs=tty1,tty2,tty3,tty4,tty5,tty6\n\n\
[Xdmcp]\n\
Enable=$xdmcp\nXaccess=/etc/X11/xdm/Xaccess\n\
Willing=/etc/X11/xdm/Xwilling\n[Shutdown]\nHaltCmd=/sbin/halt\n\
RebootCmd=/sbin/reboot\n\n\
[X-*-Core]\n\
ServerCmd=/usr/X11R6/bin/X -br\n\
ServerArgsLocal=-nolisten tcp\n\
TerminateServer=true\n\
Resources=/etc/X11/xdm/Xresources\nSetup=/etc/X11/xdm/Xsetup\n\
UserPath=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/var/X11R6/bin
SystemPath=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\
/usr/X11R6/bin:/var/X11R6/bin
Startup=/etc/X11/xdm/Xstartup\nReset=/etc/X11/xdm/Xreset\n\
Session=/etc/X11/xdm/Xsession\nClientLogFile=.xsession-errors-%s\n\
AutoReLogin=false\nAllowRootLogin=true\n\
AllowNullPasswd=true\nAllowShutdown=All\n\
SessionsDirs=/etc/X11/sessions,/usr/share/xsessions,\
/opt/kde3/share/apps/kdm/sessions,$vmsessions/kdm\n\
AuthNames=XDM-AUTHORIZATION-1,MIT-MAGIC-COOKIE-1\n\n\
[X-*-Greeter]\n\
ShowUsers=Selected\nSelectedUsers=\nUserList=false\n\
GUIStyle=default\nLogoArea=Clock\nGreetString=Diskless Linux (%h)\n\
GreetFont=Nimbus Sans l,20,-1,5,48,0,0,0,0,0\n\
StdFont=Nimbus Sans l,14,-1,5,48,0,0,0,0,0\n\
FailFont=Nimbus Sans l,14,-1,5,74,0,0,0,0,0\n\
AntiAliasing=true\nLanguage=$lang\n\
EchoMode=OneStar\nShowLog=false\n\
UseTheme=true\nTheme=/opt/kde3/share/apps/kdm/themes/SUSE\n\
UseBackground=false\n\
BackgroundCfg=/etc/opt/kde3/share/config/kdm/backgroundrc\n\n\
[X-:*-Greeter]\n\
PreselectUser=None\n\
FocusPasswd=true\nLoginMode=DefaultLocal\n\
AllowClose=false\nUseAdminSession=true\n\n\
[X-:0-Core]\n\
AutoLoginEnable=false\n\
ClientLogFile=.xsession-errors\n\
NoPassEnable=false\n\n\
[X-:0-Greeter]\n\
LogSource=/dev/xconsole\n\
UseAdminSession=false" >/mnt/etc/opt/kde3/share/config/kdm/kdmrc
echo -e "" > /mnt/etc/opt/kde3/share/config/kdm/backgroundrc
}

# configure bluetooth services
config_bt () {
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
}

# 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"
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 && 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
}