dpkg 在 PATH 变量中找不到 ldconfig/start-stop-daemon

dpkg 在 PATH 变量中找不到 ldconfig/start-stop-daemon

我试图安装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 秒后崩溃。

相关内容