diff options
author | Mystery Man <unknown@mandriva.org> | 2005-06-09 10:31:50 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2005-06-09 10:31:50 +0000 |
commit | f7f9973b39066231db2af659a1bcfa5dd29f0ccc (patch) | |
tree | 9468a7d58d69b0621c995a12b6ce462c0b472e5b /globetrotter | |
parent | cdd8e7b6f9fd25e6248a4dee7987ef995049aa58 (diff) | |
download | drakx-backup-do-not-use-f7f9973b39066231db2af659a1bcfa5dd29f0ccc.tar drakx-backup-do-not-use-f7f9973b39066231db2af659a1bcfa5dd29f0ccc.tar.gz drakx-backup-do-not-use-f7f9973b39066231db2af659a1bcfa5dd29f0ccc.tar.bz2 drakx-backup-do-not-use-f7f9973b39066231db2af659a1bcfa5dd29f0ccc.tar.xz drakx-backup-do-not-use-f7f9973b39066231db2af659a1bcfa5dd29f0ccc.zip |
This commit was manufactured by cvs2svn to create branch
'MDK-10_2-update'.
Diffstat (limited to 'globetrotter')
-rw-r--r-- | globetrotter/fix-broken-hd.diff | 127 | ||||
-rwxr-xr-x | globetrotter/make_live | 504 |
2 files changed, 631 insertions, 0 deletions
diff --git a/globetrotter/fix-broken-hd.diff b/globetrotter/fix-broken-hd.diff new file mode 100644 index 000000000..6ae7fa491 --- /dev/null +++ b/globetrotter/fix-broken-hd.diff @@ -0,0 +1,127 @@ +--- make_live 2005-05-25 17:42:35.000000000 +0200 ++++ make_live 2005-05-25 17:46:41.000000000 +0200 +@@ -8,6 +8,7 @@ + use standalone; + use interactive; + use common; ++use detect_devices; + use partition_table; + use fsedit; + use fs; +@@ -321,8 +322,116 @@ + + $::prefix = $ARGV[0] || '/tmp/live_tree'; + ++#=========================================================================== ++# Fix disk if it's a bogus one: ++ ++my @packages2delete = qw( ++ Mandrake/RPMS/uqm-data-0.3-1mdk.noarch.rpm ++ ++ Mandrake/RPMS2/kernel24-tmb-2.4.25-6.tmb.1mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-2.4.25-7.tmb.1mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-2.4.25-7.tmb.2mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-enterprise-2.4.25-6.tmb.1mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-enterprise-2.4.25-7.tmb.1mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-enterprise-2.4.25-7.tmb.2mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-i686-up-4GB-2.4.25-6.tmb.1mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-i686-up-4GB-2.4.25-7.tmb.1mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-i686-up-4GB-2.4.25-7.tmb.2mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel24-tmb-source-2.4.25-7.tmb.2mdk.i586.rpm ++ ++ Mandrake/RPMS2/kernel-tmb-2.6.4-1.tmb.8mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel-tmb-enterprise-2.6.4-1.tmb.8mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel-tmb-i686-up-4GB-2.6.4-1.tmb.8mdk-1-1mdk.i586.rpm ++ Mandrake/RPMS2/kernel-tmb-source-2.6.4-1.tmb.8mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-2.4.25.5mdk-3-7mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-2.6.3.15mdk-3-8mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-enterprise-2.4.25.5mdk-3-7mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-enterprise-2.6.3.15mdk-3-8mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-i686-up-4GB-2.4.25.5mdk-3-7mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-i686-up-4GB-2.6.3.15mdk-3-8mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-p3-smp-64GB-2.4.25.5mdk-3-7mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-p3-smp-64GB-2.6.3.15mdk-3-8mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-smp-2.4.25.5mdk-3-7mdk.i586.rpm ++ Mandrake/RPMS2/kernel-win4lin-smp-2.6.3.15mdk-3-8mdk.i586.rpm ++ ); ++ ++# misc paths; ++my $pkgs_mount_path = "/mnt/mdk_pkgs"; ++my $rescue_path = "/rescue-glob"; ++my $cd_mount_path = "/mnt/cdrom-glob"; ++ ++# enable to retry fixing partitions if fixing failed: ++my $__need2befixed_mark = "Mandrake/RPMS/NEED_TO_BE_FIXED"; ++my $need2befixed_mark = "$pkgs_mount_path/__need2befixed_mark"; ++ ++{ ++ mkdir_p($pkgs_mount_path); ++ ++ my $cleaner = before_leaving { ++ if (my $err = $@) { ++ print "\n>> an error happened: $err\n"; ++ } ++ print "Cleaning on end of fixing\n"; ++ eval { fs::umount($_) } foreach $pkgs_mount_path, $cd_mount_path; ++ undef $@; # do not propagate fs::umount exceptions ++ }; ++ ++ print "Checking if the packages partition needs to be fixed\n"; ++ # system("mount /dev/$pkg_dev->{device} $pkgs_mount_path"); ++ fs::mount($pkg_dev->{device}, $pkgs_mount_path, 'ext3'); ++ # my $pkgs_mount_path = "/home/qa/broken"; # FIXME: TESTING ++ ++ if (any { -e "$pkgs_mount_path/$_" } @packages2delete, $__need2befixed_mark) { ++ print "Preparing to fixing the partition packages...\n"; ++ touch($need2befixed_mark); ++ ++ # Cleaning the packages so that we get back some free space: ++ unlink("$pkgs_mount_path/$_") foreach @packages2delete; ++ ++ ++ # Lookup rescue CD: ++ ++ my $cdrom_path; ++ ++ my @cdroms = map { $_->{device} } detect_devices::cdroms(); ++ ++ mkdir_p($cd_mount_path); ++ ++ my ($found, $cdrom_dev); ++ ++ foreach my $cdrom (@cdroms) { ++ eval { fs::mount($cdrom, $cd_mount_path, 'iso9660', 1) } or next; # nicely handle empty drives ++ if (-d "$cd_mount_path/$rescue_path") { ++ $cdrom_dev = $cdrom; ++ $found = 1; ++ last; ++ } ++ fs:umount($cd_mount_path); ++ } ++ undef $@; # do not propagate fs::mount exceptions ++ ++ if ($found) { ++ warn "Found rescue CDROM on $cdrom_dev\n"; ++ } else { ++ warn "I failed to found the rescue CDROM\nPress enter to return to the menu"; ++ <STDIN>; ++ # TODO : replace by sg else if merged within make_live ++ exit(0); ++ } ++ ++ ++ print "Fixing the partition packages... in progress\n"; ++ # Copy Mandrake/base with the newly generated hdlists from the old repositery; ++ cp_af($_, "$pkgs_mount_path/Mandrake/base") foreach glob_("$cd_mount_path/$rescue_path/Mandrake/base/*"); ++ cp_af($_, "$pkgs_mount_path/Mandrake/RPMS") foreach glob_("$cd_mount_path/$rescue_path/Mandrake/pkgs/*"); ++ unlink($need2befixed_mark); ++ print "Fixing the partition packages... done\n"; ++ } ++} ++ ++ + #=========================================================================== + # Building the disk: + -d $::prefix or mkdir $::prefix; + print "Making live in $::prefix directory.\n"; + diff --git a/globetrotter/make_live b/globetrotter/make_live new file mode 100755 index 000000000..0752165e7 --- /dev/null +++ b/globetrotter/make_live @@ -0,0 +1,504 @@ +#!/usr/bin/perl + +$::isInstall = 1; # for /root/drakx/ddebug.log + +use strict; +#use lib qw(/usr/lib/libDrakX); +use lib "../perl-install"; +use standalone; +use interactive; +use common; +use partition_table; +use fsedit; +use fs; +use any; +use pkgs; +use class_discard; +use run_program; +use log; + +# my $in = interactive->vnew; + +$::isStandalone = undef; # for /tmp/ddebug.log + +my (%options, @new_ARGV); + +foreach (@ARGV) { + if (/^--(.*)/) { + $options{$1} = 1; + } else { + push @new_ARGV, $_; + } +} + +my $rescue; + +if ($0 =~ /restore_globetrotter/) { + %options = (install => 1, post => 1); + $rescue = 1; +} + +@ARGV = @new_ARGV; + +my @suggestions = ( + { mntpoint => "/", size => 4500 << 11, type => 0x483, ratio => 1, maxsize => 6000 << 11 }, + # splited / and /usr: + # { mntpoint => "/", size => 250 << 11, type => 0x483, ratio => 1, maxsize => 2000 << 11 }, + # { mntpoint => "/usr", size => 300 << 11, type => 0x483, ratio => 4, maxsize => 4000 << 11 }, + { mntpoint => "/home", size => 100 << 11, type => 0x483, ratio => 3 }, + + # share partition with windows: + { mntpoint => "/mnt/share", size => 2000 << 11, type => 0xb, ratio => 2, maxsize => 10000 << 11 }, + { mntpoint => "/mnt/packages", size => 7500 << 11, type => 0x483, ratio => 3, maxsize => 7500 << 11 }, + # allocated last b/c end of disk is usually faster: + { mntpoint => "swap", size => 64 << 11, type => 0x82, ratio => 1, maxsize => 500 << 11 }, + ); + + +sub get_hds() { + my $all_hds = fsedit::get_hds(); + my $other; + ($all_hds->{hds}, $other) = partition { $_->{usb_description} eq 'LaCie|LaCie Hard Drive USB' } @{$all_hds->{hds}}; + my_exit("Your disk cannot be restored because it cannot be found!") if !$all_hds->{hds}[0]; + $all_hds, $all_hds->{hds}[0]; # $other +} + + +sub prepare_disk() { + # repartion the hard disk: + print "PARTITIONNING\n"; + my ($all_hds, $hd, $other) = get_hds(); + # partition_table::remove($hd, $_) while partition_table::get_normal_parts($hd); + run_program::run("swapoff", "/dev/$all_hds->{hds}[0]{device}8") if any { /$all_hds->{hds}[0]{device}/ } cat_("/proc/partitions"); + + partition_table::raw::zero_MBR_and_dirty($hd); + fsedit::allocatePartitions($all_hds, \@suggestions); + require diskdrake::interactive; + require class_discard; + # diskdrake::interactive::write_partitions(class_discard->new, $_, 'skip_check_rebootNeeded') foreach (@{$all_hds->{hds}}); + foreach (@{$all_hds->{hds}}) { + local $::isStandalone = undef; + print "WRITE PARTITION ON $_->{file}\n"; + diskdrake::interactive::write_partitions(class_discard->new, $_, 'skip_check_rebootNeeded') + } + # partition_table::write(@{$all_hds->{hds}}); + ($all_hds, $hd, $other); +} + + +sub formatdisk { + my ($hd) = @_; + print "FORMATTING\n"; + foreach (partition_table::get_normal_parts($hd)) { + print qq(Formatting "$_->{device}" ($_->{mntpoint})\n); + fs::format_part(undef, $_, $::prefix, undef) if !$::testing; + } +} + + +#@ARGV <= 1 or die "usage: make_live [live_location=/tmp/live_tree]\n"; + + if (!find { m!/proc/bus/usb! } run_program::get_stdout('mount')) { + warn "USB service is *NOT* started" if !$rescue; + run_program::get_stdout('service', 'usb', 'start'); + } + +sub my_exit { + my ($msg) = @_; + print "\n\n==============================================================\n\n"; + print $msg; + print "\n\nPress <RETURN> to return back to menu\n\n"; + print "==============================================================\n\n"; + <STDIN>; + exit(0); +} + +sub find_partition { + my ($label, @parts) = @_; + find { member(fs::type2fs($_), qw(ext2 ext3)) && chomp_(`e2label /dev/$_->{device} 2>/dev/root`) eq $label } @parts; +} + +my $pkg_dev; +if ($rescue) { + system("mount -t tmpfs none /tmp"); + # let be able to see USB devices: + system("mount -t usbfs none /proc/bus/usb"); + system("modprobe usb-storage; modprobe sd_mod"); + # let be able to detect SCSI hds: + mkdir("/sys"); + system("mount -t sysfs none /sys"); + + my ($all_hds, $hd, $other) = get_hds(); + print "Looking for the package partition\n"; + my @parts = partition_table::get_normal_parts($hd); + $pkg_dev = find_partition("MDK-PKGS", @parts); + #die "I cannot find the package partition which is needed in order to restore the system!" + my_exit("Your disk cannot be restored because there is no more a restore partition!") if is_empty_hash_ref($pkg_dev) || !$pkg_dev->{device}; + print "Packages partition was found on $pkg_dev->{device}\n"; + my $root = find_partition("MDK-ROOT", @parts); + $root = find { $_->{device} eq "sda1" } @parts if is_empty_hash_ref($root); + #my_exit("I cannot find any hard disk to restore!") if is_empty_hash_ref($root) || !$root->{device}; + my_exit("Your disk cannot be restored because there is no more a root partition!") if is_empty_hash_ref($root) || !$root->{device}; + print "\nPlease wait, disk is being checked, this can take quite some time\n\n"; + run_program::run("e2fsck -C0 -y $_") foreach map { + my $p = find_partition($_, @parts); + if_($p, $p->{device}); # handle lost labels + } "MDK-PKGS", "MDK-HOME"; # MDK-ROOT" + print "Please wait, disk reinstallation is in progress, this can take quite some time\n"; + print "Formating $root->{device}\n"; + system("mkfs.ext2 -j /dev/$root->{device} > /dev/null\n"); + run_program::run('tune2fs', '-L', "MDK-ROOT", "/dev/$root->{device}"); # prevent lost label if restore aborts before the end +} + +sub installPackages() { + local $::testing = undef; + + # for a gconftool-2 cleaner: + my $pid = fork(); + !defined $pid and die("cannot fork: $!"); + !$pid and do { + while (1) { + sleep(10); + run_program::run('/usr/bin/killall', 'gconftool-2') if -x '/usr/bin/killall'; + } + }; + my $_b = before_leaving { kill 'TERM', $pid if $pid }; + + # ensure no %_install_langs: + output_p("$::prefix/etc/rpm/macros", "%_install_langs all\n"); + # ensure boot from USB will work: + output_p("$::prefix/etc/sysconfig/mkinitrd", "forceusb=yes\n"); + + mkdir_p("$::prefix/var/lib/rpm"); + mkdir_p("$::prefix/root/drakx"); + + + undef *install_any::setDefaultPackages; + *install_any::setDefaultPackages = sub {}; + + undef *install_any::getFile; + *install_any::getFile = sub { + my ($f, $o_method) = @_; + log::l("getFile $f:$o_method"); + open(my $F, '/export/' . install_any::relGetFile($f)) or return; + $F; + }; + + undef *c::kernel_version; + *c::kernel_version = sub { + #my @l = glob_('/export/Mandrake/RPMS/kernel-enterprise-2.6*'); + my @l = glob_('/export/Mandrake/RPMS/kernel-2.6*'); + @l >= 1 or die "can't find kernel"; + @l <= 1 or warn "too many kernels"; + first(`rpm -qp --qf '%{name}' $l[-1]` =~ /kernel-(.*)/); + }; + + my $kernel_version = c::kernel_version(); + + print "INSTALLING\n"; + install_any::setPackages(my $o = $::o = + { + prefix => $::prefix, + meta_class => 'desktop', + default_packages => [ + #- for screenshots: + qw(fb2png), + qw(XFree86-server XFree86-xfs XFree86-FBDev), + qw(openssh-server), #- fred wants it + qw(alsa-utils cdialog newt), + qw(k3b-dvd), + qw(davfs nfs-utils samba-server sane-backends xsane xsane-gimp ntp), + qw(acpi acpid), #- so that removing acpi=ht will work + qw(mountloop), #- crypted folders + qw(mandrake-doc-en mandrake-doc-fr mandrake-doc-drakxtools-en mandrake-doc-drakxtools-fr), + qw(autologin), + qw(synaptics), + #- network conf: + qw(wireless-tools pcmcia-cs), + #- zeroconf: + qw(zcip dhcpcd tmdns), + #- cnx stuff: + qw(dhcp-client ppp kdenetwork-kppp ppp-pppoatm ppp-pppoe pptp-linux pptp-adsl rp-pppoe), + #- ISDN stuff: + # qw(isdn4net ibod isdn4k-utils), # not installed since it provides an interface (will be automatically installed by drakconnect) + #- network file sharing: + qw(nfs-utils-clients samba-client), + #- network drivers and firmwares: + qw(eagle-usb speedtouch speedtouch_mgmt unicorn), + #- alt kernels: + # glob_('/export/Mandrake/RPMS/kernel-2.4*'), #- for ISDN + #- configuration: + qw(drakconf drakcronat drakfirsttime drakxtools harddrake-ui mdkonline rpmdrake userdrake2), + qw(cups cups-drivers foomatic-db gimpprint hpoj libnet-snmp mtools mtoolsfm nmap printer-filters printer-testpages printer-utils scli xojpanel xpp), #- printer stuff + "ATI_kernel-$kernel_version", qw(ATI_GLX ATI_GLX-utils NVIDIA_GLX libMesaGLU1), # ATI_GLX requires ATI_kernel + "NVIDIA_kernel-$kernel_version", + # qw(hcfpcimodem hsflinmodem ltmodem), #- 2.4.x only + qw(xinput), #- for some mice + qw(bash-completion binutils emacs-X11 ntsysv perl-doc perl-Term-Readline-Gnu), #- allow debugging + qw(openssh-askpass-gnome), #- openssh-askpass for mountloop doesn't allow to click on ok/cancel buttons + qw(clanbomber freeciv-client freeciv-server crack-attack kdegames), #- more games + qw(numlock), # shorewall # not installed since its default config breaks network (will be automatically installed by drakfirewall) + qw(xawtv zapping), #- tv apps + qw(scribus scribus-i18n-de scribus-i18n-fr), #- John Jablonski says it's so much useful + (map { "OpenOffice.org-l10n-$_" } qw(ar ca cs da de el en es eu fi fr it ja ko nl pl pt pt_BR ru sk sv tr zh_CN zh_TW)), + qw(dosfstools mtools), + qw(koffice konsole), + qw(devfsd dynamic harddrake hotplug magicdev mandrake-globetrotter netprofile), + qw(gnome2), + qw(alsa-utils), + qw(ipw2100 ipw2100_kernel ipw2100_kernel-2.6.3.13mdk), # ipw2100_kernel-$kernel_version, + #- fonts: + qw(XFree86-100dpi-fonts XFree86-75dpi-fonts), + qw(fonts-bitmap-tscii fonts-hebrew-elmar), + (map { "fonts-ttf-$_" } qw(arabic armenian bengali big5 decoratives ethiopic gb2312 japanese kannada korean latex tamil thai tscii vera west_european)), + (map { "fonts-type1-$_" } qw(cyrillic greek hebrew)), + ], + }); + + my %compssUsersChoice = map { $_ => 1 } map { @{$_->{flags}} } values %{$o->{compssUsers}}; + $compssUsersChoice{$_} = 1 foreach 'SYSTEM', 'DVD', 'USB', 'SOUND', 'BURNER', 'UTF8', 'DOCS', 'TV', '3D', 'INSTALL'; + $compssUsersChoice{qq(LOCALES"$_")} = 1 foreach lang::langsLANGUAGE({ all => 1 }); + + pkgs::setSelectedFromCompssList($o->{packages}, \%compssUsersChoice, 4, 0); + + my $unselect = sub { + my ($pkg) = @_; + my $p = pkgs::packageByName($o->{packages}, $pkg); + pkgs::unselectPackage($o->{packages}, $p) if $p; + }; + + # unselect some packages whose services fsck up the box and whose services are not enabled by appropriate tools: + # (shorewall must be deselected before iptables is) + $unselect->($_) foreach qw(at hpoj shorewall iptables ntp tmdns zcip ); + + # unselect uim since uim IM break first time wizard when selecting english: + $unselect->($_) foreach qw(uim-applet uim libuim0); + + my @toInstall = pkgs::packagesToInstall($o->{packages}); + local $ENV{DURING_INSTALL} = 1; + $ENV{LD_LIBRARY_PATH} = "/lib:/usr/lib:/usr/X11R6/lib:/usr/lib/qt3/lib"; + pkgs::install($::prefix, 0, \@toInstall, $o->{packages}); + + eval { fs::umount("$::prefix/proc") }; +} + +sub config_X_proprietary_drivers() { + unlink "$::prefix/usr/lib/libGL.so"; + + my %name_to_Driver = (NVIDIA_GLX => 'nvidia', ATI_GLX => 'fglrx'); + + my $lib = 'libGL.so.1'; + symlinkf("/etc/X11/$lib", "$::prefix/usr/lib/$lib"); + foreach (keys %name_to_Driver) { + my ($full_name) = run_program::rooted_get_stdout($::prefix, 'rpm', '-ql', $_) =~ m!/usr/lib/(\Q$lib\E\..*)! or die ''; + symlinkf($full_name, "$::prefix/usr/lib/$lib.$name_to_Driver{$_}"); + } + #- remove the dirty hack done by NVIDIA_kernel-xxx proprietary package + #- we do it by hand when needed + substInFile { $_ = '' if $_ eq 'nvidia' } "$::prefix/etc/modules"; +} + +my $fstab; + +my $cleaner = before_leaving { + if (my $err = $@) { + print "\n>> an error happened: $err\n"; + } + print "Cleaning on exiting\n"; + print "- Umounting partitions:\n"; + print "\tumounting /proc\n"; + eval { fs::umount("$::prefix/proc") }; + # fs::umount("$::prefix/$_") foreach 'mnt/packages', 'mnt/share', 'home', ''; + if ($fstab) { + print "\tumounting everything else\n"; + eval { fs::umount_all($fstab, $::prefix) } or system("umount $::prefix"); + } + print "\tumounting /tmp\n"; + eval { fs::umount("/tmp") } if $rescue; + print "Cleaning done\n"; +}; + + +$::prefix = $ARGV[0] || '/tmp/live_tree'; + +-d $::prefix or mkdir $::prefix; +print "Making live in $::prefix directory.\n"; + + +my ($all_hds, $hd, $other) = do { + # here we want testing so that diskdrake still set mount points in data structure: + local $::testing = !$options{partition}; + prepare_disk(); +}; + +formatdisk($hd) if $options{format}; + +add2hash($hd, $other); + +undef $::testing; + +my @parts = partition_table::get_normal_parts($hd); + +my ($root) = grep { $_->{mntpoint} eq "/" } @parts; +print "Root is $root->{device}\n"; +run_program::run('tune2fs', '-L', "MDK-ROOT", "/dev/$root->{device}"); +# fs::mount_part($root, $::prefix); +$fstab = [ fsedit::get_all_fstab($all_hds) ]; + +# we need to mount every fs we want to see into /etc/fstab !!! +fs::mount_part($_, $::prefix) foreach sort { $a->{mntpoint} cmp $b->{mntpoint} } @$fstab; + +symlink("$::prefix/mnt/packages", "/export") if $rescue; + +eval { + print "Installing packages\n"; + installPackages(); +} if $options{install}; +print "ERROR WHILE INSTALLING PACKAGES: $@\n" if $@; +log::closeLog; + +sub doRootSubst { + my ($file) = @_; + substInFile { + s!/dev/$root->{device}!LABEL=MDK-ROOT!g; + } $file; +} + +#fs::merge_info_from_mtab($fstab); +fs::write_fstab($all_hds, $::prefix); +append_to_file("$::prefix/etc/fstab", "none /dev/pts devpts mode=0620 0 0"); +doRootSubst("$::prefix/etc/fstab"); + +my ($home) = grep { $_->{mntpoint} eq "/home" } @parts; +my ($mnt_pkgs) = grep { $_->{mntpoint} eq "/mnt/packages" } @parts; +run_program::run('tune2fs', '-L', "MDK-HOME", "/dev/$home->{device}") if $home; +run_program::run('tune2fs', '-L', "MDK-PKGS", "/dev/$mnt_pkgs->{device}") if $mnt_pkgs; + +substInFile { + s!defaults\s!defaults,ro ! if m!/mnt/packages!; + s!defaults\s!defaults,umask=0000 ! if m!/mnt/share!; + s!/dev/$home->{device}!LABEL=MDK-HOME!g; + s!/dev/$mnt_pkgs->{device}!LABEL=MDK-PKGS!g; +} "$::prefix/etc/fstab"; + + +#------------------------------------------------------------------- +#- Bootloader +print "Configuring bootloader\n"; +system("modprobe loop"); +require keyboard; +require bootloader; + +my $bootloader = { + keytable => keyboard::keyboard2kmap(keyboard::lang2keyboard('fr')), + bios => { '/dev/sda' => '0x80' }, + }; + +bootloader::suggest($bootloader, $all_hds->{hds}, $fstab, + vga_fb => 788, + quiet => 1); + +# LILO failled to boot from SCSI: +# $bootloader->{method} = 'lilo-graphic'; +$bootloader->{method} = 'grub'; + +eval { bootloader::install($bootloader, $fstab, $all_hds->{hds}) }; + +doRootSubst("$::prefix/boot/grub/menu.lst"); +run_program::rooted($::prefix, 'sh', '/boot/grub/install.sh'); + +# fix GRUB configuration: +substInFile { + # use FB by default on versionned entries so that the initial versionned entry behave like those created by /sbin/installkernel: + s/$/ vga=788/ if /^kernel.*\d\.\d\.\d/; + # set devfs=mount as well so that installkernel can properly install bootable 2.4.x kernels: + s/$/ devfs=mount/ if /^kernel/ && !/failsafe/; +} "$::prefix/boot/grub/menu.lst"; + + +## disable ISDN by default (bogus isdn4net came with an enabled interface :-(): +#substInFile { +# s/#ONBOOT.*/ONBOOT="no"/ +#} "$::prefix/etc/sysconfig/network-scripts/ifcfg-ippp0"; +# + +print "Post install misc configuration\n"; + + +# clean services: +# cups-lpd ibod isdn4linux isdnlog)) { +run_program::rooted($::prefix, '/sbin/chkconfig', '--del', $_) foreach qw(acon jserver oki4daemon); +#foreach my $service (qw(acon atd cups-lpd hpoj ibod iptables isdn4linux isdnlog jserver ntpd oki4daemon shorewall tmdns)) { +# run_program::rooted($::prefix, '/sbin/chkconfig', '--level', $_, $service, 'off') foreach qw(3 5); +#} + +# probably useless: +foreach my $service (qw(alsa dm harddrake hotplug sound)) { + run_program::rooted($::prefix, '/sbin/chkconfig', '--level', $_, $service, 'on') foreach qw(3 5); +} + +if ($options{post}) { + #------------------------------------------------------------------- + # save a few more files in profiles + my $prof_cfg = "$::prefix/etc/netprofile/list"; + my @files = map { chomp_($_) } cat_($prof_cfg); + # do not save the whole /etc/sysconfig; + push @files, (map { "/etc/X11/$_" } qw(XF86Config XF86Config-4)), + (map { "/etc/sysconfig/$_" } qw(keyboard harddrake2/previous_hw harddisks)), + (map { "/etc/$_" } qw(modprobe.conf modprobe.devfs modprobe.preload modules modules.conf modules.devfs)), + qw(/etc/asound.state /etc/fstab /etc/ld.so.conf/GL.conf /etc/shorewall/); + + output($prof_cfg, join("\n", sort @files)); + + + #------------------------------------------------------------------- + #- regenerate library loader and fonts cache + run_program::rooted($::prefix, 'ldconfig'); + any::fix_broken_alternatives(); + run_program::rooted($::prefix, 'fc-cache'); #- generate cache in all directories mentioned in config file + + #- XFree + + touch("$::prefix/etc/menu/enable_simplified"); + + { + local $ENV{LC_ALL} = 'en_US'; #- update-menus doesn't work when there is no locale (aka locale "C") + #local $ENV{HOME} = '/'; #- savekdemimetypes.pl needs this otherwise it's tmp file fails + run_program::rooted($::prefix, 'update-menus', '-n'); + } + + run_program::rooted($::prefix, 'nspluginscan'); #- must be run before kbuildsycoca for the ksycoca to be flash plugin aware + + $ENV{HELP_BROWSER} = "kfmclient openProfile webbrowsing"; + $ENV{BROWSER} = "kfmclient openProfile webbrowsing"; + $ENV{DESKTOP} = "kde"; + #- faster boot: + foreach my $lang (lang::list_langs()) { + local $ENV{LC_ALL} = lang::getLANGUAGE($lang); + unlink "$::prefix/usr/share/services/ksycoca"; + run_program::rooted($::prefix, 'kbuildsycoca', '--global'); + rename("$::prefix/usr/share/services/ksycoca", "$::prefix/usr/share/services/ksycoca-$lang"); + } + symlinkf('/etc/X11/ksycoca', "$::prefix/usr/share/services/ksycoca"); +} + +# clean gconftool-2 mess: +unlink $_ foreach glob("$::prefix/core.*"); + + +##- Mandrake +#substInFile { +# s!Mandrake(l| L)inux release (\S+) \(.*\)!Mandrakelinux Nomad, powered by LaCie Mobile Hard Drive)!; +#} "$::prefix/etc/mandrake-release"; +# + + +system("rsync -rvltp /export/ $::prefix/mnt/packages/") if !$rescue; +unlink $_ foreach glob("$::prefix/var/lib/urpmi/*"); +run_program::rooted($::prefix, 'urpmi.addmedia', '-h', 'main', 'file:///mnt/packages/Mandrake/RPMS'); +run_program::rooted($::prefix, 'urpmi.addmedia', '-h', 'contrib', 'file:///mnt/packages/Mandrake/RPMS2'); + +# for fast test replaying: +run_program::rooted($::prefix, 'tar', 'cfj', '/root/etc.tar.bz2', '/etc'); + +my_exit("Your disk was succesfully restored!\nYou can now reboot your machine."); |