Rootlessを無効にしなくてもOperation not permittedは解決できる
やりたいこと
gemでrubyをアップデート
gemでcocoapodsをインストール
詰まったところ
gemをインストールする際に
sudo(ルート権限)なのにパーミッションエラーになるという問題に直面
その原因がルートレス機能であると判明
ネットに出回っている記事の中に
「リカバリーモードでルートレスを無効にする」
という記事がGoogle検索の上位に表示される
でも、それってちょっと非推奨だよね
ちょっと探してみたら
ルートレスを解除しなくても全然解決できたので
わざわざルートレスを無効にしちゃう人が出ないように記事を書きます。
sudoしてるのにパーミッションエラー
アップデートしたい
[ruby]sudo gem update –system
[/ruby]
エラーログ
[ruby]Updating rubygems-update
Fetching: rubygems-update-2.6.8.gem (100%)
ERROR: While executing gem … (Errno::EPERM)
Operation not permitted – /usr/bin/update_rubygems
ranpuraitozeroichi-no-MacBook-Pro:~ lamplight02$ sudo gem update –system
Updating rubygems-update
ERROR: While executing gem … (Errno::EPERM)
Operation not permitted – /usr/bin/update_rubygems
原因、(SIP:System Integrity Protection)「Rootless」
Rootlessという機能をなんとかしなければいけない。
Rootlessという機能は、簡単に説明すると
セキュリティを強化するために
sudoで/usr/bin/にはアクセスさせないぜ
という機能である
[ruby]ERROR: While executing gem … (Errno::EPERM)
Operation not permitted – /usr/bin/update_rubygems
リカバリーモードを使わない解決方法
セキュリティ面を考えてルートレス機能があるわけで
それを無理やり無効にするのは
忍びない気がした
だから、他の方法で解決する方法を見つけた
sudo gem update –system -n /usr/local/bin
上記のコマンドでできる
[ruby]
sudo gem update –system -n /usr/local/bin
Updating rubygems-update
Successfully installed rubygems-update-2.6.8
Parsing documentation for rubygems-update-2.6.8
Installing ri documentation for rubygems-update-2.6.8
Installing darkfish documentation for rubygems-update-2.6.8
Parsing documentation for rubygems-update-2.6.8
Installing RubyGems 2.6.8
RubyGems 2.6.8 installed
Parsing documentation for rubygems-2.6.8
Installing ri documentation for rubygems-2.6.8
=== 2.6.8 / 2016-10-29
Bug fixes:
* Improve SSL verification failure message. Pull request #1751
by Eric Hodel.
* Ensure `to_spec` falls back on prerelease specs. Pull request
#1755 by André Arko.
* Update vendored Molinillo to 0.5.3. Pull request #1763 by
Samuel Giddins.
=== 2.6.7 / 2016-09-26
Bug fixes:
* Install native extensions in the correct location when using the
`–user-install` flag. Pull request #1683 by Noah Kantrowitz.
* When calling `Gem.sources`, load sources from `configuration`
if present, else use the default sources. Pull request #1699
by Luis Sagastume.
* Fail gracefully when attempting to redirect without a Location.
Pull request #1711 by Samuel Giddins.
* Update vendored Molinillo to 0.5.1. Pull request #1714 by
Samuel Giddins.
=== 2.6.6 / 2016-06-22
Bug fixes:
* Sort installed versions to make sure we install the latest version when
running `gem update –system`. As a one-time fix, run
`gem update –system=2.6.6`. Pull request #1601 by David Radcliffe.
——————————————————————————
RubyGems installed the following executables:
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/gem
Ruby Interactive (ri) documentation was installed. ri is kind of like man
pages for ruby libraries. You may access it like this:
ri Classname
ri Classname.class_method
ri Classname#instance_method
If you do not wish to install this documentation in the future, use the
–no-document flag, or set it as the default in your ~/.gemrc file. See
‘gem help env’ for details.
RubyGems system software updated
[/ruby]
同じようにcocoapodsもインストール
上記と同じような感じでcocoapodsも入れてしまおう
sudo gem install cocoapods -n /usr/local/bin/
[ruby]
sudo gem install cocoapods -n /usr/local/bin/
Successfully installed xcodeproj-1.4.2
Fetching: fourflusher-2.0.1.gem (100%)
Successfully installed fourflusher-2.0.1
Fetching: gh_inspector-1.0.2.gem (100%)
Successfully installed gh_inspector-1.0.2
Fetching: cocoapods-1.1.1.gem (100%)
Successfully installed cocoapods-1.1.1
Parsing documentation for xcodeproj-1.4.2
Installing ri documentation for xcodeproj-1.4.2
Parsing documentation for fourflusher-2.0.1
Installing ri documentation for fourflusher-2.0.1
Parsing documentation for gh_inspector-1.0.2
Installing ri documentation for gh_inspector-1.0.2
Parsing documentation for cocoapods-1.1.1
Installing ri documentation for cocoapods-1.1.1
4 gems installed
ranpuraitozeroichi-no-MacBook-Pro:~
参考になる記事はこれ
コマンドの意味や、解決方法を説明してくれている
[urlpreviewbox url=”https://off.tokyo/blog/2016/12/20/pod-setup/”/]
[urlpreviewbox url=”https://hacknote.jp/archives/19804/”/]