5

I was installing redis and came across php8.3-fpm installation error. This are the relevant installation messages:

apt install redis-server
...
...
Setting up php8.3-fpm (8.3.6-0ubuntu0.24.04.2) ...
NOTICE: Not enabling PHP 8.3 FPM by default.
NOTICE: To enable PHP 8.3 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.3-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Job for php8.3-fpm.service failed because a timeout was exceeded.
See "systemctl status php8.3-fpm.service" and "journalctl -xeu php8.3-fpm.service" for details.
invoke-rc.d: initscript php8.3-fpm, action "restart" failed.
× php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
     Active: failed (Result: timeout) since Sun 2024-10-06 13:52:03 CEST; 16ms ago
       Docs: man:php-fpm8.3(8)
    Process: 285882 ExecStart=/usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf (code=exited, status=0/SUCCESS)
    Process: 285889 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/8.3/fpm/pool.d/www.conf 83 (code=exited, status=0/SUCCESS)
   Main PID: 285882 (code=exited, status=0/SUCCESS)
        CPU: 90ms

Oct 06 13:50:33 Ubuntu-2404-noble-amd64-base systemd[1]: Starting php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager... Oct 06 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: start operation timed out. Terminating. Oct 06 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: Failed with result 'timeout'. Oct 06 13:52:03 Ubuntu-2404-noble-amd64-base systemd[1]: Failed to start php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager. dpkg: error processing package php8.3-fpm (--configure): installed php8.3-fpm package post-installation script subprocess returned error exit status 1 Setting up libjemalloc2:amd64 (5.3.0-2build1) ... Setting up liblzf1:amd64 (3.6-4) ... Setting up redis-tools (5:7.0.15-1build2) ... Setting up redis-server (5:7.0.15-1build2) ... Created symlink /etc/systemd/system/redis.service → /usr/lib/systemd/system/redis-server.service. Created symlink /etc/systemd/system/multi-user.target.wants/redis-server.service → /usr/lib/systemd/system/redis-server.service. Processing triggers for man-db (2.12.0-4build2) ... Processing triggers for libc-bin (2.39-0ubuntu8.3) ... Errors were encountered while processing: php8.3-fpm needrestart is being skipped since dpkg has failed E: Sub-process /usr/bin/dpkg returned an error code (1)

Systemctl and yournalctl messages are not particularly descriptive - just saying php8.3-fpm failed to start with result 'timeout'.

The error seem to be with dpkg processing php8.3-fpm : installed php8.3-fpm package post-installation script subprocess returned error exit status 1

Content of /var/lib/dpkg/info/php8.3-fpm.postinst:

#!/bin/sh

set -e

if [ -e /usr/share/apache2/apache2-maintscript-helper ]; then . /usr/share/apache2/apache2-maintscript-helper

php_enable() {
    # Don't enable PHP FPM by default when Apache 2 is installed
    apache2_msg notice "NOTICE: Not enabling PHP 8.3 FPM by default."
    apache2_msg notice "NOTICE: To enable PHP 8.3 FPM in Apache2 do:"
    apache2_msg notice "NOTICE: a2enmod proxy_fcgi setenvif"
    apache2_msg notice "NOTICE: a2enconf php8.3-fpm"
    apache2_msg notice "NOTICE: You are seeing this message because you have apache2 package installed."
    return 1
}

else php_enable() { # Don't enable PHP FPM by default when Apache 2 is not installed return 1 } fi

if [ "$1" = "triggered" ] && [ "$2" = "/etc/php/8.3/fpm/conf.d" ]; then invoke-rc.d php8.3-fpm restart fi

CONFDIR=/etc/php/8.3/fpm/conf.d

if [ "$1" = "configure" ]; then phpini="/etc/php/8.3/fpm/php.ini"

if [ "fpm" = "cli" ]; then
    ucf /usr/lib/php/8.3/php.ini-production.fpm $phpini
else
    ucf /usr/lib/php/8.3/php.ini-production $phpini
fi
ucfr php8.3-fpm $phpini

if [ -e /usr/lib/php/php-maintscript-helper ]; then
    . /usr/lib/php/php-maintscript-helper

    mods=$(phpquery -M -v 8.3)
    for mod in $mods; do
        php_invoke enmod 8.3 fpm $mod
    done
fi

if [ -n "$2" ] && dpkg --compare-versions "$2" lt "7.0.3-2~"; then
    rm -f /etc/php/8.3/fpm/conf.d/20-opcache.ini;
fi      

fi

Automatically added by dh_apache2/UNDECLARED

if php_enable; then if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then . /usr/share/apache2/apache2-maintscript-helper for conf in php8.3-fpm ; do apache2_invoke enconf $conf || exit 1 done fi fi

End automatically added section

Automatically added by dh_systemd_enable/13.14.1ubuntu5

if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then # The following line should be removed in trixie or trixie+1 deb-systemd-helper unmask 'php8.3-fpm.service' >/dev/null || true

    # was-enabled defaults to true, so new installations run enable.
    if deb-systemd-helper --quiet was-enabled 'php8.3-fpm.service'; then
            # Enables the unit on first installation, creates new
            # symlinks on upgrades if the unit file has changed.
            deb-systemd-helper enable 'php8.3-fpm.service' >/dev/null || true
    else
            # Update the statefile to add new symlinks (if any), which need to be
            # cleaned up on purge. Also remove old symlinks.
            deb-systemd-helper update-state 'php8.3-fpm.service' >/dev/null || true
    fi

fi

End automatically added section

Automatically added by dh_installinit/13.14.1ubuntu5

if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then if [ -x "$(command -v systemd-tmpfiles)" ]; then systemd-tmpfiles ${DPKG_ROOT:+--root="$DPKG_ROOT"} --create php8.3-fpm.conf || true fi fi

End automatically added section

Automatically added by dh_installdeb/13.14.1ubuntu5

dpkg-maintscript-helper rm_conffile /etc/init/php8.3-fpm.conf 7.4.3-4~ php8.3-fpm -- "$@"

End automatically added section

Automatically added by dh_installinit/13.14.1ubuntu5

if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then if [ -z "${DPKG_ROOT:-}" ] && [ -x "/etc/init.d/php8.3-fpm" ]; then update-rc.d php8.3-fpm defaults >/dev/null if [ -n "$2" ]; then _dh_action=restart else _dh_action=start fi invoke-rc.d php8.3-fpm $_dh_action || exit 1 fi fi

End automatically added section

exit 0

Not familiar with how dpkg functions, but exit 1 occurs in 2 locations. First one occurs when reading apache conf files. I have removed apache2 so this one cannot not trigger anymore. The second one just signals that start/restart failed.

Any tips on what could be the problem? This seems to be above my skill level.

Additional info: running systemctl status php8.3-fpm.service returns

× php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager
     Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
     Active: failed (Result: timeout) since Mon 2024-10-07 11:34:21 CEST; 1min 33s ago
       Docs: man:php-fpm8.3(8)
    Process: 334032 ExecStart=/usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf (code=exited, status=0/SUCCESS)
    Process: 334035 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/8.3/fpm/pool.d/www.conf 83 (code=exited, status=0/SUCCESS)
   Main PID: 334032 (code=exited, status=0/SUCCESS)
        CPU: 98ms

Oct 07 11:32:51 Ubuntu-2404-noble-amd64-base systemd[1]: Starting php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager... Oct 07 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: start operation timed out. Terminating. Oct 07 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: php8.3-fpm.service: Failed with result 'timeout'. Oct 07 11:34:21 Ubuntu-2404-noble-amd64-base systemd[1]: Failed to start php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager.

Additionaly, manually starting the service with /usr/sbin/php-fpm8.3 --nodaemonize --fpm-config /etc/php/8.3/fpm/php-fpm.conf returns

NOTICE: fpm is running, pid 334206
NOTICE: ready to handle connections
NOTICE: systemd monitor interval set to 10000ms
... no more messages

indicating that fpm was started successfully, but perhaps systemd has an issue? Am I dealing with mismatched PID numbers?

sanjihan
  • 257

2 Answers2

4

PHP-FPM is installed as a notify type service; this means that, quoting systemd.service — Service unit configuration:

it is expected that the service sends a "READY=1" notification message via sd_notify(3) or an equivalent call when it has finished starting up

As per this line in your log file:

failed to notify status to systemd

something's up with that; this notification is either never sent or never delivered.

A workaround to get the service to start properly would be to change the service type to exec, by overriding /lib/systemd/system/php8.3-fpm.service.

In order to do that, run:

sudo systemctl edit php8.3-fpm

You'll be presented with a commented-out version of the service in an editor (which editor will depend on the environment; by default, on Ubuntu 24.04 it should end up being nano).

Change the file so that it looks like this:

[Service]
Type=exec

Then save the file (in nano: Ctrl + O / Enter / Ctrl + X).

Finally, run:

sudo systemctl restart php8.3-fpm

Note that overriding /lib/systemd/system/php8.3-fpm.service (as opposed to manually editing it) is needed because an update of PHP-FPM may very well change /lib/systemd/system/php8.3-fpm.service, effectively reverting the change you made.

kos
  • 41,268
2

The root cause of the issue may be the enforced AppArmor profile for php-fpm. You can make sure if you check system logs (journalctl) and find something like:

Nov 27 08:57:41 ip-10-48-2-196 kernel: audit: type=1400 audit(1732697859.019:135633): apparmor="DENIED" operation="sendmsg" class="file" profile="php-fpm" name="/run/systemd/notify" pid=192524 comm="php-fpm8.3" requested_mask="w" denied_mask="w" fsuid=0 ouid=0

To fix it just add this line to /etc/apparmor.d/local/php-fpm

owner /run/systemd/notify w,

and restart apparmor service

Player
  • 21