** Description changed: [Impact] + There are two conditions for this bug to happen, as far as I could figure out: + a) the mpm_prefork module configuration files are named just prefork.{conf,module} instead of mpm_prefork.{conf,module} + b) this renamed prefork mpm module is enabled manually instead of using a2enmod - * An explanation of the effects of the bug on users and + These conditions mean that one will have two mpm modules enabled at the + same time in /etc/apache2/mod-enabled, something that the a2enmod tool + knows how to prevent. But the symlinks can still be created manually. - * justification for backporting the fix to the stable release. + These were the conditions I could figure out via code inspection and + from logs from this bug and #1771934, meaning, I could reproduce the + same error, including shell code path execution. - * In addition, it is helpful, but not required, to include an - explanation of how the upload fixes this bug. + It's quite a corner case, but it showed a real bug in the apache apache2 + -maintscript-helper shell script. It seems to be triggered by a + puppetlabs module, but I didn't install or configure puppet to confirm. + + One could argue it's a local configuration issue, since non-standard + tools were used, but the bug it showed in the apache script is real and + I believe it's worth fixing. + + Once the two mpm modules (event, from the default install, and preform, from the manual symlink) are enabled at the same time, the following happens when php is installed: + - php's postinst runs a2query -M to check which mpm is in use + - that call returns "event", so php proceeds to switch the mpm to prefork by calling "apache2_switch_mpm prefork" + - due to the bug, apache2_switch_mpm() will check if "prefork" (and NOT mpm_prefork) is already enabled. At this line, $MPM=preform, and $mpm is not defined. So this: + + a2query -m "$mpm_$MPM" > /dev/null 2>&1 || a2query_ret=$? + + Turns into: + a2query -m "prefork" > /dev/null 2>&1 || a2query_ret=$? + + - because there is a /etc/apache2/mods-enabled/prefork.* symlink (manually created), this returns 0, in which case the function determines there is nothing to do (prefork is already enabled!) and exits 0 without actually switching anything + - mpm_event is still enabled, and when a2enmod is called to enable php, that correctly complains and fails. + + With the fix, the a2query call from apache2_switch_mpm() will correctly + determine that mpm_prefork is not enabled, and perform the requested + switch. + [Test Case] sudo apt update sudo apt install apache2 sudo cp /etc/apache2/mods-available/{mpm_prefork,prefork}.conf sudo cp /etc/apache2/mods-available/{mpm_prefork,prefork}.load sudo ln -s /etc/apache2/mods-{available,enabled}/prefork.load sudo ln -s /etc/apache2/mods-{available,enabled}/prefork.conf Installing the php7.2 module now will fail: sudo apt install libapache2-mod-php7.2 Creating config file /etc/php/7.2/apache2/php.ini with new version apache2_switch_mpm prefork: No action required dpkg: error processing package libapache2-mod-php7.2 (--configure): - installed libapache2-mod-php7.2 package post-installation script subprocess returned error exit status 1 + installed libapache2-mod-php7.2 package post-installation script subprocess returned error exit status 1 E: Sub-process /usr/bin/dpkg returned an error code (1) With the package from proposed, the above will work just fine. If a user is in the failed situation already, a dist-upgrade also fixes the problem. [Regression Potential] * discussion of how regressions are most likely to manifest as a result of this change. * It is assumed that any SRU candidate patch is well-tested before upload and has a low overall risk of regression, but it's important to make the effort to think about what ''could'' happen in the event of a regression. * This both shows the SRU team that the risks have been considered, and provides guidance to testers in regression-testing the SRU. [Other Info] * Anything else you think is useful to include * Anticipate questions from users, SRU, +1 maintenance, security teams and the Technical Board * and address these questions in advance [Original Description] The following line appears to have a typo: a2query -m "$mpm_$MPM" > /dev/null 2>&1 || a2query_ret=$? It should read: a2query -m "mpm_$MPM" > /dev/null 2>&1 || a2query_ret=$? Since $mpm is not defined. Later on there are references to enabling and disabling "mpm_$MPM". https://salsa.debian.org/apache- team/apache2/blob/master/debian/debhelper/apache2-maintscript- helper#L290 This appears to trip up the Puppet apache module since it creates a prefork module (rather than mpm_prefork), which results in the above query returning a positive response. This is what's happening in bug #1771934. Fix is obvious and trivial so can hopefully be implemented soon. Appears only to affect bionic since xenial had different code.
-- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1782806 Title: Typo in apache2-maintscript-helper causes MPM check to misfire To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/1782806/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs