open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)

Bug #2081308 reported by Adam Mosseri
10
This bug affects 2 people
Affects Status Importance Assigned to Milestone
nginx (Ubuntu)
Incomplete
Undecided
Unassigned

Bug Description

Hi,

We've got an issue with Nginx and policy-rc.d on Ubuntu 24.04. Nginx can't install when we create an policy-rc.d file with an `exit 0` code.

Here is the steps to reproduce :

1. Install Ubuntu 24.04 Live Server from the ISO.
2. Connect to the machine via SSH.
3. Create a **/usr/sbin/policy-rc.d** file containing :

```
#!/bin/sh

exit 0
```

4. Chmod the **policy-rc.d** file :

```
chmod 755 /usr/sbin/policy-rc.d
```

5. Install Nginx :

```
apt update
apt install -y nginx
```

Here is the output.

```
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
nginx est déjà la version la plus récente (1.24.0-2ubuntu7.1).
0 mis à jour, 0 nouvellement installés, 0 à enlever et 113 non mis à jour.
root@ubuntu24:~# apt remove --purge nginx
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets suivants seront ENLEVÉS :
  nginx* nginx-common*
0 mis à jour, 0 nouvellement installés, 2 à enlever et 113 non mis à jour.
Après cette opération, 1 596 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] Y
(Lecture de la base de données... 83674 fichiers et répertoires déjà installés.)
Suppression de nginx-common (1.24.0-2ubuntu7.1) ...
Suppression de nginx (1.24.0-2ubuntu7.1) ...
Traitement des actions différées (« triggers ») pour man-db (2.12.0-4build2) ...
(Lecture de la base de données... 83649 fichiers et répertoires déjà installés.)
Purge des fichiers de configuration de nginx-common (1.24.0-2ubuntu7.1) ...
Traitement des actions différées (« triggers ») pour ufw (0.36.2-6) ...
root@ubuntu24:~# apt install nginx
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  nginx-common
Paquets suggérés :
  fcgiwrap nginx-doc ssl-cert
Les NOUVEAUX paquets suivants seront installés :
  nginx nginx-common
0 mis à jour, 2 nouvellement installés, 0 à enlever et 113 non mis à jour.
Il est nécessaire de prendre 552 ko dans les archives.
Après cette opération, 1 596 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] Y
Réception de :1 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 nginx-common all 1.24.0-2ubuntu7.1 [31,2 kB]
Réception de :2 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 nginx amd64 1.24.0-2ubuntu7.1 [521 kB]
552 ko réceptionnés en 1s (759 ko/s)
Préconfiguration des paquets...
Sélection du paquet nginx-common précédemment désélectionné.
(Lecture de la base de données... 83626 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../nginx-common_1.24.0-2ubuntu7.1_all.deb ...
Dépaquetage de nginx-common (1.24.0-2ubuntu7.1) ...
Sélection du paquet nginx précédemment désélectionné.
Préparation du dépaquetage de .../nginx_1.24.0-2ubuntu7.1_amd64.deb ...
Dépaquetage de nginx (1.24.0-2ubuntu7.1) ...
Paramétrage de nginx (1.24.0-2ubuntu7.1) ...
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.
invoke-rc.d: initscript nginx, action "start" failed.
× nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; preset: enabled)
     Active: failed (Result: exit-code) since Fri 2024-09-20 13:20:58 UTC; 12ms ago
       Docs: man:nginx(8)
    Process: 2641 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
        CPU: 3ms

sept. 20 13:20:58 ubuntu24 systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
sept. 20 13:20:58 ubuntu24 nginx[2641]: 2024/09/20 13:20:58 [emerg] 2641#2641: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
sept. 20 13:20:58 ubuntu24 nginx[2641]: nginx: configuration file /etc/nginx/nginx.conf test failed
sept. 20 13:20:58 ubuntu24 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
sept. 20 13:20:58 ubuntu24 systemd[1]: nginx.service: Failed with result 'exit-code'.
sept. 20 13:20:58 ubuntu24 systemd[1]: Failed to start nginx.service - A high performance web server and a reverse proxy server.
dpkg: erreur de traitement du paquet nginx (--configure) :
 le sous-processus paquet nginx script post-installation installé a renvoyé un état de sortie d'erreur 1
dpkg: des problèmes de dépendances empêchent la configuration de nginx-common :
 nginx-common dépend de nginx (<< 1.24.0-2ubuntu7.1.1~); cependant :
 Le paquet nginx n'est pas encore configuré.

dpkg: erreur de traitement du paquet nginx-common (--configure) :
 problèmes de dépendances - laissé non configuré
Traitement des actions différées (« triggers ») pour ufw (0.36.2-6) ...
Aucun rapport « apport » n'a été créé car le message d'erreur indique une erreur consécutive à un échec précédent.
                                                                                                                  Traitement des actions différées (« triggers ») pour man-db (2.12.0-4build2) ...
Des erreurs ont été rencontrées pendant l'exécution :
 nginx
 nginx-common
needrestart is being skipped since dpkg has failed
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

Thank you.

Tags: noble
Paul White (paulw2u)
affects: ubuntu → nginx (Ubuntu)
tags: added: noble
Revision history for this message
Simon Déziel (sdeziel) wrote :

@Adam, may I ask why you are using exit code 0?
I'm more used to exit code 101 when you want to prevent service restarts for example. Also, I just test with 101 and it doesn't prevent the installation.

https://manpages.ubuntu.com/manpages/noble/man8/invoke-rc.d.8.html#status%20codes

Thomas Ward (teward)
Changed in nginx (Ubuntu):
status: New → Incomplete
Revision history for this message
Adam Mosseri (adam0x) wrote :

I think 101 should prevent the service to start automatically (for example in a chroot) and 0 should do nothing (for example for nginx, let the service start) as it was the behaviour in previous releases.

https://people.debian.org/~hmh/invokerc.d-policyrc.d-specification.txt
http://jpetazzo.github.io/2013/10/06/policy-rc-d-do-not-start-services-automatically/

Revision history for this message
Simon Déziel (sdeziel) wrote :

Here's a simple way to reproduce the issue (assuming you have LXD installed):

```
lxc launch ubuntu-daily:24.04 n1
echo "exit 0" | lxc exec n1 -- tee /usr/sbin/policy-rc.d
lxc exec n1 -- chmod +x /usr/sbin/policy-rc.d

lxc exec n1 -- apt-get update -qq
lxc exec n1 -- apt-get install -y nginx

lxc shell n1
```

And once inside `n1`, to learn more about where it fails during postinst:

```
sed -i 's|set -e|set -ex|' /var/lib/dpkg/info/nginx.postinst
apt-get install -f
```

Will give this:

```
Setting up nginx (1.24.0-2ubuntu7.1) ...
+ invoke-rc.d --quiet nginx status
+ ss -nlt sport = 80
+ grep -v ^State
+ [ -z ]
+ invoke-rc.d nginx start
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.
invoke-rc.d: initscript nginx, action "start" failed.
× nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; preset: enabled)
     Active: failed (Result: exit-code) since Fri 2024-09-20 18:29:38 UTC; 6ms ago
       Docs: man:nginx(8)
    Process: 1404 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
        CPU: 2ms

Sep 20 18:29:38 n1 systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
Sep 20 18:29:38 n1 nginx[1404]: 2024/09/20 18:29:38 [emerg] 1404#1404: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
Sep 20 18:29:38 n1 nginx[1404]: nginx: configuration file /etc/nginx/nginx.conf test failed
Sep 20 18:29:38 n1 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Sep 20 18:29:38 n1 systemd[1]: nginx.service: Failed with result 'exit-code'.
Sep 20 18:29:38 n1 systemd[1]: Failed to start nginx.service - A high performance web server and a reverse proxy server.
+ exit 1
```

So `invoke-rc.d nginx start` tries to start (apparently intentional based on Adam's interpretation of exit code 0) but that is tried before the file `/etc/nginx/nginx.conf` is created. Only `/etc/nginx/nginx.conf.dpkg-new` exist at that point.

It's not clear to me why only the `.dpkg-new` file exist but maybe that's due to the split between `nginx` and `nginx-common` as teward mentioned (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1082373)? Trying to install just `nginx-common` doesn't work as that automatically pulls in `nginx` :/

Revision history for this message
Robie Basak (racb) wrote :

Is this the same as https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1082373 ? nginx-common and nginx have (I think incorrectly) a dependency loop, which gets broken by dpkg. If nginx-common isn't configured first, then the nginx postinst fails. The solution is to fix the dependency loop which I believe teward is working on.

Revision history for this message
Thomas Ward (teward) wrote :

I already committed to Debian Salsa an unreleased -3 of nginx that resolves this dependency loop. I am going to unilaterally upload that as an RC fix in Debian. From there we can sync to 25.04 and then SRU fix this with high bugfix priority for 24.10 and 24.04.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.