收到此错误无法获取 /etc/passwd 锁定:参数无效

收到此错误无法获取 /etc/passwd 锁定:参数无效

当我尝试使用命令时- sudo apt install libudev-dev它给了我这个错误

Failed to take /etc/passwd lock: Invalid argument
dpkg: error processing package systemd (--configure):
 installed systemd package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 systemd
E: Sub-process /usr/bin/dpkg returned an error code (1)

请告诉我该怎么办

答案1

我偶然发现了这个东西,我试过了,它有效!可能也对你有用:https://databasefaqs.com/sub-process-usr-bin-dpkg-returned-an-error-code-1/

sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_silent

sudo mkdir /var/lib/dpkg/info

sudo apt-get update

sudo apt-get -f install

sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_silent

sudo rm -rf /var/lib/dpkg/info

sudo mv /var/lib/dpkg/info_silent /var/lib/dpkg/info

sudo apt-get update

sudo apt-get upgrade

完毕!

答案2

systemd.postinsts脚本调用systemd-sysusers,然后它尝试使用 fcntl F_OFD_SETLKW 获取锁,但失败了。

strace 输出sudo systemd-sysusers

openat(AT_FDCWD, "/etc/.pwd.lock", O_WRONLY|O_CREAT|O_NOCTTY|O_NOFOLLOW|O_CLOEXEC, 0600) = 3
fcntl(3, F_OFD_SETLKW, {l_type=F_WRLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = -1 EINVAL (Invalid argument)

WSL1 不支持以下类型的锁:https://github.com/Microsoft/WSL/issues/1927

该票是关于 F_SETLK 的,但它可能与 F_OFD_SETLKW 的情况相同。

虽然该票已关闭,但其标签fixed-in-wsl2意味着没有计划在 WSL1 中修复它。

答案3

来这里是为了寻找 WSL 特有的问题。我在这里找到了一些其他人的解决方案:https://github.com/microsoft/WSL/issues/10397

其要点如下:

$ sudo mv /var/lib/dpkg/info/systemd-timesyncd.postinst /tmp/
$ sudo mv /var/lib/dpkg/info/systemd.postinst /tmp/
$ sudo dpkg --configure -a

这应该允许 dpkg 完成“配置”systemd(因为我们删除了有问题的脚本)

之后你可以把脚本放回去并继续 apt upgrade

$ sudo mv /tmp/systemd-timesyncd.postinst /var/lib/dpkg/info/
$ sudo mv /tmp/systemd.postinst /var/lib/dpkg/info/
$ sudo apt upgrade

相关内容