<?xml version="1.0" encoding='ISO-8859-1'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"/usr/share/sgml/db41xml/docbookx.dtd"
[
<!ENTITY version "0.01">
<!ENTITY dx "DocBook-XML">
<!ENTITY ds "DocBook-SGML">
]>

<book>

<bookinfo>
<title>Update Media Howto</title>

<authorgroup>
<author>
	<firstname>Lenz</firstname>
	<surname>Grimmer</surname>
</author>

<author>
        <firstname>Klaus</firstname>
        <surname>Kaempf</surname>
</author>

<author>
        <firstname>Steffen</firstname>
        <surname>Winterfeldt</surname>
</author>

<editor>
	<firstname>Hendrik</firstname>
	<surname>Vogelsang</surname>
</editor>

</authorgroup>

<copyright>
<year>2006</year>
<holder>SUSE LINUX Products GmbH</holder>
</copyright>

<abstract>
<para>
The different Update Media. Version 4.03 - Jan 2006
</para>
</abstract>
</bookinfo>

<chapter id="id_into">
	        <title>Introduction</title>
	        <para>
		This Document describes the various Update Media you can create for SuSE/UnitedLinux. They make it possibile to change nearly everything before,
		during and after the installation process. These Update Media are especially designed for independent hardware and software vendors to provide
		their customers with software updates/fixes for the SuSE/UnitedLinux distributions.
	        </para>

<section id="id_whatis">
		<title>What is an Update Medium?</title>
		<para>
		An Update Medium is a changeable Media (CD/DVD or a floppy disk) or a directory in the installation source.
		In theory it is possible to use any changeable media (like USB sticks) but this is not yet implemented in the YaST installer.
		( see <xref linkend="id_boot"/>) to learn how SuSE Linux 9.0 / UnitedLinux SP3 makes that possible )
		</para>

		<section id="id_changeable">
		<title>CD/DVD Installations</title>
		<para>
		If you use a Floppy, CD or a DVD the media has to be formated in a Linux readable filesystem because the installer mounts it. For floppys ext2, minix or
		dosfs and for cdroms iso9660 filesystems are good choices.
		</para>
		</section>

                <section id="id_instsource">
                <title>Harddisk/NFS/SMB Installations</title>
                <para>
		If the installation source is on a Harddisk or somewhere on the Network you can create the Update Media layout in the root directory of the installation
		source.
		</para>
		</section>

		<section>
		<title>HTTP/FTP Installations (>= SL 9.0)</title>
		<para>
		For HTTP/FTP installations you can put a file 'driverupdate' into the root of your installation source. This file is a (possibly compressed) filesystem
		image that contains the Update Media.
		</para>
		</section>
</section>

<section id="id_types">
		<title>The different types of Update Media</title>
		<para>
		There are 3 different Types of Update Media

		<orderedlist>
	        <listitem>
	          <para>
	        The Driver Update makes it possible to install SuSE/UnitedLinux on devices that were not supported at the time the distribution was created and be
		able to boot the installed system afterwards without having to manually install the new device drivers after the installation.
	          </para>
	        </listitem>

	        <listitem>
	          <para>
	        The Vendor Update provides an easy way to install software, or even device drivers, that are not included in the distribution, with YaST. 
		This can be done either at the end of the installation or anytime in a running system with the YaST Vendor CD module.
	          </para>
	        </listitem>

	        <listitem>
	          <para>
	        The YaST Update makes it possible to update parts of the YaST Installer before installation commences.
	          </para>
	        </listitem>
	      </orderedlist>

		</para>
</section>

<section id="id_updates">
                <title>Changes since SuSE Linux 9.0 / UnitedLinux Service Pack 3</title>
                <para>
		With SuSE Linux 9.0 / UnitedLinux Service Pack 3 the Layout of the Update Media has slightly changed.
		The new features are:

                <orderedlist>

                <listitem>
                  <para>
		The new Layout allows more than one Driver Update ( see <xref linkend="id_dud"/>) on a single medium.
		  </para>
                </listitem>


                <listitem>
                  <para>
	        The meaning of the ALT Key in the bootloader has changed. You can now choose between several update media in linuxrc.  
                  </para>
                </listitem>

                <listitem>
                  <para>
                Driver updates work with ftp/http installations. 
                  </para>
                </listitem>

                <listitem>
                  <para>
                USB storage device handling works even if you apply driver updates using the usb floppy drive. 
                  </para>
                </listitem>

                <listitem>
                  <para>
                There's a menu entry in linuxrc ('Kernel modules' --> 'Add Driver Update') 
		allowing you to apply driver updates in 'manual' mode 
                  </para>
                </listitem>

		<listitem><para>
                An optional driver update config file 'dud.config' (see <xref linkend="id_dud_config"/>).
                </para></listitem>

		</orderedlist>

		The new code is backward compatible. Means you can use your old Update Media also with SuSE Linux 9.0 and UnitedLinux SP3. However the new
		layout has several improvements and you should use them. The changes in this Document are marked with >= SL 9.0.
		</para>

</section>

<section id="id_updates_91">
                <title>Changes in SUSE LINUX 9.1 / SLES9</title>
                <para>
		SUSE LINUX 9.1 / SLES9 adds one new feature:

                <orderedlist>

                <listitem>
                  <para>
                You can use rpms (instead of update.tar.gz) to add files to the installed system. Just
                add them to the 'install' directory (see <xref linkend="id_update_rpm"/>).
		  </para>
                </listitem>

		</orderedlist>

		</para>

</section>

<section id="id_updates_sles9_sp1">
                <title>Changes in SLES9 Service Pack 1</title>
                <para>
		SLES9 SP1 adds two new features:

                <orderedlist>

                <listitem><para>
                You can add an 'inst-sys' directory. All files in this directory will be updated
                in the installation environment (see <xref linkend="id_inst_sys"/>).
		</para></listitem>

		<listitem><para>
                Driver updates can have a priority determining the order in which they are applied (see <xref linkend="id_dud_config"/>).
                </para></listitem>

		</orderedlist>

		</para>

</section>

<section id="id_resources">
		<title>Resources</title>
		<para>
		The latest version of this Document is always at ftp://ftp.suse.com/pub/people/hvogel/Update-Media-HOWTO/
		</para>
</section>
</chapter>

<chapter id="ide_common">
		<title>Common Stuff</title>
		<para>
		The three different types of Update Media share some settings and structure. 
		</para>

<section id="id_dirstruct">
		<title>Directory structure</title>
		<para>
		The base directory structure for all the Update Media is
		</para>
	
		<screen width="80">
		 /linux/[distribution]/[architechture]-[version]/
		</screen>
		
		<para>
		This way you can have one Update Medium for multiple distributions, architectures and versions. In theory the Operating System string (linux)
		is also changeable but the YaST Installer works only under Linux yet.
		</para>

		<para>
		The [distribution] string is the name of the distributor. For now the only strings that are valid here are suse and UnitedLinux.
		The range of architectures is rather wide. Up to now the [architechture] string is
		i386, ia64, ppc, ppc64, s390, s390x sparc or x86_64.  The [version] string is either the product version of the distribution, i.e 8.1 or sles7, sles8,
		slec1, ul1. 
		</para>

		<example>
		<title>Common directory structure</title>
		<screen width="80">
		linux/
		`-- suse
		 |   `-- i386-8.1
		 |   |   
		 |   `-- ppc-7.3
		 |       
		 --UnitedLinux
		     `-- x86_64-ul1
		     | 
		     `-- ia64-sles8
		</screen>
		</example>

		<section id="id_dirstructupdate">
		<title>[number] prefix for the directory structure (>= SL 9.0)</title>
		<para>
		Since SuSE Linux 9.0 / UnitedLinux SP3 you can use a decimal number in front of the Operating System string. The [number] part is optional and can be used to
		easily combine several driver updates into one.  Updates from one medium are applied ordered by [number]. If a directory without [number] exists,
		it is applied first.
		</para>

		<example>
		<title>Common directory structure with a [number] prefix</title>
                <screen width="80">
		01/
		`-- linux/
                |	`-- suse
	        |            `-- i386-8.1
                02/
		`-- linux/
                        `-- suse
                             `-- i386-8.1
                </screen>
                </example>

		<para>
		This is extremely helpfull if you have Driver Updates where the kernel modules depend on each other.
		</para>
		</section>
</section>

<section id="id_nameid">
		<title>Update Media name and id (>= SL 9.0)</title>
		<para>
		linuxrc keeps track of updates it applies ('Show Driver Updates'). For this you can assign a name and an id to an update using the file
		dud.config below the base directory ( see <xref linkend="id_dirstruct"/>).
		</para>
		
		<example>
		<title>Contents of the dud.config file</title>
		<screen width="80">
		UpdateName: Sample Update
		UpdateID:   some random stuff
		</screen>
		</example>

		<para>
		UpdateName may appear more than once. If UpdateName is missing, the names of the updated modules are used. UpdateID serves only to prevent updates from
		getting applied more than once accidentally.
		</para>
</section>

<section id="id_combi">
		<title>Combinations of different Update Media</title>
		<para>
		Because the Update Media use the same base structure and the same functionality to "detect" the [distribution], [architecture] and [version] they
		can easily be combined. You can have one cdrom that provides the possibility to install SuSE/UnitedLinux with a fixed device driver, add extra
		documentation for it and install your newest application all at once.
		</para>
</section>

<section id="id_boot">
		<title>Applying Updates</title>
		<para>
		There are two ways of applying updates from an Update Media. From a changeable media (see <xref linkend="id_changeable"/>) or from the installation source 
		(see <xref linkend="id_instsource"/>). Applying updates from a changeable media might require user interaction. Thats the case when:
		</para>		

		<orderedlist>
		<listitem>
		<para>
		The Update Media is on the same media type as the installation kernel. For example a media change will be required if you boot the installation from a floppy
		and the Update Medium is also a floppy. 
		</para>
		</listitem>

		<listitem>
		<para>
		You have multiple Update Media on different changeable media. For example a Driver Update on a floppy and a YaST Update on a CD. (>= SL 9.0)
		</para>
		</listitem>
		</orderedlist>

		<para>
		If thats the case you can press the 'driver update' key at the boot screen or use the parameter 'driverupdate=1'. linuxrc will apply
		any driver updates it finds on floppy disk and then ask the user for further driver updates (>= SL 9.0).

		If you start in manual mode, use the 'Kernel modules' --> 'Add Driver Update' menu entry to load driver updates.
		</para><para>
		SLES10 for i386 and x86-64 offers to load driver updates from CD-ROM via BIOS functions which is helpful if
		you cannot access the CD drive from linux in any way. For this, pack the complete driver update
		data (<emphasis>with</emphasis> number prefix to avoid problems when applying several updates - see <xref linkend="id_dirstructupdate"/>) into a (optionally gzipped) cpio archive
		(use 'cpio -H newc') and put the archive on a CD. At the boot prompt add, e.g.,
		'driverupdate=/update1,/update2' to load updates '/update1' and '/update2'. If '/update2' is on a
		different CD than '/update1', add a '+' in front of it ('driverupdate=/update1,+/update2')
		indicating you want a prompt for changing the CD before '/update2'.
		</para>
</section>
</chapter>

<chapter id="id_dud">
		<title>Driver Update</title>
		<para>
		The Driver Update is providing a possibility to install SuSE/UnitedLinux on devices that were not supported at the time the distribution was created and be
		able to boot the installed system afterwards without having to manually install the new device drivers after the installation. Even though linuxrc
		(the first stage of the installation process) has the ability to load driver modules from a separate modules floppy, these modules are not used for the
		installed system afterwards, because the YaST Installer installs a kernel RPM during the package installation. This driver update feature will use a
		provided kernel driver module during the installation process and will also place it into the installed system in order to be able to boot up the
		installed system later.
		</para>

<section id="id_dud1">
		<title>Included files on the update medium</title>
		<para>
		For this type of Update Medium you need two subdirectorys below the base directory structure described above.

		One is the install directory: install/. This directory contains an optional pre-installation script named update.pre, the driver modules for all
		possible kernel versions either as a gzipped tar archive named update.tar.gz or as separate rpms (*.rpm, since SL 9.1) and two optional post-installation scripts named update.post and update.post2 (>= SL 9.0).
		
		The other directory is the modules directory: modules/. It contains the uncompressed updated driver modules (*.o or *.ko) for the installation kernel that are
		loaded during the initial installation. If you need to ensure a specific module loading order you can add
		a file 'module.order' (>= SLES9 SP1) which has one module name (without '.ko') per line. Modules are loaded
		in the order they are listed in that file.
		</para>

		<example>
		<title>Contents of a Driver Update Medium</title>
		<screen width="80">
		linux/ 
		`-- suse/ 
		     `-- i386-9.1/
		         `-- dud.config         # >= SL 9.0
			 |-- install/
		         |    `-- update.pre
			 |     -- update.tar.gz
			 |     -- update.post
			 |     -- update.post2  # >= SL 9.0
			 |     -- foo.rpm       # >= SL 9.1
			 |     -- bar.rpm       # >= SL 9.1
			 |-- modules/
			 |    `-- module.order	# >= SLES9 SP1
			 |    `-- module1.ko
			 |    `-- module2.ko
			 |    `...
			 `-- inst-sys/          # >= SLES9 SP1
			      `-- foo
		</screen>
		</example>

		<section id="id_update_tgz">
		<title>update.tar.gz</title>
		<para>	
		The file update.tar.gz is a gzipped tar archive that includes the directory structure and the updated driver modules. The archive should contain the
		driver modules compiled for all kernel versions available on the distribution in both SMP and uniprocessor configuration. In addition,
		the tarball may include new device nodes in /dev/ or other files that should be installed into the system (e.g. additional documentation) - it will
		simply be extracted in the root directory of the installed system.
		</para>

		<note>
		<para>
		The files contained in this archive will not be listed in the RPM database and will overwrite files that are already installed on the system!
		</para>
		</note>
		</section>

		<section id="id_update_rpm">
		<title>*.rpm (>= SL 9.1)</title>
		<para>
		Instead of unpacking a tar archive, you might prefer to use rpm packages. Starting with
		SUSE LINUX 9.1 all rpms that are in the 'install' directory will be installed.
		</para>
		</section>

		<section id="id_pre">
		<title>update.pre</title>
		<para>
		update.pre is a shell script, that contains commands that should be executed within the running installation system right after the YaST
		installer is started, e.g. creating device entries using mknod or echoing parameters into /proc. If you need the driver module to acces the 
		root filesystem you can use this <ulink url="../samples/update.pre">update.pre script</ulink> to add the driver module to the initial ramdisk (initrd).
		</para>
		</section>

		<section id="id_post">
		<title>update.post</title>
		<para>
		update.post is an shell script that is executed by the YaST installer after the basic installation has finished and the update.tar.gz
		archive has been extracted into the installed system. This script is executed in the root directory of the installed system. It can be used for
		adding or changing entries in modules.conf, creating device nodes in the installed system etc.
		</para>
		</section>

		<section id="id_post2">
		<title>update.post2 (>= SL 9.0)</title>
		<para>
		There are situations for which update.post is run too early (say you want to apply changes to the boot loader config). A new script 'update.post2' is introduced that will be
		run just before YaST2 unmounts the installed system.
		</para>
		</section>

		<section id="id_inst_sys">
		<title>inst-sys (>= SLES9 SP1)</title>
		<para>
		Sometimes it is necessary to update files in the installation environment itself. All files below
		the 'inst-sys' directory will be updated. The directory structure is preserved. If you want to replace
		the hardware detection library, for example, add it as 'inst-sys/usr/lib/libhd.so.X.Y'.
		</para>
		</section>

		<section id="id_dud_config">
		<title>dud.config (>= SL 9.0)</title>
		<para>
		The driver update config file consists of lines with the format 'key: value'. Valid keys are

		<itemizedlist>
	        <listitem><para>
	        UpdateName
	        </para><para>
	        A short description, shown in linuxrc when the driver update is applied. This key may appear more than once.
	        </para>
	        
	        </listitem><listitem><para>
	        UpdateID
	        </para><para>
	        An unique string identifying the update. There's no meaning attached to the value. It is only used to
	        avoid applying the same update accidentally twice.
	        </para>

	        </listitem><listitem><para>
	        UpdatePriority (>= SLES9 SP1)
	        </para><para>
	        A number less than 900. Updates with higher numbers are applied after updates with lesser numbers.
	        Normally, updates are assigned increasing priorities starting with 0 in the order they are found.
	        Note that this does not work for module updates as modules are always loaded immediately.
	        </para>

	        </listitem>
	        </itemizedlist>

		</para>
		</section>

		<section id="id_duddm">
		<title>Dummy Driver Module</title>
		<para>
		To test if your Driver Update Medium works you can use this <ulink url="../samples/duddm.c">dummy driver module</ulink>. You can compile it with the
		command below.
		</para>

		<screen width="80">
		gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -c duddm.c -I/lib/modules/`uname -r`/build/include
		</screen>
		</section>

</section>

<section id="id_dud2">
		<title>Creating the driver modules</title>
	
		<para>
		Documentation on how to build kernel modules for SuSE Linux / UnitedLinux is available at <ulink url="http://www.suse.de/~agruen/kernel-doc/">http://www.suse.de/~agruen/kernel-doc/</ulink>
		</para>


		<para>
		Lets assume you have updated the module e100 for the default kernel of SuSE Linux 9.0. Then you need the following structure in the update.tar.gz ( See
		<xref linkend="id_update_tgz"/> ) file.
		</para>

                <screen width="80">
		lib/modules/2.4.21-override-default/kernel/drivers/net/e100/e100.o
                </screen>

		<para>
		You can create the update.tar.gz file using the following commands:
		</para>

		<screen width="80">
		cd /tmp
		mkdir -p lib/modules/2.4.21-override-default/kernel/drivers/net/e100/
		cp /path/to/your/updated/e100.o lib/modules/2.4.21-override-default/kernel/drivers/net/e100/
		tar cvzf update.tar.gz lib/
		</screen>

		<para>
		This will create a compressed tar archive update.tar.gz in the /tmp directory, which can now be copied to the install directory
		( See <xref linkend="id_dud1"/> ) on the Driver Update medium.

		<note>
		<para>
		The directory names in the tar archive must not include the leading slash! Make sure all files belong to user "root" and have the correct permissions
		(modules should have -rw-r--r--, directories should have -rwxr-xr-x).
		</para>
		</note>
		</para>

</section>

<section id="id_dud3">
		<title>Workflow for the Driver Update</title>
		<para>
		The Driver Update workflow consists of the following steps:


                <itemizedlist>
             
		<listitem>
                <para>
                The system boots from the installation CD or floppy disk syslinux/isolinux starts up
                </para>
                </listitem>
                
		<listitem>
                <para>
		The user adds 'driverupdate=1' to the kernel command line
		(or activates driver updates using the graphical boot loader interface). (optional. see <xref linkend="id_boot"/>)
                </para>
                </listitem>
                
                <listitem>
                <para>
		syslinux prompts the user for an "Update Medium" if a media change has been requested.
                </para>
                </listitem>

                <listitem>
                <para>
		The user inserts the new media and presses the Enter key, syslinux boots into the update mode of linuxrc
                </para>
                </listitem>

                <listitem>
                <para>
		linuxrc mounts the media
                </para>
                </listitem>

                <listitem>
                <para>
		linuxrc copies all files from the install directory into a directory in a RAM disk mounted below /update.
                </para>
                </listitem>

                <listitem>
                <para>
                linuxrc loads all driver modules below the modules directory by first unloading all modules with the same name and loading the new modules
		from this directory. This happens in the order the modules have been installed on the media! This is important if some driver modules depend on other.

		<note>
		<para>
		See <xref linkend="id_dirstructupdate"/> how the new layout since SuSE Linux 9.0 / UnitedLinux SP3 handles this.
		</para>
		</note>
 
                </para>
                </listitem>

                <listitem>
                <para>
                linuxrc unmounts the update media
                </para>
                </listitem>

                <listitem>
                <para>
                now linuxrc kicks back and starts the Installer to continue the installation
                </para>
                </listitem>

                <listitem>
                <para>
                before starting the installation of packages, the Installer first execute the update.pre script.
                </para>
                </listitem>

                <listitem>
                <para>
                after the initial installation, the Installer extracts update.tar.gz in the root directory of the installed system and then runs update.post.
                </para>
                </listitem>

		</itemizedlist>
		</para>

</section>
</chapter>

<chapter id="id_vud">
		<title>Vendor Update</title>
		<para>
		The Vendor Update is a more general Update Medium. It is not limited to the installation of kernel modules and its not limited to only being used during
		the installation. The YaST Vendor CD module makes it possible for the user to install this Update Medium into a running System.
		</para>

<section id="id_vud1">
		<title>Included files on the update medium</title>
		<para>
		All the files for the Vendor Update sit in the base directory ( see <xref linkend="id_dirstruct"/>) of the Update Media.
		</para>

		<para>
		Each Vendor Update must be accompanied by at least two files.

		<itemizedlist>
                <listitem>
                <para>
                One installation script with the suffix .ins
                </para>
                </listitem>
		<listitem>
                <para>
                and one description file with the suffix .des
                </para>
                </listitem>
                </itemizedlist>
		</para>

		<para>
		YaST first looks at all files with a .ins extension. These are the installation script files, one per Vendor Update. The file name
		(without the .ins extension) serves as a key to identify the Vendor Update and the accompanying description files. This makes it possible to put
		multiple Vendor Updates into one directory.
		</para>

		<para>
		The installation script is free to do what it wants. Usually, the script should first check if it's applicable. Probing the hardware and checking
		the kernel version are minimum requirements to be checked by the script. The YaST Vendor CD module executes this script with the full path to the
		base directory as parameter. Based on this parameter, the script can easily extract further data from the CD.

		<note>
		<para>
		 Keep in mind that only standard linux tools will be available. For example, perl is considered a standard tool, tcl is not. And the script together
		with any data on the CD should be self-contained.. It should not have any package dependencies which exceed a minimal installation.
		</para>
		</note>
		</para>

		<para>
		There should be multiple description files for each Vendor Update, one per supported language. At least a default (in English) should be provided.
		The description files have .desc as the extension start with the name (key) of the corresponding .ins file. In order to support multiple language description
		files, YaST appends the ISO language code to the Vendor update name before loading the default description file. For example, the ISO language code for
		 British English is en_GB. The english description file for a Vendor Update called modem would be modem-en_GB.desc.

		If the full (5-char) ISO code cannot be found, YaST falls back to the two char language code. With this mechanism, several languages (i.e. de_AT for
		Austrian, de_CH for Swiss, and de_DE for German) can be supported by a single description file called modem-de.desc

		In order to support non ISO-1 (non western europe / us) languages, like Japanese, the description file must be coded in UTF8. UTF8 is the standard
		coding used in Linux.
		</para>

		<example>
		<title>Contents of a Vendor Update Medium</title>
		<screen width="80">
		linux/
		`-- suse/
		    `-- i386-8.1/
			`-- modem.ins
			`-- modem.desc
			`-- modem-zh_CN.desc
			`-- modem-ja_JP.desc
			`-- speedblazer.ins
			`-- speedblazer.desc
			`-- speedblazer-de.desc
			`-- speedblazer-fr.desc
			`-- speedblazer-pt_BR.desc
		</screen>
		</example>

		<para>
		The .desc files without a language code should contain the default description in English.
		</para>
</section>

<section id="id_vud2">
		<title>Workflow for the Vendor Update</title>
		<para>
		The Vendor Update workflow consists of the following steps

                <itemizedlist>
                <listitem>
                <para>
		The User clicks on the Vendor CD Button in YaST
                </para>
                </listitem>
                <listitem>
                <para>
		When started, the Vendor Update CD module of YaST tries to mount /dev/cdrom on /var/adm/mount. If it fails YaST tries to mount /dev/fd0 on /var/adm/mount.
		If this also fails the user is asked to insert the vendor driver CD.
                </para>
                </listitem>
                <listitem>
                <para>
		After a successful mount, YaST tries to find the correct directory as described above. For a SuSE Linux 8.1 (i386) distribution, YaST would look for the
		linux/suse/ on the CD. If this fails, the CD is rejected with the message "Couldn't find driver data on the CD-ROM". Then the directory linux/suse/i386-8.1/
		is searched. YaST will fail with "CD-ROM data doesn't match running SuSE Linux" if this directory doesn't exist. This and all further error messages will be
		presented in the correct language the user has choosen at the start of the installation.
                </para>
                </listitem>
                <listitem>
                <para>
		Next, YaST scans the directory for installation script files (files ending with .ins). If no files with extension .ins can be found, YaST rejects the CD
		with "Couldn't find driver data on the CD-ROM".
                </para>
                </listitem>
                <listitem>
                <para>
		For each installation script file, a matching description file is searched. The match algorithm is described above. If no matching description file can
		be found, the driver is silently skipped.
                </para>
                </listitem>
                <listitem>
                <para>
		For each driver, the first matching description file is read in and presented to the user in a pop-up window. The window has two buttons, one labled
		"Yes" the other one labled "No". The button labels will be properly translated by YaST to the correct language.
                </para>
                </listitem>
                <listitem>
                <para>
		If the user clicks on the "No" button, the driver is skipped.
                </para>
                </listitem>
                <listitem>
                <para>
		If the user clicks on the "Yes" button, the installtion script file is copied to the /tmp directory of the running system. This copying is done
		to prevent errors when executing files from mounted media, which is not normally allowed by default. YaST does a chmod 2774 to the file in order to force
		read, write, and execute permissions for root. Then the working directory is set to /tmp and the installation script is executed with the full directory
		path as the argument. There is no automatic mode, the user is asked separately for each Vendor Update.
                </para>
                </listitem>
                <listitem>
                <para>
		YaST evaluates the exit code of the script. If it is non-zero, a popup with the message "Installation failed" is presented to the user.
                </para>
                </listitem>
                <listitem>
                <para>
		After execution, the installation script is removed from /tmp. The script should remove any temporary files that it creates during execution.
                </para>
                </listitem>
                <listitem>
                <para>
		After all .ins files have been processed, YaST present a summary with the number of successfully installed Vendor Updates. If no Vendor Updates could
		be successfully installed, YaST pops up a message reading "Couldn't find driver data on the CD-ROM".
                </para>
                </listitem>
                <listitem>
                <para>
		As the final step, /var/adm/mount will be unmounted.
                </para>
                </listitem>
                </itemizedlist>
		</para>
</section>

</chapter>

<chapter id="id_yud">
		<title>YaST Update</title>
		<para>
		A YaST Update is a Update Medium that contains a directory with the name of y2update.
		The directory contains a file hierarchy identical to that under /usr/share/YaST2. It can be used to replace config files
		or YaST2 components from the CD with new versions.
		</para>

<section id="id_yud1">
		<title>Included files on the update medium</title>
		<para>
		For a YaST Update only it is sufficient to have a directory y2update in the base directory ( see <xref linkend="id_dirstruct"/>)
		of the Update Medium.  Everything present in this directory before YaST starts will be used by the installer.
		</para>

                <example>
                <title>Contents of a YaST Update Medium</title>
                <screen width="80">
                linux/
                `-- suse/
                    `-- i386-8.1/
                	`-- y2update/
			    `-- clients/
			    |  `-- inst_software.ycp
			    `--	config/
				`-- groups.y2cc
                </screen>
                </example>

</section>

<section id="id_yud2">
		<title>Workflow of the YasT Update</title>
		<para>
		The YaST Update workflow consists of the following steps

		<itemizedlist>
	        <listitem>
                <para>
                The system boots from the installation CD or floppy disk syslinux/isolinux starts.
                </para>
                </listitem>

                <listitem>
                <para>
                The user adds 'driverupdate=1' to the kernel command line
                (or activates driver updates using the graphical boot loader interface). (optional. see <xref linkend="id_boot"/>)
                </para>
                </listitem>

                <listitem>
                <para>
                syslinux prompts the user for an "Update Medium" if a media has been requested.
                </para>
                </listitem>

                <listitem>
                <para>
                The user inserts the media and presses the Enter key, syslinux boots into the update mode of linuxrc
                </para>
                </listitem>

                <listitem>
                <para>
                linuxrc mounts the media
                </para>
                </listitem>

                <listitem>
                <para>
                linuxrc copies linux/[distribution]/[architechture]-[version]/y2update/* to /update/y2update
                </para>
                </listitem>

                <listitem>
                <para>
                linuxrc umounts the media
                </para>
                </listitem>

                <listitem>
                <para>
                The YaST Installer starts
                </para>
                </listitem>
                </itemizedlist>
		</para>
</section>
</chapter>
</book>
