diff options
author | jim-p <jimp@netgate.com> | 2018-08-29 14:21:26 -0400 |
---|---|---|
committer | jim-p <jimp@netgate.com> | 2018-08-29 14:24:51 -0400 |
commit | 5d4f49000654fae594144abc36fe8a588a028510 (patch) | |
tree | 64e88402d21b82c0dd7ba3a7bd9f9bbfecd976e7 | |
parent | bc91bdffcefd009f4716cce59eab231c2245fb18 (diff) | |
download | pfsense-5d4f49000654fae594144abc36fe8a588a028510.zip pfsense-5d4f49000654fae594144abc36fe8a588a028510.tar.gz |
Allow packages to opt out of a forced start. Fixes #8850
If a package performs its own service start during its sync process,
then add <starts_on_sync/> to its service definition in the package XML
file. Then when rc.start_packages is called, the forced start will not
happen since the sync will have taken that action already.
-rw-r--r-- | src/etc/inc/service-utils.inc | 5 | ||||
-rwxr-xr-x | src/etc/rc.start_packages | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/etc/inc/service-utils.inc b/src/etc/inc/service-utils.inc index b525faa..3a46ce2 100644 --- a/src/etc/inc/service-utils.inc +++ b/src/etc/inc/service-utils.inc @@ -84,6 +84,11 @@ function start_service($name) { if (is_array($config['installedpackages']) && is_array($config['installedpackages']['service'])) { foreach ($config['installedpackages']['service'] as $service) { if (strtolower($service['name']) == strtolower($name)) { + /* Avoid starting twice if this is called just after a + * package sync which starts the service itself. */ + if ($after_sync && isset($service['starts_on_sync'])) { + break; + } if ($service['rcfile']) { $prefix = RCFILEPREFIX; if (!empty($service['prefix'])) { diff --git a/src/etc/rc.start_packages b/src/etc/rc.start_packages index 2b06080..bbe6006 100755 --- a/src/etc/rc.start_packages +++ b/src/etc/rc.start_packages @@ -58,7 +58,7 @@ if (is_array($config['installedpackages']['package'])) { echo " Starting package {$package['name']}..."; sync_package($package['name']); $internal_name = get_package_internal_name($package); - start_service($internal_name); + start_service($internal_name, true); unset($rcfiles[RCFILEPREFIX . strtolower($internal_name) . ".sh"]); echo "done.\n"; } |