Hoy acabo de instalar Debian con KDE/Plasma minimo siguiendo la guía que ya he recomendado. Luego de terminar de instalar todo lo necesario, para iniciar el escritorio, abro una consola para terminar de instalar algunos programas de mi preferencia, como Firefox, LibreOffice, VLC, etc. Pero al ejecutar apt-get luego de traerse todos los paquetes y empezar la instalación me encuentro con el siguiente error:

dpkg: atención: `ldconfig' no se ha encontrado en el PATH o no es ejecutable
dpkg: atención: `start-stop-daemon' no se ha encontrado en el PATH o no es ejecutable

o su equivalente en ingles:

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)

El problema se da si ejecuto estos comandos estando logueado con mi usuario y luego me logueo como superusuario(root) mediante su. Si me logueo directamente como root en una consola tty no hay ningún error.

Al estar logueado como root mediante su la variable de sistema PATH(la lista de directorios donde bash busca los programas) tiene los valores que estén seteados para nuestro usuario, no las de root, y no tiene configurado el directorio donde se encuentran ldconfig y start-stop-daemon.

El valor con el que se setea PATH lo podemos editar en el archivo /etc/profile

 #nano /etc/profile

Al inicio del archivo nos vamos a encontrar con algo como:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi

El if esta para determinar si el usuario es root o no. Y las lineas que comienzan con PATH= setean el valor de la variable. La primer linea que comienza con PATH= es la que corresponde al usuario root, y la segunda el resto de los usuarios.

Solución

Si comparamos ambas lineas podemos observar que no se encuentran los directorios /usr/local/sbin, /usr/sbin ni /sbin que son los directorios que nos indica el mensaje de error que deben estar configurados en la variable PATH para el usuario root. Todos estos directorios son los que comienzan con s, en un post anterior ya habíamos comentados cual es la diferencia entre entre sbin y bin

Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin

Por lo tanto editamos la segunda asignación de la variable PATH en el archivo /etc/profile, quedando de la siguiente manera:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games"
fi

Y luego CTRL+X para cerrar y le damos a Y para guardar los cambios, luego de reloguear ya deberíamos tener correctamente seteada la variable de sistema PATH

Este error tambien suele aparecer de otra forma y es para los que usan sudo para ejecutar comandos como superusuarios, en este caso no esta correctamente configurada la variable de sistema PATH, siguiendo la documentación de sudo en la wiki de Debian la solución es sencilla e implica modificar el archivo /etc/sudoers y agregar o modificar la lindea debajo de Defaults env_reset quedando de la siguiente forma:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"