#!/usr/bin/perl -cw my $ooo_version = '3.0'; my $use_modules = to_bool($live->{settings}{pack}); my @user_config_dirs = ('/etc/skel', if_($live->{settings}{default_user}, '/home/' . $live->{settings}{default_user})); sub build_one_label { my ($live) = @_; my ($version, $extra) = split(/-/, $live->{settings}{version}); $version .= "S" if ($extra eq 'spring'); "LABEL=" . join ("-", "Mageia", $version, $live->{settings}{desktop}, $live->{settings}{product}); } my $_l = { workdir => $live->{settings}{workdir}, system => { root => $live->{settings}{chroot}, repository => $live->{settings}{repository}, auto_install => 'config/auto_inst.cfg.pl', install_env => { DRAKLIVE_DESKTOP => $live->{settings}{desktop}, DRAKLIVE_MEDIA => $live->{settings}{media}, DRAKLIVE_PRODUCT => $live->{settings}{product}, DRAKLIVE_ARCH => $live->{settings}{arch}, DRAKLIVE_ADDITIONAL_REPOSITORY => $live->{settings}{additional_repository}, DRAKLIVE_COMMERCIAL => $live->{settings}{commercial}, DRAKLIVE_DEFAULT_USER => $live->{settings}{default_user}, }, hide_media_dirs => to_bool($live->{settings}{product} =~ /liveusb-rw/i), if_($live->{settings}{default_user}, preselect_kdm_user => $live->{settings}{default_user}), langs_always => [ 'en_US' ], files => [ if_($live->{settings}{product} =~ /liveusb-rw/i && $live->{settings}{commercial}, [ 'files/xdg-email-hook.sh', '/usr/bin/xdg-email-hook.sh', { mode => 0755, no_install => 1 } ], [ 'files/portable-directories-liveusb-rw', '/etc/X11/xinit.d/portable-directories-liveusb-rw', { mode => 0755, no_install => 1 } ], ), if_($live->{settings}{media} eq 'usb', [ 'files/99-live-disable-suspend-hibernate.fdi', '/etc/hal/fdi/policy/99-live-disable-suspend-hibernate.fdi', { mode => 0644, no_install => 1 } ], [ 'files/desktop-directories-liveusb-rw', '/etc/X11/xinit.d/xx_desktop-directories-liveusb-rw', { mode => 0755, no_install => 1 } ], [ 'files/draklive-install.usb', '/etc/sysconfig/draklive-install', { mode => 0755 } ], ), #- make cups the default spooler [ 'files/defaultspooler', '/etc/foomatic/defaultspooler', { mode => 0644 } ], if_($live->{settings}{media} eq 'CD', #- eject eject cd medium before halt/reboot [ 'files/halt-local.service', '/etc/systemd/system/halt-local.service', { mode => 0644 } ], [ 'files/halt.local.CD', '/sbin/halt.local', { mode => 0755 } ], #- do not load usblp and trigger autosetupprintqueues in live since cups is not available [ 'files/live.modprobe.CD', '/etc/modprobe.d/live.conf', { mode => 0644, no_install => 1 } ], ), if_($live->{settings}{media} ne 'usb', #- FIXME #- umount tmp rpm hack before /etc/init.d/halt tries and fails [ 'files/halt.pre', '/sbin/halt.pre', { mode => 0755 } ], ), #- disable first boot wizard at live boot [ 'files/firstboot', '/etc/sysconfig/firstboot', { mode => 0644 } ], #- enable drakx-finish-install at live boot [ "files/finish-install.$live->{settings}{media}", '/etc/sysconfig/finish-install', { mode => 0644 } ], #- disable speedboot for first boot after disk installation [ 'files/draklive-install.d/remove.d/disable-speedboot', '/etc/draklive-install.d/remove.d/disable-speedboot', { mode => 0644 } ], if_($live->{settings}{desktop} eq 'KDE4', [ 'files/draklive-install.d/run.d/generate-gtk-icon-cache.sh', '/etc/draklive-install.d/run.d/generate-gtk-icon-cache.sh', { mode => 755 } ]), #- sysconfig files for first boot [ $live->{settings}{media} eq 'usb' ? "files/finish-install.$live->{settings}{media}" : 'files/draklive-install.d/finish-install', '/etc/draklive-install.d/sysconfig/finish-install', { mode => 0644 } ], [ 'files/draklive-install.d/firstboot', '/etc/draklive-install.d/sysconfig/firstboot', { mode => 0644 } ], [ 'files/draklive-install.d/services', '/etc/draklive-install.d/services', { mode => 0644 } ], if_($live->{settings}{media} eq 'usb', [ 'files/draklive-install.d/draklive-resize', '/etc/draklive-install.d/sysconfig/draklive-resize', { mode => 0644 } ], ), #- don't make kbluetoothrc display an annoying and useless popup window, and disable it by default [ 'files/kbluetoothrc', '/etc/kde/kbluetoothrc', { mode => 0644 } ], [ 'files/korgacrc', '/etc/kde/korgacrc', { mode => 0644 } ], (map { [ 'files/mgaonlinerc', $_ . '/.MgaOnline/mgaonline', { mode => 0644, no_install => 1 } ] } @user_config_dirs), (map { [ 'files/draksnapshot.sysconfig', $_ . '/.draksnapshot', { mode => 0644, no_install => 1 } ] } @user_config_dirs), [ 'files/compute-ooo-dicts.pl', '/usr/sbin/compute-ooo-dicts.pl', { mode => 0755 } ], [ 'files/compute-i18n-list.pl', '/usr/sbin/compute-i18n-list.pl', { mode => 0755 } ], if_($live->{settings}{desktop} eq 'GNOME', [ 'files/99dm-reload.xsetup', '/etc/X11/xsetup.d/', { mode => 0755 } ]), if_($live->{settings}{product} =~ /guadec/i, [ 'files/GUADEC-booklet.desktop', '/usr/share/nautilus/default-desktop/booklet.desktop' ], ), ], 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_*", ], module_options => { loop => "max_loop=64", }, exclude_modules => [], additional_modules => [ #'modules/i586/unionfs.ko', ], stage2_updates => [ # [ "files/pkgs.pm", "/usr/lib/libDrakX/install/pkgs.pm" ], ], patches => [ ], erase_rpms => [ ], rpms => [ ], disable_services => [ qw(bluetooth laptop-mode pcmcia mdadm pcscd), qw(cups hplip oki4daemon), # printing qw(capi4linux ibod isdn4linux isdnlog bpalogin), qw(cpqarrayd upsd upsmon), # uncommon hardware qw(lisa ntpd snmpd), # unneeded software #qw(acpi acpid apmd), # enabled by drakboot when needed qw(dkms), # slows down live boot, reenabled after install qw(anacron crond), # slows down basic usage and install, reenabled after install qw(sshd), qw(hcfpci hsf slmodemd), qw(portmap nfs-common), qw(kav4ws freshclam clamd), if_($live->{settings}{media} eq 'CD', preload), ], vga_mode => 788, gfxboot => $live->{settings}{media} ne 'usb', #- disable gfxboot on USB, buggy with grub on some systems if_($live->{settings}{media} eq 'usb', initrd_pre_pivot => #- keep an unmodified live tree for draklive-install #- hack: mount it rw with a dummy branch and remount it ro later, current unionfs fails to mount ro directly #- hack: the union can not be "stacked" (i.e. mounted) over another union, so do it early in initrd, and use a tmpfs for the dummy branch, so it can be moved in the real root join("\n", map { "sh -c '$_'" } 'mkdir -p /live/source /live/dummy', 'mount -o mode=755,rw -t tmpfs none /live/dummy', 'mount -o dirs=/live/dummy=rw' . if_($use_modules, ':$(cat /live/modules.lst)') . ':/live/distrib=ro -t unionfs unionfs /live/source', ), ), initrd_post => join("\n", if_($live->{settings}{media} eq 'usb', do { my $tmp = "/live/tmp"; my @sticky = qw(/var/tmp /tmp); ( "sh -c 'mkdir -p $tmp'", "mount -t tmpfs none $tmp", "mkdir $tmp/var", (map { ("mkdir $tmp$_", "mount -o dirs=$tmp$_=rw:/live/distrib$_=ro -t unionfs unionfs $_") } (qw(/var/log), @sticky)), "chmod 1777 @sticky", ); }), ), postInstall => join(';', if_($live->{settings}{default_user}, "echo $live->{settings}{default_user} > /etc/draklive-install.d/user"), "perl -pi -e 's,,$live->{settings}{default_user},' /etc/draklive-install.d/sysconfig/finish-install", #- used by liveusb-rw "/usr/sbin/compute-i18n-list.pl --ooo=${ooo_version}", if_($live->{settings}{product} =~ /liveusb-rw/i && $live->{settings}{desktop} =~ /^KDE/, #- FIXME: check if still valid for KDE4 "perl -pi -e 's,kde[/-]KMail,mageia-mozilla-thunderbird,' /var/lib/mageia/kde-profiles/common/share/config/kickerrc" ), #- fix user perms for copied files if_($live->{settings}{default_user}, "chown -R " . "$live->{settings}{default_user}.$live->{settings}{default_user}" . " /home/$live->{settings}{default_user}"), #- rpath removal will be "lost" on update #- but not important since all packages files would be on the same loopback #- should not be needed with latest unionfs which resolves /proc/self/exe correctly #- FIXME: test with live USB r/w #"chrpath -d /usr/lib/ooo-${ooo_version}/program/soffice.bin", #- workaround rpm bug that leaves a corrupted rpm DB in chroot "rm -f /var/lib/rpm/__db.*", "rm -f /.readahead_collect", #- adduser seems to create a sparse lastlog with a slot for all available users #- which can be huge '> /var/log/lastlog', if_($live->{settings}{desktop} eq 'KDE4', "rm -f /usr/share/icons/*/icon-theme.cache", "cp -a /etc/akonadi/mysql-global.conf /etc/akonadi/mysql-global-standard.conf", "cp /etc/akonadi/mysql-global-mobile.conf /etc/akonadi/mysql-global.conf", "ak=/etc/draklive-install.d/run.d/restore-akonadi-config.sh; echo -e '#!/bin/sh\ncp /etc/akonadi/mysql-global-standard.conf /etc/akonadi/mysql-global.conf' > \$ak; chmod +x \$ak", ), # FIXME #if_($live->{settings}{desktop} eq 'GNOME', # "mkdir -p '/home/$live->{settings}{default_user}/.config/autostart'", # "for file in '/etc/xdg/autostart/tracker*.desktop'; do sed s/X-GNOME-Autostart-enabled=true/X-GNOME-Autostart-enabled=false/g $file > '/home/$live->{settings}{default_user}/.config/autostart/$(basename $file)'; done", #), "d=/var/lib/flash-player-plugin/; [ -d \$d ] && rm -f \$d/*.rpm", ), additional_media => [ if_($live->{settings}{updates_repository}, { name => 'core_updates_testing', path => $live->{settings}{updates_repository} . '/' . $live->{settings}{arch} . '/media/core/updates_testing', packages => [ ], }, ), ], }, loopbacks => { exclude => { type => 'squashfs', files => [ { path => '/root/drakx' }, #- to skip a file list generated with: #- find /usr/share/doc/HTML -mindepth 1 -maxdepth 1 -type d > /root/drakx/HTML.skipped #{ source => '/root/drakx/HTML.skipped', rooted => 1 }, ], }, if_($use_modules, modules => [ { type => 'squashfs', source => '/root/drakx/i18n-*.lst', rooted => 1 }, ]), }, regions => { #- the "all" region has a magical behavior and selects all langs int => [qw(de en es fr it pl pt_BR ru)], guadec => [qw(de en es fr it nb nn nl pl pt_BR ro ru tr)], 'Europe-Americas' => [qw(bg cs da de el en es et fi fr hr hu it ky lt lv nb nl nn no pl pt pt_BR ro ru sv tr uk uz)], #'africa-asia' => [qw(de en es fr it nb nn nl pl pt_BR ro ru tr ar he hi id ko ms zu ja zh_CN zh_TW)], 'Africa-Asia' => [qw(aa af am ar as ber bn ha he hi id ig ja kn ko ks ml mr or pa sd ta th tn ts ve vi xh yo zh_CN zh_TW zu)], 'Europe1-Americas' => [qw(de el en es fr it nl pt pt_BR sl tr)], 'Europe2' => [qw(bg cs da et fi hr hu lt lv nb no nn pl ro ru sv uk uz)], 'Africa-India' => [qw(zu aa af am ar as ber bn ha he hi ig kn ks ml mr or pa sd ta tn ts ve xh yo)], 'Asia-Noindia' => [qw(id ja ko th vi zh_CN zh_TW)], }, packs => { int => [ map { "i18n-$_" } qw(de en es fi fr it nl pt sv) ], da => [ map { "i18n-$_" } qw(da en) ], }, if_($live->{settings}{media} eq 'CD', media => { storage => 'cdrom', bootloader_timeout => 10, boot_entries => [ "" => "", "linux" => " install", "harddisk" => "" ], if_($live->{settings}{product} =~ /LiveCD/i, source => build_one_label($live), pre => [ 'for i in seq 1 5; do showlabels --removable | grep '.build_one_label($live).'; if [ $? -eq 0 ]; then break; fi; sleep 1; done' ], extra_modules => [ qw(vfat sd_mod usb_storage uhci_hcd ohci_hcd ehci_hcd xhci_hcd) ], files => [ # FIXME: add doc and autorun #[ 'extra/livecd/autorun/*', ''], #map { [ 'extra/livecd/' . $_, $_ ] } qw(LISEZMOI.pdf README.pdf) ], ), }, #extra_media => [ { storage => 'usb' } ], mount => MDV::Draklive::Mounts::volatile_squash_union($use_modules), ), if_($live->{settings}{media} eq 'usb', media => { storage => 'usb', bootloader_timeout => 1, mount_options => 'dmask=0000,fmask=0111', extra_boot => [ qw(cdrom) ], if_($live->{settings}{product} =~ /liveusb-rw/i, source => "LABEL=Mga_USB", title => "Mageia Live USB", boot_entries => [ "" => "" ], files => [ [ 'extra/liveusb-rw-common/*', '' ], ($live->{settings}{commercial} ? [ 'extra/liveusb-rw-commercial/*', '' ] : [ 'extra/liveusb-rw/*', '' ] ), ], partitions => [ { size => common::MB(8000), mntpoint => '/', }, ], remove_files => [ '.svn', '*~' ], ), }, mount => MDV::Draklive::Mounts::squash_union('1000M', '150M', $use_modules), ), };