我试图安装bsd-mailx
已安装的软件包的实用程序,但我想知道该错误。
这是我得到的错误:
Preconfiguring packages ...
dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: error: 2 expected programs not found in PATH or not executable.
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)
答案1
首先,您真正感兴趣的线路是:
dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
Debian 和 Ubuntu 用户已多次报告这些错误(您实际上可以通过 Google 获取更多信息)。PATH
当用户尝试通过 执行命令时,变量似乎没有正确设置sudo
,这可能就是您想要做的。
解决方案1:设置sudo
默认安全路径
/etc/sudoers
通过在终端中运行来打开visudo
,并确保该文件包含以下行:
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
有关此问题的更多信息可以找到这里(问题和提示> PATH 未设置)。
方案二:直接使用root账户
不要使用sudo
,只需切换到 来root
运行命令。运行以下命令之一来执行此操作:
$ sudo -i
$ su
以 root 身份登录后,只需apt-get
再次运行命令:
# apt-get ...
不过,您可能必须先设置 root PATH
。编辑/root/.bashrc
(当然需要 root 权限),并添加以下行:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
解决方案3:尝试在执行时传递PATH
变量。sudo
只需sudo
在调用前加上变量的重新定义即可PATH
:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin sudo apt-get ...
答案2
不知怎的,我也遇到了同样的问题。
请仔细阅读您的错误消息,您将找到解决方案。有一条注释说:
注意:root 的 PATH 通常应包含 /usr/local/sbin、/usr/sbin 和 /sbin。
然后我检查了我的路径,不知何故我在路径中丢失了 /sbin 。
回显$PATH
然后我添加了,问题就消失了。 :)
导出 PATH="$PATH:/sbin"
查拉姆!
答案3
问题中缺乏描述使得很难确定这种情况下的确切问题,但我最近遇到了同样的问题:
user@debian:su
Password:
root@debian:/home/user/Downloads# dpkg -i [Some package]
dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable
dpkg: error: 2 expected programs not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin
解决方案是使用su -
而不是su
(这通常更好,详见这个问题的答案):
user@debian:su -
Password:
root@debian:~# cd /home/user/Downloads/
root@debian:/home/user/Downloads# dpkg -i [Some package]
答案4
这里显示的解决方案都没有帮助我,所以我将解释发生在我身上的事情以及我做了什么来解决它:
我试图在我的 Q4OS 系统中安装 Insync,但无法安装,因为该应用程序需要 libc6 >= 2.32,而 Q4OS 使用 2.31。我找到了一个 2.32 的 libc6 deb,然后噩梦就开始了。它已经破坏了我的整个系统。apt-get
停止工作,它说系统需要 libc6 2.31 才能正常工作。当时我不知道如何降版本。因此,重新启动后,系统根本无法启动并挂起,并显示启动消息:
A start job is running for Hold until boot process finishes up (Xmin Xs/no limit)
我尝试更改终端但没有成功。希望我的 Linux 运行在 VMWare 下,并且我能够使用 SSH 连接到机器。VM -> SSH -> Connect to SSH...
之后我尝试了很多东西都没有成功。我尝试升级:
sudo apt install upgrade
该消息说我必须运行:
sudo apt --fix-broken install
但是当我尝试运行它时,它说很多软件包将被删除,包括q4os-desktop
它本身。好吧,我接受了条件并尝试了。我还能失去什么?
之后,事情变得更糟。我无法运行任何东西。我在这个问题上遇到了类似的错误:
Preconfiguring packages ...
dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: error: 2 expected programs not found in PATH or not executable.
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)
但问题不在于 PATH 本身,而是 ldconfig 是 libc6 的一部分,并且已被删除。我无能为力,因为几乎所有事情都取决于 libc6 和 ldconfig。我尝试从源代码编译 libc6,但没有成功。它有很多依赖项,当我尝试安装依赖项时,该库尝试使用 libc6 的某些内容。一种依赖循环。
因此,我使用 Q4OS live CD 重新启动系统,然后将二进制 ldconfig 复制到/usr/sbin/ldconfig
.美好的!现在,它又apt-get
开始工作了(不完美,但是......)。所以我发现了如何降级库:
sudo apt install libc6=2.31-13+deb11u3
如果您不确定要使用哪个版本,请运行:
apt list --installed | grep libc6
Live CD 内。输出应该类似于:
libc6/stable,now 2.31-13+deb11u3 amd64 [installed]
之后,我能够再次安装 Q4OS:
sudo apt install q4os-desktop
重启后,一切恢复正常!
但现在当我运行 Insync 时,应用程序会在 5 秒后崩溃。