web-dev-qa-db-ja.com

システムで古いバージョンのbashが検出されました! sdkmanを更新するとき

MacOのソフトウェアsdmanを更新しようとしていますが、bashの古いバージョンのエラーが発生します。

rajkumar.natarajan$ sdk update   
    An outdated version of bash was detected on your system!
    We recommend upgrading to bash 4.x, you have:

    3.2.57(1)-release
    Need to use brute force to replace candidates...

しかし、bashのバージョンはすでに最新です。

rajkumar.natarajan$ which bash 
/usr/local/bin/bash   
rajkumar.natarajan$ bash --version   
GNU bash, version 5.0.11(1)-release (x86_64-Apple-darwin16.7.0)
Copyright (C) 2019 Free Software Foundation, Inc.   
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.   
There is NO WARRANTY, to the extent permitted by law.
6

sdmanはバージョン3.2.57である/bin/bashを調べています。これは、macosがそれより新しいものを出荷できないためです。

Appleがそのような古いバージョンのBashをオペレーティングシステムに組み込んでいる理由は、ライセンスに関係しています。バージョン4.0(3.2の後継)以降、BashはGNU General Public License v3(GPLv3)を使用しますが、Appleはサポートしません(したい)。これに関する議論はこことここにあります。 GNU Bashのバージョン3.2は、GPLv2を備えた最後のバージョンであり、Appleが受け入れるため、これに固執します。

ソース

最新バージョンのbashをインストールしましたが、/bin/bashをそれで置き換えていません。これは一部のレガシースクリプト/プログラムを破壊する可能性があるため(可能性は低いですが可能性があります)、実際に行うことはお勧めしません。

私の推奨はその警告を無視することです。 bash v3.2は通常 Shellshock の脆弱性の影響を受けるため、警告が表示されますが、AppleはこれをBash v3.2のバージョンでパッチしました。

その警告を無視できず、本当に/bin/bashを更新する危険を冒したい場合は、バックアップの場所に移動して、新しいbashにシンボリックリンクします。

Sudo mv /bin/bash /bin/bash.bak
Sudo ln -s /usr/local/bin/bash /bin/bash

ただし、これを行うには、 バイパスSIP が必要です。

システム整合性保護を有効または無効にするには、リカバリOSを起動して、ターミナルからcsrutil(1)コマンドを実行する必要があります。

  • マシンを再起動し、起動時にCommandキーとRキーを押したままにして、リカバリOSを起動します。
  • ユーティリティメニューからターミナルを起動します。
  • 次のコマンドを入力します。
    $ csrutil disable
  • マシンでシステム整合性保護を有効または無効にした後、再起動が必要です。
10
jesse_b