Problem Description
When using the dpkg --configure -a command to repair package configuration on a Linux system, you may encounter the following errors:
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
Root Cause
This error typically occurs when you execute the dpkg command after switching to the root user using the su command. When you use su (without the - or -l option), it does not load the full login environment of the target user (e.g., root), especially the PATH environment variable. Consequently, dpkg cannot find essential system tools like ldconfig and start-stop-daemon in the PATH. These tools are usually located in directories such as /usr/sbin or /sbin.
Solutions
The core idea is to ensure that when executing commands as root, you have a complete system environment, particularly a PATH that includes /sbin and /usr/sbin.
Method 1: Use the sudo Command (Recommended)
Use sudo directly to run the command. It preserves the current user's PATH environment variable, which usually already contains the necessary system paths.
sudo dpkg --configure -a
If prompted, enter your current user's password (not the root password).
Method 2: Use su - or su -l to Switch to Root
Use the - or -l option to switch users. This simulates a full login process, loading the root user's configuration files and environment variables.
su -
# or
su -l
# After entering the root password, run the command
dpkg --configure -a
Method 3: Manually Set PATH After Using su
If you have already switched to root using a plain su command, you can manually set the PATH environment variable before running the command.
su
# Enter root password
# Set the PATH environment variable
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Then run the dpkg command
dpkg --configure -a
Additional Notes
ldconfig: Used to create, update, and maintain links and cache for shared libraries, essential for the dynamic linker.start-stop-daemon: A program used to start and stop system daemons.- PATH Environment Variable: A list of directories the system uses to find executable files. The root user's PATH should typically include system administration directories (
/sbin,/usr/sbin).
It is recommended to use Method 1 (sudo) first, as it is more secure and avoids incomplete environment variable issues.