[Bug 2037682] [NEW] curtin in-target issues if process uses /proc and new pid namespace is used

Joao Andre Simioni 2037682 at bugs.launchpad.net
Thu Sep 28 21:28:30 UTC 2023


Public bug reported:

Hi Team,

we are facing an issue when running commands "in-target" that rely on /proc/ information, but have been
launched in a new pid namespace (curtin behavior). 

One example is installing a dkms package using late-commands:

autoinstall:
  late-commands:
   - TARGET_MOUNT_POINT=/target curtin in-target -- apt install -y r8168-dkms
   
The dkms script (/usr/sbin/dkms) has a loop dependent on the the /proc/$pid of a spawned process:

(eval "$1" >/dev/null 2>&1) & pid=$!
while [ -d /proc/$pid ]; do

But the /proc is a bind to the default namespace /proc, and lists all the processes, but the new PID
is in the new namespace, so /proc/$pid will refer to a different process or will be non-existent.

Inspecting curtin behavior, here is what is happening:

ChrootableTarget will mount, by default, "/dev", "/proc", "/run", "/sys" to the target system with 
the --bind flag, before running the command, and after that, the command is executed using:

['unshare', '--fork', '--pid', '--', 'chroot', '/target', 'command']

The process pid and /proc will not show the same information.

Trying some possible solutions here, I thought about adding --mount-proc=/target/proc to unshare, 
but that fails:

unshare --mount-proc=/target/proc --fork --pid -- chroot /target hostname
unshare: cannot change /target/proc filesystem propagation: Invalid argument

I see that subp accepts a unshare_pid=False that would avoid creating a new namespace 
(and solving the problem for these scenarios), but I found no way to pass it to the curtin 
in-target command.

Another option would be create the new namespace, mount proc, and run
the command afterward.

Any suggestions on how to solve this?

Thanks

** Affects: curtin
     Importance: Undecided
         Status: Incomplete

** Summary changed:

- curting in-target issues if process uses /proc and new pid namespace is used
+ curtin in-target issues if process uses /proc and new pid namespace is used

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to curtin.
https://bugs.launchpad.net/bugs/2037682

Title:
  curtin in-target issues if process uses /proc and new pid namespace is
  used

Status in curtin:
  Incomplete

Bug description:
  Hi Team,

  we are facing an issue when running commands "in-target" that rely on /proc/ information, but have been
  launched in a new pid namespace (curtin behavior). 

  One example is installing a dkms package using late-commands:

  autoinstall:
    late-commands:
     - TARGET_MOUNT_POINT=/target curtin in-target -- apt install -y r8168-dkms
     
  The dkms script (/usr/sbin/dkms) has a loop dependent on the the /proc/$pid of a spawned process:

  (eval "$1" >/dev/null 2>&1) & pid=$!
  while [ -d /proc/$pid ]; do

  But the /proc is a bind to the default namespace /proc, and lists all the processes, but the new PID
  is in the new namespace, so /proc/$pid will refer to a different process or will be non-existent.

  Inspecting curtin behavior, here is what is happening:

  ChrootableTarget will mount, by default, "/dev", "/proc", "/run", "/sys" to the target system with 
  the --bind flag, before running the command, and after that, the command is executed using:

  ['unshare', '--fork', '--pid', '--', 'chroot', '/target', 'command']

  The process pid and /proc will not show the same information.

  Trying some possible solutions here, I thought about adding --mount-proc=/target/proc to unshare, 
  but that fails:

  unshare --mount-proc=/target/proc --fork --pid -- chroot /target hostname
  unshare: cannot change /target/proc filesystem propagation: Invalid argument

  I see that subp accepts a unshare_pid=False that would avoid creating a new namespace 
  (and solving the problem for these scenarios), but I found no way to pass it to the curtin 
  in-target command.

  Another option would be create the new namespace, mount proc, and run
  the command afterward.

  Any suggestions on how to solve this?

  Thanks

To manage notifications about this bug go to:
https://bugs.launchpad.net/curtin/+bug/2037682/+subscriptions




More information about the foundations-bugs mailing list