Chapter 4. Branding and chroming the graphical user interface
The customization of Anaconda user interface may include the customization of graphical elements and the customization of product name.
This section provides information about how to customize the graphical elements and the product name.
Prerequisites
- You have downloaded and extracted the ISO image.
- You have created your own branding material.
For information about downloading and extracting boot images, see Extracting Red Hat Enterprise Linux boot images
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 it)
- Customize the product name (if you plan to customize it)
- Create a product.img file
- Create a custom Boot image
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.
4.1. Customizing graphical elements
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:
pixmaps ├─ anaconda-password-show-off.svg ├─ anaconda-password-show-on.svg ├─ right-arrow-icon.png ├─ sidebar-bg.png ├─ sidebar-logo.png └─ topbar-bg.png
Additionally, the /usr/share/anaconda/
directory contains a 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. The file has the following contents that can be customized as per your requirement:
/* 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; }
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 2.2, “Creating a product.img File” to create your own product.img with custom graphics, and then Section 2.3, “Creating Custom Boot Images” to create a new bootable ISO image with your changes included.
4.2. Customizing the product name
To customize the product name, you must create a custom .buildstamp file
. To do so, create a new file .buildstamp.py
with the following content:
[Main] Product=My Distribution Version=8 BugURL=https://bugzilla.redhat.com/ IsFinal=True UUID=202007011344.x86_64 [Compose] Lorax=28.14.49-1
Change My Distribution to the name which you want to display in the installer.
After you create the custom .buildstamp file, follow the steps in 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.
4.3. Customizing the Default Configuration
You can create your own configuration file and use it to customize the configuration of the installer.
4.3.1. Configuring the default configuration files
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 keys to define the options
. The resulting configuration file is processed with the configparser
configuration file parser.
The default configuration file, located at /etc/anaconda/anaconda.conf
, contains the documented sections and options that are supported. The file provides a full default configuration of the installer. You can modify the configuration of the product configuration files from /etc/anaconda/product.d/
and the custom configuration files from /etc/anaconda/conf.d/
.
The following configuration file describes the default configuration of RHEL 8:
[Anaconda] # Run Anaconda in the debugging mode. debug = False # Enable Anaconda addons. addons_enabled = True # List of enabled Anaconda DBus modules for RHEL. kickstart_modules = org.fedoraproject.Anaconda.Modules.Timezone org.fedoraproject.Anaconda.Modules.Network org.fedoraproject.Anaconda.Modules.Localization org.fedoraproject.Anaconda.Modules.Security org.fedoraproject.Anaconda.Modules.Users org.fedoraproject.Anaconda.Modules.Payloads org.fedoraproject.Anaconda.Modules.Storage org.fedoraproject.Anaconda.Modules.Services [Installation System] # 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 [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 = # Enable installation of latest updates. enable_updates = True # 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 [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. # 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 rd.znet rd_ZNET 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 [Storage] # Enable dmraid usage during the installation. dmraid = True # Enable iBFT usage during the installation. ibft = True # Do you prefer creation of GPT disk labels? gpt = False # Tell multipathd to use user friendly names when naming devices during the installation. multipath_friendly_names = True # Do you want to allow imperfect devices (for example, degraded mdraid array devices)? allow_imperfect_devices = False # 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. # default_partitioning = / (min 1 GiB, max 70 GiB) /home (min 500 MiB, free 50 GiB) swap # 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 = True # 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 200 MiB # 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. # 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 = [User Interface] # The path to a custom stylesheet. custom_stylesheet = # The path to a directory with help files. help_directory = # A list of spokes to hide in UI. # FIXME: Use other identification then names of the spokes. hidden_spokes = [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 =
4.3.2. Configuring the product configuration files
The product configuration files have one or two extra sections that identify the product. The [Product]
section specifies the product name of a product. The [Base Product]
section specifies the product name of a base product if any. For example, Red Hat Enterprise Linux is a base product of Red Hat Virtualization.
The installer loads configuration files of the base products before it loads the configuration file of the specified product. For example, it will first load the configuration for Red Hat Enterprise Linux and then the configuration for Red Hat Virtualization.
See an example of the product configuration file for Red Hat Enterprise Linux:
# Anaconda configuration file for Red Hat Enterprise Linux. [Product] product_name = Red Hat Enterprise Linux [Anaconda] kickstart_modules = org.fedoraproject.Anaconda.Modules.Timezone org.fedoraproject.Anaconda.Modules.Network org.fedoraproject.Anaconda.Modules.Localization org.fedoraproject.Anaconda.Modules.Security org.fedoraproject.Anaconda.Modules.Users org.fedoraproject.Anaconda.Modules.Payloads org.fedoraproject.Anaconda.Modules.Storage org.fedoraproject.Anaconda.Modules.Services org.fedoraproject.Anaconda.Modules.Subscription [Installation System] can_detect_enabled_smt = True [Network] default_on_boot = DEFAULT_ROUTE_DEVICE [Payload] ignored_packages = ntfsprogs btrfs-progs dmraid enable_closest_mirror = False default_source = CDN [Bootloader] efi_dir = redhat [Storage] file_system_type = xfs default_partitioning = / (min 1 GiB, max 70 GiB) /home (min 500 MiB, free 50 GiB) swap [Storage Constraints] swap_is_recommended = True [User Interface] help_directory = /usr/share/anaconda/help/rhel custom_stylesheet = /usr/share/anaconda/pixmaps/redhat.css [License] eula = /usr/share/redhat-release/EULA
See an example of the product configuration file for Red Hat Virtualization:
# Anaconda configuration file for Red Hat Virtualization. [Product] product_name = Red Hat Virtualization (RHVH) [Base Product] product_name = Red Hat Enterprise Linux [Storage] default_scheme = LVM_THINP default_partitioning = / (min 6 GiB) /home (size 1 GiB) /tmp (size 1 GiB) /var (size 15 GiB) /var/crash (size 10 GiB) /var/log (size 8 GiB) /var/log/audit (size 2 GiB) swap [Storage Constraints] root_device_types = LVM_THINP must_not_be_on_root = /var req_partition_sizes = /var 10 GiB /boot 1 GiB
To customize the installer configuration for your product, you must create a product configuration file. Create a new file named my-distribution.conf
, with content similar to the example above. Change product_name in the [Product]
section to the name of your product, for example My Distribution. The product name should be the same as the name used in the .buildstamp
file.
After you create the custom configuration file, follow the steps in Creating a product.img file section to create a new product.img
file containing your customizations, and the Creating custom boot images to create a new bootable ISO file with your changes included.
4.3.3. Configuring the custom configuration files
To customize the installer configuration independently of the product name, you must create a custom configuration file. To do so, create a new file named 100-my-configuration.conf
with the content similar to the example in Configuring the default configuration files and omit the [Product]
and [Base Product]
sections.
After you create the custom configuration file, follow the steps in Creating a product.img file section to create a new product.img
file containing your customizations, and the Creating custom boot images to create a new bootable ISO file with your changes included.