home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / openSuSE / openSUSE-11.2-GNOME-LiveCD-i686.iso / boot / i386 / loader / initrd / initrd~ / .kconfig next >
Text File  |  2009-11-02  |  40KB  |  1,442 lines

  1. #================
  2. # FILE          : KIWIConfig.sh
  3. #----------------
  4. # PROJECT       : OpenSUSE Build-Service
  5. # COPYRIGHT     : (c) 2006 SUSE LINUX Products GmbH, Germany
  6. #               :
  7. # AUTHOR        : Marcus Schaefer <ms@suse.de>
  8. #               :
  9. # BELONGS TO    : Operating System images
  10. #               :
  11. # DESCRIPTION   : This module contains common used functions
  12. #               : for the config.sh image scripts
  13. #               : 
  14. #               :
  15. # STATUS        : Development
  16. #----------------
  17. #======================================
  18. # suseInsertService
  19. #--------------------------------------
  20. function suseInsertService {
  21.     # /.../
  22.     # Recursively insert a service. If there is a service
  23.     # required for this service it will be inserted first
  24.     # -----
  25.     local service=$1
  26.     local result
  27.     while true;do
  28.         result=`/sbin/insserv $service 2>&1`
  29.         if [ $? = 0 ];then
  30.             echo "Service $service inserted"
  31.             break
  32.         else
  33.             result=`echo $result | head -n 1 | cut -f3 -d " "`
  34.             if [ -f /etc/init.d/$result ];then
  35.                 suseInsertService /etc/init.d/$result
  36.             else
  37.                 echo "$service: required service: $result not found...skipped"
  38.                 break
  39.             fi
  40.         fi
  41.     done
  42. }
  43.  
  44. #======================================
  45. # suseRemoveService
  46. #--------------------------------------
  47. function suseRemoveService {
  48.     # /.../
  49.     # Remove a service and its dependant services
  50.     # using insserv -r
  51.     # ----
  52.     local service=/etc/init.d/$1
  53.     while true;do
  54.         /sbin/insserv -r $service &>/dev/null
  55.         if [ $? = 0 ];then
  56.             echo "Service $service removed"
  57.             break
  58.         else
  59.             result=`/sbin/insserv -r $service 2>&1|tail -n 2|cut -f10 -d " "`
  60.             if [ -f /etc/init.d/$result ];then
  61.                 suseRemoveService $result
  62.             else
  63.                 echo "$service: $result not found...skipped"
  64.                 break
  65.             fi
  66.         fi
  67.     done
  68. }
  69.  
  70. #======================================
  71. # suseActivateServices
  72. #--------------------------------------
  73. function suseActivateServices {
  74.     # /.../
  75.     # Check all services in /etc/init.d/ and activate them
  76.     # by calling insertService
  77.     # -----
  78.     for i in /etc/init.d/*;do
  79.         if [ -x $i ] && [ -f $i ];then
  80.             echo $i | grep -q skel
  81.             if [ $? = 0 ];then
  82.                 continue
  83.             fi
  84.             suseInsertService $i
  85.         fi
  86.     done
  87. }
  88.  
  89. #======================================
  90. # suseActivateDefaultServices
  91. #--------------------------------------
  92. function suseActivateDefaultServices {
  93.     # /.../
  94.     # Call all postin scriptlets which among other things activates
  95.     # all default services required using insserv
  96.     # -----
  97.     local ifss=$IFS
  98.     local file=kiwi-services.default
  99.     local name=""
  100.     local name1=$name
  101.     local name2=$name
  102.     rm -f $file
  103.     for p in `rpm -qa --qf "%{NAME}\n"`;do
  104.         rpm -q --qf \
  105.             "%|POSTIN?{%|POSTINPROG?{}|%{POSTIN}\n}:{%|POSTINPROG?{}|}|" \
  106.         $p > $p.sh
  107.         if [ -s "$p.sh" ];then
  108.             echo "Calling post script $p.sh"
  109.             bash $p.sh 2>&1
  110.             cat $p.sh | sed -e s@\$SCRIPTNAME@$p@g | grep insserv >> $file
  111.         fi
  112.         rm -f $p.sh
  113.     done
  114.     IFS="
  115.     "
  116.     for i in \
  117.         `cat $file | grep -v ^.*# | cut -f2- -d"/" | grep ^insserv`
  118.     do
  119.         name=`echo $i | cut -f2 -d. | cut -f2 -d/`
  120.         if echo $name | grep -q insserv; then
  121.             name1=`echo $name | cut -f2 -d" "`
  122.             name2=`echo $name | cut -f3 -d" "`
  123.             if [ ! -z $name1 ];then
  124.                 name=$name1
  125.             fi
  126.             if [ ! -z $name2 ];then
  127.                 name=$name2
  128.             fi
  129.         else
  130.             name=`echo $name | tr -d " "`
  131.         fi
  132.         if [ -f /etc/init.d/$name ];then
  133.             echo $name >> kiwi-services.tmp
  134.         fi
  135.     done
  136.     for i in `cat kiwi-services.tmp | sort | uniq`;do
  137.         suseInsertService $i
  138.     done
  139.     rm -f kiwi-services.tmp
  140.     rm -f $file
  141.     IFS=$ifss
  142. }
  143.  
  144. #======================================
  145. # suseService
  146. #--------------------------------------
  147. function suseService {
  148.     # /.../
  149.     # if a service exist then enable or disable it using chkconfig
  150.     # example : suseService apache2 on
  151.     # example : suseService apache2 off
  152.     # ----
  153.     local service=$1
  154.     local action=$2
  155.     if [ -x /etc/init.d/$i ] && [ -f /etc/init.d/$service ];then
  156.         if [ $action = on ];then
  157.             /sbin/chkconfig $service on
  158.         elif [ $action = off ];then
  159.             /sbin/chkconfig $service off
  160.         fi
  161.     fi
  162. }
  163.  
  164. #======================================
  165. # suseServiceDefaultOn
  166. #--------------------------------------
  167. function suseServiceDefaultOn {
  168.     # /.../
  169.     # Some basic services that needs to be on.
  170.     # ----
  171.     services=(
  172.         boot.rootfsck
  173.         boot.cleanup
  174.         boot.localfs
  175.         boot.localnet
  176.         boot.clock
  177.         policykitd
  178.         dbus
  179.         consolekit
  180.         haldaemon
  181.         network
  182.         atd
  183.         syslog
  184.         cron
  185.         kbd
  186.     )
  187.     for i in "${services[@]}";do
  188.         if [ -x /etc/init.d/$i ] && [ -f /etc/init.d/$i ];then
  189.             /sbin/chkconfig $i on
  190.         fi
  191.     done
  192. }
  193.  
  194. #======================================
  195. # suseCloneRunlevel
  196. #--------------------------------------
  197. function suseCloneRunlevel {
  198.     # /.../
  199.     # Clone the given runlevel to work in the same way
  200.     # as the default runlevel 3.
  201.     # ----
  202.     local clone=$1
  203.     if [ -z "$clone" ];then
  204.         echo "suseCloneRunlevel: no runlevel given... abort"
  205.         return 1
  206.     fi
  207.     if [ $clone = 3 ];then
  208.         echo "suseCloneRunlevel: can't clone myself... abort"
  209.         return 1
  210.     fi
  211.     if [ -d /etc/init.d/rc$clone.d ];then
  212.         rm -rf /etc/init.d/rc$clone.d
  213.     fi
  214.     cp -a /etc/init.d/rc3.d /etc/init.d/rc$clone.d
  215.     sed -i -e s"@#l$clone@l4@" /etc/inittab
  216. }
  217.  
  218. #======================================
  219. # suseImportBuildKey
  220. #--------------------------------------
  221. function suseImportBuildKey {
  222.     # /.../
  223.     # Add missing gpg keys to rpm database
  224.     # ----
  225.     local KEY
  226.     local TDIR=$(mktemp -d)
  227.     if [ ! -d "$TDIR" ]; then
  228.         echo "suseImportBuildKey: Failed to create temp dir"
  229.         return
  230.     fi
  231.     pushd "$TDIR"
  232.     /usr/lib/rpm/gnupg/dumpsigs /usr/lib/rpm/gnupg/suse-build-key.gpg
  233.     ls gpg-pubkey-*.asc | while read KFN; do
  234.         KEY=$(basename "$KFN" .asc)
  235.         rpm -q "$KEY" >/dev/null
  236.         [ $? -eq 0 ] && continue
  237.         echo "Importing $KEY to rpm database"
  238.         rpm --import "$KFN"
  239.     done
  240.     popd
  241.     rm -rf "$TDIR"
  242. }
  243.  
  244. #======================================
  245. # baseSetupOEMPartition
  246. #--------------------------------------
  247. function baseSetupOEMPartition {
  248.     local oemfile=/config.oempartition
  249.     if [ -e $oemfile ];then
  250.         echo "config.oempartition already defined:"
  251.         cat $oemfile
  252.         return
  253.     fi
  254.     if [ ! -z "$kiwi_oemreboot" ];then
  255.         echo "Setting up OEM_REBOOT=1"
  256.         echo "OEM_REBOOT=1" >> $oemfile
  257.     fi
  258.     if [ ! -z "$kiwi_oemswap" ];then
  259.         echo "Setting up OEM_WITHOUTSWAP=1"
  260.         echo "OEM_WITHOUTSWAP=1" >> $oemfile
  261.     fi
  262.     if [ ! -z "$kiwi_oemswapMB" ];then
  263.         echo "Setting up OEM_SWAPSIZE=$kiwi_oemswapMB"
  264.         echo "OEM_SWAPSIZE=$kiwi_oemswapMB" >> $oemfile
  265.     fi
  266.     if [ ! -z "$kiwi_oemhome" ];then
  267.         echo "Setting up OEM_WITHOUTHOME=1"
  268.         echo "OEM_WITHOUTHOME=1" >> $oemfile
  269.     fi
  270.     if [ ! -z "$kiwi_oemrootMB" ];then
  271.         echo "Setting up OEM_SYSTEMSIZE=$kiwi_oemrootMB"
  272.         echo "OEM_SYSTEMSIZE=$kiwi_oemrootMB" >> $oemfile
  273.     fi
  274.     if [ ! -z "$kiwi_oemtitle" ];then
  275.         echo "Setting up OEM_BOOT_TITLE=$kiwi_oemtitle"
  276.         echo "OEM_BOOT_TITLE=\"$kiwi_oemtitle\"" >> $oemfile
  277.     fi
  278.     if [ ! -z "$kiwi_oemkboot" ];then
  279.         echo "Setting up OEM_KIWI_INITRD=$kiwi_oemkboot"
  280.         echo "OEM_KIWI_INITRD=$kiwi_oemkboot" >> $oemfile
  281.     fi
  282.     if [ ! -z "$kiwi_oemsap" ];then
  283.         echo "Setting up OEM_SAP_INSTALL=$kiwi_oemsap"
  284.         echo "OEM_SAP_INSTALL=$kiwi_oemsap" >> $oemfile
  285.     fi
  286.     if [ ! -z "$kiwi_oemrecovery" ];then
  287.         echo "Setting up OEM_RECOVERY=1"
  288.         echo "OEM_RECOVERY=1" >> $oemfile
  289.     fi
  290.     if [ ! -z "$kiwi_oemrecoveryID" ];then
  291.         echo "Setting up OEM_RECOVERY_ID=$kiwi_oemrecoveryID"
  292.         echo "OEM_RECOVERY_ID=$kiwi_oemrecoveryID" >> $oemfile
  293.     fi
  294. }
  295.  
  296. #======================================
  297. # baseSetupUserPermissions
  298. #--------------------------------------
  299. function baseSetupUserPermissions {
  300.     while read line in;do
  301.         dir=`echo $line | cut -f6 -d:`
  302.         uid=`echo $line | cut -f3 -d:`
  303.         usern=`echo $line | cut -f1 -d:`
  304.         group=`echo $line | cut -f4 -d:`
  305.         if [ -d "$dir" ] && [ $uid -gt 200 ] && [ $usern != "nobody" ];then
  306.             group=`cat /etc/group | grep "$group" | cut -f1 -d:`
  307.             chown -c -R $usern:$group $dir/*
  308.         fi
  309.     done < /etc/passwd
  310. }
  311.  
  312. #======================================
  313. # baseSetupBoot
  314. #--------------------------------------
  315. function baseSetupBoot {
  316.     if [ -f /linuxrc ];then
  317.         cp linuxrc init
  318.         exit 0
  319.     fi
  320. }
  321.  
  322. #======================================
  323. # suseConfig
  324. #--------------------------------------
  325. function suseConfig {
  326.     #======================================
  327.     # keytable
  328.     #--------------------------------------
  329.     if [ ! -z "$kiwi_keytable" ];then
  330.         cat etc/sysconfig/keyboard |\
  331.             sed -e s"@KEYTABLE=\".*\"@KEYTABLE=\"$kiwi_keytable\"@" \
  332.         > etc/sysconfig/keyboard.new
  333.         mv etc/sysconfig/keyboard.new etc/sysconfig/keyboard
  334.     fi
  335.     #======================================
  336.     # locale
  337.     #--------------------------------------
  338.     if [ ! -z "$kiwi_language" ];then
  339.         language=$(echo $kiwi_language | cut -f1 -d,).UTF-8
  340.         cat /etc/sysconfig/language |\
  341.             sed -e s"@RC_LANG=\".*\"@RC_LANG=\"$language\"@" \
  342.         > etc/sysconfig/language.new
  343.         mv etc/sysconfig/language.new etc/sysconfig/language
  344.     fi
  345.     #======================================
  346.     # timezone
  347.     #--------------------------------------
  348.     if [ ! -z "$kiwi_timezone" ];then
  349.         if [ -f /usr/share/zoneinfo/$kiwi_timezone ];then
  350.             cp /usr/share/zoneinfo/$kiwi_timezone /etc/localtime
  351.             cat /etc/sysconfig/clock |\
  352.                 sed -e s"@TIMEZONE=\".*\"@TIMEZONE=\"$kiwi_timezone\"@" \
  353.             > etc/sysconfig/clock.new
  354.             mv etc/sysconfig/clock.new etc/sysconfig/clock
  355.             cat /etc/sysconfig/clock |\
  356.                 sed -e s"@HWCLOCK=\".*\"@HWCLOCK=\"-u\"@" \
  357.             > etc/sysconfig/clock.new
  358.             mv etc/sysconfig/clock.new etc/sysconfig/clock
  359.         else
  360.             echo "timezone: $kiwi_timezone not found"
  361.         fi
  362.     fi
  363.     #======================================
  364.     # SuSEconfig
  365.     #--------------------------------------
  366.     /sbin/SuSEconfig
  367. }
  368.  
  369. #======================================
  370. # baseGetPackagesForDeletion
  371. #--------------------------------------
  372. function baseGetPackagesForDeletion {
  373.     echo $kiwi_delete
  374. }
  375.  
  376. #======================================
  377. # baseGetProfilesUsed
  378. #--------------------------------------
  379. function baseGetProfilesUsed {
  380.     echo $kiwi_profiles
  381. }
  382.  
  383. #======================================
  384. # baseCleanMount
  385. #--------------------------------------
  386. function baseCleanMount {
  387.     umount /proc/sys/fs/binfmt_misc
  388.     umount /proc
  389.     umount /dev/pts
  390.     umount /sys
  391. }
  392.  
  393. #======================================
  394. # baseStripMans 
  395. #--------------------------------------
  396. function baseStripMans {
  397.     # /..,/
  398.     # remove all manual pages, except 
  399.     # one given as parametr
  400.     #
  401.     # params - name of keep man pages
  402.     # example baseStripMans less
  403.     # ----
  404.     local keepMans="$@"
  405.     local directories="
  406.         /opt/gnome/share/man
  407.         /usr/local/man
  408.         /usr/share/man
  409.         /opt/kde3/share/man/packages
  410.     "
  411.     find $directories -mindepth 1 -maxdepth 2 -type f 2>/dev/null |\
  412.         baseStripAndKeep ${keepMans}
  413. }
  414.  
  415. #======================================
  416. # baseStripDocs 
  417. #--------------------------------------
  418. function baseStripDocs {
  419.     # /.../
  420.     # remove all documentation, except 
  421.     # copying license copyright
  422.     # ----
  423.     local docfiles
  424.     local directories="
  425.         /opt/gnome/share/doc/packages
  426.         /usr/share/doc/packages
  427.         /opt/kde3/share/doc/packages
  428.     "
  429.     for dir in $directories; do
  430.         docfiles=$(find $dir -type f |grep -iv "copying\|license\|copyright")
  431.         rm -f $docfiles
  432.     done
  433.     rm -rf /usr/share/info
  434.     rm -rf /usr/share/man
  435. }
  436. #======================================
  437. # baseStripLocales
  438. #--------------------------------------
  439. function baseStripLocales {
  440.     local keepLocales="$@"
  441.     local directories="
  442.         /usr/lib/locale
  443.     "
  444.     find $directories -mindepth 1 -maxdepth 1 -type d 2>/dev/null |\
  445.         baseStripAndKeep ${keepLocales}
  446. }
  447.  
  448. #======================================
  449. # baseStripTranslations
  450. #--------------------------------------
  451. function baseStripTranslations {
  452.     local keepMatching="$@"
  453.     find /usr/share/locale -name "*.mo" | grep -v $keepMatching | xargs rm -f
  454. }
  455.  
  456. #======================================
  457. # baseStripInfos 
  458. #--------------------------------------
  459. function baseStripInfos {
  460.     # /.../
  461.     # remove all info files, 
  462.     # except one given as parametr
  463.     #
  464.     # params - name of keep info files
  465.     # ----
  466.     local keepInfos="$@"
  467.     local directories="
  468.         /usr/share/info
  469.     "
  470.     find $directories -mindepth 1 -maxdepth 1 -type f 2>/dev/null |\
  471.         baseStripAndKeep "${keepInfos}"
  472. }
  473. #======================================
  474. # baseStripAndKeep
  475. #--------------------------------------
  476. function baseStripAndKeep {
  477.     # /.../
  478.     # helper function for strip* functions
  479.     # read stdin lines of files to check 
  480.     # for removing
  481.     # - params - files which should be keep
  482.     # ----
  483.     local keepFiles="$@"
  484.     while read file; do
  485.             local baseFile=`/usr/bin/basename $file`
  486.             local found="no"
  487.             for keep in $keepFiles;do
  488.                     if echo $baseFile | grep -q $keep; then
  489.                             found="yes"
  490.                             break
  491.                     fi
  492.             done
  493.             if test $found = "no";then
  494.                    Rm -rf $file
  495.             fi
  496.     done
  497. }
  498. #======================================
  499. # baseStripTools
  500. #--------------------------------------
  501. function baseStripTools {
  502.     local tpath=$1
  503.     local tools=$2
  504.     for file in `find $tpath`;do
  505.         found=0
  506.         base=`/usr/bin/basename $file`
  507.         for need in $tools;do
  508.             if [ $base = $need ];then
  509.                 found=1
  510.                 break
  511.             fi
  512.         done
  513.         if [ $found = 0 ] && [ ! -d $file ];then
  514.             Rm -fv $file
  515.         fi
  516.     done
  517. }
  518. #======================================
  519. # suseStripPackager 
  520. #--------------------------------------
  521. function suseStripPackager {
  522.     # /.../ 
  523.     # remove smart o zypper packages and db 
  524.     # files. Also remove rpm package and db 
  525.     # if "-a" given
  526.     #
  527.     # params [-a]
  528.     # ----
  529.     local removerpm=falseq
  530.     if [ ! -z ${1} ] && [ $1 = "-a" ]; then
  531.         removerpm=true
  532.     fi
  533.     
  534.     #zypper#
  535.     Rpm -e --nodeps zypper libzypp satsolver-tools
  536.     Rm -rf /var/lib/zypp
  537.     
  538.     #smart
  539.     Rpm -e --nodeps smart smart-gui
  540.     Rm -rf /var/lib/smart
  541.     
  542.     if [ $removerpm = true ]; then
  543.         Rpm -e --nodeps rpm 
  544.         Rm -rf /var/lib/rpm
  545.     fi
  546. }
  547. #======================================
  548. # baseStripRPM
  549. #--------------------------------------
  550. function baseStripRPM {
  551.     # /.../
  552.     # remove rpms defined in config.xml 
  553.     # under image=delete section
  554.     # ----
  555.     for i in `baseGetPackagesForDeletion`
  556.     do
  557.         Rpm -e --nodeps $i
  558.     done
  559. }
  560. #======================================
  561. # baseSetupInPlaceSVNRepository
  562. #--------------------------------------
  563. function baseSetupInPlaceSVNRepository {
  564.     # /.../
  565.     # create an in place subversion repository for the
  566.     # specified directories. A standard call could look like this
  567.     # baseSetupInPlaceSVNRepository /etc /srv /var/log
  568.     # ----
  569.     local paths=$1
  570.     local repo=/var/adm/sys-repo
  571.     if [ ! -x /usr/bin/svn ];then
  572.         echo "subversion not installed... skipped"
  573.         return
  574.     fi
  575.     svnadmin create $repo
  576.     chmod 700 $repo
  577.     svn mkdir -m created file:///$repo/trunk
  578.     local ifss=$IFS
  579.     local subp=""
  580.     for dir in $paths;do
  581.         subp=""
  582.         IFS="/"; for n in $dir;do
  583.             if [ -z $n ];then
  584.                 continue
  585.             fi
  586.             subp="$subp/$n"
  587.             svn mkdir -m created file:///$repo/trunk/$subp
  588.         done
  589.     done
  590.     IFS=$ifss
  591.     for dir in $paths;do
  592.         chmod 700 $dir/.svn
  593.         svn add $dir/*
  594.         find $dir -name .svn | xargs chmod 700
  595.         svn ci -m initial $dir
  596.     done
  597. }
  598.  
  599. #======================================
  600. # baseSetupPlainTextGITRepository
  601. #--------------------------------------
  602. function baseSetupPlainTextGITRepository {
  603.     # /.../
  604.     # create an in place git repository of the root
  605.     # directory containing all plain/text files.
  606.     # ----
  607.     if [ ! -x /usr/bin/git ];then
  608.         echo "git not installed... skipped"
  609.         return
  610.     fi
  611.     pushd /
  612.     local ignore=""
  613.     #======================================
  614.     # directories to ignore
  615.     #--------------------------------------
  616.     local dirs="
  617.         /sys /dev /var/log /home /media /var/run /var/tmp /tmp /var/lock
  618.         /image /var/spool /var/cache /var/lib /boot /root /var/adm
  619.         /usr/share/doc /base-system /usr/lib /usr/lib64 /usr/bin /usr/sbin
  620.         /usr/share/man /proc /bin /sbin /lib /lib64 /opt
  621.         /usr/share/X11 /.git
  622.     "
  623.     #======================================
  624.     # files to ignore
  625.     #--------------------------------------
  626.     local files="
  627.         ./etc/Image* *.lock ./etc/resolv.conf *.gif *.png
  628.         *.jpg *.eps *.ps *.la *.so */lib */lib64 */doc */zoneinfo
  629.     "
  630.     #======================================
  631.     # creae .gitignore and find list
  632.     #--------------------------------------
  633.     for entry in $files;do
  634.         echo $entry >> .gitignore
  635.         if [ -z "$ignore" ];then
  636.             ignore="-wholename $entry"
  637.         else
  638.             ignore="$ignore -or -wholename $entry"
  639.         fi
  640.     done
  641.     for entry in $dirs;do
  642.         echo $entry >> .gitignore
  643.         if [ -z "$ignore" ];then
  644.             ignore="-path .$entry"
  645.         else
  646.             ignore="$ignore -or -path .$entry"
  647.         fi
  648.     done
  649.     #======================================
  650.     # init git base
  651.     #--------------------------------------
  652.     git init
  653.     #======================================
  654.     # find all text/plain files except ign
  655.     #--------------------------------------
  656.     for i in `find . \( $ignore \) -prune -o -print`;do
  657.         file=`echo $i | cut -f2 -d.`
  658.         if file -i $i | grep -q "text/*";then
  659.             git add $i
  660.         fi
  661.         if file -i $i | grep -q "application/x-shellscript";then
  662.             git add $i
  663.         fi
  664.         if file -i $i | grep -q "application/x-awk";then
  665.             git add $i
  666.         fi
  667.         if file -i $i | grep -q "application/x-c";then
  668.             git add $i
  669.         fi
  670.         if file -i $i | grep -q "application/x-c++";then
  671.             git add $i
  672.         fi
  673.         if file -i $i | grep -q "application/x-not-regular-file";then
  674.             echo $file >> .gitignore
  675.         fi
  676.         if file -i $i | grep -q "application/x-gzip";then
  677.             echo $file >> .gitignore
  678.         fi
  679.         if file -i $i | grep -q "application/x-empty";then
  680.             echo $file >> .gitignore
  681.         fi
  682.     done
  683.     #======================================
  684.     # commit the git
  685.     #--------------------------------------
  686.     git commit -m "deployed"
  687.     popd
  688. }
  689.  
  690. #======================================
  691. # baseSetupInPlaceGITRepository
  692. #--------------------------------------
  693. function baseSetupInPlaceGITRepository {
  694.     # /.../
  695.     # create an in place git repository of the root
  696.     # directory. This process may take some time and you
  697.     # may expect problems with binary data handling
  698.     # ----
  699.     if [ ! -x /usr/bin/git ];then
  700.         echo "git not installed... skipped"
  701.         return
  702.     fi
  703.     pushd /
  704.     echo /proc > .gitignore
  705.     local files="
  706.         /sys /dev /var/log /home /media /var/run /etc/Image*
  707.         /var/tmp /tmp /var/lock *.lock /image /var/spool /var/cache
  708.         /var/lib /boot /root /var/adm /base-system
  709.     "
  710.     for entry in $files;do
  711.         echo $entry >> .gitignore
  712.     done
  713.     git init && git add . && \
  714.     git commit -m "deployed"
  715.     popd
  716. }
  717. #======================================
  718. # Rm  
  719. #--------------------------------------
  720. function Rm {
  721.     # /.../
  722.     # delete files & anounce it to log
  723.     # ----
  724.     Debug "rm $@"
  725.     rm $@
  726. }
  727.  
  728. #======================================
  729. # Rpm  
  730. #--------------------------------------
  731. function Rpm {
  732.     # /.../
  733.     # all rpm function & anounce it to log
  734.     # ----
  735.     Debug "rpm $@"
  736.     rpm $@
  737. }
  738. #======================================
  739. # Echo
  740. #--------------------------------------
  741. function Echo {
  742.     # /.../
  743.     # print a message to the controling terminal
  744.     # ----
  745.     local option=""
  746.     local prefix="----->"
  747.     local optn=""
  748.     local opte=""
  749.     while getopts "bne" option;do
  750.         case $option in
  751.             b) prefix="      " ;;
  752.             n) optn="-n" ;;
  753.             e) opte="-e" ;;
  754.             *) echo "Invalid argument: $option" ;;
  755.         esac
  756.     done
  757.     shift $(($OPTIND - 1))
  758.     echo $optn $opte "$prefix $1"
  759.     OPTIND=1
  760. }
  761. #======================================
  762. # Debug
  763. #--------------------------------------
  764. function Debug {
  765.     # /.../
  766.     # print message if variable DEBUG is set to 1
  767.     # -----
  768.     if test "$DEBUG" = 1;then
  769.         echo "+++++> (caller:${FUNCNAME[1]}:${FUNCNAME[2]} )  $@"
  770.     fi
  771. }
  772. #======================================
  773. # baseSetupBusyBox
  774. #--------------------------------------
  775. function baseSetupBusyBox {
  776.     # /.../
  777.     # activates busybox if installed for all links from
  778.     # the busybox/busybox.links file - you can choose custom apps to
  779.     # be forced into busybox with the "-f" option as first parameter
  780.     # ---
  781.     # example: baseSetupBusyBox -f /bin/zcat /bin/vi
  782.     # ---
  783.     local applets=""
  784.     local force=no
  785.     local busyboxlinks=/usr/share/busybox/busybox.links
  786.     if ! rpm -q --quiet busybox; then
  787.         echo "Busybox not installed... skipped"
  788.         return 0
  789.     fi
  790.     if [ $# -gt 0 ] && [ "$1" = "-f" ]; then
  791.         force=yes
  792.         shift
  793.     fi
  794.     if [ $# -gt 0 ]; then
  795.         for i in "$@"; do
  796.             if grep -q "^$i$" "$busyboxlinks"; then 
  797.                 applets="${applets} $i"
  798.             fi
  799.         done
  800.     else
  801.         applets=`cat "$busyboxlinks"`
  802.     fi
  803.     for applet in $applets; do
  804.         if [ ! -f "$applet" ] || [ "$force" = "yes" ]; then
  805.             echo "Busybox Link: ln -sf /usr/bin/busybox $applet"
  806.             ln -sf /usr/bin/busybox "$applet"
  807.         fi
  808.     done
  809. }
  810.  
  811. #======================================
  812. # stripUnusedLibs
  813. #--------------------------------------
  814. function baseStripUnusedLibs {
  815.     # /.../
  816.     # remove libraries which are not directly linked
  817.     # against applications in the bin directories
  818.     # ----
  819.     local needlibs
  820.     local found
  821.     local dir
  822.     local lnk
  823.     local new
  824.     # /.../
  825.     # find directly used libraries, by calling ldd
  826.     # on files in *bin*
  827.     # ---
  828.     ldconfig
  829.     rm -f /tmp/needlibs
  830.     for i in /usr/bin/* /bin/* /sbin/* /usr/sbin/*;do
  831.         for n in `ldd $i 2>/dev/null`;do
  832.             if [ -e $n ];then
  833.                 echo $n >> /tmp/needlibs
  834.             fi
  835.         done
  836.     done
  837.     count=0
  838.     for i in `cat /tmp/needlibs | sort | uniq`;do
  839.         needlibs[$count]=$i
  840.         count=`expr $count + 1`
  841.         if [ -L $i ];then
  842.             dir=`dirname $i`
  843.             lnk=`readlink $i`
  844.             new=$dir/$lnk
  845.             needlibs[$count]=$new
  846.             count=`expr $count + 1`
  847.         fi
  848.     done
  849.     # /.../
  850.     # add exceptions
  851.     # ----
  852.     while [ ! -z $1 ];do
  853.         for i in /lib*/$1* /usr/lib*/$1* /usr/X11R6/lib*/$1*;do
  854.             if [ -e $i ];then
  855.                 needlibs[$count]=$i
  856.                 count=`expr $count + 1`
  857.             fi
  858.         done
  859.         shift
  860.     done
  861.     # /.../
  862.     # find unused libs and remove it, dl loaded libs
  863.     # seems not to be that important within the initrd
  864.     # ----
  865.     rm -f /tmp/needlibs
  866.     for i in \
  867.         /lib/lib* /lib64/lib* /usr/lib/lib* \
  868.         /usr/lib64/lib* /usr/X11R6/lib*/lib*
  869.     do
  870.         found=0
  871.         if [ -d $i ];then
  872.             continue
  873.         fi
  874.         for n in ${needlibs[*]};do
  875.             if [ $i = $n ];then
  876.                 found=1; break
  877.             fi
  878.         done
  879.         if [ $found -eq 0 ];then
  880.             echo "Removing: $i"
  881.             rm $i
  882.         fi
  883.     done
  884. }
  885.  
  886. #======================================
  887. # baseSysConfig
  888. #--------------------------------------
  889. function baseUpdateSysConfig {
  890.     # /.../
  891.     # update sysconfig variable contents
  892.     # ----
  893.     local FILE=$1
  894.     local VAR=$2
  895.     local VAL=$3
  896.     sed -i "s/^\($VAR=\).*$/\1\"$VAL\"/" $FILE
  897. }
  898.  
  899. #======================================
  900. # suseStripInitrd
  901. #--------------------------------------
  902. function suseStripInitrd {
  903.     #==========================================
  904.     # remove unneeded files
  905.     #------------------------------------------
  906.     rm -rf `find -type d | grep .svn`
  907.     local files="
  908.         /usr/share/info /usr/share/man /usr/share/cracklib /usr/lib*/python*
  909.         /usr/lib*/perl* /usr/share/doc/packages /var/lib/rpm
  910.         /usr/lib*/rpm /var/lib/smart /opt/* /usr/include /root/.gnupg
  911.         /etc/PolicyKit /etc/sysconfig /etc/init.d /etc/profile.d /etc/skel
  912.         /etc/ssl /etc/java /etc/default /etc/cron* /etc/dbus*
  913.         /etc/pam.d* /etc/DIR_COLORS /etc/rc* /usr/share/hal /usr/share/ssl
  914.         /usr/lib*/hal /usr/lib*/*.a /usr/lib*/*.la /usr/lib*/librpm*
  915.         /usr/lib*/libpanel* /usr/lib*/libmenu* /usr/src/packages/RPMS
  916.         /usr/lib*/X11 /var/X11R6 /usr/share/X11 /etc/X11
  917.         /usr/lib*/xorg /usr/lib*/libidn* /usr/share/locale-bundle
  918.         /etc/ppp /etc/xdg /etc/NetworkManager /lib*/YaST /lib*/security
  919.         /lib*/mkinitrd /srv /var/adm /usr/lib*/engines /usr/src/packages
  920.         /usr/src/linux* /usr/local /var/log/* /usr/share/pixmaps
  921.         /usr/share/gtk-doc /var/games /opt /var/spool /var/opt
  922.         /var/cache /var/tmp /etc/rpm /etc/cups /etc/opt
  923.         /home /media /lib/firmware /usr/lib*/lsb /usr/lib*/krb5
  924.         /usr/lib*/ldscripts /usr/lib*/getconf /usr/lib*/pwdutils
  925.         /usr/lib*/pkgconfig /usr/lib*/browser-plugins
  926.         /usr/share/omc /usr/share/tmac /usr/share/emacs /usr/share/idnkit
  927.         /usr/share/games /usr/share/PolicyKit /usr/share/tabset
  928.         /usr/share/mkinitrd /usr/share/xsessions /usr/share/pkgconfig
  929.         /usr/share/dbus-1 /usr/share/sounds /usr/share/dict /usr/share/et
  930.         /usr/share/ss /usr/share/java /usr/share/themes /usr/share/doc
  931.         /usr/share/applications /usr/share/mime /usr/share/icons
  932.         /usr/share/xml /usr/share/sgml /usr/share/fonts /usr/games
  933.         /usr/lib/mit /usr/lib/news /usr/lib/pkgconfig /usr/lib/smart
  934.         /usr/lib/browser-plugins /usr/lib/restricted /usr/x86_64-suse-linux
  935.         /etc/logrotate* /etc/susehelp* /etc/SuSEconfig /etc/permissions.d
  936.         /etc/aliases.d /etc/hal /etc/news /etc/pwdutils /etc/uucp
  937.         /etc/openldap /etc/xinetd /etc/depmod.d /etc/smart /etc/lvm
  938.         /etc/named* /etc/bash_completion* usr/share/gnupg
  939.         /lib/modules/*/kernel/drivers/net/wireless
  940.         /lib/modules/*/kernel/drivers/net/pcmcia
  941.         /lib/modules/*/kernel/drivers/net/tokenring
  942.         /lib/modules/*/kernel/drivers/net/bonding
  943.         /lib/modules/*/kernel/drivers/net/hamradio
  944.         /usr/X11R6/bin /usr/X11R6/lib/X11/locale
  945.     "
  946.     for i in $files;do
  947.         rm -rfv $i
  948.     done
  949.     #==========================================
  950.     # remove unneeded files
  951.     #------------------------------------------
  952.     if [ -d /var/cache/zypp ];then
  953.         files="
  954.             /usr/lib*/libzypp* /lib*/libgcrypt* /lib*/libgpg*
  955.             /usr/lib*/dirmngr /usr/lib*/gnupg* /usr/lib*/gpg*
  956.             /usr/lib*/libboost* /usr/lib*/libcurl* /usr/lib*/libicu*
  957.             /usr/lib*/libksba* /usr/lib*/libpth*
  958.             /var/cache/zypp /usr/lib*/zypp* /usr/share/curl
  959.             /usr/share/emacs /usr/share/gnupg
  960.             /usr/share/zypp* /var/lib/zypp* /var/log/zypper.log
  961.         "
  962.         for i in $files;do
  963.             rm -rfv $i
  964.         done
  965.     fi
  966.     #==========================================
  967.     # remove unneeded tools
  968.     #------------------------------------------
  969.     local tools="
  970.         tune2fs swapon swapoff shutdown sfdisk resize_reiserfs
  971.         reiserfsck reboot halt pivot_root modprobe modinfo rmmod
  972.         mkswap mkinitrd mkreiserfs mkfs.cramfs
  973.         losetup ldconfig insmod init ifconfig fdisk e2fsck fsck.ext2
  974.         fsck.ext3 fsck.ext4 dhcpcd mkfs.ext2 mkfs.ext3 mkfs.ext4
  975.         depmod atftpd klogconsole hwinfo xargs wc tail tac readlink
  976.         mkfifo md5sum head expr file free find env du dirname cut
  977.         column chroot atftp tr host test printf mount dd uname umount
  978.         true touch sleep sh pidof sed rmdir rm pwd ps mv mkdir kill hostname
  979.         gzip grep false df cp cat bash basename arch sort ls uniq lsmod
  980.         usleep parted mke2fs pvcreate vgcreate lvm resize2fs ln hdparm
  981.         dmesg splash fbmngplay portmap start-statd sm-notify
  982.         rpc.statd rpc.idmapd nbd-client mount.nfs mount.nfs4 eject
  983.         blockdev posbios ping killall killall5 udevcontrol udevd
  984.         udevsettle udevtrigger mknod stat path_id hwup scsi_id scsi_tur
  985.         usb_id ata_id vol_id edd_id setctsid dumpe2fs debugreiserfs
  986.         fuser udevadm blogd showconsole killproc curl tar
  987.         ldd driveready checkmedia splashy bzip2 hexdump vgremove
  988.         pvchange pvresize pvscan vgscan vgchange vgextend vgdisplay
  989.         lvchange lvresize lvextend lvcreate grub dcounter tty
  990.         dmsetup dialog awk gawk clicfs cryptsetup clear blkid fbiterm
  991.         gettext diff bc utimer cmp
  992.     "
  993.     tools="$tools $@"
  994.     for path in /sbin /usr/sbin /usr/bin /bin;do
  995.         baseStripTools "$path" "$tools"
  996.     done
  997.     #==========================================
  998.     # remove unused libs
  999.     #------------------------------------------
  1000.     baseStripUnusedLibs \
  1001.         librt libutil libsysfs libnss_files libnss_compat libnsl libpng \
  1002.         libfontenc libutempter libfreetype libgcc_s
  1003.     #==========================================
  1004.     # remove images.sh and /root
  1005.     #------------------------------------------
  1006.     rm -f /image/images.sh
  1007.     rm -rf /root
  1008.     #==========================================
  1009.     # strip down configuration files
  1010.     #------------------------------------------
  1011.     rm -rf /tmp/*
  1012.     rm -rf /tmp/.*
  1013.     files="
  1014.         /etc/modprobe.conf /etc/modprobe.conf.local /etc/mtab
  1015.         /etc/protocols /etc/services /etc/termcap /etc/aliases
  1016.         /etc/bash.bashrc /etc/filesystems /etc/ld.so.conf /etc/magic
  1017.         /etc/group /etc/passwd /etc/nsswitch.conf /etc/scsi_id.config
  1018.     "
  1019.     for i in $files;do
  1020.         if [ -e $i ];then
  1021.             mv $i /tmp
  1022.         fi
  1023.     done
  1024.     rm -f /etc/*
  1025.     mv /tmp/* /etc
  1026. }
  1027.  
  1028. #======================================
  1029. # suseGFXBoot
  1030. #--------------------------------------
  1031. function suseGFXBoot {
  1032.     local theme=$1
  1033.     local loader=$2
  1034.     export PATH=$PATH:/usr/sbin
  1035.     if [ ! -z "$kiwi_boottheme" ];then
  1036.         theme=$kiwi_boottheme
  1037.     fi
  1038.     if [ ! -z "$kiwi_hybrid" ];then
  1039.         loader="isolinux"
  1040.     fi
  1041.     #======================================
  1042.     # setup bootloader data
  1043.     #--------------------------------------
  1044.     if [ -d /usr/share/gfxboot ];then
  1045.         #======================================
  1046.         # create boot theme with gfxboot-devel
  1047.         #--------------------------------------
  1048.         cd /usr/share/gfxboot
  1049.         # check for new source layout
  1050.         local newlayout=
  1051.         [ -f themes/$theme/config ] && newlayout=1
  1052.         # update configuration for new layout only
  1053.         if [ "$newlayout" ];then
  1054.             if [ $loader = "isolinux" ];then
  1055.                 local gfxcfg=themes/$theme/data-install/gfxboot.cfg
  1056.                 # tell the bootloader about live CD setup
  1057.                 gfxboot --config-file $gfxcfg \
  1058.                     --change-config install::livecd=1
  1059.                 # tell the bootloader to hand over keytable to cmdline 
  1060.                 gfxboot --config-file $gfxcfg \
  1061.                     --change-config live::addopt.keytable=1
  1062.                 # tell the bootloader to hand over lang to cmdline
  1063.                 gfxboot --config-file $gfxcfg \
  1064.                     --change-config live::addopt.lang=1
  1065.             else
  1066.                 local gfxcfg=themes/$theme/data-boot/gfxboot.cfg
  1067.                 # tell the bootloader to hand over keytable to cmdline 
  1068.                 gfxboot --config-file $gfxcfg \
  1069.                     --change-config boot::addopt.keytable=1
  1070.                 # tell the bootloader to hand over lang to cmdline
  1071.                 gfxboot --config-file $gfxcfg \
  1072.                     --change-config boot::addopt.lang=1
  1073.                 # add selected languages to the bootloader menu
  1074.                 if [ ! -z "$kiwi_language" ];then
  1075.                     for l in `echo $kiwi_language | tr "," " "`;do
  1076.                         echo "Adding language: $l"
  1077.                         echo $l >> themes/$theme/data-boot/languages
  1078.                     done
  1079.                 fi
  1080.             fi
  1081.         fi
  1082.         # create the archive    
  1083.         [ "$newlayout" ] || make -C themes/$theme prep
  1084.         make -C themes/$theme
  1085.         mkdir /image/loader
  1086.         local gfximage=
  1087.         local bootimage=
  1088.         if [ "$newlayout" ] ; then
  1089.             gfximage=themes/$theme/bootlogo
  1090.             bootimage=themes/$theme/message
  1091.         else
  1092.             gfximage=themes/$theme/install/bootlogo
  1093.             bootimage=themes/$theme/boot/message
  1094.         fi
  1095.         if [ $loader = "isolinux" ];then
  1096.             # isolinux boot data...
  1097.             cp $gfximage /image/loader
  1098.             bin/unpack_bootlogo /image/loader
  1099.         else
  1100.             # boot loader graphics image file...
  1101.             if [ ! -z "$kiwi_language" ];then
  1102.                 msgdir=/image/loader/message.dir
  1103.                 mkdir $msgdir && mv $bootimage $msgdir
  1104.                 (cd $msgdir && cat message | cpio -i && rm -f message)
  1105.                 if [ "$newlayout" ];then
  1106.                     for l in `echo $kiwi_language | tr "," " "`;do
  1107.                         l=$(echo $l | cut -f1 -d_)
  1108.                         cp themes/$theme/po/$l*.tr $msgdir
  1109.                         cp themes/$theme/help-boot/$l*.hlp $msgdir
  1110.                     done
  1111.                 else
  1112.                     for l in `echo $kiwi_language | tr "," " "`;do
  1113.                         l=$(echo $l | cut -f1 -d_)
  1114.                         cp themes/$theme/boot/$l*.tr  $msgdir
  1115.                         cp themes/$theme/boot/$l*.hlp $msgdir
  1116.                         echo $l >> $msgdir/languages
  1117.                     done
  1118.                 fi
  1119.                 (cd $msgdir && find | cpio --quiet -o > ../message)
  1120.                 rm -rf $msgdir
  1121.             else
  1122.                 mv $bootimage /image/loader
  1123.             fi
  1124.         fi
  1125.         make -C themes/$theme clean
  1126.     elif [ -f /etc/bootsplash/themes/$theme/bootloader/message ];then
  1127.         #======================================
  1128.         # use boot theme from gfxboot-branding
  1129.         #--------------------------------------
  1130.         echo "gfxboot devel not installed, custom branding skipped !"
  1131.         echo "using gfxboot branding package"
  1132.         mkdir /image/loader
  1133.         if [ $loader = "isolinux" ];then
  1134.             # isolinux boot data...
  1135.             mv /etc/bootsplash/themes/$theme/cdrom/* /image/loader
  1136.             local gfxcfg=/image/loader/gfxboot.cfg
  1137.             # tell the bootloader about live CD setup
  1138.             gfxboot --config-file $gfxcfg \
  1139.                 --change-config install::livecd=1
  1140.             # tell the bootloader to hand over keytable to cmdline 
  1141.             gfxboot --config-file $gfxcfg \
  1142.                 --change-config live::addopt.keytable=1
  1143.             # tell the bootloader to hand over lang to cmdline
  1144.             gfxboot --config-file $gfxcfg \
  1145.                 --change-config live::addopt.lang=1
  1146.         else
  1147.             # boot loader graphics image file...
  1148.             mv /etc/bootsplash/themes/$theme/bootloader/message /image/loader
  1149.             local archive=/image/loader/message
  1150.             # tell the bootloader to hand over keytable to cmdline 
  1151.             gfxboot --archive $archive \
  1152.                 --change-config boot::addopt.keytable=1
  1153.             # tell the bootloader to hand over lang to cmdline
  1154.             gfxboot --archive $archive \
  1155.                 --change-config boot::addopt.lang=1
  1156.             # add selected languages to the bootloader menu
  1157.             if [ ! -z "$kiwi_language" ];then
  1158.                 gfxboot --archive $archive --add-language \
  1159.                     $(echo $kiwi_language | tr "," " ") --default-language en_US
  1160.             fi
  1161.         fi
  1162.     else
  1163.         #======================================
  1164.         # no graphics boot possible
  1165.         #--------------------------------------
  1166.         echo "gfxboot devel not installed"
  1167.         echo "gfxboot branding not installed"
  1168.         echo "graphics boot skipped !"
  1169.         mkdir /image/loader
  1170.     fi
  1171.     #======================================
  1172.     # copy bootloader binaries of required
  1173.     #--------------------------------------
  1174.     if [ $loader = "isolinux" ];then
  1175.         # isolinux boot code...
  1176.         mv /usr/share/syslinux/isolinux.bin /image/loader
  1177.         if [ -f "/usr/share/syslinux/gfxboot.com" ];then
  1178.             mv /usr/share/syslinux/gfxboot.com /image/loader
  1179.         fi
  1180.         if [ -f "/usr/share/syslinux/mboot.c32" ];then
  1181.             mv /usr/share/syslinux/mboot.c32 /image/loader
  1182.         fi
  1183.         if [ -f "/boot/memtest.bin" ];then 
  1184.             mv /boot/memtest.bin /image/loader/memtest
  1185.         fi
  1186.     else
  1187.         # boot loader binary part of MBR
  1188.         :
  1189.     fi
  1190.     #======================================
  1191.     # create splash screen
  1192.     #--------------------------------------
  1193.     if [ ! -f /sbin/splash ];then
  1194.         echo "bootsplash not installed... skipped"
  1195.         return
  1196.     fi
  1197.     sname[0]="08000600.spl"
  1198.     sname[1]="10240768.spl"
  1199.     sname[2]="12801024.spl"
  1200.     index=0
  1201.     if [ ! -d /etc/bootsplash/themes/$theme ];then
  1202.         theme="SuSE-$theme"
  1203.     fi
  1204.     if [ ! -d /etc/bootsplash/themes/$theme ];then
  1205.         echo "bootsplash branding not installed... skipped"
  1206.         return
  1207.     fi
  1208.     mkdir -p /image/loader/branding
  1209.     cp /etc/bootsplash/themes/$theme/images/logo.mng  /image/loader/branding
  1210.     cp /etc/bootsplash/themes/$theme/images/logov.mng /image/loader/branding
  1211.     for cfg in 800x600 1024x768 1280x1024;do
  1212.         cp /etc/bootsplash/themes/$theme/images/bootsplash-$cfg.jpg \
  1213.         /image/loader/branding
  1214.         cp /etc/bootsplash/themes/$theme/images/silent-$cfg.jpg \
  1215.         /image/loader/branding
  1216.         cp /etc/bootsplash/themes/$theme/config/bootsplash-$cfg.cfg \
  1217.         /image/loader/branding
  1218.     done
  1219.     mkdir -p /image/loader/animations
  1220.     cp /etc/bootsplash/themes/$theme/animations/* \
  1221.         /image/loader/animations &>/dev/null
  1222.     for cfg in 800x600 1024x768 1280x1024;do
  1223.         /sbin/splash -s -c -f \
  1224.             /etc/bootsplash/themes/$theme/config/bootsplash-$cfg.cfg |\
  1225.             gzip -9c \
  1226.         > /image/loader/${sname[$index]}
  1227.         tdir=/image/loader/xxx
  1228.         mkdir $tdir
  1229.         cp -a --parents /etc/bootsplash/themes/$theme/config/*-$cfg.* $tdir
  1230.         cp -a --parents /etc/bootsplash/themes/$theme/images/*-$cfg.* $tdir
  1231.         ln -s /etc/bootsplash/themes/$theme/config/bootsplash-$cfg.cfg \
  1232.                 $tdir/etc/splash.cfg
  1233.         pushd $tdir
  1234.         chmod -R a+rX .
  1235.         find | cpio --quiet -o -H newc |\
  1236.             gzip -9 >> /image/loader/${sname[$index]}
  1237.         popd
  1238.         rm -rf $tdir
  1239.         index=`expr $index + 1`
  1240.     done
  1241. }
  1242.  
  1243. #======================================
  1244. # suseSetupProductInformation
  1245. #--------------------------------------
  1246. function suseSetupProductInformation {
  1247.     # /.../
  1248.     # This function will use zypper to search for the installed
  1249.     # product and prepare the product specific information
  1250.     # for YaST
  1251.     # ----
  1252.     if [ ! -x /usr/bin/zypper ];then
  1253.         echo "zypper not installed... skipped"
  1254.         return
  1255.     fi
  1256.     local zypper="zypper --non-interactive --no-gpg-checks"
  1257.     local product=$($zypper search -t product | grep product | head -n 1)
  1258.     local p_alias=$(echo $product | cut -f4 -d'|')
  1259.     local p_name=$(echo $product | cut -f 4-5 -d'|' | tr '|' '-' | tr -d " ")
  1260.     p_alias=$(echo $p_alias)
  1261.     p_name=$(echo $p_name)
  1262.     echo "Installing product information for $p_name"
  1263.     $zypper install -t product $p_alias
  1264. }
  1265.  
  1266. #======================================
  1267. # suseStripKernel
  1268. #--------------------------------------
  1269. function suseStripKernel {
  1270.     # /.../
  1271.     # this function will strip the kernel according to the
  1272.     # drivers information in the xml descr. It also will create
  1273.     # the vmlinux.gz and vmlinuz files which are required
  1274.     # for the kernel extraction in case of kiwi boot images
  1275.     # ----
  1276.     local ifss=$IFS
  1277.     local kversion
  1278.     local i
  1279.     local d
  1280.     local mod
  1281.     local stripdir
  1282.     local kdata
  1283.     for kversion in /lib/modules/*;do
  1284.         IFS="
  1285.         "
  1286.         if [ ! -d "$kversion" ];then
  1287.             IFS=$ifss
  1288.             continue
  1289.         fi
  1290.         if [ -x /bin/rpm ];then
  1291.             kdata=$(rpm -qf $kversion)
  1292.         else
  1293.             kdata=$kversion
  1294.         fi
  1295.         for p in $kdata;do
  1296.             #==========================================
  1297.             # get kernel VERSION information
  1298.             #------------------------------------------
  1299.             if [ ! $? = 0 ];then
  1300.                 # not in a package...
  1301.                 IFS=$ifss
  1302.                 continue
  1303.             fi
  1304.             if echo $p | grep -q "\-kmp\-";then  
  1305.                 # a kernel module package...
  1306.                 IFS=$ifss
  1307.                 continue
  1308.             fi
  1309.             if echo $p | grep -q "\-source\-";then
  1310.                 # a kernel source package...
  1311.                 IFS=$ifss
  1312.                 continue
  1313.             fi
  1314.             VERSION=$(/usr/bin/basename $kversion)
  1315.             echo "Stripping kernel $p: Image [$kiwi_iname]..."
  1316.             #==========================================
  1317.             # run depmod, deps should be up to date
  1318.             #------------------------------------------
  1319.             if [ ! -f /boot/System.map-$VERSION ];then
  1320.                 # no system map for kernel
  1321.                 echo "no system map for kernel: $p found... skip it"
  1322.                 IFS=$ifss
  1323.                 continue
  1324.             fi
  1325.             /sbin/depmod -F /boot/System.map-$VERSION $VERSION
  1326.             #==========================================
  1327.             # check for modules.order and backup it
  1328.             #------------------------------------------
  1329.             if [ -f $kversion/modules.order ];then
  1330.                 mv $kversion/modules.order /tmp
  1331.             fi
  1332.             #==========================================
  1333.             # strip the modules but take care for deps
  1334.             #------------------------------------------
  1335.             stripdir=/tmp/stripped_modules
  1336.             IFS=,
  1337.             for mod in \
  1338.                 $kiwi_usbdrivers $kiwi_scsidrivers \
  1339.                 $kiwi_netdrivers $kiwi_drivers
  1340.             do
  1341.                 local path=`/usr/bin/dirname $mod`
  1342.                 local base=`/usr/bin/basename $mod`
  1343.                 for d in kernel updates weak-updates;do
  1344.                     if [ "$base" = "*" ];then
  1345.                         if test -d $kversion/$d/$path ; then
  1346.                             mkdir -pv $stripdir$kversion/$d/$path
  1347.                             cp -avl $kversion/$d/$path/* \
  1348.                                 $stripdir$kversion/$d/$path
  1349.                         fi
  1350.                     else
  1351.                         if test -f $kversion/$d/$mod ; then
  1352.                             mkdir -pv $stripdir$kversion/$d/$path
  1353.                             cp -avl $kversion/$d/$mod \
  1354.                                 $stripdir$kversion/$d/$mod
  1355.                         elif test -L $kversion/$d/$base ; then
  1356.                             mkdir -pv $stripdir$kversion/$d
  1357.                             cp -avl $kversion/$d/$base \
  1358.                                 $stripdir$kversion/$d
  1359.                         elif test -f $kversion/$d/$base ; then
  1360.                             mkdir -pv $stripdir$kversion/$d
  1361.                             cp -avl $kversion/$d/$base \
  1362.                                 $stripdir$kversion/$d
  1363.                         fi
  1364.                     fi
  1365.                 done
  1366.             done
  1367.             IFS=$ifss
  1368.             for mod in `find $stripdir -name "*.ko"`;do
  1369.                 d=`/usr/bin/basename $mod`
  1370.                 i=`/sbin/modprobe \
  1371.                     --set-version $VERSION \
  1372.                     --ignore-install \
  1373.                     --show-depends \
  1374.                     ${d%.ko} | sed -ne 's:.*insmod /\?::p'`
  1375.                 for d in $i; do
  1376.                     case "$d" in
  1377.                         *=*) ;;
  1378.                         *)
  1379.                         if ! test -f $stripdir/$d ; then
  1380.                             echo "Fixing kernel module Dependency: $d"
  1381.                             mkdir -vp `/usr/bin/dirname $stripdir/$d`
  1382.                             cp -flav $d $stripdir/$d
  1383.                         fi
  1384.                         ;;
  1385.                     esac
  1386.                 done
  1387.             done
  1388.             rm -rf $kversion
  1389.             mv -v $stripdir/$kversion $kversion
  1390.             rm -rf $stripdir
  1391.             if [ -f /tmp/modules.order ];then
  1392.                 mv /tmp/modules.order $kversion
  1393.             fi
  1394.             #==========================================
  1395.             # run depmod
  1396.             #------------------------------------------
  1397.             /sbin/depmod -F /boot/System.map-$VERSION $VERSION
  1398.             #==========================================
  1399.             # create common kernel files, last wins !
  1400.             #------------------------------------------
  1401.             pushd /boot
  1402.             if [ -f vmlinux-$VERSION.gz ];then
  1403.                 mv vmlinux-$VERSION.gz vmlinux.gz
  1404.                 mv vmlinuz-$VERSION vmlinuz
  1405.             elif [ -f vmlinuz-$VERSION ];then
  1406.                 mv vmlinuz-$VERSION vmlinuz
  1407.             else
  1408.                 rm -f vmlinux
  1409.                 cp vmlinux-$VERSION vmlinux
  1410.                 mv vmlinux-$VERSION vmlinuz
  1411.             fi
  1412.             popd
  1413.         done
  1414.     done
  1415. }
  1416.  
  1417. #======================================
  1418. # suseSetupProduct
  1419. #--------------------------------------
  1420. function suseSetupProduct {
  1421.     # /.../
  1422.     # This function will create the /etc/products.d/baseproduct
  1423.     # link pointing to the product referenced by either
  1424.     # the /etc/SuSE-brand file or the latest .prod file
  1425.     # available in /etc/products.d
  1426.     # ----
  1427.     local prod=undef
  1428.     if [ -f /etc/SuSE-brand ];then
  1429.         prod=$(head /etc/SuSE-brand -n 1)
  1430.     fi
  1431.     pushd /etc/products.d
  1432.     if [ -f $prod.prod ];then
  1433.         ln -sf $prod.prod baseproduct
  1434.     else
  1435.         prod=$(ls -1t *.prod 2>/dev/null | tail -n 1)
  1436.         if [ -f $prod ];then
  1437.             ln -sf $prod baseproduct
  1438.         fi
  1439.     fi
  1440.     popd
  1441. }
  1442.