From 75eedf36f7b2685f752ba4908478c4b0f7a872bd Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Thu, 23 Feb 2006 11:15:41 +0000 Subject: initial import of Mandriva One configuration files and draklive-install tool --- live/One/2006.0/config/auto_inst.cfg.pl | 138 ++++ live/One/2006.0/config/live.cfg | 63 ++ live/One/2006.0/config/patch-2006-live.pl | 172 +++++ live/One/2006.0/config/rpmsrate | 784 ++++++++++++++++++++++ live/One/2006.0/patches/halt.loopfs.patch | 20 + live/One/2006.0/patches/netfs.loopfs.patch | 11 + live/draklive-install/Makefile | 21 + live/draklive-install/draklive-install | 418 ++++++++++++ live/draklive-install/draklive-install.desktop | 7 + live/draklive-install/draklive-install.spec | 69 ++ live/draklive-install/install_interactive.pm | 299 +++++++++ live/draklive-install/theme/IC-installone-128.png | Bin 0 -> 8949 bytes live/draklive-install/theme/IC-installone-16.png | Bin 0 -> 857 bytes live/draklive-install/theme/IC-installone-24.png | Bin 0 -> 1424 bytes live/draklive-install/theme/IC-installone-32.png | Bin 0 -> 1863 bytes live/draklive-install/theme/IC-installone-48.png | Bin 0 -> 3019 bytes live/draklive-install/theme/IC-installone-64.png | Bin 0 -> 4305 bytes live/draklive-install/theme/IM-INSTALLCDONE.png | Bin 0 -> 68499 bytes live/draklive-install/theme/IM-INSTALLCDONE2.png | Bin 0 -> 55654 bytes 19 files changed, 2002 insertions(+) create mode 100644 live/One/2006.0/config/auto_inst.cfg.pl create mode 100644 live/One/2006.0/config/live.cfg create mode 100644 live/One/2006.0/config/patch-2006-live.pl create mode 100644 live/One/2006.0/config/rpmsrate create mode 100644 live/One/2006.0/patches/halt.loopfs.patch create mode 100644 live/One/2006.0/patches/netfs.loopfs.patch create mode 100644 live/draklive-install/Makefile create mode 100755 live/draklive-install/draklive-install create mode 100644 live/draklive-install/draklive-install.desktop create mode 100644 live/draklive-install/draklive-install.spec create mode 100644 live/draklive-install/install_interactive.pm create mode 100644 live/draklive-install/theme/IC-installone-128.png create mode 100644 live/draklive-install/theme/IC-installone-16.png create mode 100644 live/draklive-install/theme/IC-installone-24.png create mode 100644 live/draklive-install/theme/IC-installone-32.png create mode 100644 live/draklive-install/theme/IC-installone-48.png create mode 100644 live/draklive-install/theme/IC-installone-64.png create mode 100644 live/draklive-install/theme/IM-INSTALLCDONE.png create mode 100644 live/draklive-install/theme/IM-INSTALLCDONE2.png (limited to 'live') diff --git a/live/One/2006.0/config/auto_inst.cfg.pl b/live/One/2006.0/config/auto_inst.cfg.pl new file mode 100644 index 000000000..30a889d04 --- /dev/null +++ b/live/One/2006.0/config/auto_inst.cfg.pl @@ -0,0 +1,138 @@ +#!/usr/bin/perl -cw +# +# You should check the syntax of this file before using it in an auto-install. +# You can do this with 'perl -cw auto_inst.cfg.pl' or by executing this file +# (note the '#!/usr/bin/perl -cw' on the first line). +$o = { + 'rpmsrate_flags_chosen' => { + # office + CAT_OFFICE => 1, + CAT_SPELLCHECK => 1, + CAT_PUBLISHING => 1, + CAT_PIM => 1, + CAT_ARCHIVING => 1, + CAT_PRINTER => 1, + # multimedia + CAT_AUDIO => 1, + CAT_GRAPHICS => 1, + CAT_VIDEO => 1, + # internet + CAT_NETWORKING_WWW => 1, + CAT_NETWORKING_MAIL => 1, + CAT_NETWORKING_NEWS => 1, + CAT_COMMUNICATIONS => 1, + CAT_NETWORKING_CHAT => 1, + CAT_NETWORKING_FILE_TRANSFER => 1, + CAT_NETWORKING_IRC => 1, + CAT_NETWORKING_INSTANT_MESSAGING => 1, + CAT_NETWORKING_DNS => 1, + # network + CAT_NETWORKING_REMOTE_ACCESS => 1, + CAT_NETWORKING_FILE => 1, + # config + CAT_CONFIG => 1, + # console + CAT_TERMINALS => 1, + CAT_TEXT_TOOLS => 1, + CAT_SHELLS => 1, + CAT_FILE_TOOLS => 1, + # kde + CAT_KDE => 1, + CAT_X => 1, + CAT_ACCESSIBILITY => 1, + CAT_THEMES => 1, + # system + CAT_SYSTEM => 1, + + # FIXME, use $::o->{build_live_system} for that + '3D' => 1, + BURNER => 1, + DVD => 1, + PCMCIA => 1, + TV => 1, + USB => 1, + SCANNER => 1, + # installs Gnome packages only, not suitable for One + # PHOTO => 1, + }, + # so that rpmsrate flags are really used + 'compssListLevel' => 4, # default from install_steps_interactive + 'default_packages' => [ + #- live requirements + 'drakx-finish-install', + 'squashfs-tools', + 'dkms-minimal', + + #- should be required by live-install + 'lilo', + 'grub', + # perl -MMDK::Common -e 'my $cmds = eval (`cat /usr/lib/libDrakX/fs/format.pm` . "\\%cmds"); print join(", ", uniq(map { "\"$_->[0]\"" } values %$cmds)) . "\n";' 2>/dev/null + "reiserfsprogs", "jfsprogs", "reiser4progs", "hfsutils", "dosfstools", "e2fsprogs", "xfsprogs", "util-linux", + # from diskdrake/*.pm + 'ntfsprogs', + 'davfs', + + #- should be required by draklive copy wizard + 'syslinux', + 'cdrecord', + 'rsync', + 'mtools', + + #- useful packages + 'cups', 'libsane-hpaio1', 'hplip-hpijs', 'libhpip0', + 'ndiswrapper', + 'xmoto', + ], + # explicitely specify the security level, so that environment of the build machine doesn't take precedence + 'security' => 3, + 'useSupermount' => 'magicdev', + 'users' => [ + { + 'icon' => 'default', + 'realname' => '', + 'uid' => '', + 'groups' => [], + 'name' => 'guest', + 'shell' => '/bin/bash', + 'gid' => '' + } + ], + 'locale' => { + 'country' => 'US', + 'IM' => undef, + 'lang' => 'en_US', + 'utf8' => 1 + }, + 'authentication' => { + 'shadow' => 1, + 'local' => 1, + 'md5' => 1 + }, + 'superuser' => { + 'pw' => '', + 'realname' => 'root', + 'uid' => '0', + 'shell' => '/bin/bash', + 'home' => '/root', + 'gid' => '0' + }, + 'keyboard' => { + 'GRP_TOGGLE' => '', + 'KBCHARSET' => 'C', + 'KEYBOARD' => 'us', + 'KEYTABLE' => 'us' + }, + 'timezone' => { + 'ntp' => undef, + 'timezone' => 'America/New_York', + 'UTC' => 1 + }, + 'X' => {}, + 'partitioning' => { + 'auto_allocate' => '', + 'clearall' => 0, + 'eraseBadPartitions' => 0 + }, + #- doc takes too much place + 'excludedocs' => 1, + }; diff --git a/live/One/2006.0/config/live.cfg b/live/One/2006.0/config/live.cfg new file mode 100644 index 000000000..4e759095a --- /dev/null +++ b/live/One/2006.0/config/live.cfg @@ -0,0 +1,63 @@ +my $l = { + system => { + root => '/chroot/live/2006.0', + repository => '/mnt/ken/community/2006.0/i586', + kernel => '2.6.12-17mdk-i586-up-1GB', + auto_install => 'config/auto_inst.cfg.pl', + patch_install => 'config/patch-2006-live.pl', + # rpmsrate: removed OpenOffice.org-help-*, gimp-help-2 + # and dkms-zaptel/zaptel-tools (they pulled kernel-source) + # clean-rpmsrate -o /home/blino/live/2006.0/config/rpmsrate /home/blino/cvs/mandriva/BRANCHES/2006/gi/perl-install/share/rpmsrate /mnt/ken/community/2006.0/i586/media/main/ + rpmsrate => 'config/rpmsrate', + patches => [ + 'patches/halt.loopfs.patch', + 'patches/netfs.loopfs.patch', + ], + rpms => [ + 'rpms/unionfs-kernel-2.6.12-17mdk-i586-up-1GB-1.1.1.1.20060117.1mdk-1mdk.i586.rpm', + 'rpms/unionfs-tools-1.1.1-1.20060117.1mdk.i586.rpm', + 'rpms/live-install-0.1-1mdk.noarch.rpm', +# 'rpms/xmoto-0.1.9-0.1.20060mdk.i586.rpm', + 'rpms/drakx-finish-install-10.3-0.64.4.20060mdk.i586.rpm', + 'rpms/drakxtools-10.3-0.64.4.20060mdk.i586.rpm', + 'rpms/drakxtools-backend-10.3-0.64.4.20060mdk.i586.rpm', + 'rpms/drakxtools-newt-10.3-0.64.4.20060mdk.i586.rpm', + 'rpms/harddrake-10.3-0.64.4.20060mdk.i586.rpm', + 'rpms/harddrake-ui-10.3-0.64.4.20060mdk.i586.rpm', + # ken:/mnt/BIG/dis/2006.0/one/ + 'rpms/mandriva-theme-One-1.0.12-3mdk.noarch.rpm', + 'rpms/mandriva-theme-One-screensaver-1.0.12-3mdk.noarch.rpm', + ], + erase_rpms => [ + 'mandriva-theme', + 'mandriva-theme-screensaver', + ], +# better patch rpmsrate instead of doing this +# erase_rpms => [ +# 'OpenOffice.org-help-*', +# 'gimp-help-2', +# 'kernel-source-2.6', +# 'dkms-zaptel', +# 'dkms', +# ], + vga_mode => 788, + }, + regions => {'occident' => ['br','ca','cy','de','en_GB','en_IE','en_US','es','eu','fr','ga','gl','gn','it','iu','kl','lb','mt','nds','oc','pt','pt_BR','qu','sc','wa'],'asiafrica' => ['af','am','ar','as','az','ber','bn','fa','gu','he','hi','hy','id','ja','ka','km','kn','ko','ku','ky','lo','mi','ml','mn','mr','ms','ne','pa_IN','ph','ss','st','ta','te','tg','th','tk','tt','ug','ur','uz','uz@Latn','ve','vi','xh','zh_CN','zh_TW','zu'],'central_europe' => ['da','el','eo','fi','fo','fur','fy','is','li','nb','nl','nn','se','sv','tr'],'eastern_europe' => ['be','bg','bs','cs','et','hr','hu','lt','ltg','lv','mk','pl','ro','ru','sk','sl','sq','sr','sr@Latn','uk','yi']}, +# media => $custom{media}{nfs}->('8139too', '192.168.100.121', '192.168.100.78:/tmp/draklive/images'), + media => { + storage => 'cdrom', +# storage => 'usb', +# boot => 'cdrom', + }, + extra_media => [ +# { storage => 'usb' }, + ], + mount => $predefined{mounts}{volatile_squash_union}, +# debug => 1, + post => [ + # "sh -c 'touch /var/log/* /var/log/*/*'", + # map { "chkconfig --del $_" } qw(kheader shorewall haldaemon), + ], + copy_initrd => "/var/lib/tftpboot/live.rdz", + workdir => '/home/public/live/2006.0', +}; diff --git a/live/One/2006.0/config/patch-2006-live.pl b/live/One/2006.0/config/patch-2006-live.pl new file mode 100644 index 000000000..c0da6280b --- /dev/null +++ b/live/One/2006.0/config/patch-2006-live.pl @@ -0,0 +1,172 @@ +$o->{autoExitInstall} = 1; +$o->{build_live_system} = 1; +$o->{desktop} = 'KDE'; +$o->{autologin} = ${$o->{users}}[0]->{name}; + + +my %cmdline; +my $opt; foreach (@ARGV) { + if (/^--?(.*)/) { + $cmdline{$opt} = 1 if $opt; + $opt = $1; + } else { + $cmdline{$opt} = $_ if $opt; + $opt = ''; + } +} $cmdline{$opt} = 1 if $opt; +exists $cmdline{langs} and $o->{locale}{langs} = +{ map { $_ => 1 } split(':', $cmdline{langs}) }; + +use install_any; +package install_any; + +undef *ejectCdrom; +*ejectCdrom = sub {}; + +use pkgs; +package pkgs; + +undef *read_rpmsrate; +*read_rpmsrate = sub { + my ($packages, $rpmsrate_flags_chosen, $f) = @_; + + my ($rates, $flags, $need_to_copy) = read_rpmsrate_raw($f); + + foreach (keys %$flags) { + my $p = packageByName($packages, $_) or next; + my @flags = (@{$flags->{$_}}, map { if_(/locales-(.*)/, qq(LOCALES"$1")) } $p->requires_nosense); + + @flags = map { + my ($user_flags, $known_flags) = partition { /^!?CAT_/ } split('\|\|', $_); + my $ok = find { + my $inv = s/^!//; + $inv xor do { + if (my ($p) = /^HW"(.*)"/) { + return $::o->{build_live_system} ? !$inv : detect_devices::matching_desc__regexp($p); + } elsif (($p) = /^HW_CAT"(.*)"/) { + return $::o->{build_live_system} ? !$inv : modules::probe_category($p); + } elsif (($p) = /^DRIVER"(.*)"/) { + return $::o->{build_live_system} ? !$inv : detect_devices::matching_driver__regexp($p); + } elsif (($p) = /^TYPE"(.*)"/) { + return $::o->{build_live_system} ? !$inv : detect_devices::matching_type($p); + } else { + $rpmsrate_flags_chosen->{$_}; + } + }; + } @$known_flags; + $ok ? 'TRUE' : @$user_flags ? join('||', @$user_flags) : 'FALSE'; + } @flags; + + $p->set_rate($rates->{$_}); + $p->set_rflags(member('FALSE', @flags) ? 'FALSE' : @flags); + } + push @{$packages->{needToCopy} ||= []}, @$need_to_copy; +}; + +undef *bestKernelPackage; +*bestKernelPackage = sub { + my ($packages) = @_; + + my @kernels = packages2kernels($packages) or internal_error('no kernel available'); + my ($version_BOOT) = c::kernel_version() =~ /^(\d+\.\d+)/; + if (my @l = grep { $_->{version} =~ /\Q$version_BOOT/ } @kernels) { + #- favour versions corresponding to current BOOT version + @kernels = @l; + } + my @preferred_exts = + $::o->{build_live_system} ? '-i586-up-1GB' : + detect_devices::is_xbox() ? '-xbox' : + detect_devices::is_i586() ? '-i586-up-1GB' : + !detect_devices::has_cpu_flag('pae') ? ('-i686-up-4GB', '-i586-up-1GB') : + detect_devices::hasSMP() ? '-smp' : + ''; + foreach my $prefered_ext (@preferred_exts, '') { + if (my @l = grep { $_->{ext} eq $prefered_ext } @kernels) { + @kernels = @l; + } + } + + log::l("bestKernelPackage (" . join(':', @preferred_exts) . "): " . join(' ', map { $_->{pkg}->name } @kernels) . (@kernels > 1 ? ' (choosing the first)' : '')); + $preferred{'kernel-source-' . $kernels[0]{version}} = undef; + $kernels[0]{pkg}; +}; + +undef *selected_leaves; +*selected_leaves = sub { + my ($packages) = @_; + my $provides = $packages->{provides}; + + my @l = grep { $_->flag_requested || $_->flag_installed } @{$packages->{depslist}}; + + my %required_ids; + foreach my $pkg (@l) { + foreach my $req ($pkg->requires_nosense) { + my $h = $provides->{$req} or next; + my @provides = my ($provide) = keys %$h; + @provides == 1 or next; + if ($provide != (exists $required_ids{$pkg->id} ? $required_ids{$pkg->id} : $pkg->id)) { +# log::l($packages->{depslist}[$provide]->name . " is not a leaf because required by " . $pkg->name . " (through require $req)"); + #- $pkg requires $req, provided by $provide, so we can skip $provide + $required_ids{$provide} = $pkg->id; + } + } + } + [ map { $_->name } grep { ! exists $required_ids{$_->id} } @l ]; +}; + +use install_steps; +package install_steps; + +my $old = \&configureNetwork; +undef *configureNetwork; +*configureNetwork = sub { + my ($o) = @_; + if ($o->{build_live_system}) { + require network::ethernet; + network::ethernet::install_dhcp_client($o, undef); + } + &$old; +}; + +undef *doPartitionDisksAfter; +*doPartitionDisksAfter = sub { + my ($o) = @_; + + if (!$::testing) { + my $hds = $o->{all_hds}{hds}; + partition_table::write($_) foreach @$hds; + $_->{rebootNeeded} and $o->rebootNeeded foreach @$hds; + } + + fs::set_removable_mntpoints($o->{all_hds}); + fs::mount_options::set_all_default($o->{all_hds}, %$o, lang::fs_options($o->{locale})) + if !$o->{isUpgrade}; + + $o->{fstab} = [ fs::get::fstab($o->{all_hds}) ]; + + if ($::local_install) { + my $p = fs::get::mntpoint2part($::prefix, [ fs::read_fstab('', '/proc/mounts') ]); + my $part = fs::get::device2part($p->{device}, $o->{fstab}) || $o->{fstab}[0]; + $part->{mntpoint} = '/'; + $part->{isMounted} = 1; + } + + fs::get::root_($o->{fstab}) or die "Oops, no root partition"; + + if (arch() =~ /ppc/ && detect_devices::get_mac_generation() =~ /NewWorld/) { + die "Need bootstrap partition to boot system!" if !(defined $partition_table::mac::bootstrap_part); + } + + if (arch() =~ /ia64/ && !fs::get::has_mntpoint("/boot/efi", $o->{all_hds})) { + die N("You must have a FAT partition mounted in /boot/efi"); + } + + if ($o->{partitioning}{use_existing_root}) { + #- ensure those partitions are mounted so that they are not proposed in choosePartitionsToFormat + fs::mount::part($_) foreach sort { $a->{mntpoint} cmp $b->{mntpoint} } + grep { $_->{mntpoint} && maybeFormatted($_) } @{$o->{fstab}}; + } + + cat_("/proc/mounts") =~ m|(\S+)\s+/tmp/nfsimage| && + !any { $_->{mntpoint} eq "/mnt/nfs" } @{$o->{all_hds}{nfss}} and + push @{$o->{all_hds}{nfss}}, { fs_type => 'nfs', mntpoint => "/mnt/nfs", device => $1, options => "noauto,ro,nosuid,soft,rsize=8192,wsize=8192" }; +}; diff --git a/live/One/2006.0/config/rpmsrate b/live/One/2006.0/config/rpmsrate new file mode 100644 index 000000000..def220ef2 --- /dev/null +++ b/live/One/2006.0/config/rpmsrate @@ -0,0 +1,784 @@ + + +CAT_LSB + 5 lsb + +CAT_ICEWM + 5 icewm + 5 rox + 3 icepref + +CAT_GRAPHICAL_DESKTOP + 4 WindowMaker + 3 epplets blackbox fluxbox enlightenment ethemes xfce + 2 wmnet + 1 lesstif-mwm + +CAT_GNOME + 5 gnome-panel nautilus nautilus-filesharing gnome-control-center metacity + 5 yelp gnome2 gdm + 4 gnome-applets gtk-themes file-roller + gnome-utils gucharmap xlockmore + gconf-editor desktop-printing eog evince + 4 CAT_THEMES gnome-icon-theme gnome-themes-extras gnome-themes hicolor-icon-theme gdm-themes + 3 gnome-pilot + 2 bug-buddy + +CAT_KDE + 5 galaxy-kde x86-compat-galaxy-kde galaxy-kde-kwin kdebase-nsplugins kdebase-progs krozat mandriva-galaxy xsettings-kde + 5 kdebase-kdm kat + 5 kde-i18n-af kde-i18n-ar kde-i18n-az kde-i18n-be kde-i18n-bg kde-i18n-bn kde-i18n-br kde-i18n-bs kde-i18n-ca kde-i18n-cs kde-i18n-cy kde-i18n-da kde-i18n-de kde-i18n-el kde-i18n-en_GB kde-i18n-eo kde-i18n-es kde-i18n-et kde-i18n-eu kde-i18n-fa kde-i18n-fi kde-i18n-fo kde-i18n-fr kde-i18n-ga kde-i18n-gl kde-i18n-he kde-i18n-hi kde-i18n-hr kde-i18n-hu kde-i18n-id kde-i18n-is kde-i18n-it kde-i18n-ja kde-i18n-ko kde-i18n-lo kde-i18n-lt kde-i18n-lv kde-i18n-mi kde-i18n-mk kde-i18n-mn kde-i18n-ms kde-i18n-mt kde-i18n-nb kde-i18n-nds kde-i18n-nl kde-i18n-nn kde-i18n-oc kde-i18n-pa kde-i18n-pl kde-i18n-pt kde-i18n-pt_BR kde-i18n-ro kde-i18n-ru kde-i18n-se kde-i18n-sk kde-i18n-sl kde-i18n-sr kde-i18n-sv kde-i18n-ta kde-i18n-tg kde-i18n-th kde-i18n-tr kde-i18n-uk kde-i18n-uz kde-i18n-vi kde-i18n-wa kde-i18n-xh kde-i18n-zh_CN.GB2312 kde-i18n-zh_TW.Big5 kde-i18n-zu + 5 kdebase-servicemenu zip + 5 kdeutils-ark kdeutils-kcalc kdeutils-kcharselect kdeutils-kdf kdeutils-kfloppy kdeutils-kdepasswd + 5 kdepim-kontact + 5 kdeaddons-searchbar + 5 kdeutils-kwalletmanager + 5 kdegraphics-kuickshow + 3 kdeutils-kedit kdeutils-khexedit kdeutils-kjots kdeutils-ktimer + 4 CAT_GRAPHICS || PHOTO kdegraphics-common + 4 CAT_THEMES kdeartwork kdeartwork-kde-classic + 4 digikam digikamimageplugins kipi-plugins dcraw + 4 klamav + +CAT_VIDEO + 5 CAT_GNOME totem xine-esd + 5 CAT_KDE kaffeine + 5 CAT_KDE kdenlive + 5 CAT_ICEWM xine-ui + 4 RealPlayer + 3 powerdvd + 3 xmms-smpeg mplayer-gui + 2 xmovie +TV + 5 CAT_KDE kdetv + 5 !CAT_KDE || CAT_GNOME || CAT_ICEWM tvtime + 3 xawtv + 3 zapping + 3 HW"ATI" ati.2 + +CAT_OFFICE + 5 CAT_KDE || CAT_GNOME OpenOffice.org + 5 CAT_KDE || CAT_GNOME OpenOffice.org-l10n-af OpenOffice.org-l10n-ar OpenOffice.org-l10n-ca OpenOffice.org-l10n-cs OpenOffice.org-l10n-cy OpenOffice.org-l10n-da OpenOffice.org-l10n-de OpenOffice.org-l10n-el OpenOffice.org-l10n-en OpenOffice.org-l10n-es OpenOffice.org-l10n-et OpenOffice.org-l10n-eu OpenOffice.org-l10n-fi OpenOffice.org-l10n-fr OpenOffice.org-l10n-he OpenOffice.org-l10n-hu OpenOffice.org-l10n-it OpenOffice.org-l10n-ja OpenOffice.org-l10n-ko OpenOffice.org-l10n-nb OpenOffice.org-l10n-nl OpenOffice.org-l10n-nn OpenOffice.org-l10n-ns OpenOffice.org-l10n-pl OpenOffice.org-l10n-pt OpenOffice.org-l10n-pt_BR OpenOffice.org-l10n-ru OpenOffice.org-l10n-sk OpenOffice.org-l10n-sl OpenOffice.org-l10n-sv OpenOffice.org-l10n-tr OpenOffice.org-l10n-zh_CN OpenOffice.org-l10n-zh_TW OpenOffice.org-l10n-zu + 5 CAT_KDE koffice-kivio + 5 !CAT_KDE || CAT_GNOME || CAT_ICEWM dia + 5 gnucash gnucash-hbci gnucash-ofx + 5 planner + 5 CAT_KDE kdenetwork-kdict + 5 CAT_KDE kdepim-karm + 5 CAT_ICEWM abiword gnumeric + 4 acroread acroread-nppdf + 4 acroread-l10n-da acroread-l10n-de + 3 gaddr xpdf gv + 3 wv ical + 2 units lyx + CAT_KDE + 5 kdepim-korganizer + 5 kdepim-kaddressbook + 5 kdepim-knotes + 5 kdegraphics-kghostview + 5 kdepim-kpilot + 3 koffice koffice-i18n-af koffice-i18n-az koffice-i18n-br koffice-i18n-eo koffice-i18n-fa koffice-i18n-he koffice-i18n-ja koffice-i18n-lo koffice-i18n-lt koffice-i18n-mt koffice-i18n-ro koffice-i18n-se koffice-i18n-sk koffice-i18n-ta koffice-i18n-th koffice-i18n-tr koffice-i18n-uk koffice-i18n-zh_TW koffice-i18n-zu koffice-i18n-bg + 3 kdegraphics-kdvi + CAT_GNOME + 4 gnome-pim + 3 gnome-pilot-conduits + +CAT_SPELLCHECK + 5 aspell-af aspell-am aspell-az aspell-be aspell-bg aspell-bn aspell-br aspell-ca aspell-cs aspell-cy aspell-da aspell-de aspell-el aspell-en aspell-eo aspell-es aspell-et aspell-fa aspell-fi aspell-fo aspell-fr aspell-ga aspell-gd aspell-gl aspell-gv aspell-he aspell-hi aspell-hr aspell-hu aspell-id aspell-is aspell-it aspell-ku aspell-lt aspell-lv aspell-mi aspell-mk aspell-mn aspell-mr aspell-ms aspell-mt aspell-nds aspell-nl aspell-nn aspell-no aspell-pa aspell-pl aspell-pt aspell-ro aspell-ru aspell-sc aspell-sk aspell-sl aspell-sv aspell-sw aspell-ta aspell-tl aspell-tr aspell-uk aspell-uz aspell-vi aspell-wa aspell-yi aspell-zu + 5 myspell-af_ZA myspell-bg_BG myspell-ca_ES myspell-cs_CZ myspell-cy_GB myspell-da_DK myspell-de_AT myspell-de_CH myspell-de_DE myspell-el_GR myspell-en_AU myspell-en_CA myspell-en_GB myspell-en_NZ myspell-en_US myspell-es_ES myspell-es_MX myspell-et_EE myspell-fo_FO myspell-fr_BE myspell-fr_FR myspell-ga_IE myspell-gl_ES myspell-hr_HR myspell-hu_HU myspell-id_ID myspell-it_IT myspell-lt_LT myspell-mi_NZ myspell-ms_MY myspell-nb_NO myspell-nl_NL myspell-nn_NO myspell-pl_PL myspell-pt_BR myspell-pt_PT myspell-ro_RO myspell-ru_RU myspell-sk_SK myspell-sl_SI myspell-sv_SE myspell-sw_KE myspell-uk_UA myspell-zu_ZA + 5 myspell-hyph-bg myspell-hyph-cs myspell-hyph-da myspell-hyph-de myspell-hyph-el myspell-hyph-en myspell-hyph-es myspell-hyph-et myspell-hyph-fi myspell-hyph-fr myspell-hyph-ga myspell-hyph-hu myspell-hyph-id myspell-hyph-is myspell-hyph-it myspell-hyph-lt myspell-hyph-nl myspell-hyph-pl myspell-hyph-pt myspell-hyph-ru myspell-hyph-sk myspell-hyph-sl myspell-hyph-sv myspell-hyph-uk + +SOUND + 5 CAT_KDE kdemultimedia-kmix + 5 CAT_ICEWM aumix + 3 CAT_KDE xmms-arts + 3 sox + +CAT_AUDIO + 5 CAT_KDE kdemultimedia-kscd + 5 CAT_KDE xine-arts amarok-engine-arts + 5 CAT_KDE || CAT GNOME audacity + 5 CAT_KDE kdemultimedia-kaudiocreator kdemultimedia-common + 5 CAT_KDE || CAT_GNOME gnome-media + 4 CAT_GNOME rhythmbox sound-juicer + 5 CAT_ICEWM grip + 4 CAT_GNOME gnome-audio + 4 CAT_KDE rosegarden4 + 3 cdp + 3 cdparanoia + 3 cdrecord-cdda2wav + 3 CAT_GNOME gnome-audio-extra + 3 CAT_KDE kdeaddons-noatun + 3 CAT_KDE kdemultimedia-kmid + 3 CAT_KDE kdemultimedia-kmidi + 3 CAT_KDE kdemultimedia-noatun + 3 timidity-instruments + 3 beep-media-player + 5 DRIVER"^snd-" alsa-utils + 4 DRIVER"^snd-" gstreamer-alsa + + 5 DRIVER"^snd-sb" cspctl + 5 DRIVER"^snd-sb|^sbawe" sb16_csp + 5 DRIVER"^sbawe" awesfx + 5 DRIVER"snd-darla20|snd-darla24|snd-gina20|snd-gina24|snd-gina3g|snd-indi|snd-indigodj|snd-indigoio|snd-layla20|snd-layla24|snd-layla3g|snd-mia|snd-mona" echomixer + 5 DRIVER"snd-emu10k1|snd-emu10k1x" as10k1 ld10k1 + 5 DRIVER"snd-hdsp" hdspconf hdsploader hdspmixer rmedigicontrol + 5 DRIVER"snd-ice1712|snd-ice1724" envy24control + + 5 DRIVER"snd-pcxhr" pcxhrloader + 5 DRIVER"snd-sscape" sscape_ctl + 5 DRIVER"snd-mixart" mixartloader + 5 DRIVER"snd-usb-usx2y" us428control usx2yloader + 5 DRIVER"^snd-vx" vxloader + 3 xmms-esd + 3 xmms-kjofol-skins + 3 xmms-more-vis-plugins + 3 xmms-skins + 3 3D xmms-mesa + 3 HW"Rio 500" rio500 + 2 mp3info mpg123 playmidi playmidi-X11 xmms-mikmod + + +CAT_ACCESSIBILITY + 5 dasher + 5 gnopernicus + 5 gok + 5 CAT_KDE kdeaccessibility + 2 gtkeyboard + +CAT_PUBLISHING + 5 scribus + 5 enscript ghostscript-module-X + 4 psutils texinfo + 2 docbook-dtd31-sgml latex2html jadetex tetex-afm tetex-dvips tetex-latex tetex-xdvi tetex-latex-arab tetex-latex-heb + 2 CAT_BOOKS tetex-doc + 1 cttex docbook-style-dsssl openjade + 1 CAT_BOOKS docbook-style-dsssl-doc + +CAT_SHELLS + 3 zsh + 3 CAT_BOOKS bash-doc zsh-doc + 2 pdksh tcsh + 1 bash1 + +CAT_SCIENCES + 4 gnuplot + 3 HDF + 2 mathplot octave + +CAT_EDUCATION + 4 CAT_KDE kdeedu + +CAT_EDITORS + 4 emacs-X11 + 3 GXedit + 3 CAT_KDE kdebase-kate + 3 vim-X11 + 3 yudit + 2 cooledit emacs-tramp emacs-leim jed-xjed joe nedit xemacs xemacs-extras xemacs-info + 1 emacs-el xemacs-el emacs-nox jed + CAT_GNOME + 4 gedit + +CAT_TEXT_TOOLS + 5 words + 4 groff patch recode rgrep + 3 ed + 2 groff-gxditview lout + CAT_BOOKS + 3 gawk-doc + 1 lout-doc + +CAT_COMMUNICATIONS + 5 efax + 5 gnomemeeting + 5 CAT_KDE kphone + 4 CAT_KDE kdebase-kdeprintfax kdegraphics-kfax + 4 CAT_ICEWM drakfax + 4 CAT_ICEWM jpilot pilot-link + 4 hylafax-client + 2 hylafax-server dip + 2 lrzsz mgetty mgetty-contrib mgetty-sendfax mgetty-viewfax mgetty-voice minicom + 1 jpilot-Mail jpilot-syncmal statserial + +CAT_TERMINALS + 5 open + 5 !CAT_KDE !CAT_GNOME xterm + 5 CAT_KDE kdebase-konsole + 5 CAT_GNOME gnome-terminal + 4 screen kon2 + 3 bash-completion + 3 Eterm vlock + 3 aterm x3270 + + 3 CAT_GNOME gnome-telnet + 4 LOCALES"ja" kterm + +CAT_NETWORKING_CHAT + 3 CAT_KDE kdenetwork-ktalk + 3 talk ytalk + +CAT_NETWORKING_CHAT_SERVER + 4 jabber + 3 talk-server + +CAT_NETWORKING_FILE_TRANSFER + 5 CAT_KDE kbear + 5 CAT_GNOME gftp + 5 lftp mirrordir rsync + 4 CAT_KDE lisa + 4 rdist + 3 fmirror ncftp tftp + 2 uucp + +CAT_NETWORKING_FILE_TRANSFER_SERVER + 4 proftpd + 3 proftpd-anonymous + 2 wu-ftpd anonftp + +CAT_NETWORKING_LDAP_SERVER + 4 openldap-servers directory_administrator + +CAT_NETWORKING_INSTANT_MESSAGING + 5 CAT_KDE kdenetwork-kopete + 5 LOCALES"zh" CAT_KDE eva + 5 !CAT_KDE || CAT_GNOME gaim + 3 licq + 3 ayttm + 3 licq-console licq-rms + CAT_GNOME + 3 gnomeicu gossip + 3 gtk+licq + +CAT_NETWORKING_IRC + 3 xchat + 3 BitchX + 3 CAT_KDE kdenetwork-ksirc + 3 mozilla-irc + 2 irssi + 1 eggdrop + +CAT_NETWORKING_FIREWALLING_SERVER + 5 iproute2 routed iptables + 3 prelude-manager + +CAT_NETWORKING_GROUPWARE_SERVER + 5 kolab-server + 3 phpgroupware + +CAT_NETWORKING_MAIL + 5 CAT_KDE kdepim-kmail + 5 CAT_GNOME evolution + 3 mailx metamail + 3 faces mozilla-thunderbird mozilla-thunderbird-en mozilla-thunderbird-fr + 3 fetchmail urlview mutt spamassassin + 3 !CAT_GNOME !CAT_KDE xmailbox + 3 CAT_KDE kdepim-korn + 2 FaxMail faces-xface + 1 fetchmail-daemon fetchmailconf + +CAT_NETWORKING_MAIL_SERVER + 5 postfix + 4 mailman + 3 imap + +CAT_NETWORKING_NEWS + 5 CAT_KDE kdepim-knode + 5 CAT_GNOME pan + 2 slrn + 1 slrn-pull + +CAT_NETWORKING_NEWS_SERVER + 4 inn + 3 inews + +CAT_NETWORKING_OTHER + 2 finger ucd-snmp-utils macutils + +CAT_NETWORKING_OTHER_SERVER + 3 dhcp-server gated ntp + + 3 intimed nscd pidentd + rdate bootparamd + cleanfeed ucd-snmp leafnode + cvsweb + xorg-x11-Xvfb xorg-x11-Xnest + 2 diald finger-server mars-nwe + +CAT_NIS + 5 ypbind + +CAT_NIS_SERVER + 5 ypserv + +CAT_NETWORKING_REMOTE_ACCESS + 5 openssh-clients telnet-client-krb5 keychain + 4 traceroute rfbdrake + 3 CAT_KDE kdeutils-kdessh + 3 tightvnc + 2 rsh + +CAT_NETWORKING_REMOTE_ACCESS_SERVER + 5 openssh-server + 4 rfbdrake + 2 tightvnc-server + 1 telnet-server-krb5 rsh-server + 3 CAT_BOOKS tightvnc-doc + +CAT_NETWORKING_DNS + 4 bind-utils + +CAT_NETWORKING_DNS_SERVER + 5 bind + 4 caching-nameserver + 1 nslint + +CAT_NETWORKING_FILE + 4 samba-client nfs-utils-clients + CAT_X smb4k + 2 CAT_X LinNeighborhood + 2 arkeia-gui arkeia-client arkeia-arkc + 2 CAT_GNOME gnomba gtm + 2 autofs + +CAT_NETWORKING_FILE_SERVER + 5 nfs-utils + 4 samba-server + 3 CAT_BOOKS samba-doc + 3 CAT_KDE kdenetwork-krfb + 2 arkeia-server samba-winbind + 3 squid squidGuard + +CAT_NETWORKING_WWW + 5 CAT_X mozilla-firefox + 5 CAT_X mozilla-firefox-af mozilla-firefox-br mozilla-firefox-ca mozilla-firefox-cs mozilla-firefox-da mozilla-firefox-de mozilla-firefox-el mozilla-firefox-es mozilla-firefox-fi mozilla-firefox-fr mozilla-firefox-ga mozilla-firefox-he mozilla-firefox-hu mozilla-firefox-it mozilla-firefox-ja mozilla-firefox-ko mozilla-firefox-nb mozilla-firefox-nl mozilla-firefox-pl mozilla-firefox-pt mozilla-firefox-pt_BR mozilla-firefox-ro mozilla-firefox-ru mozilla-firefox-sk mozilla-firefox-sl mozilla-firefox-sv mozilla-firefox-tr mozilla-firefox-zh_CN mozilla-firefox-zh_TW + 5 CAT_KDE kdewebdev + 5 CAT_GNOME screem + 5 CAT_GNOME epiphany epiphany-extensions + 4 FlashPlayer crossover-plugin-demo j2re x86-compat-j2re + 4 wget + 4 lynx + 3 CAT_KDE kdeaddons + 3 links + 3 CAT_KDE kdenetwork-kget + 3 CAT_KDE kdenetwork-knewsticker + 3 mozilla + 3 mozplugger + 3 opera + 3 bluefish + CAT_DEVELOPMENT + 4 nvu + +CAT_NETWORKING_WWW_SERVER + 5 apache-mpm-prefork apache-mod_perl apache-mod_ssl apache-mod_php + 4 apache-mod_suexec + 4 CAT_BOOKS apache-doc + 3 drbd-utils-heartbeat + 3 php-gd php-imap php-ldap php-mysql + php-pgsql php-readline php_cgi mod_sxnet HTML-Embperl + 3 CAT_BOOKS php-manual-en php-manual-fr + +CAT_GRAPHICS + 5 qiv + 5 gimp ufraw-gimp + 5 CAT_KDE kuickshow + 5 !CAT_KDE gthumb + 5 CAT_KDE kdegraphics-ksnapshot + 4 !CAT_KDE || CAT_GNOME flphoto gtkam + 4 ImageMagick giftrans gphoto2 + 3 gimp-data-extras + 3 CAT_BOOKS + 3 CAT_KDE kdeaddons-konqimagegallery + 3 CAT_KDE kdegraphics-kpaint + 3 CAT_KDE kdegraphics-kruler + 3 CAT_KDE kdegraphics-kview + 3 CAT_KDE kdegraphics-mrmlsearch + 3 skencil + 3 xwpick + 3 xli + 2 gif2png gimp-perl xpcd xfig xpcd-gimp gd-utils + 1 netpbm libungif-progs qcad transfig xpaint xmorph + 1 3D Mesa-demos + CAT_GNOME + 3 gnome-iconedit + 3 ee + +CAT_ARCHIVING + 5 unzip zip dump sharutils + 2 mt-st + 2 taper + 1 lha + CAT_GNOME + 2 gnozip + 2 gtktalog + +BURNER + 5 mkisofs cdrecord dvd+rw-tools + 5 CAT_KDE k3b-dvd kover + 5 CAT_GNOME nautilus-cd-burner + 4 !CAT_KDE !CAT_GNOME CAT_X xcdroast + 3 gcombust + 3 CAT_GNOME gnome-toaster + 2 !CAT_KDE !CAT_GNOME CAT_X eroaster + CAT_DEVELOPMENT + 3 cdrecord-devel + +SCANNER + 4 sane-frontends xsane + 4 CAT_KDE kdegraphics-kooka + +PHOTO + 4 gphoto gphoto2 ufraw + +CAT_DATABASES + 5 postgresql + 3 MySQL-client + CAT_DATABASES_SERVER + 4 postgresql-server + 3 MySQL + 2 postgresql-jdbc postgresql-tcl postgresql-test + CAT_DEVELOPMENT + 4 perl-Mysql + 3 postgresql-devel + 1 MySQL-bench libmysql14-devel libmysql-devel + +CAT_GAMES + 5 frozen-bubble + 5 lbreakout2 + 5 supertux + 5 crack-attack crack-attack-music crack-attack-sounds + 3 clanbomber freeciv-client toppler + 3 cxhextris rocksndiamonds powermanga mures methane + 2 Maelstrom pingus ltris penguin-command pysol xpilot trophy xboard skobo xpat2 xsoldier xfishtank + 1 fortune-mod nil + CAT_GNOME + 3 gnome-games + 3 gnome-chess + CAT_KDE + 3 kdegames + 3 kdeaddons-atlantik + 3 kdetoys + 3D + 5 armagetron csmash + !HW"Riva.*128" chromium ppracer + + 3 !HW"Riva.*128" !HW"Rage X[CL]" !HW"Rage Mobility (?:P\/M|L) " !HW"3D Rage (?:LT|Pro)" bzflag + +CAT_DEVELOPMENT + 5 autoconf2.1 automake1.4 m4 make + 3 autoconf2.5 + 1 tmake pmake + + 5 libtool binutils ltrace gcc + 2 gperf indent + 1 glibc-profile + + 4 gcc-c++ libstdc++6-devel libstdc++-devel + 2 libsigc++-examples + + 4 bison flex + 2 byacc + + 2 doxygen C++2LaTeX + + 3 jikes kaffe + 1 gcc-java + + 5 cvs rcs + 2 diffstat tkcvs + + 3 swig + + 4 python tkinter + 3 libpython2.4-devel python-devel python-imaging pygtk-glarea pygtk pygtk-libglade rpm-python + + 4 perl perl-Term-Readline-Gnu perl-libwww-perl perl-devel + 3 perl-DBI perl-IO-stringy perl-PDL perl-Parse-RecDescent + perl-Tk perlftlib perl-URI perl-DB_File + perl-Data-ShowTable perl-HTML-Parser perl-HTML-SimpleParse + perl-MIME-tools perl-MP3-Info perl-MailTools perl-Msgcat + + 4 rpm-build + 3 rpmlint librpm4.4-devel rpm-devel rpm-rebuilder + 3 kernel-source + + 2 gcc-g77 nasm dev86 + 1 gcc-objc + + 2 gprolog ocaml umb-scheme mawk guile clisp + hugs98 swi-prolog ruby + + 4 gettext-devel libncurses5-devel ncurses-devel + + 5 CAT_X memprof + 5 valgrind + 5 gdb + 1 xxgdb + + CAT_BOOKS + 5 qt3-example + 2 pam-doc python-docs slang-doc kernel-doc nasm-doc ruby-doc lkmpg + + CAT_KDE + 5 kdevelop + 5 kdesdk + 5 libkdenetwork2-kopete-devel libkdebase4-kate-devel libkdepim2-common-devel + libkdebase4-nsplugins-devel libkdepim2-kaddressbook-devel + libkdepim2-kmail-devel libkdecore4-devel kdecore-devel libkdepim2-knode-devel + libkdeedu1-devel kdeedu-devel libkdepim2-kontact-devel libkdegames1-devel + libkdepim2-korganizer-devel libkdegraphics0-common-devel + libkdepim2-kpilot-devel libkdegraphics0-kooka-devel + libkdesdk1-cervisia-devel libkdegraphics0-kpovmodeler-devel + libkdesdk1-devel kdesdk-devel libkdegraphics0-ksvg-devel libkdesdk1-kbabel-devel + libkdegraphics0-kview-devel libkdetoys1-devel kdetoys-devel + libkdemultimedia1-common-devel libkdeutils1-common-devel + libkdemultimedia1-kscd-devel libkdeutils1-ksim-devel + libkdemultimedia1-noatun-devel libkdevelop3-devel kdevelop-devel libarts1-devel arts-devel + libqt3-devel qt-devel quanta-devel libquanta0-kfilereplace-devel + libquanta0-kommander-devel koffice-devel + + CAT_GNOME + 3 glade2 pygnome libgnomeui2_0-devel libpanel-applet-2_0-devel + 2 pygnome-capplet pygnome-libglade + libgnomemm-1.2_9-devel libgnome-pilot2-devel glademm + 1 libgnucash0-devel + + CAT_DEVELOPMENT_OTHER + 2 libMagick8.4.2-devel libMagick-devel libMesaGLU1-devel libXaw3d7-devel Xaw3d-devel + libgd2-devel gd-devel p2c-devel libgmp3-devel gmp-devel libguile12-devel guile-devel libgr-devel libjpeg62-devel libjpeg-devel libpng3-devel libpng-devel + libtermcap2-devel libtermcap-devel libtiff3-devel libtiff-devel libungif4-devel libungif-devel libxml2-devel libxml-devel + libslang1-devel slang-devel sox-devel zlib1-devel zlib-devel libxorg-x11-devel dev86-devel + libgdk-pixbuf2-devel gdk-pixbuf-devel libgimp2.0-devel gimp-devel libgpm1-devel gpm-devel libghttp1-devel libghttp-devel libgtop2.0_5-devel libgtop-devel + libmikmod2-devel libmikmod-devel librep-devel libunicode0-devel libunicode-devel libpopt0-devel popt-devel libpwdb0-devel pwdb-devel libt1lib5-devel t1lib-devel + libsnmp-devel mpeg_lib-devel libWindowMaker0-devel WindowMaker-devel libaa1-devel libaa-devel libadns1-devel adns-devel + libalsa2-devel libalsa-devel libaudiofile0-devel audiofile-devel libcups2-devel cups-devel e2fsprogs-devel + libg-wrap1-devel g-wrap-devel gkrellm-devel libPropList0-devel libPropList-devel licq-devel openldap-devel + libparted1.6-devel parted-devel pciutils-devel pilot-link-devel svgalib-devel + librecode0-devel recode-devel libaspell15-devel aspell-devel cracklib-devel faces-devel libfnlib0-devel fnlib-devel + libfreetype6-devel freetype-devel gtk+mdk-devel libgtkglarea5-devel gtkglarea-devel libxorg-x11-static-devel imap-devel + php-devel libpth20-devel pth-devel libsane1-devel sane-devel swig-devel xdelta-devel isapnptools-devel + libpango1.0_0-devel pango-devel libreadline5-devel readline-devel + +CAT_MONITORING + 5 procinfo psacct + 4 lsof swatch tcpdump traceroute + 4 nmap lm_sensors + 4 CAT_X nmap-frontend + 4 smartmontools + 3 CAT_KDE kdeutils-ksim + 3 iplog arpwatch lslk xcpustate xsysinfo pciutils lshw + 2 cfengine gkrellm gps rusers mon + 2 3D xtraceroute + 1 logcheck + CAT_GNOME + 4 gnome-system-monitor + +CAT_FILE_TOOLS + 5 file gnupg mkxauth mtools slocate + 4 symlinks mc + 3 dosfstools draksync tree + 2 git FileRunner + 1 xdelta + +CAT_WEBMIN + 5 webmin + 5 mdkwebadmin + CAT_BOOKS + 3 mandriva-doc-Server_Conf_Guide-en mandriva-doc-Server_Conf_Guide-fr + 3 mandriva-doc-contrib-Server_Conf_Guide-pl mandriva-doc-contrib-Server_Conf_Guide-zh_cn + +CAT_WIZARDS + 5 drakwizard + +CAT_CONFIG + 3 ipvsadm quota nut + 2 gfcc adjtimex xinput timeconfig samba-swat + 1 ipxutils + +CAT_BOOKS + 4 mandriva-doc-Starter-de mandriva-doc-Starter-en mandriva-doc-Starter-es mandriva-doc-Starter-fr mandriva-doc-Starter-it mandriva-doc-Starter-pt_br + 4 mandriva-doc-contrib-Starter-et mandriva-doc-contrib-Starter-zh_cn mandriva-doc-contrib-Starter-pl + 4 META_CLASS"desktop" mandriva-doc-Discovery-en mandriva-doc-Discovery-fr + +CAT_X + 5 xorg-x11 xorg-x11-server rxvt xorg-x11-75dpi-fonts urw-fonts fonts-ttf-dejavu + 5 icewm-light monitor-edid + 5 HIGH_SECURITY mountloop + 5 LOCALES"zh" || LOCALES"am" scim-tables + 5 LOCALES"ja" scim-anthy scim-input-pad scim-tomoe + 5 LOCALES"ja" !CAT_KDE uim-gtk + 5 LOCALES"ja" CAT_KDE uim-qt + 5 LOCALES"ko" scim-hangul + 5 LOCALES"vi" scim-m17n + 5 LOCALES"zh" scim-pinyin + 5 LOCALES"zh_TW" scim-chewing + 5 LOCALES"am" || LOCALES"ja" || LOCALES"ko" || LOCALES"vi" || LOCALES"zh" CAT_KDE scim-qtimm + 5 LOCALES"ja" || LOCALES"ko" || LOCALES"zh" rxvt-CJK rxvt-unicode + + 4 vim-enhanced + 4 gurpmi rpmdrake drakconf userdrake fonts-ttf-decoratives fonts-ttf-west_european + mandrake-mime menudrake desktop-common-data + mdkonline drakfirsttime gtk-engines bootsplash + galaxy-gnome x86-compat-galaxy-gnome + + CAT_BOOKS + 3 mandriva-doc-Drakxtools-Guide-de mandriva-doc-Drakxtools-Guide-en mandriva-doc-Drakxtools-Guide-es mandriva-doc-Drakxtools-Guide-fr mandriva-doc-Drakxtools-Guide-it mandriva-doc-Drakxtools-Guide-pt_br + 3 mandriva-doc-contrib-Drakxtools-et mandriva-doc-contrib-Drakxtools-ru + + 3 xorg-x11-100dpi-fonts draksync + 3 USB usbview + 2 LOCALES"ja" || LOCALES"ko" || LOCALES"zh" jmcce + 2 imlib-cfgeditor + 1 Mesa xtoolwait X11R6-contrib + + + 3 ami fcitx gcin im-ja imhangul kinput2-wnn4 nabi scim-canna scim-fcitx scim-m17n scim-prime scim-skk scim-uim skim xvnkb + + 2 app-defaults-be app-defaults-cs app-defaults-ga app-defaults-ru app-defaults-th app-defaults-uk + + 5 LOCALES"ru" || LOCALES"uk" xorg-x11-cyrillic-fonts + LOCALES"am" fonts-ttf-ethiopic + LOCALES"ar" fonts-ttf-arabic-arabeyes fonts-ttf-arabic-kacst + LOCALES"ar" || LOCALES"fa" || LOCALES"ur" fonts-ttf-arabic-farsi + LOCALES"as" || LOCALES"bn" fonts-ttf-bengali + LOCALES"el" fonts-type1-greek + LOCALES"he" || LOCALES"yi" fonts-hebrew-elmar fonts-type1-hebrew + LOCALES"hy" fonts-ttf-armenian + LOCALES"ja" fonts-ttf-japanese + LOCALES"kn" fonts-ttf-kannada + LOCALES"ko" fonts-ttf-korean + LOCALES"ta" fonts-ttf-tamil fonts-ttf-tscii fonts-bitmap-tscii + LOCALES"th" fonts-ttf-thai + LOCALES"zh" fonts-ttf-chinese + LOCALES"zh_CN" fonts-ttf-gb2312 + LOCALES"zh_TW" taipeifonts fonts-ttf-big5 + 4 META_CLASS"download" mandriva-theme + 4 META_CLASS"desktop" mandriva-theme-Discovery + CAT_KDE discovery-icons-theme + 4 META_CLASS"server" mandriva-theme-Powerpack+ + 4 META_CLASS"powerpack" mandriva-theme-Powerpack + +DOCS + 5 man info man-pages + +CAT_SYSTEM + 5 at eject ldetect harddrake udev s2u sharutils + locales iputils urpmi cpio msec tmpwatch gnupg + + 5 dmidecode setarch + + 5 HIGH_SECURITY libsafe kernel-secure lads + + 5 PCMCIA pcmcia-cs + + 5 HW"HighPoint Technologies Inc.\|HPT37|Promise Technology.*FastTrak" || DRIVER"ata_piix|i2o_block|megaraid|sata_sil" mdadm dmraid + 5 HW"American Power Conversion\|Back-UPS Pro 500|MGE UPS Systems\|" nut-server + 5 HW"iKey 3000 Token" rnboifd + 5 HW_CAT"network/slmodem" slmodem + 5 DRIVER"^LT:|slamr|slusb|^Hcf:|^Hsf:" ppp + CAT_KDE kdenetwork-kppp + 5 DRIVER"^LT:" ltmodem + 5 HW"OmniKey Cardman" cm2020 + SMP cm2020-smp + HIGH_SECURITY cm2020-secure + BIGMEM cm2020-enterprise + 5 DRIVER"a320raid" || HW"HostRAID" a320raid-kernel + SMP a320raid-kernelsmp + 5 HW"\|SynPS/2 Synaptics TouchPad|\|AlpsPS/2 ALPS TouchPad" synaptics + 5 HW"\|SynPS/2 Synaptics TouchPad|\|AlpsPS/2 ALPS TouchPad" CAT_KDE ksynaptics + + 5 CAT_KDE || CAT_GNOME gnome-volume-manager + + 5 DRIVER"slamr|slusb" slmodem-kernel + 5 HW"DAC960|cpqarray" cpqarrayd + 5 DRIVER"^ISDN:" ibod isdn4net isdn4k-utils + 5 DRIVER"eagle-usb" eagle-usb + 5 HW_CAT"input/joystick" joystick + 5 HW_CAT"multimedia/radio" CAT_KDE kradio qtradio + 5 HW_CAT"multimedia/radio" CAT_GNOME gnomeradio + 5 HW_CAT"multimedia/dvb" dvb-apps dvbsnoop dvbstream dvbtune + 5 CAT_KDE HW_CAT"bus/bluetooth" kdebluetooth + 5 !CAT_KDE || CAT_GNOME HW_CAT"bus/bluetooth" gnome-bluetooth + 5 DRIVER"ipw2100" ipw2100-firmware + 5 DRIVER"ipw2200" ipw2200-firmware + 5 DRIVER"ath_pci" madwifi-kernel madwifi + 5 DRIVER"prism54" prism54-firmware + 5 DRIVER"^at76" atmel-firmware + 5 DRIVER"speedtch" speedtouch speedtouch_mgmt + 5 DRIVER"^Hcf:" hcfmodem + 5 DRIVER"^Hsf:" hsfmodem + + 5 HW_CAT"bus/bluetooth" bluez-utils + + 5 CAT_KDE TYPE"wireless" kdenetwork-kwifimanager + 5 TYPE"wireless" libiw27 wireless-tools + + + 5 CAT_KDE TYPE"laptop" kdeutils-klaptop + 5 !CAT_KDE TYPE"laptop" cpufreqd + 5 TYPE"laptop" cpufreq apmd hotkeys laptop-mode-tools + 3 evms evms-gui evms-cli evms-ncurses + + 4 ftp-client-krb5 hexedit strace sudo grub procmail hdparm coreutils-doc bc + lsof + + 4 TYPE"laptop" netprofile + + 2 sndconfig acpid adns audiofile freeswan fbset vlan-utils gpm + 1 fdutils genromfs mailcap pinfo + + CAT_BOOKS + 5 man-pages-cs man-pages-da man-pages-de man-pages-es man-pages-fr man-pages-hu man-pages-id man-pages-it man-pages-ja man-pages-ko man-pages-pl man-pages-pt_BR man-pages-ru man-pages-zh + 4 grub-doc lilo-doc + howto-html-de howto-html-el howto-html-en howto-html-es howto-html-fi howto-html-fr howto-html-hu howto-html-id howto-html-it howto-html-ja howto-html-ko howto-html-nl howto-html-pl howto-html-ro howto-html-sl howto-html-sv howto-html-zh + + 4 CAT_NIS yp-tools + 3 TYPE"laptop" irda-utils + 3 USB usbutils + + 4 LOCALES"ar" || LOCALES"fa" || LOCALES"he" || LOCALES"yi" acon + 3 LOCALES"zh" zh-autoconvert + +CAT_EMULATORS + 3 wine + +CAT_PRINTER + 4 xpp nmap printer-testpages scli net-tools foomatic-db-engine + foomatic-filters foomatic-db foomatic-db-hpijs ImageMagick + ghostscript printer-filters printer-utils mpage + a2ps ppdfilt groff lesstif + libsnmp0 + hplip-hpijs postscript-ppds + gutenprint-ijs gutenprint-foomatic gutenprint-escputil + gutenprint-gimp2 + +INSTALL + NOCOPY + 5 kernel-2.6.12.17mdk kernel kernel-smp-2.6.12.17mdk kernel-smp kernel-i686-up-4GB-2.6.12.17mdk kernel-i686-up-4GB + mdadm lvm2 reiserfsprogs jfsprogs xfsprogs + alsa-utils xorg-x11 xorg-x11-server + ik8utils toshutils + 4 brltty + + 5 pptp-linux dhcpcd dhcpxd dhcp-client rp-pppoe pump + ppp nfs-utils-clients ppp-pppoe ppp-pppoatm + autologin ntp samba-server ncpfs ucd-snmp libptal0 + shorewall iptables samba-client perl-Net-DNS mandi-ifw + ipchains nc sndconfig curl + mtools mtoolsfm numlock usbutils + ypbind + autofs pam_ldap pam_krb5 libsasl2-plug-gssapi nss_ldap openldap-clients samba-winbind + tmdns zcip acpi acpid + ibod isdn4net isdn-light isdn4k-utils kernel-2.4 + eagle-usb + speedtouch speedtouch_mgmt + kdenetwork-kppp-provider + synaptics dkms-minimal + prism2-utils wpa_supplicant + + 5 cups cups-drivers hpoj libhpojip0 gutenprint-cups + xojpanel libsane-hpoj1 + sane-backends sane-frontends scanner-gui xsane + + 4 xorg-x11-glide-module Glide_V3-DRI Glide_V5 Mesa + hplip libsane-hpaio1 libhpip0 diff --git a/live/One/2006.0/patches/halt.loopfs.patch b/live/One/2006.0/patches/halt.loopfs.patch new file mode 100644 index 000000000..2ea4829a6 --- /dev/null +++ b/live/One/2006.0/patches/halt.loopfs.patch @@ -0,0 +1,20 @@ +--- etc/init.d/halt.loopfs 2005-12-27 22:13:48.000000000 +0100 ++++ etc/init.d/halt 2005-12-27 22:14:28.000000000 +0100 +@@ -23,7 +23,7 @@ + } + + halt_get_remaining() { +- awk '$2 ~ /^\/$|^\/proc|^\/sys|^\/dev/{next} ++ awk '$2 ~ /^\/$|^\/proc|^\/sys|^\/dev|^\/live/{next} + $3 == "tmpfs" || $3 == "proc" {print $2 ; next} + /(^#|loopfs|autofs|devfs|^none|^\/dev\/ram|^\/dev\/root)/ {next} + {print $2}' /proc/mounts +@@ -139,7 +139,7 @@ + # Unmount loopback stuff first + remaining=`awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/mounts` + devremaining=`awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}' /proc/mounts` +-[ -n "$remaining" ] && { ++/bin/false && [ -n "$remaining" ] && { + sig= + retry=3 + while [ -n "$remaining" -a "$retry" -gt 0 ] diff --git a/live/One/2006.0/patches/netfs.loopfs.patch b/live/One/2006.0/patches/netfs.loopfs.patch new file mode 100644 index 000000000..a2b32902a --- /dev/null +++ b/live/One/2006.0/patches/netfs.loopfs.patch @@ -0,0 +1,11 @@ +--- etc/init.d/netfs.loopfs 2005-09-19 17:34:31.000000000 +0200 ++++ etc/init.d/netfs 2005-12-27 19:23:39.000000000 +0100 +@@ -50,7 +50,7 @@ + # Unmount loopback stuff first + remaining=`LC_ALL=C awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/mounts` + devremaining=`LC_ALL=C awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}' /proc/mounts` +- [ -n "$remaining" ] && { ++ /bin/false && [ -n "$remaining" ] && { + sig= + retry=3 + while [ -n "$remaining" -a "$retry" -gt 0 ] diff --git a/live/draklive-install/Makefile b/live/draklive-install/Makefile new file mode 100644 index 000000000..6d5025822 --- /dev/null +++ b/live/draklive-install/Makefile @@ -0,0 +1,21 @@ +NAME = draklive-install +VERSION := $(shell rpm -q --qf '%{VERSION}\n' --specfile $(NAME).spec | head -1) +RELEASE := $(shell rpm -q --qf '%{RELEASE}\n' --specfile $(NAME).spec | head -1) + +rpm: dis + rpm -tb ../$(NAME)-$(VERSION).tar.bz2 + +check: + perl -cw $(NAME) + +clean: + find -name '*~' -exec rm {} \; + +dis ../$(NAME)-$(VERSION).tar.bz2: clean check + rm -rf $(NAME)-$(VERSION) ../$(NAME)-$(VERSION).tar* + mkdir -p $(NAME)-$(VERSION) + find . -not -name "$(NAME)-$(VERSION)"|cpio -pd $(NAME)-$(VERSION)/ + find $(NAME)-$(VERSION) -type d -name CVS -o -name .cvsignore -o -name unused |xargs rm -rf + tar cf ../$(NAME)-$(VERSION).tar $(NAME)-$(VERSION) + bzip2 -9f ../$(NAME)-$(VERSION).tar + rm -rf $(NAME)-$(VERSION) diff --git a/live/draklive-install/draklive-install b/live/draklive-install/draklive-install new file mode 100755 index 000000000..bb4880850 --- /dev/null +++ b/live/draklive-install/draklive-install @@ -0,0 +1,418 @@ +#!/usr/bin/perl + +use lib qw(/usr/lib/libDrakX); +use standalone; +use interactive; +#- err, yes, we're loaded, aren't we? (actually not used by this wizard in install_interactive) +BEGIN { undef @INC{'install_any.pm', 'install_steps.pm'} }; +use install_interactive; +use fs::type; +use common; + +{ + use interactive; + package interactive; + *ask_mntpoint_s = \&main::ask_mntpoint_s_interactive; +} + +{ + use diskdrake::interactive; + package diskdrake::interactive; + my $old = \&hd_possible_actions; + undef *hd_possible_actions; + *hd_possible_actions = sub { + #- for the partition wizard to show the auto-allocate option + local $::isInstall = 1; + &$old; + }; + undef *Done; + #- skip the fstab/reboot checks + *Done = \&diskdrake_interactive_Done; +} + +sub umount_all { + my ($in) = @_; + #- make sure nothing is mounted in the new root + foreach (sort { $b cmp $a } grep { /^$in->{prefix}/ } map { (split)[1] } cat_('/proc/mounts')) { + system('umount', $_); + } + #- make sure selected devices aren't mounted, and swap isn't used + foreach (grep { isSwap($_) } @{$in->{fstab}}) { + eval { fs::mount::swapoff($_->{device}) }; + } + foreach (map { $_->{mntpoint} && !isSwap($_) ? "/dev/$_->{device}" : () } @{$in->{fstab}}) { + system('umount', $_); + } +} + +my $in = 'interactive'->vnew('su'); +$in->{prefix} = $::prefix = '/mnt/install'; + +$in->{all_hds} = fsedit::get_hds(); + +umount_all($in); + +$::isWizard = 1; +$::Wizard_no_previous = 1; +$::Wizard_pix_up = "MandrivaOne-install-icon"; +my $live_install_img = "MandrivaOne-install"; +my $title = N("Mandriva Live"); +{ + my $w = ugtk2->new($title); + ugtk2::gtkadd($w->{window}, + #ugtk2::gtkcreate_img($live_install_img), + ugtk2::gtknew('Label', height => 5), + N("This wizard will help you to install the live distribution."), + ugtk2::create_okcancel($w)); + $w->{ok}->grab_focus; + $w->main; +} + +install_interactive::partitionWizard($in); +mkdir_p($::prefix) or die "unable to create $::prefix"; + +doPartitionDisksAfter($in); +choosePartitionsToFormat_interactive($in, $in->{fstab}); + +umount_all($in); +formatMountPartitions($in); + +#- copy to disk +my $_w = do { + local $::isInstall = 1; # quick hack to embed the wait message + $in->wait_message('', N("Computing total size")); +}; +my $total = first(split(/\s+/, `du -sbx / 2>/dev/null`)); + +#- fork interactive::wait_message_with_progress_bar to allow embedding and images +my $progress_displayed; +my $progress = Gtk2::ProgressBar->new; +$progress->hide; +$progress->signal_connect(expose_event => sub { $progress_displayed = 1; 0 }); +undef $_w; +$_w = do { + local $::isInstall = 1; # quick hack to embed the wait message + my $w = $in->wait_messageW('', [ ugtk2::gtkcreate_img($live_install_img), N("Copying in progress"), if_($progress, $progress) ]); + before_leaving { $in->wait_message_endW($w) }; +}; #- should be my ($w, $update_progress) = $in->wait_message_with_progress_bar() + +open(my $OUTPUT, '-|', 'tar c ' . + join(' ', map { ('--exclude', $_) } '/mnt', '/live', '/proc', '/dev', '/sys') + . ' / | tar xvv -C ' . $in->{prefix}); +{ + local $_; + my $current = my $previous = 0; + while (<$OUTPUT>) { + (undef, undef, my $size) = split; + $current += $size; + if ($current <= $total && $current/$total > $previous/$total + 0.001) { + $progress->set_fraction($current / $total); + $progress->show; + $progress_displayed = 0; + mygtk2::flush() while !$progress_displayed; #- these 4 lines should $update_progress->('', $current, $total) + $previous = $current; + } + } +} +undef $_w; + +#- FIXME: maybe factorize with draklive, using draklive --clean-chroot ? +#- remove unwanted files and packages +unlink(map { $in->{prefix} . $_} '/.autofsck', + '/home/guest/Desktop/draklive-copy-wizard.desktop', + '/home/guest/Desktop/draklive-install.desktop'); +system('chroot', $in->{prefix}, 'rpm', '-e', 'draklive-install'); +#- enable drakx-finish-install +output($in->{prefix} . '/etc/sysconfig/finish-install', qq( +FINISH_INSTALL=yes +LICENSE=no +LANGUAGE=no +KEYBOARD=no +NETWORK=yes +AUTHENTICATION=yes +USERS=yes +USER_RENAME_FROM=guest +)); +#- unselect guest user in kdm +my $kdm_cfg = '/etc/kde/kdm/kdmrc'; +update_gnomekderc($in->{prefix} . $kdm_cfg, + 'X-:0-Greeter' => (PreselectUser => 'None', DefaultUser => '')) if -f $kdm_cfg; + +#- create required directories and devices +mkdir_p($in->{prefix} . $_) foreach qw(/dev /etc /proc /sys); +run_program::run('makedev', $in->{prefix} . '/dev'); +#- write fstab +fs::write_fstab($in->{all_hds}, $in->{prefix}); + + +#- setup bootloader +#- TODO: factorize with drakboot +use bootloader; +my $bootloader = {}; +my $cmdline = cat_('/proc/cmdline'); +bootloader::suggest($bootloader, $in->{all_hds}, + vga_fb => first($cmdline =~ /\bvga=(\S+)/), #- don't use $1 here, otherwise perl will hit you because of the other "=~" below + quiet => $cmdline =~ /\bsplash=silent\b/, + ); +lilo_choice(); + +#- cleanly umount here, it will avoid fs journals to be corrupted after a hackish reboot +umount_all($in); + +$::Wizard_finished = 1; +$in->ask_okcancel(N("Congratulations"), N("Please halt your computer, remove your live system, and restart your computer.")); + +$in->exit(0); + + +### +### duplicate code +### + +#- install_steps::doPartitionDisksAfter +sub doPartitionDisksAfter { + my ($o) = @_; + my $hds = $o->{all_hds}{hds}; + partition_table::write($_) foreach @$hds; + if (grep { $_->{rebootNeeded} } @$hds) { + #- install_steps_interactive::rebootNeeded + $o->ask_warn('', N("You need to reboot for the partition table modifications to take place")); + $o->exit(0); + } + fs::set_removable_mntpoints($o->{all_hds}); + fs::mount_options::set_all_default($o->{all_hds}, %$o, lang::fs_options($o->{locale})); + $o->{fstab} = [ fs::get::fstab($o->{all_hds}) ]; +} + +#- install_steps::choosePartitionsToFormat +sub choosePartitionsToFormat($$) { + my ($_o, $fstab) = @_; + + return if $::local_install; + + foreach (@$fstab) { + $_->{mntpoint} = "swap" if isSwap($_); + $_->{mntpoint} or next; + + add2hash_($_, { toFormat => $_->{notFormatted} }) if $_->{fs_type}; #- eg: do not set toFormat for isRawRAID (0xfd) + $_->{toFormatUnsure} ||= member($_->{mntpoint}, '/', '/usr'); + + if (!$_->{toFormat}) { + my $fs_type = fs::type::fs_type_from_magic($_); + if (!$fs_type || $fs_type ne $_->{fs_type}) { + log::l("setting toFormatUnsure for $_->{device} because <$_->{fs_type}> ne <$fs +_type>"); + $_->{toFormatUnsure} = 1; + } + } + } +} + +#- install_steps_interactive::choosePartitionsToFormat +sub choosePartitionsToFormat_interactive { + my ($o, $fstab) = @_; + + choosePartitionsToFormat($o, $fstab); + + my @l = grep { !$_->{isMounted} && $_->{mntpoint} && + (!isSwap($_) || $::expert) && + (!isFat_or_NTFS($_) || $_->{notFormatted} || $::expert) && + (!isOtherAvailableFS($_) || $::expert || $_->{toFormat}); + } @$fstab; + $_->{toFormat} = 1 foreach grep { isSwap($_) && !$::expert } @$fstab; + + return if @l == 0 || !$::expert && every { $_->{toFormat} } @l; + + #- keep it temporary until the guy has accepted + $_->{toFormatTmp} = $_->{toFormat} || $_->{toFormatUnsure} foreach @l; + + $o->ask_from_( + { messages => N("Choose the partitions you want to format"), + interactive_help_id => 'formatPartitions', + advanced_messages => N("Check bad blocks?"), + }, + [ map { + my $e = $_; + ({ + text => partition_table::description($e), type => 'bool', + val => \$e->{toFormatTmp} + }, if_(!isLoopback($_) && !member($_->{fs_type}, 'reiserfs', 'xfs', 'jfs'), { + text => partition_table::description($e), type => 'bool', advanced => 1, + disabled => sub { !$e->{toFormatTmp} }, + val => \$e->{toFormatCheck} + })) } @l ] + ) or die 'already displayed'; + #- ok now we can really set toFormat + foreach (@l) { + $_->{toFormat} = delete $_->{toFormatTmp}; + set_isFormatted($_, 0); + } +} + +#- install_steps_interactive::formatMountPartitions +#- FIXME(?): drop $_fstab +sub formatMountPartitions { + my ($o, $_fstab) = @_; + my ($w, $wait_message) = $o->wait_message_with_progress_bar; + catch_cdie { + fs::format::formatMount_all($o->{all_hds}, $o->{fstab}, $wait_message); + } sub { + $@ =~ /fsck failed on (\S+)/ or return; + $o->ask_yesorno('', N("Failed to check filesystem %s. Do you want to repair the errors? + (beware, you can lose data)", $1), 1); + }; + undef $w; #- help perl (otherwise wait_message stays forever in newt) + die N("Not enough swap space to fulfill installation, please add some") if availableMemory( +) < 40 * 1024; +} + +#- install_any::guess_mount_point +sub guess_mount_point { + my ($part, $prefix, $user) = @_; + + my %l = ( + '/' => 'etc/fstab', + '/boot' => 'vmlinuz', + '/tmp' => '.X11-unix', + '/usr' => 'X11R6', + '/var' => 'catman', + ); + + require any; + my $handle = any::inspect($part, $prefix) or return; + my $d = $handle->{dir}; + my $mnt = find { -e "$d/$l{$_}" } keys %l; + $mnt ||= (stat("$d/.bashrc"))[4] ? '/root' : '/home/user' . ++$$user if -e "$d/.bashrc"; + $mnt ||= (any { -d $_ && (stat($_))[4] >= 500 && -e "$_/.bashrc" } glob_($d)) ? '/home' : ' +'; + ($mnt, $handle); +} + +#- install_any::suggest_mount_points +sub suggest_mount_points { + my ($fstab, $prefix, $uniq) = @_; + + my $user; + foreach my $part (grep { isTrueFS($_) } @$fstab) { + $part->{mntpoint} && !$part->{unsafeMntpoint} and next; #- if already found via an fstab + + my ($mnt, $handle) = guess_mount_point($part, $prefix, \$user) or next; + + next if $uniq && fs::get::mntpoint2part($mnt, $fstab); + $part->{mntpoint} = $mnt; delete $part->{unsafeMntpoint}; + + #- try to find other mount points via fstab + fs::merge_info_from_fstab($fstab, $handle->{dir}, $uniq, 'loose') if $mnt eq '/'; + } + $_->{mntpoint} and log::l("suggest_mount_points: $_->{device} -> $_->{mntpoint}") foreach @$fstab; +} + +#- install_steps_interactive::ask_mntpoint_s +sub ask_mntpoint_s_interactive { #- }{} + my ($o, $fstab) = @_; + + my @fstab = grep { isTrueFS($_) } @$fstab; + @fstab = grep { isSwap($_) } @$fstab if @fstab == 0; + @fstab = @$fstab if @fstab == 0; + die N("No partition available") if @fstab == 0; + + { + my $_w = $o->wait_message('', N("Scanning partitions to find mount points")); + suggest_mount_points($fstab, $o->{prefix}, 'uniq'); + log::l("default mntpoint $_->{mntpoint} $_->{device}") foreach @fstab; + } + if (@fstab == 1) { + $fstab[0]{mntpoint} = '/'; + } else { + $o->ask_from_({ messages => N("Choose the mount points"), + title => N("Partitioning"), + icon => 'banner-part', + interactive_help_id => 'ask_mntpoint_s', + callbacks => { + complete => sub { + require diskdrake::interactive; + eval { 1, find_index { + !diskdrake::interactive::check_mntpoint($o, $_->{mntpoint}, $_, $o->{all_hds}); + } @fstab }; + }, + }, + }, + [ map { + { + label => partition_table::description($_), + val => \$_->{mntpoint}, + not_edit => 0, + list => [ '', fsedit::suggestions_mntpoint(fs::get::empty_all_hds()) ], + }; + } @fstab ]) or return; + } + ask_mntpoint_s($o, $fstab); +} + +#- install_steps::ask_mntpoint_s +sub ask_mntpoint_s {#-}}} + my ($_o, $fstab) = @_; + + #- TODO: set the mntpoints + + my %m; foreach (@$fstab) { + my $m = $_->{mntpoint}; + + $m && $m =~ m!^/! or next; #- there may be a lot of swaps or "none" + + $m{$m} and die N("Duplicate mount point %s", $m); + $m{$m} = 1; + + #- in case the type does not correspond, force it to ext3 + fs::type::set_fs_type($_, 'ext3') if !isTrueFS($_) && !isOtherAvailableFS($_); + } + 1; +} + +#- adapted from drakboot +sub lilo_choice() { + do { + my $before = fs::fstab_to_string($in->{all_hds}); + any::setupBootloader($in, $bootloader, $in->{all_hds}, $in->{fstab}, $ENV{SECURE_LEVEL}) or $in->exit; + fs::write_fstab($all_hds); + } while !any::installBootloader($in, $bootloader, $all_hds); +} + +#- from disdrake::interactive +{ + package diskdrake::interactive; + sub diskdrake_interactive_Done { + my ($in, $all_hds) = @_; + eval { raid::verify($all_hds->{raids}) }; + if (my $err = $@) { + $::expert or die; + $in->ask_okcancel('', [ formatError($err), N("Continue anyway?") ]) or return; + } + foreach (@{$all_hds->{hds}}) { + if (!write_partitions($in, $_, 'skip_check_rebootNeeded')) { + return if !$::isStandalone; + $in->ask_yesorno(N("Quit without saving"), N("Quit without writing the partition table?"), 1) or return; + } + } + #- skip that fstab/reboot steps + if (!$::isInstall && 0) { + my $new = fs::fstab_to_string($all_hds); + if ($new ne $all_hds->{current_fstab} && $in->ask_yesorno('', N("Do you want to save /etc/fstab modifications"), 1)) { + $all_hds->{current_fstab} = $new; + fs::write_fstab($all_hds); + } + update_bootloader_for_renumbered_partitions($in, $all_hds); + + if (any { $_->{rebootNeeded} } @{$all_hds->{hds}}) { + $in->ask_warn('', N("You need to reboot for the partition table modifications to take place")); + tell_wm_and_reboot(); + } + } + if (my $part = find { $_->{mntpoint} && !maybeFormatted($_) } fs::get::fstab($all_hds)) { + $in->ask_okcancel('', N("You should format partition %s. +Otherwise no entry for mount point %s will be written in fstab. +Quit anyway?", $part->{device}, $part->{mntpoint})) or return if $::isStandalone&& 0; #- no, please + } + 1; + } +} diff --git a/live/draklive-install/draklive-install.desktop b/live/draklive-install/draklive-install.desktop new file mode 100644 index 000000000..be1c497ac --- /dev/null +++ b/live/draklive-install/draklive-install.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Exec=/usr/sbin/live-install +Icon=MandrivaOne-install-icon +Terminal=false +Type=Application +Name=Install from live system diff --git a/live/draklive-install/draklive-install.spec b/live/draklive-install/draklive-install.spec new file mode 100644 index 000000000..b658fd2a9 --- /dev/null +++ b/live/draklive-install/draklive-install.spec @@ -0,0 +1,69 @@ +%define name draklive-install +%define version 0.1 +%define release %mkrel 1 +%define iconname MandrivaOne-install-icon.png +%define imgname MandrivaOne-install.png + +Summary: Live installer +Name: %{name} +Version: %{version} +Release: %{release} +Source0: %{name}-%{version}.tar.bz2 +License: GPL +Group: System/Configuration/Other +Url: http://qa.mandriva.com/twiki/bin/view/Main/DrakLive +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot +BuildArch: noarch + +%description +This tool allows to install Mandriva from a running live system. + +%prep +%setup -q + +%install +rm -rf $RPM_BUILD_ROOT + +for d in %_datadir/nautilus/default-desktop %_datadir/apps/kdesktop/DesktopLinks; do + install -D -m 0644 %name.desktop %buildroot/$d/%name.desktop +done +install -D -m 0755 %name %buildroot/%_datadir/%name/%name +install -m 0644 install_interactive.pm %buildroot/%_datadir/%name + +install -d -m 0755 %buildroot/%_sbindir +cat > %buildroot/%_sbindir/%name < 0.1-1mdk +- initial release diff --git a/live/draklive-install/install_interactive.pm b/live/draklive-install/install_interactive.pm new file mode 100644 index 000000000..738739a55 --- /dev/null +++ b/live/draklive-install/install_interactive.pm @@ -0,0 +1,299 @@ +package install_interactive; # $Id$ + +use diagnostics; +use strict; + +use common; +use partition_table; +use partition_table::raw; +use fs::type; +use detect_devices; +use install_steps; +use install_any; +use devices; +use fsedit; +use log; + + +sub tellAboutProprietaryModules { + my ($o) = @_; + my @l = detect_devices::probe_name('Bad') or return; + $o->ask_warn('', formatAlaTeX( +N("Some hardware on your computer needs ``proprietary'' drivers to work. +You can find some information about them at: %s", join(", ", @l)))); +} + +#- unit of $mb is mega bytes, min and max are in sectors, this +#- function is used to convert back to sectors count the size of +#- a partition ($mb) given from the interface (on Resize or Create). +#- modified to take into account a true bounding with min and max. +sub from_Mb { + my ($mb, $min, $max) = @_; + $mb <= $min >> 11 and return $min; + $mb >= $max >> 11 and return $max; + $mb * 2048; +} + +sub partition_with_diskdrake { + my ($o, $all_hds, $nowizard) = @_; + my $ok; + + do { + $ok = 1; + my $do_force_reload = sub { + $o->{all_hds} = fs::get::empty_all_hds(); + install_any::getHds($o, $o); + $all_hds = $o->{all_hds}; + $o->{all_hds}; + }; + require diskdrake::interactive; + { + local $::expert = $::expert; + diskdrake::interactive::main($o, $all_hds, $nowizard, $do_force_reload, $o->interactive_help_sub_display_id('partition_with_diskdrake')); + } + if (delete $o->{wizard}) { + partitionWizard($o, 'nodiskdrake') or redo; + return 1; + } + my @fstab = fs::get::fstab($all_hds); + + unless (fs::get::root_(\@fstab)) { + $ok = 0; + $o->ask_okcancel('', N("You must have a root partition. +For this, create a partition (or click on an existing one). +Then choose action ``Mount point'' and set it to `/'"), 1) or return; + } + if (!any { isSwap($_) } @fstab) { + $ok &&= $o->ask_okcancel('', N("You do not have a swap partition.\n\nContinue anyway?")); + } + if (arch() =~ /ia64/ && !fs::get::has_mntpoint("/boot/efi", $all_hds)) { + $o->ask_warn('', N("You must have a FAT partition mounted in /boot/efi")); + $ok = ''; + } + } until $ok; + 1; +} + +sub partitionWizardSolutions { + my ($o, $all_hds) = @_; + my $hds = $all_hds->{hds}; + my $fstab = [ fs::get::fstab($all_hds) ]; + my @wizlog; + my (%solutions); + + my $min_linux = 400 << 11; + my $max_linux = 2000 << 11; + my $min_swap = 50 << 11; + my $max_swap = 300 << 11; + my $min_freewin = 100 << 11; + + # each solution is a [ score, text, function ], where the function retunrs true if succeeded + + my @hds_rw = grep { !$_->{readonly} } @$hds; + my @hds_can_add = grep { $_->can_raw_add } @hds_rw; + if (fs::get::hds_free_space(@hds_can_add) > $min_linux) { + $solutions{free_space} = [ 20, N("Use free space"), sub { fsedit::auto_allocate($all_hds, $o->{partitions}); 1 } ]; + } else { + push @wizlog, N("Not enough free space to allocate new partitions") . ": " . + (@hds_can_add ? + fs::get::hds_free_space(@hds_can_add) . " < $min_linux" : + "no harddrive on which partitions can be added"); + } + + if (my @truefs = grep { isTrueLocalFS($_) } @$fstab) { + #- value twice the ext2 partitions + $solutions{existing_part} = [ 6 + @truefs + @$fstab, N("Use existing partitions"), sub { $o->ask_mntpoint_s($fstab) } ]; + } else { + push @wizlog, N("There is no existing partition to use"); + } + + my @fats = grep { $_->{fs_type} eq 'vfat' } @$fstab; + fs::df($_) foreach @fats; + if (my @ok_forloopback = sort { $b->{free} <=> $a->{free} } grep { $_->{free} > $min_linux + $min_swap + $min_freewin } @fats) { + $solutions{loopback} = + [ -10 - @fats, N("Use the Windows partition for loopback"), + sub { + my ($s_root, $s_swap); + my $part = $o->ask_from_listf('', N("Which partition do you want to use for Linux4Win?"), \&partition_table::description, \@ok_forloopback) or return; + $max_swap = $min_swap + 1 if $part->{free} - $max_swap < $min_linux; + $o->ask_from('', N("Choose the sizes"), [ + { label => N("Root partition size in MB: "), val => \$s_root, min => $min_linux >> 11, max => min($part->{free} - $max_swap, $max_linux) >> 11, type => 'range' }, + { label => N("Swap partition size in MB: "), val => \$s_swap, min => $min_swap >> 11, max => $max_swap >> 11, type => 'range' }, + ]) or return; + push @{$part->{loopback}}, + { fs_type => 'ext3', loopback_file => '/lnx4win/linuxsys.img', mntpoint => '/', size => $s_root << 11, loopback_device => $part, notFormatted => 1 }, + { fs_type => 'swap', loopback_file => '/lnx4win/swapfile', mntpoint => 'swap', size => $s_swap << 11, loopback_device => $part, notFormatted => 1 }; + fsedit::recompute_loopbacks($all_hds); + 1; + } ]; + } else { + push @wizlog, N("There is no FAT partition to use as loopback (or not enough space left)") . + (@fats ? "\nFAT partitions:" . join('', map { "\n $_->{device} $_->{free} (" . ($min_linux + $min_swap + $min_freewin) . ")" } @fats) : ''); + } + + + if (my @ok_for_resize_fat = grep { isFat_or_NTFS($_) && !fs::get::part2hd($_, $all_hds)->{readonly} } @$fstab) { + $solutions{resize_fat} = + [ 6 - @ok_for_resize_fat, N("Use the free space on the Windows partition"), + sub { + my $part = $o->ask_from_listf_raw({ messages => N("Which partition do you want to resize?"), + interactive_help_id => 'resizeFATChoose', + }, \&partition_table::description, \@ok_for_resize_fat) or return; + my $hd = fs::get::part2hd($part, $all_hds); + my $resize_fat = eval { + my $pkg = $part->{fs_type} eq 'vfat' ? do { + require resize_fat::main; + 'resize_fat::main'; + } : do { + require diskdrake::resize_ntfs; + 'diskdrake::resize_ntfs'; + }; + $pkg->new($part->{device}, devices::make($part->{device})); + }; + $@ and die N("The FAT resizer is unable to handle your partition, +the following error occurred: %s", formatError($@)); + my $min_win = do { + my $_w = $o->wait_message(N("Resizing"), N("Computing the size of the Windows partition")); + $resize_fat->min_size; + }; + #- make sure that even after normalizing the size to cylinder boundaries, the minimun will be saved, + #- this save at least a cylinder (less than 8Mb). + $min_win += partition_table::raw::cylinder_size($hd); + + $part->{size} > $min_linux + $min_swap + $min_freewin + $min_win or die N("Your Windows partition is too fragmented. Please reboot your computer under Windows, run the ``defrag'' utility, then restart the Mandriva Linux installation."); + $o->ask_okcancel('', formatAlaTeX( + #-PO: keep the double empty lines between sections, this is formatted a la LaTeX + N("WARNING! + +DrakX will now resize your Windows partition. Be careful: this +operation is dangerous. If you have not already done so, you +first need to exit the installation, run \"chkdsk c:\" from a +Command Prompt under Windows (beware, running graphical program +\"scandisk\" is not enough, be sure to use \"chkdsk\" in a +Command Prompt!), optionally run defrag, then restart the +installation. You should also backup your data. +When sure, press Ok."))) or return; + + my $mb_size = $part->{size} >> 11; + $o->ask_from('', N("Which size do you want to keep for Windows on"), [ + { label => N("partition %s", partition_table::description($part)), val => \$mb_size, min => $min_win >> 11, max => ($part->{size} - $min_linux - $min_swap) >> 11, type => 'range' }, + ]) or return; + + my $oldsize = $part->{size}; + $part->{size} = from_Mb($mb_size, $min_win, $part->{size}); + + $hd->adjustEnd($part); + + eval { + my $_w = $o->wait_message(N("Resizing"), N("Resizing Windows partition")); + $resize_fat->resize($part->{size}); + }; + if (my $err = $@) { + $part->{size} = $oldsize; + die N("FAT resizing failed: %s", formatError($err)); + } + + $o->ask_warn('', N("To ensure data integrity after resizing the partition(s), +filesystem checks will be run on your next boot into Windows(TM)")) if $part->{fs_type} ne 'vfat'; + + set_isFormatted($part, 1); + partition_table::will_tell_kernel($hd, resize => $part); #- down-sizing, write_partitions is not needed + partition_table::adjust_local_extended($hd, $part); + partition_table::adjust_main_extended($hd); + + fsedit::auto_allocate($all_hds, $o->{partitions}); + 1; + } ]; + } else { + push @wizlog, N("There is no FAT partition to resize (or not enough space left)"); + } + + if (@$fstab && @hds_rw) { + $solutions{wipe_drive} = + [ 10, fsedit::is_one_big_fat_or_NT($hds) ? N("Remove Windows(TM)") : N("Erase and use entire disk"), + sub { + my $hd = $o->ask_from_listf_raw({ messages => N("You have more than one hard drive, which one do you install linux on?"), + interactive_help_id => 'takeOverHdChoose', + }, + \&partition_table::description, \@hds_rw) or return; + $o->ask_okcancel_({ messages => N("ALL existing partitions and their data will be lost on drive %s", partition_table::description($hd)), + interactive_help_id => 'takeOverHdConfirm' }) or return; + partition_table::raw::zero_MBR($hd); + fsedit::auto_allocate($all_hds, $o->{partitions}); + 1; + } ]; + } + + if (@hds_rw) { + $solutions{diskdrake} = [ 0, N("Custom disk partitioning"), sub { partition_with_diskdrake($o, $all_hds, 'nowizard') } ]; + } + + $solutions{fdisk} = + [ -10, N("Use fdisk"), sub { + $o->enter_console; + foreach (@$hds) { + print "\n" x 10, N("You can now partition %s. +When you are done, do not forget to save using `w'", partition_table::description($_)); + print "\n\n"; + my $pid = 0; + if (arch() =~ /ppc/) { + $pid = fork() or exec "pdisk", devices::make($_->{device}); + } else { + $pid = fork() or exec "fdisk", devices::make($_->{device}); + } + waitpid($pid, 0); + } + $o->leave_console; + 0; + } ] if $o->{partitioning}{fdisk}; + + log::l("partitioning wizard log:\n", (map { ">>wizlog>>$_\n" } @wizlog)); + %solutions; +} + +sub partitionWizard { + my ($o, $b_nodiskdrake) = @_; + + my %solutions = partitionWizardSolutions($o, $o->{all_hds}); + + delete $solutions{diskdrake} if $b_nodiskdrake; + + my @solutions = sort { $b->[0] <=> $a->[0] } values %solutions; + + my $level = $::expert ? -9999 : 0; + my @sol = grep { $_->[0] >= $level } @solutions; + + log::l('' . "solutions found: " . join('', map { $_->[1] } @sol) . + " (all solutions found: " . join('', map { $_->[1] } @solutions) . ")"); + + @solutions = @sol if @sol > 1; + log::l("solutions: ", int @solutions); + @solutions or $o->ask_warn('', N("I can not find any room for installing")), die 'already displayed'; + + log::l('HERE: ', join(',', map { $_->[1] } @solutions)); + my $sol; + $o->ask_from_({ messages => N("The DrakX Partitioning wizard found the following solutions:"), + interactive_help_id => 'doPartitionDisks', + }, + [ { val => \$sol, list => \@solutions, format => sub { $_[0][1] }, type => 'list' } ]); + log::l("partitionWizard calling solution $sol->[1]"); + my $ok = eval { $sol->[2]->() }; + $@ and $o->ask_warn('', N("Partitioning failed: %s", formatError($@))); + $ok or goto &partitionWizard; + 1; +} + +sub upNetwork { + my ($o, $b_pppAvoided) = @_; + my $_w = $o->wait_message('', N("Bringing up the network")); + install_steps::upNetwork($o, $b_pppAvoided); +} +sub downNetwork { + my ($o, $b_pppOnly) = @_; + my $_w = $o->wait_message('', N("Bringing down the network")); + install_steps::downNetwork($o, $b_pppOnly); +} + + + +1; diff --git a/live/draklive-install/theme/IC-installone-128.png b/live/draklive-install/theme/IC-installone-128.png new file mode 100644 index 000000000..10ff11fc7 Binary files /dev/null and b/live/draklive-install/theme/IC-installone-128.png differ diff --git a/live/draklive-install/theme/IC-installone-16.png b/live/draklive-install/theme/IC-installone-16.png new file mode 100644 index 000000000..f96fc005d Binary files /dev/null and b/live/draklive-install/theme/IC-installone-16.png differ diff --git a/live/draklive-install/theme/IC-installone-24.png b/live/draklive-install/theme/IC-installone-24.png new file mode 100644 index 000000000..a25723fc1 Binary files /dev/null and b/live/draklive-install/theme/IC-installone-24.png differ diff --git a/live/draklive-install/theme/IC-installone-32.png b/live/draklive-install/theme/IC-installone-32.png new file mode 100644 index 000000000..764431a90 Binary files /dev/null and b/live/draklive-install/theme/IC-installone-32.png differ diff --git a/live/draklive-install/theme/IC-installone-48.png b/live/draklive-install/theme/IC-installone-48.png new file mode 100644 index 000000000..a56e58b91 Binary files /dev/null and b/live/draklive-install/theme/IC-installone-48.png differ diff --git a/live/draklive-install/theme/IC-installone-64.png b/live/draklive-install/theme/IC-installone-64.png new file mode 100644 index 000000000..0a578631f Binary files /dev/null and b/live/draklive-install/theme/IC-installone-64.png differ diff --git a/live/draklive-install/theme/IM-INSTALLCDONE.png b/live/draklive-install/theme/IM-INSTALLCDONE.png new file mode 100644 index 000000000..b97d90213 Binary files /dev/null and b/live/draklive-install/theme/IM-INSTALLCDONE.png differ diff --git a/live/draklive-install/theme/IM-INSTALLCDONE2.png b/live/draklive-install/theme/IM-INSTALLCDONE2.png new file mode 100644 index 000000000..d6313f079 Binary files /dev/null and b/live/draklive-install/theme/IM-INSTALLCDONE2.png differ -- cgit v1.2.1