Linuxでsudoをしたとき、環境変数を引き継げなかった

Linuxでsudoをしたとき、環境変数を引き継げなかった。

1. 状況

Debianを利用しているとき、Subversionを利用したい場面があった。そそくさとapt-getでsubversionのクライアントをインストールしようとしたんだけれどうまくいかない。エラーメッセージを見てみるとldconfigが見つからない、と言われている。

エラーの内容は以下の通り

shell> sudo apt-get install subversion
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libneon27-gnutls libserf-0-0 libsvn1
Suggested packages:
subversion-tools db4.8-util
The following NEW packages will be installed:
libneon27-gnutls libserf-0-0 libsvn1 subversion
0 upgraded, 4 newly installed, 0 to remove and 47 not upgraded.
Need to get 0 B/2,490 kB of archives.
After this operation, 7,152 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
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)

2. 解決

これを見る限りどうやらldconfigがPATHに含まれていないか実行権限がないよ、と言われている。試しに手元でldconfigを試してみるけれど確かに実行できない。
locateで場所を探すとldconfig自体は入っているようだ。となると恐らくsudoでapt-getしたとき、PATHが一般ユーザのままでapt-getが走ってて、そのせいでldconfigが見つからないんだろう、ということに。

通常、そのままsudoを利用すると環境変数などはsudoを実行したユーザの物を引き継ぐ。PWDとかの情報も一緒だ。今回のように-uでsudoの実行ユーザを変更していないのでsudoで実行される命令はrootのものになる。
sudoをしたときに新たにrootのPATHなどの環境変数をロードするようにしたい。
manを漁ると出てきた。

-i [command]
The -i (simulate initial login) option runs the shell
specified by the password database entry of the target user
as a login shell.  This means that login-specific resource
files such as .profile or .login will be read by the shell.
If a command is specified, it is passed to the shell for
execution via the shell's -c option.  If no command is
specified, an interactive shell is executed.  sudo attempts
to change to that user's home directory before running the
shell.  The security policy shall initialize the
environment to a minimal set of variables, similar to what
is present when a user logs in.  The Command Environment
section in the sudoers(5) manual documents how the -i
option affects the environment in which a command is run
when the sudoers policy is in use.

 

ということで sudo -iをしてインストールが完了。

「Linuxでsudoをしたとき、環境変数を引き継げなかった」への2件のフィードバック

コメントを残す