0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Error opening file /tmp/ct.shutdown, err = Operation not permitted からの回復方法

Posted at

Error opening file /tmp/ct.shutdown, err = Operation not permitted からの回復方法

朝、iMacを立ち上げると、以下のようなエラーが出て、vagrantが動かなくなり、回復に結構手間取りました。

スクリーンショット 2016-10-18 8.57.26.png

CoreTelephony tracing has failed, you may be out of disk space.
Details 'Error opening file /tmp/ct.shutdown, err = Operation not permitted

ディスクの容量が足りないかもしれません、みたいなことを言われていますが、そこは全然関係ありません。

以下に原因と回復手順を残しておきます。

原因

ネット上の情報では、いくつか原因があるように見受けられましたが、筆者の場合は、
/private/tmp
ディレクトリのパーミションに drwxrwxrwt@ のように、EA(Extended Attriutes)が付与されており、拡張属性の内容が、
com.apple.rootless
だったためです。

なぜ/private/tmp に rootless が付与されたのかはわかりません。

ちなみにEAについては、
http://d.hatena.ne.jp/kanonji/20100912/1284292517
をご覧ください。

EAはMACでファイルに別途付与される拡張情報です。
ここに、El Capitanから、rootlessという属性が追加されたそうです。
http://applech2.com/archives/45140708.html

rootlessの属性は、root権限でもファイル・ディレクトリを編集できないようにする特殊な属性です。
rootlessはセキュリティを高めるための仕組みですが、今回はこの属性が/private/tmp に付与されているため、幾つかのプログラムの起動と、プログラムのインストールに影響が出ました。

/private/tmp ディレクトリにrootlessが付与されてしまっているかどうかは、

xattr /private/tmp

で分かります。

解決方法

基本的には
https://www.reddit.com/r/mac/comments/55s9yg/getting_an_error_message_on_startup_coretelephony/
の手順にのっとります。

簡単に翻訳すると、

この問題は /tmp ディレクトリのパーミションが原因です。
このパーミションを変更しようとしても、通常は変更できません。
システムは、SIPと呼ばれる'System Integrity Protection'によって守られているからです。
パーミションを変更する場合は、先にSIPを無効化する必要があります。

こちらを試してください:

MACをリカバリーモードで起動してください。
MACの再起動時に、Command + R を押しっぱなしにします。アップルのロゴが現れるまで押し続けましょう。

画面上部のメニューのユーティリティからターミナルを起動します。

ターミナル画面で、'csrutil disable'と入力してエンターを押します。

MACを再起動します。

MACの再起動後、コマンドを打ち込みます。 'sudo chmod 1777 /tmp'
もしくは、OnyX 3.1.8 for OS X 10.11 El Capitanをダウンロードして、OnyXを使用してパーミションを変更します。
(筆者はアプリを使用していないので、上のアプリへのリンクは原文を参照してください)

アプリでのパーミションの変更が終わるか、'sudo chmod 1777 /tmp'のコマンドがうまくいったら、MACを再起動します。

パーミションを変更できたら、以下の1〜4のステップを実行して、SIPを有効にしてください。

  1. 先ほどと同じようにMACの再起動中に Command + Rをアップルのロゴが現れるまで押し続けます。
  1. ユーティリティからターミナルを開きます。
  2. ターミナルで 'csrutil enable' と入力して、Enterを押します。
  3. MACを再起動します。

(補足:/tmp ディレクトリは /private/tmp ディレクトリへのシンボリックリンクです。)

ただし、私の場合は、上記のようにSIPを切っても、/private/tmp の権限を変更できませんでした。

また、以下のようにEAを除去しようとしてみましたがダメでした。

su -
xattr -c /private/tmp
xattr -d com.apple.rootless /private/tmp

(SIPがオフでもrootlessは除去できないのでしょうか。今度時間がある時にちゃんと検証したいです)

最終的には、SIPを無効化した後、一旦 /private/tmp ディレクトリを、以下のように削除後、

su -
rm -r /private/tmp

再度ディレクトリを作成して

mkdir /private/tmp

パーミションを付与しなおすことで直りました。

chmod 1777 /private/tmp

以上、参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?