The user interface customization involves the following high-level tasks:
Complete the prerequisites.
Create custom branding material (if you plan to customize the graphical elements).
Customize the graphical elements (if you plan to customize them).
Customize the product name (if you plan to customize it).
Create a product.img file.
Create a custom Boot image.
Note
To create the custom branding material, first refer to the default graphical element files type and dimensions. You can accordingly create the custom material. Details about default graphical elements are available in the sample files that are provided in the Customizing graphical elements section.
To customize the graphical elements, you can modify or replace the customisable elements with the custom branded material, and update the container files.
The customisable graphical elements of the installer are stored in the /usr/share/anaconda/pixmaps/ directory in the installer runtime file system. This directory contains the following customisable files:
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Additionally, the /usr/share/anaconda/ directory contains a base CSS stylesheet named anaconda-gtk.css, which determines the file names and parameters of the main UI elements - the logo and the backgrounds for the sidebar and top bar. Product-specific stylesheet customizations are located in a separate file (/usr/share/anaconda/pixmaps/redhat.css) and override the defaults from the anaconda-gtk.css file. Use a product-specific file for CSS customizations as it only overrides the particular elements of the stylesheet as needed.
The product-specific redhat.css file has the following content that can be customized as per your requirement (for the full stylesheet specifications, see content of the anaconda-gtk.css file):
/* theme colors/images */
@define-color product_bg_color @redhat;
/* logo and sidebar classes */
.logo-sidebar {
background-image: url('/usr/share/anaconda/pixmaps/sidebar-bg.png');
background-color: @product_bg_color;
background-repeat: no-repeat;
}
/* Add a logo to the sidebar */
.logo {
background-image: url('/usr/share/anaconda/pixmaps/sidebar-logo.png');
background-position: 50% 20px;
background-repeat: no-repeat;
background-color: transparent;
}
/* This is a placeholder to be filled by a product-specific logo. */
.product-logo {
background-image: none;
background-color: transparent;
}
AnacondaSpokeWindow #nav-box {
background-color: @product_bg_color;
background-image: url('/usr/share/anaconda/pixmaps/topbar-bg.png');
background-repeat: no-repeat;
color: white;
}
/* theme colors/images */
@define-color product_bg_color @redhat;
/* logo and sidebar classes */
.logo-sidebar {
background-image: url('/usr/share/anaconda/pixmaps/sidebar-bg.png');
background-color: @product_bg_color;
background-repeat: no-repeat;
}
/* Add a logo to the sidebar */
.logo {
background-image: url('/usr/share/anaconda/pixmaps/sidebar-logo.png');
background-position: 50% 20px;
background-repeat: no-repeat;
background-color: transparent;
}
/* This is a placeholder to be filled by a product-specific logo. */
.product-logo {
background-image: none;
background-color: transparent;
}
AnacondaSpokeWindow #nav-box {
background-color: @product_bg_color;
background-image: url('/usr/share/anaconda/pixmaps/topbar-bg.png');
background-repeat: no-repeat;
color: white;
}
Copy to ClipboardCopied!Toggle word wrapToggle overflow
The most important part of the CSS file is the way in which it handles scaling based on resolution. The PNG image backgrounds do not scale, they are always displayed in their true dimensions. Instead, the backgrounds have a transparent background, and the stylesheet defines a matching background color on the @define-color line. Therefore, the background images "fade" into the background color, which means that the backgrounds work on all resolutions without a need for image scaling.
You could also change the background-repeat parameters to tile the background, or, if you are confident that every system you will be installing on will have the same display resolution, you can use background images which fill the entire bar.
Any of the files listed above can be customized. Once you do so, follow the instructions in Section Creating a product.img File to create your own product.img with custom graphics, and then Creating Custom Boot Images to create a new bootable ISO image with your changes included.
To customize the product name, you must create a custom .buildstamp file. To do so, create a new .buildstamp file with the following content:
[Main]
Product=My Distribution
Version=10
BugURL=https://bugzilla.redhat.com/
IsFinal=True
[Main]
Product=My Distribution
Version=10
BugURL=https://bugzilla.redhat.com/
IsFinal=True
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Change My Distribution to the name which you want to display in the installer.
After you create the custom .buildstamp file, follow Creating a product.img file section to create a new product.img file containing your customizations, and the Creating custom boot images section to create a new bootable ISO file with your changes included.
You can write the Anaconda configuration files in the .ini file format. The Anaconda configuration file consists of sections, options and comments. Each section is defined by a section header, the comments starting with a # character and the key = value pairs to define the options. The resulting configuration file is processed with the configparser Python configuration file parser.
The default configuration file, located at /etc/anaconda/anaconda.conf, contains sections and options that are supported. The file provides a full default configuration of the installer. You can create custom configuration files in /etc/anaconda/conf.d/ directory.
The following configuration file describes the default configuration:
Anaconda configuration file.
Run Anaconda in the debugging mode.
List of Anaconda DBus modules that can be activated.
Supported patterns: MODULE.PREFIX., MODULE.NAME activatable_modules = org.fedoraproject.Anaconda.Modules.
List of Anaconda DBus modules that are not allowed to run.
Supported patterns: MODULE.PREFIX., MODULE.NAME forbidden_modules = # List of Anaconda DBus modules that can fail to run. # The installation won't be aborted because of them. # Supported patterns: MODULE.PREFIX., MODULE.NAME
Type of the installation system.
FIXME: This is a temporary solution.
Should the installer show a warning about enabled SMT?
Type of the installation target.
A path to the physical root of the target.
A path to the system root of the target.
Should we install the network configuration?
Should we copy input kickstart to target system?
Should we save kickstart equivalent to installation settings to the new system?
Should we save logs from the installation to the new system?
Network device to be activated on boot if none was configured so.
Valid values:
NONE No device
DEFAULT_ROUTE_DEVICE A default route device
FIRST_WIRED_WITH_LINK The first wired device with link
Default package environment.
List of ignored packages.
Names of repositories that provide latest updates.
Names of repositories disabled by default.
Supported patterns: REPO-NAME, PREFIX*, SUFFIX, *INFIX
List of .treeinfo variant types to enable.
Valid items:
addon
optional
variant
Enable installation from the closest mirror.
Default installation source.
Valid values:
CLOSEST_MIRROR Use closest public repository mirror.
CDN Use Content Delivery Network (CDN).
Enable ssl verification for all HTTP connection
GPG keys to import to RPM database by default.
Specify paths on the installed system, each on a line.
Substitutions for $releasever and $basearch happen automatically.
Enable SELinux usage in the installed system.
Valid values:
-1 The value is not set.
0 SELinux is disabled.
1 SELinux is enabled.
Type of the bootloader.
Supported values:
DEFAULT Choose the type by platform.
EXTLINUX Use extlinux as the bootloader.
SDBOOT Use systemd-boot as the bootloader.
Name of the EFI directory.
Hide the GRUB menu.
Are non-iBFT iSCSI disks allowed?
Arguments preserved from the installation system.
Enable iBFT usage during the installation.
Tell multipathd to use user friendly names when naming devices during the installation.
Create GPT discoverable partition type IDs, if possible
Do you want to allow imperfect devices (for example, degraded mdraid array devices)?
Btrfs compression algorithm and level. e.g. zstd:1
Default disk label type.
Valid values:
gpt Prefer creation of GPT disk labels.
mbr Prefer creation of MBR disk labels.
If not specified, use whatever Blivet uses by default.
Default file system type. Use whatever Blivet uses by default.
Default partitioning.
Specify a mount point and its attributes on each line.
Valid attributes:
size <SIZE> The size of the mount point.
min <MIN_SIZE> The size will grow from MIN_SIZE to MAX_SIZE.
max <MAX_SIZE> The max size is unlimited by default.
free <SIZE> The required available space.
btrfs The mount point will be created only for the Btrfs scheme
Default partitioning scheme.
Valid values:
PLAIN Create standard partitions.
BTRFS Use the Btrfs scheme.
LVM Use the LVM scheme.
LVM_THINP Use LVM Thin Provisioning.
Default version of LUKS.
Valid values:
luks1 Use version 1 by default.
luks2 Use version 2 by default.
Minimal size of the total memory.
Minimal size of the available memory for LUKS2.
Should we recommend to specify a swap partition?
Recommended minimal sizes of partitions.
Specify a mount point and a size on each line.
Required minimal sizes of partitions.
Specify a mount point and a size on each line.
Allowed device types of the / partition if any.
Valid values:
LVM Allow LVM.
MD Allow RAID.
PARTITION Allow standard partitions.
BTRFS Allow Btrfs.
DISK Allow disks.
LVM_THINP Allow LVM Thin Provisioning.
Mount points that must be on a linux file system.
Specify a list of mount points.
Paths that must be directories on the / file system.
Specify a list of paths.
Paths that must NOT be directories on the / file system.
Specify a list of paths.
Mount points that are recommended to be reformatted.
It will be recommended to create a new file system on a mount point
that has an allowed prefix, but doesn't have a blocked one.
Specify lists of mount points.
The path to a custom stylesheet.
A list of spokes to hide in UI.
FIXME: Use other identification then names of the spokes.
Should the UI allow to change the configured root account?
Should the UI allow to change the configured user accounts?
Define the default password policies.
Specify a policy name and its attributes on each line.
Valid attributes:
quality <NUMBER> The minimum quality score (see libpwquality).
length <NUMBER> The minimum length of the password.
empty Allow an empty password.
strict Require the minimum quality.
Should kernel options be shown in the software selection spoke?
A path to EULA (if any)
If the given distribution has an EULA & feels the need to
tell the user about it fill in this variable by a path
pointing to a file with the EULA on the installed system.
This is currently used just to show the path to the file to
the user at the end of the installation.
URL for geolocation data provider.
This is used for automatic language and timezone detection.
Known valid providers:
https://geoip.fedoraproject.org/city
https://api.hostip.info/get_json.php
If left empty, geolocation does not run.
Should geolocation be used when setting the language ?
# Anaconda configuration file.
[Anaconda]
# Run Anaconda in the debugging mode.
debug = False
# List of Anaconda DBus modules that can be activated.
# Supported patterns: MODULE.PREFIX., MODULE.NAME activatable_modules = org.fedoraproject.Anaconda.Modules.
org.fedoraproject.Anaconda.Addons.*
# List of Anaconda DBus modules that are not allowed to run.
# Supported patterns: MODULE.PREFIX., MODULE.NAME forbidden_modules = # List of Anaconda DBus modules that can fail to run. # The installation won't be aborted because of them. # Supported patterns: MODULE.PREFIX., MODULE.NAME
optional_modules =
org.fedoraproject.Anaconda.Modules.Subscription
org.fedoraproject.Anaconda.Addons.*
[Installation System]
# Type of the installation system.
# FIXME: This is a temporary solution.
type = UNKNOWN
# Should the installer show a warning about enabled SMT?
can_detect_enabled_smt = False
[Installation Target]
# Type of the installation target.
type = HARDWARE
# A path to the physical root of the target.
physical_root = /mnt/sysimage
# A path to the system root of the target.
system_root = /mnt/sysroot
# Should we install the network configuration?
can_configure_network = True
# Should we copy input kickstart to target system?
can_copy_input_kickstart = True
# Should we save kickstart equivalent to installation settings to the new system?
can_save_output_kickstart = True
# Should we save logs from the installation to the new system?
can_save_installation_logs = True
[Network]
# Network device to be activated on boot if none was configured so.
# Valid values:
#
# NONE No device
# DEFAULT_ROUTE_DEVICE A default route device
# FIRST_WIRED_WITH_LINK The first wired device with link
#
default_on_boot = NONE
[Payload]
# Default package environment.
default_environment =
# List of ignored packages.
ignored_packages =
# Names of repositories that provide latest updates.
updates_repositories =
# Names of repositories disabled by default.
# Supported patterns: REPO-NAME, PREFIX*, SUFFIX, *INFIX
disabled_repositories =
sourcedebuginfo
updates-testing
updates-testing-modular
# List of .treeinfo variant types to enable.
# Valid items:
#
# addon
# optional
# variant
#
enabled_repositories_from_treeinfo = addon optional variant
# Enable installation from the closest mirror.
enable_closest_mirror = True
# Default installation source.
# Valid values:
#
# CLOSEST_MIRROR Use closest public repository mirror.
# CDN Use Content Delivery Network (CDN).
#
default_source = CLOSEST_MIRROR
# Enable ssl verification for all HTTP connection
verify_ssl = True
# GPG keys to import to RPM database by default.
# Specify paths on the installed system, each on a line.
# Substitutions for $releasever and $basearch happen automatically.
default_rpm_gpg_keys =
[Security]
# Enable SELinux usage in the installed system.
# Valid values:
#
# -1 The value is not set.
# 0 SELinux is disabled.
# 1 SELinux is enabled.
#
selinux = -1
[Bootloader]
# Type of the bootloader.
# Supported values:
#
# DEFAULT Choose the type by platform.
# EXTLINUX Use extlinux as the bootloader.
# SDBOOT Use systemd-boot as the bootloader.
#
type = DEFAULT
# Name of the EFI directory.
efi_dir = default
# Hide the GRUB menu.
menu_auto_hide = False
# Are non-iBFT iSCSI disks allowed?
nonibft_iscsi_boot = False
# Arguments preserved from the installation system.
preserved_arguments =
cio_ignore zfcp.allow_lun_scan
speakup_synth apic noapic apm ide noht acpi video
pci nodmraid nompath nomodeset noiswmd fips selinux
biosdevname ipv6.disable net.ifnames net.ifnames.prefix
nosmt vga
[Storage]
# Enable iBFT usage during the installation.
ibft = True
# Tell multipathd to use user friendly names when naming devices during the installation.
multipath_friendly_names = True
# Create GPT discoverable partition type IDs, if possible
gpt_discoverable_partitions = True
# Do you want to allow imperfect devices (for example, degraded mdraid array devices)?
allow_imperfect_devices = False
# Btrfs compression algorithm and level. e.g. zstd:1
btrfs_compression =
# Default disk label type.
# Valid values:
#
# gpt Prefer creation of GPT disk labels.
# mbr Prefer creation of MBR disk labels.
#
# If not specified, use whatever Blivet uses by default.
#
disk_label_type =
# Default file system type. Use whatever Blivet uses by default.
file_system_type =
# Default partitioning.
# Specify a mount point and its attributes on each line.
#
# Valid attributes:
#
# size <SIZE> The size of the mount point.
# min <MIN_SIZE> The size will grow from MIN_SIZE to MAX_SIZE.
# max <MAX_SIZE> The max size is unlimited by default.
# free <SIZE> The required available space.
# btrfs The mount point will be created only for the Btrfs scheme
#
default_partitioning =
/ (min 1 GiB, max 70 GiB)
/home (min 500 MiB, free 50 GiB)
# Default partitioning scheme.
# Valid values:
#
# PLAIN Create standard partitions.
# BTRFS Use the Btrfs scheme.
# LVM Use the LVM scheme.
# LVM_THINP Use LVM Thin Provisioning.
#
default_scheme = LVM
# Default version of LUKS.
# Valid values:
#
# luks1 Use version 1 by default.
# luks2 Use version 2 by default.
#
luks_version = luks2
[Storage Constraints]
# Minimal size of the total memory.
min_ram = 320 MiB
# Minimal size of the available memory for LUKS2.
luks2_min_ram = 128 MiB
# Should we recommend to specify a swap partition?
swap_is_recommended = False
# Recommended minimal sizes of partitions.
# Specify a mount point and a size on each line.
min_partition_sizes =
/ 250 MiB
/usr 250 MiB
/tmp 50 MiB
/var 384 MiB
/home 100 MiB
/boot 512 MiB
# Required minimal sizes of partitions.
# Specify a mount point and a size on each line.
req_partition_sizes =
# Allowed device types of the / partition if any.
# Valid values:
#
# LVM Allow LVM.
# MD Allow RAID.
# PARTITION Allow standard partitions.
# BTRFS Allow Btrfs.
# DISK Allow disks.
# LVM_THINP Allow LVM Thin Provisioning.
#
root_device_types =
# Mount points that must be on a linux file system.
# Specify a list of mount points.
must_be_on_linuxfs = / /var /tmp /usr /home /usr/share /usr/lib
# Paths that must be directories on the / file system.
# Specify a list of paths.
must_be_on_root = /bin /dev /sbin /etc /lib /root /mnt lost+found /proc
# Paths that must NOT be directories on the / file system.
# Specify a list of paths.
must_not_be_on_root =
# Mount points that are recommended to be reformatted.
#
# It will be recommended to create a new file system on a mount point
# that has an allowed prefix, but doesn't have a blocked one.
# Specify lists of mount points.
reformat_allowlist = /boot /var /tmp /usr
reformat_blocklist = /home /usr/local /opt /var/www
[User Interface]
# The path to a custom stylesheet.
custom_stylesheet =
# A list of spokes to hide in UI.
# FIXME: Use other identification then names of the spokes.
hidden_spokes =
# Should the UI allow to change the configured root account?
can_change_root = False
# Should the UI allow to change the configured user accounts?
can_change_users = False
# Define the default password policies.
# Specify a policy name and its attributes on each line.
#
# Valid attributes:
#
# quality <NUMBER> The minimum quality score (see libpwquality).
# length <NUMBER> The minimum length of the password.
# empty Allow an empty password.
# strict Require the minimum quality.
#
password_policies =
root (quality 1, length 6)
user (quality 1, length 6, empty)
luks (quality 1, length 6)
# Should kernel options be shown in the software selection spoke?
show_kernel_options = True
[License]
# A path to EULA (if any)
#
# If the given distribution has an EULA & feels the need to
# tell the user about it fill in this variable by a path
# pointing to a file with the EULA on the installed system.
#
# This is currently used just to show the path to the file to
# the user at the end of the installation.
eula =
[Timezone]
# URL for geolocation data provider.
# This is used for automatic language and timezone detection.
#
# Known valid providers:
#
# https://geoip.fedoraproject.org/city
# https://api.hostip.info/get_json.php
#
# If left empty, geolocation does not run.
#
geolocation_provider = https://geoip.fedoraproject.org/city
[Localization]
# Should geolocation be used when setting the language ?
#
use_geolocation = True
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Content of files in the conf.d directory overrides defaults from anaconda.conf. The files are named in a <priority>-<config-description>.conf form, for example 100-my-distribution.conf. The file with the highest priority is applied last, overriding all configuration files applied earlier.
Here’s an example of a customization configuration file content:
Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.
Rendre l’open source plus inclusif
Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.
À propos de Red Hat
Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.