diff options
Diffstat (limited to 'rescue/tree')
24 files changed, 693 insertions, 193 deletions
| 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 771d7c0d4..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:/sbin/mingetty --autologin root tty1 -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 93f718d51..11f9f3102 100644 --- a/rescue/tree/etc/issue +++ b/rescue/tree/etc/issue @@ -11,7 +11,7 @@  [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 @@ -24,4 +24,7 @@ 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 f2b8aa639..000000000 --- a/rescue/tree/etc/rc.sysinit +++ /dev/null @@ -1,57 +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 - -rm -f /dev ; cp -a /tmp/stage2/dev /dev - -mkdir /mnt /var/log - -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 | 
