sudo「コマンドが見つかりません」PATHが初期化されているときの対処法

sudo でコマンドを実行すると、「command not found」とエラーに。環境変数 PATH が通っていないと思って設定しても変わらず。実は sudoers の設定でセキュリティ上環境変数が初期化されている。そのときの対処備忘メモ。

現象

  1. sudo でコマンドを実行
  2. 「command not found」 (コマンドが見つかりません) とエラーに
  3. .bash_profile にパスを設定してみる
    vi ~/.bash_profile
    
    PATH=$PATH:$HOME/bin:/sbin:/usr/sbin
    

    から

    PATH=$PATH:$HOME/bin:/sbin:/usr/sbin:/usr/local/bin
    

    に変更。

  4. sudo でコマンドを実行
  5. 再び「command not found」 (コマンドが見つかりません) とエラーでパスが通っていない

さらに突き詰めると、

sudoers の env_reset オプションが有効になっている

原因

sudoers の env_reset オプションが有効になっている場合、セキュリティ上環境変数が初期化されて secure_path に設定しているパスが使われるので、環境変数 PATH が通らない。

解決

3つの方法でパスを通す

sudoers はデフォルトでは env_reset オプションが有効になっている。無効化するか、環境変数を引き継ぐか、または secure_path にパスを設定することで環境変数 PATH を通す。

sudoers は visudo コマンドで編集できる。設定が間違っていたらエラーチェックもしてくれるので、直接ファイルを編集することは控える。

1. 無効化する場合

コメントアウトして env_reset オプションを無効化。

#Defaults env_reset

2. 環境変数を引き継ぐ場合

以下を追記

Defaults env_keep += "PATH"

そして以下をコメントアウト

#Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

.bash_profile に設定したパスが通ります。

3. パスを設定する場合

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

から

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

に変更してパスを追加

sudo でコマンドを実行して確認。
complete!!

教訓

環境変数 PATH の設定の他、env_reset が有効化されているかどうかも確認しよう。

関連サイト

管理画面のUIを刷新したWordPressプラグイン「Multi Device Switcher」をアップデート

WordPressプラグイン「Multi Device Switcher」をアップデートしました。

WordPress 3.8 へのメジャーアップデートで WordPress の管理画面が刷新されました。それに伴い、WordPressプラグイン「Multi Device Switcher」も管理画面のUIを新しく設計し見直しました。

続きを読む "管理画面のUIを刷新したWordPressプラグイン「Multi Device Switcher」をアップデート"

Facebook利用者動態調査 World 2013

去年の「Facebook利用者動態調査 World 2012」に続いて、今年もグローバルに見渡して調べてみた。

各国の人口当たりシェアをメインに、総人口のほか、経済の基礎的条件 (ファンダメンタルズ) の一つの指標として一人当たり国内総生産を追加。G7, G20の主要国別やOECD (経済協力開発機構) やASEAN (東南アジア諸国連合) など地域機構、国際機関別に分けてみたり、人口当たりシェアの前年比較も。

集計方法

  • 2013/9/23に調査を実施
  • 「Facebookに広告を掲載」の広告の対象に表示される数値を集計。数値に誤差あり。
  • 総人口数は、United Nations, World Population Prospects: The 2012 Revision, Total population (both sexes combined) by major area, region and country, annually for 1950-2100 (thousands), Estimates, 1950-2010 の2010年から
    http://esa.un.org/wpp/excel-Data/population.htm
  • 一人当たり国内総生産は、International Monetary Fund, World Economic Outlook Database, April 2012, 5 Report for Selected Countries and Subjects から
続きを読む "Facebook利用者動態調査 World 2013"

Facebook利用者動態調査 Japan 2013

去年に続き、Facebookの「Facebookに広告を掲載」から利用者動態を調べてみた。去年の「Facebook利用者動態調査 Japan 2012」はこちら。

調査の内容は、性別構成、地域別構成、人口当たりシェア、年代別構成の4つ。

集計方法

続きを読む "Facebook利用者動態調査 Japan 2013"

MySQL Community Server 5.6.x にアップグレード (Mac OS X)

データベースエンジン InnoDB (イノデービー) やレプリケーションが大幅に改善した MySQL 5.6。Mac OS X (v10.8.3) にある MySQL (v5.5.28) を バージョン 5.6.x にアップグレード。データの移行と環境構築をしてみた。

アップグレードする前に MySQL のデータをバックアップすることをおすすめします。

  1. 環境設定パネルやコンソールを使って稼働中の MySQL をいったん停止します。
  2. Download MySQL Community Server から MySQL の最新バージョン、Mac OS X ver. 10.7 (x86, 64-bit), DMG Archive (mysql-5.6.x-osx10.7-x86_64.dmg) をダウンロード。
  3. mysql-5.6.x-osx10.7-x86_64.dmg をダブルクリックして展開。
  4. mysql-5.6.x-osx10.7-x86_64.pkg をダブルクリック。Macのセキュリティ設定上、ダイアログボックスが表示される場合は、いったん閉じて mysql-5.6.x-osx10.7-x86_64.pkg を「control + クリック (右クリック)」でコンテキストメニューを表示。「開く」メニューをクリック。ダイアログボックスの「開く」ボタンを押します。

  5. インストーラーに沿ってインストール。
  6. 必要に応じて MySQLStartupItem.pkg をダブルクリックしてインストール。
  7. MySQL.prefPane もダブルクリック 。環境設定パネルを置き換えます。
  8. インストール完了。

MySQLデータの移行

前バージョンのデータベースのデータを最新バージョンの MySQL へ。ごっそり置き換えます。

ターミナル上で、

$ sudo cp -pfR /usr/local/mysql-5.5.28-osx10.6-x86_64/data /usr/local/mysql-5.6.x-osx10.7-x86_64/

データ移行完了。

MySQL を起動

ターミナル上で

$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start

または、アップルメニュー「システム環境設定 > MySQL」から「Start MySQL Server」ボタンを押します。stopped から runing に。

DBD::mysql アップグレード

Movable Type が動かず。

install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted. Compilation failed in require.
$ cpanm DBD::mysql

で、DBD::mysql をアップグレードすると

Library not loaded: libmysqlclient.18.dylib でエラーに

Error: Can't load '/private/var/root/.cpanm/work/1365857788.17684/DBD-mysql-4.023/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/private/var/root/.cpanm/work/1365857788.17684/DBD-mysql-4.023/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Library not loaded: libmysqlclient.18.dylib

前バージョンの libmysqlclient.18.dylib にシンボリックリンクを張っているのでエラーに。最新バージョンの libmysqlclient.18.dylib にシンボリックリンクを張り替える。

$ rm /usr/lib/libmysqlclient.18.dylib
$ ln -s /usr/local/mysql-5.6.x-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

再度アップグレード。

$ cpanm DBD::mysql

Movable Type が動いた。

MySQL 5.6.x のアップグレード完了。

最近の投稿

カテゴリー

アーカイブ