my $distro = $build->{settings}{distro}; my $release = $build->{settings}{release}; my $product = $build->{settings}{product}; my $desktop = $build->{settings}{desktop}; my $region = $build->{settings}{region}; my $arch = $build->{settings}{arch}; my $show_licence = $build->{settings}{show_licence} =~ /^y/; my $show_welcome = $build->{settings}{show_welcome} =~ /^y/; my $live_installer = $build->{settings}{live_installer} =~ /^y/; my $nonfree_drivers = $build->{settings}{nonfree_drivers} =~ /^y/; my $finish_install = $show_licence || $region eq 'all'; my @user_config_dirs = ('/etc/skel'); sub build_label { my ($build) = @_; join('-', $distro, $release, $product, $desktop, $arch); } sub build_title { my ($build) = @_; join(' ', $distro, $release, $product, $desktop); } my $default_append = 'root=mgalive:LABEL=' . build_label($build) . ' noiswmd audit=0 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 splash quiet'; my $config = { system => { enabled_media => [ 'Core Release', 'Core Updates', 'Nonfree Release', 'Nonfree Updates', ], include_packages => [ # Support first time actions and draklive-install. if_($finish_install || $live_installer, 'busybox-static', 'drakx-installer-binaries-probe', 'drakx-finish-install', ), if_($live_installer, 'draklive-install', ), # Satisfy the basesystem bootloader requirement. 'drakiso-null-bootloader', # Allow patching during customisation. 'patch', split(',', $build->{settings}{include_packages}) ], 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-/', if_(!$nonfree_drivers, '/^x11-driver-video-nvidia/', '/^dkms-nvidia/', 'dkms-broadcom-wl', ), # 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', # No distribution licence. if_($show_licence, 'flash-player-plugin', ), split(',', $build->{settings}{exclude_packages}) ], # preferred_packages => [ # ], local_repo_packages => [ if_($live_installer, # core 'efibootmgr', 'efivar', 'refind', 'grub2', 'grub2-efi', 'grub2-mageia-theme', 'os-prober', ), if_($nonfree_drivers, # core 'broadcom-bcma-config', 'broadcom-ssb-config', 'dkms', if_($arch eq 'i586', 'kernel-desktop586-devel-latest'), if_($arch eq 'x86_64', 'kernel-desktop-devel-latest'), # nonfree 'dkms-broadcom-wl', 'dkms-nvidia340', 'x11-driver-video-nvidia340', 'dkms-nvidia390', 'x11-driver-video-nvidia390', if_($arch eq 'x86_64', 'dkms-nvidia-current', 'x11-driver-video-nvidia-current', ), ), ], 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 => [ # ], # 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 } ], if_($finish_install, # 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 } ], if_($live_installer, # sysconfig files for first boot after install. [ 'files/draklive-install.d/finish-install', '/etc/draklive-install.d/sysconfig/finish-install', { 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 } ], ), ], 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 => [ # ], final_fixes => join(';', # Get default user name. "default_user=`grep 1000:1000 /etc/passwd`", "default_user=\${default_user%%:*}", if_(!$show_welcome, # Disable autostart of MageiaWelcome. "mkdir -p /home/\$default_user/.config/mageiawelcome", "touch /home/\$default_user/.config/mageiawelcome/norun.flag", ), if_($live_installer, # Add a desktop icon to run draklive-install (for DEs that support it). "mkdir -p /home/\$default_user/Desktop", "cp /usr/share/applications/mageia-draklive-install.desktop /home/\$default_user/Desktop/draklive-install.desktop", # 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", ), # Fix permissions for copied files. "chown -R \$default_user.\$default_user /home/\$default_user", # 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", # 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", ), vga_mode => 788, }, loopbacks => { exclude => [ { path => '/root/drakx' }, ], }, # regions => { # # the "all" region has a magical behavior and selects all langs # }, media => { label => build_label($build), overlay_label => 'mgalive-persist', bootloader_title => build_title($build), bootloader_theme => '/usr/share/drakiso/bootloader/maggy', bootloader_font => '/usr/share/drakiso/bootloader/unicode.pf2', bootloader_langs => '/usr/share/drakiso/bootloader/lang-names.txt', bootloader_messages => '/usr/share/drakiso/bootloader/messages', bootloader_default => 0, bootloader_timeout => 10, bootloader_entries => [ 'Boot Mageia Live' => { append => $default_append . ' noxconf' }, if_($nonfree_drivers, ' + use non-free NVIDIA drivers (slower to boot)' => { append => $default_append . ' nokmsboot' }, ), if_($live_installer, 'Install Mageia Live' => { append => $default_append . ' noxconf install' }, ), if_($live_installer && $nonfree_drivers, ' + use non-free NVIDIA drivers (slower to boot)' => { append => $default_append . ' nokmsboot install' }, ), 'Memory Test' => { command => 'linux16', image => '/boot/memtest', initrd => 'none' }, ], mbr_boot_img => '/usr/share/drakiso/bootloader/images/boot_hybrid.img', eltorito_img => '/usr/share/drakiso/bootloader/images/eltorito.img', if_($arch eq 'i586', efi_type => '32bit', boot32_efi => '/usr/share/drakiso/bootloader/images/bootia32.efi' ), if_($arch eq 'x86_64', efi_type => '64bit', boot64_efi => '/usr/share/drakiso/bootloader/images/bootx64.efi' ), copy_from_repo => [ 'isolinux/memtest' => 'boot/memtest', ], # checksums => [ qw(md5 sha1 sha2 sha3) ], }, };