diff options
Diffstat (limited to 'rescue')
54 files changed, 2338 insertions, 1044 deletions
| diff --git a/rescue/.cvsignore b/rescue/.cvsignore deleted file mode 100644 index c660273e8..000000000 --- a/rescue/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -rescue.clp diff --git a/rescue/.gitignore b/rescue/.gitignore new file mode 100644 index 000000000..7b75a3e33 --- /dev/null +++ b/rescue/.gitignore @@ -0,0 +1 @@ +rescue.sqfs diff --git a/rescue/Makefile b/rescue/Makefile index c08d21c75..b9462add0 100644 --- a/rescue/Makefile +++ b/rescue/Makefile @@ -1,12 +1,25 @@  include ../Makefile.config -all: rescue.clp +VERSION=1.68 +PRODUCT=drakx-installer-rescue -install: rescue.clp +RESCUE = rescue.sqfs + +all: $(RESCUE) + +install: $(RESCUE)  	cp -f $< $(STAGE2_DEST) -rescue.clp: list list.$(ARCH) drvinst guessmounts lsparts rescue-doc make_rescue_img -	./make_rescue_img +$(RESCUE): $(wildcard tree/**/*) $(wildcard bin/*) $(wildcard sbin/*) make_rescue_img list.xml aliases +	if [[ -n "$$DEBUG_INSTALL_LANG" ]]; then perl -pi -e '$$_ = "loadkeys '$$DEBUG_INSTALL_LANG'\n$$_" if /LANGUAGE/' tree/usr/bin/mageia-rescue; fi +	DISTRIB_DESCR=$(DISTRIB_DESCR) ./make_rescue_img + +dist: tar + +tar: +	rm -rf $(PRODUCT)*.tar* $(PRODUCT)-$(VERSION) +	@cd ..; git archive --prefix=$(PRODUCT)-$(VERSION)/ $(PRODUCT)-$(VERSION) rescue tools/install-xml-file-list Makefile.config | xz >$(PRODUCT)-$(VERSION).tar.xz; +	$(info $(PRODUCT)-$(VERSION).tar.xz is ready)  clean:  -	rm -f rescue.clp kernel_read_part +	rm -f $(RESCUE) kernel_read_part diff --git a/rescue/NEWS b/rescue/NEWS new file mode 100644 index 000000000..dafe7c222 --- /dev/null +++ b/rescue/NEWS @@ -0,0 +1,362 @@ +Version 1.68 - 18 October 2025 by Jani Välimaa +- replace i586 with i686 in files +- fix and sort nedeed systemd files +  - add systemd-executor +  - remove systemd-cgroups-agent + +Version 1.67 - 28 April 2023 by Martin Whitaker + +- mount efivars in chroot on UEFI systems (mga#31844) + +Version 1.66 - 11 November 2020 by Thierry Vignaud + +- include overload.pm for File::Temp + +Version 1.65 - 16 June 2020 by Thierry Vignaud + +- fix running loadkeys w/o arg if DEBUG_INSTALL_LANG is not set (mga#26782) + +Version 1.64 - 20 March 2020 by Thierry Vignaud + +- debug mode: +  o preset keyboard if DEBUG_INSTALL_LANG is set during build +- do not preload all fs modules uselessly +- guessmount: +  o enable to repair encrypted LVMs/LUKS (mga#22795) +  o fix displaying the version of the distro +  o just use the fs reported by blkid instead of doing brute force guessing + +Version 1.63 - 19 March 2020 by Thierry Vignaud + +- add more tools for XFS & btrfs +- include all of /usr/lib/udev/hwdb.d (mga#20327) +- include F2FS tools +- include missing LVM tools symlinks (mga#25466) +- include ntfs3g compression support plugin +- include Encode::Unicode module for reFind + +Version 1.62 - 18 June 2019 by Thomas Backlund + +- start udevd to support lvm2 (mga#24878) + +Version 1.61 - 11 May 2019 by Thomas Backlund + +- update filelist for new systemd + +Version 1.60 - 22 November 2018 by Thierry Vignaud + +- fix collecting needed perl files with glibc-2.26 + +Version 1.59 - 26 August 2018 by Thomas Backlund + +- adapt for btrfs-progs 4.17.1 + +Version 1.58 - 26 August 2018 by Thomas Backlund + +- adapt for perl-5.28 + +Version 1.57 - 10 February 2018 by Thierry Vignaud + +- add more udev rules (syncing with regular stage2) + +Version 1.56 - 19 January 2018 by Thomas Backlund + +- adapt for new systemd + +Version 1.55 - 30 January 2017 by Thierry Vignaud + +- lsparts: fix reporting half sizes (mga#8853) + +Version 1.54 - 20 June 2016 by Thierry Vignaud + +- do not run shells uselessly +- drop (broken) support for Alpha, IA64 & PPC, Sparc +- fix a message when re-installing bootloader + +Version 1.53 - 28 September 2015 by Thierry Vignaud + +- fix build with libified perl + +Version 1.52 - 30 April 2015 by Thierry Vignaud + +- guessmount: mount /dev, /run & /sys too (mga#10865) +- lsparts (mga#8854): +  o display label too +  o silent run_program + +Version 1.51 - 15 April 2015 by Thierry Vignaud + +- fix reinstalling grub2 on UEFI (mga#15695) + +Version 1.50 - 9 January 2015 by Thomas Backlund + +- add efibootmgr on x86_64 + +Version 1.49 - 18 September 2014 by Thomas Backlund + +- 80-net-name-slot.rules is replaced with 99-default.link + +Version 1.48 - 18 September 2014 by Thomas Backlund + +- killall5 is no more needed + +Version 1.47 - 8 December 2013 by Colin Guthrie + +- use systemd as init in the rescue system +- allowing systemd-nspawn "booting" of a mounted /mnt (after umount /mnt/proc) + +Version 1.46 - 20 October 2013 by Colin Guthrie + +- adapt to a dracut based stage1 + +Version 1.45.1 - 14 October 2013 by Colin Guthrie + +- many btrfs tools no longer exist + +Version 1.45 - 14 October 2013 by Colin Guthrie + +- adapt to latest mdadm +- drop /etc/termcap as it's no longer part of our build +- include network interface name udev rules (mga#10947) + +Version 1.44 - 18 May 2013 by Colin Guthrie + +- ensure /dev is bind mounted before re-installing bootloader (mga#10107) + +Version 1.43 - 15 May 2013 by Colin Guthrie + +- ensure grabjournallogs script is executable (mga#10108) + +Version 1.42 - 30 April 2013 by Thierry Vignaud + +- add a script to simplfy grabbing of journal logs for bug reports +- enable to abort choosing distro to rescue (mga#9765) + +Version 1.41 - 6 April 2013 by Thierry Vignaud + +- really adapt to /usr move (fix lvm2 freezing, mga#5795) +- drop our "use modprobe instead" insmod since we've kmod one for free +- include libdevmapper-event-*.so +- include persistant storage udev rules needed to see new uuids +- offer to pick the distro to rescue when there's more than one +- /var/run/utmp is on tmpfs now +- warn that i586 cannot rescue x86_64 (mga#8696) + +Version 1.40 - 6 March 2013 by Thierry Vignaud + +- preload fuse (mga#5833) +- use kmod's modprobe, thus fixing loading modules (mga#9270) + +Version 1.39 - 3 September 2012 by Thierry Vignaud + +- adapt to latest systemd/udevd +- adapt to perl-5.16.0 +- adapt to /usr move +- default to the higher version when there're several mga roots (mga#6003) +- drop KA support +- fix detecting USB devices with kernel-3.5+ (mga#7248) +- preload load btrfs and nilfs2 too +- rely on stage1 for mounting /dev +- revert to "linux" terminfo +- simplify bringing up local loop interface (pok, mdv) +- stop fixing the raid udev rule now that it has been fixed + +Version 1.38 - 11 May 2012, by Thierry Vignaud + +- include missing modules when SMB appears in fstab (mga#5850) + +Version 1.37 - 18 April 2012, by Thierry Vignaud + +- fix detecting RAID (mga#5048) +- include more udev rules for RAID (mga#5048) + +Version 1.36 - 8 April 2012, by Pascal Terjan + +- fix modprobe to support being called by kernel (mga#5274) + +Version 1.35 - 5 April 2012, by Thierry Vignaud + +- add chrooted rescue system in PATH +- 32bit grub needs 32 bit loader (mga#5191) +- default to "screen" instead of "linux" terminfo (mga#4894) +- include "screen" terminfo (mga#4894) + +Version 1.34 - 26 February 2012, by Maarten Vanraes (AL13N) + +- escape / in generated passwords in startssh +- add trailing ; in command lists in startssh + +Version 1.33 - 26 February 2012, by Thierry Vignaud + +- do not symlink /dev (mga#1023) + +Version 1.32 - 25 February 2012, by Thierry Vignaud & Maarten Vanraes (AL13N) + +- don't overwrite /dev after udev handles it +- add some tests and error handling in startssh +- really fix mounting /dev/pts & /dev/shm (mga#1023) + +Version 1.31 - 25 February 2012, by Thierry Vignaud & Maarten Vanraes (AL13N) + +- add logging to dropbear +- fix mounting /dev/pts & /dev/shm (mga#1023) +- make root user homedir /root +- add agetty (mga#2052) + +Version 1.30 - 26 January 2012, by Thierry Vignaud + +- enable autologin on all consoles +- include mkfs.nilfs2 & nilfs-tune + +Version 1.29 - 25 January 2012, by Thierry Vignaud + +- drop support for squashfs3 +- enable rescue through serial line (mga#2052) +- fix mounting / (mga#3327) +- fix mounting / on LV +- fix mounting / on soft RAID or crypted LV (mga#3778 & mga#448) +- include xz for xz modules +- mount /proc in chroot +- only consider fstab from the selected fs +- switch to udev + +Version 1.28 - 15 January 2012, by Thierry Vignaud + +- use init from drakx-installer-sysvinit instead of system one + +Version 1.27 - 28 October 2011, by Thomas "tmb" Backlund + +- clean up genpasswd (AL13N) +- add gdisk for GPT partitioning support (#1023) + +Version 1.26 - 24 October 2011, by Thomas "tmb" Backlund + +- add dropbear ssh support to rescue mode (AL13N, mga #1023) +  * add screen, dropbear, dropbearkey, genpasswd and startssh +  * add /etc/shells +- add partprobe tool from parted (9k) + +Version 1.25.1 - 05 August 2011, by Thierry Vignaud + +- fix build with perl-5.14 + +Version 1.25 - 05 August 2011, by Thierry Vignaud + +- add missing libfuse.so.2 for mount.ntfs-3g (#1189) +- prefer Mageia root partitions over Mdv ones (#1320) + +Version 1.24 - 20 May 2011, by tmb + +- devices.pl: call mknod directly +- list.xml: add btrfs tools to the image +- list.xml: fix XSLoader path + +Version 1.23 - 06 April 2011, by Dmorgan + +- Fix function names ( Bug #651 ) + +Version 1.22 - 24 February 2011, by Pascal "pterjan" Terjan + +- cleaning for Mageia import +- include /etc/netconfig (needed by mount.nfs) + +Version 1.18 - 13 April 2010, by Olivier "blino" Blin + +- image restore script: use blkid instead of deprecated vol_id + +Version 1.17 - 12 April 2010, by Olivier "blino" Blin + +- Handle LVM (#44723) +- image restore script: handle hybrid images (by matching main device) + +Version 1.16 - 9 October 2009, by Olivier "blino" Blin + +- work both with squashfs 3 and 4 +- image restore script (from Paulo Ricardo Zanoni): +  o re-read partition table after writing image +  o do not extend / to the end of the disk, it overlaps with swap +    partition +- do not make de-latin1 keymap a symlink/include loop (#45109) +- use extipl from /usr/lib/extipl on x86_64 too +  (to fix restore_ms_boot, hardcoding this path) + +Version 1.15 - 3 September 2009, by Thierry Vignaud + +- add back dumpe2fs +- run /oem-rescue.sh if oem option is present on cmdline +- allow to specify main partition in the restore config file +  (MAIN_PART_NUMBER), if there is a restore partition at beginning of +  disk +- load ext4 module (#48816) +- use blkid instead of vol_id which we no longer ship + +Version 1.14 - 27 May 2009, by Olivier "blino" Blin + +- adapt to new extipl location in x86_64 +- adapt to new magic.mgc location + +Version 1.13 - 27 May 2009, by Olivier "blino" Blin + +- include various commands +- image restore script: +  o better estimate of image dump progression +  o fix detecting multiple partitions to avoid win32 detection +  o fix guessing extension when filename contains a dot + +Version 1.12 - 20 February 2009, by Olivier "blino" Blin + +- image restore script: +  o add swap partition +  o use a minimum size for disks to be detected (Caio) +  o resize Windows partitions if needed (Caio) +- Flash rescue: +  o add support for Flash 2009 +  o try to load squashfs-lzma too +  o handle path to lzma distrib loopbacks +- fix build: +  o do not include dead parsehdlist +  o do not include dead rpm helpers + +Version 1.11 - 25 September 2008, by Olivier "blino" Blin + +- add image restoration scripts ("restore" command line parameter) + +Version 1.10 - 25 April 2008, by Olivier "blino" Blin + +- fix "Mounting other partitions from fstab" which use UUID=xxx +- fix build with latest file package, which only includes the +  precompiled magic file + +Version 1.9 - 10 March 2008, by Olivier "blino" Blin + +- handle ntfs-3g in fstab +- add missing modalias files (#38690) + +Version 1.8 - 28 February 2008, by Olivier "blino" Blin + +- support new modules location (#38207) +- adapt to perl 5.10 +- fix build (fix a workaround in partimage_whole_disk) + +Version 1.7 - 25 September 2007, by Pascal "Pixel" Rigaux + +- add mount.nfs binary (since mount doesn't handle nfs fs anymore) + +Version 1.6 - 8 August 2007, by Pascal "Pixel" Rigaux + +- adapt to new libldetect together with drakx-installer-images 1.13 +- loadkeys file: +  o handle new "kbd" rpm which have .map files instead of .kmap +  o don't skip fr_CH-latin1 +  o handle "fr_CH"-like short names +- remove rescuept (use testdisk instead, which is much nicer) + +Version 1.5 - 9 July 2007, by Pascal "Pixel" Rigaux + +- add /etc/mke2fs.conf in order to format ext3fs with 4k blocks (#27377) +- add "mkfs.ext3" which is no more equivalent to "mkfs.ext2 -J" +  (eg: dir_index & resize_inode features) + +Version 1.4 - 4 April 2007, by Pascal "Pixel" Rigaux + +- zcat and gunzip can't be symlinks anymore, they are scripts diff --git a/rescue/aliases b/rescue/aliases index eae42f0ce..ae924a86e 100644 --- a/rescue/aliases +++ b/rescue/aliases @@ -1,4 +1,9 @@ -/bin/zcat gzip -/bin/gunzip gzip -/bin/rpm /usr/bin/rpm-dynamic -/bin/vi vim-minimal +/bin usr/bin +/sbin usr/sbin +/lib usr/lib +/usr/bin/vi vim-minimal +/usr/sbin/init ../lib/systemd/systemd +/usr/lib/modules ../../modules +/usr/lib/systemd/system/default.target rescue.target +/usr/lib/systemd/system/rescue.target.wants/sockets.target ../sockets.target +/usr/lib/systemd/system/dbus-org.freedesktop.machine1.service systemd-machined.service diff --git a/rescue/bin/drvinst b/rescue/bin/drvinst new file mode 100755 index 000000000..4868b42e0 --- /dev/null +++ b/rescue/bin/drvinst @@ -0,0 +1,38 @@ +#!/usr/bin/perl +# +# Guillaume Cottenceau +# +# Copyright 2000-2005 Mandriva +# +# This software may be freely redistributed under the terms of the GNU +# public license. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +use lib qw(/usr/lib/libDrakX); +use common; +use detect_devices; + +$ARGV[0] =~ /^--?h/ and die "usage: drivers_install [drivertype1 [drivertype2 ...]]\n"; +my @types = @ARGV; + +sub install_module { +    my ($driver, $descr) = @_; +    print STDERR qq(Installing driver $driver (for "$descr")\n); +    system("/sbin/modprobe", $driver) and print "\tfailed\n"; +} + +#- start +foreach my $card (detect_devices::pci_probe()) { +    # ignoring "unknown", "Card:foobar" and the like as well as video cards: +    $card->{driver} eq 'unknown' || $card->{driver} =~ /:/ and next; +    $card->{media_type} eq "DISPLAY_VGA" and next; + +    # load drivers for selected categories or for everything if no args: +    if (!@ARGV || find { $card->{media_type} =~ /$_/i } @types) { +	install_module($card->{driver}, $card->{description}); +    } +} diff --git a/rescue/bin/guessmounts b/rescue/bin/guessmounts new file mode 100755 index 000000000..494f98f44 --- /dev/null +++ b/rescue/bin/guessmounts @@ -0,0 +1,168 @@ +#!/usr/bin/perl +# +# Guillaume Cottenceau +# +# Copyright 2001-2005 Mandriva +# +# This software may be freely redistributed under the terms of the GNU +# public license. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +use lib qw(/usr/lib/libDrakX); +use common; +use devices; +use fs; +use fs::dmcrypt; +use fs::proc_partitions; +use fs::type; +use lvm; +use run_program; + +my @proc_mounts = fs::read_fstab('', '/proc/mounts'); + +my $target = '/mnt'; + +if (fs::get::mntpoint2part($target, \@proc_mounts)) { +    print STDERR "$target is already mounted (according to /proc/mounts)\n"; +    exit 0; +} + +system('drvinst', 'STORAGE'); + +print STDERR "\nPlease wait, trying to find your root device...\n"; + +mkdir_p($target); + +{ +    local $::isInstall = 1; # so that detect_during_install() got called by init: +    lvm::init(); +} +fs::dmcrypt::init; + +my @parts = map { +    $_->{device} = delete $_->{dev}; +    put_in_hash($_, fs::type::type_subpart_from_magic($_));    +} fs::proc_partitions::read_raw(); + +# Basically doing fsedit::raids(): +my ($raid_parts, $normal_parts) = partition { isRawRAID($_) } @parts; + +if (@$raid_parts) { +    require raid; +    raid::detect_during_install(@$raid_parts); +    my $raids = raid::get_existing(@$raid_parts); +    push @$normal_parts, @$raids; +} + +# Basically doing fsedit::dmcrypts(): +(my $luks_parts, $normal_parts) = partition { isRawLUKS($_) } @$normal_parts; +if (@$luks_parts) { +    use interactive; +    use interactive::curses; +    require diskdrake::interactive; +    my $in = interactive->vnew('su'); +    my $all_hds = fsedit::get_hds({}, $in); +    # Unlocking them in order to look at their fs (do they hold a Mageia installation): +    foreach my $part (@$luks_parts) { +	diskdrake::interactive::dmcrypt_open($in, undef, $part, $all_hds); +    } +    my @dmcrypts = fs::dmcrypt::get_existing(@$luks_parts); +    push @$normal_parts, @dmcrypts; +} + +my @roots; + +my $arch = arch() =~ /i.86/ ? $MDK::Common::System::compat_arch{arch()} : arch(); +foreach (@$normal_parts) { +    my $dev = devices::make($_->{device}); + +    my $fs = $_->{fs_type}; +    member($fs, fs::type::true_local_fs_types()) or next; +    system("mount -t $fs $dev $target 2>/dev/null"); + +    if (my $release_file = common::release_file($target)) { +	my @fstab = fs::read_fstab($target, '/etc/fstab'); +	my $h = common::parse_release_file($target, $release_file, $_); +	add2hash($h, { dev => $dev,  fs => $fs, fstab => \@fstab, +		       pretty_name => "$h->{release} $h->{version} $h->{arch} on $dev" }); +	my $release = chomp_(cat_("$target$release_file")); +	printf STDERR "=> found a %s root partition on $dev\n=> type $fs, version `$release'\n", $h->{release}; +	# Offer to rescue only same arch: +	$h->{pretty_name} .= " (cannot be rescued: $h->{arch} ne $arch;)" if $h->{arch} ne $arch; +	push @roots, $h; +    } +    system('umount', $target) == 0 or die "error unmounting $target\n"; +} + +my ($root, $fs, @fstab); + +# Try Mageia first: +if (@roots) { +    # Order by release number: +    @roots = sort { $b->{version} cmp $a->{version} } @roots; +    # Then pick mga over mdv: +    @roots = map { @$_ } partition { $_->{release} =~ /Mageia/ } @roots; + +    my $selected; +    if (@roots == 1) { +        $selected = first(@roots); +    } else { +	print "\n\nWhich system do you want to rescue?\n0: Abort\n"; +	each_index { print $::i + 1, ": $_->{pretty_name}\n" } @roots; +	my $res; +	while ($res < 1 || $res > @roots) { +	    print "what is your choice (type the number of your selection or C^c to abort)?\n"; +	    $res = <>; +	    chomp($res); +	    if ($res eq "0") { +		print "Aborting\n"; +		exit(1); +	    } +	} +        $selected = $roots[$res-1]; +    } + +    $root = $selected->{dev}; +    $fs = $selected->{fs}; +    @fstab = @{$selected->{fstab}}; +    print STDERR "=> Selecting $root as root fs\n"; +} + +if ($root) { +    system("mount -t $fs $root $target 2>/dev/null"); + +    print STDERR "\nMounting other partitions from fstab on $target...\n"; +    foreach (@fstab) { +	my ($valued_options, $options) = fs::mount_options::unpack($_); + +	next if  +	  !$_->{fs_type} || $_->{device} eq 'none' +	    || $valued_options->{noauto} +	    || $_->{mntpoint} eq '/' +	    || member($_->{fs_type}, 'swap', 'nfs', 'ntfs', 'ntfs-3g'); + +	delete $valued_options->{'iocharset='}; +	delete $valued_options->{'codepage='}; +	fs::mount_options::pack($_, $valued_options, $options); #- vfat opts, we don't have the modules in rescue + +	my $where = "$target$_->{mntpoint}"; +	my $dev = fs::wild_device::from_part('', $_); +	mkdir_p($where); +	print STDERR "\t$dev on $where type $_->{fs_type} options $_->{options}\n"; +	system('mount', '-t', $_->{fs_type}, $dev, $where, '-o', $_->{options}); +    } +    system(qw(mount -t proc proc), "$target/proc"); +    foreach (qw(/dev /run)) { +	system('mount', '--bind', $_, "$target/$_"); +    } +    system(qw(mount -t sysfs sysfs), "$target/sys"); +    system(qw(mount -t efivarfs efivarfs), "$target/sys/firmware/efi/efivars") if is_uefi(); +    print STDERR "\nYour system is ready on $target.\n\n"; +} else { +    die "Could not find your root device :-(.\n"; +} + diff --git a/rescue/bin/install_bootloader b/rescue/bin/install_bootloader new file mode 100755 index 000000000..3eeb7a65e --- /dev/null +++ b/rescue/bin/install_bootloader @@ -0,0 +1,70 @@ +#!/usr/bin/perl +# +# Guillaume Cottenceau +# +# Copyright 2001-2005 Mandriva +# +# This software may be freely redistributed under the terms of the GNU +# public license. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +use lib qw(/usr/lib/libDrakX); +use common; +use bootloader; +use fs; + +my $auto; +if ($ARGV[0] eq '--auto') { +    $auto = shift @ARGV; +} + +$::prefix = '/mnt'; + +my $release = common::mageia_release($::prefix) ||  +  do { +      system('guessmounts') == 0 or die 'guessmounts failed'; +      common::mageia_release($::prefix); +  }; + +if ($release) { +    $release =~ /Mageia|Mandriva/ or die "release file doesn't contain '%s', exiting.\n"; +} elsif (fs::get::mntpoint2part($::prefix, [ fs::read_fstab('', '/proc/mounts') ])) { +    die "unknown distribution mounted in $::prefix\n"; +} else { +    die "Your root device isn't mounted on $::prefix\n"; +} + +my @main_methods = bootloader::configured_main_methods(); + +my $main_method; +if (@main_methods == 0) { +    die "Cannot find a configured boot loader\n"; +} elsif (@main_methods == 1) { +    ($main_method) = @main_methods; +} else { +    while (1) { +	print "Configuration files for Boot Loaders ", join(' and ', @main_methods), " were found.\n"; +	print "Which one one should be installed? "; +	chomp($main_method = <STDIN>); +	if (member($main_method, @main_methods)) { +	    last; +	} else { +	    print "bad choice\n"; +	} +    } +} + +my $install = $bootloader::{'install_raw_' . $main_method} or die "unknown bootloader method install_raw_$main_method\n"; + +print "About to re-install Boot Loader $main_method of following Mageia distribution:\n\t", +  $release, "\n"; +if (!$auto) { +    print "=> ok? <press Enter to continue, 'n' and Enter to cancel> "; +    <STDIN> =~ /^n/i and exit 0; +} + +$install->(); diff --git a/rescue/bin/lsparts b/rescue/bin/lsparts new file mode 100755 index 000000000..a1855a21e --- /dev/null +++ b/rescue/bin/lsparts @@ -0,0 +1,46 @@ +#!/usr/bin/perl +# +# Main author Pascal Rigaux (pixel) +# Put together by Guillaume Cottenceau +# +# Copyright 1999-2005 Mandriva +# +# This software may be freely redistributed under the terms of the GNU +# public license. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# Detects partition types using signatures +# + +use lib qw(/usr/lib/libDrakX); +use common; +use fs::type; +use fs::proc_partitions; + +my $params = join '', @ARGV; +my $verbose = $params =~ /-v/; + +$params =~ /-h/ and die "usage: lsparts [-v]\n"; + + +foreach (fs::proc_partitions::read_raw()) { +    if (my $err = $_->{size} <= 1 ? +	"Skipping <$_->{dev}> because too little blocks ($_->{size})" : +	  $_->{dev} !~ /\d$/ ? +	"Skipping <$_->{dev}> because doesn't end with a number (e.g. seems to not be a partition)" : +	  $_->{dev} =~ /^loop\d+$/ ? +	"Skipping <$_->{dev}>" : +	  '') { +	print STDERR "$err\n" if $verbose; +    } else { +	$_->{device} = $_->{dev}; +	local $::isStandalone = 1; # silent run_program +	if (my $type = fs::type::type_subpart_from_magic($_)) { +	    printf "$_->{dev}: %6s, fs %s (%s) [%s]\n", formatXiB($_->{size} * 1024), $type->{fs_type}, fs::type::part2type_name($type), $type->{device_LABEL}; +	} +    } +} diff --git a/rescue/rescue-doc b/rescue/bin/rescue-doc index 9b972b545..e6514b462 100755 --- a/rescue/rescue-doc +++ b/rescue/bin/rescue-doc @@ -1,6 +1,7 @@  #!/usr/bin/perl -sub output { my $f = shift; local *F; open F, ">$f" or die "output in file $f failed: $!\n"; print F foreach @_; } +# From MDK::Common: +sub output { my $f = shift; open(my $F, ">$f") or die "output in file $f failed: $!\n"; print $F $_ foreach @_ }  output('/tmp/rescue-doc-contents', q(       Information regarding problems not directly addressed @@ -13,15 +14,15 @@ problem?  The rescue system on this CD is a very basic text-based  environment for rescuing systems that no longer boot. You will  not find an easy-to-use graphical environment in this rescue -system, nor the Mandrake detection/configuration libraries. +system, nor the detection/configuration libraries.  The vast majority of problems that can affect a Linux system are  much easier to repair on a running system than by booting into  "rescue mode". In fact, there are very few problems which aren't  easier to resolve in the comfortable environment of a fully -installed Mandrakelinux system than in this spartan "rescue -system" shell. Some of the most common problems include: +installed system than in this spartan "rescue system" shell. +Some of the most common problems include:  - bad or missing X (video display) configuration  - adding/removing/reconfiguring hardware @@ -45,14 +46,9 @@ system is the right tool. Some common examples include:    just modify what's necessary to boot into a running system,    then complete the fix from there. -In case you have found a new problem which should be handled by -"rescue mode" but currently isn't, please report it to -<gc@mandrakesoft.com>. - -For more information on troubleshooting a Mandrakelinux system, +For more information on troubleshooting your system,  please consult the official manuals, the documentation on -MandrakeLinux.com, MandrakeUser.org, troubleshooting articles on -MandrakeForum.com, or the MandrakeExpert.com support forum. +wiki.mageia.org or support forum at forum.mageia.org.  <press 'q' (qwerty keyboard) to continue>  )); diff --git a/rescue/bin/restore_ms_boot b/rescue/bin/restore_ms_boot new file mode 100755 index 000000000..1f8cc2907 --- /dev/null +++ b/rescue/bin/restore_ms_boot @@ -0,0 +1,74 @@ +#!/usr/bin/perl +# +# Guillaume Cottenceau, Pixel +# +# Copyright 2002-2005 Mandriva +# +# This software may be freely redistributed under the terms of the GNU +# public license. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +use lib qw(/usr/lib/libDrakX); +use common; +use bootloader; +use fs; +use fs::proc_partitions; +use partition_table::raw; + + +my @choices = map { +    my $type = partition_table::raw::typeOfMBR($_->{dev}); +    if_($type && member($type, bootloader::main_method_choices()) , [ $_->{dev}, $type ]); +} fs::proc_partitions::read_raw(); + +my $choice; + +if (!@choices) { +    print "No known Linux bootloader has been found, nothing to do.\n"; +} elsif (@choices == 1) { +    print "I've found a Linux bootloader only on <$choices[0][0]>.\n\n"; +    $choice = $choices[0]; +} else { +    print "I've found the following Linux bootloaders:\n", +      (map_index { "\t" . $::i . ": <$_->[1]> \ton <$_->[0]>\n" } @choices), +      "\n", +      "Which disk/partition do you want to overwrite with the Windows bootloader?\n", +      "\t<enter the number or press 'n' and Enter to cancel> "; +    if (<STDIN> =~ /^(\d+)$/i && $1 >= 1) { +	$choice = $choices[$1 - 1]; +    } +} + +if ($choice) { +    print "I'm going to overwrite bootloader on <$choice->[0]> with +Windows bootloader. + +Ok? <press Enter to continue, 'n' and Enter to cancel> "; +    <STDIN> =~ /^n/i and exit 0; +     +    system('dd', 'if=/usr/lib/extipl/aldebaran.bin', "of=/dev/$choice->[0]") == 0  +      or print "\tFailed!\n"; +} + +#------------------------------------------------- +#- $Log$ +#- Revision 1.5  2005/06/13 04:33:50  prigaux +#- move functions using /proc/partitions out of fsedit to fs::proc_partitions +#- +#- Revision 1.4  2005/05/19 08:59:54  prigaux +#- rewrite using DrakX modules +#- +#- Revision 1.3  2005/04/19 12:49:39  prigaux +#- update copyright +#- +#- Revision 1.2  2004/07/20 02:42:12  prigaux +#- MandrakeSoft -> Mandrakesoft +#- +#- Revision 1.1  2002/02/27 13:31:30  gc +#- add "restore Windows Boot Loader" to rescue +#- +#- diff --git a/rescue/devices.pl b/rescue/devices.pl deleted file mode 100644 index 79308508a..000000000 --- a/rescue/devices.pl +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/perl - -@ARGV == 1 && chdir $ARGV[0] or die "usage: devices.pl <dir>\n"; - -if ($>) { $sudo = "sudo"; $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}"; } - -foreach (<DATA>) { -    chomp; -    my ($typ, $maj, $min, @l) = split; -    foreach (@l) { -	my @l2 = do { -	    if (my ($prefix, $ini, $end) = /(.*)(\d+)-(\d+)$/) { -		map { "$prefix$_" } $ini .. $end; -	    } else { -		$_; -	    } -	}; -	system("$sudo mknod $_ $typ $maj " . $min++) foreach @l2; -    } -} - -__DATA__ -c   5   1 console -b   2   0 fd0-1 -c   1   2 kmem -b   7   0 loop0-15 -c   1   1 mem -c   1   3 null -c   1   4 port -b   1   1 ram -b   1   0 ram0-19 -b   1   0 ramdisk -c   1   8 random -b  11   0 scd0-7 -c   0   0 stderr -c   0   0 stdin -c   0   0 stdout -c   5   0 tty -c   4   0 tty0-9 -c   4  64 ttyS0-3 -c   1   9 urandom -c   1   5 zero -b   3   0 hda hda1-16 -b   3  64 hdb hdb1-16 -b  22   0 hdc hdc1-16 -b  22  64 hdd hdd1-16 -b  33   0 hde hde1-16 -b  33  64 hdf hdf1-16 -b  34   0 hdg hdg1-16 -b  34  64 hdh hdh1-16 -b   8   0 sda sda1-15 sdb sdb1-15 sdc sdc1-15 sdd sdd1-15 sde sde1-15 sdf sdf1-15 sdg sdg1-15 sdh sdh1-15 -b   9   0 md0-15 -c  10 144 nvram -c   9   0 st0-15 diff --git a/rescue/dirs b/rescue/dirs index cb5d6a250..1b1153926 100644 --- a/rescue/dirs +++ b/rescue/dirs @@ -1,8 +1,9 @@ -/mnt/cdrom -/mnt/disk -/mnt/floppy -/lib +/dev +/proc +/run +/sys  /tmp +/usr/bin +/usr/sbin +/usr/lib/systemd/system/rescue.target.wants  /modules -/proc -/dev diff --git a/rescue/drvinst b/rescue/drvinst deleted file mode 100755 index e35038815..000000000 --- a/rescue/drvinst +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/perl - -# -# Guillaume Cottenceau (gc@mandrakesoft.com) -# -# Copyright 2000 Mandrakesoft -# -# This software may be freely redistributed under the terms of the GNU -# public license. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# - -local $_ = join '', @ARGV; - -"@ARGV" =~ /-h/ and die "usage: drivers_install [drivertype1 drivertype2..]\n"; - - -sub pci_probe { -    my @l; -    foreach (`/usr/bin/lspcidrake -v`) { -	push @l, do { -	    if (/^(\S+)\s*: (.+) \[([^\]]+)/) { -		{ driver => $1,  description => $2, type => $3 }; -	    } elsif (/^(\S+)\s*: (.+)/) { -		{ driver => $1,  description => $2, type => 'NOT_DEFINED' }; -	    } else { -		next; -	    } -	}; -    } -    @l; -} - -sub install_module($$) { -    my ($driver, $descr) = @_; -    print "Installing driver $driver (for \"$descr\")\n"; -    system("/sbin/modprobe", $driver) and print "\tfailed\n"; -    my $already_usb if 0; -    if (!$already_usb && $driver =~ /usb/) { -	$already_usb = 1; -	print "Installing driver usbkdb\n"; -	system('/sbin/modprobe', 'usbkbd') and print "\tfailed\n"; -	print "Installing driver keybdev\n"; -	system('/sbin/modprobe', 'keybdev') and print "\tfailed\n"; -    } -} - - -#- start -foreach $card (pci_probe()) { -    $card->{type} eq "DISPLAY_VGA" and next; -    $card->{driver} eq "unknown" and next; -    $card->{driver} =~ "Card:" and next; - -    if (!@ARGV || grep { $card->{type} =~ /$_/i } @ARGV) { -	install_module($card->{driver}, $card->{description}); -    } -} - - - -#------------------------------------------------- -#- $Log$ -#- Revision 1.7  2004/07/20 02:42:12  prigaux -#- MandrakeSoft -> Mandrakesoft -#- -#- Revision 1.6  2002/09/10 10:07:23  gc -#- drvinst <param> is broken when we don't -v -#- -#- Revision 1.5  2001/09/27 16:00:05  gc -#- don't install usb keyboard drivers more than once -#- -#- Revision 1.4  2001/09/27 15:57:55  gc -#- try to fix usb keyboards -#- -#- Revision 1.3  2001/03/29 11:33:28  gc -#- test for "Card:" and not install, some videoboards are not reported as DISPLAY_VGA :-( -#- -#- Revision 1.2  2001/02/12 18:42:17  uid553 -#- pixelization -#- -#- Revision 1.1  2001/02/12 14:31:10  uid535 -#- - add lspci, lspcidrake, vim-minimal -#- - better /etc/issue -#- - better PS1 -#- - write embryonic tool (installation of detected drivers according to pci cards) -#- diff --git a/rescue/guessmounts b/rescue/guessmounts deleted file mode 100755 index cce1d5d35..000000000 --- a/rescue/guessmounts +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/perl -# -# Guillaume Cottenceau (gc@mandrakesoft.com) -# -# Copyright 2001 Mandrakesoft -# -# This software may be freely redistributed under the terms of the GNU -# public license. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# - - -sub cat_ { local *F; open F, $_[0] or return; my @l = <F>; wantarray() ? @l : join '', @l } -sub chomp_ { my @l = map { my $l = $_; chomp $l; $l } @_; wantarray() ? @l : $l[0] } - - -my @mounts = cat_('/proc/mounts'); -grep { (split)[1] =~ m|^/mnt$| } @mounts and print("/mnt is already mounted (according to /proc/mounts)\n"), exit 0; - - -system('drvinst'); #- class2text seems broken, I can't detect easily only modules for SCSI storage :-( - -print "\nPlease wait, trying to find your root device...\n"; - -my $target = '/mnt'; --d $target || mkdir($target) or die "couldn't create $target\n"; - - -my (undef, undef, @parts) = cat_('/proc/partitions'); - -my @fstab; -my $root; - -M: foreach (@parts) { -    my $dev = (split)[3] or next; -    $dev = "/dev/$dev"; - -    foreach my $fs ('ext3', 'ext2', 'reiserfs', 'xfs', 'jfs') { -	my $where = $target; -	if (!system("mount -t $fs $dev $where 2>/dev/null")) { -	    if (-r "$where/etc/fstab" && -r "$where/etc/mandrake-release") { -		print "=> found a Mandrake root partition on $dev\n=> type $fs, version `", -		      chomp_(cat_ "$where/etc/mandrake-release"), -		      "'\n"; -		@fstab = cat_("$where/etc/fstab"); -		$root = $dev; -		last M; -	    } else { -		system('umount', $where) and die "error unmounting $where\n"; -	    } -	    last; -	} -    } -} - -if ($root) { -    print "\nMounting other partitions from fstab on $target...\n"; -    foreach (@fstab) { -	next if /^\s*#/; -	my ($dev, $where, $type, $opts) = split; -	next if (!$type || $dev eq 'none' || $opts =~ /noauto/ || -                 $type =~ /^(supermount|swap|nfs)$/ || -                 $where eq '/' || -                 $where =~ m,proc|cdrom|floppy|/mnt/zip, -		 ); -	$opts = join(',', grep { !/codepage=/ && !/iocharset/ } split(',', $opts)); #- vfat opts, we don't have the modules in rescue -	$where = "$target$where"; -	-d $where || mkdir($where) or die "couldn't create $where\n"; -	print "\t$dev on $where type $type\n"; -	system("mount -t $type $dev $where -o $opts"); -	system("cp -f /etc/mtab $target/etc/mtab"); #- to allow a nice chrooted "mount" or "df" -    } -    print "\nYour system is ready on $target.\n\n"; -} else { -    die "Could not find your root device :-(.\n"; -} - - - -#------------------------------------------------- -#- $Log$ -#- Revision 1.7  2004/07/20 02:42:12  prigaux -#- MandrakeSoft -> Mandrakesoft -#- -#- Revision 1.6  2003/08/03 21:50:06  prigaux -#- - copy /etc/mtab to /mnt/etc/mtab to have a nice chrooted "mount" or "df" -#- - some perl_checker compliance -#- -#- Revision 1.5  2001/11/05 17:03:54  gc -#- honours hash in /etc/fstab to disable lines -#- -#- Revision 1.4  2001/10/24 22:34:01  gc -#- - add a GUI to the rescue -#-   - provide guessmounts with better efficiency and output, go to console, and reboot -#-   - provide install_bootloader which runs lilo from /mnt if it seems safe -#- - add lsparts to rescue, which prints partitions with detected types -#- -#- Revision 1.3  2001/09/07 18:22:54  gc -#- ext3, xfs, jfs -#- -#- Revision 1.2  2001/06/10 22:41:21  prigaux -#- pixelization (tested!) -#- -#- Revision 1.1  2001/06/10 21:08:33  gc -#- - add 'guessmounts' that mimics RH's detecting of partitions when rescue starts -#- -#- diff --git a/rescue/install_bootloader b/rescue/install_bootloader deleted file mode 100755 index d49a04581..000000000 --- a/rescue/install_bootloader +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/perl -# -# Guillaume Cottenceau (gc@mandrakesoft.com) -# -# Copyright 2001 Mandrakesoft -# -# This software may be freely redistributed under the terms of the GNU -# public license. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# - - -sub cat_ { local *F; open F, $_[0] or $_[1] ? die "cat of file $_[0] failed: $!\n" : return; my @l = <F>; wantarray ? @l : join '', @l } -sub chomp_ { my @l = map { my $l = $_; chomp $l; $l } @_; wantarray ? @l : $l[0] } - -system('guessmounts') and die; - -#- this is dangerous, try to take care -my @mounts = cat_('/proc/mounts'); -grep { (split)[1] =~ m|^/mnt$| } @mounts or die "Your root device isn't mounted on /mnt (according to /proc/mounts)\n"; --x '/mnt/sbin/lilo' or die "/mnt/sbin/lilo isn't executable, exiting.\n"; --r '/mnt/etc/lilo.conf' or die "/mnt/etc/lilo.conf isn't readable, exiting.\n"; -my ($f) = grep { -f $_ } map { "/mnt/etc/$_" } 'mandrakelinux-release', 'mandrake-release'; -$f && cat_($f) =~ /Mandrake/ or die "$f doesn't contain 'Mandrake', exiting.\n"; - -print "About to re-install Boot Loader of following Mandrake distro:\n\t", -  chomp_(cat_ "/mnt/etc/mandrake-release"), -  "\n=> ok? <press Enter to continue, 'n' and Enter to cancel> "; -<STDIN> =~ /^n/i and exit 0; - -exec '/mnt/sbin/lilo', '-r', '/mnt'; - -die "error: couldn't exec /mnt/sbin/lilo.\n"; - - -#------------------------------------------------- -#- $Log$ -#- Revision 1.3  2004/09/28 06:24:30  prigaux -#- handle /etc/mandrakelinux-release -#- -#- Revision 1.2  2004/07/20 02:42:12  prigaux -#- MandrakeSoft -> Mandrakesoft -#- -#- Revision 1.1  2001/10/24 22:34:01  gc -#- - add a GUI to the rescue -#-   - provide guessmounts with better efficiency and output, go to console, and reboot -#-   - provide install_bootloader which runs lilo from /mnt if it seems safe -#- - add lsparts to rescue, which prints partitions with detected types -#- -#- -#- diff --git a/rescue/list b/rescue/list deleted file mode 100644 index 96c9fdb10..000000000 --- a/rescue/list +++ /dev/null @@ -1,144 +0,0 @@ -/bin/bash -/bin/cat -/bin/chmod -/bin/chown -/bin/cp -/bin/date -/bin/dd -/bin/df -/bin/dmesg -/bin/false -/bin/grep -/bin/gzip -/usr/bin/bzip2 -/usr/bin/bunzip2 -/usr/bin/bzcat -/usr/bin/packdrake -/usr/bin/parsehdlist -/bin/hostname -/bin/kill -/bin/ln -/usr/bin/du -/usr/lib/kbd -/bin/ls -/bin/mkdir -/bin/mknod -/bin/mount -/bin/mount -/bin/mv -/bin/ping -/bin/ps -/bin/pwd -/bin/rm -/bin/rmdir -/bin/setserial -/sbin/lsmod -/sbin/lsmod.old -/bin/cpio -/usr/bin/diff -/bin/sh -/bin/sleep -/bin/sync -/bin/touch -/bin/tar -/bin/true -/bin/umount -/etc/inputrc -/etc/termcap -/LIB/libnss_files-* -/LIB/libnss_files.so.2 -/sbin/badblocks -/sbin/debugfs -/sbin/e2fsck -/sbin/fdisk -/sbin/fsck.ext2 -/sbin/fsck.ext3 -/sbin/halt -/sbin/ifconfig -/sbin/init -/sbin/insmod -/sbin/insmod.old -/sbin/ldconfig -/sbin/mingetty -/sbin/mkdosfs -/sbin/mkfs.ext2 -/sbin/reboot -/sbin/rmmod -/sbin/rmmod.old -/sbin/shutdown -/usr/bin/strace -/sbin/route -/sbin/mkswap -/sbin/swapoff -/sbin/swapon -/sbin/tune2fs -/sbin/update -/usr/bin/cmp -/usr/bin/cut -/usr/bin/eject -/usr/bin/fdformat -/usr/bin/file -/usr/bin/find -/usr/bin/ftp -/usr/bin/head -/usr/bin/hexedit -/usr/bin/less -/usr/bin/less.bin -/usr/bin/loadkeys -/usr/bin/reset -/usr/bin/split -/usr/bin/tail -/usr/bin/tee -/usr/bin/telnet -/usr/bin/tset -/usr/sbin/chroot -/usr/sbin/parted -/usr/sbin/partimage -/usr/share/misc/file/magic -/usr/share/terminfo/l/linux -/var/run/utmp -/sbin/killall5 -/usr/bin/perl -/usr/bin/perl5 -/usr/bin/perlPERL_VERSION -/bin/sort -/usr/bin/md5sum -/etc/protocols -/etc/services -/bin/rpm -/sbin/mdadm -/sbin/lvm2 -/usr/lib/rpm/rpmrc -/usr/lib/rpm/macros -/usr/lib/rpm/rpmpopt-* -/usr/bin/rpm2cpio -/usr/bin/rpmdb -/usr/lib/rpm/rpmd -/usr/bin/rpme -/usr/lib/rpm/rpme -/usr/bin/rpmi -/usr/lib/rpm/rpmi -/usr/bin/rpmu -/usr/lib/rpm/rpmu -/usr/bin/rpmquery -/usr/lib/rpm/rpmq -/usr/bin/rpmverify -/usr/lib/rpm/rpmv -/usr/lib/perl5/PERL_VERSION/strict.pm -/usr/lib/perl5/PERL_VERSION/vars.pm -/usr/lib/perl5/PERL_VERSION/warnings/register.pm -/usr/lib/perl5/PERL_VERSION/warnings.pm -/usr/lib/perl5/PERL_VERSION/Carp.pm -/usr/lib/perl5/PERL_VERSION/Exporter.pm -/usr/lib/perl5/PERL_VERSION/*/CORE/libperl.so -/usr/lib/perl5/vendor_perl/*/packdrake.pm -/usr/bin/lspci -/usr/share/pci.ids -/usr/bin/lspcidrake -/usr/share/ldetect-lst/pcitable -/usr/share/ldetect-lst/usbtable -/bin/vim-minimal -/LIB/libnss_dns.so.2 -/LIB/libresolv.so.2 -/bin/mt -/sbin/stinit diff --git a/rescue/list.alpha b/rescue/list.alpha deleted file mode 100644 index af48e87a9..000000000 --- a/rescue/list.alpha +++ /dev/null @@ -1 +0,0 @@ -/sbin/sfdisk diff --git a/rescue/list.i386 b/rescue/list.i386 deleted file mode 100644 index 0f610c3e9..000000000 --- a/rescue/list.i386 +++ /dev/null @@ -1,13 +0,0 @@ -/usr/bin/gpart -/sbin/resize2fs -/sbin/resize_reiserfs -/sbin/rescuept -/usr/sbin/grub -/usr/sbin/grub-install -/sbin/reiserfsck -/sbin/fsck.jfs -/sbin/fsck.xfs -/sbin/xfs_repair -/sbin/sfdisk -/boot/grub/stage[12] -/usr/lib/extipl/aldebaran.bin diff --git a/rescue/list.ia64 b/rescue/list.ia64 deleted file mode 100644 index 42bb9b75b..000000000 --- a/rescue/list.ia64 +++ /dev/null @@ -1,7 +0,0 @@ -/sbin/resize2fs -/sbin/mkreiserfs -/sbin/reiserfsck -/usr/sbin/fsck.xfs -/usr/sbin/xfs_repair -/sbin/sfdisk -/usr/sbin/efibootmgr diff --git a/rescue/list.ppc b/rescue/list.ppc deleted file mode 100644 index f5709ca64..000000000 --- a/rescue/list.ppc +++ /dev/null @@ -1,13 +0,0 @@ -/sbin/resize2fs -/sbin/resize_reiserfs -/sbin/mkreiserfs -/sbin/reiserfsck -/sbin/xfs_repair -/sbin/pdisk -/usr/sbin/ybin -/usr/sbin/mkofboot -/usr/lib/yaboot/ofboot -/usr/lib/yaboot/yaboot -/usr/sbin/ofpath -/sbin/nvsetenv -/usr/bin/hformat diff --git a/rescue/list.sparc b/rescue/list.sparc deleted file mode 100644 index 2eff55cec..000000000 --- a/rescue/list.sparc +++ /dev/null @@ -1,2 +0,0 @@ -/sbin/silo -/sbin/sfdisk diff --git a/rescue/list.x86_64 b/rescue/list.x86_64 deleted file mode 100644 index 39ab2d0d7..000000000 --- a/rescue/list.x86_64 +++ /dev/null @@ -1,12 +0,0 @@ -/usr/bin/gpart -/sbin/resize2fs -/sbin/resize_reiserfs -/sbin/rescuept -/usr/sbin/grub -/usr/sbin/grub-install -/sbin/mkreiserfs -/sbin/reiserfsck -/sbin/fsck.xfs -/sbin/xfs_repair -/sbin/sfdisk -/boot/grub/stage[12] diff --git a/rescue/list.xml b/rescue/list.xml new file mode 100644 index 000000000..50656352e --- /dev/null +++ b/rescue/list.xml @@ -0,0 +1,482 @@ +<list no-arch-libraries="on"> + +<from expand="binary"> +  bash sh + +  false true +  pwd reset + +  ls +  cp ln mkdir mknod mv rm rmdir +  chmod chown +  dd touch + +  cat less +  tail head tee +  sort split cut +  grep + +  cmp diff +  find +  file md5sum + +  gzip zcat gunzip xz +  bzip2 bunzip2 bzcat + +  df du + +  packdrake +  cpio ftp tar +  rsync +  ssh scp +  telnet +  host + +  date +  dmesg +  chroot +  sleep +  sync + +  eject +  mount mount.nfs umount +  losetup + +  ldconfig +  mingetty agetty +  reboot halt shutdown +  kill ps strace +  sed tr +  strings + +  loadkeys tset stty + +  ping hostname ifconfig route + +  fdformat badblocks +  mkswap swapoff swapon +  e2fsck fsck.ext2 fsck.ext3 fsck.ext4 +  mke2fs mkfs.ext2 mkfs.ext3 mkfs.ext4 +  dumpe2fs tune2fs resize2fs debugfs + +  mkfs.reiserfs resize_reiserfs reiserfstune reiserfsck +  mkfs.xfs xfs_admin xfs_growfs xfs_repair fsck.xfs +  xfs_freeze xfs_io <!-- needed for setup grub on XFS formated / --> +  xfs_db <!-- needed by xfs_admin for setting UUID --> +  mkfs.ntfs mkdosfs dosfslabel mkntfs ntfsresize ntfslabel +  mkfs.nilfs2 nilfs-tune + +  mkfs.btrfs btrfs btrfsck fsck.btrfs btrfstune +  btrfs-map-logical btrfs-convert +  mkfs.f2fs fsck.f2fs resize.f2fs + +  dropbear dropbearkey +  screen + +  gdisk + +  <if ARCH="i.86|x86_64"> +    mkfs.jfs fsck.jfs jfs_tune +  </if> +  quotacheck +  cryptsetup dmsetup + +    fdisk gpart +    testdisk photorec + +    sfdisk +  +  dump dump.ext2 restore restore.ext2 dump.ext3 restore.ext3 dump.xfs restore.xfs +  parted partimage partprobe + +  udevadm + +  mdadm lvm2 +  <!-- symlinks --> +  lvconvert lvcreate lvchange lvdisplay lvextend lvmconfig lvmdiskscan lvmsadc lvmsar lvreduce lvremove lvrename lvresize lvs lvscan +  pvck pvcreate pvchange pvdisplay pvmove pvremove pvresize pvs pvscan +  vgcfgbackup vgcfgrestore vgck vgconvert vgcreate vgchange vgdisplay vgexport vgextend vgimport vgimportclone vgmerge vgmknodes vgreduce vgremove vgrename vgs vgscan vgsplit + +  mdmon kpartx +  dmevent_tool +  dmeventd +  <if ARCH="i.86|x86_64"> +    dmraid +  </if> + +  lsmod +  insmod +  rmmod +  modprobe + +  setserial +  mt stinit + +  lspci lspcidrake + +  rpm +  rpm2cpio rpmdb +  rpmquery rpmverify + +  vim-minimal hexedit + +  perl +  uniq +  wget + +  awk clear dialog wc +  setterm + +  <if ARCH="i.86|x86_64"> +    dmidecode  +  </if> + +  <if ARCH="i.86|x86_64"> +    grub grub-install +  </if> +  <if ARCH="x86_64"> +    efibootmgr  +  </if> +</from> + +<from> +  /usr/lib/kbd/keymaps/include +  <if ARCH="i.86|x86_64"> +    /usr/lib/kbd/keymaps/i386/include +    /usr/lib/kbd/keymaps/i386/azerty/be-latin1.map.gz <!-- this one is needed by be2-latin1 --> +  </if> +  /usr/share/misc/magic.mgc +  /usr/share/terminfo/l/linux +  /usr/share/terminfo/s/screen +  /usr/share/pci.ids + +  <from expand="glob"> +   /usr/LIB/ntfs-3g/* +  </from> + +  <if ARCH="i.86|x86_64">     +    <from dir="/lib/grub/ARCH-mageia" expand="glob"> +      stage1 +      stage2 +      *_stage1_5 +    </from> +    /usr/lib/extipl/aldebaran.bin +  </if> + +  <from expand="command"> +    perl -Mkeyboard -I/usr/lib/libDrakX -le 'print foreach keyboard::loadkeys_files()' +  </from> + +  <if set="LANGUAGE_fr_FR"> +    /usr/lib/gconv/gconv-modules +    /usr/lib/gconv/ISO8859-15.so +    /usr/share/locale/ISO-8859-15 +    /usr/share/locale/fr_FR +    /usr/share/locale/fr/LC_MESSAGES/partimage.mo +  </if> +  <if set="LANGUAGE_pt_BR"> +    /usr/lib/gconv/gconv-modules +    /usr/lib/gconv/ISO8859-15.so +    /usr/share/locale/ISO-8859-15 +    /usr/share/locale/pt_BR +    /usr/share/locale/pt/LC_MESSAGES/partimage.mo +  </if> +  <!-- needed by mlabel used during Flash upgrades --> +  /usr/lib/gconv/IBM850.so + + +  /sbin/mount.ntfs-3g <!-- can not be expanded as binary, not executable for all users --> +  /sbin/blkid +</from> + + +<from dir="/usr/LIB/device-mapper"> +  <from expand="glob">  +    *.so + </from> +</from> + +<from dir="/usr/lib/rpm" expand="glob"> +  <mode copy="keep-links"> +    rpmrc +    macros +    rpmpopt-* +  </mode> +</from> + +<filter subst="/^__END__/ and $_ = '', close ARGV"> +<from expand="main-perl"> +  AutoLoader.pm +  overload.pm   <!-- required by File::Temp --> +  strict.pm +  vars.pm +  warnings/register.pm +  warnings.pm +  Carp.pm +  Exporter.pm +  File/Path.pm +  File/Basename.pm +  File/Temp.pm   <!-- required by diskdrake::interactive --> +  XSLoader.pm +  Symbol.pm +  SelectSaver.pm +</from> + +<from expand="main-perl-bin"> +  re.pm +  Cwd.pm +  auto/Cwd/Cwd.so +  auto/POSIX/POSIX.so +  POSIX.pm +  lib.pm +  Socket.pm +  IO/Socket.pm +  IO.pm +  IO/Handle.pm +  Encode/Symbol.pm +  Encode/Unicode.pm +  auto/Encode/Unicode/Unicode.so +  DynaLoader.pm +  File/Spec.pm         <!-- required by File::Temp --> +  File/Spec/Unix.pm    <!-- required by File::Spec --> +  auto/IO/IO.so +  auto/Socket/Socket.so +  Errno.pm +  IO/Socket/INET.pm +  IO/Socket/UNIX.pm +  List/Util.pm         <!-- required by Scalar::Util --> +  auto/List/Util/Util.so +  Scalar/Util.pm       <!-- required by File::Temp --> +</from> + +<from expand="perl"> +  packdrake.pm +  MDV/Packdrakeng.pm +</from> +</filter> + +<from expand="rpm" matching="m!^/usr/(share|LIB)/perl5! and !/\.pod$/"> +  perl-Curses    <!-- required by Curses::UI --> +  perl-Curses-UI <!-- required by interactive::curses --> +</from> + +<from dir="/etc"> +  mke2fs.conf +  netconfig +  inputrc +  protocols +  services +  shells +  ssh/ssh_config +</from> + +<from dir="/usr/lib/systemd"> +  systemd +  systemd-executor +  systemd-fsck +  systemd-journald +  systemd-machined +  systemd-modules-load +  systemd-reply-password +  systemd-shutdown +  systemd-sysctl +  systemd-udevd +  systemd-vconsole-setup +  system-generators/systemd-fstab-generator +</from> + +<from dir="/usr/lib/systemd/network"> +  99-default.link +</from> + +<from dir="/usr/lib/systemd/system"> +  cryptsetup.target +  dbus.service +  dbus.socket +  emergency.target +  sysinit.target +  basic.target +  halt.target +  kexec.target +  local-fs.target +  local-fs-pre.target +  remote-fs.target +  remote-fs-pre.target +  network.target +  nss-lookup.target +  nss-user-lookup.target +  poweroff.target +  reboot.target +  rescue.target +  rpcbind.target +  shutdown.target +  final.target +  sigpwr.target +  sockets.target +  swap.target +  timers.target +  paths.target +  umount.target +  kmod-static-nodes.service +  systemd-tmpfiles-setup-dev.service +  systemd-ask-password-console.path +  systemd-udevd-control.socket +  systemd-udevd-kernel.socket +  systemd-ask-password-plymouth.path +  systemd-journald.socket +  systemd-ask-password-console.service +  systemd-modules-load.service +  systemd-halt.service +  systemd-poweroff.service +  systemd-reboot.service +  systemd-kexec.service +  systemd-fsck@.service +  systemd-udevd.service +  systemd-udev-trigger.service +  systemd-udev-settle.service +  systemd-ask-password-plymouth.service +  systemd-journald.service +  systemd-machined.service +  systemd-vconsole-setup.service + +  sysinit.target.wants/systemd-modules-load.service +  sysinit.target.wants/systemd-ask-password-console.path +  sysinit.target.wants/systemd-journald.service +  sockets.target.wants/dbus.socket +  sockets.target.wants/systemd-udevd-control.socket +  sockets.target.wants/systemd-udevd-kernel.socket +  sockets.target.wants/systemd-journald.socket +  sysinit.target.wants/systemd-udevd.service +  sysinit.target.wants/systemd-udev-trigger.service +  sysinit.target.wants/kmod-static-nodes.service +  sysinit.target.wants/systemd-tmpfiles-setup-dev.service + +  ctrl-alt-del.target +  syslog.socket + +  slices.target +</from> + +<from expand="binary"> +  journalctl systemctl echo swapoff systemd-cgls systemd-tmpfiles systemd-nspawn dbus-daemon machinectl +</from> + +<from> +  /etc/dbus-1/system.conf +  /usr/share/dbus-1/system.d/org.freedesktop.systemd1.conf +  /usr/share/dbus-1/system.d/org.freedesktop.machine1.conf +  /usr/share/dbus-1/system-services/org.freedesktop.systemd1.service +  /usr/share/dbus-1/system-services/org.freedesktop.machine1.service +</from> + +<from dir="/usr/lib/udev"> +  ata_id +  scsi_id +</from> + +<from dir="/usr/lib/udev/hwdb.d"> +  <from expand="glob"> +     *.hwdb +  </from> +</from> + +<from dir="/usr/lib/udev/rules.d"> +  10-dm.rules +  11-dm-lvm.rules +  13-dm-disk.rules +  50-udev-default.rules +  60-persistent-storage.rules +  63-md-raid-arrays.rules +  64-md-raid-assembly.rules +  75-net-description.rules +  80-drivers.rules +  80-net-setup-link.rules +  95-dm-notify.rules +</from> + + +<filter command="strip"> +  <!-- 32bit grub needs 32 bit loader --> +  <if ARCH="x86_64"> +    <from dir="/lib"> +      ld-linux*.so.2 +    </from> +  </if> +<from dir="/LIB"> +  libnss_files.so.2 +  libnss_dns.so.2 +  libresolv.so.2 +  ld-linux*.so.2 +  <!-- needed for mount.ntfs-3g --> +  libfuse.so.2 + +  <!-- needed by dmraid --> +  libdmraid-events-isw.so +</from> +</filter> + +<from dir="/usr/share/ldetect-lst" expand="glob"> +    *table.gz +    dkms-modules.alias fallback-modules.alias +</from> + +<from dir="/lib/module-init-tools"> +  ldetect-lst-modules.alias +</from> + +<filter command="../tools/simplify-drakx-modules"> +  <from dir="." expand="collect-perl-files /usr/lib/libDrakX /usr/lib/libDrakX"> +    <to dir="/usr"> +      bin/rescue-doc +      bin/drvinst +      bin/lsparts +      bin/guessmounts +      bin/install_bootloader +      <if ARCH="i.86|x86_64"> +        bin/restore_ms_boot +      </if> +    </to> +    <to dir="/usr"> +      sbin/partimage_whole_disk +    </to> +  </from> +  <!-- Those are listed b/c collect-perl-files failed to detect them: --> +  <from dir="/usr/lib/libDrakX" expand="glob"> +    interactive.pm <!-- required by diskdrake::interactive --> +    interactive/curses.pm <!-- required by interactive --> +    diskdrake/interactive.pm <!-- required by guessmount --> +    fs/dmraid.pm <!-- required by fsedit --> +    fs/remote.pm <!-- required by fs::remote::* --> +    fs/remote/davfs.pm <!-- required by fs --> +    fs/remote/smb.pm <!-- required by fs --> +    partition_table/*.pm <!-- required by partimage_whole_disk --> +    raid.pm <!-- required when needed in guessmounts --> +  </from> +</filter> + +<from dir="/usr/LIB/drakx-installer-binaries"> +  <to dir="/usr/bin"> +    rescue-gui +  </to> +  <to dir="/usr/sbin"> +    dhcp-client +  </to> +</from> +<if set="RESCUE_FLASH"> +  <from expand="binary"> +    dirname +    losetup +    mlabel +    nash +    pv +    sed +    usleep +  </from> +  <from dir="Flash/scripts" expand="glob"> +    <to dir="/usr/bin"> +      * +    </to> +  </from> +</if> + +</list> diff --git a/rescue/lsparts b/rescue/lsparts deleted file mode 100755 index 7dcc936eb..000000000 --- a/rescue/lsparts +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/perl -# -# Main author Pascal Rigaux (pixel@mandrakesoft.com) -# Put together by Guillaume Cottenceau (gc@mandrakesoft.com) -# -# Copyright 1999,2000,2001 Mandrakesoft -# -# This software may be freely redistributed under the terms of the GNU -# public license. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# -# -# This code is extracted from DrakX, the Mandrakelinux graphical installer. -#   http://www.mandrakelinux.com/drakx/ -# Open development rulz, find CVS here: -#   http://www.mandrakelinux.com/cgi-bin/cvsweb.cgi/gi/ -# -# Detects partition types using signatures -# - -sub cat_ { local *F; open F, $_[0] or $_[1] ? die "cat of file $_[0] failed: $!\n" : return; my @l = <F>; wantarray ? @l : join '', @l } - -sub arch() { -    my $t = `uname -m`; -    chomp $t; -    $t; -} - -# from Perl Cookbook / Pleac -# http://pleac.sourceforge.net/pleac_perl/numbers.html#AEN121 -sub commify { -    my $text = reverse $_[0]; -    $text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g; -    return scalar reverse $text; -} - -my @partitions_signatures = ( -    [ 0x8e, 0, "HM\1\0" ], -    [ 0x83, 0x438, "\x53\xEF" ], -    [ 0x183, 0x10034, "ReIsErFs" ], -    [ 0x183, 0x10034, "ReIsEr2Fs" ], -    [ 0x283, 0, 'XFSB', 0x200, 'XAGF', 0x400, 'XAGI' ], -    [ 0x383, 0x8000, 'JFS1' ], -    [ 0x82, 4086, "SWAP-SPACE" ], -    [ 0x82, 4086, "SWAPSPACE2" ], -    [ 0x7,  0x1FE, "\x55\xAA", 0x3, "NTFS" ], -    [ 0xc,  0x1FE, "\x55\xAA", 0x52, "FAT32" ], -arch() !~ /^sparc/ ? ( -    [ 0x6,  0x1FE, "\x55\xAA", 0x36, "FAT" ], -) : (), -); - -sub typeFromMagic { -    my $f = shift; -    local *F; sysopen F, $f, 0 or return; - -    my $tmp; -  M: foreach (@partitions_signatures) { -	my ($name, @l) = @$_; -	while (@l) { -	    my ($offset, $signature) = splice(@l, 0, 2); -	    sysseek(F, $offset, 0) or next M; -	    sysread(F, $tmp, length $signature); -	    $tmp eq $signature or next M; -	} -	return $name; -    } -    return -1; -} - -my %type2name = ( -		 0x1 => 'DOS 12-bit FAT', -		 0x4 => 'DOS 16-bit FAT (up to 32M)', -		 0x5 => 'DOS 3.3+ Extended Partition', -		 0x6 => 'DOS FAT16', -		 0x7 => 'NTFS (or HPFS)', -		 0xb => 'Win98 FAT32', -		 0xc => 'Win98 FAT32, LBA-mapped', -		 0xe => 'Win95: DOS 16-bit FAT, LBA-mapped', -		 0xf => 'Win95: Extended partition, LBA-mapped', -		 0x82 => 'Linux Swap', -		 0x83 => 'Ext2', -		 0x183 => 'ReiserFS', -		 0x283 => 'XFS', -		 0x383 => 'JFS', -		 0x85 => 'Linux extended partition', -		 0x87 => 'NTFS volume set', -		 0x8e => 'Linux LVM', -		 -1 => 'unknown' -		); - - -my $params = join '', @ARGV; - -$params =~ /-h/ and die "usage: lsparts [-v]\n"; -$params =~ /-v/ and $verbose = 1; - - -my (undef, undef, @parts) = cat_('/proc/partitions'); - -P: foreach (@parts) { -    my (undef, undef, $blocks, $dev) = split or next; -    my %skip_conditions = ( -			   "Skipping <$dev> because too little blocks ($blocks)" => ($blocks <= 1), -			   "Skipping <$dev> because doesn't end with a number (e.g. seems to not be a partition)" => ($dev !~ /\d$/), -			  ); -    $skip_conditions{$_} and ($verbose and print(STDERR $_, "\n")), next P foreach keys %skip_conditions; -    my $type = typeFromMagic("/dev/$dev"); -    $type and printf "$dev: %6s Mbytes, type <0x%0x> (%s)\n", commify($blocks >> 10), $type, $type2name{$type}; -} - - -#------------------------------------------------- -#- $Log$ -#- Revision 1.4  2004/07/20 02:42:12  prigaux -#- MandrakeSoft -> Mandrakesoft -#- -#- Revision 1.3  2004/07/19 04:09:06  prigaux -#- replace "Mandrake Linux" with "Mandrakelinux" -#- -#- Revision 1.2  2002/01/10 21:28:15  gc -#- better looking output of type of partition (%x => %0x) -#- -#- Revision 1.1  2001/10/24 22:34:01  gc -#- - add a GUI to the rescue -#-   - provide guessmounts with better efficiency and output, go to console, and reboot -#-   - provide install_bootloader which runs lilo from /mnt if it seems safe -#- - add lsparts to rescue, which prints partitions with detected types -#- -# diff --git a/rescue/make_flash_rescue b/rescue/make_flash_rescueBinary files differ new file mode 100755 index 000000000..2f7ce8584 --- /dev/null +++ b/rescue/make_flash_rescue diff --git a/rescue/make_partimage_save_rest_all b/rescue/make_partimage_save_rest_all new file mode 100755 index 000000000..929ffd2c1 --- /dev/null +++ b/rescue/make_partimage_save_rest_all @@ -0,0 +1,64 @@ +#!/bin/sh + +[ $# -lt 1 ] && {  +    echo "usage: make_partimage_save_rest_all <partimage server> [<partimage dir> <data dirs>]" ;  +    exit 1 +} + +server=$1 ; shift +partimage_dir=$1 ; shift +data_dir=$1 ; shift + +if [ -n "$partimage_dir" ]; then +    first_data_dir="$partimage_dir$data_dir" + +    [ -d "$first_data_dir" ] || { +	echo "can't find $first_data_dir" +	exit 1 +    } +    [ -r "$first_data_dir/lst" ] || { +	echo "can't read $first_data_dir/*" +	exit 1 +    } +fi + +rm -rf .tmp +mkdir -p .tmp/isolinux +cp -f /usr/lib/syslinux/isolinux.bin ../images/isolinux/alt0/* .tmp/isolinux + +DISTRIB_DESCR="partimage save/restore all" ./make_rescue_img || exit 1 +mkdir -p .tmp/install/stage2 +mv -f rescue.sqfs .tmp/install/stage2 + +common_para="rescue automatic=method:cdrom" +# hda=4864,255,63 acpi=ht + +for action in save_all rest_all; do + +    cat <<EOF > .tmp/isolinux/isolinux.cfg +default $action +prompt 1 +timeout 150 + +label save_all +  kernel vmlinuz +  append initrd=all.rdz $common_para save_all pserver=$server +label rest_all +  kernel vmlinuz +  append initrd=all.rdz $common_para rest_all keepmounted BOX=$data_dir pserver=$server +label rescue +  kernel vmlinuz +  append initrd=all.rdz $common_para +EOF + +    if [ $action = rest_all -a -n "$partimage_dir" ]; then +	dir=`dirname $data_dir` +	mkdir -p .tmp$dir +	ln -s $partimage_dir$data_dir .tmp$dir +    fi + +    genisoimage -f -o part_$action.iso -r -J -hide-rr-moved -nobak -cache-inodes -publisher Mageia -V 'part save/rest' -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .tmp     +    mkcd --addmd5 part_$action.iso +done +  +rm -rf .tmp diff --git a/rescue/make_rescue_img b/rescue/make_rescue_img index a3a946a12..8e3f64334 100755 --- a/rescue/make_rescue_img +++ b/rescue/make_rescue_img @@ -1,16 +1,13 @@  #!/usr/bin/perl  use MDK::Common; -use lib "../perl-install"; +use lib "/usr/lib/libDrakX";  use keyboard; -my $lib = (arch() =~ /x86_64/ ? "lib64" : "lib");  my $tmp = "/tmp/rescue_tmp"; -my $rescue = "rescue.clp"; +my $rescue = "rescue.sqfs"; -my $sudo = '';  if ($>) { -    $sudo = "sudo";      $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}";  } @@ -18,99 +15,53 @@ BEGIN { undef *_ }  sub __ { print @_, "\n"; system(@_) }  sub _ { __ @_; $? and die } -sub install_raw { -    s|^/|| foreach @_; -    _ "tar c -C / @_ | tar x -C $tmp" if @_; +my $arch = arch() =~ /i.86/ ? $MDK::Common::System::compat_arch{arch()} : arch(); +_ "rm -rf $tmp" if -e $tmp; +_ "mkdir -p $tmp"; +_ "cp -a tree/* $tmp"; +_ "find $tmp -name '*~' -delete"; +mkdir_p($tmp . chomp_($_)) foreach cat_("dirs"); +foreach (cat_("aliases")) { +    chomp; my ($f, $dest) = split; +    symlink $dest, "$tmp$f";  } -sub install_deref { -    s|^/|| foreach @_; -    _ "tar c -C / --dereference @_ | tar x -C $tmp" if @_; +if ($arch eq "x86_64") { +    _ "mkdir $tmp/usr/lib64"; +    _ "ln -s usr/lib64 $tmp/lib64";  } +substInFile { s/DISTRIB_DESCR/$ENV{DISTRIB_DESCR}/ } "$tmp/etc/issue"; -sub install_l { -    my @l = @_; - -    @l = uniq(map { chomp_($_) } @l); -    push @l,  -      `ldd @l 2>/dev/null | grep "=>" | perl -pe 's/.*=> //; s/ .*//; s,^/lib/.*?/,/lib/,'`; +_ "../tools/install-xml-file-list list.xml $tmp"; -    my ($deref, $raw) = partition { /lib.*\.so/ || readlink("/$_") =~ m|/etc/alternatives| } uniq(map { chomp_($_) } @l); -    install_raw(@$raw); -    install_deref(@$deref); -} - -sub installown($$) { -    my ($own, $dir) = @_; -    return if -e "$tmp$dir$own"; -    mkdir_p("$tmp$dir"); -    _ "cp -a $own $tmp$dir"; -} - -_ "$sudo rm -rf $tmp" if -e $tmp; -_ "mkdir $tmp"; -_ 'find . -name "*~" | xargs rm -f'; -foreach (cat_("dirs")) { -    chomp; -    mkdir_p("$tmp$_"); -} -_ "cp -a tree/* $tmp"; -_ "find $tmp -name 'CVS*' | xargs rm -rf"; -_ "perl devices.pl $tmp/dev"; +_ "sed 's/Mageia \\([0-9]*\\)/Mageia Rescue \\1/' /etc/os-release >$tmp/etc/os-release"; +_ "ls -1 $tmp/etc | sed 's,\\(.*\\),/etc/\\1,' >>$tmp/usr/share/symlinks"; +# Loading the floppy module causes this service to fail so lets mask this to +# prevent a red "FAILED" briefly showing on the screen +_ "sed -i s/ExecStart=/ExecStart=-/ $tmp/usr/lib/systemd/system/systemd-modules-load.service"; -install_raw(keyboard::loadkeys_files());  my %keytable_conflicts; -my @less_important_keytables = qw(am_old am_phonetic no-dvorak fr_CH-latin1); -foreach (keyboard::loadkeys_files()) { +my @less_important_keytables = qw(am_old am_phonetic no-dvorak de-latin1); +foreach (keyboard::loadkeys_files(sub { warn @_ })) {      my ($dir, $fname) = (dirname($_), basename($_)); -    my ($name) = $fname =~ /(.*)\.kmap\.gz/ or next; +    my ($name) = $fname =~ /(.*)\.map\.gz/ or next;      next if member($name, @less_important_keytables); -    if (my ($short) = $name =~ m|(.+?)[\W_]|) { +    if (my ($short2, $short) = $name =~ m|((.+?)[\W_][^\W_]*)|) { +	$keytable_conflicts{$short} && $short2 ne $name and $short = $short2;  	$keytable_conflicts{$short} and warn("conflict between $keytable_conflicts{$short} and $name for short name $short (choosing the first)\n"), next;  	$keytable_conflicts{$short} = $name;  	# create the short name based on the long one -	symlinkf($fname, "$tmp$dir/$short.kmap.gz"); +	symlinkf($fname, "$tmp$dir/$short.map.gz");      }  } -my $perl_version = join ".", unpack "C3", $^V; -my @bad; -my @files = map {  -    chomp; -    s/PERL_VERSION/$perl_version/g; -    s|/LIB/|/$lib/|g; -    my @l = glob($_) or push @bad, $_; -    m|\*.*/| && @l != 1 and die "multiple match for $_\n"; -    @l; -} (cat_("list"), cat_(`../tools/specific_arch list`)); -@bad and die "files missing\n" . join("\n", @bad) . "\n"; -install_l(@files); - -foreach (cat_("aliases")) { -    chomp; my ($f, $dest) = split; -    symlink $dest, "$tmp$f"; -} - --e "../kernel/all.kernels" or die "use ./update_kernel in gi/kernel first\n"; - -my $main = chomp_(`cat ../kernel/all.kernels/.main`); - -_ "cp ../kernel/all.kernels/$main/modules.{cz,dep} $tmp/modules"; - -installown("drvinst", "/usr/bin"); -installown("guessmounts", "/usr/bin"); -installown("install_bootloader", "/usr/bin"); -if (arch() =~ /^i.86/) { -    installown("restore_ms_boot", "/usr/bin"); +if (my ($LANGUAGE) = map { if_(/LANGUAGE_(.*)/, $1) } keys %ENV) { +    substInFile { +	$_ = "export LANGUAGE=$LANGUAGE\n" . "export LC_ALL=$LANGUAGE\n" if /^#LANGUAGE/;	 +    } "$tmp/usr/bin/mageia-rescue";  } -installown("lsparts", "/usr/bin"); -installown("rescue-doc", "/usr/bin"); -_ "cd ../mdk-stage1 && make rescue-gui"; -installown("../mdk-stage1/rescue-gui", "/usr/bin"); - -#- note that on biarch systems, we may need to have both /lib and /lib64 -__ "strip $tmp/{lib,$lib,bin,sbin}/* $tmp/usr/{bin,sbin}/* 2>/dev/null";  exit 0 if $ARGV[0]; -_ "mkisofs -quiet -D -R $tmp | create_compressed_fs - 65536 $rescue 200 2>/dev/null"; -_ "$sudo rm -rf $tmp"; +_ "mksquashfs $tmp $rescue -all-root -noappend >/dev/null"; +_ "chmod 755 $rescue"; +#_ "rm -rf $tmp"; diff --git a/rescue/restore_ms_boot b/rescue/restore_ms_boot deleted file mode 100755 index 69088a9d9..000000000 --- a/rescue/restore_ms_boot +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/perl -# -# Guillaume Cottenceau (gc@mandrakesoft.com) -# -# Copyright 2002 Mandrakesoft -# -# This software may be freely redistributed under the terms of the GNU -# public license. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# - -sub arch() { -    my $t = `uname -m`; -    chomp $t; -    $t; -} -sub if_($@) { -    my $b = shift; -    $b or return (); -    wantarray || @_ <= 1 or die("if_ called in scalar context with more than one argument " . join(":", caller())); -    wantarray ? @_ : $_[0]; -} -sub cat_ { local *F; open F, $_[0] or $_[1] ? die "cat of file $_[0] failed: $!\n" : return; my @l = <F>; wantarray ? @l : join '', @l } -sub member { my $e = shift; foreach (@_) { $e eq $_ and return 1 } 0 } - -@known_boot_loaders = qw(lilo grub yaboot); - -# keep this in sync with DrakX -@MBR_signatures = ( -    [ 'empty', 0, "\0\0\0\0" ], -    [ 'grub', 0x6,  "GRUB" ], -    [ 'grub', 0, "\xEBG", 0x17d, "stage1 \0" ], -    [ 'grub', 0, "\xEBH", 0x17e, "stage1 \0" ], -    [ 'grub', 0, "\xEBH", 0x18a, "stage1 \0" ], -    [ 'grub', 0, "\xEBH", 0x181, "GRUB \0" ], -    [ 'lilo', 0x2,  "LILO" ], -    [ 'lilo', 0x6,  "LILO" ], -if_(arch() =~ /ppc/, -    map { [ 'yaboot', 0, "PM", 0x200 * $_ + 0x10, "bootstrap\0" ] } 0 .. 61 -), -); - -sub typeFromMagic { -    my $f = shift; -    local *F; sysopen F, $f, 0 or return; - -    my $tmp; -  M: foreach (@MBR_signatures) { -	my ($name, @l) = @$_; -	while (@l) { -	    my ($offset, $signature) = splice(@l, 0, 2); -	    sysseek(F, $offset, 0) or next M; -	    sysread(F, $tmp, length $signature); -	    $tmp eq $signature or next M; -	} -	return $name; -    } -    return 0; -} - - -my (undef, undef, @parts) = cat_('/proc/partitions'); - -my @possibilities; - -P: foreach (@parts) { -    my (undef, undef, $blocks, $dev) = split or next; -    next if $blocks <= 1; -    my $type = typeFromMagic("/dev/$dev"); -    $type && member($type, @known_boot_loaders) and push @possibilities, [ $dev, $type ]; -} - -my $choice; - -if (!@possibilities) { -    print "No known Linux bootloader has been found, nothing to do.\n"; -} elsif (@possibilities == 1) { -    print "I've found a Linux bootloader only on </dev/$possibilities[0]->[0]>.\n\n"; -    $choice = $possibilities[0]; -} else { -    print "I've found the following Linux bootloaders:\n"; -    my $i; -    print "\t", ++$i, ": <$_->[1]> \ton <$_->[0]>\n" foreach @possibilities; -    print "\n"; -    print "Which disk/partition do you want to overwrite with the Windows bootloader?\n"; -    print "\t<enter the number or press 'n' and Enter to cancel> "; -    <STDIN> !~ /^(\d+)$/i && $1 >= 1 and $choice = $possibilities[$1-1]; -} - -if ($choice) { -    print "I'm going to overwrite bootloader on </dev/$choice->[0]> with -Windows bootloader. - -Ok? <press Enter to continue, 'n' and Enter to cancel> "; -    <STDIN> =~ /^n/i and exit 0; -     -    system("/bin/dd if=/usr/lib/extipl/aldebaran.bin of=/dev/$choice->[0]\n") and print "\tFailed!\n"; -} - -#------------------------------------------------- -#- $Log$ -#- Revision 1.2  2004/07/20 02:42:12  prigaux -#- MandrakeSoft -> Mandrakesoft -#- -#- Revision 1.1  2002/02/27 13:31:30  gc -#- add "restore Windows Boot Loader" to rescue -#- -#- diff --git a/rescue/sbin/partimage_whole_disk b/rescue/sbin/partimage_whole_disk new file mode 100755 index 000000000..ed0653a95 --- /dev/null +++ b/rescue/sbin/partimage_whole_disk @@ -0,0 +1,264 @@ +#!/usr/bin/perl + +use lib qw(/usr/lib/libDrakX); +use standalone; +use fsedit; +use fs::format; +use fs::type; +use resize_fat::main; +use diskdrake::resize_ntfs; +use diskdrake::resize_ext2; +use common; +use partition_table::empty; +use Carp::Heavy; + +my %options = ( +    save_home_directory => 1, +    empty_space_at_end_of_disk => 0, # 300 * 1024 * 2, # 300MB +    ask_before_modifying_home => 1, +    bzip2 => 1, +); + +my ($server); +if ($ARGV[0] eq '-s') { +    (undef, $server, @ARGV) = @ARGV; +}  +my $action = shift @ARGV; + +sub usage() { die "partimage_whole_disk [-s <server>] (save_all <dir> | rest_all <dir>)\n" } + +$ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}"; +$ENV{HOME} = '/'; +log::openLog("/var/log/partimage_whole_disk.log"); +my @partimage_cmd = ('partimage', if_($server, '-s', $server, '-n', '-L')); + +@ARGV == 1 or usage(); + +if ($server && !is_network_configured()) { +    run_program::run('drvinst', 'NETWORK');  +    run_program::run('dhcp-client'); +} + +run_program::run('drvinst', 'STORAGE_SCSI', 'STORAGE_IDE'); + +my $all_hds = fsedit::get_hds({}); + +if ($action eq 'save_all') { +    save_all($ARGV[0]); +} elsif ($action eq 'rest_all') { +    rest_all($ARGV[0]); +} + +sub save_all { +    my ($dir) = @_; + +    my $base_dir = $dir; +    for (my $i = 0; read_part_list($dir); $i++) { +	#- find a free dir +	$dir = sprintf("$base_dir.%03d", $i); +    } + +    my $hd = $all_hds->{hds}[0] or die "no main hard drive\n"; +    log::l("save_all on $hd->{device}"); +    my $part_list = [ partition_table::get_normal_parts($hd) ]; + +    foreach (@$part_list) { +	$_->{saved} = !member($_->{fs_type}, 'ntfs', 'ntfs-3g', 'vfat', 'swap'); +    } + +    if (!$options{save_home_directory}) { +	#- shrink and don't save the last ext3 partition (which is the /home partition) +	if (my $part = find { isTrueLocalFS($_) } reverse @$part_list) { +	    $part->{size} = min($part->{size}, 1024 * 1024 * 2); # not greater than 1GB +	    $part->{saved} = 0; +        } +    } + +    foreach (grep { $_->{saved} } @$part_list) { +	run_or_die(@partimage_cmd, +		   if_($options{bzip2}, '-z', 2), +		   '-V', 0, '--nombr', '--nodesc', '--nocheck', '-b', '-o', +		   'save', devices::make($_->{device}), "$dir/$_->{device}"); +    } +    save_part_list($dir, $hd->{geom}, $part_list); +} +sub rest_all { +    my ($dir) = @_; + +    my ($forced_geom, $part_list) = read_part_list($dir) or error("read_part_list $dir failed"); + +	(my $hd) = my @used_hds = uniq(map { +	    my $part = $_; +	    find { $part->{device} =~ /^\Q$_->{device}\E./ } fs::get::hds($all_hds)  +	      or error("can't find hard drive for partition $part->{device}"); +	} @$part_list); + +	@used_hds >= 1 or error("no matching hd"); +	@used_hds <= 1 or error("multiple hds: " . join(' ', map { $_->{device} } @used_hds)); + +	fs::type::set_fs_type($_, $_->{fs_type}) foreach @$part_list; +	put_in_hash($_, partition_table::hd2minimal_part($hd)) foreach @$part_list; + +	my ($from_partimage, $other) = partition { $_->{saved} } @$part_list; +	my ($from_resize, $created) = partition { member($_->{fs_type}, 'vfat', 'ntfs', 'ntfs-3g') } @$other; +	 +	my $total = sum(map { $_->{size} } @$part_list); +	if ($total > $hd->{totalsectors}) { +	    error("$dir doesn't fit: $total > $hd->{totalsectors}"); +	} + + +    foreach (@$from_resize) { +	#- resize first +	my $part = fs::get::device2part($_->{device}, [ fs::get::fstab($all_hds) ]); +	if (!$part) { +	    log::l("partition to resize is missing ($_->{device})"); +	    $_->{missing} = 1; +	    next; +	} +	if ($part->{fs_type} ne $_->{fs_type}) { +	    log::l("partition $_->{device} doesn't have the right filesystem ($part->{fs_type} != $_->{fs_type})"); +	    $_->{missing} = 1; +	    next; +	} + +	if (@$from_resize == 1) { +	    my $half_size = int($hd->{totalsectors} / 2) - 2 * $hd->cylinder_size; +	    my $suggested_total = $total - $_->{size} + $half_size; +	    log::l("resizing bigger? (size $_->{size}, half_size $half_size, total $total, suggested_total $suggested_total)"); +	    if ($half_size > $_->{size} && $suggested_total < $hd->{totalsectors}) { +		log::l("prefering to resize $_->{device} to size $half_size instead of $_->{size}"); +		$_->{size} = $half_size; +	    } +	} + +	$_->{start} = $part->{start}; +	if ($_->{size} < $part->{size}) { +	    log::l("resizing $_->{device} to $_->{size} (it is $part->{size})"); +	    my $resize_pkg = $_->{fs_type} eq 'vfat' ? 'resize_fat::main' : 'diskdrake::resize_ntfs'; +	    my $resize = $resize_pkg->new($_->{device}, devices::make($_->{device})); +	    $resize->resize($_->{size}); +	} else { +	    log::l("no need to resize, instead setting $_->{device}'s size to $part->{size} instead of $_->{size}"); +	    $_->{size} = $part->{size}; +	} +    } + +    put_in_hash($hd->{geom}, $forced_geom); +    log::l("totalsectors $hd->{totalsectors} heads $hd->{geom}{heads} sectors $hd->{geom}{sectors}"); +    partition_table::raw::compute_nb_cylinders($hd->{geom}, $hd->{totalsectors}); + +    #- grow the last ext3 partition +    if (my $part = find { isTrueLocalFS($_) } reverse @$part_list) { +	$part->{ratio} = 1; + +	if ($options{ask_before_modifying_home}) { +	    print "\nkeep existing /home? (Y/n) "; +	    if (<STDIN> !~ /n/i) { +		my $l = @$from_partimage > 1 ? $from_partimage : $created; +		#- it was meant to be restored or formatted +		my $p = pop @$l; +		log::l("keeping existing /home: removing $p->{device}"); +	    } +	} +    } + +    #- write the partition table +    partition_table::raw::zero_MBR($hd); +    foreach my $part (grep { $_->{rootDevice} eq $hd->{device} } @$part_list) { +	next if $part->{missing}; + +	my $hole = find { isEmpty($_) && $_->{size} >= $part->{size} } partition_table::get_normal_parts_and_holes($hd) or die "not enough room for $part->{device}"; +	$part->{start} = $hole->{start}; +	     +	log::l("handling $part->{device}"); +	my $extended = $part->{device} =~ /(\d+)$/ && $1 > 4 && $hd->hasExtended; + +	my %wanted_part = %$part; +	if ($part->{ratio}) { +	    $part->{size} = $hole->{size} - ($options{empty_space_at_end_of_disk} || 0); +	} else { +	    $part->{size} += $hd->{geom}{sectors} if $extended; +	    $part->{size} += $hd->cylinder_size if $part->{start} == 1; +	} +	log::l("adding $part->{device} with size $part->{size}"); +	partition_table::add($hd, $part, $extended ? 'Extended' : 'Primary'); +	foreach ('device', if_(!$part->{ratio}, 'size')) { +	    $part->{$_} eq $wanted_part{$_} or log::l("bad $_ for $part->{device}: $part->{$_} != $wanted_part{$_}"); +	} +    } +    partition_table::write($hd); + +    #- restore from partimage +    foreach (@$from_partimage) { +	run_or_die(@partimage_cmd, 'restore', '-b', devices::make($_->{device}), "$dir/$_->{device}"); + +	if ($_->{ratio}) { +	    my $resize = diskdrake::resize_ext2->new($_->{device}, devices::make($_->{device})); +	    $resize->resize($_->{size}); +	} +    } + +    foreach (@$created) { +	fs::format::part_raw($_, undef); +    } + +    run_program::run('guessmounts'); + +    if (my @missing = grep { $_->{missing} } @$part_list) { +	my $missing = join('|', map { quotemeta($_->{device}) } @missing); +	log::l("drop missing devices from fstab and lilo.conf: $missing"); +	$::prefix = '/mnt'; +	substInFile { $_ = '' if m!^/dev/($missing)\s! } "$::prefix/etc/fstab"; + +	my $match; +	substInFile {  +	    /^\S/ and $match = m!^other=/dev/($missing)$!;  +	    $_ = '' if $match; +	} "$::prefix/etc/lilo.conf"; +    } +     +    run_or_die('install_bootloader', '--auto'); + +    print "\n", "Your system is ready, press enter to reboot (Y/n) "; +    if (<STDIN> !~ /n/i) { +	run_program::run('reboot'); +    } +} + +sub lst_fields() { qw(device size fs_type saved) } +sub save_part_list { +    my ($dir, $geom, $part_list) = @_; +    my @l = map { join(' ', @$_{lst_fields()}) } @$part_list; +    log::l("save_part_list $dir: $_") foreach @l; +    my $partimage = join(' ', @partimage_cmd); +    open(my $F, "| $partimage -z0 -Bfoo=bar -o save_file $dir/lst"); +    print $F join("/", $geom->{heads}, $geom->{sectors}), "\n"; +    print $F "$_\n" foreach @l; +} +sub read_part_list { +    my ($dir) = @_; +    my $partimage = join(' ', @partimage_cmd); +    open(my $F, "$partimage -z0 -Bfoo=bar rest_file $dir/lst |"); +    my $geom_string = <$F> or return; +    my %geom; @geom{'heads', 'sectors'} = split('/', chomp_($geom_string)); +    my @l = chomp_(cat__($F)); +    log::l("read_part_list $dir: $_") foreach @l; +    \%geom, [ map { my %l; @l{lst_fields()} = split; \%l } @l ]; +} + +sub run_or_die { +    my (@l) = @_; +    run_program::raw({ timeout => 4 * 60 * 60 }, @l) or die join(' ', @l) . " failed\n"; +} + +sub error { +    my ($msg) = @_; +    log::l($msg); +    die "$msg\n"; +} + +sub is_network_configured() { +    my (undef, @l) = cat_('/proc/net/route'); +    find { /^(\S+)/ && $1 ne 'lo' } @l; +} diff --git a/rescue/tree/bin/insmod b/rescue/tree/bin/insmod deleted file mode 100755 index 49b298142..000000000 --- a/rescue/tree/bin/insmod +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -echo "Use modprobe instead" diff --git a/rescue/tree/etc/hostname b/rescue/tree/etc/hostname new file mode 100644 index 000000000..344f71bc8 --- /dev/null +++ b/rescue/tree/etc/hostname @@ -0,0 +1 @@ +rescue diff --git a/rescue/tree/etc/hosts b/rescue/tree/etc/hosts index a9bbdee7f..d02c36416 100644 --- a/rescue/tree/etc/hosts +++ b/rescue/tree/etc/hosts @@ -1 +1 @@ -127.0.0.1		mandrake-rescue +127.0.0.1		mageia-rescue diff --git a/rescue/tree/etc/inittab b/rescue/tree/etc/inittab deleted file mode 100644 index 0348c66f4..000000000 --- a/rescue/tree/etc/inittab +++ /dev/null @@ -1,14 +0,0 @@ -#Inittab for Mandrake Rescue Disk -#Author: Daouda Lo <daouda@mandrakesoft.com> -id:3:initdefault: - -si::sysinit:/etc/rc.sysinit -re:6:wait:/etc/rc.reboot -ca:12345:ctrlaltdel:/sbin/fakeshutdown - -1:12345:respawn:/bin/bash --login -2:23:respawn:/sbin/mingetty tty2 -3:23:respawn:/sbin/mingetty tty3 -4:23:respawn:/sbin/mingetty tty4 -5:23:respawn:/sbin/mingetty tty5 -6:23:respawn:/sbin/mingetty tty6 diff --git a/rescue/tree/etc/issue b/rescue/tree/etc/issue index 7dba2360b..11f9f3102 100644 --- a/rescue/tree/etc/issue +++ b/rescue/tree/etc/issue @@ -11,17 +11,20 @@  [1;30;44m       [40m [47m         [40m    [44m [40m[2[1;37;4[0m  [1;30;44m       [40m [47m         [40m    [30;44m [40m[2C[1;37;40m[0m  [1;30;44m      [40m [47m          [40m     [2C[1;37;40m[0m -[1;30;44m     [40m  [47m          [40m     [2C[1;37;40mMandrakelinux Rescue Disk[0m +[1;30;44m     [40m  [47m          [40m     [2C[1;37;40mMageia Linux Rescue Disk[0m  [1;30;44m     [43m   [30;47m        [43m   [40m   [2C[1;37;40m[0m  [1;30;44m   [43m     [47m        [43m    [40m  [2C  [1;30;44m [43m       [47m        [43m      [40m[2C  [1;30;44m [43m       [40m [47m      [40m [43m      [40m[2C  [0m[255D -Mandrakelinux release 10.2 +DISTRIB_DESCR  Use [1;33;40mloadkeys[0m to change your keyboard layout (eg: loadkeys fr)  Use [1;33;40mmodprobe[0m to load modules (eg: modprobe snd-card-fm801)  Use [1;33;40mdrvinst[0m to install drivers according to detected devices  Use [1;33;40mlsparts[0m to list your partitions with types +Use [1;33;40mstartssh[0m to start an ssh daemon +Use [1;33;40mrescue-gui[0m to go back to the rescue menu +Use [1;33;40mgrabjournallogs[0m to grab the last 24 hours of journal logs diff --git a/rescue/tree/etc/passwd b/rescue/tree/etc/passwd index 568451e4e..c0274a116 100644 --- a/rescue/tree/etc/passwd +++ b/rescue/tree/etc/passwd @@ -1,3 +1,2 @@ -root::0:0::/:/bin/bash -shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown -halt:*:7:0:halt:/sbin:/sbin/halt +root::0:0::/root:/bin/bash +messagebus:x:1:1::/:/sbin/nologin diff --git a/rescue/tree/etc/profile b/rescue/tree/etc/profile index 3b5ac21cc..17f0700dc 100644 --- a/rescue/tree/etc/profile +++ b/rescue/tree/etc/profile @@ -1,12 +1,12 @@  # /etc/profile -# (c) Mandrakesoft, Chmouel Boudjnah <chmouel@mandrakesoft.com> +# (c) Mandrakesoft, Chmouel Boudjnah <chmouel>  # System wide environment and startup programs  # Functions and aliases go in /etc/bashrc  PROFILE_LOADED=1 -export PATH=/usr/bin:/bin:/sbin:/usr/sbin:/usr/X11R6/bin +PATH=/usr/bin:/bin:/sbin:/usr/sbin:/mnt/sbin:/mnt/bin:/mnt/usr/sbin:/mnt/usr/bin  PS1="[root@rescue \w]\\$ "  ls () { /bin/ls --color=auto -F "$@";} diff --git a/rescue/tree/etc/rc.reboot b/rescue/tree/etc/rc.reboot deleted file mode 100755 index 0b67416f1..000000000 --- a/rescue/tree/etc/rc.reboot +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -sleep 1 -/sbin/killall5 -9 - -umount -a -f -t noproc - -reboot -i -d diff --git a/rescue/tree/etc/rc.sysinit b/rescue/tree/etc/rc.sysinit deleted file mode 100755 index 15643bfaf..000000000 --- a/rescue/tree/etc/rc.sysinit +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh - -action() { echo $1; shift; $*; } - -export PATH=/bin:/sbin:/usr/bin:/usr/sbin - -echo -e "\t\t\tWelcome to \\033[1;36mMandrake\\033[0;39m Linux" - -action "Remounting root filesystem in read-write mode" mount -n -o remount,rw / - -ln -s /tmp/stage2/etc/* /etc 2>/dev/null - -mkdir /proc -action "Mounting proc filesystem" mount -n -t proc /proc /proc - ->/etc/mtab -mount -f / -mount -f /proc - -#- free up stage1 memory -umount /stage1/proc/bus/usb /stage1/proc /stage1 - -# Set the hostname. -action "Setting hostname rescue" hostname rescue -echo rescue > /etc/HOSTNAME - -# Loads common modules ( no kerneld :( ) -echo "Loading additional modules..." -load() { modprobe $* 2>/dev/null; } -load ide-mod -load ide-probe -load ide-disk -load ide-cd -load floppy -load af_packet -load isofs -load vfat -load ext3 -load reiserfs -load xfs -load jfs -load loop -load sd_mod -load sr_mod - -/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 -/sbin/route add 127.0.0.1 lo - -grep -q noauto /proc/cmdline || drvinst SERIAL_USB - -if ! grep -q expert /proc/cmdline; then -    rescue-gui -fi diff --git a/rescue/tree/sbin/fakeshutdown b/rescue/tree/sbin/fakeshutdown deleted file mode 100755 index 3511020ff..000000000 --- a/rescue/tree/sbin/fakeshutdown +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/perl - -# -# Guillaume Cottenceau (gc@mandrakesoft.com) -# -# Copyright 2001 Mandrakesoft -# -# This software may be freely redistributed under the terms of the GNU -# public license. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# - -sub cat_ { local *F; open F, $_[0] or $_[1] ? die "cat of file $_[0] failed: $!\n" : return; my @l = <F>; wantarray ? @l : join '', @l } - -print "\n"; - - -#- try to umount as much as possible; uses Pixel's ultra optimized algo (let you guess how it works..) -print "Umounting:\n"; -my @mounts = cat_('/proc/mounts'); -my $something_moved; -do { -    $something_moved = 0; -    foreach (@mounts) { -	my $where = (split)[1]; -	next if $where eq '/'; #- ouch! umounting the ramdisk on / always succeeds, and makes it becoming ro :-( -	if (!system("umount $where 2>/dev/null")) { -	    print "\t$where\n"; -	    $something_moved++; -	} -    } -} while $something_moved; - - -#- shutdown with init -exec '/sbin/init', 6; diff --git a/rescue/tree/sbin/modprobe b/rescue/tree/sbin/modprobe deleted file mode 100755 index 774101d7c..000000000 --- a/rescue/tree/sbin/modprobe +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/perl - -sub cat_ { local *F; open F, $_[0] or $_[1] ? die "cat of file $_[0] failed: $!\n" : return; my @l = <F>; wantarray ? @l : join '', @l } - -sub read_already_loaded() { -    foreach (cat_("/proc/modules")) { -	my ($name) = split; -	$conf{$name}{loaded} = 1; -    } -} - -sub load_deps($) { -    my ($file) = @_; - -    local *F; -    open F, $file or log::l("error opening $file: $!"), return 0; -    foreach (<F>) { -	my ($f, $deps) = split ':'; -	push @{$deps{$f}}, split ' ', $deps; -    } -} - -my $module_extension = cat_('/proc/version') =~ /^Linux version 2.4/ ? '.o' : '.ko'; - -my %mappings = ("usb-ohci" => "ohci-hcd", -                "usb-uhci" => "uhci-hcd", -                "uhci" => "uhci-hcd", -                "printer" => "usblp", -                "bcm4400" => "b44", -                "3c559" => "3c359", -                "3c90x" => "3c59x", -                "dc395x_trm" => "dc395x", -                "audigy" => "snd-emu10k1"); -                                   -sub load { -    my ($name, @options) = @_; -    $name =~ s/\.k?o$//; - -    $name = $mappings{$name} || $name;  #- 2.4 -> 2.6 compat mappings - -    $conf{$name}{loaded} and return; -    eval { load($_, 'prereq') } foreach @{$deps{$name}}; - -    system("packdrake -x /modules/modules.cz* /tmp $name$module_extension"); -    -r "/tmp/$name$module_extension" or die "can't find module $name\n"; -    system("/sbin/insmod /tmp/$name$module_extension"); -    my $retval = $?; -    system("rm /tmp/$name$module_extension"); -    $retval and die("insmod $name failed"); -} - -!@ARGV || $ARGV[0] =~ /-h/ and die "usage: modprobe <module> [<options...>]\n"; - -read_already_loaded(); -load_deps("/modules/modules.dep"); -load(@ARGV); diff --git a/rescue/tree/bin/login b/rescue/tree/usr/bin/login index 4b2816926..4b2816926 100755 --- a/rescue/tree/bin/login +++ b/rescue/tree/usr/bin/login diff --git a/rescue/tree/usr/bin/mageia-rescue b/rescue/tree/usr/bin/mageia-rescue new file mode 100755 index 000000000..7d8bb5135 --- /dev/null +++ b/rescue/tree/usr/bin/mageia-rescue @@ -0,0 +1,42 @@ +#!/bin/sh + +# Uncomment for debugging: +# set -x + +systemctl start systemd-udevd +udevadm trigger --type=subsystems --action=add +udevadm trigger --type=devices --action=add + +# disable the weird echoprt in cooked mode for user interaction: +stty sane + +#LANGUAGE (filled by make_rescue_img) + +grep -q noauto /proc/cmdline || drvinst SERIAL_USB + +partimage_default_dir=/data/box +partimage_dir=`perl -lne 'print $1 if /BOX=(\S+)/' /proc/cmdline` +[ -z "$partimage_dir" ] && partimage_dir=$partimage_default_dir +partimage_server=`perl -lne 'print $1 if /\bpserver=(\S+)/' /proc/cmdline` + +LOOP="" +if grep -q save_all /proc/cmdline; then +    partimage_whole_disk -s $partimage_server save_all $partimage_default_dir +elif grep -q rest_all /proc/cmdline; then +    if [ -d /tmp/image$partimage_dir ]; then +        partimage_whole_disk rest_all /tmp/image$partimage_dir +    else +        partimage_whole_disk -s $partimage_server rest_all $partimage_dir +    fi +elif grep -q oem /proc/cmdline; then +    /tmp/image/oem-rescue.sh +elif grep -q restore /proc/cmdline; then +    /usr/sbin/restore-image.sh +elif ! grep -q expert /proc/cmdline; then +    rescue-gui && LOOP=y +fi + +while [ "$LOOP" ]; do +    bash --login +    rescue-gui +done diff --git a/rescue/tree/usr/lib/CVS. b/rescue/tree/usr/lib/CVS. deleted file mode 100644 index e69de29bb..000000000 --- a/rescue/tree/usr/lib/CVS. +++ /dev/null diff --git a/rescue/tree/usr/lib/modules-load.d/mageia-rescue.conf b/rescue/tree/usr/lib/modules-load.d/mageia-rescue.conf new file mode 100644 index 000000000..9d9850baf --- /dev/null +++ b/rescue/tree/usr/lib/modules-load.d/mageia-rescue.conf @@ -0,0 +1,8 @@ +ide-gd_mod +ide-cd_mod +floppy +af_packet +loop +fuse +sd_mod +sr_mod diff --git a/rescue/tree/usr/lib/restore-image-lib.sh b/rescue/tree/usr/lib/restore-image-lib.sh new file mode 100755 index 000000000..3451f7be5 --- /dev/null +++ b/rescue/tree/usr/lib/restore-image-lib.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +TITLE="%s Installer" +BACKTITLE="%s" +MIN_DISKSIZE=5000000 + +debug="/dev/null" + +function _msgbox() +{ +	dialog --timeout 60 --backtitle "$BACKTITLE" --title "$TITLE" --msgbox \ +		"$1" 0 0 + +	return $? +} + +function _infobox() +{ +	dialog --backtitle "$BACKTITLE" --title "$TITLE" --sleep 2 \ +		--infobox "$1" 0 0 + +	return $? +} + +function _yesno() +{ +	dialog --backtitle "$BACKTITLE" --title "$TITLE" \ +		--yes-label "Yes" --no-label "No" --yesno "$1" 0 0 + +	return $? +} + +function _mount() +{ +	mount $1 $2 > $debug 2>&1 + +	return $? +} + +function _umount() +{ +	umount $1 > $debug 2>&1 + +	return $? +} + +function _bind() +{ +	mount --bind $1 $2 > $debug 2>&1 + +	return $? +} + +function _eject() +{ +	eject $1 > $debug 2>&1 + +	return $? +} + +function _shutdown() +{ +	[ -e /tmp/no-shutdown ] && exit +	clear +	sync +	echo s > /proc/sysrq-trigger +	echo o > /proc/sysrq-trigger +	exit +} + +function _reboot() +{ +	[ -e /tmp/no-shutdown ] && exit +	clear +	sync +	echo s > /proc/sysrq-trigger +	echo b > /proc/sysrq-trigger +	exit +} + diff --git a/rescue/tree/usr/lib/systemd/system/rescue.service b/rescue/tree/usr/lib/systemd/system/rescue.service new file mode 100644 index 000000000..336e06c22 --- /dev/null +++ b/rescue/tree/usr/lib/systemd/system/rescue.service @@ -0,0 +1,20 @@ +[Unit] +Description=Mageia Rescue +DefaultDependencies=no +Conflicts=shutdown.target +After=sysinit.target plymouth-start.service +Before=shutdown.target + +[Service] +Environment=HOME=/ +WorkingDirectory=/ +ExecStartPre=-/bin/plymouth quit +ExecStart=/usr/bin/mageia-rescue +ExecStopPost=-/usr/bin/systemctl --fail --no-block reboot +Type=idle +StandardInput=tty-force +StandardOutput=inherit +StandardError=inherit +KillMode=process +IgnoreSIGPIPE=no +SendSIGHUP=yes diff --git a/rescue/tree/usr/lib/systemd/system/systemd-udevd.service.d/dracut-rules.conf b/rescue/tree/usr/lib/systemd/system/systemd-udevd.service.d/dracut-rules.conf new file mode 100644 index 000000000..b75df2e4e --- /dev/null +++ b/rescue/tree/usr/lib/systemd/system/systemd-udevd.service.d/dracut-rules.conf @@ -0,0 +1 @@ +ExecStartPre=-/usr/bin/rm -f /etc/udev/rules.d/10-console.rules diff --git a/rescue/tree/usr/sbin/diskdrake-resize b/rescue/tree/usr/sbin/diskdrake-resize new file mode 100755 index 000000000..88372aac7 --- /dev/null +++ b/rescue/tree/usr/sbin/diskdrake-resize @@ -0,0 +1,29 @@ +#!/usr/bin/perl + +use lib qw(/usr/lib/libDrakX); + +use devices; +use log; +use resize_fat::main; +use diskdrake::resize_ntfs; +use diskdrake::resize_ext2; + +my ($device, $fs_type, $size) = @ARGV +  or die "usage: $0 <device> <fs type> <size>\n"; + +my %fs_pkgs = ( +    vfat => 'resize_fat::main', +    ntfs => 'diskdrake::resize_ntfs', +    ext2 => 'diskdrake::resize_ext2', +    ext3 => 'diskdrake::resize_ext2', +    ext4 => 'diskdrake::resize_ext2', +); + +my $resize_pkg = $fs_pkgs{$fs_type} +  or die "no support for $fs_type type\n"; + +log::l("resizing $device to $size"); + +my $resize = $resize_pkg->new($device, devices::make($device)) +  or die "unable to initialize resize\n"; +$resize->resize($size); diff --git a/rescue/tree/usr/sbin/genpasswd b/rescue/tree/usr/sbin/genpasswd new file mode 100755 index 000000000..2f129673d --- /dev/null +++ b/rescue/tree/usr/sbin/genpasswd @@ -0,0 +1,13 @@ +#!/usr/bin/perl + +use strict; + +system "stty -echo"; +print STDERR "Give a password for ssh access: "; +chomp(my $word = <STDIN>); +print STDERR "\n"; +system "stty echo"; + +my @salt = ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64]; +print crypt($word, join('', @salt)); +print "\n"; diff --git a/rescue/tree/usr/sbin/grabjournallogs b/rescue/tree/usr/sbin/grabjournallogs new file mode 100755 index 000000000..ef2ea4a1d --- /dev/null +++ b/rescue/tree/usr/sbin/grabjournallogs @@ -0,0 +1,51 @@ +#!/bin/bash + +if ! mountpoint -q /mnt ; then +  echo "I do not seem to see a Mageia install mounted on /mnt. You need to mount it first!" >&2 +  exit 1 +fi + +if [ ! -f /mnt/etc/machine-id ]; then +  echo "Cannot find machine-id file (/mnt/etc/machine-id)" >&2 +  exit 1 +fi + +MID=$(cat /mnt/etc/machine-id) +echo +echo "Found machine-id: $MID" +if [ ! -d /mnt/var/log/journal/$MID ]; then +  echo "Cannot find journal log directory (/mnt/var/log/journal/<machine-id>)" >&2 +  exit 1 +fi + +TIMEFRAME=24 +if [ -n "$1" ]; then +  NEWTIMEFRAME=$(( 0 + $1 )) +  if [ $NEWTIMEFRAME -gt 0 ]; then +    TIMEFRAME=$NEWTIMEFRAME +  fi +fi +SINCE="$(LC_ALL=c date --date=$TIMEFRAME' hours ago' +'%F %T')" +echo "Will collect logs from the last $TIMEFRAME hour(s)" +echo "  NB give numeric argument to override capture period" + +TEMPFILE=$(mktemp /tmp/grabjournallogs.XXXXXX) +echo -n "Extracting logs... " +journalctl -D /mnt/var/log/journal/$MID --since "$SINCE" -o short >$TEMPFILE +echo "done" + +if [ $(cat $TEMPFILE | wc -l) -lt 2 ]; then +  rm -f $TEMPFILE +  echo >&2 +  echo "Cannot find any logs. Consider increasing the capture period by passing a" >&2 +  echo "numeric argument larger than $TIMEFRAME." >&2 +  exit 1 +fi + +echo -n "Compressing logs... " +cat $TEMPFILE | xz >/journallogs.xz +rm -f $TEMPFILE +echo "done" + +echo +echo "Your logs have been extracted to the file 'journallogs.xz'" diff --git a/rescue/tree/usr/sbin/restore-image.sh b/rescue/tree/usr/sbin/restore-image.sh new file mode 100755 index 000000000..f4f904f3f --- /dev/null +++ b/rescue/tree/usr/sbin/restore-image.sh @@ -0,0 +1,412 @@ +#!/bin/bash + +setterm -powersave off +setterm -blank 0 + +if [ -r ./restore-image-lib.sh ]; then +	. ./restore-image-lib.sh +elif [ -r /usr/lib/restore-image-lib.sh ]; then +	. /usr/lib/restore-image-lib.sh +fi + +export PATH="/sbin:/bin:/usr/sbin:/usr/bin" + +mnt_dir="/tmp/mnt" +restore_media="/tmp/media" +images_dir="$restore_media/images" +images="$images_dir/list" +images_config="$images_dir/config" +image="" +win32_part_dev= +win32_part_type= +win32_part_new_size= + +function read_config() +{ +    if [ -r "$images_config" ]; then +        . $images_config +    fi +} + +function image_list() +{ +	list=$(cat $images | awk -F',' \ +		'{ print $1 " " $2 " " $4 }') + +	echo $list +} + +function image_file() +{ +	country="$1" + +	file=$(grep ^$country $images | awk -F',' '{ print $3 }') + +	echo $file +} + +function welcome() +{ +	while true; do +		clear +		msg="\n       Welcome to $TITLE\n\ +\nThe following images were found, select one:\n " +		opcao=$(dialog --backtitle "$BACKTITLE" --title "$TITLE" \ +				--stdout --radiolist "$msg" 0 0 0 \ +				$(image_list)) + +		if [ "$?" != "0" ]; then +			_yesno "\nInterrupt installation?\n " +			if [ "$?" = "0" ]; then +				_shutdown +			fi +		else +			if [ -z "$opcao" ]; then +				continue +			else +				image=$(image_file $opcao) +				break +			fi +		fi +	done + +	# disable kernel messages in the console +	echo "1 4 1 7" > /proc/sys/kernel/printk +} + +function install_warning() +{ +	if [ -n "${win32_part_dev}" ]; then +	    warn_msg="Windows installation detected.\nWe will set it up as dual boot. \ +You may lose some data.\nPlease backup before proceeding." +	else +	    warn_msg="WARNING: This process will erase all data in this machine, \ +do you want to continue?" +	fi + +	clear +	_yesno "\n$warn_msg\n" +	if [ "$?" != "0" ]; then +		_shutdown +	fi +} + +function detect_root() +{ +	inst_source_dev=$(awk "\$2 == \"$restore_media\" { print \$1 }" /proc/mounts | sed -e 's/[0-9]$//') +	inst_source_dev=${inst_source_dev#/dev/} +	devices=$(grep "^ .*[^0-9]$" < /proc/partitions | grep -v ${inst_source_dev} | awk '$3 > '$MIN_DISKSIZE' { print $4,$3 }') + +	if [ -z "${devices}" ]; then +		exit 1 +	fi + +	devs_found=$(($(echo $devices | wc -w)/2)) + +	root_data=$(detect_win32 ${inst_source_dev}) + +	if [ -z "${root_data}" ]; then +		if [ "$devs_found" -gt "1" ]; then + 			if [ -n "${inst_source_dev}" ]; then + 				opcao=$(dialog --backtitle "$BACKTITLE" --title "$TITLE" --stdout --menu 'Choose one of the detected devices to restore to (check the blocks size column first):' 8 50 0 $devices ) + 				if [ "$?" != "0" ]; then + 					_yesno "\nInterrupt installation?\n " + 					if [ "$?" = "0" ]; then + 						_shutdown + 					fi + 				else + 					root_data=${opcao} + 				fi  + 			fi +		else +		    root_data=$(echo ${devices} | cut -d ' ' -f 1) +		fi +	fi +	 +	echo ${root_data} +} + +function detect_win32() +{ +	# from detect_root() +	skip_dev=${1} + +	# win32 detection won't handle complex layouts +	if [ $(fdisk -l | grep "^/dev/" | grep -v ${skip_dev} | wc -l) -gt 1 ]; then +		exit +	fi + +	# get the last created windows partition information +	set -f +	device=$(fdisk -l | grep "^/dev/" | grep -v ${skip_dev} | grep -e "FAT\|NTFS\|HPFS" | tail -1 | sed 's/ .*$//') +	set +f + +	if [ -z "${device}" ]; then +		exit +	fi + +	# it might be needed, for safety +	device_type=$(blkid -o value -s TYPE ${device}) +	modprobe ${device_type} + +	# df for that partition +	mount ${device} /mnt +	size=$(df ${device} | tail -1)  +	umount /mnt + +	# its diskspace +	used=$(echo ${size} | awk '{ print $3 }') +	left=$(echo ${size} | awk '{ print $4 }') +	avail=$((${left}/2)) + +	if [ ! ${avail} -lt ${MIN_DISKSIZE} ]; then +		win32_part_dev=${device} +		win32_part_type=${device_type} +		# our install takes half of 'left' +		win32_part_new_size=$((${used}+${avail})) + +		dev=${win32_part_dev#/dev/} +		disk=${dev%[0-9]} +		number=${dev#[a-w][a-w][a-w]} +		let number++ +		echo ${disk}${number} ${win32_part_dev} ${win32_part_type} ${win32_part_new_size} +	fi +} + +function resize_win32() +{ +	device=${1} +	device_type=${2} +	new_win32_size=${3} + +	dialog --backtitle "$BACKTITLE" --title "$TITLE" --infobox "\nResizing Windows partition...\n" 4 55 + +	dev=${device#/dev/} +	disk=${dev%[0-9]} +	win32_number=${dev#[a-w][a-w][a-w]} + +	case ${device_type} in +		vfat) device_id=b  ;; +		ntfs) device_id=7  ;; +		hpfs) device_id=87 ;; +	esac + +	# wrapper around libdrakx by blino +	diskdrake-resize ${device} ${device_type} $((${new_win32_size}*2)) &>/dev/null + +	# we need some free sector here, rebuilding layout +	fdisk /dev/${disk} &>/dev/null <<EOF +d +n +p +${win32_number} + ++${new_win32_size}K +t +${device_id} +a +${win32_number} +w +EOF +	# adds linux partition to the end of the working disk +	fdisk /dev/${disk} &>/dev/null <<EOF +n +p +$((${win32_number}+1)) + ++${MIN_DISKSIZE}K +t +$((${win32_number}+1)) +83 +w +EOF +} + +function detect_device() +{ +	dialog --backtitle "$BACKTITLE" --title "$TITLE" --infobox "\nTrying to detect your root partition and disk...\n" 4 55 + +	root_data=$(detect_root) +	if [ -z "${root_data}" ]; then +        	_msgbox "\nError writing image: disk device not detected.\n" +		# so that netbooks using USB sticks as disks can retry (like Gdium) +		welcome +		root_data=$(detect_root) +	fi +	set ${root_data} +	root=$1 +	win32_part_dev=$2 +	win32_part_type=$3 +	win32_part_new_size=$4 +} + +function write_image() +{ +	if [ -n "${win32_part_dev}" ]; then +		resize_win32 ${win32_part_dev} ${win32_part_type} ${win32_part_new_size} +	fi +	 +	image=$(cat $images_dir/list | cut -d ',' -f 3) +	extension=${image/*./} +	imagesize=$(ls -l $images_dir/$image | awk '{ print $5 }') +	case $extension in +		gz) +			uncomp=zcat +			total=$(gzip -l $images_dir/$image | tail -n 1 | awk '{ print $2 }') +			;; +		bz2) +			uncomp=bzcat +			total=$((imagesize * 3)) +			;; +		*) +			uncomp=cat +			total=$imagesize +			;; +	esac + +	skipstart=/bin/true +	if [ -n "$win32_part_dev" ]; then +		skipstart='dd of=/dev/null bs=1 count=32256' +	fi + +	# the actual dumping command, from image to disk +	${uncomp} ${images_dir}/${image} | (${skipstart} &>/dev/null; dd bs=4M of=/dev/${root} >/tmp/backup.out 2>&1>>/tmp/log) & + +	sleep 3 +	pid=$(ps ax | grep 'dd bs=4M of' | grep -v grep | awk '{ print $1 }') + +	while [ true ]; do +		ps | grep -q $pid +		if [ $? -eq 0 ]; then +			/bin/kill -SIGUSR1 $pid +			complete=$(tail -n 1 /tmp/backup.out | awk '{ print $1 }') +			echo $((complete*100/total)) +			sleep 1 +		else +			break +		fi +	done | dialog --backtitle "$BACKTITLE" --title "$TITLE" --gauge "\nWriting image..." 8 45 + +	in=$(tail -n 3 /tmp/backup.out | grep 'in$' | cut -d' ' -f1) +	out=$(tail -n 3 /tmp/backup.out | grep 'out$' | cut -d' ' -f1) + +	if [ x"$in" != x"$out" ]; then +		_msgbox "\nError writing image!\n" +		sleep 24h +	fi + +	# Now re-read the partition table because 'dd' might have changed it +    	sfdisk -R /dev/${root} +} + +function grub_setup() +{ +		root=${1} +		grub_dir=${2} + +		# install the bootloader +		grub <<EOF +device (hd0) /dev/${root%[0-9]} +root (hd0,1) +setup (hd0) +quit +EOF +		# change the partition order and boot timeout accordingly +		sed -i 's/(hd0,0)/(hd0,1)/g;/^timeout/s/$/0/' ${grub_dir}/menu.lst + +		# dualboot configuration for grub +		cat >> ${grub_dir}/menu.lst <<EOF +title Microsoft Windows +root (hd0,0) +makeactive +rootnoverify(hd0,0) +chainloader +1 +EOF +} + +function expand_fs() +{ +	if [ -z "$win32_part_dev" ]; then +		if [ -n "$MAIN_PART_NUMBER" ]; then +			part_number=$MAIN_PART_NUMBER +		else +			part_number=1 +		fi +		root=${root%[0-9]}$part_number +	fi +	filesystem_type=$(dumpe2fs -h /dev/${root} 2>/dev/null| grep "Filesystem OS type" | awk '{ print $4 }') +	if [ "${filesystem_type}" = "Linux" ]; then +                dialog --backtitle "$BACKTITLE" --title "$TITLE" --infobox "Finishing Install... Expanding ${root}" 3 40 +		disk=/dev/${root%[0-9]} +		main_part=/dev/${root} + +		# FIXME: absurdly dirty hack +		main_part_num=${root:3} +		swap_part_num=$((main_part_num+1)) +		swap_part=${disk}${swap_part_num} + +		main_part_sectors= +		if [ -n "$SWAP_BLOCKS" ]; then +		    if [ -n "$EXPAND_FS" ]; then +			total_blocks=$(sfdisk -s $disk) +			main_part_blocks=$((total_blocks-SWAP_BLOCKS)) +			main_part_sectors=$((main_part_blocks*2)) +		    else +	                main_part_sectors=$(sfdisk -d $disk | perl -lne 'm|^'$main_part'\b.*,\s*size\s*=\s*(\d+)\b| and print($1), exit') +		    fi +		fi +		if [ -n "$SWAP_BLOCKS" ]; then +		    parted $disk -- mkpartfs primary linux-swap ${main_part_sectors}s -1s yes +		    mkswap -L swap $swap_part +		fi +		if [ -n "$EXPAND_FS" ]; then +		    e2fsck -fy $main_part +		    fdisk $disk << EOF +d +$main_part_num +n +p +$main_part_num + + +a +$main_part_num +w +EOF +		    sfdisk -R $disk +		    e2fsck -fy $main_part +		    resize2fs $main_part +		fi +		mkdir -p $mnt_dir +		mount $main_part $mnt_dir +		grub_dir="$mnt_dir/boot/grub" +		if [ -d "$grub_dir" ]; then +		    echo "(hd0) $disk" > "$grub_dir/device.map" +		    if [ -n "$win32_part_dev" ]; then +   	                grub_setup ${root} ${grub_dir} +                    fi +		fi +		if [ -n "$MKINITRD" ]; then +		    mount -t sysfs none "$mnt_dir/sys" +		    mount -t proc none "$mnt_dir/proc" +		    chroot $mnt_dir bootloader-config --action rebuild-initrds +		    umount "$mnt_dir/sys" +		    umount "$mnt_dir/proc" +		fi +		umount $mnt_dir +	fi +} + +# installation steps +welcome +read_config +detect_device +install_warning +write_image +expand_fs + +# all done! +_msgbox "\nInstallation process finished.\nPress ENTER to shutdown.\n " + +_shutdown + diff --git a/rescue/tree/usr/sbin/startssh b/rescue/tree/usr/sbin/startssh new file mode 100755 index 000000000..e14bb10e8 --- /dev/null +++ b/rescue/tree/usr/sbin/startssh @@ -0,0 +1,27 @@ +#!/bin/bash + +# test for an up interface != lo +if test "x"`ifconfig | cut -d ' ' -f 1 | grep -v '^$' | grep -v lo` = "x"; then +	echo "There is no up interface, you can try to execute 'drvinst' to find drivers and 'dhcp-client' to configure your interface for DHCP." >&2 +	exit 5 +fi + +# generate host keys +mkdir -p /etc/dropbear +[[ -f /etc/dropbear/dropbear_dss_host_key ]] || dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key >/dev/null || { echo "Can't generate dsa host key" >&2 ; exit 4; } +[[ -f /etc/dropbear/dropbear_rsa_host_key ]] || dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key >/dev/null || { echo "Can't generate rsa host key" >&2 ; exit 3; } + +# set a password +passwd=`genpasswd` +if (( $? != 0 )); then +	reset +	exit $? +fi +sed -E -i -e 's/^root:[^:]*:/root:'"${passwd//\//\\/}"':/' /etc/passwd || { echo "Can't set password" >&2 ; exit 2; } + +# test for /dev/pts +grep '^devpts /dev/pts devpts ' /proc/mounts >/dev/null 2>/dev/null || mount -t devpts devpts /dev/pts + +echo "" +echo -n "Starting ssh daemon... " +dropbear -E 2>/var/log/dropbear.log && echo "OK" || { echo "Failed" ; exit 1; } diff --git a/rescue/tree/usr/share/symlinks b/rescue/tree/usr/share/symlinks deleted file mode 100644 index 421b70d7b..000000000 --- a/rescue/tree/usr/share/symlinks +++ /dev/null @@ -1,10 +0,0 @@ -/bin -/boot -/dev -/etc/fstab -/etc/inittab -/etc/rc.sysinit -/lib -/modules -/sbin -/usr | 
