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