public inbox for ipfire-scm@lists.ipfire.org
 help / color / mirror / Atom feed
From: git@ipfire.org
To: ipfire-scm@lists.ipfire.org
Subject: [git.ipfire.org] IPFire 2.x development tree branch, seventeen, updated. 7764239659367c6cb3032bb099a1f1aad5751fda
Date: Sun, 16 Nov 2014 14:10:17 +0100	[thread overview]
Message-ID: <20141116131017.2885921022@argus.ipfire.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 17469 bytes --]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "IPFire 2.x development tree".

The branch, seventeen has been updated
       via  7764239659367c6cb3032bb099a1f1aad5751fda (commit)
       via  f9921891f4dc3bc2f9be80d2871ce6f766a38e23 (commit)
       via  c5a5b13e8ed808c726b3bb4142fa3dd49ad9d4a8 (commit)
       via  a046e8a6abf0e28b836cf713625e8e2044bafed1 (commit)
       via  ade96ba8a590df6411f7effec637609494072034 (commit)
       via  b1c1a589944c88d24cfbc20387d607419e2fb61c (commit)
       via  bb75bc3b140749a736040d767ff89d25177ae330 (commit)
      from  da4529ae5110d3e33d0f15338da5288728352d39 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 7764239659367c6cb3032bb099a1f1aad5751fda
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Sun Nov 16 14:09:50 2014 +0100

    core86: Do all other fancy kernel updating stuff

commit f9921891f4dc3bc2f9be80d2871ce6f766a38e23
Merge: c5a5b13 da4529a
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Sun Nov 16 11:38:45 2014 +0100

    Merge remote-tracking branch 'origin/seventeen' into seventeen

commit c5a5b13e8ed808c726b3bb4142fa3dd49ad9d4a8
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Sun Nov 16 11:37:47 2014 +0100

    installer: Power off instead of reboot after unattended install

commit a046e8a6abf0e28b836cf713625e8e2044bafed1
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Fri Nov 14 00:02:41 2014 +0100

    installer: Only drop to a debug shell after a segmentation fault

commit ade96ba8a590df6411f7effec637609494072034
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Thu Nov 13 23:58:05 2014 +0100

    installer: Fix umounting destination

commit b1c1a589944c88d24cfbc20387d607419e2fb61c
Merge: bb75bc3 817317e
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Mon Nov 10 17:36:01 2014 +0100

    Merge remote-tracking branch 'origin/seventeen' into seventeen

commit bb75bc3b140749a736040d767ff89d25177ae330
Author: Michael Tremer <michael.tremer(a)ipfire.org>
Date:   Wed Nov 5 23:43:01 2014 +0100

    installer: Improve check for serial console option

-----------------------------------------------------------------------

Summary of changes:
 config/rootfiles/core/86/update.sh           | 239 ++++++++++++++++++++++++---
 src/installer/dracut-module/run-installer.sh |  15 +-
 src/installer/hw.c                           |  41 ++++-
 src/installer/main.c                         |  45 +++--
 4 files changed, 285 insertions(+), 55 deletions(-)

Difference in files:
diff --git a/config/rootfiles/core/86/update.sh b/config/rootfiles/core/86/update.sh
index 7911a11..c1ea59c 100644
--- a/config/rootfiles/core/86/update.sh
+++ b/config/rootfiles/core/86/update.sh
@@ -24,54 +24,239 @@
 . /opt/pakfire/lib/functions.sh
 /usr/local/bin/backupctrl exclude >/dev/null 2>&1
 
-# Find root device
-function find_root_device() {
-	while read -r dev mountpoint fs options; do
-		# Skip generic entries
-		[ "${dev}" = "rootfs" ] && continue
-
-		if [ "${mountpoint}" = "/" ]; then
-			echo "${mountpoint}"
-			break
-		fi
-	done < /proc/mounts
+function add_to_backup ()
+{
+	# Add path to ROOTFILES but remove old entries to prevent double
+	# files in the tar
+	grep -v "^$1" /opt/pakfire/tmp/ROOTFILES > /opt/pakfire/tmp/ROOTFILES.tmp
+	mv /opt/pakfire/tmp/ROOTFILES.tmp /opt/pakfire/tmp/ROOTFILES
+	echo $1 >> /opt/pakfire/tmp/ROOTFILES
 }
 
+#
 # Remove old core updates from pakfire cache to save space...
 core=86
-for (( i=1; i<=$core; i++ ))
+for (( i=1; i<=${core}; i++ ))
 do
 	rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
 done
 
-# Stop services
+#
+# Do some sanity checks.
+case $(uname -r) in
+	*-ipfire-versatile )
+		/usr/bin/logger -p syslog.emerg -t ipfire \
+			"core-update-${core}: ERROR cannot update. versatile support is dropped."
+		# Report no error to pakfire. So it does not try to install it again.
+		exit 0
+		;;
+	*-ipfire* )
+		# Ok.
+		;;
+	* )
+		/usr/bin/logger -p syslog.emerg -t ipfire \
+			"core-update-${core}: ERROR cannot update. No IPFire Kernel."
+		exit 1
+	;;
+esac
 
-# Remove old files
 
-# Extract files
-extract_files
+#
+#
+KVER="xxxKVERxxx"
 
-# Start services
+#
+# check if we the backup file already exist
+if [ -e /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz ]; then
+    echo Moving backup to backup-old ...
+    mv -f /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz \
+       /var/ipfire/backup/core-upgrade${core}_${KVER}-old.tar.xz
+fi
+echo First we made a backup of all files that was inside of the
+echo update archive. This may take a while ...
+# Add some files that are not in the package to backup
+add_to_backup lib/modules
+add_to_backup boot
+
+# Backup the files
+tar cJvf /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz \
+    -C / -T /opt/pakfire/tmp/ROOTFILES --exclude='#*' --exclude='/var/cache' > /dev/null 2>&1
+
+# Check diskspace on root
+ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+
+if [ $ROOTSPACE -lt 100000 ]; then
+	/usr/bin/logger -p syslog.emerg -t ipfire \
+		"core-update-${core}: ERROR cannot update because not enough free space on root."
+	exit 2
+fi
+
+
+echo
+echo Update Kernel to $KVER ...
+#
+# Remove old kernel, configs, initrd, modules ...
+#
+rm -rf /boot/System.map-*
+rm -rf /boot/config-*
+rm -rf /boot/ipfirerd-*
+rm -rf /boot/vmlinuz-*
+rm -rf /boot/uImage-ipfire-*
+rm -rf /boot/uInit-ipfire-*
+rm -rf /lib/modules
+
+case "$(uname -m)" in
+	i?86)
+		# Backup grub.conf
+		cp -vf /boot/grub/grub.conf /boot/grub-legacy.conf
+
+		# Remove all files that belong to GRUB-legacy
+		rm -rfv /boot/grub
+		;;
+esac
+#
+#Stop services
+/etc/init.d/snort stop
+/etc/init.d/squid stop
+/etc/init.d/ipsec stop
+/etc/init.d/apache stop
+
+#
+#Extract files
+tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p --numeric-owner -C /
+
+# Check diskspace on boot
+BOOTSPACE=`df /boot -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+
+if [ $BOOTSPACE -lt 1000 ]; then
+	case $(uname -r) in
+		*-ipfire-kirkwood )
+			# Special handling for old kirkwood images.
+			# (install only kirkwood kernel)
+			rm -rf /boot/*
+			tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p \
+				--numeric-owner -C / --wildcards 'boot/*-kirkwood*'
+			;;
+		* )
+			/usr/bin/logger -p syslog.emerg -t ipfire \
+				"core-update-${core}: FATAL-ERROR space run out on boot. System is not bootable..."
+			/etc/init.d/apache start
+			exit 4
+			;;
+	esac
+fi
 
 # Update Language cache
 perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
 
-# Upgrade to GRUB2
-root_device="$(find_root_device)"
-if ! grub-install "${root_device}"; then
-	if ! grub-install --force "${root_device}"; then
-		echo "Could not update the bootloader!"
+# Add nobody to group dialout
+usermod -a -G dialout nobody
+
+#
+# Start services
+#
+/etc/init.d/apache start
+/etc/init.d/squid start
+/etc/init.d/snort start
+if [ `grep "ENABLED=on" /var/ipfire/vpn/settings` ]; then
+	/etc/init.d/ipsec start
+fi
+
+case "$(uname -m)" in
+	i?86)
+		#
+		# Update to GRUB2
+		#
+		echo
+		echo Update grub configuration ...
+		if grep -qE "^serial" /boot/grub-legacy.conf; then
+			sed -i /etc/default/grub \
+				-e "s| panic=10 | console=ttyS0,115200n8 panic=10 |g"
+			echo "GRUB_TERMINAL=\"serial\"" >> /etc/default/grub
+			echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> /etc/default/grub
+		fi
+		grub-mkconfig -o /boot/grub/grub.cfg
+
+		ROOT=$(mount | grep " / " | cut -d" " -f1)
+		ROOT=${ROOT::-1}
+
+		if ! grub-install --no-floppy --recheck "${ROOT}"; then
+			if ! grub-install --no-floppy --recheck --force "${ROOT}"; then
+				logger -p syslog.emerg -t ipfire \
+					"Could not update the bootloader!"
+			fi
+		fi
+		;;
+esac
+
+# Force (re)install pae kernel if pae is supported
+rm -rf /opt/pakfire/db/*/meta-linux-pae
+if [ ! "$(grep "^flags.* pae " /proc/cpuinfo)" == "" ]; then
+	ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+	BOOTSPACE=`df /boot -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+	if [ $BOOTSPACE -lt 12000 -o $ROOTSPACE -lt 90000 ]; then
+		/usr/bin/logger -p syslog.emerg -t ipfire \
+			"core-update-${core}: WARNING not enough space for pae kernel."
+	else
+		echo "Name: linux-pae" > /opt/pakfire/db/installed/meta-linux-pae
+		echo "ProgVersion: 0" >> /opt/pakfire/db/installed/meta-linux-pae
+		echo "Release: 0"     >> /opt/pakfire/db/installed/meta-linux-pae
+		echo "Name: linux-pae" > /opt/pakfire/db/meta/meta-linux-pae
+		echo "ProgVersion: 0" >> /opt/pakfire/db/meta/meta-linux-pae
+		echo "Release: 0"     >> /opt/pakfire/db/meta/meta-linux-pae
 	fi
 fi
 
+# Force reinstall xen kernel if it was installed
+if [ -e "/opt/pakfire/db/installed/meta-linux-xen" ]; then
+	echo "Name: linux-xen" > /opt/pakfire/db/installed/meta-linux-xen
+	echo "ProgVersion: 0" >> /opt/pakfire/db/installed/meta-linux-xen
+	echo "Release: 0"     >> /opt/pakfire/db/installed/meta-linux-xen
+	echo "Name: linux-xen" > /opt/pakfire/db/meta/meta-linux-xen
+	echo "ProgVersion: 0" >> /opt/pakfire/db/meta/meta-linux-xen
+	echo "Release: 0"     >> /opt/pakfire/db/meta/meta-linux-xen
+	# Add xvc0 to /etc/securetty
+	echo "xvc0" >> /etc/securetty
+fi
+
+#
+# After pakfire has ended run it again and update the lists and do upgrade
+#
+echo '#!/bin/bash'                                        >  /tmp/pak_update
+echo 'while [ "$(ps -A | grep " update.sh")" != "" ]; do' >> /tmp/pak_update
+echo '    sleep 1'                                        >> /tmp/pak_update
+echo 'done'                                               >> /tmp/pak_update
+echo 'while [ "$(ps -A | grep " pakfire")" != "" ]; do'   >> /tmp/pak_update
+echo '    sleep 1'                                        >> /tmp/pak_update
+echo 'done'                                               >> /tmp/pak_update
+echo '/opt/pakfire/pakfire update -y --force'             >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire "Core-upgrade finished. If you use a customized grub.cfg"' >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire "Check it before reboot !!!"' >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire " *** Please reboot... *** "' >> /tmp/pak_update
+echo 'touch /var/run/need_reboot ' >> /tmp/pak_update
+#
+killall -KILL pak_update
+chmod +x /tmp/pak_update
+/tmp/pak_update &
+
 sync
 
-# This update need a reboot...
-touch /var/run/need_reboot
+#
+#Finish
+(
+	/etc/init.d/fireinfo start
+	sendprofile
+) >/dev/null 2>&1 &
+
+# Update Package list for addon installation
+/opt/pakfire/pakfire update -y --force
 
-# Finish
-/etc/init.d/fireinfo start
-sendprofile
+echo
+echo Please wait until pakfire has ended...
+echo
 
 # Don't report the exitcode last command
 exit 0
diff --git a/src/installer/dracut-module/run-installer.sh b/src/installer/dracut-module/run-installer.sh
index 1a7bd13..ea9669a 100644
--- a/src/installer/dracut-module/run-installer.sh
+++ b/src/installer/dracut-module/run-installer.sh
@@ -3,6 +3,11 @@
 # IPFire Installer RC
 #
 
+unattended=0
+if grep -q "installer.unattended" /proc/cmdline; then
+	unattended=1
+fi
+
 # Enable Unicode
 echo -en '\033%G' && kbd_mode -u
 
@@ -22,14 +27,16 @@ echo "Loading Installer..."
 ret=$?
 
 case "${ret}" in
-	0)
-		# The installer has finished without a problem.
-		;;
-	*)
+	139)
 		echo "The installer has crashed. You will be dropped to a debugging shell"
 		/bin/bash --login
 		;;
 esac
 
+# Poweroff after an unattended installation
+if [ "${unattended}" = "1" ]; then
+	/shutdown poweroff
+fi
+
 # Reboot the system
 /shutdown reboot
diff --git a/src/installer/hw.c b/src/installer/hw.c
index d745260..ce97775 100644
--- a/src/installer/hw.c
+++ b/src/installer/hw.c
@@ -24,6 +24,7 @@
 
 #include <assert.h>
 #include <blkid/blkid.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <libudev.h>
 #include <linux/loop.h>
@@ -138,7 +139,16 @@ int hw_mount(const char* source, const char* target, const char* fs, int flags)
 }
 
 int hw_umount(const char* target) {
-	return umount2(target, 0);
+	int r = umount2(target, 0);
+
+	if (r && errno == EBUSY) {
+		// Give it a moment to settle
+		sleep(1);
+
+		r = umount2(target, MNT_FORCE);
+	}
+
+	return r;
 }
 
 static int hw_test_source_medium(const char* path) {
@@ -869,36 +879,47 @@ int hw_mount_filesystems(struct hw_destination* dest, const char* prefix) {
 }
 
 int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) {
+	int r;
+	char target[STRING_SIZE];
+
 	// Write all buffers to disk before umounting
 	hw_sync();
 
 	// boot
 	if (*dest->part_boot) {
-		hw_umount(dest->part_boot);
+		snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_BOOT);
+		r = hw_umount(target);
+		if (r)
+			return -1;
 	}
 
 	// data
 	if (*dest->part_data) {
-		hw_umount(dest->part_data);
+		snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_DATA);
+		r = hw_umount(target);
+		if (r)
+			return -1;
 	}
 
-	// root
-	hw_umount(dest->part_root);
-
 	// swap
 	if (*dest->part_swap) {
 		swapoff(dest->part_swap);
 	}
 
 	// misc filesystems
-	char target[STRING_SIZE];
 	char** otherfs = other_filesystems;
-
 	while (*otherfs) {
 		snprintf(target, sizeof(target), "%s%s", prefix, *otherfs++);
-		hw_umount(target);
+		r = hw_umount(target);
+		if (r)
+			return -1;
 	}
 
+	// root
+	r = hw_umount(prefix);
+	if (r)
+		return -1;
+
 	return 0;
 }
 
@@ -1012,6 +1033,8 @@ int hw_install_bootloader(struct hw_destination* dest, const char* output) {
 		r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd);
 	}
 
+	hw_sync();
+
 	return r;
 }
 
diff --git a/src/installer/main.c b/src/installer/main.c
index 01a9cc6..d02db28 100644
--- a/src/installer/main.c
+++ b/src/installer/main.c
@@ -289,7 +289,7 @@ static void parse_command_line(struct config* c) {
 			char* key = strsep(&val, "=");
 
 			// serial console
-			if (strcmp(token, "console=ttyS0") == 0)
+			if ((strcmp(key, "console") == 0) && (strncmp(val, "ttyS", 4) == 0))
 				c->serial_console = 1;
 
 			// enable networking?
@@ -839,12 +839,28 @@ int main(int argc, char *argv[]) {
 		free(backup_file);
 	}
 
+	// Download and execute the postinstall script
+	if (*config.postinstall) {
+		snprintf(commandstring, sizeof(commandstring),
+			"/usr/bin/execute-postinstall.sh %s %s", DESTINATION_MOUNT_PATH, config.postinstall);
+
+		if (runcommandwithstatus(commandstring, title, _("Running post-install script..."), logfile)) {
+			errorbox(_("Post-install script failed."));
+			goto EXIT;
+		}
+	}
+
 	// Umount the destination drive
-	hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH);
+	statuswindow(60, 4, title, _("Umounting filesystems..."));
 
-	// Stop the RAID array if we are using RAID
-	if (destination->is_raid)
-		hw_stop_all_raid_arrays(logfile);
+	rc = hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH);
+	if (rc) {
+		// Show an error message if filesystems could not be umounted properly
+		snprintf(message, sizeof(message),
+			_("Could not umount all filesystems successfully:\n\n  %s"), strerror(errno));
+		errorbox(message);
+		goto EXIT;
+	}
 
 	// Umount source drive and eject
 	hw_umount(SOURCE_MOUNT_PATH);
@@ -860,19 +876,18 @@ int main(int argc, char *argv[]) {
 		snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive);
 		mysystem(logfile, commandstring);
 	}
+	newtPopWindow();
 
-	// Download and execute the postinstall script
-	if (*config.postinstall) {
-		snprintf(commandstring, sizeof(commandstring),
-			"/usr/bin/execute-postinstall.sh %s %s", DESTINATION_MOUNT_PATH, config.postinstall);
+	// Stop the RAID array if we are using RAID
+	if (destination->is_raid)
+		hw_stop_all_raid_arrays(logfile);
 
-		if (runcommandwithstatus(commandstring, title, _("Running post-install script..."), logfile)) {
-			errorbox(_("Post-install script failed."));
-			goto EXIT;
-		}
-	}
+	// Show a short message that the installation went well and
+	// wait a moment so that all disk caches get flushed.
+	if (config.unattended) {
+		splashWindow(title, _("Unattended installation has finished. The system will be shutting down in a moment..."), 5);
 
-	if (!config.unattended) {
+	} else {
 		snprintf(message, sizeof(message), _(
 			"%s was successfully installed!\n\n"
 			"Please remove any installation mediums from this system and hit the reboot button. "


hooks/post-receive
--
IPFire 2.x development tree

                 reply	other threads:[~2014-11-16 13:10 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141116131017.2885921022@argus.ipfire.org \
    --to=git@ipfire.org \
    --cc=ipfire-scm@lists.ipfire.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox