specifying installation repositories in linuxrc
1. SUSE tags install media
(repo meta data are in /suse/setup/descr/)
linuxrc identifies this repo by checking for a file '/content' in the
installation repository. The file must have a valid signature
('/content.asc'). linuxrc parses this file for sha* digests (the
These digests are used to verify any files linuxrc accesses from the
To specify the installation repository, use the
linuxrc also loads a file system image containing the installation system
YaST) from the repository. The default location is
In the example above on
x86_64 this would be
It is possible to specify a different location (e.g. in case the
installation system is not part of the repository) using the
option. Either as a separate option or appended to the
install=ftp://example.com/foo instsys=disk:/bar/root # is the same as install=ftp://example.com/foo?instsys=disk:/bar/root
instsys can be a relative url (a plain file name) which is then interpreted as relative
install=ftp://example.com/foo instsys=bar/root # is the same as install=ftp://example.com/foo instsys=ftp://example.com/foo/bar/root
Note that even though
instsys can point anywhere, the files downloaded
from there must still match the digests obtained from
/content from the repository location.
Note also, that the full path as specified in
content must appear in the
url. For example, if
content provides a sha256 digest for
boot/x86_64/root this will not be applied to
2. plain repomd repository
(repo meta data are in /repodata/)
linuxrc identifies this repo by checking for a file '/repodata/repomd.xml' in the installation repository. This file's signature is not checked (linuxrc does not parse this file).
2.1. getting file digests
There is no longer a
content file. Instead, there is now a
file (with sligthly different format) containing sha256 digests of
CHECKSUMS must be signed (detached signature in
linuxrc gets the digests from two locations:
contentfile included in the initrd at installation system build time (placed directly into linuxrc's config directory)
CHECKSUMSfrom the repo location
content in the initrd in a place linuxrc finds it, do something like:
mkdir -p /tmp/foo/etc/linuxrc.d cp content /tmp/foo/etc/linuxrc.d/ cd /tmp/foo find . | cpio -o -H newc | xz --check=crc32 -c >>initrd_on_boot_medium
3. Multi-repository medium
A multi-repository medium contains several repositories in subdirectories
indexed in the
/media.1/products file. Each subdirectory contains
a separate repository with own metadata.
In that case linuxrc saves the URL path to the root directory into
ZyppRepoURL value in
/etc/install.inf file. YaST will detect
multiple subdirectories and handle that in a special way.
4. No installation repository
In some special cases (PXE boot) it is possible to start the installation without any installation repository. In that case YaST uses an integrated installation repository present in the inst-sys.
no_repo=1 boot option to activate this mode. In this case linuxrc does
not save the
ZyppRepoURL value into the
5. components linuxrc reads
linuxrc reads files from two distinct locations:
- the installation system ('inst-sys')
- the installation repository ('repo')
The repo location is specified with the
install option. Optionally, the inst-sys location is specified
instsys option. If it's not given, it is implicitly assumed to be
boot/<ARCH>/root, relative to the
See the previous sections for examples.
5.1. files read from inst-sys location
linuxrc replaces the last path component from the location url with
to get the url of a config file and tries to read it.
If the config file is not there, linuxrc will continue to read the inst-sys image as originally specified and mount it.
If the config file was found (the normal case) it is parsed to determine the components needed for the inst-sys and then the components are loaded.
A simple config file may look like:
# boot/x86_64/config root: common root bind rescue: common rescue
Meaning that the
root image consists of three files
bind and the
rescue image of two parts
rescue. So, assuming the standard locations,
linuxrc will load
boot/<ARCH>/bind in the first case and
boot/<ARCH>/rescue in the second.
More general the syntax is:
part: sub_part1 sub_part2 ... sub_part1: sub_sub_part11 sub_sub_part12 ...
You can modify a part specification by:
- prefixing it with
?to mark it optional
?list=path_spec1,path_spec2,...to indicate you need not the full image but only the files matching any of the path specs (shell glob syntax)
?copy=1to indicate that this is not an image or archive to mount or unpack but a plain file to copy to the
<lang>(verbatim!) as macro to be replaced by the current locale
With this in mind a more realistic config file example could look like:
root: common root bind ?cracklib-dict-full.rpm ?yast2-trans-<lang>.rpm ?configfiles rescue: common rescue ?cracklib-dict-full.rpm configfiles: control.xml?copy=1 yast2-trans-ko.rpm: yast2-trans-ko.rpm un-fonts.rpm?list=*/UnDotum.ttf
Here, the inst-sys would consist of
cracklib-dict-full.rpm (if it exists),
yast2-trans-en_US.rpm (if it exists and assuming current locale is
en_US), and additionally (if it exists),
control.xml is downloaded and stored as
For the Korean locale we'll need also a special font rpm (
un-fonts.rpm) but only
UnDotum.ttf from it.
5.2. files read from repo location
In addition to the files described in sections 1. and 2., linuxrc will try to read these files (and store them in
and, if no
AutoYaST option has been given, it will read and parse
and then add an
AutoYaST option pointing to the downloaded file.
Note this happens after downloading the files in section 3.1. and may overwrite them.