Project

General

Profile

« Previous | Next » 

Revision c0cb3c73

Added by Renato Botelho over 9 years ago

Fix #6137:

- Uninstall all packages on current system before upgrade using
pre_upgrade_command script
- Create a file containing all packages previously installed and
reinstall them on first boot after upgrade

View differences:

src/etc/inc/pkg-utils.inc
1000 1000

  
1001 1001
	$pkg_info = get_pkg_info();
1002 1002

  
1003
	foreach ($config['installedpackages']['package'] as $package) {
1003
	if ($upgrade &&
1004
	    file_exists("{$g['cf_conf_path']}/packages_to_reinstall_after_upgrade.txt")) {
1005
		$package_list = file("{$g['cf_conf_path']}/packages_to_reinstall_after_upgrade.txt",
1006
		    FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
1007
		unlink_if_exists("{$g['cf_conf_path']}/packages_to_reinstall_after_upgrade.txt");
1008
	} else {
1009
		$package_list = array();
1010
		foreach ($config['installedpackages']['package'] as $package) {
1011
			$package_list[] = get_package_internal_name($package);
1012
		}
1013
	}
1014

  
1015
	foreach ($package_list as $package) {
1004 1016
		$found = false;
1005
		$internal_name = get_package_internal_name($package);
1006 1017
		foreach ($pkg_info as $pkg) {
1007 1018
			pkg_remove_prefix($pkg['name']);
1008
			if ($pkg['name'] == $internal_name) {
1019
			if ($pkg['name'] == $package) {
1020
				pkg_install($g['pkg_prefix'] . $package, true);
1009 1021
				$found = true;
1010 1022
				break;
1011 1023
			}
......
1017 1029
			}
1018 1030

  
1019 1031
			file_notice(gettext("Package reinstall"),
1020
			    sprintf(gettext("Package %s does not exist in current %s version and it has been removed."), $package['name'], $g['product_name']));
1021
			uninstall_package($package['name']);
1032
			    sprintf(gettext("Package %s does not exist in current %s version and it has been removed."),
1033
			    $package, $g['product_name']));
1034
			uninstall_package($package);
1022 1035
		}
1023 1036
	}
1024 1037

  
1025
	/* Obsoleted packages were removed, lets reinstall all remaining */
1026
	foreach ($config['installedpackages']['package'] as $package) {
1027
		$internal_name = get_package_internal_name($package);
1028
		pkg_install($g['pkg_prefix'] . $internal_name, true);
1029
	}
1030

  
1031 1038
	return true;
1032 1039
}
1033 1040

  
src/usr/local/share/pfSense/pre_upgrade_command
12 12
# De-activate sync on the root slice only. This will not match NanoBSD since it already has sync,noatime
13 13
/usr/bin/sed -i '' 's/^\(\/.*[[:space:]]*\/[[:space:]]*ufs[[:space:]]*\)rw,sync\([[:space:]]*[[:digit:]][[:space:]]*[[:digit:]]\)$/\1rw\2/' /etc/fstab
14 14

  
15
# Uninstall all packages before upgrade to 2.3
16
PFSENSE_VERSION=$(cat /etc/version)
17

  
18
if echo "$PFSENSE_VERSION" | grep -q '^1.2'; then
19
	UNINSTALL="uninstall_package_from_name"
20
else
21
	UNINSTALL="uninstall_package"
22
fi
23

  
24
cat >/tmp/remove_all_packages.php <<EOD
25
#!/usr/local/bin/php
26
<?php
27

  
28
require_once("pkg-utils.inc");
29

  
30
global \$pkg_interface;
31
\$pkg_interface = "console";
32

  
33
if (!isset(\$config['installedpackages']['package'])) {
34
	exit(0);
35
}
36

  
37
if (!is_array(\$config['installedpackages']['package'])) {
38
	exit(0);
39
}
40

  
41
\$removed_packages = array();
42
foreach (\$config['installedpackages']['package'] as \$package) {
43
	if (isset(\$package['internal_name'])) {
44
		\$removed_packages[] = \$package['internal_name'];
45
	} else {
46
		\$removed_packages[] = \$package['name'];
47
	}
48
	//${UNINSTALL}(\$package['name']);
49
}
50

  
51
@file_put_contents("{\$g['cf_conf_path']}/packages_to_reinstall_after_upgrade.txt", implode("\\n",\$removed_packages));
52

  
53
?>
54
EOD
55

  
56
/usr/local/bin/php /tmp/remove_all_packages.php
57
exit
58
rm -f /tmp/remove_all_packages.php
59

  
15 60
# Cleanup PBIs
16 61
if which pbi_info >/dev/null 2>&1; then
17 62
	for pbi in $(pbi_info); do

Also available in: Unified diff