ubuntu-wsl2-systemd-script icon indicating copy to clipboard operation
ubuntu-wsl2-systemd-script copied to clipboard

nsenter: cannot open /proc/320/ns/time: No such file or directory

Open jototland opened this issue 5 years ago • 30 comments
trafficstars

I get this after running your script. nsenter: cannot open /proc/320/ns/time: No such file or directory

Luckily, I can "wsl -e bash --norc" and revert the changes to /etc/bash.bashrc. But what is wrong with my /proc since nsenter doesn't like it?

Windows version 19041.388 WSL 2 Pengwin

jototland avatar Aug 09 '20 12:08 jototland

Ok, I tested again with ubuntu instead of pengwin, and the script worked just fine. I guess that might be the reason the script has ubuntu in it's name :-)

I would still like to make it work for pengwin, though...

jototland avatar Aug 10 '20 06:08 jototland

https://github.com/DamionGans/ubuntu-wsl2-systemd-script/blob/4d221c4f9bf89187eee7cd7ee298e5344190b191/enter-systemd-namespace#L41

this error because nsenter CMD -a maybe include time namespaces, you can diff ubuntu and pengwin nsenter --help

The time namespace support has been merged in the 5.6 kernel.

khs1994 avatar Oct 10 '20 11:10 khs1994

Please see https://github.com/yuk7/ArchWSL2/issues/21#issuecomment-663981023

eternalphane avatar Oct 13 '20 07:10 eternalphane

TL;DR: Change options of nsenter from -a to -m -p

Thank you @eternalphane for the information, but this could be confusing for some people.

Based on that data, this is how to fix it:

  • Replace (copy and paste) the following lines of enter-systemd-namespace file. You can do it on Windows side.
USER_HOME="$(getent passwd | awk -F: '$1=="'"$SUDO_USER"'" {print $6}')"
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
    if [ -n "$1" ] && [ "$1" != "bash --login" ] && [ "$1" != "/bin/bash --login" ]; then
        exec /usr/bin/nsenter -t "$SYSTEMD_PID" -m -p \
            /usr/bin/sudo -H -u "$SUDO_USER" \
            /bin/bash -c 'set -a; [ -f "$HOME/.systemd-env" ] && source "$HOME/.systemd-env"; set +a; exec bash -c '"$(printf "%q" "$@")"
    else
        exec /usr/bin/nsenter -t "$SYSTEMD_PID" -m -p \
            /bin/login -p -f "$SUDO_USER" \
            $([ -f "$USER_HOME/.systemd-env" ] && /bin/cat "$USER_HOME/.systemd-env" | xargs printf ' %q')
    fi
    echo "Existential crisis"
    exit 1
fi
  • Get inside the broken Linux distribution:
> wsl bash --norc
  • Reinstall it:
$ bash ubuntu-wsl2-systemd-script.sh --force
  • Worked on:
    • WSL2 + Ubuntu-20.10

pablorq avatar Nov 23 '20 11:11 pablorq

Worket on Debian 11 release! Thank you!

gskm avatar Aug 26 '21 03:08 gskm

Thanks @pablorq ! This was needed for me to get in working on WSL2+Ubuntu after release upgrade to 21.04!

s4pfyr avatar Sep 11 '21 12:09 s4pfyr

I'm glad it helps!

:slightly_smiling_face:

pablorq avatar Sep 13 '21 06:09 pablorq

@s4pfyr How exactly did you do it? After upgrading, mine started throwing Failed to enable unit: Transport endpoint is not connected (Docker) and nsenter: cannot open /proc/9286/ns/time: No such file or directory when running exec sudo nsenter -m -u -i -n -p -C -r -w -t $(pidof -s systemd) -a su - $LOGNAME

This was messy for me before, so I enabled systemd by doing this

sudo apt-get install -yqq daemonize dbus-user-session fontconfig
sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target

hyoretsu avatar Oct 01 '21 23:10 hyoretsu

@hyoretsu I did not have the nsenter problem after switching the flags like @pablorq suggested. Regarding docker: I had problems with iptables and needed to do sudo update-alternatives --config iptables and select legancy mode. Try starting the docker daemon with sudo dockerd --debug to figure out whats going on with docker.

s4pfyr avatar Oct 17 '21 11:10 s4pfyr

I'm even unable to run the install script with --force:

nsenter: cannot open /proc/830/ns/time: No such file or directory

ghost avatar Jan 05 '22 09:01 ghost

I'm even unable to run the install script with --force:

nsenter: cannot open /proc/830/ns/time: No such file or directory

There are two commands, they each work in different cases: exec sudo nsenter -m -u -i -n -p -C -r -w -t $(pidof systemd) -a su - $LOGNAME exec sudo nsenter -m -u -i -n -p -C -r -w -t $(pidof systemd) -m -p su - $LOGNAME (just noticed mp being repeated, might not be necessary)

If that doesn't work, I believe you need to do it manually

I managed to successfully update to 21.10 btw https://github.com/microsoft/WSL/issues/5126#issuecomment-1001240706

hyoretsu avatar Jan 05 '22 13:01 hyoretsu

ok so have I understood it correctly. I need to replace the LOGNAME with my home user name and pidof systemd. But how can I find the PID of systemd if systemd doesnt work? (Or even if it works)

ghost avatar Jan 07 '22 09:01 ghost

ok so have I understood it correctly. I need to replace the LOGNAME with my home user name and pidof systemd. But how can I find the PID of systemd if systemd doesnt work? (Or even if it works)

top systemd/htop systemd though keep in mind that the PID changes sometimes.

hyoretsu avatar Jan 07 '22 15:01 hyoretsu

I try

wsl bash --norc
nsenter: cannot open /proc/26/ns/time: No such file or directory

it does not work, but

wsl --exec /usr/bin/sh
$

work and then I used @pablorq's method.

IgorOhrimenko avatar Jan 10 '22 16:01 IgorOhrimenko

I successfully changed enter-systemd-namespace, but even after reinstalling the script I get the same error. What am I supposed to do?

PinkSerenity avatar Feb 11 '22 10:02 PinkSerenity

Check your the endfile /usr/sbin/enter-systemd-namespace, if need change it.

IgorOhrimenko avatar Feb 13 '22 07:02 IgorOhrimenko

Apparently, changing it before rebooting (so before the error happens) and not reinstalling the script as opposed to what @pablorq suggested works like a charm (at least for me). Thank you all very much.

PinkSerenity avatar Feb 13 '22 17:02 PinkSerenity

As I seen in: https://www.csa.iisc.ac.in/~vg/teaching/E0-256/slides/lxc-slide-deck.pdf /proc/pid/ns/time is new, so I think that there may be patch for update, or just downgrade some services.

Also: when running: lsns -l, you should see the namespaces list for linux kernel. If you cannot see 'time', then you should provide support them.

For me - I don't know how can I downgrade the version, and which one? (Or running a new patch), but I presume this can be solved by simple commands.

eitanmiz avatar Mar 28 '22 08:03 eitanmiz

I ran this script ( ubuntu-wsl2-systemd-script) originally but did not have success. So I waited for upgrade to 22.04 like most suggested and after upgrading I run into this error: nsenter: cannot open /proc/27/ns/time: No such file or directory

[process exited with code 1 (0x00000001)]

wsl -e /usr/libexec/nslogin /bin/bash in command prompt allows me to the enter the terminal. How can I get my linux terminal to open without error now?

DataMadeEEZY avatar Apr 29 '22 22:04 DataMadeEEZY

Thanks @pablorq, worked for me!

Pflegusch avatar May 03 '22 15:05 Pflegusch

Hi there,

I updated from Ubuntu 20.04 to 22.04 via console (do-release-upgrade).

Unfortunately the solution of @pablorq only works partly. The system starts now, but only it is not possible to login as normal user. wsl -u root works totally fine and I can login. Systemd runs fine.

root@MADAGASKAR:/mnt/c/Users/myuser# ps aux | grep systemd
root          43  0.0  0.0   6140   932 ?        Ss   21:05   0:00 /usr/bin/unshare --fork --pid --mount-proc bash -c export container=wsl; mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc; exec /lib/systemd/systemd --unit=basic.target
root          45 99.4  0.0  21940 11544 ?        Rs   21:05   1:37 /lib/systemd/systemd --unit=basic.target
root          93 32.8  0.9 187216 147168 ?       S<s  21:05   0:32 /lib/systemd/systemd-journald
root         119  0.2  0.0  22820  6136 ?        Ss   21:05   0:00 /lib/systemd/systemd-udevd
systemd+     140  0.0  0.0  16064  6548 ?        Ss   21:05   0:00 /lib/systemd/systemd-networkd
root         305  0.0  0.0  11992  5704 pts/1    Ss+  21:06   0:00 sudo /usr/sbin/enter-systemd-namespace
root         314  0.0  0.0  11992   884 pts/2    Ss   21:06   0:00 sudo /usr/sbin/enter-systemd-namespace
root         315  0.0  0.0   7740  3556 pts/2    S+   21:06   0:00 /bin/bash --norc /usr/sbin/enter-systemd-namespace
root         319  0.0  0.0   7740  1572 pts/2    S+   21:06   0:00 /bin/bash --norc /usr/sbin/enter-systemd-namespace
root         323  0.0  0.0   6868  2376 pts/0    S+   21:06   0:00 grep --color=auto systemd

tail -f /var/log/syslog gives

systemd-fstab-generator[14]: Failed to create unit file /run/systemd/generator/-.mount, as it already exists. Duplicate entry in /etc/fstab?
systemd-sysv-generator[22]: Failed to create unit file /run/systemd/generator.late/hddtemp.service: File exists
systemd-sysv-generator[22]: Failed to create unit file /run/systemd/generator.late/apport.service: File exists
systemd-journald[32]: File /var/log/journal/cad812440ce02ca8f59723955f259f43/system.journal corrupted or uncleanly shut down, renaming and replacing.
systemd-journald[32]: Failed to read journal file /var/log/journal/cad812440ce02ca8f59723955f259f43/user-1000.journal for rotation, trying to move it out of the way: Device or resource busy
systemd-journald[32]: Failed to read journal file /var/log/journal/cad812440ce02ca8f59723955f259f43/user-1000.journal for rotation, trying to move it out of the way: Device or resource busy

File system is not full (332G free):

 Dateisystem    Größe Benutzt Verf.     Verw% Eingehängt auf
 /dev/sdc          251G   88G      151G   37%      /
 drvfs                953G   621G     332G   66%     /mnt/c

After login (myuser is my sudo user):

PS C:\Users\myuser> wsl -u myuser
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.10.102.1-microsoft-standard-WSL2 x86_64)
[...]
System information as of Do 12. Mai 20:39:56 CEST 2022
System load:  1.38037109375       Processes:             11
Usage of /:   35.5% of 250.98GB   Users logged in:       0
Memory usage: 2%                  IPv4 address for eth0: 172.21.148.45
Swap usage:   0%

Letzte Anmeldung: Donnerstag, 12. Mai 2022, 20:35:47 CEST auf pts/0

Login nach 60 Sekunden wegen 
Zeitüberschreitung abgebrochen.
# Login canceld after 60 seconds

What I found: the variable $HOME_USER which is used in /usr/sbin/enter-systemd-namespace is empty, if used in shell.

That#s why getent passwd | awk -F: '$1=="'"$SUDO_USER"'" {print $6}'returns nothing.

I also tried to "trick" the script by setting the user and users home manually ...

# USER_HOME="$(getent passwd | awk -F: '$1=="'"$SUDO_USER"'" {print $6}')"
export USER_HOME="/home/myuser"
export SUDO_USER="myuser"

... also here: the sytem starts, but login with normal user (!) is canceled after 60 seconds without success.

With the last method, $HOME/.systemd-env is created correct:

root@MADAGASKAR:/home/apos# cat .systemd-env
DISPLAY=":0"
HOSTTYPE="x86_64"
PULSE_SERVER="/mnt/wslg/PulseServer"
PWD="/home/apos"
TERM="xterm-256color"
WAYLAND_DISPLAY="wayland-0"
WSLENV="WT_SESSION:BASH_ENV/u:WT_PROFILE_ID"
WSL_DISTRO_NAME="Ubuntu-20.04"
WSL_INTEROP="/run/WSL/1027_interop"
WT_PROFILE_ID="{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}"
WT_SESSION="b342d5dc-46b4-4253-a7ac-df7a4d0a6f7b"
XDG_RUNTIME_DIR="/mnt/wslg/runtime-dir"

If I edit /etc/bash.bashrc and alter the first line to [ "$USER" == "root" ] && source /usr/sbin/start-systemd-namespace

start wsl -u root once, so systemd is running - I can start alls apps via Startmenü. Also Xterm.

Any idea?

Cheers Axel

apos avatar May 12 '22 18:05 apos

TL;DR: Change options of nsenter from -a to -m -p

This works perfectly after using do-release-upgrade to 21.10 Impish. No need to reinstall though, that made it break again for me.

alanmburr avatar Jul 12 '22 17:07 alanmburr

USER_HOME="$(getent passwd | awk -F: '$1=="'"$SUDO_USER"'" {print $6}')"
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
    if [ -n "$1" ] && [ "$1" != "bash --login" ] && [ "$1" != "/bin/bash --login" ]; then
        exec /usr/bin/nsenter -t "$SYSTEMD_PID" -m -p \
            /usr/bin/sudo -H -u "$SUDO_USER" \
            /bin/bash -c 'set -a; [ -f "$HOME/.systemd-env" ] && source "$HOME/.systemd-env"; set +a; exec bash -c '"$(printf "%q" "$@")"
    else
        exec /usr/bin/nsenter -t "$SYSTEMD_PID" -m -p \
            /bin/login -p -f "$SUDO_USER" \
            $([ -f "$USER_HOME/.systemd-env" ] && /bin/cat "$USER_HOME/.systemd-env" | xargs printf ' %q')
    fi
    echo "Existential crisis"
    exit 1
fi

it works on wsl2 + Ubuntu 22.04.1

decli avatar Aug 13 '22 15:08 decli

https://github.com/DamionGans/ubuntu-wsl2-systemd-script/issues/36#issuecomment-1214179638 working for me !!! THANK"S you save my life

danztensai avatar Oct 10 '22 03:10 danztensai

bash ubuntu-wsl2-systemd-script.sh --force

@pablorq thanks for the save, however worked for me after running bash ubuntu-wsl2-systemd-script.sh --force with sudo

Lestat06 avatar Dec 02 '22 11:12 Lestat06

Thanks @jototland for opening the ticket, and thanks @pablorq for the simplification of the fix! Had to use this fix on WSL2+Ubuntu after release upgrade to 22.04.

cferrante avatar Dec 16 '22 19:12 cferrante

Hi guys I've upgraded 20.04 to 22.04, I've got the problem with /proc/xx/ns/time, I've changed the enter-systemd-namespace ; the problem /proc ... was fixed but when I start wsl,

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.79.1-microsoft-standard-WSL2 x86_64)

  • Documentation: https://help.ubuntu.com
  • Management: https://landscape.canonical.com
  • Support: https://ubuntu.com/advantage

System information as of sam. 31 déc. 2022 18:33:48 CET

System load: 0.830078125 Processes: 9 Usage of /: 6.7% of 250.92GB Users logged in: 0 Memory usage: 4% IPv4 address for eth0: 172.23.118.163 Swap usage: 0%

  • Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s just raised the bar for easy, resilient and secure K8s cluster deployment.

    https://ubuntu.com/engage/secure-kubernetes-at-the-edge

3 mises à jour peuvent être appliquées immédiatement. Pour afficher ces mises à jour supplémentaires, exécuter : apt list --upgradable

Last login: Sat Dec 31 18:23:02 CET 2022 on pts/0

then I've got "Login timed out after 60 seconds."

after some investigations, i've found the command "getent password" never end any idea ? thanks

ervalade avatar Dec 31 '22 17:12 ervalade

Was fixed in nsenter, see https://github.com/util-linux/util-linux/issues/2059

ringerc avatar Feb 06 '23 05:02 ringerc

Worked on WSL2 + Ubuntu 22.04, also Thanks @pablorq

icrc-aasselineau avatar Mar 14 '23 19:03 icrc-aasselineau

TL;DR: Change options of nsenter from -a to -m -p

Thank you @eternalphane for the information, but this could be confusing for some people.

Based on that data, this is how to fix it:

  • Replace (copy and paste) the following lines of enter-systemd-namespace file. You can do it on Windows side.
USER_HOME="$(getent passwd | awk -F: '$1=="'"$SUDO_USER"'" {print $6}')"
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
    if [ -n "$1" ] && [ "$1" != "bash --login" ] && [ "$1" != "/bin/bash --login" ]; then
        exec /usr/bin/nsenter -t "$SYSTEMD_PID" -m -p \
            /usr/bin/sudo -H -u "$SUDO_USER" \
            /bin/bash -c 'set -a; [ -f "$HOME/.systemd-env" ] && source "$HOME/.systemd-env"; set +a; exec bash -c '"$(printf "%q" "$@")"
    else
        exec /usr/bin/nsenter -t "$SYSTEMD_PID" -m -p \
            /bin/login -p -f "$SUDO_USER" \
            $([ -f "$USER_HOME/.systemd-env" ] && /bin/cat "$USER_HOME/.systemd-env" | xargs printf ' %q')
    fi
    echo "Existential crisis"
    exit 1
fi
  • Get inside the broken Linux distribution:
> **wsl -e bash --norc**
  • Reinstall it:
$ **sudo** bash ubuntu-wsl2-systemd-script.sh --force
  • Worked on:

    • WSL2 + Ubuntu-20.10

eergeek avatar Jul 08 '23 18:07 eergeek