summaryrefslogtreecommitdiffstats
path: root/perl-install/install/share/po/id.po
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/install/share/po/id.po')
-rw-r--r--perl-install/install/share/po/id.po202
1 files changed, 102 insertions, 100 deletions
diff --git a/perl-install/install/share/po/id.po b/perl-install/install/share/po/id.po
index d6b1f3028..5ef12e70e 100644
--- a/perl-install/install/share/po/id.po
+++ b/perl-install/install/share/po/id.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: DrakX 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-01-16 11:41+0100\n"
+"POT-Creation-Date: 2009-02-13 16:29+0100\n"
"PO-Revision-Date: 2007-10-27 18:51+0700\n"
"Last-Translator: Willy Sudiarto Raharjo <willysr@gmail.com>\n"
"Language-Team: Indonesia <mdk-id@yahoogroups.com>\n"
@@ -166,7 +166,7 @@ msgid ""
"please reboot your system and upgrade using the Mandriva update applet."
msgstr ""
-#: any.pm:394 steps_interactive.pm:1126
+#: any.pm:394 steps_interactive.pm:1125
#, c-format
msgid "Reboot"
msgstr "Boot Ulang"
@@ -180,30 +180,6 @@ msgstr ""
#: any.pm:584
#, c-format
msgid ""
-"You have selected the following server(s): %s\n"
-"\n"
-"\n"
-"These servers are activated by default. They do not have any known security\n"
-"issues, but some new ones could be found. In that case, you must make sure\n"
-"to upgrade as soon as possible.\n"
-"\n"
-"\n"
-"Do you really want to install these servers?\n"
-msgstr ""
-"Anda telah memilih server berikut: %s\n"
-"\n"
-"\n"
-"Server ini aktif secara default. Mereka tidak memiliki masalah keamanan,\n"
-"tetapi bisa saja ditemukan. Pada kasus tersebut, Anda harus memastikan\n"
-"untuk melakukan upgrade secepat mungkin.\n"
-"\n"
-"\n"
-"Apakah Anda hendak menginstall server ini?\n"
-
-#. -PO: keep the double empty lines between sections, this is formatted a la LaTeX
-#: any.pm:607
-#, c-format
-msgid ""
"The following packages will be removed to allow upgrading your system: %s\n"
"\n"
"\n"
@@ -214,72 +190,72 @@ msgstr ""
"\n"
"Apakah Anda ingin menghapus paket tersebut?\n"
-#: any.pm:826
+#: any.pm:803
#, c-format
msgid "Error reading file %s"
msgstr "Kesalahan membaca file %s"
-#: any.pm:1033
+#: any.pm:1010
#, c-format
msgid "The following disk(s) were renamed:"
msgstr "Disk berikut telah diubah namanya:"
-#: any.pm:1035
+#: any.pm:1012
#, c-format
msgid "%s (previously named as %s)"
msgstr "%s (sebelumnya bernama %s)"
-#: any.pm:1092
+#: any.pm:1069
#, c-format
msgid "HTTP"
msgstr "HTTP"
-#: any.pm:1092
+#: any.pm:1069
#, c-format
msgid "FTP"
msgstr "FTP"
-#: any.pm:1092
+#: any.pm:1069
#, c-format
msgid "NFS"
msgstr "HFS"
-#: any.pm:1111 steps_interactive.pm:955
+#: any.pm:1088 steps_interactive.pm:954
#, c-format
msgid "Network"
msgstr "Jaringan"
-#: any.pm:1115
+#: any.pm:1092
#, c-format
msgid "Please choose a media"
msgstr "Silahkan pilih media"
-#: any.pm:1131
+#: any.pm:1108
#, c-format
msgid "File already exists. Overwrite it?"
msgstr "File sudah ada. Timpa file ini ?"
-#: any.pm:1135
+#: any.pm:1112
#, c-format
msgid "Permission denied"
msgstr "Izin ditolak"
-#: any.pm:1183
+#: any.pm:1160
#, c-format
msgid "Bad NFS name"
msgstr "Nama NFS yang salah"
-#: any.pm:1204
+#: any.pm:1181
#, c-format
msgid "Bad media %s"
msgstr "Media rusak %s"
-#: any.pm:1247
+#: any.pm:1224
#, c-format
msgid "Can not make screenshots before partitioning"
msgstr "Tidak bisa membuat screenshot sebelum buat partisi"
-#: any.pm:1255
+#: any.pm:1232
#, c-format
msgid "Screenshots will be available after install in %s"
msgstr "Screenshot akan tersedia setelah installasi pada %s"
@@ -644,8 +620,8 @@ msgstr ""
"pengguna"
#: share/meta-task/compssUsers.pl:145
-#, c-format
-msgid "IceWm Desktop"
+#, fuzzy, c-format
+msgid "LXDE Desktop"
msgstr "Desktop IceWm"
#: share/meta-task/compssUsers.pl:149
@@ -793,17 +769,17 @@ msgstr ""
msgid "Click on images in order to see a bigger preview"
msgstr ""
-#: steps_gtk.pm:313 steps_interactive.pm:626 steps_list.pm:30
+#: steps_gtk.pm:313 steps_interactive.pm:625 steps_list.pm:30
#, c-format
msgid "Package Group Selection"
msgstr "Pilihan Grup Paket"
-#: steps_gtk.pm:334 steps_interactive.pm:643
+#: steps_gtk.pm:334 steps_interactive.pm:642
#, c-format
msgid "Individual package selection"
msgstr "Pilih paket individu"
-#: steps_gtk.pm:358 steps_interactive.pm:567
+#: steps_gtk.pm:358 steps_interactive.pm:566
#, c-format
msgid "Total size: %d / %d MB"
msgstr "Ukuran total: %d / %d MB"
@@ -921,12 +897,12 @@ msgstr "Installasi minimal"
msgid "Software Management"
msgstr "Manajemen Perangkat Lunak"
-#: steps_gtk.pm:516 steps_interactive.pm:452
+#: steps_gtk.pm:516 steps_interactive.pm:451
#, c-format
msgid "Choose the packages you want to install"
msgstr "Pilih paket yang akan diinstal"
-#: steps_gtk.pm:533 steps_interactive.pm:657 steps_list.pm:32
+#: steps_gtk.pm:533 steps_interactive.pm:656 steps_list.pm:32
#, c-format
msgid "Installing"
msgstr "Menginstall"
@@ -952,7 +928,7 @@ msgid "%d package"
msgid_plural "%d packages"
msgstr[0] "%d paket"
-#: steps_gtk.pm:650 steps_interactive.pm:820 steps_list.pm:43
+#: steps_gtk.pm:650 steps_interactive.pm:819 steps_list.pm:43
#, c-format
msgid "Summary"
msgstr "Ringkasan"
@@ -962,7 +938,7 @@ msgstr "Ringkasan"
msgid "Configure"
msgstr "Konfigurasikan"
-#: steps_gtk.pm:686 steps_interactive.pm:816 steps_interactive.pm:967
+#: steps_gtk.pm:686 steps_interactive.pm:815 steps_interactive.pm:966
#, c-format
msgid "not configured"
msgstr "tidak dikonfigurasikan"
@@ -1133,7 +1109,7 @@ msgstr ""
"Sistem Anda tidak memilih ruang kosong yang cukup untuk installasi atau "
"upgrade (%dMB > %dMB)"
-#: steps_interactive.pm:464
+#: steps_interactive.pm:463
#, c-format
msgid ""
"Please choose load or save package selection.\n"
@@ -1142,53 +1118,53 @@ msgstr ""
"Pilih muat atau simpan pilihan paket.\n"
"Formatnya sama dengan file auto_install."
-#: steps_interactive.pm:466
+#: steps_interactive.pm:465
#, c-format
msgid "Load"
msgstr "Beban"
-#: steps_interactive.pm:466
+#: steps_interactive.pm:465
#, c-format
msgid "Save"
msgstr "Simpan"
-#: steps_interactive.pm:474
+#: steps_interactive.pm:473
#, c-format
msgid "Bad file"
msgstr "File rusak"
-#: steps_interactive.pm:490
+#: steps_interactive.pm:489
#, fuzzy, c-format
msgid "KDE"
msgstr "IDE"
-#: steps_interactive.pm:491
+#: steps_interactive.pm:490
#, c-format
msgid "GNOME"
msgstr ""
-#: steps_interactive.pm:494
+#: steps_interactive.pm:493
#, fuzzy, c-format
msgid "Desktop Selection"
msgstr "Pilihan Grup Paket"
-#: steps_interactive.pm:495
+#: steps_interactive.pm:494
#, fuzzy, c-format
msgid "You can choose your workstation desktop profile."
msgstr ""
"Anda bisa memilih profil desktop workstation Anda: KDE, GNOME atau Kustom"
-#: steps_interactive.pm:581
+#: steps_interactive.pm:580
#, c-format
msgid "Selected size is larger than available space"
msgstr "Ukuran terpilih melebihi ruang yang ada"
-#: steps_interactive.pm:596
+#: steps_interactive.pm:595
#, c-format
msgid "Type of install"
msgstr "Tipe installasi"
-#: steps_interactive.pm:597
+#: steps_interactive.pm:596
#, c-format
msgid ""
"You have not selected any group of packages.\n"
@@ -1197,82 +1173,82 @@ msgstr ""
"Anda belum memilih grup paket.\n"
"Pilih installasi minimal yang Anda inginkan:"
-#: steps_interactive.pm:602
+#: steps_interactive.pm:601
#, c-format
msgid "With X"
msgstr "Dengan X"
-#: steps_interactive.pm:603
+#: steps_interactive.pm:602
#, c-format
msgid "With basic documentation (recommended!)"
msgstr "Dengan dokumentasi dasar (disarankan!)"
-#: steps_interactive.pm:604
+#: steps_interactive.pm:603
#, c-format
msgid "Truly minimal install (especially no urpmi)"
msgstr "Installasi minimal sesungguhnya (khususnya tanpa urpmi)"
-#: steps_interactive.pm:658
+#: steps_interactive.pm:657
#, c-format
msgid "Preparing installation"
msgstr "Mempersiapkan installasi"
-#: steps_interactive.pm:666
+#: steps_interactive.pm:665
#, c-format
msgid "Installing package %s"
msgstr "Menginstall paket %s"
-#: steps_interactive.pm:690
+#: steps_interactive.pm:689
#, c-format
msgid "There was an error ordering packages:"
msgstr "Terdapat kesalahan pengurutan paket:"
-#: steps_interactive.pm:690
+#: steps_interactive.pm:689
#, c-format
msgid "Go on anyway?"
msgstr "Lanjutkan?"
-#: steps_interactive.pm:694
+#: steps_interactive.pm:693
#, c-format
msgid "Retry"
msgstr "Ulang kembali"
-#: steps_interactive.pm:695
+#: steps_interactive.pm:694
#, c-format
msgid "Skip this package"
msgstr "Lewati paket ini"
-#: steps_interactive.pm:696
+#: steps_interactive.pm:695
#, c-format
msgid "Skip all packages from medium \"%s\""
msgstr "Lewati semua paket-paket dari media \"%s\""
-#: steps_interactive.pm:697
+#: steps_interactive.pm:696
#, c-format
msgid "Go back to media and packages selection"
msgstr "Kembali pada media dan pemilihan paket"
-#: steps_interactive.pm:700
+#: steps_interactive.pm:699
#, c-format
msgid "There was an error installing package %s."
msgstr "Terdapat kesalahan penginstallan paket %s."
-#: steps_interactive.pm:719
+#: steps_interactive.pm:718
#, c-format
msgid "Post-install configuration"
msgstr "Konfigurasi pasca installasi"
-#: steps_interactive.pm:726
+#: steps_interactive.pm:725
#, c-format
msgid "Please ensure the Update Modules media is in drive %s"
msgstr "Harap pastikan media Update Modul pada drive %s"
-#: steps_interactive.pm:754 steps_list.pm:47
+#: steps_interactive.pm:753 steps_list.pm:47
#, c-format
msgid "Updates"
msgstr "Update"
-#: steps_interactive.pm:755
+#: steps_interactive.pm:754
#, c-format
msgid ""
"You now have the opportunity to download updated packages. These packages\n"
@@ -1292,28 +1268,28 @@ msgstr ""
"\n"
"Apakah Anda ingin menginstall update?"
-#: steps_interactive.pm:862
+#: steps_interactive.pm:861
#, c-format
msgid "%s on %s"
msgstr "%s pada %s"
-#: steps_interactive.pm:895 steps_interactive.pm:902 steps_interactive.pm:915
-#: steps_interactive.pm:932 steps_interactive.pm:947
+#: steps_interactive.pm:894 steps_interactive.pm:901 steps_interactive.pm:914
+#: steps_interactive.pm:931 steps_interactive.pm:946
#, c-format
msgid "Hardware"
msgstr "Perangkat Keras"
-#: steps_interactive.pm:916 steps_interactive.pm:933
+#: steps_interactive.pm:915 steps_interactive.pm:932
#, c-format
msgid "Sound card"
msgstr "Kartu suara"
-#: steps_interactive.pm:936
+#: steps_interactive.pm:935
#, c-format
msgid "Do you have an ISA sound card?"
msgstr "Apakah Anda memiliki kartu suara ISA?"
-#: steps_interactive.pm:938
+#: steps_interactive.pm:937
#, c-format
msgid ""
"Run \"alsaconf\" or \"sndconfig\" after installation to configure your sound "
@@ -1322,68 +1298,68 @@ msgstr ""
"Jalankan \"sndconfig\" atau \"sndconfig\" setelah installasi untuk "
"mengkonfigurasi kartu suara Anda"
-#: steps_interactive.pm:940
+#: steps_interactive.pm:939
#, c-format
msgid "No sound card detected. Try \"harddrake\" after installation"
msgstr ""
"Tidak ada kartu suara yang terdeteksi. Coba \"harddrake\" setelah installasi"
-#: steps_interactive.pm:948
+#: steps_interactive.pm:947
#, c-format
msgid "Graphical interface"
msgstr "Antarmuka grafis"
-#: steps_interactive.pm:954 steps_interactive.pm:965
+#: steps_interactive.pm:953 steps_interactive.pm:964
#, c-format
msgid "Network & Internet"
msgstr "Jaringan & Internet"
-#: steps_interactive.pm:966
+#: steps_interactive.pm:965
#, c-format
msgid "Proxies"
msgstr "Proxy "
-#: steps_interactive.pm:967
+#: steps_interactive.pm:966
#, c-format
msgid "configured"
msgstr "terkonfigurasi"
-#: steps_interactive.pm:977
+#: steps_interactive.pm:976
#, c-format
msgid "Security Level"
msgstr "Tingkat Keamanan"
-#: steps_interactive.pm:996
+#: steps_interactive.pm:995
#, c-format
msgid "Firewall"
msgstr "Firewall"
-#: steps_interactive.pm:1000
+#: steps_interactive.pm:999
#, c-format
msgid "activated"
msgstr "telah diaktifkan"
-#: steps_interactive.pm:1000
+#: steps_interactive.pm:999
#, c-format
msgid "disabled"
msgstr "telah dinonaktifkan"
-#: steps_interactive.pm:1014
+#: steps_interactive.pm:1013
#, c-format
msgid "You have not configured X. Are you sure you really want this?"
msgstr "Anda belum mengkonfigurasi X. Apakah Anda yakin?"
-#: steps_interactive.pm:1042
+#: steps_interactive.pm:1041
#, c-format
msgid "Preparing bootloader..."
msgstr "Mempersiapkan bootloader..."
-#: steps_interactive.pm:1043
+#: steps_interactive.pm:1042
#, c-format
msgid "Be patient, this may take a while..."
msgstr ""
-#: steps_interactive.pm:1054
+#: steps_interactive.pm:1053
#, c-format
msgid ""
"You appear to have an OldWorld or Unknown machine, the yaboot bootloader "
@@ -1396,7 +1372,7 @@ msgstr ""
"BootX atau cara lain untuk boot komputer Anda. Argumen kernel untuk fs root "
"adalah: root=%s"
-#: steps_interactive.pm:1068
+#: steps_interactive.pm:1067
#, c-format
msgid ""
"In this security level, access to the files in the Windows partition is "
@@ -1405,17 +1381,17 @@ msgstr ""
"Pada tingkat keamanan ini, akses pada file pada partisi Windows dibatasi "
"hanya pada administrator."
-#: steps_interactive.pm:1100
+#: steps_interactive.pm:1099
#, c-format
msgid "Insert a blank floppy in drive %s"
msgstr "Masukkan disket kosong pada drive %s"
-#: steps_interactive.pm:1102
+#: steps_interactive.pm:1101
#, c-format
msgid "Creating auto install floppy..."
msgstr "Membuat disket installasi otomatis..."
-#: steps_interactive.pm:1113
+#: steps_interactive.pm:1112
#, c-format
msgid ""
"Some steps are not completed.\n"
@@ -1426,7 +1402,7 @@ msgstr ""
"\n"
"Apakah Anda ingin keluar sekarang?"
-#: steps_interactive.pm:1123
+#: steps_interactive.pm:1122
#, c-format
msgid "Congratulations"
msgstr "Selamat"
@@ -1595,6 +1571,32 @@ msgstr ""
msgid "Mandriva: distributions for everybody's needs"
msgstr ""
+#~ msgid ""
+#~ "You have selected the following server(s): %s\n"
+#~ "\n"
+#~ "\n"
+#~ "These servers are activated by default. They do not have any known "
+#~ "security\n"
+#~ "issues, but some new ones could be found. In that case, you must make "
+#~ "sure\n"
+#~ "to upgrade as soon as possible.\n"
+#~ "\n"
+#~ "\n"
+#~ "Do you really want to install these servers?\n"
+#~ msgstr ""
+#~ "Anda telah memilih server berikut: %s\n"
+#~ "\n"
+#~ "\n"
+#~ "Server ini aktif secara default. Mereka tidak memiliki masalah keamanan,\n"
+#~ "tetapi bisa saja ditemukan. Pada kasus tersebut, Anda harus memastikan\n"
+#~ "untuk melakukan upgrade secepat mungkin.\n"
+#~ "\n"
+#~ "\n"
+#~ "Apakah Anda hendak menginstall server ini?\n"
+
+#~ msgid "IceWm Desktop"
+#~ msgstr "Desktop IceWm"
+
#~ msgid "Contacting the mirror to get the list of available packages..."
#~ msgstr "Menghubungi mirror untuk mendapatkan daftar paket yang tersedia..."
href='#n916'>916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064
package bootloader; # $Id$

use diagnostics;
use strict;
use vars qw(%vga_modes);

#-######################################################################################
#- misc imports
#-######################################################################################
use common;
use partition_table qw(:types);
use log;
use any;
use fsedit;
use devices;
use loopback;
use detect_devices;
use partition_table_raw;
use run_program;
use modules;


%vga_modes = (
'ask' => "Ask at boot",
'normal' => "Normal",
'0x0f01' => "80x50",
'0x0f02' => "80x43",
'0x0f03' => "80x28",
'0x0f05' => "80x30",
'0x0f06' => "80x34",
'0x0f07' => "80x60",
'0x0122' => "100x30",
 785 => "640x480 in 16 bits (FrameBuffer only)",
 788 => "800x600 in 16 bits (FrameBuffer only)",
 791 => "1024x768 in 16 bits (FrameBuffer only)",
 794 => "1280x1024 in 16 bits (FrameBuffer only)",
);

#-#####################################################################################
#- Functions
#-#####################################################################################

sub get {
    my ($kernel, $bootloader) = @_;
    $_->{kernel_or_dev} && $_->{kernel_or_dev} eq $kernel and return $_ foreach @{$bootloader->{entries}};
    undef;
}
sub get_label {
    my ($label, $bootloader) = @_;
    $_->{label} && $_->{label} eq $label and return $_ foreach @{$bootloader->{entries}};
    undef;
}

sub mkinitrd($$$) {
    my ($prefix, $kernelVersion, $initrdImage) = @_;

    $::testing || -e "$prefix/$initrdImage" and return;

    my $loop_boot = loopback::prepare_boot($prefix);

    modules::load('loop');
    run_program::rooted($prefix, "mkinitrd", "-v", "-f", $initrdImage, "--ifneeded", $kernelVersion) or unlink("$prefix/$initrdImage");

    loopback::save_boot($loop_boot);

    -e "$prefix/$initrdImage" or die "mkinitrd failed";
}

sub mkbootdisk($$$;$) {
    my ($prefix, $kernelVersion, $dev, $append) = @_;

    modules::load_multi(arch() =~ /sparc/ ? 'romfs' : (), 'loop');
    my @l = qw(mkbootdisk --noprompt); 
    push @l, "--appendargs", $append if $append;
    eval { modules::load('vfat') };
    run_program::rooted_or_die($prefix, @l, "--device", "/dev/$dev", $kernelVersion);
}

sub read($$) {
    my ($prefix, $file) = @_;
    my $global = 1;
    my ($e, $v, $f);
    my %b;
    foreach (cat_("$prefix$file")) {
	($_, $v) = /^\s*(.*?)\s*(?:=\s*(.*?))?\s*$/;

	if (/^(image|other)$/) {
	    push @{$b{entries}}, $e = { type => $_, kernel_or_dev => $v };
	    $global = 0;
	} elsif ($global) {
	    $b{$_} = $v || 1;
	} else {
	    if ((/map-drive/ .. /to/) && /to/) {
		$e->{mapdrive}{$e->{'map-drive'}} = $v;
	    } else {
		$e->{$_} = $v || 1;
	    }
	}
    }
    delete $b{timeout} unless $b{prompt};
    $_->{append} =~ s/^\s*"?(.*?)"?\s*$/$1/ foreach \%b, @{$b{entries}};
    $b{timeout} = $b{timeout} / 10 if $b{timeout};
    $b{message} = cat_("$prefix$b{message}") if $b{message};
    \%b;
}

sub suggest_onmbr {
    my ($hds) = @_;
    
    my $type = partition_table_raw::typeOfMBR($hds->[0]{device});
    !$type || member($type, qw(dos dummy lilo grub empty)), !$type;
}

sub compare_entries ($$) {
    my ($a, $b) = @_;
    my %entries;

    @entries{keys %$a, keys %$b} = ();
    $a->{$_} eq $b->{$_} and delete $entries{$_} foreach keys %entries;
    scalar keys %entries;
}

sub add_entry($$) {
    my ($entries, $v) = @_;
    my (%usedold, $freeold);

    do { $usedold{$1 || 0} = 1 if $_->{label} =~ /^old([^_]*)_/ } foreach @$entries;
    foreach (0..scalar keys %usedold) { exists $usedold{$_} or $freeold = $_ || '', last }

    foreach (@$entries) {
	if ($_->{label} eq $v->{label}) {
	    compare_entries($_, $v) or return; #- avoid inserting it twice as another entry already exists !
	    $_->{label} = "old${freeold}_$_->{label}";
	}
    }
    push @$entries, $v;
}

sub add_kernel {
    my ($prefix, $lilo, $version, $ext, $root, $v) = @_;

    #- new versions of yaboot don't handle symlinks
    my $ppcext = $ext;
    if (arch() =~ /ppc/) {
	$ext = "-$version";
    }

    log::l("adding vmlinuz$ext as vmlinuz-$version");
    -e "$prefix/boot/vmlinuz-$version" or log::l("unable to find kernel image $prefix/boot/vmlinuz-$version"), return;
    my $image = "/boot/vmlinuz" . ($ext ne "-$version" &&
				   symlinkf("vmlinuz-$version", "$prefix/boot/vmlinuz$ext") ? $ext : "-$version");
    my $initrd = eval { 
	mkinitrd($prefix, $version, "/boot/initrd-$version.img");
	"/boot/initrd" . ($ext ne "-$version" &&
			  symlinkf("initrd-$version.img", "$prefix/boot/initrd$ext.img") ? $ext : "-$version") . ".img";
    };
    my $label = $ext =~ /-(default)/ ? $1 : "linux$ext";

    #- more yaboot concessions - PPC
    if (arch() =~ /ppc/) {
	$label = $ppcext =~ /-(default)/ ? $1 : "linux$ppcext";
    }

    add2hash($v,
	     {
	      type => 'image',
	      root => "/dev/$root",
	      label => $label,
	      kernel_or_dev => $image,
	      initrd => $initrd,
	      append => $lilo->{perImageAppend},
	     });
    add_entry($lilo->{entries}, $v);
    $v;
}

sub unpack_append {
    my ($s) = @_;
    my @l = split(' ', $s);
    [ grep { !/=/ } @l ], [ map { if_(/(.*?)=(.*)/, [$1, $2]) } @l ];
}
sub pack_append {
    my ($simple, $dict) = @_;
    join(' ', @$simple, map { "$_->[0]=$_->[1]" } @$dict);
}

sub append__mem_is_memsize { $_[0] =~ /^\d+[kM]?$/i }

sub get_append {
    my ($b, $key) = @_;
    my (undef, $dict) = unpack_append($b->{perImageAppend});
    my @l = map { $_->[1] } grep { $_->[0] eq $key } @$dict;

    #- suppose we want the memsize
    @l = grep { append__mem_is_memsize($_) } @l if $key eq 'mem';

    log::l("more than one $key in $b->{perImageAppend}") if @l > 1;
    $l[0];
}
sub add_append {
    my ($b, $key, $val) = @_;

    foreach (\$b->{perImageAppend}, map { \$_->{append} } @{$b->{entries}}) {
	my ($simple, $dict) = unpack_append($$_);
	@$dict = grep { $_->[0] ne $key || $key eq 'mem' && append__mem_is_memsize($_->[1]) != append__mem_is_memsize($val) } @$dict;
	push @$dict, [ $key, $val ] if $val;
	$$_ = pack_append($simple, $dict);
	log::l("add_append: $$_");
    }
}
sub may_append {
    my ($b, $key, $val) = @_;
    add_append($b, $key, $val) if !get_append($b, $key);
}

sub configure_entry($$) {
    my ($prefix, $entry) = @_;
    if ($entry->{type} eq 'image') {
	my $specific_version;
	$entry->{kernel_or_dev} =~ /vmlinu.-(.*)/ and $specific_version = $1;
	readlink("$prefix/$entry->{kernel_or_dev}") =~ /vmlinu.-(.*)/ and $specific_version = $1;

	if ($specific_version) {
	    $entry->{initrd} or $entry->{initrd} = "/boot/initrd-$specific_version.img";
	    unless (-e "$prefix/$entry->{initrd}") {
		eval { mkinitrd($prefix, $specific_version, "$entry->{initrd}") };
		undef $entry->{initrd} if $@;
	    }
	}
    }
    $entry;
}

sub dev2prompath { #- SPARC only
    my ($dev) = @_;
    my ($wd, $num) = $dev =~ /^(.*\D)(\d*)$/;
    require c;
    $dev = c::disk2PromPath($wd) and $dev = $dev =~ /^sd\(/ ? "$dev$num" : "$dev;$num";
    $dev;
}

sub get_kernels_and_labels {
    my ($prefix) = @_;
    my $dir = "$prefix/boot";
    my @l = grep { /^vmlinuz-/ } all($dir);
    my @kernels = grep { ! -l "$dir/$_" } @l;

    my @preferred = ('', 'secure', 'enterprise', 'smp');
    my %weights = map_index { $_ => $::i } @preferred;
    
    require pkgs;
    @kernels = 
      sort { pkgs::versionCompare($b->[1], $a->[1]) || $weights{$a->[2]} <=> $weights{$b->[2]} } 
      map {
	  if (my ($version, $ext) = /vmlinuz-((?:[\-.\d]*(?:mdk)?)*)(.*)/) {
	      [ "$version$ext", $version, $ext ];
	  } else {
	      log::l("non recognised kernel name $_");
	      ();
	  }
      } @kernels;

    my %majors;
    foreach (@kernels) {
	push @{$majors{$1}}, $_ if $_->[1] =~ /^(2\.\d+)/
    }
    while (my ($major, $l) = each %majors) {
	$l->[0][1] = $major if @$l == 1;
    }

    my %labels;
    foreach (@kernels) {
	my ($complete_version, $version, $ext) = @$_;
	my $label = '';
	if (exists $labels{$label}) {
	    $label = "-$ext";
	    if (!$ext || $labels{$label}) {
		$label = "-$version$ext";
	    }
	}
	$labels{$label} = $complete_version;
    }
    %labels;
}

sub suggest {
    my ($prefix, $lilo, $hds, $fstab, $vga_fb) = @_;
    my $root_part = fsedit::get_root($fstab);
    my $root = isLoopback($root_part) ? "loop7" : $root_part->{device};
    my $boot = fsedit::get_root($fstab, 'boot')->{device};
    my $partition = first($boot =~ /\D*(\d*)/);
    #- PPC xfs module requires enlarged initrd
    my $xfsroot = isThisFs("xfs", $root_part);

    require c; c::initSilo() if arch() =~ /sparc/;

    my ($onmbr, $unsafe) = $lilo->{crushMbr} ? (1, 0) : suggest_onmbr($hds);
    add2hash_($lilo, arch() =~ /sparc/ ?
	{
	 entries => [],
	 timeout => 10,
	 use_partition => 0, #- we should almost always have a whole disk partition.
	 root          => "/dev/$root",
	 partition     => $partition || 1,
	 boot          => $root eq $boot && "/boot", #- this helps for getting default partition for silo.
	} : arch =~ /ppc/ ?
	{
	 defaultos => "linux",
	 entries => [],
	 initmsg => "Welcome to Mandrake Linux!",
	 delay => 30,	#- OpenFirmware delay
	 timeout => 50,
	 enableofboot => 1,
	 enablecdboot => 1,
	 useboot => $boot,
	 xfsroot => $xfsroot,
	} :
	{
	 bootUnsafe => $unsafe,
	 entries => [],
	 timeout => $onmbr && 10,
	   if_(arch() !~ /ia64/,
	 lba32 => 1,
	 boot => "/dev/" . ($onmbr ? $hds->[0]{device} : fsedit::get_root($fstab, 'boot')->{device}),
	 map => "/boot/map",
	 install => "/boot/boot.b",
         ),
	});

    if (!$lilo->{message} || $lilo->{message} eq "1") {
	$lilo->{message} = join('', cat_("$prefix/boot/message"));
	if (!$lilo->{message}) {
	    my $msg_en =
#-PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
__("Welcome to %s the operating system chooser!

Choose an operating system in the list above or
wait %d seconds for default boot.

");
	    my $msg = translate($msg_en);
	    #- use the english version if more than 20% of 8bits chars
	    $msg = $msg_en if int(grep { $_ & 0x80 } unpack "c*", $msg) / length($msg) > 0.2;
	    $lilo->{message} = sprintf $msg, arch() =~ /sparc/ ? "SILO" : "LILO", $lilo->{timeout};
	}
    }

    add2hash_($lilo, { memsize => $1 }) if cat_("/proc/cmdline") =~ /\bmem=(\d+[KkMm]?)(?:\s.*)?$/;
    if (my ($s, $port, $speed) = cat_("/proc/cmdline") =~ /console=(ttyS(\d),(\d+)\S*)/) {
	log::l("serial console $s $port $speed");
	add_append($lilo, 'console' => $s);
	any::set_login_serial_console($prefix, $port, $speed);
    }

    my %labels = get_kernels_and_labels($prefix);
    $labels{''} or die "no kernel installed";

    while (my ($ext, $version) = each %labels) {
	my $entry = add_kernel($prefix, $lilo, $version, $ext, $root,
	       {
		if_($vga_fb && $ext eq '', vga => $vga_fb), #- using framebuffer
	       });
	$entry->{append} .= " quiet" if $vga_fb && $version !~ /smp|enterprise/;

	if ($vga_fb && $ext eq '') {
	    add_kernel($prefix, $lilo, $version, $ext, $root, { label => 'linux-nonfb' });
	}
    }
    my $failsafe = add_kernel($prefix, $lilo, $labels{''}, '', $root, { label => 'failsafe' });
    $failsafe->{append} =~ s/devfs=mount/devfs=nomount/;
    $failsafe->{append} .= " failsafe";

    if (arch() =~ /sparc/) {
	#- search for SunOS, it could be a really better approach to take into account
	#- partition type for mounting point.
	my $sunos = 0;
	foreach (@$hds) {
	    foreach (@{$_->{primary}{normal}}) {
		my $path = $_->{device} =~ m|^/| && $_->{device} !~ m|^/dev/| ? $_->{device} : dev2prompath($_->{device});
		add_entry($lilo->{entries},
			  {
			   type => 'other',
			   kernel_or_dev => $path,
			   label => "sunos"   . ($sunos++ ? $sunos : ''),
			  }) if $path && isSunOS($_) && type2name($_->{type}) =~ /root/i;
	    }
	}
    } elsif (arch() =~ /ppc/) {
	#- if we identified a MacOS partition earlier - add it
	if (defined $partition_table_mac'macos_part) {
	    add_entry($lilo->{entries},
		      {
		       label => "macos",
		       kernel_or_dev => $partition_table_mac'macos_part
		      });
	}
    } elsif (arch() !~ /ia64/) {
	#- search for dos (or windows) boot partition. Don't look in extended partitions!
	my %nbs;
	foreach (@$hds) {
	    foreach (@{$_->{primary}{normal}}) {
		my $label = isNT($_) ? 'NT' : isDos($_) ? 'dos' : 'windows';
		add_entry($lilo->{entries},
			  {
			   type => 'other',
			   kernel_or_dev => "/dev/$_->{device}",
			   label => $label . ($nbs{$label}++ ? $nbs{$label} : ''),
			     if_($_->{device} =~ /[1-4]$/, 
			   table => "/dev/$_->{rootDevice}"
				),
			   unsafe => 1
			  }) if isNT($_) || isFat($_) && isFat({ type => fsedit::typeOfPart($_->{device}) });
	    }
	}
    }
    foreach ('secure', 'enterprise', 'smp') {
	if (get_label("linux-$_", $lilo)) {
	    $lilo->{default} ||= "linux-$_";
	    last;
	}
    }
    $lilo->{default} ||= "linux";

    my %l = (
	     yaboot => to_bool(arch() =~ /ppc/),
	     silo => to_bool(arch() =~ /sparc/),
	     lilo => to_bool(arch() !~ /sparc|ppc/) && !isLoopback(fsedit::get_root($fstab)),
	     grub => to_bool(arch() !~ /sparc|ppc/ && !isRAID(fsedit::get_root($fstab))),
	     loadlin => to_bool(arch() !~ /sparc|ppc/) && -e "/initrd/loopfs/lnx4win",
	    );
    unless ($lilo->{methods}) {
	$lilo->{methods} ||= { map { $_ => 1 } grep { $l{$_} } keys %l };
	if ($lilo->{methods}{lilo} && -e "$prefix/boot/lilo-graphic") {
	    $lilo->{methods}{lilo} = "lilo-graphic";
	    exists $lilo->{methods}{grub} and $lilo->{methods}{grub} = undef;
	}
    }
}

sub suggest_floppy {
    my ($bootloader) = @_;

    my $floppy = detect_devices::floppy() or return;
    $floppy eq 'fd0' or log::l("suggest_floppy: not adding $floppy"), return;

    add_entry($bootloader->{entries},
      {
       type => 'other',
       kernel_or_dev => '/dev/fd0',
       label => 'floppy',
       unsafe => 1
      });
}

sub keytable($$) {
    my ($prefix, $f) = @_;
    local $_ = $f;
    if ($_ && !/\.klt$/) {
	$f = "/boot/$_.klt";
	run_program::rooted($prefix, "keytab-lilo.pl", ">", $f, $_) or undef $f;
    }
    $f && -r "$prefix/$f" && $f;
}

sub has_profiles { to_bool(get_label("office", $b)) }
sub set_profiles {
    my ($b, $want_profiles) = @_;

    my $office = get_label("office", $b);
    if ($want_profiles xor $office) {