当我尝试使用命令时- 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