Commit 3a65616b authored by Rafael Monnerat's avatar Rafael Monnerat

vifib.server was moved to another repository.

parent 9875af9e
------------------------------------------------
README for Kiwi source from SUSE Studio
------------------------------------------------
This tarball contains the Kiwi configuration, theming and overlay files that
were exported from SUSE Studio (http://susestudio.com). It allows you to
create your SUSE Studio configured appliance on your local system.
The user is expected to be familiar with using Kiwi. Details on Kiwi can be
found at http://kiwi.berlios.de.
We recommend installing the version of Kiwi found in the openSUSE
Virtualization:Appliances repository, eg:
http://download.opensuse.org/repositories/Virtualization:/Appliances/<distro_version>
Please send all your questions and feedback to feedback@susestudio.com.
----------------------
Directory structure
----------------------
bootsource/ - Contains the kiwi config for the boot image. Includes
bootsplash and grub theming.
source/ - Contains the kiwi config and overlay files for the
image.
README - This file.
create_appliance.sh - Helper script to create your appliance.
The create_appliance.sh script simplifies the applicance creation by
automatically running the kiwi prepare and create steps, for both the boot and
actual image.
It also prompts users to enter the URLs for internal repositories used by the
appliance (eg. SUSE Linux Enterprise repositories) and updates the
bootsource/config.xml and source/config.xml files accordingly. Backups of these
config files are made to config.xml.bak in the respective directories if
modifications are made by the script.
The script warns the user if the installed kiwi version does not match the
expected version. Minor version differences should be toleratable.
----------------------
Creating your appliance
----------------------
Simply run the create_appliance.sh script as root, eg:
sudo ./create_appliance.sh
If your appliance uses internal (non-public) repositories, you will be prompted
to specify the repo URL before continuing, eg:
> sudo ./create_appliance.sh
** Checking for internal repositories...
Enter repository URL for 'SLES 11 i386': http://my.repository/path/to/repo
A successful run looks like this:
> sudo ./create_appliance.sh
** Checking for internal repositories...
** Creating custom boot image (initrd)...
rm -rf bootbuild/root bootimage/initrd
mkdir -p bootbuild bootimage/initrd
/usr/bin/linux32 /usr/sbin/kiwi --prepare bootsource --root ...
Jun-09 14:45:26 <1> : Setting gzip command to: /usr/bin/pigz done
Jun-09 14:45:26 <1> : Setting log file to: boot-prepare.log
/usr/bin/linux32 /usr/sbin/kiwi --create bootbuild/root -d ...
Jun-09 14:49:21 <1> : Setting gzip command to: /usr/bin/pigz done
Jun-09 14:49:21 <1> : Setting log file to: boot-create.log
** Creating appliance...
rm -rf build/root
mkdir -p build image
/usr/bin/linux32 /usr/sbin/kiwi --prepare source --root build/root ...
Jun-09 14:55:17 <1> : Setting gzip command to: /usr/bin/pigz done
Jun-09 14:55:17 <1> : Setting log file to: prepare.log
/usr/bin/linux32 /usr/sbin/kiwi --create build/root -d image ...
Jun-09 14:58:09 <1> : Setting gzip command to: /usr/bin/pigz done
Jun-09 14:58:09 <1> : Setting log file to: create.log
** Appliance created successfully! (image/James_JeOS_32bit.i686-0.0.1.raw)
To boot the image using qemu-kvm, run the following command:
qemu-kvm -snapshot -m 512 image/James_JeOS_32bit.i686-0.0.1.raw &
You can tail the respective log files during the appliance creation to observe
the details of the kiwi operation. For example:
tail -f boot-prepare.log
----------------------
Troubleshooting
----------------------
You may need to manually edit bootsource/config.xml and source/config.xml to
remove repositories that are not available or failing in your environment.
For example, to remove the 'openSUSE 11.1 Updates' repositories, remove the
following lines from both config.xml:
<repository type='rpm-md'>
<source path='http://download.opensuse.org/update/11.1/'/>
</repository>
#!/bin/bash
#================
# FILE : config.sh
#----------------
# PROJECT : OpenSuSE KIWI Image System
# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
# :
# AUTHOR : Marcus Schaefer <ms@suse.de>
# :
# BELONGS TO : Operating System images
# :
# DESCRIPTION : configuration script for SUSE based
# : operating systems
# :
# :
# STATUS : BETA
#----------------
#======================================
# Functions...
#--------------------------------------
test -f /.kconfig && . /.kconfig
test -f /.profile && . /.profile
#======================================
# Greeting...
#--------------------------------------
echo "Configure image: [$kiwi_iname]..."
#======================================
# SuSEconfig
#--------------------------------------
suseConfig
#======================================
# Keep UTF-8 locale
#--------------------------------------
baseStripLocales \
$(for i in $(echo $kiwi_language | tr "," " ");do echo -n "$i.utf8 ";done)
baseStripTranslations kiwi.mo
#======================================
# Umount kernel filesystems
#--------------------------------------
baseCleanMount
exit 0
<?xml version='1.0' encoding='UTF-8'?>
<image name='initrd-oemboot-suse-11.3' schemaversion='4.7'>
<description type='boot'>
<author>Marcus Schaefer</author>
<contact>ms@novell.com</contact>
<specification>boot/initrd image used on OEM VMX disk</specification>
</description>
<preferences>
<type bootprofile='default' bootkernel='std' image='cpio'/>
<version>2.7.1</version>
<packagemanager>zypper</packagemanager>
<rpm-check-signatures>false</rpm-check-signatures>
</preferences>
<profiles>
<profile name='default' description='Booting default setup'/>
<profile name='xen' description='Boot with xen mboot.c32 setup'/>
<profile name='std' description='KERNEL: Default'/>
<profile name='xenk' description='KERNEL: Xen kernel/mboot.c32'/>
<profile name='pae' description='KERNEL: pae kernel'/>
<profile name='ec2' description='KERNEL: Ec2 kernel'/>
<profile name='rt' description='KERNEL: RealTime kernel'/>
<profile name='desktop' description='KERNEL: Desktop kernel'/>
</profiles>
<drivers type='drivers'>
<file name='crypto/*'/>
<file name='drivers/virtio/*'/>
<file name='drivers/block/cciss.ko'/>
<file name='drivers/block/virtio_blk.ko'/>
<file name='drivers/char/hw_random/virtio-rng.ko'/>
<file name='drivers/net/*'/>
<file name='net/packet/*'/>
<file name='drivers/md/*'/>
<file name='drivers/block/loop.ko'/>
<file name='drivers/hid/*'/>
<file name='drivers/input/keyboard/*'/>
<file name='drivers/input/mouse/*'/>
<file name='drivers/usb/*'/>
<file name='drivers/ide/*'/>
<file name='lib/zlib_deflate/zlib_deflate.ko'/>
<file name='lib/libcrc32c.ko'/>
<file name='fs/btrfs/*'/>
<file name='fs/ext3/*'/>
<file name='fs/ext4/*'/>
<file name='fs/ext2/*'/>
<file name='fs/fat/*'/>
<file name='fs/vfat/*'/>
<file name='fs/binfmt_aout.ko'/>
<file name='fs/binfmt_misc.ko'/>
<file name='fs/mbcache.ko'/>
<file name='fs/quota_v1.ko'/>
<file name='fs/quota_v2.ko'/>
<file name='fs/jbd/*'/>
<file name='fs/jbd2/*'/>
<file name='fs/hfs/*'/>
<file name='fs/exportfs/*'/>
<file name='fs/squashfs/*'/>
<file name='fs/nls/nls_utf8.ko'/>
<file name='fs/nls/nls_cp437.ko'/>
<file name='fs/nls/nls_iso8859-1.ko'/>
<file name='fs/fuse/*'/>
<file name='fs/udf/*'/>
<file name='drivers/ata/*'/>
<file name='drivers/scsi/*'/>
<file name='drivers/message/fusion/*'/>
<file name='drivers/cdrom/*'/>
<file name='drivers/parport/*'/>
<file name='drivers/char/lp.ko'/>
<file name='drivers/acpi/dock.ko'/>
<file name='drivers/firmware/edd.ko'/>
<file name='lib/crc-t10dif.ko'/>
<file name='lib/crc16.ko'/>
</drivers>
<drivers profiles='xen' type='drivers'>
<file name='drivers/xen/*'/>
</drivers>
<packages profiles='std' type='image'>
<package name='kernel-default'/>
</packages>
<packages profiles='pae' type='image'>
<package name='kernel-pae'/>
</packages>
<packages profiles='xenk' type='image'>
<package name='kernel-xen'/>
<package name='xen'/>
</packages>
<packages profiles='ec2' type='image'>
<package name='kernel-ec2'/>
</packages>
<packages profiles='rt' type='image'>
<package name='kernel-rt'/>
</packages>
<packages profiles='desktop' type='image'>
<package name='kernel-desktop'/>
</packages>
<packages type='image'>
<package name='curl'/>
<package name='atftp'/>
<package name='busybox'/>
<package name='parted'/>
<package name='adaptec-firmware'/>
<package name='dialog'/>
<package name='clicfs'/>
<package name='psmisc'/>
<package name='bind-libs'/>
<package name='bind-utils'/>
<package name='dhcpcd'/>
<package name='e2fsprogs'/>
<package name='btrfsprogs'/>
<package name='file'/>
<package name='hwinfo'/>
<package name='module-init-tools'/>
<package name='net-tools'/>
<package name='netcfg'/>
<package name='pciutils'/>
<package name='sysconfig'/>
<package name='sysfsutils'/>
<package name='util-linux'/>
<package name='grub'/>
<package name='squashfs'/>
<package name='fribidi'/>
<package name='make'/>
<package name='bootsplash'/>
<package name='eject'/>
<package name='tar'/>
<package name='lvm2'/>
<package name='bzip2'/>
<package name='kiwi-tools'/>
<package name='cryptsetup'/>
<package name='fbiterm'/>
<package name='bc'/>
<package name='gettext-runtime'/>
<package name='kexec-tools'/>
<package name='kpartx'/>
</packages>
<packages type='bootstrap'>
<package name='filesystem'/>
<package name='glibc'/>
<package name='glibc-locale'/>
<package name='diffutils'/>
<package name='procps'/>
</packages>
<packages type='delete'>
<package name='cracklib-dict-small'/>
<package name='cracklib-dict-full'/>
<package name='PolicyKit'/>
<package name='audit-libs'/>
<package name='blocxx'/>
<package name='cpio'/>
<package name='db'/>
<package name='expat'/>
<package name='fillup'/>
<package name='gdbm'/>
<package name='glib2'/>
<package name='gnome-filesystem'/>
<package name='gpg'/>
<package name='info'/>
<package name='insserv'/>
<package name='iproute2'/>
<package name='irqbalance'/>
<package name='limal'/>
<package name='limal-bootloader'/>
<package name='limal-perl'/>
<package name='logrotate'/>
<package name='mdadm'/>
<package name='mingetty'/>
<package name='openSUSE-release'/>
<package name='openslp'/>
<package name='pam'/>
<package name='pam-modules'/>
<package name='pcre'/>
<package name='perl'/>
<package name='perl-Bootloader'/>
<package name='perl-gettext'/>
<package name='permissions'/>
<package name='pm-utils'/>
<package name='pmtools'/>
<package name='suse-build-key'/>
<package name='make'/>
</packages>
<repository type='yast2'>
<source path='http://download.opensuse.org/distribution/11.3/repo/oss'/>
</repository>
<repository type='rpm-md'>
<source path='http://download.opensuse.org/update/11.3'/>
</repository>
</image>
\ No newline at end of file
#!/bin/sh
test -f /.kconfig && . /.kconfig
test -f /.profile && . /.profile
echo "Configure image: [$kiwi_iname]..."
#==========================================
# setup config.oempartition if required
#------------------------------------------
baseSetupOEMPartition
#==========================================
# remove unneded kernel files
#------------------------------------------
suseStripKernel
#==========================================
# setup gfxboot
#------------------------------------------
suseGFXBoot openSUSE grub
#==========================================
# remove unneeded packages
#------------------------------------------
rpm -e --nodeps --noscripts \
$(rpm -q `baseGetPackagesForDeletion` | grep -v "is not installed")
#==========================================
# remove unneeded files
#------------------------------------------
suseStripInitrd
#==========================================
# umount /proc
#------------------------------------------
umount /proc &>/dev/null
exit 0
#!/bin/bash
#================
# FILE : linuxrc
#----------------
# PROJECT : OpenSuSE KIWI Image System
# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
# :
# AUTHOR : Marcus Schaefer <ms@suse.de>
# :
# BELONGS TO : Operating System images
# :
# DESCRIPTION : This file includes functions for the OEM
# : installation mode. Installation means a dump of
# : the virtual disk file onto a preselected disk
# :
# :
# STATUS : BETA
#----------------
#
#======================================
# OEMNetwork
#--------------------------------------
function OEMNetwork {
# /.../
# setup network if pxe network installation mode was
# requested
# ----
#======================================
# load nics detected by hwinfo
#--------------------------------------
local loaded=0
probeNetworkCard
IFS=":"
for i in $networkModule;do
if [ ! -z $i ];then
modprobe $i 2>/dev/null
if test $? = 0;then
loaded=1
fi
fi
done
IFS=$IFS_ORIG
if test $loaded = 0;then
systemException \
"Network module: Failed to load network module !" \
"reboot"
fi
#======================================
# setup network via DHCP
#--------------------------------------
setupNetwork
#======================================
# find TFTP server from lease file
#--------------------------------------
checkServer
if [ -z $SERVER ];then
SERVER=tftp.$DOMAIN
fi
Echo "Checking Server name: $SERVER"
if ! ping -c 1 $SERVER >/dev/null 2>&1;then
Echo "Server: $SERVER not found"
if [ -z "$SERVERTYPE" ] || [ "$SERVERTYPE" = "tftp" ]; then
if [ ! -z "$DHCPSIADDR" ];then
Echo "Using: $DHCPSIADDR from dhcpcd-info"
SERVER=$DHCPSIADDR
elif [ ! -z "$DHCPSID" ];then
Echo "Using: $DHCPSID from dhcpcd-info"
SERVER=$DHCPSID
else
systemException \
"Can't assign SERVER IP/name... fatal !" \
"reboot"
fi
fi
fi
#======================================
# setup server name and blocksize
#--------------------------------------
imageBlkSize=8192
imageServer=$SERVER
}
#======================================
# OEMFindPartitions
#--------------------------------------
function OEMFindPartitions {
# /.../
# find partitions without known filesystem on the given
# disk device and return a list containing the information
# device:size-KB,device:size-KB,...
# ----
local disk=$1
local result
disk=$(echo $disk | sed -e s@^/dev/@@)
for i in $(cat /proc/partitions |\
grep -E $disk.+ | sed "s/^ *//;s/ *$//;s/ \{1,\}/:/g" |\
cut -f3,4 -d:)
do
local device=/dev/$(echo $i | cut -f2 -d:)
local kbsize=$(echo $i | cut -f1 -d:)
local mbsize=$((kbsize / 1024))
local partid=$(partitionID /dev/$disk $(nd $device))
if [ ! "$partid" = "83" ] && [ ! "$partid" = "8e" ] ;then
continue
fi
probeFileSystem $device
if [ ! -z "$FSTYPE" ] && [ "$FSTYPE" != "unknown" ];then
continue
fi
if [ -z "$result" ];then
result=$device:$mbsize
else
result=$result,$device:$mbsize
fi
done
echo $result
}
#======================================
# OEMInstall
#--------------------------------------
function OEMInstall {
# /.../
# Installation mode: find a usable disk to install the image
# on. The install image is a virtual disk. The system will be
# rebooted at the end of this function
# ----
local count=0
local dsize=0
local index=0
local message
local prefix=/cdrom
#======================================
# Check for install mode indicator file
#--------------------------------------
if [ ! -f $VMX_SYSTEM ];then
return
fi
#======================================
# Check for install mode combination
#--------------------------------------
if [ ! -z "$OEM_PARTITION_INSTALL" ] && [ ! -z "$pxe" ];then
systemException \
"Partition install via remote interface is not supported" \
"reboot"
fi
#======================================
# Display license if text exists
#--------------------------------------
displayEULA
#======================================
# Search CD/DVD/USB stick and mount it
#--------------------------------------
if [ -z "$pxe" ];then
USBStickDevice install
if [ $stickFound = 0 ];then
Echo "Search for USB stick failed, checking CD/DVD drive"
CDMount
export OEMInstallType=CD
else
Echo "Found Stick: $stickRoot -> $stickSerial"
mkdir -p /cdrom && mount $(ddn $stickRoot 2) /cdrom
export OEMInstallType=USB
unset stickSerial
fi
else
OEMNetwork
export OEMInstallType=PXE
fi
#======================================
# Search and ask for the install disk
#--------------------------------------
IFS=$IFS_ORIG
Echo "Searching harddrive for $OEMInstallType installation"
hwinfo=/usr/sbin/hwinfo
if [ "$OEMInstallType" = "USB" ];then
deviceDisks=`$hwinfo --disk |\
grep "Device File:" | cut -f2 -d: |\
cut -f1 -d"(" | sed -e s"@$imageDiskDevice@@"`
else
deviceDisks=`$hwinfo --disk |\
grep "Device File:" | cut -f2 -d: |\
cut -f1 -d"("`
fi
export deviceDisks=`echo $deviceDisks`
if [ -z "$deviceDisks" ];then
systemException \
"No device(s) for installation found... abort" \
"reboot"
fi
Echo "Found following disk device(s)"
count=0
for i in $deviceDisks;do
dsize=`partitionSize $i`
dsizeMB=`expr $dsize / 1024`
if [ "$dsizeMB" -gt 0 ];then
Echo -b "Disk $count -> $i [ $dsizeMB MB ]"
deviceArray[$count]=$i
deviceDSize[$count]=$dsize
count=`expr $count + 1`
fi
done
if [ "$count" = "1" ];then
#======================================
# Found one single disk... use it
#--------------------------------------
instDisk=${deviceArray[0]}
else
#======================================
# Found multiple disks...
#--------------------------------------
hd="\"$TEXT_SELECT\""
count=0
for i in $deviceDisks;do
dsize=`partitionSize $i`
dsizeMB=`expr $dsize / 1024`
if [ "$dsizeMB" -gt 0 ];then
dname=`getDiskID $i`
dname=`basename $dname | cut -c1-20`"..."
if [ $count = 0 ];then
dpara="$i \"$dname [ $dsizeMB MB ]\" on"
count=1
else
dpara="$dpara $i \"$dname [ $dsizeMB MB ]\" off"
fi
fi
done
instDisk=$(runInteractive \
"--stdout --radiolist $hd 20 75 15 $dpara"
)
if [ ! $? = 0 ];then
systemException \
"System installation canceled" \
"reboot"
fi
fi
imageDevice=$instDisk
#======================================
# Setup device names for further boot
#--------------------------------------
export imageDiskExclude=$instDisk
export imageDiskDevice=$instDisk
#======================================
# Import vmx configuration file
#--------------------------------------
importFile < $VMX_SYSTEM
#======================================
# Evaluate OEM install file
#--------------------------------------
field=0
imageZipped="uncompressed"
IFS=";" ; for n in $IMAGE;do
case $field in
0) field=1 ;;
1) imageName=$n ; field=2 ;;
2) imageVersion=$n; field=3 ;;
3) imageZipped=$n ;
esac
done
if [ ! -z "$pxe" ];then
prefix=/image
fi
if [ "$imageZipped" = "compressed" ];then
imageName="$prefix/$imageName.gz"
imageMD5="$imageName.md5"
else
imageName="$prefix/$imageName"
imageMD5="$imageName.md5"
fi
IFS=$IFS_ORIG
#======================================
# Search, ask for the install partition
#--------------------------------------
if [ ! -z "$OEM_PARTITION_INSTALL" ];then
#======================================
# Loop mount disk image file
#--------------------------------------
reqpart=1
loop=$(losetup -s -f $imageName)
loop=$(echo $loop | sed -e s@^/dev/@@)
if ! kpartx -a /dev/$loop;then
systemException \
"Loop setup for $instDisk failed" \
"reboot"
fi
imageName=/dev/mapper/${loop}p1
if [ -e /dev/mapper/${loop}p2 ];then
reqpart=2
fi
#======================================
# Lookup/Check available partitions
#--------------------------------------
if [ $reqpart -gt 2 ];then
Echo "Sorry only disk images with a root and optional boot"
Echo "partition are supported in partition based install mode"
Echo "I found $reqpart partitions in the disk image"
systemException \
"Installation aborted..." \
"reboot"
fi
partitions=$(OEMFindPartitions $instDisk)
if [ ! -z "$partitions" ];then
count=0
IFS=","
for i in $partitions;do
count=$((count + 1))
done
IFS=$IFS_ORIG
fi
if [ -z "$partitions" ] || [ $count -lt $reqpart ];then
if [ -z "$partitions" ];then
Echo "No suitable partition(s) for installation found:"
else
Echo "Not enough partitions for installation found:"
Echo "Found $count but required $reqpart"
fi
Echo "Please prepare your disk first:"
echo
Echo -b "kiwi requires $reqpart partition(s) of the types below"
Echo -b "without any filesystem inside. I recommend to use YaST"
Echo -b "to do the re-partitioning. YaST also allows you to shrink"
Echo -b "existing partitions without loosing data."
echo
count=0
for i in /dev/mapper/${loop}*;do
psize=`partitionSize $i`
partid=$(partitionID /dev/$loop $(nd $i))
if [ $count = 0 ];then
Echo -b "* Root partition requires at least $psize KB"
fi
if [ $count = 1 ];then
Echo -b "* Boot partition requires at least $psize KB"
fi
Echo -b " Partition Type: 0x$partid"
count=$((count + 1))
done
echo
systemException \
"Installation aborted..." \
"reboot"
fi
#======================================
# Do we have a LVM image...
#--------------------------------------
for i in /dev/mapper/${loop}*;do
partid=$(partitionID /dev/$loop $(nd $i))
if [ "$partid" = "8e" ];then
export haveLVM=yes
fi
done
#======================================
# Select all required partitions
#--------------------------------------
if [ $count -eq $reqpart ] && [ $reqpart -eq 1 ];then
#======================================
# There is only one free and required
#--------------------------------------
pname=`echo $partitions | cut -f1 -d:`
imageDevice=$pname
rID=$(nd $pname)
instItems[0]=$imageName:$imageDevice
else
#======================================
# There is a choice, let the user do it
#--------------------------------------
for p in /dev/mapper/${loop}*;do
if [ $p = /dev/mapper/${loop}p1 ];then
select="root"
elif [ $p = /dev/mapper/${loop}p2 ];then
select="boot"
fi
TEXT_SELECT=$(
getText "Select %1 partition for installation:" $select)
count=0
IFS=","
for i in $partitions;do
psize=`echo $i | cut -f2 -d:`
pname=`echo $i | cut -f1 -d:`
if [ $count = 0 ];then
dpara="$pname \"[ $psize MB ]\" on"
count=1
else
dpara="$dpara $pname \"[ $psize MB ]\" off"
fi
count=$((count + 1))
done
IFS=$IFS_ORIG
selectedPart=$(runInteractive \
"--stdout --radiolist \"$TEXT_SELECT\" 20 75 15 $dpara"
)
if [ ! $? = 0 ];then
systemException \
"System installation canceled" \
"reboot"
fi
count=0
IFS=","
for i in $partitions;do
psize=`echo $i | cut -f2 -d:`
pname=`echo $i | cut -f1 -d:`
if [ ! $pname = $selectedPart ];then
if [ $count = 0 ];then
partitions_next=$pname:$psize
else
partitions_next=$partitions_next,$pname:$psize
fi
fi
count=$((count + 1))
done
IFS=$IFS_ORIG
partitions=$partitions_next
if [ $p = /dev/mapper/${loop}p1 ];then
imageDevice=$selectedPart
rID=$(nd $selectedPart)
instItems[0]=$imageName:$imageDevice
elif [ $p = /dev/mapper/${loop}p2 ];then
bID=$(nd $selectedPart)
instItems[1]=/dev/mapper/${loop}p2:$selectedPart
fi
done
fi
#======================================
# Search for a swap space
#--------------------------------------
sID=$(searchSwapSpace)
if [ ! -z "$sID" ];then
sID=$(nd $sID)
else
sID=no
fi
#======================================
# Setup device names for further boot
#--------------------------------------
# /.../
# no support for reocvery and extra home partition in
# partition install mode
# ----
export DONT_PARTITION=1
export OEM_WITHOUTHOME=1
unset OEM_RECOVERY
if [ -z "$bID" ];then
bID=$rID
fi
if [ "$haveLVM" = "yes" ];then
setupDeviceNames $rID $sID no no $bID no $VGROUP
else
setupDeviceNames $rID $sID no no $bID no
fi
else
instItems[0]=$imageName:$imageDevice
fi
#======================================
# Checks and MD5 sums...
#--------------------------------------
if [ -z "$OEM_PARTITION_INSTALL" ];then
#======================================
# Check MBR ID's...
#--------------------------------------
# /.../
# mbr ID check is deactivated by default
# see bug #525682 for details
# ----
nombridcheck=1
if [ -z "$nombridcheck" ];then
mbrD=$instDisk
mbrI="cat $imageName"
if [ "$imageZipped" = "compressed" ];then
mbrI="gzip -cd $imageName"
fi
mbrM=$(dd if=$mbrD bs=1 count=4 \
skip=$((0x1b8))|hexdump -n4 -e '"0x%x"')
mbrI=$($mbrI | dd bs=1 count=4 \
skip=$((0x1b8))|hexdump -n4 -e '"0x%x"')
if [ $mbrM = $mbrI ];then
systemException \
"Base system already installed" \
"reboot"
fi
fi
#======================================
# read MD5 information if PXE install
#--------------------------------------
if [ ! -z "$pxe" ];then
multicast="disable"
fetchFile $imageMD5 /image.md5 uncompressed $imageServer
if test $loadCode != 0 || ! loadOK "$loadStatus";then
systemException \
"Download of $imageMD5 failed: $loadStatus" \
"reboot"
fi
imageMD5=/image.md5
fi
fi
#======================================
# Warn me before performing the install
#--------------------------------------
for i in ${instItems[*]}; do
Target=$(echo $i | cut -f2 -d:)
items="$items,$Target"
done
items=$(echo $items | sed -e s@^,@@)
Echo "Entering installation mode for disk: $items"
if [ -z "$kiwi_oemunattended" ];then
TEXT_INST=$(
getText "Destroying ALL data on %1, continue ?" $items)
Dialog --yesno "\"$TEXT_INST\"" 5 70
if [ ! $? = 0 ];then
systemException \
"System installation canceled" \
"user_reboot"
fi
fi
clear
for i in ${instItems[*]};do
#======================================
# Setup source and target data
#--------------------------------------
Source=$(echo $i | cut -f1 -d:)
Target=$(echo $i | cut -f2 -d:)
if [ -z "$OEM_PARTITION_INSTALL" ];then
read sum1 blocks blocksize zblocks zblocksize < $imageMD5
else
blocksize=4096
partKB=$(partitionSize $Source)
partBT=$((partKB * 1024))
blocks=$((partBT / blocksize))
fi
#======================================
# Get available disk space
#--------------------------------------
haveKByte=`partitionSize $Target`
#======================================
# Get required disk space, setup I/O
#--------------------------------------
needBytes=$(expr $blocks \* $blocksize)
needKByte=`expr $needBytes / 1024`
needMByte=`expr $needKByte / 1024`
#======================================
# Check disk space...
#--------------------------------------
haveMByte=`expr $haveKByte / 1024`
needMByte=`expr $needKByte / 1024`
Echo "Have size: $Target -> $haveMByte MB"
Echo "Need size: $Source -> $needMByte MB"
if [ $needMByte -gt $haveMByte ];then
systemException \
"Not enough space available for this image" \
"reboot"
fi
#======================================
# Dump image(s) on disk
#--------------------------------------
if [ -z "$pxe" ];then
dump="cat $Source"
if test "$imageZipped" = "compressed"; then
dump="gzip -cd $Source"
fi
if [ -x /usr/bin/dcounter ];then
progressBaseName=$(basename $Source)
TEXT_LOAD=$(getText "Loading %1" $progressBaseName)
dump="$dump | dcounter -s $needMByte -l \"$TEXT_LOAD \""
fi
Echo "Loading $Source [$Target] "
if [ -x /usr/bin/dcounter ];then
test -e /progress || mkfifo /progress
errorLogStop
(
if ! eval $dump 2>/progress|dd bs=32k of=$Target &>/dev/null
then
errorLogContinue
systemException \
"Failed to install image: $Source -> $Target" \
"reboot"
fi
)&
echo "cat /progress | dialog \
--backtitle \"$TEXT_INSTALLTITLE\" \
--progressbox 3 65
" > /tmp/progress.sh
if [ -e /dev/fb0 ];then
fbiterm -m $UFONT -- bash -e /tmp/progress.sh
else
bash -e /tmp/progress.sh
fi
clear
else
if ! eval $dump | dd bs=32k of=$Target &>/dev/null; then
systemException \
"Failed to install image: $Source -> $Target" \
"reboot"
fi
fi
if [ -x /usr/bin/dcounter ];then
errorLogContinue
fi
else
multicast="disable"
Echo "Loading $Source [$Target BS:$imageBlkSize Byte]..."
fetchFile $Source $Target $imageZipped $imageServer
if test $loadCode != 0 || ! loadOK "$loadStatus";then
systemException \
"Download of $imageName failed: $loadStatus" \
"reboot"
fi
fi
done
#======================================
# Clear loops if required
#--------------------------------------
if [ ! -z "$OEM_PARTITION_INSTALL" ];then
dmsetup remove_all
losetup -d /dev/$loop
fi
#======================================
# Check the md5sum of the raw disk
#--------------------------------------
if [ -z "$OEM_PARTITION_INSTALL" ];then
Echo "Install complete, checking data..."
verifyBytes=$((blocks * blocksize))
verifyMByte=$((verifyBytes / 1048576))
if [ -x /usr/bin/dcounter ];then
test -e /progress || mkfifo /progress
TEXT_VERIFY=$(getText "Verifying %1" $imageDevice)
dump="cat $imageDevice"
dump="$dump | dcounter -s $verifyMByte -l \"$TEXT_VERIFY \""
errorLogStop
(
eval $dump 2>/progress |\
head --bytes=$verifyBytes | md5sum - > /etc/ireal.md5
)&
echo "cat /progress | dialog \
--backtitle \"$TEXT_INSTALLTITLE\" \
--progressbox 3 65
" > /tmp/progress.sh
if [ -e /dev/fb0 ];then
fbiterm -m $UFONT -- bash -e /tmp/progress.sh
else
bash -e /tmp/progress.sh
fi
clear
errorLogContinue
else
dd if=$imageDevice bs=1024 |\
head --bytes=$verifyBytes |\
md5sum - > /etc/ireal.md5
fi
read sum2 dumy < /etc/ireal.md5
if [ $sum1 != $sum2 ];then
systemException \
"Image checksum test failed" \
"reboot"
fi
Echo "Image checksum test: fine :-)"
Echo "System installation has finished"
fi
#======================================
# Umount CD/DVD USB
#--------------------------------------
umount /cdrom
#======================================
# Reread partition table
#--------------------------------------
if [ -z "$OEM_PARTITION_INSTALL" ];then
blockdev --rereadpt $imageDevice
deviceTest=$(ddn $imageDevice 1)
if ! waitForStorageDevice $deviceTest;then
systemException \
"Partition $deviceTest doesn't appear... fatal !" \
"reboot"
fi
fi
#======================================
# Release network on PXE install
#--------------------------------------
if [ ! -z "$pxe" ];then
dhcpcd -p -k $PXE_IFACE
fi
#======================================
# create recovery archive if requested
#--------------------------------------
if [ ! -z "$OEM_RECOVERY_INPLACE" ];then
setupInitialDeviceNames
if ! mountSystem $imageRootDevice;then
systemException "Failed to mount root filesystem" "reboot"
fi
if [ ! -f /mnt/recovery.partition.size ];then
systemException "Can't find recovery part size info" "reboot"
fi
recoMByte=$(cat /mnt/recovery.partition.size)
recoBytes=$((recoMByte - 100))
recoBytes=$((recoBytes * 1048576))
haveMByte=$(
df -B1M $imageRootDevice | tail -n 1 | column -t |\
sed -e s@" "@:@g | cut -f 4 -d:
)
if [ "$haveMByte" -gt "$recoMByte" ];then
pushd /mnt &>/dev/null
Echo "Creating recovery root tarball..."
test -e /progress || mkfifo /progress
test -e /usr/bin/mst || cp /usr/bin/tail /usr/bin/mst
(
touch recovery.tar.gz
tar --numeric-owner -czpf recovery.tar.gz . \
--exclude "./dev" \
--exclude "./proc" \
--exclude "./sys" \
--exclude "./recovery.*" &
rPID=$!
while kill -0 $rPID &>/dev/null;do
rReady=$(stat --format="%s" ./recovery.tar.gz)
if [ $rReady -eq 0 ];then
continue
fi
rPDone=$(echo "scale=4; $recoBytes / $rReady" | bc)
rPDone=$(echo "scale=0; 100 / $rPDone" | bc)
getText "archiving: %1..." "$rPDone%" > /progress
sleep 1
done
dPID=$(pidof mst)
kill $dPID
)&
echo "mst -f /progress | dialog \
--backtitle \"$TEXT_INSTALLTITLE\" \
--progressbox 3 50
" > /tmp/progress.sh
if [ -e /dev/fb0 ];then
fbiterm -m $UFONT -- bash -e /tmp/progress.sh
else
bash -e /tmp/progress.sh
fi
popd &>/dev/null
clear
else
Echo "Not enough space left to create recovery archive"
Echo "=> Warning: Postponed after repartitioning is done"
Echo "=> Warning: This moves the archive creation to first boot"
fi
umountSystem
fi
#======================================
# Check for halt request
#--------------------------------------
if [ ! -z "$OEM_DUMPHALT" ];then
if [ "$OEMInstallType" = "CD" ];then
TEXT_DUMP=$TEXT_CDPULL
else
TEXT_DUMP=$TEXT_USBPULL
fi
if [ "$OEMInstallType" = "CD" ];then
CDEject
fi
Dialog \
--backtitle \"$TEXT_INSTALLTITLE\" \
--msgbox "\"$TEXT_DUMP\"" 5 70
systemException \
"Reboot requested after image installation" \
"user_reboot"
fi
}
# vim: set noexpandtab:
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1024x768.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=994
th=708
jpeg=/etc/bootsplash/themes/NLD/images/bootsplash-1024x768.jpg
silentjpeg=/etc/bootsplash/themes/NLD/images/silent-1024x768.jpg
mnganim logo /etc/bootsplash/themes/NLD/images/logo.mng initframe logo silent center 512 384
mnganim logov /etc/bootsplash/themes/NLD/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 418 614 598 615 #ffffff10
box silent inter 418 613 418 615 #ffffff80
box silent 418 613 598 616 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1280x1024.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=1250
th=964
jpeg=/etc/bootsplash/themes/NLD/images/bootsplash-1280x1024.jpg
silentjpeg=/etc/bootsplash/themes/NLD/images/silent-1280x1024.jpg
mnganim logo /etc/bootsplash/themes/NLD/images/logo.mng initframe logo silent center 640 512
mnganim logov /etc/bootsplash/themes/NLD/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 546 819 726 820 #ffffff10
box silent inter 546 818 546 820 #ffffff80
box silent 546 818 726 821 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 800x600.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=770
th=540
jpeg=/etc/bootsplash/themes/NLD/images/bootsplash-800x600.jpg
silentjpeg=/etc/bootsplash/themes/NLD/images/silent-800x600.jpg
mnganim logo /etc/bootsplash/themes/NLD/images/logo.mng initframe logo silent center 400 300
mnganim logov /etc/bootsplash/themes/NLD/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 306 480 486 481 #ffffff10
box silent inter 306 479 306 481 #ffffff80
box silent 306 479 486 482 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1024x768.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=994
th=708
jpeg=/etc/bootsplash/themes/SLED/images/bootsplash-1024x768.jpg
silentjpeg=/etc/bootsplash/themes/SLED/images/silent-1024x768.jpg
mnganim logo /etc/bootsplash/themes/SLED/images/logo.mng initframe logo silent center 512 384
mnganim logov /etc/bootsplash/themes/SLED/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 418 614 598 615 #ffffff10
box silent inter 418 613 418 615 #ffffff80
box silent 418 613 598 616 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1280x1024.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=1250
th=964
jpeg=/etc/bootsplash/themes/SLED/images/bootsplash-1280x1024.jpg
silentjpeg=/etc/bootsplash/themes/SLED/images/silent-1280x1024.jpg
mnganim logo /etc/bootsplash/themes/SLED/images/logo.mng initframe logo silent center 640 512
mnganim logov /etc/bootsplash/themes/SLED/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 546 819 726 820 #ffffff10
box silent inter 546 818 546 820 #ffffff80
box silent 546 818 726 821 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 800x600.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=770
th=540
jpeg=/etc/bootsplash/themes/SLED/images/bootsplash-800x600.jpg
silentjpeg=/etc/bootsplash/themes/SLED/images/silent-800x600.jpg
mnganim logo /etc/bootsplash/themes/SLED/images/logo.mng initframe logo silent center 400 300
mnganim logov /etc/bootsplash/themes/SLED/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 306 480 486 481 #ffffff10
box silent inter 306 479 306 481 #ffffff80
box silent 306 479 486 482 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1024x768.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=994
th=708
jpeg=/etc/bootsplash/themes/SLES/images/bootsplash-1024x768.jpg
silentjpeg=/etc/bootsplash/themes/SLES/images/silent-1024x768.jpg
mnganim logo /etc/bootsplash/themes/SLES/images/logo.mng initframe logo silent center 512 384
mnganim logov /etc/bootsplash/themes/SLES/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 418 614 598 615 #ffffff10
box silent inter 418 613 418 615 #ffffff80
box silent 418 613 598 616 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1280x1024.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=1250
th=964
jpeg=/etc/bootsplash/themes/SLES/images/bootsplash-1280x1024.jpg
silentjpeg=/etc/bootsplash/themes/SLES/images/silent-1280x1024.jpg
mnganim logo /etc/bootsplash/themes/SLES/images/logo.mng initframe logo silent center 640 512
mnganim logov /etc/bootsplash/themes/SLES/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 546 819 726 820 #ffffff10
box silent inter 546 818 546 820 #ffffff80
box silent 546 818 726 821 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 800x600.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=770
th=540
jpeg=/etc/bootsplash/themes/SLES/images/bootsplash-800x600.jpg
silentjpeg=/etc/bootsplash/themes/SLES/images/silent-800x600.jpg
mnganim logo /etc/bootsplash/themes/SLES/images/logo.mng initframe logo silent center 400 300
mnganim logov /etc/bootsplash/themes/SLES/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 306 480 486 481 #ffffff10
box silent inter 306 479 306 481 #ffffff80
box silent 306 479 486 482 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1024x768.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=994
th=708
jpeg=/etc/bootsplash/themes/SuSE-SLES/images/bootsplash-1024x768.jpg
silentjpeg=/etc/bootsplash/themes/SuSE-SLES/images/silent-1024x768.jpg
mnganim logo /etc/bootsplash/themes/SuSE-SLES/images/logo.mng initframe logo silent center 512 384
mnganim logov /etc/bootsplash/themes/SuSE-SLES/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 418 614 598 615 #ffffff10
box silent inter 418 613 418 615 #ffffff80
box silent 418 613 598 616 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1280x1024.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=1250
th=964
jpeg=/etc/bootsplash/themes/SuSE-SLES/images/bootsplash-1280x1024.jpg
silentjpeg=/etc/bootsplash/themes/SuSE-SLES/images/silent-1280x1024.jpg
mnganim logo /etc/bootsplash/themes/SuSE-SLES/images/logo.mng initframe logo silent center 640 512
mnganim logov /etc/bootsplash/themes/SuSE-SLES/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 546 819 726 820 #ffffff10
box silent inter 546 818 546 820 #ffffff80
box silent 546 818 726 821 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 800x600.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=770
th=540
jpeg=/etc/bootsplash/themes/SuSE-SLES/images/bootsplash-800x600.jpg
silentjpeg=/etc/bootsplash/themes/SuSE-SLES/images/silent-800x600.jpg
mnganim logo /etc/bootsplash/themes/SuSE-SLES/images/logo.mng initframe logo silent center 400 300
mnganim logov /etc/bootsplash/themes/SuSE-SLES/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 306 480 486 481 #ffffff10
box silent inter 306 479 306 481 #ffffff80
box silent 306 479 486 482 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1024x768.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=994
th=708
jpeg=/etc/bootsplash/themes/SuSE/images/bootsplash-1024x768.jpg
silentjpeg=/etc/bootsplash/themes/SuSE/images/silent-1024x768.jpg
mnganim logo /etc/bootsplash/themes/SuSE/images/logo.mng initframe logo silent center 512 384
mnganim logov /etc/bootsplash/themes/SuSE/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 418 614 598 615 #ffffff10
box silent inter 418 613 418 615 #ffffff80
box silent 418 613 598 616 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1280x1024.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=1250
th=964
jpeg=/etc/bootsplash/themes/SuSE/images/bootsplash-1280x1024.jpg
silentjpeg=/etc/bootsplash/themes/SuSE/images/silent-1280x1024.jpg
mnganim logo /etc/bootsplash/themes/SuSE/images/logo.mng initframe logo silent center 640 512
mnganim logov /etc/bootsplash/themes/SuSE/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 546 819 726 820 #ffffff10
box silent inter 546 818 546 820 #ffffff80
box silent 546 818 726 821 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 800x600.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=770
th=540
jpeg=/etc/bootsplash/themes/SuSE/images/bootsplash-800x600.jpg
silentjpeg=/etc/bootsplash/themes/SuSE/images/silent-800x600.jpg
mnganim logo /etc/bootsplash/themes/SuSE/images/logo.mng initframe logo silent center 400 300
mnganim logov /etc/bootsplash/themes/SuSE/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 306 480 486 481 #ffffff10
box silent inter 306 479 306 481 #ffffff80
box silent 306 479 486 482 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1024x768.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=994
th=708
jpeg=/etc/bootsplash/themes/openSUSE/images/bootsplash-1024x768.jpg
silentjpeg=/etc/bootsplash/themes/openSUSE/images/silent-1024x768.jpg
mnganim logo /etc/bootsplash/themes/openSUSE/images/logo.mng initframe logo silent center 512 384
mnganim logov /etc/bootsplash/themes/openSUSE/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 418 614 598 615 #ffffff10
box silent inter 418 613 418 615 #ffffff80
box silent 418 613 598 616 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 1280x1024.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=1250
th=964
jpeg=/etc/bootsplash/themes/openSUSE/images/bootsplash-1280x1024.jpg
silentjpeg=/etc/bootsplash/themes/openSUSE/images/silent-1280x1024.jpg
mnganim logo /etc/bootsplash/themes/openSUSE/images/logo.mng initframe logo silent center 640 512
mnganim logov /etc/bootsplash/themes/openSUSE/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 546 819 726 820 #ffffff10
box silent inter 546 818 546 820 #ffffff80
box silent 546 818 726 821 #ffffff80
# This is a bootsplash configuration file for
# SuSE based Image, resolution 800x600.
#
# See www.bootsplash.org for more information.
# created by SUSE Image Builder
#
version=3
state=1
progress_enable=0
overpaintok=1
fgcolor=7
bgcolor=0
tx=20
ty=60
tw=770
th=540
jpeg=/etc/bootsplash/themes/openSUSE/images/bootsplash-800x600.jpg
silentjpeg=/etc/bootsplash/themes/openSUSE/images/silent-800x600.jpg
mnganim logo /etc/bootsplash/themes/openSUSE/images/logo.mng initframe logo silent center 400 300
mnganim logov /etc/bootsplash/themes/openSUSE/images/logov.mng initframe logov origin 0 0 0
trigger "isdown" quit
trigger "rlreached 5" toverbose
trigger "rlchange 0" tosilent
trigger "rlchange 6" tosilent
progress_enable=1
box silent noover 306 480 486 481 #ffffff10
box silent inter 306 479 306 481 #ffffff80
box silent 306 479 486 482 #ffffff80
This source diff could not be displayed because it is too large. You can view the blob instead.
#!/bin/bash
#================
# FILE : linuxrc
#----------------
# PROJECT : OpenSuSE KIWI Image System
# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
# :
# AUTHOR : Marcus Schaefer <ms@suse.de>
# :
# BELONGS TO : Operating System images
# :
# DESCRIPTION : This file is changed to become the real
# : linuxrc script which is used to prepare the
# : operating system for the main image
# :
# :
# STATUS : BETA
#----------------
#======================================
# Exports (General)...
#--------------------------------------
export PATH="/sbin:/bin:/usr/sbin:/usr/bin"
export IFS_ORIG=$IFS
export DEBUG=0
export DOBACKUP=1
#======================================
# Exports (Booting)
#--------------------------------------
export DOMURD_MODULES="xennet xenblk"
export INITRD_MODULES="reiserfs"
export LOCAL_BOOT=no
export systemIntegrity="clean"
#======================================
# Exports (Configuration)
#--------------------------------------
export VMX_SYSTEM="/config.vmxsystem"
export LIVECD_CONFIG="/cdrom/config.isoclient"
export OEM_PARTITION_CONFIG="/config.oempartition"
#======================================
# Functions...
#--------------------------------------
. /include
. /repart
. /dump
initialize
#======================================
# Functions...
#--------------------------------------
function setupInitialDeviceNames {
#======================================
# Check for DONT_PARTITION variable
#--------------------------------------
if [ ! -z "$DONT_PARTITION" ];then
return
fi
#======================================
# Check boot device
#--------------------------------------
if [ -z "$imageDiskDevice" ];then
systemException \
"Couldn't find any boot device... abort" \
"reboot"
fi
#======================================
# Set default filesystem device names
#--------------------------------------
export imageRWDevice=$(ddn $imageDiskDevice 2)
export imageRODevice=$(ddn $imageDiskDevice 1)
export imageIOWRDevice=$imageRWDevice
#======================================
# Check for LVM or standard boot
#--------------------------------------
if searchVolumeGroup; then
#======================================
# LVM setup...
#--------------------------------------
export haveLVM=yes
if [ -e /dev/$VGROUP/LVComp ];then
export imageRootDevice=/dev/$VGROUP/LVComp
else
export imageRootDevice=/dev/$VGROUP/LVRoot
fi
export imageRWDevice=/dev/$VGROUP/LVRoot
export imageRODevice=/dev/$VGROUP/LVComp
export imageIOWRDevice=$imageRWDevice
export imageBootDevice=$(ddn $imageDiskDevice 2)
if [ ! -z "$KIWI_RECOVERY" ];then
export imageRecoveryDevice=$(ddn $imageDiskDevice $KIWI_RECOVERY)
fi
probeFileSystem $imageRootDevice
else
#======================================
# Standard setup
#--------------------------------------
if [ ! -z "$KIWI_RECOVERY" ];then
export imageRecoveryDevice=$(ddn $imageDiskDevice $KIWI_RECOVERY)
export imageRootDevice=$(ddn $imageDiskDevice 1)
else
for i in 1 2;do
export imageRootDevice=$(ddn $imageDiskDevice $i)
probeFileSystem $imageRootDevice
if [ ! "$FSTYPE" = "unknown" ];then
break
fi
done
fi
fi
#======================================
# Check for LUKS extension on root fs
#--------------------------------------
if [ "$FSTYPE" = "luks" ];then
imageRootDevice=$(luksOpen $imageRootDevice)
probeFileSystem $imageRootDevice
export haveLuks=yes
fi
#======================================
# Check for LUKS extension on rw fs
#--------------------------------------
if isFSTypeReadOnly;then
FSTYPE_OLD=$FSTYPE
probeFileSystem $imageRWDevice
if [ "$FSTYPE" = "luks" ];then
export haveLuks=yes
fi
FSTYPE=$FSTYPE_OLD
fi
}
#======================================
# Beautify Startup
#--------------------------------------
echo "Loading KIWI OEM Boot-System..."
echo "-------------------------------"
#======================================
# Update library path
#--------------------------------------
ldconfig
#======================================
# 1) Mounting local file systems
#--------------------------------------
mountSystemFilesystems &>/dev/null
test -e /proc/splash && echo verbose > /proc/splash
closeKernelConsole
#======================================
# 2) Prepare module load support
#--------------------------------------
touch /etc/modules.conf
touch /lib/modules/*/modules.dep
#======================================
# 3) run udevd
#--------------------------------------
udevStart
#======================================
# 4) Include proc/cmdline information
#--------------------------------------
includeKernelParameters
if \
[ ! -z "$UNIONFS_CONFIG" ] || [ "$COMBINED_IMAGE" = "local" ] ||\
[ ! -z "$KIWI_RECOVERY" ]
then
# /.../
# if the unionfs/combined information is already in place at this
# stage it comes from the cmdline data which means we are not
# booting from CD/DVD USB stick but want to boot the local system
# This also applies if we use an oem system with the recovery
# feature enabled
# ----
export LOCAL_BOOT="yes"
fi
#======================================
# 5) start boot shell
#--------------------------------------
startBlogD
startShell
errorLogStart
openKernelConsole
#======================================
# 6) Including required kernel modules
#--------------------------------------
probeDevices
#======================================
# 7) Select language if not in cmdline
#--------------------------------------
selectLanguage
#======================================
# 8) Import OEM partition config
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ] && [ -f $OEM_PARTITION_CONFIG ];then
Echo "Including oem partition info file"
importFile < $OEM_PARTITION_CONFIG
fi
#======================================
# 9) Search boot device...
#--------------------------------------
if [ -z "$pxe" ];then
Echo "Searching for boot device..."
if [ "$LOCAL_BOOT" = "no" ];then
if ! searchBIOSBootDevice;then
systemException "$biosBootDevice" "reboot"
fi
export imageDiskDevice=$biosBootDevice
else
export imageDiskDevice=$(dn $disk)
if [ ! -z "$KIWI_RECOVERY" ];then
export imageRecoveryDevice=$(ddn $imageDiskDevice $KIWI_RECOVERY)
fi
fi
Echo "Found boot device: $imageDiskDevice"
fi
#======================================
# 10) Check for installation mode...
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ];then
OEMInstall
fi
#======================================
# 11) Setup device names...
#--------------------------------------
setupInitialDeviceNames
#======================================
# 12) Check for read-only filesystem
#--------------------------------------
if isFSTypeReadOnly;then
setupUnionFS $imageRWDevice $imageRODevice $unionFST
fi
#======================================
# 13) repartition the disk device
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ];then
OEMRepart
fi
#======================================
# 14) Resize filesystem to full space
#--------------------------------------
Echo "Filesystem of OEM system is: $FSTYPE -> $imageRootDevice"
if [ "$LOCAL_BOOT" = "no" ];then
deviceResize=$imageRootDevice
fstypeRootFS=$FSTYPE
if [ ! -z $COMBINED_IMAGE ];then
deviceResize=$imageIOWRDevice
KIWI_INITRD_PARAMS="COMBINED_IMAGE=local"
probeFileSystem $deviceResize
export KIWI_INITRD_PARAMS
fi
if isFSTypeReadOnly && [ -z "$COMBINED_IMAGE" ];then
deviceResize=$imageIOWRDevice
KIWI_INITRD_PARAMS="UNIONFS_CONFIG=yes"
probeFileSystem $deviceResize
export KIWI_INITRD_PARAMS
fi
if [ ! -z "$deviceResize" ] && partitionSize $deviceResize &>/dev/null;then
if [ ! -z "$OEM_RECOVERY" ];then
KIWI_INITRD_PARAMS="$KIWI_INITRD_PARAMS LOCAL_BOOT=yes"
export KIWI_INITRD_PARAMS
fi
if [ -z "$DONT_PARTITION" ];then
resizeFilesystem $deviceResize
fi
fi
if [ "$OEM_KIWI_INITRD" = "yes" ];then
if ! echo $KIWI_INITRD_PARAMS | grep -qi LOCAL_BOOT;then
KIWI_INITRD_PARAMS="$KIWI_INITRD_PARAMS LOCAL_BOOT=yes"
fi
fi
FSTYPE=$fstypeRootFS
fi
#======================================
# 15) Mount system
#--------------------------------------
if [ -z "$RESTORE" ];then
if ! mountSystem $imageRootDevice;then
systemException "Failed to mount root filesystem" "reboot"
fi
validateRootTree
fi
#======================================
# 16) Recover system if requested
#--------------------------------------
if [ ! -z "$KIWI_RECOVERY" ];then
text=$TEXT_REPAIR
if [ ! -z "$RESTORE" ];then
text=$TEXT_RESTORE
fi
Dialog --defaultno --yesno "\"$text\"" 5 50
if [ ! $? = 0 ];then
systemException "System-Recovery not started" "reboot"
fi
clear
Echo "Starting System-Recovery/Restore..."
#======================================
# 16.1) mount recovery partition
#--------------------------------------
mkdir -p /reco-save
if ! mount -o ro $imageRecoveryDevice /reco-save >/dev/null;then
systemException "Failed to mount recovery device" "reboot"
fi
#======================================
# 16.2) restore MBR/LVM in restore mode
#--------------------------------------
if [ ! -z "$RESTORE" ];then
if ! dd if=/reco-save/mbr of=$imageDiskDevice;then
systemException "Failed to restore MBR" "reboot"
fi
umount $imageRecoveryDevice
blockdev --rereadpt $imageDiskDevice
waitForStorageDevice $imageRecoveryDevice
if ! mount -o ro $imageRecoveryDevice /reco-save >/dev/null;then
systemException "Failed to remount recovery device" "reboot"
fi
if [ -f /reco-save/lvm ];then
restoreLVMPhysicalVolumes /reco-save/lvm
if ! vgcfgrestore -f /reco-save/lvm $VGROUP;then
systemException "Failed to restore LVM metadata" "reboot"
fi
setupInitialDeviceNames
fi
fi
#======================================
# 16.3) restore root archive
#--------------------------------------
mkfifo /progress && cp /usr/bin/tail /usr/bin/mst
(
#======================================
# recreate filesystem in restore mode
#--------------------------------------
if [ ! -z "$RESTORE" ];then
getText "Clean sweep..." > /progress
export FSTYPE=$(cat /reco-save/recovery.tar.filesystem)
createFilesystem $imageRootDevice
if ! mountSystem $imageRootDevice;then
systemException "Failed to mount root filesystem" "reboot"
fi
for i in dev sys proc;do
mkdir -p /mnt/$i
done
fi
cd /mnt
#======================================
# store files temporary
#--------------------------------------
if [ -z "$RESTORE" ];then
for i in passwd shadow group;do
if ! cp etc/$i tmp/$i;then
cd / ; umountSystem; rm -f tmp/passwd tmp/shadow tmp/group
systemException "Failed to store $i" "reboot"
fi
done
if ! cp -a var/lib/rpm tmp/;then
rm -rf tmp/rpm; cd / ; umountSystem
systemException "Failed to store RPM database" "reboot"
fi
fi
#======================================
# create backup diffs
#--------------------------------------
if [ -z "$RESTORE" ] && [ "$DOBACKUP" = 1 ];then
getText "Clean sweep..." > /progress
rm -rf tmp/foobar; mkdir -p tmp/foobar
rm -rf tmp/backup; mkdir -p tmp/backup
if ! find etc/ home/ -type f 2>/dev/null |\
xargs tar -cO -f - 2>/dev/null |\
tar -v -C tmp/foobar -xf -
then
rm -rf tmp/foobar; umountSystem
systemException "Failed to create backup files" "reboot"
fi
fi
#======================================
# extract root archive
#--------------------------------------
rFiles=$(cat /reco-save/recovery.tar.files)
tar --numeric-owner -xvpf /reco-save/recovery.tar.gz >/tmp/rFiles &
rPID=$!
while kill -0 $rPID &>/dev/null;do
rReady=$(cat /tmp/rFiles | wc -l)
if [ $rReady -eq 0 ];then
continue
fi
#Echo -e -n "$rReady files from $rFiles restored...\r"
rFDone=$(echo "scale=4; $rFiles / $rReady" | bc)
rFDone=$(echo "scale=0; 100 / $rFDone" | bc)
getText "restoring: %1..." "$rFDone%" > /progress
#getText "%1 files from %2 restored..." $rReady $rFiles > /progress
sleep 1
done
#======================================
# create backup diffs
#--------------------------------------
if [ -z "$RESTORE" ] && [ "$DOBACKUP" = 1 ];then
rReady=0
rCount=0
getText "backing up: %1..." "0%" > /progress
cat /tmp/rFiles | grep -E "^(./etc|./home)" > /tmp/bFiles
rFilesBackup=$(cat /tmp/bFiles | wc -l)
for file in $(cat /tmp/bFiles);do
if [ ! -d $file ] && [ -e $file ] && [ -e tmp/foobar/$file ]
then
sizeOrig=$(stat $file --printf=%s)
sizeBack=$(stat tmp/foobar/$file --printf=%s)
if [ $sizeOrig -ne $sizeBack ];then
if ! cmp -s -n 20480 $file tmp/foobar/$file;then
label=$(echo $file | cut -c 2-)
txdiff=$(diff -u \
--label $label $file \
--label $label tmp/foobar/$file 2>/dev/null)
if [ $? = 1 ];then
base=$(basename $file)
printf "%s\n" "$txdiff" \
> tmp/backup/$base.$rCount.diff
rCount=$((rCount + 1))
fi
fi
fi
fi
rReady=$((rReady + 1))
rPDone=$(echo "scale=4; $rFilesBackup / $rReady" | bc)
rPDone=$(echo "scale=0; 100 / $rPDone" | bc)
getText "backing up: %1..." "$rPDone%" > /progress
done
rm -rf tmp/foobar
rm -rf tmp/backup/bootloader*
rm -rf tmp/backup/mtab*
rm -rf tmp/backup/fstab*
rm -rf tmp/backup/kernel*
rm -rf tmp/backup/passwd*
rm -rf tmp/backup/shadow*
rm -rf tmp/backup/group*
fi
dPID=$(pidof mst)
kill $dPID
)&
echo "mst -f /progress | dialog \
--backtitle \"$TEXT_RECOVERYTITLE\" \
--progressbox 3 50
" > /tmp/progress.sh
if [ -e /dev/fb0 ];then
fbiterm -m $UFONT -- bash -e /tmp/progress.sh
else
bash -e /tmp/progress.sh
fi
clear
#======================================
# 16.4) restore temporary stored files
#--------------------------------------
if [ -z "$RESTORE" ];then
for i in passwd shadow group;do
if ! mv /mnt/tmp/$i /mnt/etc/$i;then
systemException "Failed to restore $i" "reboot"
fi
done
mv /mnt/var/lib/rpm /mnt/var/lib/rpm.backup
if ! mv /mnt/tmp/rpm /mnt/var/lib/;then
mv /mnt/var/lib/rpm.backup /mnt/var/lib/rpm
systemException "Failed to restore RPM database" "reboot"
fi
rm -rf /mnt/var/lib/rpm.backup
fi
#======================================
# 16.5) restore boot files 1
#--------------------------------------
Echo "Restoring boot configuration archive part (1)..."
if ! tar -xf /reco-save/boot-1.tgz -C /mnt;then
systemException "Failed to restore boot configuration" "reboot"
fi
#======================================
# 16.6) restore fstab partitions
#--------------------------------------
if [ ! -z "$RESTORE" ];then
imageSwapDevice=$(cat /mnt/etc/fstab | grep swap | cut -f1 -d " ")
imageSwapDevice=$(echo $imageSwapDevice)
if [ -e "$imageSwapDevice" ];then
if ! mkswap $imageSwapDevice 1>&2;then
systemException "Failed to restore swap signature" "reboot"
fi
fi
imageHomeDevice=$(cat /mnt/etc/fstab | grep /home | cut -f1 -d " ")
imageHomeDevice=$(echo $imageHomeDevice)
if [ -e "$imageHomeDevice" ];then
probeFileSystem $imageRootDevice
createFilesystem $imageHomeDevice
fi
imageBootDevice=$(
cat /mnt/etc/fstab|grep /.*boot|grep -v bind | sed -r 's/\s+/:/g')
if [ ! -z "$imageBootDevice" ];then
imageBootMountP=$(echo $imageBootDevice | cut -f2 -d:)
imageBootDevice=$(echo $imageBootDevice | cut -f1 -d:)
rm -rf /mnt/boot
mkdir /mnt/boot
probeFileSystem $imageRootDevice
createFilesystem $imageBootDevice
mkdir -p /mnt/$imageBootMountP
mount $imageBootDevice /mnt/$imageBootMountP
mkdir -p /mnt/$imageBootMountP/boot
mount --bind /mnt/$imageBootMountP/boot /mnt/boot
fi
fi
#======================================
# 16.7) restore boot files 2
#--------------------------------------
Echo "Restoring boot configuration archive part (2)..."
if ! tar -xf /reco-save/boot-2.tgz -C /mnt/$imageBootMountP;then
systemException "Failed to restore boot configuration" "reboot"
fi
#======================================
# 16.8) umount recovery
#--------------------------------------
umount $imageRecoveryDevice
#======================================
# 16.9) import oem config file
#--------------------------------------
importFile < $OEM_PARTITION_CONFIG
IFS=$IFS_ORIG
#======================================
# 16.10) write oem-trigger
#--------------------------------------
TDIR=/mnt/var/cache/recovery
TOEM=oem-trigger
mkdir -p $TDIR
echo "OEM_RECOVERY_DEVICE=$imageRecoveryDevice" > $TDIR/$TOEM
if [ ! -z "$RESTORE" ];then
echo "OEM_RECOVERY_MODE=restore" >> $TDIR/$TOEM
else
echo "OEM_RECOVERY_MODE=recover" >> $TDIR/$TOEM
fi
fi
#======================================
# 17) get installed kernels
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ];then
kernelList /mnt
fi
#======================================
# 18) setup ird/kernel links for union
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ];then
if [ "$OEM_KIWI_INITRD" = "yes" ] || isFSTypeReadOnly;then
# /.../
# we are using a special root setup with aufs. In this case
# we can't use the SuSE Linux initrd but must stick to the
# kiwi boot system.
# ----
mountCalled=no
if [ -e "$imageRWDevice" ];then
kiwiMount $imageRWDevice "/mnt"
mountCalled=yes
fi
pushd /mnt/boot >/dev/null
IFS="," ; for i in $KERNEL_LIST;do
if test -z "$i";then
continue
fi
kernel=`echo $i | cut -f1 -d:`
initrd=`echo $i | cut -f2 -d:`
rm -f $initrd && ln -s initrd.vmx $initrd
rm -f $kernel && ln -s linux.vmx $kernel
break
done
IFS=$IFS_ORIG
popd >/dev/null
if [ "$mountCalled" = "yes" ];then
umount /mnt
fi
fi
fi
#======================================
# 19) Create system dependant files
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ];then
#======================================
# setup: /etc/fstab
#--------------------------------------
setupDefaultFstab /config
updateRootDeviceFstab /config $imageRootDevice
if [ "$haveLVM" = "yes" ];then
updateLVMBootDeviceFstab /config $imageBootDevice
elif [ "$haveClicFS" = "yes" ];then
updateClicBootDeviceFstab /config $imageBootDevice
elif [ "$haveBtrFS" = "yes" ];then
updateBtrBootDeviceFstab /config $imageBootDevice
elif [ "$loader" = "syslinux" ] || [ "$loader" = "extlinux" ];then
updateSyslinuxBootDeviceFstab /config $imageBootDevice
elif [ "$haveLuks" = "yes" ];then
updateLuksBootDeviceFstab /config $imageBootDevice
fi
if partitionSize $imageSwapDevice &>/dev/null;then
updateSwapDeviceFstab /config $imageSwapDevice
else
unset $imageSwapDevice
fi
if [ -z "$OEM_WITHOUTHOME" ] && [ -z "$DONT_PARTITION" ];then
if [ `ls /mnt/home/ | wc -l` != 0 ]; then
Echo "Found non empty home/ directory !"
Echo "Moving home/ data to home partition $imageHomeDevice"
mount $imageHomeDevice /mnt/mnt
mv /mnt/home/* /mnt/mnt
mv /mnt/home/.* /mnt/mnt
umount /mnt/mnt
fi
FSTYPE_SAVE=$FSTYPE
probeFileSystem $imageHomeDevice
Echo "Activate home partition $imageHomeDevice in fstab"
echo "$(getDiskID $imageHomeDevice) /home $FSTYPE defaults 0 0" \
>> /config/etc/fstab
FSTYPE=$FSTYPE_SAVE
fi
#======================================
# setup: bootloader files
#--------------------------------------
Echo "Creating boot loader configuration"
if [ -z "$OEM_BOOT_TITLE" ];then
export OEM_BOOT_TITLE="OEM"
fi
if [ ! -z $OEM_RECOVERY ];then
OEM_RECOVERY=$imageRootDevice
fi
setupBootLoader \
/mnt /config $(($bootid - 1)) $imageRootDevice \
"$OEM_BOOT_TITLE" $imageSwapDevice
setupKernelModules /config
fi
#======================================
# 20) copy system dependant files
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ];then
setupConfigFiles
fi
#======================================
# 21) update system dependant files
#--------------------------------------
setupInittab /mnt
#======================================
# 22) setup real root device
#--------------------------------------
echo 256 > /proc/sys/kernel/real-root-dev
#======================================
# 23) umount system filesystems
#--------------------------------------
umountSystemFilesystems
#======================================
# 24) copy initrd files to image
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ];then
importBranding
fi
cp /preinit /mnt
cp /include /mnt
#======================================
# 25) kill boot shell
#--------------------------------------
killShell
killBlogD
#======================================
# 26) Activate new root
#--------------------------------------
activateImage
#======================================
# 27 Unmount initrd / system init
#--------------------------------------
bootImage $@
#!/bin/bash
#================
# FILE : preinit
#----------------
# PROJECT : OpenSuSE KIWI Image System
# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
# :
# AUTHOR : Marcus Schaefer <ms@suse.de>
# :
# BELONGS TO : Operating System images
# :
# DESCRIPTION : This file is called after the image root
# : has changed by the linuxrc script
# :
# STATUS : BETA
#----------------
#======================================
# Functions...
#--------------------------------------
. /include
#======================================
# 1) start error log
#--------------------------------------
errorLogStart
Echo "Calling pre-init stage in system image"
#======================================
# 2) check for LOCAL_BOOT
#--------------------------------------
if [ "$LOCAL_BOOT" = "yes" ] && [ -z "$KIWI_RECOVERY" ];then
exit 0
fi
#======================================
# 3) start udev
#--------------------------------------
mountSystemFilesystems
udevSystemStart
#======================================
# 4) update mount table
#--------------------------------------
updateMTAB
#======================================
# 5) create framebuffer devices
#--------------------------------------
createFramebufferDevices
#======================================
# 6) create initrd on diskful
#--------------------------------------
if \
[ -z "$UNIONFS_CONFIG" ] && [ -z "$COMBINED_IMAGE" ] && \
[ ! "$OEM_KIWI_INITRD" = "yes" ]
then
#======================================
# use distro initrd via mkinitrd
#--------------------------------------
setupSUSEInitrd
else
#======================================
# use kiwi initrd from RW partition
#--------------------------------------
bootLoaderOK=1
fi
#======================================
# 7) Check FAT requires on syslinux
#--------------------------------------
if [ "$loader" = "syslinux" ];then
# /.../
# if syslinux is used we need to make sure that the
# filename on the boot partition is correct 8+3
# ----
count=1
IFS="," ; for i in $KERNEL_LIST;do
if test -z "$i";then
continue
fi
kernel=`echo $i | cut -f1 -d:`
initrd=`echo $i | cut -f2 -d:`
mv /boot/$kernel /boot/linux.$count
mv /boot/$initrd /boot/initrd.$count
running=$(uname -r)
rlinux=vmlinuz-$running
rinitrd=initrd-$running
ln -s /boot/linux.$count /boot/$rlinux
ln -s /boot/initrd.$count /boot/$rinitrd
count=`expr $count + 1`
done
IFS=$IFS_ORIG
fi
#======================================
# 8) Install boot loader if ok
#--------------------------------------
if [ $bootLoaderOK = 1 ];then
installBootLoader
fi
#======================================
# 9) copy recovery related files
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ] && [ ! -z "$OEM_RECOVERY" ];then
IFS=$IFS_ORIG
Echo "Setting up recovery configuration archive..."
mkdir -p /reco-save
if ! mount $imageRecoveryDevice /reco-save >/dev/null;then
systemException "Failed to mount recovery device" "reboot"
fi
backupBootFiles=""
for i in \
/etc/fstab \
/etc/sysconfig/kernel \
/etc/sysconfig/bootloader \
/etc/grub.conf \
/etc/lilo.conf
do
test -e $i && backupBootFiles="$backupBootFiles $i"
done
tar -czf /reco-save/boot-1.tgz $backupBootFiles
backupBootFiles=""
for i in $(find /boot -type f); do
if ! echo $i | grep -q -E "\.sys";then
backupBootFiles="$backupBootFiles $i"
fi
done
tar -czf /reco-save/boot-2.tgz $backupBootFiles
Echo "Installing boot loader into recovery partition"
setupBootLoaderRecovery / /reco-save OEM
installBootLoaderRecovery
umount /reco-save
rmdir /reco-save
fi
#======================================
# 10) create /etc/ImagePackages
#--------------------------------------
if [ "$LOCAL_BOOT" = "no" ];then
if [ -x /bin/rpm ];then
Echo "Creating initial image package info file"
rpm -qa --last > /etc/ImagePackages
fi
fi
#======================================
# 11) setup console
#--------------------------------------
setupConsole
#======================================
# 12) kill udev
#--------------------------------------
udevSystemStop
umountSystemFilesystems
#!/bin/bash
#================
# FILE : linuxrc
#----------------
# PROJECT : OpenSuSE KIWI Image System
# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
# :
# AUTHOR : Marcus Schaefer <ms@suse.de>
# :
# BELONGS TO : Operating System images
# :
# DESCRIPTION : OEM repartition code functions. This file is used
# : to setup the partition table according to the OEM
# : specifications
# :
# STATUS : BETA
#----------------
#======================================
# OEMRepartInit
#--------------------------------------
function OEMRepartInit {
# /.../
# calculate memory based swapsize amount and initialize
# size of recovery archive
# ----
mem_size=`grep MemTotal: /proc/meminfo | tr -dc '[0-9]'`
swapsize=$(( $mem_size *2 / 1024 ))
recoMByte=0
if [ ! -z "$OEM_SWAPSIZE" ];then
swapsize=$OEM_SWAPSIZE
fi
if [ ! -z "$OEM_WITHOUTSWAP" ];then
swapsize=0
fi
if [ ! -z "$OEM_RECOVERY" ];then
mkdir -p /reco-root
if ! mount $imageRootDevice /reco-root >/dev/null;then
systemException "Failed to mount root device" "reboot"
fi
if [ ! -f /reco-root/recovery.partition.size ];then
systemException "Can't find recovery part size info" "reboot"
fi
recoMByte=$(cat /reco-root/recovery.partition.size)
recoID=83
if [ ! -z "$OEM_RECOVERY_ID" ];then
recoID=$OEM_RECOVERY_ID
fi
umount /reco-root && rmdir /reco-root
fi
export input=/part.input
rm -f $input
}
#======================================
# OEMRepartStandard
#--------------------------------------
function OEMRepartStandard {
# /.../
# repartition disk with read/write root filesystem
# Initial partition table layout is:
# =====================================
# p1: ( root ) +luks
# p2: [ boot ]
# -------------------------------------
local newparts=0
local partsize=0
#======================================
# check for boot partition
#--------------------------------------
createBootDeviceData 2
#======================================
# deactivate features if required
#--------------------------------------
if [ "$haveBootPartition" = "yes" ];then
export OEM_WITHOUTHOME=1
fi
#======================================
# setup initial boot device ID
#--------------------------------------
export bootid=1
if [ "$haveBootPartition" = "yes" ];then
bootid=2
fi
#======================================
# calculate partition sizes
#--------------------------------------
minhome=0
if [ -z "$OEM_WITHOUTHOME" ];then
minhome=500
fi
diskXMBytes=$(($(partitionSize $imageDiskDevice) / 1024))
diskP1MByte=$(($(partitionSize $(ddn $imageDiskDevice 1)) / 1024))
diskRMBytes=$((
diskXMBytes - diskP1MByte - swapsize - recoMByte - bootXMBytes - minhome
))
disk1MBytes=$((diskP1MByte + diskRMBytes))
if [ ! -z "$OEM_SYSTEMSIZE" ];then
if [ $OEM_SYSTEMSIZE -le $disk1MBytes ];then
disk1MBytes=$OEM_SYSTEMSIZE
fi
fi
#======================================
# check repart operation
#--------------------------------------
if [ $disk1MBytes -lt $diskP1MByte ];then
# /.../
# Requested system partition size is smaller than
# existing partition, will not re-partition
# ----
Echo "Current system partition is bigger than requested size"
Echo "Disk won't be re-partitioned"
disableOEMParameters
disableRepart
fi
#======================================
# write new partition table
#--------------------------------------
if [ -z "$DONT_PARTITION" ];then
pID=1
bootParam=1
recoParam=no
swapParam=no
homeParam=no
#======================================
# clean/backup boot partition
#--------------------------------------
if [ "$haveBootPartition" = "yes" ];then
createPartitionerInput \
d 2
fi
#======================================
# count partitions to be created
#--------------------------------------
if [ -z "$OEM_WITHOUTSWAP" ];then
newparts=$((newparts + 1))
fi
if [ ! -z "$OEM_RECOVERY" ];then
newparts=$((newparts + 1))
fi
if [ ! -z "$bootXMBytes" ];then
newparts=$((newparts + 1))
fi
if [ -z "$OEM_WITHOUTHOME" ];then
newparts=$((newparts + 1))
fi
#======================================
# repart root partition
#--------------------------------------
partsize=+"$disk1MBytes"M
if [ -z "$OEM_SYSTEMSIZE" ] && [ $newparts -eq 0 ];then
partsize=.
fi
createPartitionerInput \
d n p $pID . $partsize
#======================================
# add swap partition
#--------------------------------------
if [ -z "$OEM_WITHOUTSWAP" ];then
pID=$((pID + 1))
partsize=+"$swapsize"M
if [ -z "$OEM_SYSTEMSIZE" ] && [ $newparts -eq 1 ];then
partsize=.
fi
createPartitionerInput \
n p $pID . $partsize t 2 82
newparts=$((newparts - 1))
swapParam=$pID
fi
#======================================
# add recovery partition
#--------------------------------------
if [ ! -z "$OEM_RECOVERY" ];then
pID=$((pID + 1))
partsize=+"$recoMByte"M
createPartitionerInput \
n p $pID . $partsize t $pID $recoID
newparts=$((newparts - 1))
recoParam=$pID
fi
#======================================
# add boot partition
#--------------------------------------
if [ ! -z "$bootXMBytes" ];then
pID=$((pID + 1))
partsize=+"$bootXMBytes"M
createPartitionerInput \
n p $pID . $partsize t $pID $bootpartID
newparts=$((newparts - 1))
bootParam=$pID
fi
#======================================
# add home partition
#--------------------------------------
if [ -z "$OEM_WITHOUTHOME" ];then
pID=$((pID + 1))
createPartitionerInput \
n p $pID . .
newparts=$((newparts - 1))
homeParam=$pID
fi
#======================================
# setup new device names
#--------------------------------------
setupDeviceNames \
1 $swapParam $homeParam $recoParam $bootParam no
callPartitioner $input
fi
#======================================
# post repart actions
#--------------------------------------
if [ -z "$DONT_PARTITION" ];then
#======================================
# Activate boot partition
#--------------------------------------
activateBootPartition
#======================================
# Create boot filesystem if required
#--------------------------------------
createBootDeviceFilesystem
fi
}
#======================================
# OEMRepartSplit
#--------------------------------------
function OEMRepartSplit {
# /.../
# repartition disk for overlay systems with aufs, clicfs
# and friends and also systems of image type split.
# Initial partition table layout is:
# =====================================
# p1: ( compressed )
# p2: ( write area ) +luks
# p3: [ boot ]
# -------------------------------------
#======================================
# no recovery support in union mode
#--------------------------------------
unset OEM_RECOVERY
#======================================
# no homepart support for union mode
#--------------------------------------
export OEM_WITHOUTHOME=1
#======================================
# check for boot partition
#--------------------------------------
createBootDeviceData 3
#======================================
# setup initial boot device ID
#--------------------------------------
export bootid=2
if [ "$haveBootPartition" = "yes" ];then
bootid=3
fi
#======================================
# check for read-write partition
#--------------------------------------
if ! partitionSize $(ddn $imageDiskDevice 2) &>/dev/null;then
Echo "No read-write partition in this split/overlay image"
disableOEMParameters
disableRepart
fi
if [ -z "$DONT_PARTITION" ];then
#======================================
# calculate partition sizes
#--------------------------------------
diskXMBytes=$(($(partitionSize $imageDiskDevice) / 1024))
diskP1MByte=$(($(partitionSize $(ddn $imageDiskDevice 1)) / 1024))
diskP2MByte=$(($(partitionSize $(ddn $imageDiskDevice 2)) / 1024))
diskRMBytes=$((
diskXMBytes - diskP1MByte - diskP2MByte - swapsize - bootXMBytes
))
disk2MBytes=$((diskP2MByte + diskRMBytes))
if [ ! -z "$OEM_SYSTEMSIZE" ];then
if [ $OEM_SYSTEMSIZE -le $disk2MBytes ];then
disk2MBytes=$OEM_SYSTEMSIZE
fi
fi
#======================================
# check repart operation
#--------------------------------------
if [ $disk2MBytes -lt $diskP2MByte ];then
# /.../
# Requested read/write partition size is smaller than
# existing partition, will not re-partition
# ----
Echo "Current read/write partition is bigger than requested size"
Echo "Disk won't be re-partitioned"
disableOEMParameters
disableRepart
fi
fi
#======================================
# write new partition table
#--------------------------------------
if [ -z "$DONT_PARTITION" ];then
pID=2
bootParam=2
recoParam=no
swapParam=no
homeParam=no
#======================================
# clean/backup boot partition
#--------------------------------------
if [ "$haveBootPartition" = "yes" ];then
createPartitionerInput \
d 3
fi
#======================================
# repart cow partition
#--------------------------------------
createPartitionerInput \
d $pID n p $pID . +"$disk2MBytes"M
#======================================
# add swap partition
#--------------------------------------
if [ ! $swapsize = 0 ];then
pID=$((pID + 1))
createPartitionerInput \
n p $pID . +"$swapsize"M t $pID 82
swapParam=$pID
fi
#======================================
# add boot partition
#--------------------------------------
if [ "$haveBootPartition" = "yes" ];then
pID=$((pID + 1))
createPartitionerInput \
n p $pID . +"$bootXMBytes"M t $pID $bootpartID
bootParam=$pID
fi
#======================================
# setup new device names
#--------------------------------------
setupDeviceNames \
1 $swapParam $homeParam $recoParam $bootParam 2
callPartitioner $input
fi
#======================================
# post repart actions
#--------------------------------------
if [ -z "$DONT_PARTITION" ];then
#======================================
# Activate boot partition
#--------------------------------------
activateBootPartition
#======================================
# Create boot filesystem if required
#--------------------------------------
createBootDeviceFilesystem
fi
}
#======================================
# OEMRepartLVM
#--------------------------------------
function OEMRepartLVM {
# /.../
# repartition disk if LVM partition plus boot partition
# is used. Initial partition table layout is:
# =====================================
# p1: ( LVM ) +luks
# p2: ( boot )
# -------------------------------------
#======================================
# setup initial boot device ID
#--------------------------------------
export bootid=2
#======================================
# calculate partition sizes
#--------------------------------------
local extendID
local VOverHeadMB=300
local diskXMBytes=$(($(partitionSize $imageDiskDevice) / 1024))
local disk1MBytes=$(($(partitionSize $(ddn $imageDiskDevice 1)) / 1024))
local disk2MBytes=$(($(partitionSize $(ddn $imageDiskDevice 2)) / 1024))
if [ ! -z "$OEM_SYSTEMSIZE" ];then
disk1MBytes=$OEM_SYSTEMSIZE
fi
local diskRMBytes=$((
recoMByte + disk1MBytes + disk2MBytes + swapsize + VOverHeadMB
))
#======================================
# check repart operation
#--------------------------------------
if [ $diskRMBytes -gt $diskXMBytes ];then
Echo "Disk is too small, will not re-partition it"
disableOEMParameters
disableRepart
fi
#======================================
# write new partition table
#--------------------------------------
if [ -z "$DONT_PARTITION" ];then
pID=3
bootParam=2
recoParam=no
swapParam=no
homeParam=no
#======================================
# close open device mappings
#--------------------------------------
if [ "$haveLuks" = "yes" ];then
luksClose
fi
vgchange -an
#======================================
# add recovery partition
#--------------------------------------
if [ ! -z "$OEM_RECOVERY" ];then
createPartitionerInput \
n p $pID . +"$recoMByte"M t $pID $recoID
recoParam=$pID
pID=$((pID + 1))
fi
#======================================
# add rest space LVM partition
#--------------------------------------
createPartitionerInput \
n p $pID . . t $pID 8e
extendID=$pID
#======================================
# setup new device names
#--------------------------------------
setupDeviceNames \
1 $swapParam $homeParam $recoParam $bootParam yes $VGROUP
callPartitioner $input
waitForStorageDevice $(ddn $imageDiskDevice $extendID)
dd if=/dev/zero of=$(ddn $imageDiskDevice $extendID) bs=1024 count=5
vgchange -an
activateBootPartition
#======================================
# extend volume group with rest space
#--------------------------------------
vgchange -a y $VGROUP
pvcreate $(ddn $imageDiskDevice $extendID)
vgextend $VGROUP $(ddn $imageDiskDevice $extendID)
#======================================
# Extend LVRoot to requested size
#--------------------------------------
lvextend --size $disk1MBytes"M" /dev/$VGROUP/LVRoot
#======================================
# Add LVSwap if requested.
#--------------------------------------
if [ -z "$OEM_WITHOUTSWAP" ];then
lvcreate --size $swapsize"M" -n LVSwap $VGROUP
swapParam=yes
fi
#======================================
# Add LVHome if requested
#--------------------------------------
if [ -z "$OEM_WITHOUTHOME" ];then
lvcreate -l 100%FREE -n LVHome $VGROUP
homeParam=yes
elif [ -z "$OEM_SYSTEMSIZE" ];then
lvextend -l 100%FREE /dev/$VGROUP/LVRoot
fi
#======================================
# setup new device names
#--------------------------------------
setupDeviceNames \
1 $swapParam $homeParam $recoParam $bootParam yes $VGROUP
fi
}
#======================================
# OEMPartitionInstall
#--------------------------------------
function OEMPartitionInstall {
# /.../
# don't repart the disk but prepare it for use with
# the existing partition table
# ----
#======================================
# no recovery support for part install
#--------------------------------------
unset OEM_RECOVERY
#======================================
# no homepart support for part install
#--------------------------------------
export OEM_WITHOUTHOME=1
#======================================
# check for LVM, resize to full space
#--------------------------------------
if searchVolumeGroup;then
#======================================
# resize PV's
#--------------------------------------
pvresize $(ddn $imageDiskDevice $rID)
#======================================
# resize LV's
#--------------------------------------
lvresize -l 100%FREE $imageRootDevice
fi
#======================================
# resize boot filesystem if needed
#--------------------------------------
if [ ! $imageBootDevice = $imageRootDevice ];then
resizeFilesystem $imageBootDevice
fi
#======================================
# cleanup temporary flags
#--------------------------------------
unset DONT_PARTITION
}
#======================================
# OEMRepart
#--------------------------------------
function OEMRepart {
# /.../
# call the appropriate repartition functions
# ----
if [ ! $LOCAL_BOOT = "no" ];then
return
fi
#======================================
# check for luks extension
#--------------------------------------
if [ "$haveLuks" = "yes" ];then
unset OEM_RECOVERY
export OEM_WITHOUTHOME=1
fi
#======================================
# Initialize
#--------------------------------------
OEMRepartInit
#======================================
# Do the repartitioning
#--------------------------------------
if [ ! -z "$OEM_PARTITION_INSTALL" ];then
OEMPartitionInstall
elif [ ! -z "$haveLVM" ];then
OEMRepartLVM
elif isFSTypeReadOnly;then
OEMRepartSplit
else
OEMRepartStandard
fi
sleep 1
#======================================
# setup luks maps
#--------------------------------------
if [ "$haveLuks" = "yes" ];then
createLuksMaps
fi
#======================================
# find fstype for root partition
#--------------------------------------
probeFileSystem $imageRootDevice
#======================================
# Activate swap space
#--------------------------------------
if [ -z "$DONT_PARTITION" ] && [ $swapsize -gt 0 ]; then
if partitionSize $imageSwapDevice &>/dev/null;then
Echo "Activating swap space on $imageSwapDevice"
if ! mkswap $imageSwapDevice 1>&2;then
systemException "Failed to create swap signature" "reboot"
fi
fi
fi
#======================================
# Create home file system
#--------------------------------------
if [ -z "$DONT_PARTITION" ] && [ -z "$OEM_WITHOUTHOME" ];then
Echo "Creating Home filesystem on $imageHomeDevice"
createFilesystem $imageHomeDevice
fi
#======================================
# Create recovery file system
#--------------------------------------
if [ -z "$DONT_PARTITION" ] && [ ! -z "$OEM_RECOVERY" ];then
Echo "Creating Recovery filesystem on $imageRecoveryDevice"
if ! mke2fs -T ext2 -q -L recovery $imageRecoveryDevice 1>&2;then
systemException "Failed to create Recovery fs" "reboot"
fi
fi
#======================================
# Setup recovery contents
#--------------------------------------
if [ -z "$DONT_PARTITION" ] && [ ! -z "$OEM_RECOVERY" ];then
Echo "Setting up recovery archive..."
mkdir -p /reco-root
if ! mount $imageRootDevice /reco-root >/dev/null;then
systemException "Failed to mount root device" "reboot"
fi
if [ ! -z "$haveLVM" ];then
mkdir -p /recoboot && mount $imageBootDevice /recoboot
mount --bind /recoboot/boot /reco-root/boot
fi
mkdir -p /reco-save
if ! mount $imageRecoveryDevice /reco-save >/dev/null;then
systemException "Failed to mount recovery device" "reboot"
fi
if ! mv /reco-root/recovery.tar.files /reco-save >/dev/null;then
systemException "Failed to move recovery file count" "reboot"
fi
if ! mv /reco-root/recovery.tar.filesystem /reco-save >/dev/null;then
systemException "Failed to move recovery filesystem info" "reboot"
fi
if ! mv /reco-root/recovery.tar.size /reco-save >/dev/null;then
systemException "Failed to move recovery size info" "reboot"
fi
if ! mv /reco-root/recovery.partition.size /reco-save >/dev/null;then
systemException "Failed to move recovery part size info" "reboot"
fi
if [ -f /reco-root/recovery.tar.gz ];then
if ! mv /reco-root/recovery.tar.gz /reco-save >/dev/null;then
systemException "Failed to move recovery archive" "reboot"
fi
else
pushd /reco-root
Echo "Creating recovery root tarball..."
tar --numeric-owner -czpf /reco-save/recovery.tar.gz . \
--exclude "./dev" \
--exclude "./proc" \
--exclude "./sys" \
--exclude "./recovery.*"
popd
fi
mkdir /reco-save/boot
if [ "$loader" = "grub" ];then
if ! cp /reco-root/boot/initrd.vmx /reco-save/boot/initrd;then
systemException "Failed to copy recovery initrd" "reboot"
fi
if ! cp /reco-root/boot/linux.vmx /reco-save/boot/vmlinuz;then
systemException "Failed to copy recovery kernel" "reboot"
fi
if ! cp /reco-root/boot/message /reco-save/boot/message;then
systemException "Failed to copy recovery gfx message" "reboot"
fi
fi
if [ -f /boot.tgz ];then
if ! tar -xf /boot.tgz -C /reco-save;then
systemException "Failed to extract recovery boot files" "reboot"
fi
fi
if ! dd if=$imageDiskDevice of=/reco-save/mbr bs=1 count=512;then
systemException "Failed to store MBR" "reboot"
fi
if [ ! -z "$haveLVM" ];then
if ! vgcfgbackup -f /reco-save/lvm $VGROUP;then
systemException "Failed to store LVM metadata" "reboot"
fi
fi
if [ ! -z "$haveLVM" ];then
umount /reco-root/boot
umount /recoboot && rmdir /recoboot
fi
umount /reco-save && rmdir /reco-save
umount /reco-root && rmdir /reco-root
fi
}
#======================================
# activateBootPartition
#--------------------------------------
function activateBootPartition {
# /.../
# set boot flag to current value of $bootid
# ----
Echo "Set boot flag to partition ID: $bootid [ $imageDiskDevice ]"
parted $imageDiskDevice set $bootid boot on
if test $? != 0; then
systemException "Failed to set boot flag" "reboot"
fi
blockdev --rereadpt $imageDiskDevice
local deviceTest=$(ddn $imageDiskDevice 1)
if ! waitForStorageDevice $deviceTest;then
systemException \
"Partition $deviceTest doesn't appear... fatal !" \
"reboot"
fi
}
#======================================
# setupDeviceNames
#--------------------------------------
function setupDeviceNames {
local rootID=$1
local swapID=$2
local homeID=$3
local recoID=$4
local bootID=$5
local iorwID=$6
local vgroup=$7
if [ -z "$vgroup" ];then
#======================================
# set root device name
#--------------------------------------
export imageRootDevice=$(ddn $imageDiskDevice $rootID)
#======================================
# set swap device name
#--------------------------------------
if [ ! $swapID = "no" ];then
export imageSwapDevice=$(ddn $imageDiskDevice $swapID)
fi
#======================================
# set home device name
#--------------------------------------
if [ ! $homeID = "no" ];then
export imageHomeDevice=$(ddn $imageDiskDevice $homeID)
fi
#======================================
# set recovery device name
#--------------------------------------
if [ ! $recoID = "no" ];then
export imageRecoveryDevice=$(ddn $imageDiskDevice $recoID)
export recoid=$recoID
fi
#======================================
# set read-write device name
#--------------------------------------
if [ ! $iorwID = "no" ];then
export imageIOWRDevice=$(ddn $imageDiskDevice $iorwID)
export imageRWDevice=$imageIOWRDevice
export imageRODevice=$imageRootDevice
fi
#======================================
# set boot device name
#--------------------------------------
export imageBootDevice=$(ddn $imageDiskDevice $bootID)
#======================================
# set boot partition id
#--------------------------------------
export bootid=$bootID
else
#======================================
# set LVM root device name
#--------------------------------------
export imageRootDevice=/dev/$vgroup/LVRoot
#======================================
# set LVM swap device name
#--------------------------------------
if [ ! $swapID = "no" ];then
export imageSwapDevice=/dev/$vgroup/LVSwap
fi
#======================================
# set LVM home device name
#--------------------------------------
if [ ! $homeID = "no" ];then
export imageHomeDevice=/dev/$vgroup/LVHome
fi
#======================================
# set LVM recovery device name
#--------------------------------------
if [ ! $recoID = "no" ];then
export imageRecoveryDevice=$(ddn $imageDiskDevice $recoID)
export recoid=$recoID
fi
#======================================
# set LVM read-write device name
#--------------------------------------
if [ ! $iorwID = "no" ];then
if [ -e /dev/$vgroup/LVComp ];then
export imageRootDevice=/dev/$vgroup/LVComp
fi
export imageIOWRDevice=/dev/$vgroup/LVRoot
export imageRWDevice=$imageIOWRDevice
export imageRODevice=/dev/$vgroup/LVComp
fi
#======================================
# set LVM boot device name
#--------------------------------------
export imageBootDevice=$(ddn $imageDiskDevice $bootID)
#======================================
# set LVM boot partition id
#--------------------------------------
export bootid=$bootID
fi
}
#======================================
# createBootDeviceData
#--------------------------------------
function createBootDeviceData {
local bootPart=$1
if partitionSize $(ddn $imageDiskDevice $bootPart) &>/dev/null;then
#======================================
# Variable setup
#--------------------------------------
export haveBootPartition=yes
export bootXMBytes=60
export bootpartID=83
if [ "$loader" = "syslinux" ];then
bootpartID=6
fi
#======================================
# Store contents in RAM
#--------------------------------------
mount $(ddn $imageDiskDevice $bootPart) /mnt
tar -czf /boot.tgz -C /mnt .
umount /mnt
fi
#======================================
# check for overlay type
#--------------------------------------
local unionFST=`echo $UNIONFS_CONFIG | cut -d , -f 3`
if [ "$unionFST" = "clicfs" ];then
export haveClicFS=yes
fi
sleep 1
}
#======================================
# createBootDeviceFilesystem
#--------------------------------------
function createBootDeviceFilesystem {
if [ ! "$haveBootPartition" = "yes" ];then
return
fi
if [ "$loader" = "syslinux" ];then
mkdosfs $imageBootDevice >/dev/null 2>&1
else
mke2fs -q $imageBootDevice >/dev/null 2>&1
fi
if [ ! $? = 0 ];then
systemException \
"Failed to create Boot filesystem" \
"reboot"
fi
}
#======================================
# createLuksMaps
#--------------------------------------
function createLuksMaps {
export imageRootDevice=$(luksOpen $imageRootDevice)
if isFSTypeReadOnly;then
export imageIOWRDevice=$(luksOpen $imageIOWRDevice luksReadWrite)
export imageRWDevice=$imageIOWRDevice
export imageRODevice=$imageRootDevice
fi
}
#======================================
# disableOEMParameters
#--------------------------------------
function disableOEMParameters {
export OEM_WITHOUTHOME=1
export OEM_WITHOUTSWAP=1
unset OEM_RECOVERY
unset OEM_SYSTEMSIZE
}
#======================================
# disableRepart
#--------------------------------------
function disableRepart {
DONT_PARTITION=1
}
#!/bin/bash
# ============================================================================
# Script for creating appliances exported from SUSE Studio
# (http://susestudio.com) on your local system.
#
# Requires kiwi (http://kiwi.berlios.de/).
#
# Author: James Tan <jatan@suse.de>
# Contact: feedback@susestudio.com
# ============================================================================
# Recover backup files
function recover_backup {
for dir in 'bootsource' 'source'; do
if [ -f $dir/config.xml.bak ]; then
cp $dir/config.xml.bak $dir/config.xml
echo " -> Recovered Backup $dir/config.xml.bak to $dir/config.xml"
fi
done
}
# Prints and runs the given command. Aborts if the command fails.
function run_cmd {
command=$1
logfile=$2
echo $command
$command
if [ $? -ne 0 ]; then
echo
echo "** Appliance creation failed!"
while true; do
read -p "Recover config.xml files? [y/n] " yn
case $yn in
[Nn]* ) break;;
[Yy]* ) recover_backup;break;;
esac
done
if [ "$logfile" != '' ]; then
echo "See $logfile for details."
fi
exit 1
fi
}
# Display usage.
function usage {
echo >&2 "Usage:"
echo >&2 " create_appliance.sh [--no-custom-boot-image]"
}
# Parse command line options.
no_custom_boot_image=
while [ $# -gt 0 ]; do
case "$1" in
--no-custom-boot-image) no_custom_boot_image=true;;
-*) usage; exit 1;;
*) break;;
esac
shift
done
# Check that we're root.
if [ `whoami` != 'root' ]; then
echo "Please run this script as root."
exit 1
fi
# Check that kiwi is installed.
kiwi=`which kiwi 2> /dev/null`
if [ $? -ne 0 ]; then
echo "Kiwi is required but not found on your system."
echo "Run the following command to install kiwi:"
echo
echo " zypper install kiwi kiwi-tools kiwi-desc-* kiwi-doc"
echo
exit 1
fi
# Check kiwi version.
kiwi_ver='kiwi-4.43-117.1'
installed_kiwi_ver=`rpm -q kiwi`
if [ "$installed_kiwi_ver" != "$kiwi_ver" ]; then
echo "'$kiwi_ver' expected, but '$installed_kiwi_ver' found."
while true; do
read -p "Continue? [y/n] " yn
case $yn in
[Yy]* ) break;;
[Nn]* ) exit;;
esac
done
fi
# Check architecture (i686, x86_64).
image_arch='x86_64'
sys_arch=`uname -m`
linux32=`which linux32 2>/dev/null`
if [ "$image_arch" = 'i686' ] && [ "$sys_arch" = 'x86_64' ]; then
if [ "$linux32" = '' ]; then
echo "'linux32' is required but not found."
exit 1
else
kiwi="$linux32 $kiwi"
fi
elif [ "$image_arch" = 'x86_64' ] && [ "$sys_arch" = 'i686' ]; then
echo "Cannot build $image_arch image on a $sys_arch machine."
exit 1
fi
# Replace internal repositories in config.xml.
echo "** Checking for internal repositories..."
for repo in ; do
# check if the repos are already replaced
update_repo=0
for dir in 'bootsource' 'source'; do
grep -q "{$repo}" $dir/config.xml && update_repo=1
done
if [ $update_repo -eq 1 ]; then
# prompt for repo url
read -p "Enter repository URL for '$repo': " url
escaped_url=`echo "$url" | sed -e 's/\//\\\\\//g'`
for dir in 'bootsource' 'source'; do
# backup config.xml first
if [ ! -f $dir/config.xml.bak ]; then
cp $dir/config.xml $dir/config.xml.bak
echo " -> Backed up $dir/config.xml to $dir/config.xml.bak"
fi
sed -i "s/{$repo}/$escaped_url/g" $dir/config.xml
done
fi
done
# Get the build profiles from config.xml
echo
echo "** Fetching boot profiles..."
profiles_line=$(grep -m 1 -E "<type.*?boot(profile|kernel).*?>" source/config.xml)
bootprofile=$(echo $profiles_line | grep -oE "bootprofile='\w+'" | sed -e "s/'//g" | awk -F "=" '{ print $2 }')
bootkernel=$(echo $profiles_line | grep -oE "bootkernel='\w+'" | sed -e "s/'//g" | awk -F "=" '{ print $2 }')
if [ "$bootprofile" != '' ]; then
echo "Using boot profile $bootprofile"
else
echo "Using default boot profile"
fi
if [ "$bootkernel" != '' ]; then
echo "Using boot kernel $bootkernel"
else
echo "Using default boot kernel"
fi
# Create boot image (with custom theming).
if [ ! "$no_custom_boot_image" ]; then
echo
echo "** Creating custom boot image (initrd)..."
run_cmd "rm -rf bootbuild/root bootimage/initrd"
run_cmd "mkdir -p bootbuild bootimage/initrd"
prepare_log='boot-prepare.log'
create_log='boot-create.log'
prepare_opts="--prepare bootsource --root bootbuild/root --logfile $prepare_log"
create_opts="--create bootbuild/root -d bootimage/initrd --logfile $create_log"
if [ "$bootkernel" != '' ]; then
prepare_opts="$prepare_opts --add-profile $bootkernel"
create_opts="$create_opts --add-profile $bootkernel"
fi
if [ "$bootprofile" != '' ]; then
prepare_opts="$prepare_opts --add-profile $bootprofile"
create_opts="$create_opts --add-profile $bootprofile"
fi
run_cmd "$kiwi $prepare_opts" $prepare_log
run_cmd "$kiwi $create_opts" $create_log
fi
# Create appliance with custom initrd.
echo
echo "** Creating appliance..."
run_cmd "rm -rf build/root"
run_cmd "mkdir -p build image"
log='prepare.log'
run_cmd "$kiwi --prepare source --root build/root --logfile $log" $log
log='create.log'
run_cmd "$kiwi --create build/root -d image --prebuiltbootimage bootimage/initrd \
--logfile $log" $log
# And we're done!
image_file="image/SlapOs.x86_64-0.0.5.raw"
qemu_options='-snapshot'
[[ "$image_file" =~ \.iso$ ]] && qemu_options='-cdrom'
echo
echo "** Appliance created successfully! ($image_file)"
echo "To boot the image using qemu-kvm, run the following command:"
echo " qemu-kvm -m 512 $qemu_options $image_file &"
echo
#!/bin/bash
#================
# FILE : config.sh
#----------------
# PROJECT : OpenSuSE KIWI Image System
# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
# :
# AUTHOR : Marcus Schaefer <ms@suse.de>
# :
# BELONGS TO : Operating System images
# :
# DESCRIPTION : configuration script for SUSE based
# : operating systems
# :
# :
# STATUS : BETA
#----------------
#======================================
# Functions...
#--------------------------------------
test -f /.kconfig && . /.kconfig
test -f /.profile && . /.profile
# kiwi doesn't copy /.kconfig from source to build dir
test -f /kconfig && . /kconfig
#======================================
# Greeting...
#--------------------------------------
echo "Configure image: [$name]..."
#======================================
# SuSEconfig
#--------------------------------------
echo "** Running suseConfig..."
suseConfig
echo "** Running ldconfig..."
/sbin/ldconfig
#======================================
# Clean up kconfig
#--------------------------------------
echo "** Removing kconfig..."
rm /kconfig
#=====================================
# setting kdm theme to studio
#-------------------------------------
echo '** Setting kdm theme...'
sed -i 's/DISPLAYMANAGER_KDM_THEME=.*/DISPLAYMANAGER_KDM_THEME=studio/g' /etc/sysconfig/displaymanager
#=====================================
# setting gdm theme to
#-------------------------------------
echo '** Setting gdm background theme...'
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.vendor --type string -s /desktop/gnome/background/picture_filename '/usr/share/wallpapers/custom_wallpaper.png'
#=====================================
# make the xdm theme a little bit prettier
#-------------------------------------
if [ -e /etc/X11/Xresources ]
then
echo "xlogin*greeting: Login" >> /etc/X11/Xresources
echo "xlogin*namePrompt: Name: " >> /etc/X11/Xresources
echo "xlogin*passwdPrompt: Password: " >> /etc/X11/Xresources
echo "xlogin*fail: Failed!" >> /etc/X11/Xresources
echo "xlogin.Login.greetFont: 9x15bold" >> /etc/X11/Xresources
echo "xlogin.Login.promptFont: 6x13bold" >> /etc/X11/Xresources
echo "xlogin.Login.font: 6x13" >> /etc/X11/Xresources
echo "xlogin.Login.failFont: 6x13" >> /etc/X11/Xresources
echo "xlogin*geometry: 300x200" >> /etc/X11/Xresources
echo "xlogin*borderWidth: 1" >> /etc/X11/Xresources
echo "xlogin*frameWidth: 0" >> /etc/X11/Xresources
echo "xlogin*innerFramesWidth: 0" >> /etc/X11/Xresources
echo "xlogin*shdColor: black" >> /etc/X11/Xresources
echo "xlogin*hiColor: black" >> /etc/X11/Xresources
echo "xlogin*greetColor: white" >> /etc/X11/Xresources
echo "xlogin*failColor: red" >> /etc/X11/Xresources
echo "xlogin*promptColor: grey75" >> /etc/X11/Xresources
echo "xlogin*foreground: grey75" >> /etc/X11/Xresources
echo "xlogin*background: black" >> /etc/X11/Xresources
echo "xlogin*borderColor: grey50 " >> /etc/X11/Xresources
fi
if [ -e /etc/icewm/preferences ]
then
sed -i 's#DesktopBackgroundImage=.*#DesktopBackgroundImage="/etc/X11/xdm/BackGround.xpm"#' /etc/icewm/preferences
fi
if [ -e /etc/X11/xdm/Xsetup ]
then
sed -i 's#^exit 0$#kill `cat /var/run/xconsole.pid`;/sbin/startproc /usr/bin/icewmbg || /usr/bin/xsetroot -solid lightgray;\nexit 0#g' /etc/X11/xdm/Xsetup
fi
#======================================
# RPM GPG Keys Configuration
#--------------------------------------
echo '** Importing GPG Keys...'
rpm --import /studio/studio_rpm_key_0
#rm /studio/studio_rpm_key_0
rpm --import /studio/studio_rpm_key_1
#rm /studio/studio_rpm_key_1
rpm --import /studio/studio_rpm_key_2
#rm /studio/studio_rpm_key_2
rpm --import /studio/studio_rpm_key_3
#rm /studio/studio_rpm_key_3
rpm --import /studio/studio_rpm_key_4
#rm /studio/studio_rpm_key_4
rpm --import /studio/studio_rpm_key_5
#rm /studio/studio_rpm_key_5
rpm --import /studio/studio_rpm_key_6
#rm /studio/studio_rpm_key_6
rpm --import /studio/studio_rpm_key_7
#rm /studio/studio_rpm_key_7
rpm --import /studio/studio_rpm_key_8
#rm /studio/studio_rpm_key_8
sed --in-place -e 's/icewm/icewm-session/' /usr/bin/wmlist
sed --in-place -e 's/# solver.onlyRequires.*/solver.onlyRequires = true/' /etc/zypp/zypp.conf
# Enable sshd
chkconfig sshd on
chown root:root /build-custom
chmod +x /build-custom
# run custom build_script after build
/build-custom
chown root:root /etc/init.d/suse_studio_custom
chmod +x /etc/init.d/suse_studio_custom
test -d /studio || mkdir /studio
cp /image/.profile /studio/profile
cp /image/config.xml /studio/config.xml
true
\ No newline at end of file
<?xml version='1.0' encoding='UTF-8'?>
<!-- For kiwi 4.43-117.1 and above -->
<image name='SlapOs' displayname='SlapOs' schemeversion='2.4'>
<description type='system'>
<author>Romain Courteaud</author>
<contact>studio-devel@suse.de</contact>
<specification>A text-only base</specification>
</description>
<preferences>
<oem-swapsize>1024</oem-swapsize>
<oem-home>no</oem-home>
<oem-boot-title>SlapOs</oem-boot-title>
<type filesystem='ext3' checkprebuilt='true' fsnocheck='true' boot='oemboot/suse-11.3'>oem</type>
<version>0.0.5</version>
<packagemanager>zypper</packagemanager>
<rpm-check-signatures>False</rpm-check-signatures>
<rpm-force>False</rpm-force>
</preferences>
<users group='root'>
<user name='root' shell='/bin/bash' pwd='$1$wKxkG2BA$dlftO16KMQqDqaRJzKcGH/' home='/root'/>
</users>
<packages patternType='onlyRequired' type='image' patternPackageType='onlyRequired'>
<opensusePattern name='base'/>
<package name='nano'/>
<package name='vim'/>
<package name='memtest86+'/>
<package name='pwgen'/>
<package name='patch'/>
<package name='mtr'/>
<package name='zlib'/>
<package name='gcc-c++'/>
<package name='yast2-firstboot'/>
<package name='mdadm'/>
<package name='yast2-ncurses'/>
<package name='yast2'/>
<package name='less'/>
<package name='zypper'/>
<package name='kernel-default'/>
<package name='syslog-ng'/>
<package name='bootsplash-branding-openSUSE'/>
<package name='python'/>
<package name='bridge-utils'/>
<package name='tunctl'/>
<package name='man'/>
<package name='iputils'/>
<package name='sudo'/>
<package name='perl'/>
<package name='wget'/>
<package name='ntp'/>
<package name='lsof'/>
<package name='strace'/>
<package name='htop'/>
<package name='iotop'/>
<package name='dhcp-client'/>
<package name='perl-XML-Twig'/>
<package name='gcc'/>
<package name='make'/>
<package name='rpm'/>
</packages>
<packages type='bootstrap'>
<package name='filesystem'/>
<package name='glibc-locale'/>
</packages>
<repository type='yast2'>
<source path='http://download.opensuse.org/distribution/11.3/repo/oss'/>
</repository>
<repository type='rpm-md'>
<source path='http://download.opensuse.org/update/11.3'/>
</repository>
</image>
\ No newline at end of file
{"config":{"memory":{"size":512,"pae_enabled":false},"vmx_cdrom":{"enabled":false},"sdk_integration":{"enabled":false,"sdk_server":"clayton.arch.suse.de:3000"},"disk":{"disk_size":16,"swap_size":1024},"xen_host_mode":{"enabled":false},"live_installer":{"enabled":false}},"disabled_plugins":["pum_agent"]}
\ No newline at end of file
#!/bin/bash
##############################################################################
#
# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly advised to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
#
# This script is executed at the end of appliance creation. Here you can do
# one-time actions to modify your appliance before it is ever used, like
# removing files and directories to make it smaller, creating symlinks,
# generating indexes, etc.
#
# The 'kiwi_type' variable will contain the format of the appliance (oem =
# disk image, vmx = VMware, iso = CD/DVD, xen = Xen).
#
# read in some variables
. /studio/profile
# Removing eth0 config file which became unecessary with the bridge creation
rm -f /etc/sysconfig/network/ifcfg-eth0
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
#! /bin/sh
#
# Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany. All rights reserved.
#
# Author: Werner Fink <werner@suse.de>, 1996
# Burchard Steinbild, 1996
#
# /etc/init.d/boot.local
#
# script with local commands to be executed from init on system startup
#
# Here you should add things, that should happen directly after booting
# before we're going to the first run level.
#
# Execute user-provided boot script, if it exists
if [ -x /etc/init.d/suse_studio_custom ]; then
/etc/init.d/suse_studio_custom
fi
# Execute the SUSE Studio first boot script, if it exists
if [ -f /etc/init.d/suse_studio_firstboot ]; then
sh /etc/init.d/suse_studio_firstboot
fi
#!/bin/bash
### BEGIN INIT INFO
# Provides: suse_studio_custom
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Description: Script run whenever the appliance boots
### END INIT INFO
##############################################################################
#
# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly advised to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
#
# This script is executed whenever your appliance boots. Here you can add
# commands to be executed before the system enters the first runlevel. This
# could include loading kernel modules, starting daemons that aren't managed
# by init files, asking questions at the console, etc.
#
# The 'kiwi_type' variable will contain the format of the appliance (oem =
# disk image, vmx = VMware, iso = CD/DVD, xen = Xen).
#
#
# read in some variables
. /studio/profile
if [ -f /etc/init.d/suse_studio_firstboot ]
then
/etc/init.d/slapos_firstboot
elif [ -f /token_second_boot ]; then
/etc/init.d/slapos_secondboot
fi
\ No newline at end of file
# This script is called from /etc/init.d/boot.local. It is intended to run
# only on first boot so it deletes itself after running.
# Fix our xorg.conf.testdrive according to the local keyboard settings
setup_keyboard() {
# Because we're running before the keyboard selection, we need to hack into the
# kdb script and do the replacement there. Once we did it, let's restore the
# original script
cp /etc/init.d/kbd{,.bkp}
sed -i "s/rc_exit//" /etc/init.d/kbd
cat >> /etc/init.d/kbd <<-'EOF'
if [ -f /etc/X11/xorg.conf -a -x /usr/sbin/sysp ]; then
echo -n " -> Setting keyboard layout..."
/usr/sbin/sysp -s keyboard &> /dev/null
MODEL=$(/usr/sbin/sysp -q keyboard | grep XkbModel | sed 's/.*: //')
LAYOUT=$(/usr/sbin/sysp -q keyboard | grep XkbLayout | sed 's/.*: //')
VARIANT=$(/usr/sbin/sysp -q keyboard | grep XkbVariant | sed 's/.*: //')
sed -i "s/{XKBLAYOUT}/$LAYOUT/;s/{XKBMODEL}/$MODEL/;s/{XKBVARIANT}/$VARIANT/" /etc/X11/xorg.conf
echo "done"
fi
mv /etc/init.d/kbd{.bkp,}
rc_exit
EOF
}
# Use the evtouch driver when in testdrive so that the mouse cursor works properly.
setup_evtouch() {
# use xorg.conf.testdrive
if [ -f /etc/X11/xorg.conf.testdrive ]; then
echo -n " -> Copying '/etc/X11/xorg.conf.testdrive' to '/etc/X11/xorg.conf'... "
if [ -f /etc/X11/xorg.conf ]; then
cp /etc/X11/xorg.conf /etc/X11/xorg.conf.tdsave
fi
cp /etc/X11/xorg.conf.testdrive /etc/X11/xorg.conf
echo "done"
else
echo " -> WARNING: '/etc/X11/xorg.conf.testdrive' not found! X startup may fail."
fi
}
# Always use DHCP when in Testdrive.
use_dhcp() {
sed -i '/^STARTMODE/c STARTMODE=auto' etc/sysconfig/network/ifcfg-eth0
sed -i '/^BOOTPROTO/c BOOTPROTO=dhcp' etc/sysconfig/network/ifcfg-eth0
sed -i '/^IPADDR/c IPADDR=' etc/sysconfig/network/ifcfg-eth0
sed -i '/^NETMASK/c NETMASK=' etc/sysconfig/network/ifcfg-eth0
}
# ===========================================
# Check if we are in testdrive
# -------------------------------------------
echo -n "Checking if we are in SUSE Studio TestDrive... "
if [ -e /dev/input/qemu_tablet ]; then
echo "yes"
setup_keyboard
setup_evtouch
use_dhcp
sed -i 's|HWCLOCK="--localtime"|HWCLOCK="-u"|g' etc/sysconfig/clock;
else
echo "no"
rm /etc/X11/xorg.conf.testdrive
fi
# delete itself, as we only need this to run on first boot
rm -f /etc/init.d/suse_studio_firstboot
#
# /etc/inittab
#
# Copyright (c) 1996-2002 SuSE Linux AG, Nuernberg, Germany. All rights reserved.
#
# Author: Florian La Roche, 1996
# Please send feedback to http://www.suse.de/feedback
#
# This is the main configuration file of /sbin/init, which
# is executed by the kernel on startup. It describes what
# scripts are used for the different run-levels.
#
# All scripts for runlevel changes are in /etc/init.d/.
#
# This file may be modified by SuSEconfig unless CHECK_INITTAB
# in /etc/sysconfig/suseconfig is set to "no"
#
# The default runlevel is defined here
id:3:initdefault:
# First script to be executed, if not booting in emergency (-b) mode
si::bootwait:/etc/init.d/boot
# /etc/init.d/rc takes care of runlevel handling
#
# runlevel 0 is System halt (Do not use this for initdefault!)
# runlevel 1 is Single user mode
# runlevel 2 is Local multiuser without remote network (e.g. NFS)
# runlevel 3 is Full multiuser with network
# runlevel 4 is Not used
# runlevel 5 is Full multiuser with network and xdm
# runlevel 6 is System reboot (Do not use this for initdefault!)
#
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
#l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# what to do in single-user mode
ls:S:wait:/etc/init.d/rc S
~~:S:respawn:/sbin/sulogin
# what to do when CTRL-ALT-DEL is pressed
ca::ctrlaltdel:/sbin/shutdown -r -t 4 now
# special keyboard request (Alt-UpArrow)
# look into the kbd-0.90 docs for this
kb::kbrequest:/bin/echo "Keyboard Request -- edit /etc/inittab to let this work."
# what to do when power fails/returns
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
#pn::powerfail:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
# for ARGO UPS
sh:12345:powerfail:/sbin/shutdown -h now THE POWER IS FAILING
# getty-programs for the normal runlevels
# <id>:<runlevels>:<action>:<process>
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
#
#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
#cons:1235:respawn:/sbin/smart_agetty -L 38400 console
#
# Note: Do not use tty7 in runlevel 3, this virtual line
# is occupied by the programm xdm.
#
# This is for the package xdmsc, after installing and
# and configuration you should remove the comment character
# from the following line:
#7:3:respawn:+/etc/init.d/rx tty7
# modem getty.
# mo:235:respawn:/usr/sbin/mgetty -s 38400 modem
# fax getty (hylafax)
# mo:35:respawn:/usr/lib/fax/faxgetty /dev/modem
# vbox (voice box) getty
# I6:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI6
# I7:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI7
# end of /etc/inittab
# Copyright (c) 2000-2002 SuSE GmbH Nuernberg, Germany. All rights reserved.
# Copyright (c) 2003,2004 SuSE Linux AG Nuernberg, Germany. All rights reserved.
# Copyright (c) 2005-2007 SUSE LINUX Products GmbH Nuernberg, Germany. All rights reserved.
#
# Author: Marc Heuse, 2002
# Ludwig Nussel, 2004-2007
#
# /etc/sysconfig/SuSEfirewall2
#
# for use with /sbin/SuSEfirewall2 version 3.6
#
# ------------------------------------------------------------------------ #
# PLEASE NOTE THE FOLLOWING:
#
# Just by configuring these settings and using the SuSEfirewall2 you
# are not secure per se! There is *not* such a thing you install and
# hence you are saved from all (security) hazards.
#
# To ensure your security, you need also:
#
# * Secure all services you are offering to untrusted networks
# (internet) You can do this by using software which has been
# designed with security in mind (like postfix, vsftpd, ssh),
# setting these up without misconfiguration and praying, that
# they have got really no holes. Apparmor can help in
# most circumstances to reduce the risk.
# * Do not run untrusted software. (philosophical question, can
# you trust SuSE or any other software distributor?)
# * Check the security of your server(s) regulary
# * If you are using this server as a firewall/bastion host to the
# internet for an internal network, try to run proxy services
# for everything and disable routing on this machine.
# * If you run DNS on the firewall: disable untrusted zone
# transfers and either don't allow access to it from the
# internet or run it split-brained.
#
# Good luck!
#
# Yours,
# SuSE Security Team
#
# ------------------------------------------------------------------------
#
# Configuration HELP:
#
# If you have got any problems configuring this file, take a look at
# /usr/share/doc/packages/SuSEfirewall2/EXAMPLES or use YaST
#
#
# If you are an end-user who is NOT connected to two networks (read:
# you have got a single user system and are using a dialup to the
# internet) you just have to configure (all other settings are OK):
# 2) and maybe 9).
#
# If this server is a firewall, which should act like a proxy (no direct
# routing between both networks), or you are an end-user connected to the
# internet and to an internal network, you have to setup your proxys and
# reconfigure (all other settings are OK): 2), 3), 9) and maybe 7), 11), 14)
#
# If this server is a firewall, and should do routing/masquerading between
# the untrusted and the trusted network, you have to reconfigure (all other
# settings are OK): 2), 3), 5), 6), 9), and maybe 7), 10), 11), 12), 13),
# 14)
#
# If you want to run a DMZ in either of the above three standard setups, you
# just have to configure *additionally* 4), 9), 12), 13), 18)
#
# Please note that if you use service names, they have to exist in
# /etc/services. There is for example no service "dns", it's called
# "domain"; email is called "smtp" etc.
#
# ------------------------------------------------------------------------
## Path: Network/Firewall/SuSEfirewall2
## Description: SuSEfirewall2 configuration
## Type: string
## Default: any
#
# 2.)
# Which are the interfaces that point to the internet/untrusted
# networks?
#
# Enter all untrusted network devices here
#
# Format: space separated list of interface or configuration names
#
# The special keyword "any" means that packets arriving on interfaces not
# explicitly configured as int, ext or dmz will be considered external. Note:
# this setting only works for packets destined for the local machine. If you
# want forwarding or masquerading you still have to add the external interfaces
# individually. "any" can be mixed with other interface names.
#
# Examples: "ippp0 ippp1", "any dsl0"
#
# Note: alias interfaces (like eth0:1) are ignored
#
FW_DEV_EXT="any eth0"
## Type: string
#
# 3.)
# Which are the interfaces that point to the internal network?
#
# Enter all trusted network interfaces here. If you are not
# connected to a trusted network (e.g. you have just a dialup) leave
# this empty.
#
# Format: space separated list of interface or configuration names
#
# Examples: "tr0", "eth0 eth1"
#
FW_DEV_INT=""
## Type: string
#
# 4.)
# Which are the interfaces that point to the dmz or dialup network?
#
# Enter all the network devices here which point to the dmz/dialups.
# A "dmz" is a special, seperated network, which is only connected
# to the firewall, and should be reachable from the internet to
# provide services, e.g. WWW, Mail, etc. and hence is at risk from
# attacks. See /usr/share/doc/packages/SuSEfirewall2/EXAMPLES for an
# example.
#
# Note: You have to configure FW_FORWARD to define the services
# which should be available to the internet and set FW_ROUTE to yes.
#
# Format: space separated list of interface or configuration names
#
# Examples: "tr0", "eth0 eth1"
#
FW_DEV_DMZ=""
## Type: yesno
## Default: no
#
# 5.)
# Should routing between the internet, dmz and internal network be
# activated?
#
# Set this to "yes" if you either want to masquerade internal
# machines or allow access to the dmz (or internal machines, but
# this is not a good idea).
#
# This option overrides IP_FORWARD from
# /etc/sysconfig/network/options
#
# Setting this option one alone doesn't do anything. Either activate
# masquerading with FW_MASQUERADE below if you want to masquerade
# your internal network to the internet, or configure FW_FORWARD to
# define what is allowed to be forwarded. You also need to define
# internal or dmz interfaces in FW_DEV_INT or FW_DEV_DMZ.
#
# defaults to "no" if not set
#
FW_ROUTE="no"
## Type: yesno
## Default: no
#
# 6.)
# Do you want to masquerade internal networks to the outside?
#
# Requires: FW_DEV_INT or FW_DEV_DMZ, FW_ROUTE, FW_MASQ_DEV
#
# "Masquerading" means that all your internal machines which use
# services on the internet seem to come from your firewall. Please
# note that it is more secure to communicate via proxies to the
# internet than to use masquerading.
#
# This option is required for FW_MASQ_NETS and FW_FORWARD_MASQ.
#
# defaults to "no" if not set
#
FW_MASQUERADE="no"
## Type: string
## Default: zone:ext
#
# 6a.)
# You also have to define on which interfaces to masquerade on.
# Those are usually the same as the external interfaces. Most users
# can leave the default.
#
# The special string "zone:" concatenated with the name of a zone
# means to take all interfaces in the specified zone.
#
# Old version of SuSEfirewall2 used a shell variable ($FW_DEV_EXT)
# here. That method is deprecated as it breaks auto detection of
# interfaces. Please use zone:ext instead.
#
# Examples: "ippp0", "zone:ext"
#
FW_MASQ_DEV="zone:ext"
## Type: string
## Default: 0/0
#
# Which internal computers/networks are allowed to access the
# internet via masquerading (not via proxys on the firewall)?
#
# Format: space separated list of
# <source network>[,<destination network>,<protocol>[,port[:port]]
#
# If the protocol is icmp then port is interpreted as icmp type
#
# Examples: - "0/0" unrestricted access to the internet
# - "10.0.0.0/8" allows the whole 10.0.0.0 network with
# unrestricted access.
# - "10.0.1.0/24,0/0,tcp,80 10.0.1.0/24,0/0,tcp,21" allows
# the 10.0.1.0 network to use www/ftp to the internet. -
# - "10.0.1.0/24,0/0,tcp,1024:65535 10.0.2.0/24" the
# 10.0.1.0/24 network is allowed to access unprivileged
# ports whereas 10.0.2.0/24 is granted unrestricted
# access.
# - "0/0,!10.0.0.0/8" unrestricted access to the internet
# with the exception of 10.0.0.8 which will not be
# masqueraded.
#
FW_MASQ_NETS="0/0"
## Type: string
## Default: 0/0
#
# Which computers/networks should be excluded from beeing masqueraded?
# Note that this only affects the POSTROUTING chain of the nat
# table. Ie the forwarding rules installed by FW_MASQ_NETS do not
# include the listed exceptions.
# *** Since you may use FW_NOMASQ_NETS together with IPsec make sure
# that the policy database is loaded even when the tunnel is not up
# yet. Otherwise packets to the listed networks will be forwarded to
# the internet unencrypted! ***
#
# Format: space separated list of
# <source network>[,<destination network>,<protocol>[,port[:port]]
#
# If the protocol is icmp then port is interpreted as icmp type
#
# Examples: - "0/0,10.0.0.0/8" do not masquerade packets from
# anywhere to the 10.0.0.0/8 network
#
FW_NOMASQ_NETS=""
## Type: yesno
## Default: no
#
# 7.)
# Do you want to protect the firewall from the internal network?
# Requires: FW_DEV_INT
#
# If you set this to "yes", internal machines may only access
# services on the firewall you explicitly allow. If you set this to
# "no", any internal user can connect (and attack) any service on
# the firewall.
#
# defaults to "yes" if not set
#
# see also FW_REJECT_INT
#
FW_PROTECT_FROM_INT="no"
## Type: string
#
# 9.)
# Which TCP services _on the firewall_ should be accessible from
# untrusted networks?
#
# Enter all ports or known portnames below, seperated by a space.
# TCP services (e.g. SMTP, WWW) must be set in FW_SERVICES_*_TCP, and
# UDP services (e.g. syslog) must be set in FW_SERVICES_*_UDP.
# e.g. if a webserver on the firewall should be accessible from the internet:
# FW_SERVICES_EXT_TCP="www"
# e.g. if the firewall should receive syslog messages from the dmz:
# FW_SERVICES_DMZ_UDP="syslog"
# For IP protocols (like GRE for PPTP, or OSPF for routing) you need to set
# FW_SERVICES_*_IP with the protocol name or number (see /etc/protocols)
#
# Format: space separated list of ports, port ranges or well known
# service names (see /etc/services)
#
# Examples: "ssh", "123 514", "3200:3299", "ftp 22 telnet 512:514"
#
FW_SERVICES_EXT_TCP="22 "
## Type: string
#
# Which UDP services _on the firewall_ should be accessible from
# untrusted networks?
#
# see comments for FW_SERVICES_EXT_TCP
#
# Example: "53"
#
FW_SERVICES_EXT_UDP=""
## Type: string
#
# Which UDP services _on the firewall_ should be accessible from
# untrusted networks?
#
# Usually for VPN/Routing which END at the firewall
#
# Example: "esp"
#
FW_SERVICES_EXT_IP=""
## Type: string
#
# Which RPC services _on the firewall_ should be accessible from
# untrusted networks?
#
# Port numbers of RPC services are dynamically assigned by the
# portmapper. Therefore "rpcinfo -p localhost" has to be used to
# automatically determine the currently assigned port for the
# services specified here.
#
# USE WITH CAUTION!
# regular users can register rpc services and therefore may be able
# to have SuSEfirewall2 open arbitrary ports
#
# Example: "mountd nfs"
FW_SERVICES_EXT_RPC=""
## Type: string
#
# Which services _on the firewall_ should be accessible from
# untrusted networks?
#
# Packages can drop a configuration file that specifies all required
# ports into /usr/share/SuSEfirewall2/services . That is handy for
# services that require multiple ports or protocols. Enter the space
# separated list of configuration files you want to load.
#
# Example: "samba-server nfs-server"
FW_CONFIGURATIONS_EXT=""
## Type: string
#
# see comments for FW_SERVICES_EXT_TCP
FW_SERVICES_DMZ_TCP=""
## Type: string
#
# see comments for FW_SERVICES_EXT_UDP
FW_SERVICES_DMZ_UDP=""
## Type: string
#
# see comments for FW_SERVICES_EXT_IP
FW_SERVICES_DMZ_IP=""
## Type: string
#
# see comments for FW_SERVICES_EXT_RPC
FW_SERVICES_DMZ_RPC=""
## Type: string
#
# see comments for FW_CONFIGURATIONS_EXT
FW_CONFIGURATIONS_DMZ=""
## Type: string
#
# see comments for FW_SERVICES_EXT_TCP
FW_SERVICES_INT_TCP=""
## Type: string
#
# see comments for FW_SERVICES_EXT_UDP
FW_SERVICES_INT_UDP=""
## Type: string
#
# see comments for FW_SERVICES_EXT_IP
FW_SERVICES_INT_IP=""
## Type: string
#
# see comments for FW_SERVICES_EXT_RPC
FW_SERVICES_INT_RPC=""
## Type: string
#
# see comments for FW_CONFIGURATIONS_EXT
FW_CONFIGURATIONS_INT=""
## Type: string
#
# Packets to silently drop without log message
#
# Format: space separated list of net,protocol[,port][,sport]
# Example: "0/0,tcp,445 0/0,udp,4662"
#
# The special value _rpc_ is recognized as protocol and means that dport is
# interpreted as rpc service name. See FW_SERVICES_EXT_RPC for
# details.
#
FW_SERVICES_DROP_EXT=""
## Type: string
## Default: 0/0,tcp,113
#
# Packets to silently reject without log message. Common usage is
# TCP port 113 which if dropped would cause long timeouts when
# sending mail or connecting to IRC servers.
#
# Format: space separated list of net,protocol[,dport][,sport]
# Example: "0/0,tcp,113"
#
# The special value _rpc_ is recognized as protocol and means that dport is
# interpreted as rpc service name. See FW_SERVICES_EXT_RPC for
# details.
#
FW_SERVICES_REJECT_EXT="0/0,tcp,113"
## Type: string
## Default:
#
# Services to allow. This is a more generic form of FW_SERVICES_{IP,UDP,TCP}
# and more specific than FW_TRUSTED_NETS
#
# Format: space separated list of net,protocol[,dport[,sport[,flags]]]
# Example: "0/0,tcp,22"
#
# Supported flags are
# hitcount=NUMBER : ipt_recent --hitcount parameter
# blockseconds=NUMBER : ipt_recent --seconds parameter
# recentname=NAME : ipt_recent --name parameter
# Example:
# Allow max three ssh connects per minute from the same IP address:
# "0/0,tcp,22,,hitcount=3,blockseconds=60,recentname=ssh"
#
# The special value _rpc_ is recognized as protocol and means that dport is
# interpreted as rpc service name. See FW_SERVICES_EXT_RPC for
# details.
#
FW_SERVICES_ACCEPT_EXT=""
## Type: string
#
# 10.)
# Which services should be accessible from 'trusted' hosts or nets?
#
# Define trusted hosts or networks (doesn't matter whether they are internal or
# external) and the services (tcp,udp,icmp) they are allowed to use. This can
# be used instead of FW_SERVICES_* for further access restriction. Please note
# that this is no replacement for authentication since IP addresses can be
# spoofed. Also note that trusted hosts/nets are not allowed to ping the
# firewall until you also permit icmp.
#
# Format: space separated list of network[,protocol[,port]]
# in case of icmp, port means the icmp type
#
# Example: "172.20.1.1 172.20.0.0/16 1.1.1.1,icmp 2.2.2.2,tcp,22"
#
FW_TRUSTED_NETS=""
## Type: string
## Default:
#
# 11.)
# Specify which ports are allowed to access unprivileged ports (>1023)
#
# Format: yes, no or space separated list of ports
#
# You may either allow everyone from anyport access to your highports ("yes"),
# disallow anyone ("no"), anyone who comes from a defined port (portnumber or
# known portname). Note that this is easy to circumvent! The best choice is to
# keep this option unset or set to 'no'
#
# defaults to "no" if not set (good choice)
#
# Note: Use of this variable is deprecated and it will likely be
# removed in the future. If you think it should be kept please
# report your use case at
# http://forge.novell.com/modules/xfmod/project/?susefirewall2
#
FW_ALLOW_INCOMING_HIGHPORTS_TCP=""
## Type: string
## Default:
#
# See FW_ALLOW_INCOMING_HIGHPORTS_TCP
#
# defaults to "no" if not set (good choice)
#
# Note: Use of this variable is deprecated and it will likely be
# removed in the future. If you think it should be kept please
# report your use case at
# http://forge.novell.com/modules/xfmod/project/?susefirewall2
#
FW_ALLOW_INCOMING_HIGHPORTS_UDP=""
## Type: string
#
# 13.)
# Which services or networks are allowed to be routed through the
# firewall, no matter which zone they are in?
# Requires: FW_ROUTE
#
# With this option you may allow access to e.g. your mailserver. The
# machines must have valid, non-private, IP addresses which were
# assigned to you by your ISP. This opens a direct link to the
# specified network, so please think twice befor using this option!
#
# Format: space separated list of
# <source network>,<destination network>[,protocol[,port[,flags]]]
#
# If the protocol is icmp then port is interpreted as icmp type
#
# The only flag currently supported is 'ipsec' which means to only
# match packets that originate from an IPsec tunnel
#
# Examples: - "1.1.1.1,2.2.2.2" allow the host 1.1.1.1 to access any
# service on the host 2.2.2.2
# - "3.3.3.3/16,4.4.4.4/24" allow the network 3.3.3.3/16
# to access any service in the network 4.4.4.4/24
# - "5.5.5.5,6.6.6.6,igmp" allow routing of IGMP messages
# from 5.5.5.5 to 6.6.6.6
# - "0/0,0/0,udp,514" always permit udp port 514 to pass
# the firewall
# - "192.168.1.0/24,10.10.0.0/16,,,ipsec \
# 10.10.0.0/16,192.168.1.0/24,,,ipsec" permit traffic
# from 192.168.1.0/24 to 10.10.0.0/16 and vice versa
# provided that both networks are connected via an
# IPsec tunnel.
# - "fd76:9dbb:91a3:1::/64,fd76:9dbb:91a3:4::/64,tcp,ssh"
# allow ssh from one IPv6 network to another
#
FW_FORWARD=""
## Type: string
#
# 13a.)
#
# same as FW_FORWARD but packages are rejected instead of accepted
#
# Requires: FW_ROUTE
#
FW_FORWARD_REJECT=""
## Type: string
#
# 13b.)
#
# same as FW_FORWARD but packages are dropped instead of accepted
#
# Requires: FW_ROUTE
#
FW_FORWARD_DROP=""
## Type: string
#
# 14.)
# Which services accessed from the internet should be allowed to masqueraded
# servers (on the internal network or dmz)?
# Requires: FW_ROUTE
#
# With this option you may allow access to e.g. your mailserver. The
# machines must be in a masqueraded segment and may not have public
# IP addesses! Hint: if FW_DEV_MASQ is set to the external interface
# you have to set FW_FORWARD from internal to DMZ for the service as
# well to allow access from internal!
#
# Please note that this should *not* be used for security reasons!
# You are opening a hole to your precious internal network. If e.g.
# the webserver there is compromised - your full internal network is
# compromised!
#
# Format: space separated list of
# <source network>,<ip to forward to>,<protocol>,<port>[,redirect port,[destination ip]]
#
# Protocol must be either tcp or udp
#
# Examples: - "4.0.0.0/8,10.0.0.10,tcp,80" forward all tcp request on
# port 80 coming from the 4.0.0.0/8 network to the
# internal server 10.10.0.10
# - "4.0.0.0/8,10.0.0.10,tcp,80,81" forward all tcp request on
# port 80 coming from the 4.0.0.0/8 network to the
# internal server 10.10.0.10 on port 81
# - "200.200.200.0/24,10.0.0.10,tcp,80,81,202.202.202.202"
# the network 200.200.200.0/24 trying to access the
# address 202.202.202.202 on port 80 will be forwarded
# to the internal server 10.0.0.10 on port 81
#
# Note: du to inconsitent iptables behaviour only port numbers are possible but
# no service names (https://bugzilla.netfilter.org/bugzilla/show_bug.cgi?id=273)
#
FW_FORWARD_MASQ=""
## Type: string
#
# 15.)
# Which accesses to services should be redirected to a local port on
# the firewall machine?
#
# This option can be used to force all internal users to surf via
# your squid proxy, or transparently redirect incoming webtraffic to
# a secure webserver.
#
# Format: list of <source network>[,<destination network>,<protocol>[,dport[:lport]]
# Where protocol is either tcp or udp. dport is the original
# destination port and lport the port on the local machine to
# redirect the traffic to
#
# An exclamation mark in front of source or destination network
# means everything EXCEPT the specified network
#
# Example: "10.0.0.0/8,0/0,tcp,80,3128 0/0,172.20.1.1,tcp,80,8080"
#
# Note: contrary to previous SuSEfirewall2 versions it is no longer necessary
# to additionally open the local port
FW_REDIRECT=""
## Type: yesno
## Default: yes
#
# 16.)
# Which kind of packets should be logged?
#
# When set to "yes", packages that got dropped and are considered
# 'critical' will be logged. Such packets include for example
# spoofed packets, tcp connection requests and certain icmp types.
#
# defaults to "yes" if not set
#
FW_LOG_DROP_CRIT="yes"
## Type: yesno
## Default: no
#
# whether all dropped packets should be logged
#
# Note: for broadcasts to be logged you also need to set
# FW_IGNORE_FW_BROADCAST_* to 'no'
#
# defaults to "no" if not set
#
FW_LOG_DROP_ALL="no"
## Type: yesno
## Default: yes
#
# When set to "yes", packages that got accepted and are considered
# 'critical' will be logged. Such packets include for example tcp
# connection requests, rpc connection requests, access to high
# udp/tcp port and forwarded pakets.
#
# defaults to "yes" if not set
#
FW_LOG_ACCEPT_CRIT="yes"
## Type: yesno
## Default: no
#
# whether all accepted packets should be logged
#
# Note: setting this to 'yes' causes _LOTS_ of log entries and may
# fill your disk quickly. It also disables FW_LOG_LIMIT
#
# defaults to "no" if not set
#
FW_LOG_ACCEPT_ALL="no"
## Type: string
#
# How many packets per time unit get logged for each logging rule.
# When empty a default of 3/minute is used to prevent port scans
# flooding your log files. For desktop usage it's a good idea to
# have the limit, if you are using logfile analysis tools however
# you might want to disable it.
#
# Set to 'no' to disable the rate limit. Setting FW_LOG_ACCEPT_ALL
# to 'yes' disables this option as well.
#
# Format: a digit and suffix /second, /minute, /hour or /day
FW_LOG_LIMIT=""
## Type: string
#
# iptables logging option. Must end with --log-prefix and some prefix
# characters
#
# You may specify an alternative logging target by starting the
# string with "-j ". E.g. "-j ULOG --ulog-prefix SFW2"
#
# only change this if you know what you are doing!
FW_LOG=""
## Type: yesno
## Default: yes
#
# 17.)
# Do you want to enable additional kernel TCP/IP security features?
# If set to yes, some obscure kernel options are set.
# (icmp_ignore_bogus_error_responses, icmp_echoreply_rate,
# icmp_destunreach_rate, icmp_paramprob_rate, icmp_timeexeed_rate,
# ip_local_port_range, log_martians, rp_filter, routing flush,
# bootp_relay, proxy_arp, secure_redirects, accept_source_route
# icmp_echo_ignore_broadcasts, ipfrag_time)
#
# Tip: Set this to "no" until you have verified that you have got a
# configuration which works for you. Then set this to "yes" and keep it
# if everything still works. (It should!) ;-)
#
# Choice: "yes" or "no", if not set defaults to "yes"
#
FW_KERNEL_SECURITY="yes"
## Type: yesno
## Default: no
#
# 18.)
# Keep the routing set on, if the firewall rules are unloaded?
# REQUIRES: FW_ROUTE
#
# Choices "yes" or "no", if not set defaults to "no"
#
FW_STOP_KEEP_ROUTING_STATE="no"
## Type: yesno
## Default: yes
#
# 19.)
# Allow the firewall to reply to icmp echo requests
#
# defaults to "no" if not set
#
FW_ALLOW_PING_FW="yes"
## Type: yesno
## Default: no
#
# 19a.)
# Allow hosts in the dmz to be pinged from hosts in other zones even
# if neither FW_FORWARD nor FW_MASQUERADE is set
#
# Requires: FW_ROUTE
#
# defaults to "no" if not set
#
FW_ALLOW_PING_DMZ="no"
## Type: yesno
## Default: no
#
# 19b.)
# Allow hosts in the external zone to be pinged from hosts in other
# zones even if neither FW_FORWARD nor FW_MASQUERADE is set
#
# Requires: FW_ROUTE
#
# defaults to "no" if not set
#
FW_ALLOW_PING_EXT="no"
## Type: yesno
## Default: yes
#
# 21.)
# Allow ICMP sourcequench from your ISP?
#
# If set to yes, the firewall will notice when connection is choking, however
# this opens yourself to a denial of service attack. Choose your poison.
#
# Defaults to "yes" if not set
#
FW_ALLOW_FW_SOURCEQUENCH=""
## Type: string(yes,no)
#
# 22.)
# Allow IP Broadcasts?
#
# Whether the firewall allows broadcasts packets.
# Broadcasts are used for e.g. for Netbios/Samba, RIP, OSPF and Games.
#
# If you want to drop broadcasts however ignore the annoying log entries, set
# FW_IGNORE_FW_BROADCAST_* to yes.
#
# Note that if you allow specifc ports here it just means that broadcast
# packets for that port are not dropped. You still need to set
# FW_SERVICES_*_UDP to actually allow regular unicast packets to
# reach the applications.
#
# Format: either
# - "yes" or "no"
# - list of udp destination ports
#
# Examples: - "631 137" allow broadcast packets on port 631 and 137
# to enter the machine but drop any other broadcasts
# - "yes" do not install any extra drop rules for
# broadcast packets. They'll be treated just as unicast
# packets in this case.
# - "no" drop all broadcast packets before other filtering
# rules
#
# defaults to "no" if not set
#
FW_ALLOW_FW_BROADCAST_EXT="no"
## Type: string
#
# see comments for FW_ALLOW_FW_BROADCAST_EXT
FW_ALLOW_FW_BROADCAST_INT="no"
## Type: string
#
# see comments for FW_ALLOW_FW_BROADCAST_EXT
FW_ALLOW_FW_BROADCAST_DMZ="no"
## Type: string(yes,no)
#
# Suppress logging of dropped broadcast packets. Useful if you don't allow
# broadcasts on a LAN interface.
#
# This setting only affects packets that are not allowed according
# to FW_ALLOW_FW_BROADCAST_*
#
# Format: either
# - "yes" or "no"
# - list of udp destination ports
#
# Examples: - "631 137" silently drop broadcast packets on port 631 and 137
# - "yes" do not log dropped broadcast packets
# - "no" log all dropped broadcast packets
#
#
# defaults to "no" if not set
FW_IGNORE_FW_BROADCAST_EXT="yes"
## Type: string
#
# see comments for FW_IGNORE_FW_BROADCAST_EXT
FW_IGNORE_FW_BROADCAST_INT="no"
## Type: string
#
# see comments for FW_IGNORE_FW_BROADCAST_EXT
FW_IGNORE_FW_BROADCAST_DMZ="no"
## Type: list(yes,no,int,ext,dmz,)
## Default: no
#
# 23.)
# Specifies whether routing between interfaces of the same zone should be allowed
# Requires: FW_ROUTE="yes"
#
# Set this to allow routing between interfaces in the same zone,
# e.g. between all internet interfaces, or all internal network
# interfaces.
#
# Caution: Keep in mind that "yes" affects all zones. ie even if you
# need inter-zone routing only in the internal zone setting this
# parameter to "yes" would allow routing between all external
# interfaces as well. It's better to use
# FW_ALLOW_CLASS_ROUTING="int" in this case.
#
# Choice: "yes", "no", or space separate list of zone names
#
# Defaults to "no" if not set
#
FW_ALLOW_CLASS_ROUTING=""
## Type: string
#
# 25.)
# Do you want to load customary rules from a file?
#
# This is really an expert option. NO HELP WILL BE GIVEN FOR THIS!
# READ THE EXAMPLE CUSTOMARY FILE AT /etc/sysconfig/scripts/SuSEfirewall2-custom
#
#FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"
FW_CUSTOMRULES=""
## Type: yesno
## Default: no
#
# 26.)
# Do you want to REJECT packets instead of DROPing?
#
# DROPing (which is the default) will make portscans and attacks much
# slower, as no replies to the packets will be sent. REJECTing means, that
# for every illegal packet, a connection reject packet is sent to the
# sender.
#
# Choice: "yes" or "no", if not set defaults to "no"
#
# Defaults to "no" if not set
#
# You may override this value on a per zone basis by using a zone
# specific variable, e.g. FW_REJECT_DMZ="yes"
#
FW_REJECT=""
## Type: yesno
## Default: no
#
# see FW_REJECT for description
#
# default config file setting is "yes" assuming that slowing down
# portscans is not strictly required in the internal zone even if
# you protect yourself from the internal zone
#
FW_REJECT_INT="yes"
## Type: string
#
# 27.)
# Tuning your upstream a little bit via HTB (Hierarchical Token Bucket)
# for more information about HTB see http://www.lartc.org
#
# If your download collapses while you have a parallel upload,
# this parameter might be an option for you. It manages your
# upload stream and reserves bandwidth for special packets like
# TCP ACK packets or interactive SSH.
# It's a list of devices and maximum bandwidth in kbit.
# For example, the german TDSL account, provides 128kbit/s upstream
# and 768kbit/s downstream. We can only tune the upstream.
#
# Example:
# If you want to tune a 128kbit/s upstream DSL device like german TDSL set
# the following values:
# FW_HTB_TUNE_DEV="dsl0,125"
# where dsl0 is your pppoe device and 125 stands for 125kbit/s upstream
#
# you might wonder why 125kbit/s and not 128kbit/s. Well practically you'll
# get a better performance if you keep the value a few percent under your
# real maximum upload bandwidth, to prevent the DSL modem from queuing traffic in
# it's own buffers because queing is done by us now.
# So for a 256kbit upstream
# FW_HTB_TUNE_DEV="dsl0,250"
# might be a better value than "dsl0,256". There is no perfect value for a
# special kind of modem. The perfect value depends on what kind of traffic you
# have on your line but 5% under your maximum upstream might be a good start.
# Everthing else is special fine tuning.
# If you want to know more about the technical background,
# http://tldp.org/HOWTO/ADSL-Bandwidth-Management-HOWTO/
# is a good start
#
FW_HTB_TUNE_DEV=""
## Type: list(no,drop,reject)
## Default: drop
#
# 28.)
# What to do with IPv6 Packets?
#
# On older kernels ip6tables was not stateful so it's not possible to implement
# the same features as for IPv4 on such machines. For these there are three
# choices:
#
# - no: do not set any IPv6 rules at all. Your Host will allow any IPv6
# traffic unless you setup your own rules.
#
# - drop: drop all IPv6 packets.
#
# - reject: reject all IPv6 packets. This is the default if stateful matching is
# not available.
#
# Disallowing IPv6 packets may lead to long timeouts when connecting to IPv6
# Adresses. See FW_IPv6_REJECT_OUTGOING to avoid this.
#
# Leave empty to automatically detect whether your kernel supports stateful matching.
#
FW_IPv6=""
## Type: yesno
## Default: yes
#
# 28a.)
# Reject outgoing IPv6 Packets?
#
# Set to yes to avoid timeouts because of dropped IPv6 Packets. This Option
# does only make sense with FW_IPv6 != no
#
# Defaults to "yes" if not set
#
FW_IPv6_REJECT_OUTGOING=""
## Type: list(yes,no,int,ext,dmz,)
## Default: no
#
# 29.)
# Trust level of IPsec packets.
#
# You do not need to change this if you do not intend to run
# services that should only be available trough an IPsec tunnel.
#
# The value specifies how much IPsec packets are trusted. 'int', 'ext' or 'dmz'
# are the respective zones. 'yes' is the same as 'int. 'no' means that IPsec
# packets belong to the same zone as the interface they arrive on.
#
# Note: you still need to explicitely allow IPsec traffic.
# Example:
# FW_IPSEC_TRUST="int"
# FW_SERVICES_EXT_IP="esp"
# FW_SERVICES_EXT_UDP="isakmp"
# FW_PROTECT_FROM_INT="no"
#
# Defaults to "no" if not set
#
FW_IPSEC_TRUST="no"
## Type: string
## Default:
#
# 30.)
# Define additional firewall zones
#
# The built-in zones INT, EXT and DMZ must not be listed here. Names
# of additional zones must only contain lowercase ascii characters.
# To define rules for the additional zone, take the approriate
# variable for a built-in zone and substitute INT/EXT/DMZ with the
# name of the additional zone.
#
# Example:
# FW_ZONES="wlan"
# FW_DEV_wlan="wlan0"
# FW_SERVICES_wlan_TCP="80"
# FW_ALLOW_FW_BROADCAST_wlan="yes"
#
FW_ZONES=""
## Type: list(yes,no,auto,)
## Default:
#
# 31.)
# Whether to use iptables-batch
#
# iptables-batch commits all rules in an almost atomic way similar
# to iptables-restore. This avoids excessive iptables calls and race
# conditions.
#
# Choice:
# - yes: use iptables-batch if available and warn if it isn't
# - no: don't use iptables-batch
# - auto: use iptables-batch if available, silently fall back to
# iptables if it isn't
#
# Defaults to "auto" if not set
#
FW_USE_IPTABLES_BATCH=""
## Type: string
## Default:
#
# 32.)
# Which additional kernel modules to load at startup
#
# Example:
# FW_LOAD_MODULES="ip_conntrack_ftp ip_nat_ftp"
#
FW_LOAD_MODULES=""
## Type: string
## Default:
#
# 33.)
# Bridge interfaces without IP address
#
# Traffic on bridge interfaces like the one used by xen appears to
# enter and leave on the same interface. Add such interfaces here in
# order to install special permitting rules for them.
#
# Format: list of interface names separated by space
#
# Example:
# FW_FORWARD_ALWAYS_INOUT_DEV="xenbr0"
#
# FW_FORWARD_ALWAYS_INOUT_DEV="xenbr+"
FW_SERVICES_ACCEPT_INT=""
FW_SERVICES_ACCEPT_DMZ=""
## Path: System/Bootloader
## Description: Bootloader configuration
## Type: list(grub,lilo,none)
## Default: grub
#
# Type of bootloader in use.
# For making the change effect run bootloader configuration tool
# and configure newly selected bootloader
#
#
LOADER_TYPE="grub"
## Path: System/Bootloader
## Description: Bootloader configuration
## Type: list(floppy,mbr,root,boot,custom,none)
## Default: mbr
#
# Location of boot loader.
# For making the change effect run bootloader configuration tool
#
#
LOADER_LOCATION="mbr"
## Path: System/Environment/Clock
## Description: Information about your timezone and time
## Type: string
## ServiceRestart: boot.clock
#
# Set to "-u" if your system clock is set to UTC, and to "--localtime"
# if your clock runs that way.
#
HWCLOCK="--localtime"
## Description: Write back system time to the hardware clock
## Type: yesno
## Default: yes
#
# Is set to "yes" write back the system time to the hardware
# clock at reboot or shutdown. Usefull if hardware clock is
# much more inaccurate than system clock. Set to "no" if
# system time does it wrong due e.g. missed timer interrupts.
# If set to "no" the hardware clock adjust feature is also
# skipped because it is rather useless without writing back
# the system time to the hardware clock.
#
SYSTOHC="yes"
## Type: string(Europe/Berlin,Europe/London,Europe/Paris)
## ServiceRestart: boot.clock
#
# Timezone (e.g. CET)
# (this will set /usr/lib/zoneinfo/localtime)
#
TIMEZONE="UTC"
DEFAULT_TIMEZONE="US/Eastern"
## Path: System/Console/Framebuffer
## Description: Framebuffer configuration
## Type: string
## Default: ""
#
# You may want to load a framebuffer display driver into your kernel
# in order to be able to change graphics modes etc. with fbset in
# console mode.
#
# Notes: Most people won't enter anything here, as:
# * it won't work if you have vesafb already active
# * its advantageous to have fb support compiled into your kernel
# * Some XFree86 drivers (especially in XFree86-4.x) don't work
# too well, if you enable framebuffer text mode.
#
# Example:
# FB_MODULES="matroxfb_base vesa=0x182 fv=85 matroxfb_maven matroxfb_crtc2"
#
FB_MODULES=""
## Type: string
## Default: ""
#
# In case your kernel has framebuffer support (or you loaded the framebuffer
# support into your kernel as a module above), you may want to change the
# resolution or other parameters. This is done by secifying the parameters
# to fbset. Use a mode from /etc/fb-modes and additional parameters as
# -a, -depth <BPP>, -vyres <VYRES>, ... (See fbset manpage and/or fbset -h).
#
# Notes:
# * vesafb does not (currently) support changing the display mode
# * BEWARE! Don't set modes your monitor can't do. Watch out for the maximum
# horizontal frequency. Old monitors might even be damaged if you exceed
# their capabilities.
#
# Example:
# FBSET_PARAMS="-a -depth 16 768x576-90 -vyres 10240"
#
FBSET_PARAMS=""
## Path: Hardware/Console
## Description: Text console settings (see also Hardware/Keyboard)
## Type: string
## Default: ""
## ServiceRestart: kbd
#
# Console settings.
# Note: The KBD_TTY setting from Hardware/Keyboard (sysconfig/keyboard)
# also applies for the settings here.
#
# Load this console font on bootup:
# (/usr/share/kbd/consolefonts/)
#
CONSOLE_FONT="lat9w-16.psfu"
## Type: string
## Default: ""
#
# Some fonts come without a unicode map.
# (.psfu fonts supposedly have it, others often not.)
# You can then specify the unicode mapping of your font
# explicitly. (/usr/share/kbd/unimaps/)
# Normally not needed.
#
CONSOLE_UNICODEMAP=""
## Type: string
## Default: ""
#
# Most programs output 8 bit characters, so you need a table to
# translate those characters into unicode. That one can be specified
# here. (/usr/share/kbd/consoletrans/)
# (Note: If your console is in utf-8 mode you don't need this.)
# If your code does not use a unicode mapping at all (because you
# e.g. explicitly specified UNICODEMAP="none") you may circumvent
# the translation via unicode, but load a map which directly maps
# 8 bit output of your program to a font position.
#
CONSOLE_SCREENMAP=""
## Type: string
## Default: ""
#
# for some fonts the console has to be initialized with CONSOLE_MAGIC.
# CONSOLE_MAGIC can be empty or have the values "(B", ")B", "(K" or ")K".
# Normally not needed (automatically handled by setfont).
#
CONSOLE_MAGIC=""
## Path: Desktop/Display manager
## Description: settings to generate a proper displaymanager config
## Type: string(kdm,xdm,gdm,wdm,console)
## Default: ""
## Config: xdm,kdm,gdm
#
# Here you can set the default Display manager (kdm/xdm/gdm/wdm/console).
# all changes in this file require a restart of the displaymanager
#
DISPLAYMANAGER="xdm"
## Type: yesno
## Default: no
#
# Allow remote access to your display manager (kdm only for now)
#
DISPLAYMANAGER_REMOTE_ACCESS="no"
## Type: yesno
## Default: no
#
# Allow remote access of the user root to your display manager
#
DISPLAYMANAGER_ROOT_LOGIN_REMOTE="no"
## Type: yesno
## Default: yes
#
# let the displaymanager start a local Xserver
# set to "no" for remote-access only
# set to "no" on architectures without any Xserver (e.g. s390/s390x)
#
DISPLAYMANAGER_STARTS_XSERVER="yes"
## Path: Desktop/Display manager
## Description: settings to generate a proper displaymanager config
## Type: string
## Default:
## Config: kdm3
#
# space separated list of users for which icons should be shown in KDM
# if empty, then take system defaults
#
KDM_USERS=""
## Type: string
## Default:
#
# Special greeting words in kdm
#
KDM_GREETSTRING=""
## Type: string
## Default:
#
# define the user whom should get logged in without request
#
DISPLAYMANAGER_AUTOLOGIN=""
## Type: yesno
## Default: no
#
# Allow all users to login without password, but ask for the user
#
DISPLAYMANAGER_PASSWORD_LESS_LOGIN="no"
## Type: yesno
## Default: no
## Config: xdm
#
# Tcp port 6000 of Xserver. When set to "no" (default) Xserver is
# started with "-nolisten tcp". Only set this to "yes" if you really
# need to. Use ssh X11 port forwarding whenever possible.
#
DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN="no"
## Type: string
## Default: SUSE
#
# Define the theme to be used by kdm. If empty, the traditional login
# window is used (which lacks some features)
#
DISPLAYMANAGER_KDM_THEME="SUSE"
## Type: yesno
## Default: no
#
# Display a combobox for Active Directory domains.
#
DISPLAYMANAGER_AD_INTEGRATION="no"
## Type: list(root,all,none,auto)
## Default: auto
#
# Determine who will be able to shutdown or reboot the system in kdm
# and gdm. Valid values are: "root" (only root can shutdown), "all"
# (everybody can shutdown), "none" (nobody can shutdown from
# displaymanager), "auto" (follow
# System/Security/Permissions/PERMISSION_SECURITY to decide: "easy
# local" is equal to "all", everything else is equal to "root"). Note
# that remote user can never shutdown in GDM.
#
DISPLAYMANAGER_SHUTDOWN="auto"
## Path: Hardware/Keyboard
## Description: Keyboard settings
## Type: string
## Default: ""
## ServiceRestart: kbd
#
# Keyboard settings for the text console
#
# Keyboard mapping
# (/usr/share/kbd/keymaps/)
# e.g. KEYTABLE="de-latin1-nodeadkeys", "us" or empty for US settings
#
KEYTABLE="us.map.gz"
## Type: integer
## Default:
#
# Keyboard delay time in ms (250, 500, 750, 1000)
KBD_DELAY=""
## Type: string(2.0,2.1,2.3,2.5,2.7,3.0,3.3,3.7,4.0,4.3,4.6,5.0,5.5,6.0,6.7,7.5,8.0,8.6,9.2,10.0,10.9,12.0,13.3,15.0,16.0,17.1,18.5,20.0,21.8,24.0,26.7,30.0)
## Default:
#
# Keyboard repeat rate (2.0 - 30.0)
KBD_RATE=""
## Type: list(bios,yes,no)
## Default: bios
#
# NumLock on? ("yes" or "no" or empty or "bios" for BIOS setting)
KBD_NUMLOCK="bios"
## Type: yesno
## Default: no
#
# ScrollLock on? ("yes" or "no")
KBD_SCRLOCK="no"
## Type: yesno
## Default: no
#
# CapsLock on? ("yes" or "no")
KBD_CAPSLOCK="no"
## Type: yesno
## Default: no
#
# Disable CAPS LOCK and make it a normal Shift key?
# (Ctrl Caps Lock will still toggle Caps Lock functionality)
# Note that you need to tweak the xkb maps or use xmodmap
# if you want to do the same under X-Windows. In ~/.Xmodmap:
# keycode 0x42 = Shift_L Shift_L
#
KBD_DISABLE_CAPS_LOCK="no"
## Type: string
## Default: "tty1 tty2 tty3 tty4 tty5 tty6"
#
# ttys for the above settings
# Example: "tty1 tty2"
# "" for all tty's
#
KBD_TTY="tty1 tty2 tty3 tty4 tty5 tty6"
#
# Compose tables to be loaded.
# Compose tables are good for producing characters, which can not
# be directly input from your keyboard, such as characters with
# accents, currency signs, ...
# Please read /usr/share/doc/packages/kbd/README.SuSE for an
# explanation.
# You may leave this variable empty (default compose table from kernel
# or KEYTABLE will be used then -- most keyboard maps don't have a
# compose table, though)
# More than one compose table can be given. For a selection of possible
# tables see /usr/share/kbd/keymaps/include/compose.*
# You can give more than one compose table, but only the last one will
# determine the compose combinations.
# The word "clear" has a special meaning:
# Your compose table will be cleared, before more compose symbols are
# added.
# The files compose.winkeys and shiftctrl may be used to map the
# <compose> key to the W*n menu key and Shift-Ctrl, respectively,
# on a PC keyboard.
# A typical setting for Latin1 users (with a PC keyboard) may be
# COMPOSETABLE="clear winkeys shiftctrl latin1.add"
# For latin2, this would be
# COMPOSETABLE="clear winkeys shiftctrl latin2"
# A typical setting for sb. with a character set, where a matching
# compose table is missing (but with a PC keyboard), would be
# COMPOSETABLE="winkeys shiftctrl"
#
COMPOSETABLE="clear winkeys shiftctrl latin1.add"
# The YaST-internal identifier of the attached keyboard.
#
YAST_KEYBOARD="us,pc104"
## Path: System/Environment/Language
## Type: string(scim,uim,kinput2,kinput2-canna,kinput2-wnn,nabi,wnn,atokx,xcin,none)
## Default: ""
#
# A default input method to be used in X11 can be selected here.
# If this variable is set and a script with the same name
# as the value of this variable exists in the directory /etc/X11/xim.d/
# this script is sourced when X11 is started to start an input method.
#
# The special value "none" (/etc/X11/xim.d/none) means:
# Do not use any input method at all.
#
# For more details see the comments at the top of /etc/X11/xim.
#
INPUT_METHOD=""
## Path: System/Environment/Language
## Description:
## Type: string(POSIX,ca_ES.ISO-8859-1,ca_ES.UTF-8,cs_CZ.ISO-8859-2,cs_CZ.UTF-8,da_DE@euro,da_DK.ISO-8859-1,da_DK.UTF-8,de_DE@euro,de_DE.ISO-8859-1,de_DE.UTF-8,el_GR.ISO-8859-7,el_GR.UTF-8,en_GB.ISO-8859-1,en_GB.UTF-8,en_IE@euro,en_IE.ISO-8859-1,en_US.ISO-8859-1,es_ES@euro,es_ES.ISO-8859-1,es_ES.UTF-8,fr_FR@euro,fr_FR.ISO-8859-1,fr_FR.UTF-8,gl_ES@euro,gl_ES.ISO-8859-1,gl_ES.utf-8,hr_HR.ISO-8859-2,hu_HU.ISO-8859-2,hu_HU.UTF-8,it_IT@euro,it_IT.ISO-8859-1,it_IT.UTF-8,ja_JP.eucJP,ja_JP.UTF-8,lt_LT.ISO-8859-13,lt_LT.UTF-8,nl_NL@euro,nl_NL.ISO-8859-1,nl_NL.UTF-8,ru_RU.ISO-8859-5,ru_RU.KOI8R,ru_RU.UTF-8,sk_SK.ISO-8859-2,sk_SK.UTF-8,tr_TR.ISO-8859-9,tr_TR.UTF-8,ko_KR.eucKR,ko_KR.UTF-8,zh_TW.Big5,zh_TW.UTF-8,zh_CN.GB2312,zh_CN.UTF-8)
## Default: ""
## Config: OpenOffice.org,groff,ispell,kde,kdm,profiles,susehelp,susewm,tetex,wdm
#
#
# Local users will get RC_LANG as their default language, i.e. the
# environment variable $LANG . $LANG is the default of all $LC_*-variables,
# as long as $LC_ALL is not set, which overrides all $LC_-variables.
# Root uses this variable only if ROOT_USES_LANG is set to "yes".
#
RC_LANG="POSIX"
## Type: string
## Default: ""
#
# This variable will override all LC-variables!!
# Again, ROOT_USES_LANG must be set to "yes", if an effect on the superuser
# account is desired.
#
RC_LC_ALL=""
## Type: string
## Default: ""
#
# This defines the locale in which messages of programs and
# libraries with i18n-support should appear if a translated
# message catalog for the library or the program is installed.
# This also provides localized yes/no answers.
#
RC_LC_MESSAGES=""
## Type: string
## Default: ""
#
# This defines the locale for character handling and classification.
# The libc uses this value in language dependent function calls, such
# as e.g. uppercase/lowercase mapping of foreign characters.
#
RC_LC_CTYPE=""
## Type: string
## Default: ""
#
# This defines the locale for sorting strings and characters.
# It is used by the libc to obtain the alphabetical order of characters
# (e.g. for string comparisons).
#
RC_LC_COLLATE=""
## Type: string
## Default: ""
#
# This defines the locale for date and time output formats.
# i.e.: 06/09/1999 vs. 09.06.1999
#
RC_LC_TIME=""
## Type: string
## Default: ""
#
# This defines the locale for formatting and reading numbers.
# i.e.: 1,234.56 vs. 1.234,56
#
RC_LC_NUMERIC=""
## Type: string
## Default: ""
#
# This defines the locale for formatting and reading money values.
#
RC_LC_MONETARY=""
## Type: string
## Default: ""
#
# This defines the locale for format of paper.
#
RC_LC_PAPER=""
## Type: string(ctype)
## Default: ctype
#
# This defines if the user "root" should use the locale settings
# which are defined here.
# Value "ctype" means that root uses just LC_CTYPE.
#
ROOT_USES_LANG="ctype"
## Type: yesno
## Default: no
#
# Workaround for missing forward of LANG and LC variables
# of e.g. ssh login connections.
#
AUTO_DETECT_UTF8="no"
## Type: string
## Default: ""
#
# List of installed language supports, use by YaST2
#
INSTALLED_LANGUAGES=""
## Path: Network/General
## Description: Set some general network configuration
## Type: string("","-","+")
## Default: "+"
## ServiceRestart: network
#
# DEFAULT_BROADCAST is used when no individual BROADCAST is set. It can get one
# of the following values:
# "" : don't set a broadcast address
# "-" : use IPADDR with all host bits deleted
# "+" : use IPADDR with all host bits set
DEFAULT_BROADCAST="+"
## Type: yesno
## Default: yes
# sometimes we want some script to be executed after an interface has been
# brought up, or before an interface is taken down.
# default dir is /etc/sysconfig/network/if-up.d for POST_UP and
# /etc/sysconfig/network/if-down.d for PRE_DOWN
# Note: if you use NetworkManager then down scripts will be called after the
# interface is down and not before.
GLOBAL_POST_UP_EXEC="yes"
GLOBAL_PRE_DOWN_EXEC="yes"
## Type: yesno
## Default: no
# If ifup should check if an ip address is already in use, set this to yes.
# Make sure that packet sockets (CONFIG_PACKET) are supported in the kernel,
# since this feature uses arping, which depends on that.
# Also be aware that this takes one second per interface; consider that when
# setting up a lot of interfaces.
CHECK_DUPLICATE_IP="no"
## Type: yesno
## Default: no
# Switch on/off debug messages for all network configuration stuff. If set to no
# most scripts can enable it locally with "-o debug".
DEBUG="no"
## Type: yesno
## Default: yes
# All error and info messages from network and hardware configuration scripts go
# to stderr. Most tools that call sysconfig scripts (udev, rcnetwork, scpm,
# YaST) catch these messages and can log them. So some messages appear twice in
# syslog. If you don't like that, then set USE_SYSLOG=no.
USE_SYSLOG="yes"
# Handling of network connections
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# These features are designed for the convenience of the experienced
# user. If you encounter problems you don't understand then switch
# them off. That is the default.
# Please do not complain if you get troubles. But if you want help to
# make them smarter write to <http://www.suse.de/feedback>.
## Type: yesno
## Default: no
#
# If you are interested in the connections and nfs mounts that use a
# network interface, you can set CONNECTION_SHOW_WHEN_IFSTATUS="yes".
# Then you will see them with 'ifstatus <interface>' (or 'ifstatus
# <config>')
# This one _should_ never harm ;)
#
CONNECTION_SHOW_WHEN_IFSTATUS="no"
## Type: yesno
## Default: no
#
# If an interface should be set down only if there are no active
# connections, then use CONNECTION_CHECK_BEFORE_IFDOWN="yes"
#
CONNECTION_CHECK_BEFORE_IFDOWN="no"
## Type: yesno
## Default: no
#
# If these connetions (without the nfs mounts) should be closed when
# shutting down an interface, set CONNECTION_CLOSE_BEFORE_IFDOWN="yes".
# WARNING: Be aware that this may terminate applications which need
# one of these connections!
#
CONNECTION_CLOSE_BEFORE_IFDOWN="no"
## Type: yesno
## Default: no
#
# If you are a mobile laptop user and like even nfs mounts to be
# closed when you leave your current workplace, then set
# CONNECTION_UMOUNT_NFS_BEFORE_IFDOWN="yes". This does only work
# if CONNECTION_CLOSE_BEFORE_IFDOWN="yes", too.
# WARNING: Be aware that this may terminate applications which use
# these nfs mounts as working directory. Be very carefull if your home
# is mounted via nfs!!!
# WARNING: This may even lead to hanging ifdown processes if there are
# processes that could not be terminated. If you are using
# hotpluggable devices (pcmcia, usb, firewire), first shut them down
# before unplugging!
#
CONNECTION_UMOUNT_NFS_BEFORE_IFDOWN="no"
## Type: yesno
## Default: no
#
# If terminating processes that use a connection or nfs mount is not
# enough, then they can be killed after an unsuccesfull termination.
# If you want that set CONNECTION_SEND_KILL_SIGNAL="yes"
#
CONNECTION_SEND_KILL_SIGNAL="no"
## Type: string
## Default: ""
#
# Here you may specify which interfaces have to be up and configured properly
# after 'rcnetwork start'. rcconfig will return 'failed' if any of these
# interfaces is not up. You may use interface names as well but better use
# hardware descriptions of the devices (eth-id-<macaddress> or eth-bus-... See
# man ifup for 'hardware description'). The network start script will wait for
# these interfaces, but not longer as set in WAIT_FOR_INTERFACES.
# You need not to add dialup or tunnel interfaces here, only physical devices.
# The interface 'lo' is always considered to be mandatory and can be omitted.
#
# If this variable is empty, rcnetwork tries to derive the list of mandatory
# devices automatically from the list of existing configurations. Configurations
# with names bus-pcmcia or bus-usb or with STARTMODE=hotplug are skipped. (try
# '/etc/init.d/rc5.d/S*network start -o debug fake | grep MANDAT')
MANDATORY_DEVICES=""
## Type: integer
## Default: 30
#
# Some interfaces need some time to come up or come asynchronously via hotplug.
# WAIT_FOR_INTERFACES is a global wait for all mandatory interfaces in
# seconds. If empty no wait occurs.
#
WAIT_FOR_INTERFACES="30"
## Type: yesno
## Default: yes
#
# With this variable you can determine if the SuSEfirewall when enabled
# should get started when network interfaces are started.
FIREWALL="no"
## Type: string
## Default: "eth*[0-9]|tr*[0-9]|wlan[0-9]|ath[0-9]"
#
# Automatically add a linklocal route to the matching interfaces.
# This string is used in a bash "case" statement, so it may contain
# '*', '[', ']' and '|' meta-characters.
#
LINKLOCAL_INTERFACES="eth*[0-9]|tr*[0-9]|wlan[0-9]|ath[0-9]"
## Type: string
## Default: "-f -I"
#
# Set default options for ifplugd. You may also set them in an ifcfg-* file
# individually. Have a look at 'man ifplug' for details. We let ifplugd set the
# interface UP when starting, because there are many interfaces where link beat
# cannot be detected otherwise. If you want the interface to stay down then add
# the option '-a'. If you like ifplugd to beep on cable (un)plug, remove '-b'.
#
IFPLUGD_OPTIONS="-f -I -b"
## Type: yesno
## Default: no
#
# Instead of the usual network setup (now called 'NetControl') you may also use
# 'NetworkManager' to control your interfaces.
#
# NetControl is what you were used to in SUSE Linux up to now. It has a wide
# range of configurations means for setting up any number of different virtual
# and real interfaces. It should be used if you:
# - want a static network setup
# - have many interfaces
# - need VLAN, bonding, bridging, multiple IP addresses
# - must restrict network control to root
# It may also switch interfaces automatically, but lacks a usable GUI for normal
# users.
#
# NetworkManager lets the user control interfaces and switches automatically if
# network interfaces lose/gain physical connection. It should be used if you:
# - move between networks frequently
# - want a GUI for network control
# Especially on mobile computers that use mainly one wired and one wireless
# interface NetworkManager will please you.
#
# If you are used to SCPM then you might probably stay with NetControl. But at
# least try NetworkManager, because it can replace SCPM in some usage scenarios.
#
NETWORKMANAGER="no"
## Type: int
## Default: 0
#
# When using NetworkManager you may define a timeout to wait for NetworkManager
# to connect. Other network services may require the system to have a valid
# network setup in order to succeed.
#
# This variable has no effect if NETWORKMANAGER=no
#
NM_ONLINE_TIMEOUT="0"
## Type: string
## Default: "dns-resolver dns-bind ntp-runtime nis"
#
# This variable defines the start order of netconfig modules installed
# in the /etc/netconfig.d/ directory.
#
# To disable the execution of a module, don't remove it from the list
# but prepend it with a minus sign, "-ntp-runtime".
#
NETCONFIG_MODULES_ORDER="dns-resolver dns-bind dns-dnsmasq nis ntp-runtime"
## Type: string
## Default: "auto"
#
# Defines the DNS merge policy as documented in netconfig(8) manual page.
# Set to "" to disable DNS configuration.
#
NETCONFIG_DNS_POLICY="auto"
## Type: string
## Default: "resolver"
#
# Defines the name of the DNS forwarder that has to be configured.
#
NETCONFIG_DNS_FORWARDER="resolver"
## Type: string
## Default: ""
#
# List of DNS domain names used for host-name lookup.
#
NETCONFIG_DNS_STATIC_SEARCHLIST=""
## Type: string
## Default: ""
#
# List of DNS nameserver IP addresses to use for host-name lookup.
#
NETCONFIG_DNS_STATIC_SERVERS=""
## Type: string
## Default: "auto"
#
# Defines the NTP merge policy as documented in netconfig(8) manual page.
# Set to "" to disable NTP configuration.
#
NETCONFIG_NTP_POLICY="auto"
## Type: string
## Default: ""
#
# List of NTP servers.
#
NETCONFIG_NTP_STATIC_SERVERS=""
## Type: string
## Default: "auto"
#
# Defines the NIS merge policy as documented in netconfig(8) manual page.
# Set to "" to disable NIS configuration.
#
NETCONFIG_NIS_POLICY="auto"
## Type: string
## Default: "yes"
#
# Defines whether to set the default NIS domain. When enabled and no domain
# is provided dynamically or in static settings, /etc/defaultdomain is used.
# Valid values are:
# - "no" or "" netconfig does not set the domainname
# - "yes" netconfig sets the domainname according to the
# NIS policy using settings provided by the first
# iterface and service that provided it.
# - "<interface name>" as yes, but only using settings from interface.
#
NETCONFIG_NIS_SETDOMAINNAME="yes"
## Type: string
## Default: ""
#
# Defines a default NIS domain.
#
# Further domain can be specified by adding a "_<number>" suffix to
# the NETCONFIG_NIS_STATIC_DOMAIN and NETCONFIG_NIS_STATIC_SERVERS
# variables, e.g.: NETCONFIG_NIS_STATIC_DOMAIN_1="second".
#
NETCONFIG_NIS_STATIC_DOMAIN=""
## Type: string
## Default: ""
#
# Defines a list of NIS servers for the default NIS domain or the
# domain specified with same "_<number>" suffix.
#
NETCONFIG_NIS_STATIC_SERVERS=""
DHCLIENT_DEBUG="no"
DHCLIENT_SET_HOSTNAME="yes"
DHCLIENT_MODIFY_RESOLV_CONF="yes"
DHCLIENT_SET_DEFAULT_ROUTE="yes"
DHCLIENT_MODIFY_NTP_CONF="no"
DHCLIENT_MODIFY_NIS_CONF="no"
DHCLIENT_SET_DOMAINNAME="no"
DHCLIENT_KEEP_SEARCHLIST="no"
DHCLIENT_LEASE_TIME=""
DHCLIENT_TIMEOUT="999999"
DHCLIENT_REBOOT_TIMEOUT=""
DHCLIENT_HOSTNAME_OPTION="AUTO"
DHCLIENT_CLIENT_ID=""
DHCLIENT_VENDOR_CLASS_ID=""
DHCLIENT_RELEASE_BEFORE_QUIT="no"
DHCLIENT_SCRIPT_EXE=""
DHCLIENT_ADDITIONAL_OPTIONS=""
DHCLIENT_SLEEP="0"
DHCLIENT_WAIT_AT_BOOT="15"
DHCLIENT_UDP_CHECKSUM="no"
DHCLIENT_MODIFY_SMB_CONF="yes"
## This is a template for a network interface configuration file used with ifup.
## See 'man 8 ifup' for details.
## Additionally to the following variables you can set every variable from the
## interface independent configurations files (config, dhcp, wireless) also in
## the interface configuration file to overwrite the global settings.
## Type: list(auto,hotplug,ifplugd,nfsroot,manual,off,onboot)
## Default: auto
#
# STARTMODE tells ifup when a interface should be set up. Possible values are:
# - auto: start it as soon as the interface is available. Either when booting
# or when a device is plugged or initialized at runtime
# - hotplug: alias for auto, only difference is that configurations with that
# startmode are not considered to be mandatory if list of mandatory
# devices is derived automatically.
# - ifplugd: interface will be controlled by ifplugd daemon. (If you like to use
# multiple interfaces mutually exclusive you have to set also
# IFPLUGD_PRIORITY.)
# - nfsroot: Nearly like 'auto'. But interfaces with this startmode will never
# be shut down via 'rcnetwork stop'. 'ifdown <iface>' still works.
# Use this when you have a nfs root filesystem.
# - manual: start it only when ifup is called manually
# - off: will not be started at all
# - onboot: alias for auto, deprecated, only for backward compliance
STARTMODE=auto
## Type: integer(0:100)
## Default: 0
#
# All interfaces with STARTMODE=ifplugd and with IFPLUGD_PRIORITY != 0 will be
# used mutually exclusive. If more then one of these interfaces is 'plugged'
# then we need a way to decide which interface to take up. Therefore we have to
# set the priority of each interface.
# Note: Connection detection of wireless devices is not very reliable.
# Therefore we currently simple consider a wlan interface as always connected.
# With a lower priority as all other interfaces it will then be set up if no
# other connection is established.
# A value of 0 means no priority set.
#
IFPLUGD_PRIORITY=
## Type: list(static,dhcp,autoip,dhcp+autoip,6to4)
## Default: static
#
# With BOOTPROTO you can choose in which mode the interface will be set up:
# - static: Set up static address(es)
# - dhcp: Start a dhcp client on that interface.
# - autoip: Automatic search for a free address and assign it statically.
# - dhcp+autoip: Try dhcp and use autoip if dhcp fails.
# - 6to4: Set up ipv6 over ipv4 tunnel (see man ifcfg-tunnel)
# If you use dhcp or autoip you may additionally specify static address(es).
#
BOOTPROTO=dhcp
## Type: string
## Default: ""
#
# If using a static configuration you have to set an IP address and a netmask
# or prefix length. The following examples are equivalent:
# 1) IPADDR=192.168.1.1
# NETMASK=255.255.255.0
# 2) IPADDR=192.168.1.1
# PREFIXLEN=24 # NETMASK will be ignored
# 3) IPADDR=192.168.1.1/24 # NETMASK and PREFIXLEN will be ignored
#
# For multiple addresses use this variable multiple times and extend them with
# different suffixes. For example IPADDR_1=, IPADDR_2=. See section 'Multiple
# addresses' in manpage ifcfg).
#
IPADDR=
## Type: string
## Default: ""
#
# Set the network mask for the ip address. This variable will be ignored if a
# prefixlength is set in variable PREFIXLEN in IPADDR.
# For multiple addresses use the same suffixes as with IPADDR.
#
NETMASK=
## Type: integer(0,64)
## Default: ""
#
# Set the prefixlength of the ip address. This variable will be ignored if a
# prefixlength is set in variable IPADDR.
# For multiple addresses use the same suffixes as with IPADDR.
#
PREFIXLEN=
## Type: string
## Default: ""
#
# Set the broadcast address of the interface. If you leave it empty a default
# will be used. See DEFAULT_BROADCAST in /etc/sysconfig/network/config.
# For multiple addresses use the same suffixes as with IPADDR.
#
BROADCAST=
## Type: string
## Default: ""
#
# If you'd like to set up a point to point connection you may specify the
# remote IP here.
# For multiple addresses use the same suffixes as with IPADDR.
#
REMOTE_IPADDR=
## Type: string
## Default: ""
#
# Set a label for the interface. This may be neccessary if you still use
# ifconfig and configured multiple addresses. (See manpage ifcfg).
# For multiple addresses use the same suffixes as with IPADDR.
#
LABEL=
## Type: string
## Default: ""
#
# Set the scope of the area where this address is valid.
# See manpage ip for details.
# For multiple addresses use the same suffixes as with IPADDR.
#
SCOPE=
## Type: string
## Default: ""
#
# Every other option from "ip address add" can be added here.
# See manpage ip for details.
# For multiple addresses use the same suffixes as with IPADDR.
#
IP_OPTIONS=
## Type: string
## Default: ""
#
# Set the interface type if ifup cannot determine it properly. This may be
# needed if you use unusual interface names for special interfaces like
# modems.
#
INTERFACETYPE=
## Type: integer
## Default: ""
#
# Set a specific Maximum Transmission Unit (MTU) for this interface.
#
MTU=
## Type: string
## Default: ""
#
# Set a specific link level address (LLADDR), a.k.a. MAC address or hardware
# address, for this interface (if the driver supports it).
#
LLADDR=
## Type: string
## Default: ""
#
# Every other option from "ip link set" can be added here.
# Example:
# LINK_OPTIONS="multicast off"
# See manpage ip for details.
#
LINK_OPTIONS=
## Type: string
## Default: ""
#
# If this variable is not empty ifup will call ethtool with this options.
# See the ethtool (8) manual page for available options.
# If the option string starts with a '-' (e.g. '-K iface rx on'), then the
# second word in the string will be replaced with the current interface name.
# Otherwise (e.g. 'autoneg off speed 10') ifup prepends '-s <interface>'.
#
ETHTOOL_OPTIONS=
## Type: yesno
## Default: yes
#
# This options defines whether the script /etc/ppp/poll.tcpip is run after
# connecting to the internet via a dialup connection or not. The script
# itself calls various jobs like fetchmail, fetchnews and sendmail.
#
RUN_POLL_TCPIP=
## Type: yesno
## Default: no
#
# If an interface may be controlled from a user via kinternet or cinternet
# you have to set this variable to yes.
#
USERCONTROL=
## Type: string
## Default: ""
#
# This string is used as description of the device in YaST.
# This variable is not used in ifup and friends.
#
NAME=
## Type: string
## Default: ""
#
# Internal variable for YaST. Don't change it.
# This variable is not used in ifup and friends.
#
UNIQUE=
## Type: string
## Default: ""
#
# Internal variable for YaST. Don't change it.
# This variable is not used in ifup and friends.
#
_nm_name=
## Type: yesno
## Default: no
#
# If you want the interface to be ignored by NetworkManager and therefore
# control the interface manually with ifup/down you can set this variable
# to 'no'. This variable is ignored if the network is not controlled by
# NetworkManager.
#
NM_CONTROLLED=no
##########################################################################
### FIXME:
### From here one up to 'bridge settings' the file is not up to date
## Multiple addresses
## You can extend the variable name 'IPADDR' by any string you like (IPADDR_1,
## IPADDR_FOO, IPADDRxxx, ...) and use these variables for your IP addresses.
## If you need some additional parameters for these addresses, then just add
## the same extension to these variable names.
## IPADDR_AAA=1.2.3.4
## NETMASK_AAA=255.0.0.0
## BROADCAST_AAA=1.2.3.55
## IPADDR_BBB=10.10.2.3/16
## LABEL_BBB=BBB
## an so on ...
##
## You do not need to set a label for any address. But then you should not use
## ifconfig any longer; go and use ip. If you want to use ifconfig then omit the
## label for your main address and set a label for every additional address.
## Routing:
## If you need special routes for a configuration, then use a file named
## ifroute-<config> where <config> is the same string as in ifcfg-<config>.
## It has the same syntax like routes except one difference:
## If you omit the interface name (4th field) in the ifroute file it will be
## set to the current interface name when setting up the interface. You need to
## do this with hotpluggable devices, where you do not know which interface name
## they will get at the time when you plug them.
## See man 5 routes.
##########################################################################
## DHCP settings
## Type: list("",yes,no)
## Default: ""
#
# Multiple DHCP clients:
#
# With two or more DHCP clients running, they would concurrently try to replace
# the default route or rewrite resolv.conf, rewrite ntp.conf etc. There are two
# ways of dealing with this conflict (and it is a conflict, because you can
# have only one default route even though routes are stackable, and there can
# only be one resolv.conf file):
#
# 1) allow both clients to do that stuff. This would work in many cases if
# only one of the interfaces is used at a time. However, it would lead to
# undefined behaviour.
#
# 2) allow only one of the DHCP clients to do that stuff. This implies
# that there would be a "primary" interface and a "secondary". This is the
# assumption the default configuration is based on. But since the system
# can't guess which interface is "more important" and should have the
# default route and resolver configuration associated with it, it simply
# chooses the first interface that is started with DHCP to be
# "authoritative". Which one that is can be influenced by adding
# DHCLIENT_PRIMARY_DEVICE=yes to one of the /etc/sysconfig/network/ifcfg-*
# files. This can even be added to more than one file, to achieve the
# behaviour described in 1). Thus, there is the flexibility to do it
# either way.
#
# Per default, only the DHCP client that is started first will be allowed to
# change the default route / resolver configuration etc. All other running
# clients will only configure the interface with an address, but not change
# "global" configuration.
#
# Thus, to specifically allow an interface's DHCP client to change "global"
# configuration, set the following variable to "yes". Or you can make an
# interface's DHCP client never change these settings if you set it to "no".
# If you leave it empty then ifup-dhcp will decide.
#
DHCLIENT_PRIMARY_DEVICE=
## Type:
## Default:
#
# Even more finegrained control can be excerted by setting any of the variables
# from /etc/sysconfig/network/dhcp here:
#DHCLIENT_DEBUG=
#DHCLIENT_SET_HOSTNAME=
#DHCLIENT_SET_DEFAULT_ROUTE=
#DHCLIENT_TIMEOUT=
#DHCLIENT_REBOOT_TIMEOUT=
#DHCLIENT_CLIENT_ID=
#DHCLIENT_HOSTNAME_OPTION=
#DHCLIENT_VENDOR_CLASS_ID=
#DHCLIENT_LEASE_TIME=
##########################################################################
## bridge settings. See ifcfg-bridge(5) and brctl(8) for mor information
##
## Type: yesno
## Default: yes
#
# This option must be set to 'yes' to identify this interface as a bridge
# interface.
#
BRIDGE='yes'
## Type: string
## Default:
#
# This variable contains a space-separated list of N interfaces which take part
# in the bridging.
#
BRIDGE_PORTS=''
## Type: integer(0:)
## Default:
#
# This option sets the ethernet address ageing time, in seconds. After <time>
# seconds of not having seen a frame coming from a certain address, the bridge
# will delete that address from the forwarding database. Setting ageing time
# to zero makes all entries permanent.
#
BRIDGE_AGEINGTIME=''
## Type: integer(0:)
## Default:
#
# Forwarding delay time is the time in seconds spent in each of the listening
# and learning states before the forwarding state is entered. This delay is
# so that when a new bridge comes onto a busy network it looks at some traffic
# before participating.
#
BRIDGE_FORWARDDELAY=''
## Type: integer(0:)
## Default:
#
# Periodically, a hello packet is sent out by the root bridge and the designated
# bridges. Hello packets are used to communicate information about the topology
# throughout the entire bridged local area network.
#
BRIDGE_HELLOTIME=''
## Type: integer(0:)
## Default:
#
# If a another bridge in the spanning tree does not send out a hello packet for
# a long period of time, it is assumed to be dead. This timeout can be set with
# this variable.
#
BRIDGE_MAXAGE=''
## Type: string
## Default:
#
# This is a space-separated list of costs corresponding to the interfaces in
# BRIDGE_PORTS. Each interface in BRIDGE_PORTS could have a different speed
# and this value is used when deciding which link to use. Faster interfaces
# should have lower costs.
#
BRIDGE_PATHCOSTS=''
## Type: string
## Default:
#
# This is a space-separated list of priorities corresponding to the interfaces
# in BRIDGE_PORTS. The priority value is an unsigned 8-bit quantity (a number
# between 0 and 255), and has no dimension. This metric is used in the
# designated port and root port selection algorithms.
#
BRIDGE_PORTPRIORITIES=''
## Type: integer(0:65535)
## Default:
#
# This option sets the bridge's priority. The priority value is an unsigned
# 16-bit quantity (a number between 0 and 65535), and has no dimension. Lower
# priority values are 'better'. The bridge with the lowest priority will be
# elected 'root bridge'.
#
BRIDGE_PRIORITY=''
## Type: list(on,off)
## Default: off
#
# Multiple ethernet bridges can work together to create even larger networks
# of ethernets using the IEEE 802.1d spanning tree protocol. This protocol
# is used for finding the shortest path between two ethernets, and for
# eliminating loops from the topology.
#
# The spanning tree protocol can also be turned off (for those situations
# where it just doesn't make sense, for example when this linux box is
# the only bridge on the LAN, or when you know that there are no loops in
# the topology.)
#
BRIDGE_STP=''
## Type: yesno
## Default: ""
#
# Defines whether this interface is wireless or not. This variable is usually
# not set, WLAN capabilities get auto-detected in this case. As the WIRELESS
# variable is device speficic and not network specific, it can have no suffix.
WIRELESS=''
## Type: string
## Default: "managed"
#
# Set the operating mode of the device, which depends on the network topology.
# Set to ad-hoc for network composed of only one cell and without Access
# Point, managed for network composed of many cells, with roaming or with an
# Access Point, master if you want your system act as an Access Point or
# synchronisation master. If unset, managed will be used.
WIRELESS_MODE=''
## Type: string
## Default: ""
#
# Set the SSID/ESSID (or Network Name - in some products it may also called
# Domain ID). The ESSID is used to identify cells which are part of the same
# virtual network. If emtpy or set to any the node will connect to the
# Access Point with the best signal strength around (in managed operating
# mode). For WLANs that make use of WPA (see WIRELESS_AUTH_MODE below)
# you need to set your ESSID.
WIRELESS_ESSID=''
## Type: list(open,sharedkey,psk,eap)
## Default: open
#
# Sets authentication mode. The mode depends on the protection technology
# beeing used, WEP or WPA. WEP (Wired Equivalent Privacy) is a system to
# encrypt wireless network traffic, with an optional authentication on the
# basis of the used encryption key. In most cases where WEP is used, open
# mode (no authentication at all) is fine. This does not mean that you can
# not use WEP encryption. Some networks may require sharedkey authentication.
# NOTE: Shared key authentication makes it easier for a potential attacker to
# break into your network. Unless you have specific needs for shared key
# authentication, use the open mode. As WEP has been proved insecure, WPA
# (Wi-Fi Protected Access) was defined to close its security wholes, but not
# every hardware supports WPA. In case you want to use WPA-PSK (WPA preshared
# key authentication, aka WPA "Home"), set this to psk. In case you want
# to use WPA-EAP (WPA with Extensible Authentication Protocol, aka WPA
# "Enterprise"), set this to eap. WPA authentication modes are only
# possible when WIRELESS_MODE is set to managed.
WIRELESS_AUTH_MODE=''
## Type: string
## Default: ""
#
# When using WPA-PSK authentication, you need to specify your preshared key
# here. The key is used for authentication and encryption purposes. You can
# enter it in hex digits (needs to be exactly 64 digits long) or as passphrase
# getting hashed (8 to 63 ASCII characters long).
WIRELESS_WPA_PSK=''
## Type: string
## Default: ""
#
# WPA-EAP can use different authentication modes. Supported
# values are TLS, PEAP, and TTLS. Default is to allow any.
# When using WIRELESS_AP_SCANMODE 2, this variable needs to be set.
WIRELESS_EAP_AUTH=''
## Type: string
## Default: ""
#
# Using this variable you can specify the WPA protocol to be used.
# Valid values are WPA and RSN (aka WPA2, can be also used as synonym).
# Default is to allow both. When using WIRELESS_AP_SCANMODE 2, this
# variable needs to be set, otherwise WPA will be used as fallback.
WIRELESS_WPA_PROTO=''
## Type: string
## Default: ""
#
# Needs to be set in conjunction with WPA-EAP. Set to your identity as
# configured on the RADIUS server.
WIRELESS_WPA_IDENTITY=''
## Type: string
## Default: ""
#
# Needs to be set in conjunction with WPA-EAP. Set to your password as
# configured on the RADIUS server.
WIRELESS_WPA_PASSWORD=''
## Type: string
## Default: "anonymous"
#
# Sets anonymous identity. Default is "anonymous". The anonymous identity is
# used with WPA-EAP protocols that support different tunnelled identities
# (e.g., TTLS).
WIRELESS_WPA_ANONID=''
## Type: string
## Default: ""
# Used with WPA-EAP. If you want to check the RADIUS server's authenticity,
# which is highly recommended, you need specify the certificate of the
# CA (Certification Authority) which signed the server's certificate.
# Point this variable to the certificate file including full path.
WIRELESS_CA_CERT=''
## Type: string
## Default: ""
#
# Used with WPA-EAP. If you are using TLS as authentication protocol you need
# to authenticate yourself through a client certificate. Point this variable
# to the certificate file including full path.
WIRELESS_CLIENT_CERT=''
## Type: string
## Default: ""
#
# Used with WPA-EAP. Authentication mode TLS uses a public/private key method
# to encrypt negotiation data. Point this variable to the file containing your
# client private key including full path.
WIRELESS_CLIENT_KEY=''
## Type: string
## Default: ""
#
# Used with WPA-EAP. Set to the passphrase of your client private key file.
WIRELESS_CLIENT_KEY_PASSWORD=''
## Type: yesno
## Default: yes
#
# Defines whether hidden SSID scan support should be enabled. Setting this to
# "no" can speed up scanning and makes the usage of WIRELESS_PRIORITY
# possible. This is only used in conjunction with wpa_supplicant.
WIRELESS_HIDDEN_SSID=''
## Type: integer
## Default: ""
#
# This variable only makes sense used in conjunction with multiple
# networks. If you want to prefer one configured network for over another, set
# the respecitve WIRELESS_PRIORITY variable (means, with the same suffix) to a
# higher value (integer only). NOTE: This does not work for networks that are
# configured with WIRELESS_HIDDEN_SSID="yes" (which is default). For networks
# with hidden SSID scanning support the suffix number is important. The
# network with the lowest suffix number gets probed first.
WIRELESS_PRIORITY=''
## Type: list(0,1,2)
## Default: 1
#
# Defines which SSID scan mode should be used. Mode 0 means the driver
# performs the scan. Mode 1 means wpa_supplicant takes care of scanning. Mode
# 2 is basically the same as mode 0 but the access point gets chosen by
# security policy and SSID. This mode does not support multiple network
# settings. Default is "1" for most drivers. Try "0" or "2" if you have
# problems associating to your access point. This variable can have no
# suffix. This is only used in conjuntion with wpa_supplicant.
WIRELESS_AP_SCANMODE=''
## Type: string
## Default: ""
#
# If have configured a WPA mode in WIRELESS_AUTH_MODE you can use this
# variable to supply a custom wpa_supplicant.conf that will be used instead of
# the one ifup would generate. The file has to be specified with full path. Of
# course you can setup any configuration suitable for wpa_supplicant with
# this, not only WPA modes. This variable can have no suffix. If you want to
# have multiple network support, you need to create a wpa_supplicant.conf with
# mulitle network sections (see wpa_supplicant documentation).
WIRELESS_WPA_CONF=''
## Type: yesno
## Default: yes
#
# If you configured only one wireless network and are not using WPA, the
# device can be set up without using wpa_supplicant, although it would be
# possible to use it. This variable defines whether wpa_supplicant should be
# used in that case.
PREFER_WPA_SUPPLICANT=''
## Type: string
## Default: ""
#
# In environments with multiple Access points you may want to define the one
# to connect to by entering its MAC address. Format is 6x2 hex digits,
# seperated by colons, eg 01:02:03:04:05:06.
# See also the iwconfig ap option description in the iwconfig(8) manual page.
#
# Note, that some drivers (mac80211 based) may require to set this variable
# to a specific access point address, 'any' or 'off' to start scanning for
# an appropriate cell, so ifup-wireless sets it to 'any' in Managed and
# Ad-Hoc modes when the variable is empty.
WIRELESS_AP=''
## Type: yesno
## Default: no
#
# If set to yes, ifup tries to enable power saving for this device. This is
# not supported by all cards resp. drivers.
WIRELESS_POWER=''
## Type: string
## Default: ""
# Set the nickname, or the station name. Most 802.11 products do define it,
# but this is not used as far as the protocols (MAC, IP, TCP) are concerned
# and completely accessory as far as configuration goes. If this variable is
# empty the hostname will be used as nick.
WIRELESS_NICK=''
## Type: string
## Default: ""
#
# Set the Network ID (in some products it is also called Domain ID). As all
# adjacent wireless networks share the same medium, this parameter is used to
# differenciate them (create logical colocated networks) and identify nodes
# belonging to the same cell.
WIRELESS_NWID=''
## Type: string
## Default: ""
#
# With this variable you can define the channel being used. This is only
# applicable to ad-hoc and master operating modes. Channels are usually
# numbered starting at 1, and you may use iwpriv(8) to get the total number of
# channels and list the available frequencies. Depending on regulations, some
# frequencies/channels may not be available.
WIRELESS_CHANNEL=''
## Type: integer
## Default: ""
#
# Set the sensitivity threshold. This is the lowest signal level for which we
# attempt a packet reception, signal lower than this are not received. This
# is used to avoid receiving background noise.
WIRELESS_SENS=''
## Type: string
## Default: "auto"
#
# Usually the highest bitrate available gets used. If you have specific needs
# to set a bitrate, you can do it here (rates are in Mbit/s). Bitrates above
# 11 are only available for cards compliant to 802.11a or 802.11g standards.
WIRELESS_RATE=''
## Type: string
## Default: ""
#
# You can define up to 4 WEP encryption keys. You can use WEP with open and
# sharedkey authentication. The key can be entered in different formats:
# Either directly in hex digits, with or without dashes, or in the key's ASCII
# representation (prefix s: ), or as a passphrase which will be hashed (prefix
# h: ). The amount of hex digits resp. length of the ASCII key depends on the
# key size being used: 10 hex digits or 5 ASCII characters for 64 bit keys, 26
# hex digits or 6 to 13 ASCII characters for 128 bit keys (see
# WIRELESS_KEY_LENGTH below). Examples:
#
# WIRELESS_KEY_0="0123-4567-89"
# WIRELESS_KEY_0-"s:hello"
# WIRELESS_KEY_0="h:mysecretphrase"
#
# You can also use 1, 2, or 3 as suffix for multiple key settings. This
# is usually not necessary. Leave empty if you do not want WEP.
WIRELESS_KEY=''
## Type: list(40,104)
## Default: 104
#
# Defines the length in bits for all keys used. There are currently 40 and 104
# bit keys supported. Sometimes they are also called 64 resp. 128 bits
# (depends on whether you count the 24 bit initialization vetor or not).
# This variable is only meaningful if you enter the key as passphrase.
WIRELESS_KEY_LENGTH=''
## Type: list(0,1,2,3)
## Default: 0
# Sets the default WEP key. The default key is used to encrypt outgoing
# packets, incoming ones are decrypted with the key number specified in the
# packet. This defaults to 0.
WIRELESS_DEFAULT_KEY=''
## Type: string
## Default: "off"
#
# RTS/CTS adds a handshake before each packet transmission to make sure that
# the channel is clear. This adds overhead, but increase performance in case
# of hidden nodes or large number of active nodes. Possible values: any
# integer (representing the size of the smallest packet for which the node
# sends RTS), auto, fixed, or off.
WIRELESS_RTS=''
## Type: string
## Default: "off"
#
# Fragmentation allow to split a IP packet in a burst of smaller fragments
# transmitted on the medium. In most cases this adds overhead, but in very
# noisy environment this reduce the error penalty. Possible values: any
# integer (representing the maximum fragment size), auto, fixed, or off.
WIRELESS_FRAG=''
## Type: string
## Default: ""
#
# If you need other options for iwconfig, then write the complete option string
# as you would append it to iwconfig but without the interface name to the
# variables below. For multiple options you may (but need not) add linebreaks in
# the string.
WIRELESS_IWCONFIG_OPTIONS=''
## Type: string
## Default: ""
#
# If you need to set options for iwspy, then write the complete option string as
# you would append it to iwspy but without the interface name to the variables
# below. For multiple options you may (but need not) add linebreaks in the
# string.
WIRELESS_IWSPY_OPTIONS=''
## Type: string
## Default: ''
#
# If you need to set options for iwpriv then write the complete option string as
# you would append it to iwpriv but without the interface name to the variables
# below. For multiple options you may (but need not) add linebreaks in the
# string.
WIRELESS_IWPRIV_OPTIONS=''
## Type: string
## Default: ''
#
## Type: string
## Default: ''
#
# WPA modes support two different encryption systems, TKIP and
# CCMP. This variable defines which to use for unicast communication.
# Default is to allow both. In case you want to restrict it to one
# protocol, set this variable. When using WIRELESS_AP_SCANMODE 2, this
# variable needs to be set, otherwise TKIP will be used as fallback.
WIRELESS_CIPHER_PAIRWISE=''
## Type: string
## Default: ''
#
# WPA modes support two different encryption systems, TKIP and
# CCMP. This variable defines which to use for broad-/multicast
# communication. Default is to allow both. In case you want to
# restrict it to one protocol, set this variable. When using
# WIRELESS_AP_SCANMODE 2, this variable needs to be set, otherwise
# TKIP will be used as fallback.
WIRELESS_CIPHER_GROUP=''
## Type: string
## Default: ''
#
# When using WPA-EAP with PEAP authentication, you can use
# this variable to force which PEAP version (0 or 1) to be used.
# Default is to allow both.
WIRELESS_PEAP_VERSION=''
## Path: Desktop/Window manager
## Description:
## Type: string(gnome,startkde,startkde3,startxfce4,twm)
## Default: kde
## Config: profiles,kde,susewm
#
# Here you can set the default window manager (kde, fvwm, ...)
# changes here require at least a re-login
DEFAULT_WM="icewm"
## Type: yesno
## Default: yes
#
# install the SuSE extension for new users
# (theme and additional functions)
#
INSTALL_DESKTOP_EXTENSIONS="yes"
## Type: string
## Default:
## Path: Desktop
## Description: default mouse cursor theme
#
# Name of mouse cursor theme for X11. Possible themes can be found
# in /usr/share/icons/
#
X_MOUSE_CURSOR="DMZ"
SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="* QEMU USB Tablet", SYMLINK+="input/qemu_tablet"
[openSUSE_11.3_OSS]
name=openSUSE_11.3_OSS
baseurl=http://download.opensuse.org/distribution/11.3/repo/oss
type=yast2
enabled=1
autorefresh=1
gpgcheck=1
[openSUSE_11.3_Updates]
name=openSUSE_11.3_Updates
baseurl=http://download.opensuse.org/update/11.3
type=rpm-md
enabled=1
autorefresh=1
gpgcheck=1
#================
# FILE : KIWIConfig.sh
#----------------
# PROJECT : OpenSUSE Build-Service
# COPYRIGHT : (c) 2006 SUSE LINUX Products GmbH, Germany
# :
# AUTHOR : Marcus Schaefer <ms@suse.de>
# :
# BELONGS TO : Operating System images
# :
# DESCRIPTION : This module contains common used functions
# : for the config.sh image scripts
# :
# :
# STATUS : Development
#----------------
#======================================
# suseInsertService
#--------------------------------------
function suseInsertService {
# /.../
# Recursively insert a service. If there is a service
# required for this service it will be inserted first
# -----
local service=$1
local result
while true;do
result=`/sbin/insserv $service 2>&1`
if [ $? = 0 ];then
echo "Service $service inserted"
break
else
result=`echo $result | head -n 1 | cut -f3 -d " "`
if [ -f /etc/init.d/$result ];then
suseInsertService /etc/init.d/$result
else
echo "$service: required service: $result not found...skipped"
break
fi
fi
done
}
#======================================
# suseRemoveService
#--------------------------------------
function suseRemoveService {
# /.../
# Remove a service and its dependant services
# using insserv -r
# ----
local service=/etc/init.d/$1
while true;do
/sbin/insserv -r $service &>/dev/null
if [ $? = 0 ];then
echo "Service $service removed"
break
else
result=`/sbin/insserv -r $service 2>&1|tail -n 2|cut -f10 -d " "`
if [ -f /etc/init.d/$result ];then
suseRemoveService $result
else
echo "$service: $result not found...skipped"
break
fi
fi
done
}
#======================================
# suseActivateServices
#--------------------------------------
function suseActivateServices {
# /.../
# Check all services in /etc/init.d/ and activate them
# by calling insertService
# -----
for i in /etc/init.d/*;do
if [ -x $i ] && [ -f $i ];then
echo $i | grep -q skel
if [ $? = 0 ];then
continue
fi
suseInsertService $i
fi
done
}
#======================================
# suseActivateDefaultServices
#--------------------------------------
function suseActivateDefaultServices {
# /.../
# Call all postin scriptlets which among other things activates
# all default services required using insserv
# -----
local ifss=$IFS
local file=kiwi-services.default
local name=""
local name1=$name
local name2=$name
rm -f $file
for p in `rpm -qa --qf "%{NAME}\n"`;do
rpm -q --qf \
"%|POSTIN?{%|POSTINPROG?{}|%{POSTIN}\n}:{%|POSTINPROG?{}|}|" \
$p > $p.sh
if [ -s "$p.sh" ];then
echo "Calling post script $p.sh"
bash $p.sh 2>&1
cat $p.sh | sed -e s@\$SCRIPTNAME@$p@g | grep insserv >> $file
fi
rm -f $p.sh
done
IFS="
"
for i in \
`cat $file | grep -v ^.*# | cut -f2- -d"/" | grep ^insserv`
do
name=`echo $i | cut -f2 -d. | cut -f2 -d/`
if echo $name | grep -q insserv; then
name1=`echo $name | cut -f2 -d" "`
name2=`echo $name | cut -f3 -d" "`
if [ ! -z $name1 ];then
name=$name1
fi
if [ ! -z $name2 ];then
name=$name2
fi
else
name=`echo $name | tr -d " "`
fi
if [ -f /etc/init.d/$name ];then
echo $name >> kiwi-services.tmp
fi
done
for i in `cat kiwi-services.tmp | sort | uniq`;do
suseInsertService $i
done
rm -f kiwi-services.tmp
rm -f $file
IFS=$ifss
}
#======================================
# suseService
#--------------------------------------
function suseService {
# /.../
# if a service exist then enable or disable it using chkconfig
# example : suseService apache2 on
# example : suseService apache2 off
# ----
local service=$1
local action=$2
if [ -x /etc/init.d/$i ] && [ -f /etc/init.d/$service ];then
if [ $action = on ];then
/sbin/chkconfig $service on
elif [ $action = off ];then
/sbin/chkconfig $service off
fi
fi
}
#======================================
# suseServiceDefaultOn
#--------------------------------------
function suseServiceDefaultOn {
# /.../
# Some basic services that needs to be on.
# ----
services=(
boot.rootfsck
boot.cleanup
boot.localfs
boot.localnet
boot.clock
policykitd
dbus
consolekit
haldaemon
network
atd
syslog
cron
)
for i in "${services[@]}";do
if [ -x /etc/init.d/$i ] && [ -f /etc/init.d/$i ];then
/sbin/chkconfig $i on
fi
done
}
#======================================
# baseSetupUserPermissions
#--------------------------------------
function baseSetupUserPermissions {
while read line in;do
dir=`echo $line | cut -f6 -d:`
uid=`echo $line | cut -f3 -d:`
usern=`echo $line | cut -f1 -d:`
group=`echo $line | cut -f4 -d:`
if [ -d "$dir" ] && [ $uid -gt 200 ] && [ $usern != "nobody" ];then
group=`cat /etc/group | grep "$group" | cut -f1 -d:`
chown -c -R $usern:$group $dir/*
fi
done < /etc/passwd
}
#======================================
# baseSetupBoot
#--------------------------------------
function baseSetupBoot {
if [ -f /linuxrc ];then
cp linuxrc init
exit 0
fi
}
#======================================
# suseConfig
#--------------------------------------
function suseConfig {
#======================================
# keytable
#--------------------------------------
if [ ! -z "$keytable" ];then
cat etc/sysconfig/keyboard |\
sed -e s"@KEYTABLE=\".*\"@KEYTABLE=\"$keytable\"@" \
> etc/sysconfig/keyboard.new
mv etc/sysconfig/keyboard.new etc/sysconfig/keyboard
fi
#======================================
# locale
#--------------------------------------
if [ ! -z "$language" ];then
cat /etc/sysconfig/language |\
sed -e s"@RC_LANG=\".*\"@RC_LANG=\"$language\"@" \
> etc/sysconfig/language.new
mv etc/sysconfig/language.new etc/sysconfig/language
fi
#======================================
# timezone
#--------------------------------------
if [ ! -z "$timezone" ];then
if [ -f /usr/share/zoneinfo/$timezone ];then
mv /usr/share/zoneinfo/$timezone /etc/localtime
else
echo "timezone: $timezone not found"
fi
fi
#======================================
# SuSEconfig
#--------------------------------------
/sbin/SuSEconfig
}
#======================================
# baseGetPackagesForDeletion
#--------------------------------------
function baseGetPackagesForDeletion {
echo $delete
}
#======================================
# baseGetProfilesUsed
#--------------------------------------
function baseGetProfilesUsed {
echo $profiles
}
#======================================
# baseCleanMount
#--------------------------------------
function baseCleanMount {
umount /proc/sys/fs/binfmt_misc
umount /proc
umount /dev/pts
umount /sys
}
#======================================
# stripLocales
#--------------------------------------
function baseStripLocales {
local imageLocales="$@"
local directories="
/opt/gnome/share/locale
/usr/share/locale
/opt/kde3/share/locale
/usr/lib/locale
"
for dir in $directories; do
locales=`find $dir -type d -maxdepth 1 2>/dev/null`
for locale in $locales;do
if test $locale = $dir;then
continue
fi
local baseLocale=`/usr/bin/basename $locale`
local found="no"
for keep in $imageLocales;do
if echo $baseLocale | grep $keep;then
found="yes"
break
fi
done
if test $found = "no";then
rm -rf $locale
fi
done
done
}
#======================================
# baseStripTools
#--------------------------------------
function baseStripTools {
local tpath=$1
local tools=$2
for file in `find $tpath`;do
found=0
base=`/usr/bin/basename $file`
for need in $tools;do
if [ $base = $need ];then
found=1
break
fi
done
if [ $found = 0 ] && [ ! -d $file ];then
rm -f $file
fi
done
}
#======================================
# baseSetupInPlaceSVNRepository
#--------------------------------------
function baseSetupInPlaceSVNRepository {
# /.../
# create an in place subversion repository for the
# specified directories. A standard call could look like this
# baseSetupInPlaceSVNRepository /etc /srv /var/log
# ----
local paths=$1
local repo=/var/adm/sys-repo
if [ ! -x /usr/bin/svn ];then
echo "subversion not installed... skipped"
return
fi
svnadmin create $repo
chmod 700 $repo
svn mkdir -m created file:///$repo/trunk
local ifss=$IFS
local subp=""
for dir in $paths;do
subp=""
IFS="/"; for n in $dir;do
if [ -z $n ];then
continue
fi
subp="$subp/$n"
svn mkdir -m created file:///$repo/trunk/$subp
done
done
IFS=$ifss
for dir in $paths;do
chmod 700 $dir/.svn
svn add $dir/*
find $dir -name .svn | xargs chmod 700
svn ci -m initial $dir
done
}
#======================================
# baseSetupPlainTextGITRepository
#--------------------------------------
function baseSetupPlainTextGITRepository {
# /.../
# create an in place git repository of the root
# directory containing all plain/text files.
# ----
if [ ! -x /usr/bin/git ];then
echo "git not installed... skipped"
return
fi
pushd /
local ignore=""
#======================================
# directories to ignore
#--------------------------------------
local dirs="
/sys /dev /var/log /home /media /var/run /var/tmp /tmp /var/lock
/image /var/spool /var/cache /var/lib /boot /root /var/adm
/usr/share/doc /base-system /usr/lib /usr/lib64 /usr/bin /usr/sbin
/usr/share/man /proc /bin /sbin /lib /lib64 /.git
"
#======================================
# files to ignore
#--------------------------------------
local files="
/etc/Image* *.lock /etc/resolv.conf *.gif *.png
*.jpg *.eps *.ps
"
#======================================
# creae .gitignore and find list
#--------------------------------------
for entry in $files;do
echo $entry >> .gitignore
if [ -z "$ignore" ];then
ignore="-name $entry"
else
ignore="$ignore -or -name $entry"
fi
done
for entry in $dirs;do
echo $entry >> .gitignore
if [ -z "$ignore" ];then
ignore="-path .$entry"
else
ignore="$ignore -or -path .$entry"
fi
done
#======================================
# init git base
#--------------------------------------
git init
#======================================
# find all text/plain files except ign
#--------------------------------------
for i in `find . \( $ignore \) -prune -o -print`;do
file=`echo $i | cut -f2 -d.`
if file -i $i | grep -q "text/*";then
git add $i
fi
if file -i $i | grep -q "application/x-shellscript";then
git add $i
fi
if file -i $i | grep -q "application/x-awk";then
git add $i
fi
if file -i $i | grep -q "application/x-c";then
git add $i
fi
if file -i $i | grep -q "application/x-c++";then
git add $i
fi
if file -i $i | grep -q "application/x-not-regular-file";then
echo $file >> .gitignore
fi
if file -i $i | grep -q "application/x-gzip";then
echo $file >> .gitignore
fi
if file -i $i | grep -q "application/x-empty";then
echo $file >> .gitignore
fi
done
#======================================
# commit the git
#--------------------------------------
git commit -m "deployed"
popd
}
#======================================
# baseSetupInPlaceGITRepository
#--------------------------------------
function baseSetupInPlaceGITRepository {
# /.../
# create an in place git repository of the root
# directory. This process may take some time and you
# may expect problems with binary data handling
# ----
if [ ! -x /usr/bin/git ];then
echo "git not installed... skipped"
return
fi
pushd /
echo /proc > .gitignore
local files="
/sys /dev /var/log /home /media /var/run /etc/Image*
/var/tmp /tmp /var/lock *.lock /image /var/spool /var/cache
/var/lib /boot /root /var/adm /base-system
"
for entry in $files;do
echo $entry >> .gitignore
done
git init && git add . && \
git commit -m "deployed"
popd
}
#======================================
# baseSetupBusyBox
#--------------------------------------
function baseSetupBusyBox {
# /.../
# activates busybox if installed for all links from
# the busybox/busybox.links file - you can choose custom apps to
# be forced into busybox with the "-f" option as first parameter
# ---
# example: baseSetupBusyBox -f /bin/zcat /bin/vi
# ---
local applets=""
local force="no"
local busyboxlinks="/usr/share/busybox/busybox.links"
if ! rpm -q --quiet busybox; then
echo "Busybox not installed... skipped"
return 0;
fi
if [ $# -gt 0 ] && [ "$1" = "-f" ]; then
force="yes"
shift
fi
if [ $# -gt 0 ]; then
for i in "$@"; do
if grep -q "^$i$" "$busyboxlinks"; then
applets="${applets} $i"
fi
done
else
applets=`cat "$busyboxlinks"`
fi
for applet in $applets; do
if [ ! -f "$applet" ] || [ "$force" = "yes" ]; then
echo "Busybox Link: ln -sf /usr/bin/busybox $applet"
ln -sf /usr/bin/busybox "$applet"
fi
done
}
#======================================
# suseStripInitrd
#--------------------------------------
function suseStripInitrd {
#==========================================
# remove unneeded files
#------------------------------------------
rpm -e popt bzip2 --nodeps --noscripts &>/dev/null
rm -rf `find -type d | grep .svn`
local files="
/usr/share/info /usr/share/man /usr/share/cracklib /usr/lib*/python*
/usr/lib*/perl* /usr/share/locale* /usr/share/doc/packages /var/lib/rpm
/usr/lib*/rpm /var/lib/smart /opt/* /usr/include /root/.gnupg
/etc/PolicyKit /etc/sysconfig /etc/init.d /etc/profile.d /etc/skel
/etc/ssl /etc/java /etc/default /etc/cron* /etc/dbus*
/etc/pam.d* /etc/DIR_COLORS /etc/rc* /usr/share/hal /usr/share/ssl
/usr/lib*/hal /usr/lib*/*.a /usr/lib*/*.la /usr/lib*/librpm*
/usr/lib*/libpanel* /usr/lib*/libncursesw*
/usr/lib*/libmenu* /usr/lib*/libx* /usr/src/packages/RPMS
/usr/X11R6 /usr/lib*/X11 /var/X11R6 /usr/share/X11 /etc/X11
/usr/lib*/libX* /usr/lib*/xorg /usr/lib*/libidn*
/etc/ppp /etc/xdg /etc/NetworkManager /lib*/YaST /lib*/security
/lib*/mkinitrd /srv /var/adm /usr/lib/engines /usr/src/packages
/usr/src/linux* /usr/local /var/log/* /usr/share/pixmaps
/lib/modules/*/kernel/drivers/net/wireless
/lib/modules/*/kernel/drivers/net/pcmcia
/lib/modules/*/kernel/drivers/net/tokenring
/lib/modules/*/kernel/drivers/net/bonding
/lib/modules/*/kernel/drivers/net/hamradio
"
for i in $files;do
rm -rf $i
done
#==========================================
# remove unneeded files
#------------------------------------------
if [ -d /var/cache/zypp ];then
files="
/usr/lib*/libzypp* /lib*/libgcrypt* /lib*/libgpg*
/usr/lib*/dirmngr /usr/lib*/gnupg* /usr/lib*/gpg*
/usr/lib*/libboost* /usr/lib*/libcurl* /usr/lib*/libicu*
/usr/lib*/libksba* /usr/lib*/libpth*
/var/cache/zypp /usr/lib*/zypp* /usr/share/curl
/usr/share/emacs /usr/share/gnupg
/usr/share/zypp* /var/lib/zypp* /var/log/zypper.log
"
for i in $files;do
rm -rf $i
done
fi
#==========================================
# remove unneeded tools
#------------------------------------------
local tools="
tune2fs swapon swapoff shutdown sfdisk resize_reiserfs
reiserfsck reboot halt pivot_root modprobe modinfo rmmod
mkswap mkinitrd mkreiserfs mkfs.ext3 mkfs.ext2 mkfs.cramfs
losetup ldconfig insmod init ifconfig fdisk e2fsck dhcpcd
depmod atftpd klogconsole hwinfo xargs wc tail tac readlink
mkfifo md5sum head expr file free find env du dirname cut
column chroot atftp clear tr host test printf mount dd uname umount
true touch sleep sh pidof sed rmdir rm pwd ps mv mkdir kill hostname
gzip grep false df cp cat bash basename arch sort ls uniq lsmod
usleep parted mke2fs pvcreate vgcreate lvm resize2fs ln hdparm
dmesg splash fbmngplay portmap start-statd sm-notify
rpc.statd rpc.idmapd nbd-client mount.nfs mount.nfs4 eject
blockdev posbios ping killall killall5 udevcontrol udevd
udevsettle udevtrigger mknod stat path_id hwup scsi_id scsi_tur
usb_id ata_id vol_id edd_id setctsid dumpe2fs debugreiserfs
fuser udevadm blogd showconsole killproc curl tar
"
tools="$tools $@"
for path in /sbin /usr/sbin /usr/bin /bin;do
baseStripTools "$path" "$tools"
done
#==========================================
# remove images.sh
#------------------------------------------
rm -f /image/images.sh
}
#======================================
# suseGFXBoot
#--------------------------------------
function suseGFXBoot {
local theme=$1
local loader=$2
export PATH=$PATH:/usr/sbin
#======================================
# check for gfxboot package
#--------------------------------------
if [ ! -d /usr/share/gfxboot ];then
echo "gfxboot not installed... skipped"
return
fi
#======================================
# create boot theme
#--------------------------------------
cd /usr/share/gfxboot
# check for new source layout
local newlayout=
[ -f themes/$theme/config ] && newlayout=1
[ "$newlayout" ] || make -C themes/$theme prep
if [ ! -z "$language" ];then
local l1=`echo $language | cut -f1 -d.`
local l2=`echo $language | cut -f1 -d_`
local found=0
for lang in $l1 $l2;do
if [ -f themes/$theme/po/$lang.po ];then
echo "Found language default: $lang"
make -C themes/$theme DEFAULT_LANG=$lang
found=1
break
fi
done
if [ $found -eq 0 ];then
echo "Language $language not found, skipped"
make -C themes/$theme
fi
else
make -C themes/$theme
fi
mkdir /image/loader
local gfximage=
local grubimage=
if [ "$newlayout" ] ; then
gfximage=themes/$theme/bootlogo
grubimage=themes/$theme/message
else
gfximage=themes/$theme/install/bootlogo
grubimage=themes/$theme/boot/message
fi
if [ $loader = "isolinux" ];then
cp themes/$theme/install/* /image/loader
cp $gfximage /image/loader
bin/unpack_bootlogo /image/loader
mv /usr/share/syslinux/isolinux.bin /image/loader
mv /boot/memtest.bin /image/loader/memtest
echo "livecd=1" >> /image/loader/gfxboot.cfg
fi
if [ $loader = "grub" ];then
mv $grubimage /image/loader
fi
make -C themes/$theme clean
#======================================
# create splash screen
#--------------------------------------
if [ ! -f /sbin/splash ];then
echo "bootsplash not installed... skipped"
return
fi
sname[0]="08000600.spl"
sname[1]="10240768.spl"
sname[2]="12801024.spl"
index=0
if [ ! $theme = "SuSE" ];then
theme="SuSE-$theme"
fi
mkdir /image/loader/branding
cp /etc/bootsplash/themes/$theme/images/logo.mng /image/loader/branding
cp /etc/bootsplash/themes/$theme/images/logov.mng /image/loader/branding
for cfg in 800x600 1024x768 1280x1024;do
cp /etc/bootsplash/themes/$theme/images/bootsplash-$cfg.jpg \
/image/loader/branding
cp /etc/bootsplash/themes/$theme/config/bootsplash-$cfg.cfg \
/image/loader/branding
done
mkdir /image/loader/animations
cp /etc/bootsplash/themes/$theme/animations/* \
/image/loader/animations &>/dev/null
for cfg in 800x600 1024x768 1280x1024;do
/sbin/splash -s -c -f \
/etc/bootsplash/themes/$theme/config/bootsplash-$cfg.cfg |\
gzip -9c \
> /image/loader/${sname[$index]}
tdir=/image/loader/xxx
mkdir $tdir
cp -a --parents /etc/bootsplash/themes/$theme/config/*-$cfg.* $tdir
cp -a --parents /etc/bootsplash/themes/$theme/images/*-$cfg.* $tdir
ln -s /etc/bootsplash/themes/$theme/config/bootsplash-$cfg.cfg \
$tdir/etc/splash.cfg
pushd $tdir
chmod -R a+rX .
find | cpio --quiet -o -H newc |\
gzip -9 >> /image/loader/${sname[$index]}
popd
rm -rf $tdir
index=`expr $index + 1`
done
}
#======================================
# suseSetupProductInformation
#--------------------------------------
function suseSetupProductInformation {
# /.../
# This function will use zypper to search for the installed
# product and prepare the product specific information
# for YaST
# ----
if [ ! -x /usr/bin/zypper ];then
echo "zypper not installed... skipped"
return
fi
local zypper="zypper --non-interactive --no-gpg-checks"
local product=$($zypper search -t product | grep product | head -n 1)
local p_alias=$(echo $product | cut -f4 -d'|')
local p_name=$(echo $product | cut -f 4-5 -d'|' | tr '|' '-' | tr -d " ")
p_alias=$(echo $p_alias)
p_name=$(echo $p_name)
echo "Installing product information for $p_name"
$zypper install -t product $p_alias
}
#======================================
# suseStripKernel
#--------------------------------------
function suseStripKernel {
# /.../
# this function will strip the kernel according to the
# drivers information in config.xml. It also will create
# the vmlinux.gz and vmlinuz files which are required
# for the kernel extraction in case of kiwi boot images
# ----
local ifss=$IFS
for i in /lib/modules/*;do
IFS="
"
for p in `rpm -qf $i`;do
#==========================================
# get kernel VERSION information
#------------------------------------------
if [ ! $? = 0 ];then
# not in a package...
IFS=$ifss
continue
fi
if echo $p | grep -q "\-kmp\-";then
# a kernel module package...
IFS=$ifss
continue
fi
VERSION=$(/usr/bin/basename $i)
echo "Stripping kernel $p: Image [$name]..."
#==========================================
# move interesting stuff to /tmp
#------------------------------------------
if [ -d lib/modules/$VERSION/updates ];then
mv lib/modules/$VERSION/updates /tmp
fi
if [ -d lib/modules/$VERSION/weak-updates ];then
mv lib/modules/$VERSION/weak-updates /tmp
fi
mv lib/modules/$VERSION/kernel/* /tmp
mv lib/modules/$VERSION/modules.* /tmp
#==========================================
# remove unneeded stuff
#------------------------------------------
rm -r lib/modules/$VERSION/*
#==========================================
# insert modules.* files
#------------------------------------------
mv /tmp/modules.* /lib/modules/$VERSION/
if [ -d /tmp/updates ];then
mv /tmp/updates /lib/modules/$VERSION/
fi
if [ -d /tmp/weak-updates ];then
mv /tmp/weak-updates /lib/modules/$VERSION/
fi
#==========================================
# create driver-used dirs with .o's to use
#------------------------------------------
mkdir -p /tmp/usb-used
mkdir -p /tmp/scsi-used/drivers/scsi
mkdir -p /tmp/net-used/drivers/net
mkdir -p /tmp/misc-used
IFS=","
#==========================================
# handle USB drivers...
#------------------------------------------
test ! -z "$usbdrivers";for i in $usbdrivers;do
local path=`dirname $i`
test -f /tmp/drivers/$i && \
mkdir -p /tmp/usb-used/drivers/$path && \
mv /tmp/drivers/$i /tmp/usb-used/drivers/$path
done
#==========================================
# handle SCSI drivers...
#------------------------------------------
test ! -z "$scsidrivers";for i in $scsidrivers;do
local path=`dirname $i`
if [ $path = "." ];then
test -f /tmp/drivers/scsi/$i && \
mv /tmp/drivers/scsi/$i /tmp/scsi-used/drivers/scsi
else
test -f /tmp/drivers/scsi/$i && \
mkdir -p /tmp/scsi-used/drivers/scsi/$path && \
mv /tmp/drivers/scsi/$i /tmp/scsi-used/drivers/scsi/$path
fi
done
#==========================================
# handle Network drivers...
#------------------------------------------
test ! -z "$netdrivers";for i in $netdrivers;do
local path=`dirname $i`
if [ $path = "." ];then
test -f /tmp/drivers/net/$i && \
mv /tmp/drivers/net/$i /tmp/net-used/drivers/net
else
test -f /tmp/drivers/net/$i && \
mkdir -p /tmp/net-used/drivers/net/$path && \
mv /tmp/drivers/net/$i /tmp/net-used/drivers/net/$path
fi
done
#==========================================
# handle misc drivers...
#------------------------------------------
test ! -z "$drivers";for i in $drivers;do
local path=`/usr/bin/dirname $i`
local base=`/usr/bin/basename $i`
if [ "$base" = "*" ];then
test -d /tmp/$path && \
mkdir -p /tmp/misc-used/$path && \
mv /tmp/$path/* /tmp/misc-used/$path
else
test -f /tmp/$i && \
mkdir -p /tmp/misc-used/$path && \
mv /tmp/$i /tmp/misc-used/$path
fi
done
#==========================================
# Save all needed drivers...
#------------------------------------------
IFS=$ifss
for root in \
/tmp/scsi-used /tmp/net-used /tmp/usb-used /tmp/misc-used
do
pushd $root
for dir in `find -type d`;do
if [ ! -d /lib/modules/$VERSION/kernel/$dir ];then
mkdir -p /lib/modules/$VERSION/kernel/$dir 2>/dev/null
fi
done
popd
done
for root in \
/tmp/scsi-used /tmp/net-used /tmp/usb-used /tmp/misc-used
do
pushd $root
for file in `find -type f`;do
local path=`/usr/bin/dirname $file`
mv $file /lib/modules/$VERSION/kernel/$path;
done
popd
done
#==========================================
# Cleanup /tmp...
#------------------------------------------
rm -rf /tmp/*
#==========================================
# run depmod
#------------------------------------------
/sbin/depmod -F /boot/System.map-$VERSION $VERSION
#==========================================
# create common kernel files, last wins !
#------------------------------------------
pushd /boot
mv vmlinux-$VERSION.gz vmlinux.gz
mv vmlinuz-$VERSION vmlinuz
popd
done
done
}
[GdmGreeterTheme]
Encoding=UTF-8
Greeter=studio.xml
Name=SlapOs
Description=Theme for SlapOs
Author=<author>Romain Courteaud</author> using SUSE Studio
Copyright=(c) 2011 Novell, Inc.
Screenshot=preview.png
<?xml version="1.0"?>
<!DOCTYPE greeter SYSTEM "greeter.dtd">
<greeter>
<!-- first we take care of the background stuff -->
<item type="pixmap" id="background">
<normal file="background.jpg" alpha="1"/>
<pos x="0" y="0" width="100%" height="100%"/>
</item>
<!--
<item type="pixmap">
<normal file="opensuse.png" alpha="0.9"/>
<pos x="-10" y="10" width="64" height="26" anchor="ne"/>
</item>
-->
<!-- the user list -->
<item type="rect" id="userlist-background">
<pos x="12%" y="10%" width="22%" height="70%"/>
<fixed>
<item type="rect" id="userlist">
<pos x="0" y="0" width="100%" height="100%"/>
<show type="userlist"/>
<normal color="#ffffff"/>
<active color="#ffffff"/>
<prelight color="#ffffff"/>
</item>
</fixed>
</item>
<!-- remote logins have a hostname shown -->
<item type="rect">
<pos y="10" x="100%" width="box" height="box" anchor="ne"/>
<box ypadding="10" xpadding="13" spacing="25" orientation="horizontal">
<item type="label">
<text>%h</text>
<normal font="Sans 9" color="#ffffff" alpha="0.5" />
<pos x="50%" anchor="n"/>
</item>
</box>
<show modes="remote,remote-flexi" />
</item>
<!-- timer -->
<item type="rect" id="timed-rect">
<show type="timed"/>
<normal color="#FFFFFF" alpha="0.1"/>
<pos anchor="c" x="50%" y="75%" width="box" height="box"/>
<box orientation="vertical" min-width="400" xpadding="10" ypadding="5" spacing="0">
<item type="label" id="timed-label">
<normal color="#ffffff" font="Sans 12"/>
<pos x="50%" anchor="n"/>
<!-- Stock label for: User %s will login in %d seconds -->
<stock type="timed-label"/>
</item>
</box>
</item>
<!-- the login box contents, positioned freely -->
<item type="rect">
<pos y="50%" x="55%" width="box" height="box" anchor="c"/>
<box ypadding="5" xpadding="5" spacing="25" orientation="horizontal">
<!-- "(o) |" logo -->
<item type="pixmap">
<normal file="logo.png" alpha="1"/>
<pos y="40%" x="50%" width="60" height="60" anchor="c"/>
<show type="!userlist"/>
</item>
<item type="rect">
<pos width="box" height="box"/>
<box ypadding="5" xpadding="5" spacing="15" orientation="vertical">
<!-- balance out the caps-lock and timer spacing below -->
<!-- filler -->
<item type="rect">
<pos width="200" height="60"/>
</item>
<!-- label textentry pair -->
<!-- KDE way -->
<item type="rect">
<normal color="#FFFFFF" alpha="0"/>
<pos anchor="e" x="0" y="10%" width="box" height="box"/>
<box orientation="vertical" xpadding="0" ypadding="0" spacing="10">
<!-- Stock label for: Username: -->
<item type="label">
<pos anchor="nw" x="100%"/>
<normal color="#FFFFFF" font="Sans 12"/>
<stock type="username-label"/>
</item>
<!-- user entry -->
<item type="entry" id="user-entry">
<pos anchor="nw" x="100%" height="24" width="250"/>
</item>
<!-- Stock label for: Password: -->
<item type="label">
<pos anchor="nw" x="100%"/>
<normal color="#FFFFFF" font="Sans 12"/>
<stock type="password-label"/>
</item>
<!-- pw entry-->
<item type="rect">
<normal color="#ff0000" alpha="0"/>
<pos anchor="nw" x="100%" height="24" width="300"/>
<fixed>
<item type="entry" id="pw-entry">
<pos anchor="nw" x="0" height="24" width="250"/>
</item>
<item type="pixmap" button="true" id="login_button">
<pos anchor="sw" x="255" y="-0" height="21"/>
<normal file="enter.png"/>
</item>
</fixed>
</item>
<item type="rect" id="plugin-specific-winbind">
<pos anchor="nw" x="100%" width="250"/>
<fixed>
<item type="label" id="domain-label">
<pos anchor="nw" x="0"/>
<normal color="#ffffff" font="Sans 12"/>
<stock type="domain-label"/>
</item>
<item type="entry" id="domain-entry">
<pos anchor="nw" x="3%" y="30" height="24" width="100%"/>
</item>
</fixed>
</item>
</box>
</item>
</box>
</item>
</box>
</item>
<item type="rect" id="caps-lock-warning">
<normal color="#FFFFFF" alpha="0.5"/>
<pos anchor="c" x="50%" y="75%" width="box" height="box"/>
<box orientation="vertical" min-width="400" xpadding="10" ypadding="5" spacing="0">
<item type="label">
<normal color="#000000" font="Sans 12"/>
<pos x="50%" anchor="n"/>
<!-- Stock label for: You've got capslock on! -->
<stock type="caps-lock-warning"/>
</item>
</box>
</item>
<item type="label" id="pam-error">
<pos x="50%" y="65%" anchor="c"/>
<normal font="Sans Bold 12" color="#ffffff"/>
<text> </text>
</item>
<!-- session/language/disconnect buttons -->
<item type="rect">
<pos y="100%" x="20" width="100%" height="10%" anchor="sw"/>
<box xpadding="10" spacing="10" orientation="horizontal">
<item type="rect" id="session_button" button="true">
<pos y="50%" width="box" height="100%" anchor="w"/>
<box xpadding="0" spacing="2" orientation="horizontal">
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="session"/>
</item>
</box>
</item>
<item type="rect" id="system_button" button="true">
<show type="reboot" modes="console"/>
<pos y="50%" width="box" height="100%" anchor="w"/>
<box xpadding="0" spacing="2" orientation="horizontal">
<item type="pixmap">
<normal file="dots.png" alpha="1.0"/>
<pos x="0" y="0" height="100%"/>
</item>
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="system"/>
</item>
</box>
</item>
<item type="rect" id="admin_button" button="true">
<show type="halt" modes="console"/>
<pos y="50%" width="box" height="100%" anchor="w"/>
<box xpadding="0" spacing="2" orientation="horizontal">
<item type="pixmap">
<normal file="dots.png" alpha="1"/>
<pos x="0" y="0" height="100%"/>
</item>
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="admin"/>
</item>
</box>
</item>
<item type="rect" id="disconnect_button" button="true">
<normal/>
<show modes="flexi,remote"/>
<pos y="50%" width="box" height="100%" anchor="w"/>
<box xpadding="0" spacing="2" orientation="horizontal">
<item type="pixmap">
<normal file="dots.png" alpha="1"/>
<pos x="0" y="0" height="100%"/>
</item>
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="disconnect"/>
<show modes="remote"/>
</item>
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="quit"/>
<show modes="flexi"/>
</item>
</box>
</item>
</box>
</item>
</greeter>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<studio_uuid>8466bd24-fd59-11df-9f90-475ae2f5345b</studio_uuid>
<appliance_uuid>abf70e50-e361-11df-4694-475ae2f5345b</appliance_uuid>
<config>
<!-- For kiwi 4.43-117.1 and above -->
<image displayname="SlapOs" schemeversion="2.4" name="SlapOs">
<description type="system">
<author>Romain Courteaud</author>
<contact>studio-devel@suse.de</contact>
<specification>A text-only base</specification>
</description>
<preferences>
<oem-swapsize>1024</oem-swapsize>
<oem-home>no</oem-home>
<oem-boot-title>SlapOs</oem-boot-title>
<type fsnocheck="true" filesystem="ext3" checkprebuilt="true" boot="oemboot/suse-11.3">oem</type>
<version>0.0.5</version>
<packagemanager>ensconce</packagemanager>
<rpm-check-signatures>False</rpm-check-signatures>
<rpm-force>False</rpm-force>
</preferences>
<users group="root">
<user shell="/bin/bash" name="root" pwd="$1$wKxkG2BA$dlftO16KMQqDqaRJzKcGH/" home="/root"/>
</users>
<repository type="yast2">
<source path="http://download.opensuse.org/distribution/11.3/repo/oss"/>
</repository>
<repository type="rpm-md">
<source path="http://download.opensuse.org/update/11.3"/>
</repository>
<packages type="image" patternType="onlyRequired" patternPackageType="onlyRequired">
<opensusePattern name="base"/>
<package name="nano"/>
<package name="vim"/>
<package name="memtest86+"/>
<package name="pwgen"/>
<package name="patch"/>
<package name="mtr"/>
<package name="zlib"/>
<package name="gcc-c++"/>
<package name="yast2-firstboot"/>
<package name="mdadm"/>
<package name="yast2-ncurses"/>
<package name="yast2"/>
<package name="less"/>
<package name="zypper"/>
<package name="kernel-default"/>
<package name="syslog-ng"/>
<package name="bootsplash-branding-openSUSE"/>
<package name="python"/>
<package name="bridge-utils"/>
<package name="tunctl"/>
<package name="man"/>
<package name="iputils"/>
<package name="sudo"/>
<package name="perl"/>
<package name="wget"/>
<package name="ntp"/>
<package name="lsof"/>
<package name="strace"/>
<package name="htop"/>
<package name="iotop"/>
<package name="dhcp-client"/>
<package name="perl-XML-Twig"/>
<package name="gcc"/>
<package name="make"/>
<package name="rpm"/>
</packages>
<packages type="bootstrap">
<package name="filesystem"/>
<package name="glibc-locale"/>
</packages>
</image>
</config>
<extra_config name="SlapOs">
<kiwi_version>4.43-117.1</kiwi_version>
<arch>x86_64</arch>
<version>0.0.5</version>
<logo>02/d3230a1e4c9773cc12fa74982a16d2</logo>
<background>da/59b0fadac2d5f3bd0163fa34bcd8ab</background>
<base_system>11.3</base_system>
<image_type>oem</image_type>
<time_zone>UTC</time_zone>
<default_runlevel>3</default_runlevel>
<install_recommended>false</install_recommended>
<xen_host>false</xen_host>
<exclude_docs>false</exclude_docs>
<disable_branding>false</disable_branding>
<locale>
<language>POSIX</language>
<keytable>us.map.gz</keytable>
</locale>
<estimated_size>860</estimated_size>
<size_offset>0</size_offset>
<oem_disk_size>16G</oem_disk_size>
<check_supportability upgrade_sam="true">false</check_supportability>
<repository type="yast2">
<source internal="false" path="http://download.opensuse.org/distribution/11.3/repo/oss"/>
<name>openSUSE 11.3 OSS</name>
</repository>
<repository type="rpm-md">
<source internal="false" path="http://download.opensuse.org/update/11.3"/>
<name>openSUSE 11.3 Updates</name>
</repository>
<network config="dhcp">
</network>
<startup_programs>
</startup_programs>
<overlay_files remove="">
</overlay_files>
<firewall>
<firewall_enabled>no</firewall_enabled>
<firewall_ssh>opened</firewall_ssh>
<firewall_http>closed</firewall_http>
<firewall_webyast>closed</firewall_webyast>
</firewall>
<webyast enabled="false">
</webyast>
<x_keyboard SL="" model="microsoftpro" variant="" RC="" keycode="xfree86" OPT="" layout="us" LA="" RA=""/>
<build_script>
<![CDATA[#!/bin/bash
##############################################################################
#
# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly advised to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
#
# This script is executed at the end of appliance creation. Here you can do
# one-time actions to modify your appliance before it is ever used, like
# removing files and directories to make it smaller, creating symlinks,
# generating indexes, etc.
#
# The 'kiwi_type' variable will contain the format of the appliance (oem =
# disk image, vmx = VMware, iso = CD/DVD, xen = Xen).
#
# read in some variables
. /studio/profile
# Removing eth0 config file which became unecessary with the bridge creation
rm -f /etc/sysconfig/network/ifcfg-eth0]]>
</build_script>
<boot_script>
<![CDATA[#!/bin/bash
### BEGIN INIT INFO
# Provides: suse_studio_custom
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Description: Script run whenever the appliance boots
### END INIT INFO
##############################################################################
#
# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly advised to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
#
# This script is executed whenever your appliance boots. Here you can add
# commands to be executed before the system enters the first runlevel. This
# could include loading kernel modules, starting daemons that aren't managed
# by init files, asking questions at the console, etc.
#
# The 'kiwi_type' variable will contain the format of the appliance (oem =
# disk image, vmx = VMware, iso = CD/DVD, xen = Xen).
#
#
# read in some variables
. /studio/profile
if [ -f /etc/init.d/suse_studio_firstboot ]
then
/etc/init.d/slapos_firstboot
elif [ -f /token_second_boot ]; then
/etc/init.d/slapos_secondboot
fi]]>
</boot_script>
<enable_root_firstboot>false</enable_root_firstboot>
<gpg_keys>
<gpg_key name="repository_key_1" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQENBEkUTD8BCADWLy5d5IpJedHQQSXkC1VK/oAZlJEeBVpSZjMCn8LiHaI9Wq3G
3Vp6wvsP1b3kssJGzVFNctdXt5tjvOLxvrEfRJuGfqHTKILByqLzkeyWawbFNfSQ
93/8OunfSTXC1Sx3hgsNXQuOrNVKrDAQUqT620/jj94xNIg09bLSxsjN6EeTvyiO
mtE9H1J03o9tY6meNL/gcQhxBvwuo205np0JojYBP0pOfN8l9hnIOLkA0yu4ZXig
oKOVmf4iTjX4NImIWldT+UaWTO18NWcCrujtgHueytwYLBNV5N0oJIP2VYuLZfSD
VYuPllv7c6O2UEOXJsdbQaVuzU1HLocDyipnABEBAAG0NG9wZW5TVVNFIFByb2pl
Y3QgU2lnbmluZyBLZXkgPG9wZW5zdXNlQG9wZW5zdXNlLm9yZz6JATwEEwECACYC
GwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCS+GITQUJClIKDgAKCRC4iy/UPb3C
hCtvCACELgrgzAbLw8p4PfsHzrEAvZbaWSLpSOCV4ZQdo0Q9vaHcsjENXfnZ7ctu
hDnyVSmzy4HcVfBfLmK1xkI8ByXK9JGXt3RXuZWHBuaJQKM0hbAZZ/ScMUOs6Igu
2gmyDaJyrf1vBPtNWpMSS8Jp10iJ9/5B5Hlq4UJxMwTGZwcddhRl/UQKErygdnVg
o5zTdyB05BKF4KEIvdbl9xSfifLfOT8CGBpCmnUmD6YB7agXm3OAM9bZGa2v9ipm
s/haLqxS+b4plYKDN8d8xc2whEfTQD158VW0giv38w6NAd6kCxq2pg5L5PmpF9DM
BZl8K2SBMEtV7BYK9wfnxaRl6Wh/
=uF5Q
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
<gpg_key name="repository_key_2" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQGiBEHtkpsRBACRHiXh3olS++6/Mp9N7ByGMmjaaE+Y8cJQLUPG1myrbW5aogIP
0WenayhGbbgOHNWgd5dQ8KQpYYFoQuUHjFYzj5MvgrdOENOvD7ZNJ6+EmbkNh5cV
zUYfNG9jdiGweZkyA1sh8DYS0JiUmQ4CzaBD/DotB/dCmDcyuNQFiw4qKwCglQah
ATyueBRsOiXl0NIs1uB6dkkD/1A2YmQ6te1q38a1J+a8os6bDlMZhVnkZdhJdw6x
eBwUb9XS0n7hyt/AKCcBnrDEUQJuhBMNgzctJvbuMv27yRMANAXZDQkp0ip/yHLJ
PhUdSNTTRHOL9bV3t+JuZ9xmuclprwyrrJYUkEESXNc0tkuczHBP2c/RqA3OxYHt
hrHLA/9Pqe2gEleeo8l26u/uFXs2dtwjh8EZmdhHoqGcOlpYR4DyAg2D+jYfh3RI
oPzIwRlHVUR1ii5h8iPi98BVuEvukwfbbQ1K22Jwzxt6w3ihCXBKWKbeC3ElIMfA
hVMchLFUbTAw+yodO/u3NHxKQ34+ginid9dVyxV5T0gpDEEHObQrT3BlbiBFbnRl
cnByaXNlIFNlcnZlciA8c3VwcG9ydEBub3ZlbGwuY29tPoheBBMRAgAeBQJB7ZKb
AhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEHPSXWMN+zGID4oAoJPTGZbZApW+
tuU422mHYGwoqgjrAJ9fhzRhRbV3YsOxKUomNeuIfmWGXA==
=Qv5+
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
<gpg_key name="repository_key_3" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mIsERCAdXQEEAL7MrBTz+3SBWpCm2ae2yaDqV3ezQcs2JlvqidJVhsZqQe9/jkxi
KTEQW5+TXF/+BlQSiebunRI7oo3+9U8GyRCgs1sf+yRQWMLzZqRaarzRhw9w+Ihl
edtqYl6/U2JZCb8Adp6d7RzlRliJdJ/VtsfXj2ef7Dwu7elOVSsmaBdtAAYptChT
dVNFIFBhY2thZ2UgU2lnbmluZyBLZXkgPGJ1aWxkQHN1c2UuZGU+iLgEEwECACIC
GwMECwcDAgMVAgMDFgIBAh4BAheABQJL4BplBQkPRMsIAAoJEOOlw2Awfj1UhOsD
/RkkEhOIC9NNad0F5O0rEJxvsI7Nm+6FnNJq8LjyR5+87epQCXgpaBXEGd4RcjjO
TukLaHHrC1T/h4biIyf253VZHr4oJ46sUivNUFq60gl4gk56aTGTNeUWOsgrU4jm
auFca3dbGcNfiJ7c7dF2CkOAR+CPMLPYTvuVIRQBAjeS
=jKkp
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
<gpg_key name="repository_key_4" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQENAzbhLQQAAAEIAKAkXHe0lWRBXLpn38hMHy03F0I4Sszmoc8aaKJrhfhyMlOA
BqvklPLE2f9UrI4Xc860gH79ZREwAgPt0pi6+SleNFLNcNFAuuHMLQOOsaMFatbz
JR9i4m/lf6q929YROu5zB48rBAlcfTm+IBbijaEdnqpwGib45wE/Cfy6FAttBHQh
1Kp+r/jPbf1mYAvljUfHKuvbg8t2EIQz/5yGp+n5trn9pElfQO2cRBq8LFpf1l+U
P7EKjFmlOq+Gs/fF98/dP3DfniSd78LQPq5vp8RL8nr/o2i7jkAQ33m4f1wOBWd+
cZovrKXYlXiR+Bf7m2hpZo+/sAzhd7LmAD0l09kABRG0JVN1U0UgU2VjdXJpdHkg
VGVhbSA8c2VjdXJpdHlAc3VzZS5kZT6JARUDBRA24S1H5Fiyh7HKPEUBAVcOB/9b
yHYji1/+4Xc2GhvXK0FSJN0MGgeXgW47yxDL7gmR4mNgjlIOUHZj0PEpVjWepOJ7
tQS3L9oP6cpj1Fj/XxuLbkp5VCQ61hpt54coQAvYrnT9rtWEGN+xmwejT1WmYmDJ
xG+EGBXKr+XP69oIUl1E2JO3rXeklulgjqRKos4cdXKgyjWZ7CP9V9daRXDtje63
Om8gwSdU/nCvhdRIWp/Vwbf7Ia8iZr9OJ5YuQl0DBG4qmGDDrvImgPAFkYFzwlqo
choXFQ9y0YVCV41DnR+GYhwl2qBd81T8aXhihEGPIgaw3g8gd8B5o6mPVgl+nJqI
BkEYGBusiag2pS6qwznZiQEVAwUQNuEtBHey5gA9JdPZAQFtOAf+KVh939b0J94u
v/kpg4xs1LthlhquhbHcKNoVTNspugiC3qMPyvSX4XcBr2PC0cVkS4Z9PY9iCfT+
x9WM96g39dAF+le2CCx7XISk9XXJ4ApEy5g4AuK7NYgAJd39PPbERgWnxjxir9g0
Ix30dS30bW39D+3NPU5Ho9TD/B7UDFvYT5AWHl3MGwo3a1RhTs6sfgL7yQ3U+mvq
MkTExZb5mfN1FeaYKMopoI4VpzNVeGxQWIz67VjJHVyUlF20ekOz4kWVgsxkc8G2
saqZd6yv2EwqYTi8BDAduweP33KrQc4KDDommQNDOXxaKOeCoESIdM4p7Esdjq1o
L0oixF12CohGBBARAgAGBQI7HmHDAAoJEJ5A4xAACqukTlQAoI4QzP9yjPohY7OU
F7J3eKBTzp25AJ42BmtSd3pvm5ldmognWF3Trhp+GYkAlQMFEDe3O8IWkDf+zvyS
FQEBAfkD/3GG5UgJj18UhYmh1gfjIlDcPAeqMwSytEHDENmHC+vlZQ/p0mT9tPiW
tp34io54mwr+bLPN8l6B5GJNkbGvH6M+mO7R8Lj4nHL6pyAv3PQr83WyLHcaX7It
Klj371/4yzKV6qpz43SGRK4MacLo2rNZ/dNej7lwPCtzCcFYwqkiiEYEEBECAAYF
AjoaQqQACgkQx1KqMrDf94ArewCfWnTUDG5gNYkmHG4bYL8fQcizyA4An2eVo/n+
3J2KRWSOhpAMsnMxtPbB
=Ay23
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
<gpg_key name="repository_key_5" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQENBEkUTD8BCADWLy5d5IpJedHQQSXkC1VK/oAZlJEeBVpSZjMCn8LiHaI9Wq3G
3Vp6wvsP1b3kssJGzVFNctdXt5tjvOLxvrEfRJuGfqHTKILByqLzkeyWawbFNfSQ
93/8OunfSTXC1Sx3hgsNXQuOrNVKrDAQUqT620/jj94xNIg09bLSxsjN6EeTvyiO
mtE9H1J03o9tY6meNL/gcQhxBvwuo205np0JojYBP0pOfN8l9hnIOLkA0yu4ZXig
oKOVmf4iTjX4NImIWldT+UaWTO18NWcCrujtgHueytwYLBNV5N0oJIP2VYuLZfSD
VYuPllv7c6O2UEOXJsdbQaVuzU1HLocDyipnABEBAAG0NG9wZW5TVVNFIFByb2pl
Y3QgU2lnbmluZyBLZXkgPG9wZW5zdXNlQG9wZW5zdXNlLm9yZz6JATwEEwECACYC
GwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCS+GITQUJClIKDgAKCRC4iy/UPb3C
hCtvCACELgrgzAbLw8p4PfsHzrEAvZbaWSLpSOCV4ZQdo0Q9vaHcsjENXfnZ7ctu
hDnyVSmzy4HcVfBfLmK1xkI8ByXK9JGXt3RXuZWHBuaJQKM0hbAZZ/ScMUOs6Igu
2gmyDaJyrf1vBPtNWpMSS8Jp10iJ9/5B5Hlq4UJxMwTGZwcddhRl/UQKErygdnVg
o5zTdyB05BKF4KEIvdbl9xSfifLfOT8CGBpCmnUmD6YB7agXm3OAM9bZGa2v9ipm
s/haLqxS+b4plYKDN8d8xc2whEfTQD158VW0giv38w6NAd6kCxq2pg5L5PmpF9DM
BZl8K2SBMEtV7BYK9wfnxaRl6Wh/
=uF5Q
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
<gpg_key name="repository_key_6" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQGiBEeWWzMRBADU8l2IckSzgdUS1dn0WMM7wXK4seoFsHHQw/0unHCQCxpyDMnn
TKV86p5KTbR1FDdeaZlY0yCV+IGsiIxLyuUdJn8vuA5gA5ZkUr89/HtWaeZVl77J
HIQxvhDRBWCOO4QNtrZYWvGbvl83wl/zOfdLEs8IGElt0LgfohyTA1qfrwCg/Hac
tDDscXsPlo5Jek/+3RHVeD0D/30riCpfpLJOmhraLg1EbWsE0mN9IQsl+WDPdoYo
bB76z6eH3e38618WzP/LTG4WuVbwpSSqmXyfdVpXxWzESfT8q0B8CGpHf/Sa/T/L
emohmRnLvkf/tAfxFmDMm1jOewJIE9S35jANGHVJcxmfRNpPWC7uHnqjopnsmDkL
kMEdBAC6YcpDOcMJZ9sJbt/JNZBaoT5CltgMDlSN50t2v/J5em8qMLqCSNF5UJyd
LFnePHTHy6gVjWbqcC0ncFzOqM1y644Up7BoKSAr1hRTl6Mw9S3UfZZZ0al3JtWt
8y0eFIW3QP66w1AL0LO2bZMBuOvhb63DXv5iHorcxk0yIFbbybRCb3BlblNVU0U6
RmFjdG9yeSBPQlMgUHJvamVjdCA8b3BlblNVU0U6RmFjdG9yeUBidWlsZC5vcGVu
c3VzZS5vcmc+iGYEExECACYCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCS+GM
qwUJC8//eAAKCRAcchwkVrQXenCfAKCiI/uNClNI32AaPU36o2mFIUKcHgCfby3/
8UEqkeBRFM1zyjHBo2w/GYyIRgQQEQIABgUCS+GOAgAKCRA7MBG3a51lI2PoAJ9+
OORElEjcmtUu0pOhatgoEx+DoACfcJMHcdT+8ckq17RsEgWuS/4dGVM=
=uu+g
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
<gpg_key name="repository_key_7" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQGiBER0iroRBADfqUeJmPCXqPJFnf3CVKy40dL1F+gfvP+JHN7/uu4c9+oCYjI1
uAE8iGTm/Twb/Zzbs4dt0iWjhNFXbRi42rMww4d/8QcPYZ21WSehh+fv8nCjt2sw
LeC87ar2SR8OTpJBK0fQlcd4e6H5GMntfI6SYEUOPd8m/eQ+4+1AxpUUpwCgswaF
13fePZGI//pDn5tGjbvmaP8D/R3qum/I+oDS8lbFeeDS10GkEkwTYec13gdfsq6I
yzIj7VBsC+rGfbipv+VGR61Q4d19pOHKLDekr9OG+3G4ZcYM4NQvQZR+QIlp3xWu
nBmYD1LRkHLVj+Z4DGQhjjOffkPSuacKPymMaZ/aRiLgTIAo97W2YPhutscXrLSG
2Y+BA/4jsyaDb7kbW4wc8RtPIcuFEheVqgBeRakP9Uj47kBMBEpPtI/mIdY5liKk
ztKnuQG6ROYLNV/PW0ZbE1uT64C710weh4cB3PnZLV5P10deDLBjHk8MJQGCTSDD
JYvhutUzQfshAU6j2kErGvKdZxWGezab34vFyMP2oLGqswPAJrRQTm92ZWxsIFBy
b3ZvIEJ1aWxkIChDb250YWN0IHNlY3VyaXR5QG5vdmVsbC5jb20pIDxub3ZlbGwt
cHJvdm8tYnVpbGRAbm92ZWxsLmNvbT6IZgQTEQIAJgIbAwYLCQgHAwIEFQIIAwQW
AgMBAh4BAheABQJL4DfKBQkO9G+QAAoJEBTCi8l+LjsFWJ0AoIRm3ZLa4FoQ4/rD
nWb0DlZZWJRmAJwPdtR6KhW3eZNEi0YJEJ09dlCBsA==
=2leo
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
<gpg_key name="repository_key_8" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQGiBDnu9IERBACT8Y35+2vv4MGVKiLEMOl9GdST6MCkYS3yEKeueNWc+z/0Kvff
4JctBsgs47tjmiI9sl0eHjm3gTR8rItXMN6sJEUHWzDP+Y0PFPboMvKx0FXl/A0d
M+HFrruCgBlWt6FA+okRySQiliuI5phwqkXefl9AhkwR8xocQSVCFxcwvwCglVcO
QliHu8jwRQHxlRE0tkwQQI0D+wfQwKdvhDplxHJ5nf7U8c/yE/vdvpN6lF0tmFrK
XBUX+K7u4ifrZlQvj/81M4INjtXreqDiJtr99Rs6xa0ScZqITuZC4CWxJa9GynBE
D3+D2t1V/f8l0smsuYoFOF7Ib49IkTdbtwAThlZp8bEhELBeGaPdNCcmfZ66rKUd
G5sRA/9ovnc1krSQF2+sqB9/o7w5/q2qiyzwOSTnkjtBUVKn4zLUOf6aeBAoV6NM
CC3Kj9aZHfA+ND0ehPaVGJgjaVNFhPi4x0e7BULdvgOoAqajLfvkURHAeSsxXIoE
myW/xC1sBbDkDUIBSx5oej73XCZgnj/inphRqGpsb+1nKFvF+rQoU3VTRSBQYWNr
YWdlIFNpZ25pbmcgS2V5IDxidWlsZEBzdXNlLmRlPohiBBMRAgAiAhsDBAsHAwID
FQIDAxYCAQIeAQIXgAUCS+AZmQUJGXXzGAAKCRCoTtronIAKyl9KAJ9KyC11XDiC
lhuqOJ+Q0yPL5Ge/aQCePxBrVWcVaAjGq4vTkwMkiD9FVMK5Ag0EOe70khAIAISR
0E3ozF/la+oNaRwxHLrCet30NgnxRROYhPaJB/Tu1FQokn2/Qld/HZnh3TwhBIw1
FqrhWBJ7491iAjLR9uPbdWJrn+A7t8kSkPaF3Z/6kyc5a8fas44ht5h+6HMBzoFC
MAq2aBHQRFRNp9Mz1ZvoXXcI1lk1l8OqcUM/ovXbDfPcXsUVeTPTtGzcAi2jVl9h
l3iwJKkyv/RLmcusdsi8YunbvWGFAF5GaagYQo7YlF6UaBQnYJTM523AMgpPQtsK
m9o/w9WdgXkgWhgkhZEeqUS3m5xNey1nLu9iMvq9M/iXnGz4sg6Q2Y+GqZ+yAvNW
jRRou3zSE7Bzg28MI4sAAwYH/2D71Xc5HPDgu87WnBFgmp8MpSr8QnSs0wwPg3xE
ullGEocolSb2c0ctuSyeVnCttJMzkukL9TqyF4s/6XRstWirSWawJxRLKH6Zjo/F
aKsshYKf8gBkAaddvpl3pO0gmUYbqmpQ3xDEYlhCeieXS5MkockQ1sj2xYdB1xO0
ExzfiCiscUKjUFy+mdzUsUutafuZ+gbHog1CN/ccZCkxcBa5IFCHORrNjq9pYWlr
xsEn6ApsG7JJbM2besW1PkdEoxak74z1senh36m5jQvVjA3U4xq1wwylxadmmJaJ
HzeiLfb7G1ZRjZTsB7fyYxqDzMVul6o9BSwO/1XsIAnV1uuITAQYEQIADAUCS+AZ
vQUJGXXzKwAKCRCoTtronIAKysYeAJ4yNHu8lpjQiBL69k3VNr9hbQMmzwCfcrIB
TnsG384Q1YOf9lIUSYEa9sk=
=yIuV
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
<gpg_key name="repository_key_9" target="rpm">
<![CDATA[-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQILBERqCJkBEACdqhZWdAbUHLIumXMEgv+GFjr1ZzVHgynnFOzztU/8sxZNa9cm
YV4HZpVfjMr7fos3ArzyiPPt/336cf7w9p79/ZS4rHSNPDMlPCtXYvFxUbvU0/GY
q4jwcBsrJ0xaJ9CP5bWyAgVKOb7Y6k0ktaLjRR+tDfMsHA4H0ClMoRr6ATw8NL0e
VCfAHuzqCKvX1If8ng+wTivtAhKvz/WwQiELNELmPfc5tZHOw8NgP/r0Pze18Hn2
dlAHu0WpC7uoR00vscsMIJiJJPcsxbL1F1eADKnk+wEy8Go+EJeJ5i0WoFbqD52q
Lv/C/oY6NVtVY0MBwtn+oQNSnQ4JBsB/Akdt53LAi0ZtNQxMyUW+76R8FCOmVCV8
WGiF5CPRP0yvG80AMBjBjKjHb/v8ov5MnIyFimzAHS1gQcUNxTEYA/5eFwoYcGcK
weGq9FUjPTzLQAgvp7XmOzHpSAfJ7qysxFTepNsSZZhgizJyInrdQldr+GYcUNqB
krD9MWmFop975OxhCTEnNv/HcE79r8WD26HzDFYxTiTJbr0pU/ivBzo+rjq+YG2V
stJk+udVYmZTnC4LmXus8JiNuqBXbxNscwCBpcJ8YcfCV6uh+7E0XfXZsgVUFLp1
NF+ylYRGTycOlWoZODrnJevZW7N9O3bWRx/G2P4bJD07LsDLe4i5hymf5QAGKbRQ
Tm92ZWxsIFByb3ZvIEJ1aWxkIChDb250YWN0IHNlY3VyaXR5QG5vdmVsbC5jb20p
IDxub3ZlbGwtcHJvdm8tYnVpbGRAbm92ZWxsLmNvbT6JAjMEEwECAB0FAkRqCJkG
CwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBHijLooZEiCKSFD/93vZHCAMLEfksU
KnvXl08bv1rfuamuyJnE3ANRE5RDyypriHMCnkVxazvQ2WI4W4UEjluL9+SzZwtV
ZvKVoAr31614nSyWwv2YnJTHfjMG+xRlkolZMnuIiB9PcCBo9+GPU0ABuzo4pEJW
NIRoSS1NFbAZBhtUnY0cN+trM5QObLl7xXTavLyGk//blkk57fov7GXsQJlZUig0
l2yt5XNyGpLUnTMDumHh8b389quF+0+ZfdwOy7A768xjipAZiTvIujBrEv51wrxh
0HBT0VGA0MhD9t0B+Ce4BM9P/iVMO00naaOp6PqMfPPKxQQqer8qy1i6UWBx95SY
mKZBIvOm2d9PezDxkckCu61r6krx1iKnT1wdprCAkIYwALK118SpbxuyGW0bhRHc
wsc/akzWH72fS0Xu49mvL4k4A2U9asdeQid3dMgbtm5mSWof0yiU/G4YNn0yeXoY
oG1VbCAqQbFX1Rvd6GITJVqI+ekW/uMA9BP78dF8wBeG0+QmpQnSf+eOsxB/RT8o
Kb4hHY+29MUlg+i9ceVt7hoKr03J/uIG5TXFXRYLaI0iAFVlKfWxpqDfS2XA4+dD
VYt+5RDgBcnxDaTB4FE9GqcYScNfe7+NFtL0p0wOPftbmgZzGjucTmrD8mDUNdqA
xGK7vlk4GATSfOQlq7G6LXW6RYnInohGBBMRAgAGBQJEazMlAAoJEKhO2uicgArK
2vMAn0TbVDESEVKVuFZStrfIzOvJQrR9AJsH733Ju1kE99GFrdfCeGqpckmNhg==
=E+qN
-----END PGP PUBLIC KEY BLOCK-----
]]>
</gpg_key>
</gpg_keys>
<window_manager>unknown</window_manager>
<plugin_config>{"memory":{"size":512,"pae_enabled":false},"vmx_cdrom":{"enabled":false},"sdk_integration":{"enabled":false,"sdk_server":"clayton.arch.suse.de:3000"},"disk":{"disk_size":16,"swap_size":1024},"xen_host_mode":{"enabled":false},"live_installer":{"enabled":false}}</plugin_config>
</extra_config>
</manifest>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
mQENBEkUTD8BCADWLy5d5IpJedHQQSXkC1VK/oAZlJEeBVpSZjMCn8LiHaI9Wq3G
3Vp6wvsP1b3kssJGzVFNctdXt5tjvOLxvrEfRJuGfqHTKILByqLzkeyWawbFNfSQ
93/8OunfSTXC1Sx3hgsNXQuOrNVKrDAQUqT620/jj94xNIg09bLSxsjN6EeTvyiO
mtE9H1J03o9tY6meNL/gcQhxBvwuo205np0JojYBP0pOfN8l9hnIOLkA0yu4ZXig
oKOVmf4iTjX4NImIWldT+UaWTO18NWcCrujtgHueytwYLBNV5N0oJIP2VYuLZfSD
VYuPllv7c6O2UEOXJsdbQaVuzU1HLocDyipnABEBAAG0NG9wZW5TVVNFIFByb2pl
Y3QgU2lnbmluZyBLZXkgPG9wZW5zdXNlQG9wZW5zdXNlLm9yZz6JATwEEwECACYC
GwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCS+GITQUJClIKDgAKCRC4iy/UPb3C
hCtvCACELgrgzAbLw8p4PfsHzrEAvZbaWSLpSOCV4ZQdo0Q9vaHcsjENXfnZ7ctu
hDnyVSmzy4HcVfBfLmK1xkI8ByXK9JGXt3RXuZWHBuaJQKM0hbAZZ/ScMUOs6Igu
2gmyDaJyrf1vBPtNWpMSS8Jp10iJ9/5B5Hlq4UJxMwTGZwcddhRl/UQKErygdnVg
o5zTdyB05BKF4KEIvdbl9xSfifLfOT8CGBpCmnUmD6YB7agXm3OAM9bZGa2v9ipm
s/haLqxS+b4plYKDN8d8xc2whEfTQD158VW0giv38w6NAd6kCxq2pg5L5PmpF9DM
BZl8K2SBMEtV7BYK9wfnxaRl6Wh/
=uF5Q
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQGiBEHtkpsRBACRHiXh3olS++6/Mp9N7ByGMmjaaE+Y8cJQLUPG1myrbW5aogIP
0WenayhGbbgOHNWgd5dQ8KQpYYFoQuUHjFYzj5MvgrdOENOvD7ZNJ6+EmbkNh5cV
zUYfNG9jdiGweZkyA1sh8DYS0JiUmQ4CzaBD/DotB/dCmDcyuNQFiw4qKwCglQah
ATyueBRsOiXl0NIs1uB6dkkD/1A2YmQ6te1q38a1J+a8os6bDlMZhVnkZdhJdw6x
eBwUb9XS0n7hyt/AKCcBnrDEUQJuhBMNgzctJvbuMv27yRMANAXZDQkp0ip/yHLJ
PhUdSNTTRHOL9bV3t+JuZ9xmuclprwyrrJYUkEESXNc0tkuczHBP2c/RqA3OxYHt
hrHLA/9Pqe2gEleeo8l26u/uFXs2dtwjh8EZmdhHoqGcOlpYR4DyAg2D+jYfh3RI
oPzIwRlHVUR1ii5h8iPi98BVuEvukwfbbQ1K22Jwzxt6w3ihCXBKWKbeC3ElIMfA
hVMchLFUbTAw+yodO/u3NHxKQ34+ginid9dVyxV5T0gpDEEHObQrT3BlbiBFbnRl
cnByaXNlIFNlcnZlciA8c3VwcG9ydEBub3ZlbGwuY29tPoheBBMRAgAeBQJB7ZKb
AhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEHPSXWMN+zGID4oAoJPTGZbZApW+
tuU422mHYGwoqgjrAJ9fhzRhRbV3YsOxKUomNeuIfmWGXA==
=Qv5+
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mIsERCAdXQEEAL7MrBTz+3SBWpCm2ae2yaDqV3ezQcs2JlvqidJVhsZqQe9/jkxi
KTEQW5+TXF/+BlQSiebunRI7oo3+9U8GyRCgs1sf+yRQWMLzZqRaarzRhw9w+Ihl
edtqYl6/U2JZCb8Adp6d7RzlRliJdJ/VtsfXj2ef7Dwu7elOVSsmaBdtAAYptChT
dVNFIFBhY2thZ2UgU2lnbmluZyBLZXkgPGJ1aWxkQHN1c2UuZGU+iLgEEwECACIC
GwMECwcDAgMVAgMDFgIBAh4BAheABQJL4BplBQkPRMsIAAoJEOOlw2Awfj1UhOsD
/RkkEhOIC9NNad0F5O0rEJxvsI7Nm+6FnNJq8LjyR5+87epQCXgpaBXEGd4RcjjO
TukLaHHrC1T/h4biIyf253VZHr4oJ46sUivNUFq60gl4gk56aTGTNeUWOsgrU4jm
auFca3dbGcNfiJ7c7dF2CkOAR+CPMLPYTvuVIRQBAjeS
=jKkp
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQENAzbhLQQAAAEIAKAkXHe0lWRBXLpn38hMHy03F0I4Sszmoc8aaKJrhfhyMlOA
BqvklPLE2f9UrI4Xc860gH79ZREwAgPt0pi6+SleNFLNcNFAuuHMLQOOsaMFatbz
JR9i4m/lf6q929YROu5zB48rBAlcfTm+IBbijaEdnqpwGib45wE/Cfy6FAttBHQh
1Kp+r/jPbf1mYAvljUfHKuvbg8t2EIQz/5yGp+n5trn9pElfQO2cRBq8LFpf1l+U
P7EKjFmlOq+Gs/fF98/dP3DfniSd78LQPq5vp8RL8nr/o2i7jkAQ33m4f1wOBWd+
cZovrKXYlXiR+Bf7m2hpZo+/sAzhd7LmAD0l09kABRG0JVN1U0UgU2VjdXJpdHkg
VGVhbSA8c2VjdXJpdHlAc3VzZS5kZT6JARUDBRA24S1H5Fiyh7HKPEUBAVcOB/9b
yHYji1/+4Xc2GhvXK0FSJN0MGgeXgW47yxDL7gmR4mNgjlIOUHZj0PEpVjWepOJ7
tQS3L9oP6cpj1Fj/XxuLbkp5VCQ61hpt54coQAvYrnT9rtWEGN+xmwejT1WmYmDJ
xG+EGBXKr+XP69oIUl1E2JO3rXeklulgjqRKos4cdXKgyjWZ7CP9V9daRXDtje63
Om8gwSdU/nCvhdRIWp/Vwbf7Ia8iZr9OJ5YuQl0DBG4qmGDDrvImgPAFkYFzwlqo
choXFQ9y0YVCV41DnR+GYhwl2qBd81T8aXhihEGPIgaw3g8gd8B5o6mPVgl+nJqI
BkEYGBusiag2pS6qwznZiQEVAwUQNuEtBHey5gA9JdPZAQFtOAf+KVh939b0J94u
v/kpg4xs1LthlhquhbHcKNoVTNspugiC3qMPyvSX4XcBr2PC0cVkS4Z9PY9iCfT+
x9WM96g39dAF+le2CCx7XISk9XXJ4ApEy5g4AuK7NYgAJd39PPbERgWnxjxir9g0
Ix30dS30bW39D+3NPU5Ho9TD/B7UDFvYT5AWHl3MGwo3a1RhTs6sfgL7yQ3U+mvq
MkTExZb5mfN1FeaYKMopoI4VpzNVeGxQWIz67VjJHVyUlF20ekOz4kWVgsxkc8G2
saqZd6yv2EwqYTi8BDAduweP33KrQc4KDDommQNDOXxaKOeCoESIdM4p7Esdjq1o
L0oixF12CohGBBARAgAGBQI7HmHDAAoJEJ5A4xAACqukTlQAoI4QzP9yjPohY7OU
F7J3eKBTzp25AJ42BmtSd3pvm5ldmognWF3Trhp+GYkAlQMFEDe3O8IWkDf+zvyS
FQEBAfkD/3GG5UgJj18UhYmh1gfjIlDcPAeqMwSytEHDENmHC+vlZQ/p0mT9tPiW
tp34io54mwr+bLPN8l6B5GJNkbGvH6M+mO7R8Lj4nHL6pyAv3PQr83WyLHcaX7It
Klj371/4yzKV6qpz43SGRK4MacLo2rNZ/dNej7lwPCtzCcFYwqkiiEYEEBECAAYF
AjoaQqQACgkQx1KqMrDf94ArewCfWnTUDG5gNYkmHG4bYL8fQcizyA4An2eVo/n+
3J2KRWSOhpAMsnMxtPbB
=Ay23
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQENBEkUTD8BCADWLy5d5IpJedHQQSXkC1VK/oAZlJEeBVpSZjMCn8LiHaI9Wq3G
3Vp6wvsP1b3kssJGzVFNctdXt5tjvOLxvrEfRJuGfqHTKILByqLzkeyWawbFNfSQ
93/8OunfSTXC1Sx3hgsNXQuOrNVKrDAQUqT620/jj94xNIg09bLSxsjN6EeTvyiO
mtE9H1J03o9tY6meNL/gcQhxBvwuo205np0JojYBP0pOfN8l9hnIOLkA0yu4ZXig
oKOVmf4iTjX4NImIWldT+UaWTO18NWcCrujtgHueytwYLBNV5N0oJIP2VYuLZfSD
VYuPllv7c6O2UEOXJsdbQaVuzU1HLocDyipnABEBAAG0NG9wZW5TVVNFIFByb2pl
Y3QgU2lnbmluZyBLZXkgPG9wZW5zdXNlQG9wZW5zdXNlLm9yZz6JATwEEwECACYC
GwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCS+GITQUJClIKDgAKCRC4iy/UPb3C
hCtvCACELgrgzAbLw8p4PfsHzrEAvZbaWSLpSOCV4ZQdo0Q9vaHcsjENXfnZ7ctu
hDnyVSmzy4HcVfBfLmK1xkI8ByXK9JGXt3RXuZWHBuaJQKM0hbAZZ/ScMUOs6Igu
2gmyDaJyrf1vBPtNWpMSS8Jp10iJ9/5B5Hlq4UJxMwTGZwcddhRl/UQKErygdnVg
o5zTdyB05BKF4KEIvdbl9xSfifLfOT8CGBpCmnUmD6YB7agXm3OAM9bZGa2v9ipm
s/haLqxS+b4plYKDN8d8xc2whEfTQD158VW0giv38w6NAd6kCxq2pg5L5PmpF9DM
BZl8K2SBMEtV7BYK9wfnxaRl6Wh/
=uF5Q
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQGiBEeWWzMRBADU8l2IckSzgdUS1dn0WMM7wXK4seoFsHHQw/0unHCQCxpyDMnn
TKV86p5KTbR1FDdeaZlY0yCV+IGsiIxLyuUdJn8vuA5gA5ZkUr89/HtWaeZVl77J
HIQxvhDRBWCOO4QNtrZYWvGbvl83wl/zOfdLEs8IGElt0LgfohyTA1qfrwCg/Hac
tDDscXsPlo5Jek/+3RHVeD0D/30riCpfpLJOmhraLg1EbWsE0mN9IQsl+WDPdoYo
bB76z6eH3e38618WzP/LTG4WuVbwpSSqmXyfdVpXxWzESfT8q0B8CGpHf/Sa/T/L
emohmRnLvkf/tAfxFmDMm1jOewJIE9S35jANGHVJcxmfRNpPWC7uHnqjopnsmDkL
kMEdBAC6YcpDOcMJZ9sJbt/JNZBaoT5CltgMDlSN50t2v/J5em8qMLqCSNF5UJyd
LFnePHTHy6gVjWbqcC0ncFzOqM1y644Up7BoKSAr1hRTl6Mw9S3UfZZZ0al3JtWt
8y0eFIW3QP66w1AL0LO2bZMBuOvhb63DXv5iHorcxk0yIFbbybRCb3BlblNVU0U6
RmFjdG9yeSBPQlMgUHJvamVjdCA8b3BlblNVU0U6RmFjdG9yeUBidWlsZC5vcGVu
c3VzZS5vcmc+iGYEExECACYCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCS+GM
qwUJC8//eAAKCRAcchwkVrQXenCfAKCiI/uNClNI32AaPU36o2mFIUKcHgCfby3/
8UEqkeBRFM1zyjHBo2w/GYyIRgQQEQIABgUCS+GOAgAKCRA7MBG3a51lI2PoAJ9+
OORElEjcmtUu0pOhatgoEx+DoACfcJMHcdT+8ckq17RsEgWuS/4dGVM=
=uu+g
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQGiBER0iroRBADfqUeJmPCXqPJFnf3CVKy40dL1F+gfvP+JHN7/uu4c9+oCYjI1
uAE8iGTm/Twb/Zzbs4dt0iWjhNFXbRi42rMww4d/8QcPYZ21WSehh+fv8nCjt2sw
LeC87ar2SR8OTpJBK0fQlcd4e6H5GMntfI6SYEUOPd8m/eQ+4+1AxpUUpwCgswaF
13fePZGI//pDn5tGjbvmaP8D/R3qum/I+oDS8lbFeeDS10GkEkwTYec13gdfsq6I
yzIj7VBsC+rGfbipv+VGR61Q4d19pOHKLDekr9OG+3G4ZcYM4NQvQZR+QIlp3xWu
nBmYD1LRkHLVj+Z4DGQhjjOffkPSuacKPymMaZ/aRiLgTIAo97W2YPhutscXrLSG
2Y+BA/4jsyaDb7kbW4wc8RtPIcuFEheVqgBeRakP9Uj47kBMBEpPtI/mIdY5liKk
ztKnuQG6ROYLNV/PW0ZbE1uT64C710weh4cB3PnZLV5P10deDLBjHk8MJQGCTSDD
JYvhutUzQfshAU6j2kErGvKdZxWGezab34vFyMP2oLGqswPAJrRQTm92ZWxsIFBy
b3ZvIEJ1aWxkIChDb250YWN0IHNlY3VyaXR5QG5vdmVsbC5jb20pIDxub3ZlbGwt
cHJvdm8tYnVpbGRAbm92ZWxsLmNvbT6IZgQTEQIAJgIbAwYLCQgHAwIEFQIIAwQW
AgMBAh4BAheABQJL4DfKBQkO9G+QAAoJEBTCi8l+LjsFWJ0AoIRm3ZLa4FoQ4/rD
nWb0DlZZWJRmAJwPdtR6KhW3eZNEi0YJEJ09dlCBsA==
=2leo
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQGiBDnu9IERBACT8Y35+2vv4MGVKiLEMOl9GdST6MCkYS3yEKeueNWc+z/0Kvff
4JctBsgs47tjmiI9sl0eHjm3gTR8rItXMN6sJEUHWzDP+Y0PFPboMvKx0FXl/A0d
M+HFrruCgBlWt6FA+okRySQiliuI5phwqkXefl9AhkwR8xocQSVCFxcwvwCglVcO
QliHu8jwRQHxlRE0tkwQQI0D+wfQwKdvhDplxHJ5nf7U8c/yE/vdvpN6lF0tmFrK
XBUX+K7u4ifrZlQvj/81M4INjtXreqDiJtr99Rs6xa0ScZqITuZC4CWxJa9GynBE
D3+D2t1V/f8l0smsuYoFOF7Ib49IkTdbtwAThlZp8bEhELBeGaPdNCcmfZ66rKUd
G5sRA/9ovnc1krSQF2+sqB9/o7w5/q2qiyzwOSTnkjtBUVKn4zLUOf6aeBAoV6NM
CC3Kj9aZHfA+ND0ehPaVGJgjaVNFhPi4x0e7BULdvgOoAqajLfvkURHAeSsxXIoE
myW/xC1sBbDkDUIBSx5oej73XCZgnj/inphRqGpsb+1nKFvF+rQoU3VTRSBQYWNr
YWdlIFNpZ25pbmcgS2V5IDxidWlsZEBzdXNlLmRlPohiBBMRAgAiAhsDBAsHAwID
FQIDAxYCAQIeAQIXgAUCS+AZmQUJGXXzGAAKCRCoTtronIAKyl9KAJ9KyC11XDiC
lhuqOJ+Q0yPL5Ge/aQCePxBrVWcVaAjGq4vTkwMkiD9FVMK5Ag0EOe70khAIAISR
0E3ozF/la+oNaRwxHLrCet30NgnxRROYhPaJB/Tu1FQokn2/Qld/HZnh3TwhBIw1
FqrhWBJ7491iAjLR9uPbdWJrn+A7t8kSkPaF3Z/6kyc5a8fas44ht5h+6HMBzoFC
MAq2aBHQRFRNp9Mz1ZvoXXcI1lk1l8OqcUM/ovXbDfPcXsUVeTPTtGzcAi2jVl9h
l3iwJKkyv/RLmcusdsi8YunbvWGFAF5GaagYQo7YlF6UaBQnYJTM523AMgpPQtsK
m9o/w9WdgXkgWhgkhZEeqUS3m5xNey1nLu9iMvq9M/iXnGz4sg6Q2Y+GqZ+yAvNW
jRRou3zSE7Bzg28MI4sAAwYH/2D71Xc5HPDgu87WnBFgmp8MpSr8QnSs0wwPg3xE
ullGEocolSb2c0ctuSyeVnCttJMzkukL9TqyF4s/6XRstWirSWawJxRLKH6Zjo/F
aKsshYKf8gBkAaddvpl3pO0gmUYbqmpQ3xDEYlhCeieXS5MkockQ1sj2xYdB1xO0
ExzfiCiscUKjUFy+mdzUsUutafuZ+gbHog1CN/ccZCkxcBa5IFCHORrNjq9pYWlr
xsEn6ApsG7JJbM2besW1PkdEoxak74z1senh36m5jQvVjA3U4xq1wwylxadmmJaJ
HzeiLfb7G1ZRjZTsB7fyYxqDzMVul6o9BSwO/1XsIAnV1uuITAQYEQIADAUCS+AZ
vQUJGXXzKwAKCRCoTtronIAKysYeAJ4yNHu8lpjQiBL69k3VNr9hbQMmzwCfcrIB
TnsG384Q1YOf9lIUSYEa9sk=
=yIuV
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.15 (GNU/Linux)
mQILBERqCJkBEACdqhZWdAbUHLIumXMEgv+GFjr1ZzVHgynnFOzztU/8sxZNa9cm
YV4HZpVfjMr7fos3ArzyiPPt/336cf7w9p79/ZS4rHSNPDMlPCtXYvFxUbvU0/GY
q4jwcBsrJ0xaJ9CP5bWyAgVKOb7Y6k0ktaLjRR+tDfMsHA4H0ClMoRr6ATw8NL0e
VCfAHuzqCKvX1If8ng+wTivtAhKvz/WwQiELNELmPfc5tZHOw8NgP/r0Pze18Hn2
dlAHu0WpC7uoR00vscsMIJiJJPcsxbL1F1eADKnk+wEy8Go+EJeJ5i0WoFbqD52q
Lv/C/oY6NVtVY0MBwtn+oQNSnQ4JBsB/Akdt53LAi0ZtNQxMyUW+76R8FCOmVCV8
WGiF5CPRP0yvG80AMBjBjKjHb/v8ov5MnIyFimzAHS1gQcUNxTEYA/5eFwoYcGcK
weGq9FUjPTzLQAgvp7XmOzHpSAfJ7qysxFTepNsSZZhgizJyInrdQldr+GYcUNqB
krD9MWmFop975OxhCTEnNv/HcE79r8WD26HzDFYxTiTJbr0pU/ivBzo+rjq+YG2V
stJk+udVYmZTnC4LmXus8JiNuqBXbxNscwCBpcJ8YcfCV6uh+7E0XfXZsgVUFLp1
NF+ylYRGTycOlWoZODrnJevZW7N9O3bWRx/G2P4bJD07LsDLe4i5hymf5QAGKbRQ
Tm92ZWxsIFByb3ZvIEJ1aWxkIChDb250YWN0IHNlY3VyaXR5QG5vdmVsbC5jb20p
IDxub3ZlbGwtcHJvdm8tYnVpbGRAbm92ZWxsLmNvbT6JAjMEEwECAB0FAkRqCJkG
CwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBHijLooZEiCKSFD/93vZHCAMLEfksU
KnvXl08bv1rfuamuyJnE3ANRE5RDyypriHMCnkVxazvQ2WI4W4UEjluL9+SzZwtV
ZvKVoAr31614nSyWwv2YnJTHfjMG+xRlkolZMnuIiB9PcCBo9+GPU0ABuzo4pEJW
NIRoSS1NFbAZBhtUnY0cN+trM5QObLl7xXTavLyGk//blkk57fov7GXsQJlZUig0
l2yt5XNyGpLUnTMDumHh8b389quF+0+ZfdwOy7A768xjipAZiTvIujBrEv51wrxh
0HBT0VGA0MhD9t0B+Ce4BM9P/iVMO00naaOp6PqMfPPKxQQqer8qy1i6UWBx95SY
mKZBIvOm2d9PezDxkckCu61r6krx1iKnT1wdprCAkIYwALK118SpbxuyGW0bhRHc
wsc/akzWH72fS0Xu49mvL4k4A2U9asdeQid3dMgbtm5mSWof0yiU/G4YNn0yeXoY
oG1VbCAqQbFX1Rvd6GITJVqI+ekW/uMA9BP78dF8wBeG0+QmpQnSf+eOsxB/RT8o
Kb4hHY+29MUlg+i9ceVt7hoKr03J/uIG5TXFXRYLaI0iAFVlKfWxpqDfS2XA4+dD
VYt+5RDgBcnxDaTB4FE9GqcYScNfe7+NFtL0p0wOPftbmgZzGjucTmrD8mDUNdqA
xGK7vlk4GATSfOQlq7G6LXW6RYnInohGBBMRAgAGBQJEazMlAAoJEKhO2uicgArK
2vMAn0TbVDESEVKVuFZStrfIzOvJQrR9AJsH733Ju1kE99GFrdfCeGqpckmNhg==
=E+qN
-----END PGP PUBLIC KEY BLOCK-----
[KdmGreeterTheme]
Encoding=UTF-8
Greeter=studio.xml
Name=SlapOs
Description=Theme for SlapOs
Author=<author>Romain Courteaud</author> using SUSE Studio
Copyright=(c) 2011 Novell, Inc.
Screenshot=preview.png
<?xml version="1.0"?>
<!DOCTYPE greeter SYSTEM "greeter.dtd">
<greeter>
<!-- first we take care of the background stuff -->
<item type="pixmap" id="background">
<normal file="background.jpg" alpha="1"/>
<pos x="0" y="0" width="100%" height="100%"/>
</item>
<!--
<item type="pixmap">
<normal file="opensuse.png" alpha="0.9"/>
<pos x="-10" y="10" width="64" height="26" anchor="ne"/>
</item>
-->
<!-- the user list -->
<item type="rect" id="userlist-background">
<pos x="12%" y="10%" width="22%" height="70%"/>
<fixed>
<item type="rect" id="userlist">
<pos x="0" y="0" width="100%" height="100%"/>
<show type="userlist"/>
<normal color="#ffffff"/>
<active color="#ffffff"/>
<prelight color="#ffffff"/>
</item>
</fixed>
</item>
<!-- remote logins have a hostname shown -->
<item type="rect">
<pos y="10" x="100%" width="box" height="box" anchor="ne"/>
<box ypadding="10" xpadding="13" spacing="25" orientation="horizontal">
<item type="label">
<text>%h</text>
<normal font="Sans 9" color="#ffffff" alpha="0.5" />
<pos x="50%" anchor="n"/>
</item>
</box>
<show modes="remote,remote-flexi" />
</item>
<!-- timer -->
<item type="rect" id="timed-rect">
<show type="timed"/>
<normal color="#FFFFFF" alpha="0.1"/>
<pos anchor="c" x="50%" y="75%" width="box" height="box"/>
<box orientation="vertical" min-width="400" xpadding="10" ypadding="5" spacing="0">
<item type="label" id="timed-label">
<normal color="#ffffff" font="Sans 12"/>
<pos x="50%" anchor="n"/>
<!-- Stock label for: User %s will login in %d seconds -->
<stock type="timed-label"/>
</item>
</box>
</item>
<!-- the login box contents, positioned freely -->
<item type="rect">
<pos y="50%" x="55%" width="box" height="box" anchor="c"/>
<box ypadding="5" xpadding="5" spacing="25" orientation="horizontal">
<!-- "(o) |" logo -->
<item type="pixmap">
<normal file="logo.png" alpha="1"/>
<pos y="40%" x="50%" width="60" height="60" anchor="c"/>
<show type="!userlist"/>
</item>
<item type="rect">
<pos width="box" height="box"/>
<box ypadding="5" xpadding="5" spacing="15" orientation="vertical">
<!-- balance out the caps-lock and timer spacing below -->
<!-- filler -->
<item type="rect">
<pos width="200" height="60"/>
</item>
<!-- label textentry pair -->
<!-- KDE way -->
<item type="rect">
<normal color="#FFFFFF" alpha="0"/>
<pos anchor="e" x="0" y="10%" width="box" height="box"/>
<box orientation="vertical" xpadding="0" ypadding="0" spacing="10">
<!-- Stock label for: Username: -->
<item type="label">
<pos anchor="nw" x="100%"/>
<normal color="#FFFFFF" font="Sans 12"/>
<stock type="username-label"/>
</item>
<!-- user entry -->
<item type="entry" id="user-entry">
<pos anchor="nw" x="100%" height="24" width="250"/>
</item>
<!-- Stock label for: Password: -->
<item type="label">
<pos anchor="nw" x="100%"/>
<normal color="#FFFFFF" font="Sans 12"/>
<stock type="password-label"/>
</item>
<!-- pw entry-->
<item type="rect">
<normal color="#ff0000" alpha="0"/>
<pos anchor="nw" x="100%" height="24" width="300"/>
<fixed>
<item type="entry" id="pw-entry">
<pos anchor="nw" x="0" height="24" width="250"/>
</item>
<item type="pixmap" button="true" id="login_button">
<pos anchor="sw" x="255" y="-0" height="21"/>
<normal file="enter.png"/>
</item>
</fixed>
</item>
<item type="rect" id="plugin-specific-winbind">
<pos anchor="nw" x="100%" width="250"/>
<fixed>
<item type="label" id="domain-label">
<pos anchor="nw" x="0"/>
<normal color="#ffffff" font="Sans 12"/>
<stock type="domain-label"/>
</item>
<item type="entry" id="domain-entry">
<pos anchor="nw" x="3%" y="30" height="24" width="100%"/>
</item>
</fixed>
</item>
</box>
</item>
</box>
</item>
</box>
</item>
<item type="rect" id="caps-lock-warning">
<normal color="#FFFFFF" alpha="0.5"/>
<pos anchor="c" x="50%" y="75%" width="box" height="box"/>
<box orientation="vertical" min-width="400" xpadding="10" ypadding="5" spacing="0">
<item type="label">
<normal color="#000000" font="Sans 12"/>
<pos x="50%" anchor="n"/>
<!-- Stock label for: You've got capslock on! -->
<stock type="caps-lock-warning"/>
</item>
</box>
</item>
<item type="label" id="pam-error">
<pos x="50%" y="65%" anchor="c"/>
<normal font="Sans Bold 12" color="#ffffff"/>
<text> </text>
</item>
<!-- session/language/disconnect buttons -->
<item type="rect">
<pos y="100%" x="20" width="100%" height="10%" anchor="sw"/>
<box xpadding="10" spacing="10" orientation="horizontal">
<item type="rect" id="session_button" button="true">
<pos y="50%" width="box" height="100%" anchor="w"/>
<box xpadding="0" spacing="2" orientation="horizontal">
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="session"/>
</item>
</box>
</item>
<item type="rect" id="system_button" button="true">
<show type="reboot" modes="console"/>
<pos y="50%" width="box" height="100%" anchor="w"/>
<box xpadding="0" spacing="2" orientation="horizontal">
<item type="pixmap">
<normal file="dots.png" alpha="1.0"/>
<pos x="0" y="0" height="100%"/>
</item>
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="system"/>
</item>
</box>
</item>
<item type="rect" id="admin_button" button="true">
<show type="halt" modes="console"/>
<pos y="50%" width="box" height="100%" anchor="w"/>
<box xpadding="0" spacing="2" orientation="horizontal">
<item type="pixmap">
<normal file="dots.png" alpha="1"/>
<pos x="0" y="0" height="100%"/>
</item>
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="admin"/>
</item>
</box>
</item>
<item type="rect" id="disconnect_button" button="true">
<normal/>
<show modes="flexi,remote"/>
<pos y="50%" width="box" height="100%" anchor="w"/>
<box xpadding="0" spacing="2" orientation="horizontal">
<item type="pixmap">
<normal file="dots.png" alpha="1"/>
<pos x="0" y="0" height="100%"/>
</item>
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="disconnect"/>
<show modes="remote"/>
</item>
<item type="label">
<normal font="Sans 12" color="#ffffff" alpha="0.5"/>
<prelight font="Sans 12" color="#ffffff" alpha="1"/>
<active font="Sans 12" color="#ffffff" alpha="1"/>
<pos y="50%" anchor="w"/>
<stock type="quit"/>
<show modes="flexi"/>
</item>
</box>
</item>
</box>
</item>
</greeter>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment