my $distro = $build->{settings}{distro}; my $release = $build->{settings}{release}; my $product = $build->{settings}{product}; my $arch = $build->{settings}{arch}; my $default_user = $build->{settings}{default_user}; my @desktops = split(/\|/, $build->{settings}{desktop}); my $has_gnome = member('GNOME', @desktops); my $has_lxde = member('LXDE', @desktops); my $has_plasma = member('Plasma', @desktops); my $has_xfce = member('Xfce', @desktops); my %default_sessions = ( 'GNOME' => 'GNOME', 'LXDE' => 'LXDE', 'Plasma' => 'Plasma(X11)', 'Xfce' => 'XfceSession', ); $build->{settings}{default_session} = $default_sessions{$desktops[0]}; my @user_config_dirs = ('/etc/skel', '/home/' . $default_user); sub build_label { my ($build) = @_; my $short_release = $release; $short_release =~ s/alpha/a/; $short_release =~ s/beta/b/; join('-', $distro, $short_release, $product, $desktops[0], $arch); } sub build_title { my ($build) = @_; join(' ', $distro, $release, $product, $desktops[0]); } my $default_append = 'root=mgalive:LABEL=' . build_label($build) . ' noiswmd audit=0 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 vga=788 splash quiet'; my $config = { system => { enabled_media => [ 'Core Release', 'Core Updates', 'Nonfree Release', 'Nonfree Updates', ], rpmsrate_flags => [ 'LIVE', (map { "CAT_$_" } ( # office qw(OFFICE SPELLCHECK PIM ARCHIVING PRINTER), # multimedia qw(AUDIO VIDEO GRAPHICS), # internet qw(NETWORKING_WWW NETWORKING_MAIL NETWORKING_NEWS COMMUNICATIONS NETWORKING_CHAT), qw(NETWORKING_FILE_TRANSFER NETWORKING_IRC NETWORKING_INSTANT_MESSAGING NETWORKING_DNS), # network qw(NETWORKING_REMOTE_ACCESS NETWORKING_FILE), # config qw(CONFIG), # console qw(EDITORS TERMINALS TEXT_TOOLS SHELLS FILE_TOOLS), # system qw(SYSTEM MINIMAL_DOCS X ACCESSIBILITY THEMES), # desktop if_($has_gnome, qw(GNOME)), if_($has_lxde, qw(LXDE)), if_($has_plasma, qw(PLASMA5)), if_($has_xfce, qw(XFCE)), )) ], rpmsrate_level => 5, include_packages => [ # Satisfy the basesystem bootloader requirement. 'drakiso-null-bootloader', # Some extra admin tools. 'bind-utils', 'dmraid', 'efibootmgr', 'efivar', 'gparted', 'hdparm', 'mc', 'mdadm', 'nano', 'strace', 'tree', 'vim-enhanced', # Some extra backup and recovery tools. 'clonezilla', 'extundelete', 'fsarchiver', 'photorec', 'testdisk', # Mageia docs. 'mageia-doc-mcc-ca', 'mageia-doc-draklive-ca', 'mageia-doc-mcc-cs', 'mageia-doc-draklive-cs', 'mageia-doc-mcc-de', 'mageia-doc-draklive-de', 'mageia-doc-mcc-el', 'mageia-doc-draklive-el', 'mageia-doc-mcc-en', 'mageia-doc-draklive-en', 'mageia-doc-mcc-eo', 'mageia-doc-draklive-eo', 'mageia-doc-mcc-es', 'mageia-doc-draklive-es', 'mageia-doc-mcc-et', 'mageia-doc-draklive-et', 'mageia-doc-mcc-eu', 'mageia-doc-draklive-eu', 'mageia-doc-mcc-fr', 'mageia-doc-draklive-fr', 'mageia-doc-mcc-id', 'mageia-doc-draklive-id', 'mageia-doc-mcc-it', 'mageia-doc-draklive-it', 'mageia-doc-mcc-ja', 'mageia-doc-draklive-ja', 'mageia-doc-mcc-nb', 'mageia-doc-draklive-nb', 'mageia-doc-mcc-nl', 'mageia-doc-draklive-nl', 'mageia-doc-mcc-pl', 'mageia-doc-draklive-pl', 'mageia-doc-mcc-pt_br', 'mageia-doc-draklive-pt_br', 'mageia-doc-mcc-ro', 'mageia-doc-draklive-ro', 'mageia-doc-mcc-ru', 'mageia-doc-draklive-ru', 'mageia-doc-mcc-sv', 'mageia-doc-draklive-sv', 'mageia-doc-mcc-tr', 'mageia-doc-draklive-tr', 'mageia-doc-mcc-uk', 'mageia-doc-draklive-uk', 'mageia-doc-mcc-zh_CN', 'mageia-doc-draklive-zh_CN', # Allow patching during customisation. 'patch', # s-c-p wants this if it detects a combined printer/scanner. 'simple-scan', # Provide a nicer UI for lxcontrol. 'Xdialog', # Need to patch this to prevent hang when probing ISO partition. 'os-prober', if_($has_gnome, 'task-gnome', 'adwaita-gtk2-theme', # Temporary fix for mga#20868. 'hexchat', # Alternative IRC client. ), if_($has_lxde, 'mageia-lxde-config-Default' ), if_($has_plasma, 'task-plasma5', 'plasma-applet-nm', ), if_($has_xfce, 'task-xfce', 'networkmanager-applet', ), ], exclude_packages => [ if_($arch eq 'i586', # We want the desktop586 kernel for maximum hardware compatibility. '/^kernel-desktop-/', '/^vboxadditions-kernel-.*-desktop-/', ), # No server kernels. '/^kernel-server-/', '/^vboxadditions-kernel-.*-server-/', # No bootloaders. The GRUB2 bootloaders are needed for install, so we add # them to the local repo, which means they are automatically excluded. 'grub', 'lilo', # Unwanted stuff. 'efax', 'nvidia-nsight', # This causes problems on systems without Intel GPUs. 'gstreamer1.0-vaapi', if_($has_gnome, 'gnome-builder', 'gnome-boxes', # Conflicts with task-printing 'inkscape', 'polkit-kde-agent-1', ), if_($has_plasma, 'gimp', 'gimp-help', ), ], preferred_packages => [ if_($has_gnome, 'gdm'), if_($has_plasma, 'sddm'), # The gtk3 plugin is included regardless of DE. This makes sure we # don't pull in unnecessary kde4 or kf5 packages. if_(!$has_plasma, 'libreoffice-x11'), ], local_repo_packages => [ # core 'broadcom-bcma-config', 'broadcom-ssb-config', 'dkms', 'dkms-rtl8192eu', 'refind', 'grub2', 'grub2-efi', 'grub2-mageia-theme', if_($arch eq 'i586', 'kernel-desktop586-devel-latest'), if_($arch eq 'x86_64', 'kernel-desktop-devel-latest'), # nonfree 'dkms-broadcom-wl', if_($arch eq 'x86_64', 'dkms-nvidia470', 'x11-driver-video-nvidia470', 'nvidia470-utils', 'dkms-nvidia-current', 'x11-driver-video-nvidia-current', 'nvidia-current-utils', ), ], local_repo_biarch_packages => [ if_($arch eq 'x86_64', 'grub2-efi'), ], langs_always => [ 'en_US' ], post_install => join(";", # systemd boots by default to multiuser.target (old init 3), so change to graphical (old init 5). "ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target", ), disable_services => [ # Uncommon hardware. qw(bpalogin cpqarrayd mdadm oki4daemon pcscd), # Unneeded software. qw(chronyd snmpd), # Slows down basic usage and install, reenabled after install. qw(crond msec), ], disable_timers => [ ], files => [ # Clean configuration files. [ 'files/empty.conf', '/etc/dracut.conf.d/51-mageia-resume.conf', { mode => 0644 } ], [ 'files/empty.conf', '/etc/modprobe.conf', { mode => 0644 } ], # Blacklist pata_acpi (mga#3395). [ 'files/blacklist-ide.conf', '/etc/modprobe.d/blacklist-ide.conf', { mode => 0644 } ], # Live media specific initrd. [ 'files/dracut-live.conf', '/etc/dracut.conf.d/60-live.conf', { mode => 0644, no_install => 1 } ], # Enable drakx-finish-install at live boot. [ "files/finish-install", '/etc/sysconfig/finish-install', { mode => 0644 } ], # Disable mgaonline in live mode. (map { [ 'files/mgaonlinerc', $_ . '/.MgaOnline/mgaonline', { mode => 0644, no_install => 1 } ] } @user_config_dirs), # Disable suspend and hibernate in live mode. [ 'files/50-disable-suspend.pkla', '/etc/polkit-1/localauthority/50-local.d/50-disable-suspend.pkla', { mode => 0644, no_install => 1 } ], # sysconfig files for first boot after install. [ 'files/draklive-install.d/finish-install', '/etc/draklive-install.d/sysconfig/finish-install', { mode => 0644 } ], # Reenable services in installed system. [ 'files/draklive-install.d/services', '/etc/draklive-install.d/services', { mode => 0644 } ], # Fix for sometimes wrong permissions after install. [ 'files/draklive-install.d/run.d/home-live-permissions.sh', '/etc/draklive-install.d/run.d/home-live-permissions.sh', { mode => 755 } ], if_($has_gnome, # Add draklive-install icon to favourites in live mode and disable screen locking # (override files are processed in alphabetical order - make sure this one comes last). [ 'files/live.gschema.override', '/usr/share/glib-2.0/schemas/live.gschema.override', { mode => 0644, no_install => 1 } ], # Disable Wayland when we know it won't work (workaround for mga#20079). [ 'files/50gdm-disable-wayland.xsetup', '/etc/X11/xsetup.d/50gdm-disable-wayland.xsetup', { mode => 0755 } ], ), if_($has_plasma, [ 'files/draklive-install.d/run.d/generate-gtk-icon-cache.sh', '/etc/draklive-install.d/run.d/generate-gtk-icon-cache.sh', { mode => 755 } ], # Remove live user from SDDM greeter. [ 'files/draklive-install.d/remove.d/clear-sddm-state', '/etc/draklive-install.d/remove.d/clear-sddm-state', { mode => 0644 } ], # Disable Korganiser autostart. [ 'files/korgacrc', '/etc/kde/korgacrc', { mode => 0644 } ], # Prefer system network connections. [ 'files/plasma-nm.conf', '/home/live/.config/plasma-nm', { mode => 0644 } ], # Workaround for dolphin segfault (mga#28324) [ 'files/dolphinrc', '/home/live/.config/dolphinrc', { mode => 0644, no_install => 1 } ], ), if_($has_xfce, # Add a desktop shortcut to run draklive-install. This needs to be done during the live session # startup because Xfce requires the xfce-exe-checksum extended attribute to be set on executable # files in the Desktop directory, and squashfs doesn't support this attribute. [ 'files/add-draklive-install-shortcut.desktop', '/etc/xdg/autostart/add-draklive-install-shortcut.desktop', { mode => 0644, no_install => 1 } ], [ 'files/add-draklive-install-shortcut', '/usr/bin/add-draklive-install-shortcut', { mode => 0755, no_install => 1 } ], ), ], remove_files => [ (map { "/etc/modprobe.preload.d/$_" } qw(cpufreq pcmcia rfswitch)), "/etc/udev/rules.d/70-persistent-*.rules", "/var/lib/dbus/machine-id", "/etc/ssh/ssh_host_*", ], patches => [ # When running from a USB stick, os-prober runs dmsetup on the protective # partition. This just failed in mga6, but in mga7 it hangs. As a workaround # this patch causes os-prober to skip any partition containing an is9660 # filesystem. 'patches/os-prober-hang-fix.patch', ], final_fixes => join(';', if_($has_gnome, # Modify and compile schema to get draklive-install and Firefox in menu. "sed -i 's/epiphany.desktop/firefox.desktop/' /usr/share/glib-2.0/schemas/glib2-branding.gschema.override", "glib-compile-schemas /usr/share/glib-2.0/schemas/", # Fix permissions to enable GDM to rerun if the user logs out. "chown -R gdm:gdm /var/lib/gdm", # Enable the appindicator extension "mkdir -p /etc/dconf/db/local.d", "echo -e \"[org/gnome/shell]\nenabled-extensions=['appindicatorsupport\@rgcjonas.gmail.com']\" > /etc/dconf/db/local.d/00-extensions", "echo -e \"user-db:user\nsystem-db:local\" > /etc/dconf/profile/user", "dconf update", # Avoid lots of warnings from g-s-d on first login. "mkdir -p /home/$default_user/.config", ), if_($has_plasma, "rm -f /usr/share/icons/*/icon-theme.cache", ), # Switch to NetworkManager. "systemctl -q disable network", "systemctl -q disable network-up", "systemctl -q enable NetworkManager.service", "systemctl -q enable NetworkManager-wait-online.service", "echo 'AUTOSTART=FALSE' > /home/live/.net_applet", # Don't try to get a hostname by reverse DNS - it will most likely fail # and set the hostname to linux.local. "echo 'hostname-mode=dhcp' >> /etc/NetworkManager/NetworkManager.conf", # Fix permissions for copied files. "chown -R $default_user:$default_user /home/$default_user", # Set default user name for draklive-install. "echo $default_user > /etc/draklive-install.d/user", "sed -i s/DEFAULT_USER/$default_user/ /etc/draklive-install.d/sysconfig/finish-install", # Allow draklive-install to spawn subtasks that access the display. "echo 'session optional pam_xauth.so # for draklive-install' >> /etc/pam.d/polkit-1", # Disable HPLIP systray startup. "echo 'Hidden=true' >> /etc/xdg/autostart/hplip-systray.desktop", # Set the timestamp on the font directories to be a whole second # fc-cache looks at the nano second portion which may be non-zero # as we are on ext4, but then it will compare against the stamps # on the squashfs live image which have whole second resolution # (adapted from fix descrived in OpenMandriva bug 1764). "find /usr/share/fonts -type d -exec touch -t \$(date +%Y%m%d%H%M.%S) '{}' ';'", # Now update the cache for the new timestamps. "fc-cache -rf", # The man-db transfiletriggerin scriplet requires systemd, so will # have silently failed when run in a chroot. So the man-db cache # will not have been updated. Do it now. "mandb -q", "/usr/sbin/updatedb", # Set the initial wireless regulatory domain to "world", enabling # all possible wireless channels to be used. "sed -i -r 's/CRDA_DOMAIN=.*/CRDA_DOMAIN=00/' /etc/sysconfig/network", # Prevent systemd services performing unnecessary updates on first # boot. We should have done all necessary updates at build time. "touch /etc/.updated /var/.updated", ), }, loopbacks => { exclude => [ { path => '/root/drakx' }, ], compression => 'zstd:18', }, regions => { int => [qw(en)], }, media => { label => build_label($build), overlay_label => 'mgalive-persist', bootloader_title => build_title($build), bootloader_theme => 'bootloader/maggy', bootloader_font => 'bootloader/unicode.pf2', bootloader_langs => 'bootloader/lang-names.txt', bootloader_messages => 'bootloader/messages', bootloader_default => 0, bootloader_timeout => 10, bootloader_entries => [ 'Boot Mageia Live' => { append => $default_append . ' noxconf xdriver=free' }, if_($arch eq 'x86_64', ' + use non-free NVIDIA drivers (slower to boot)' => { append => $default_append . ' nokmsboot xclone=1' }, ), 'Install Mageia Live' => { append => $default_append . ' noxconf xdriver=free install' }, if_($arch eq 'x86_64', ' + use non-free NVIDIA drivers (slower to boot)' => { append => $default_append . ' nokmsboot xclone=1 install' }, ), 'Memory Test' => { command => 'linux32', image => '/boot/memtest', initrd => 'none', append => 'nobigstatus' }, ], mbr_boot_img => 'bootloader/images/boot_hybrid.img', eltorito_img => 'bootloader/images/eltorito.img', if_($arch eq 'i586', iso_part_start => 1, iso_part_type => '0x17', efi_type => '32bit', boot32_efi => 'bootloader/images/bootia32.efi' ), if_($arch eq 'x86_64', efi_type => 'all', boot32_efi => 'bootloader/images/bootia32.efi', boot64_efi => 'bootloader/images/bootx64.efi' ), copy_from_repo => [ 'autorun.inf' => 'files/autorun.inf', 'dosutils' => 'files/dosutils', 'isolinux/memtest' => "boot/memtest", ], checksums => [ qw(md5 sha2 sha3) ], }, };