Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 16164] ファイルの概要

このコミットは、Go言語のディストリビューションにおけるmacOS (Darwin) 用のインストーラースクリプト preinstall に実行権限を追加するものです。具体的には、misc/dist/darwin/scripts/preinstall ファイルのパーミッションを 100644 (rw-r--r--) から 100755 (rwxr-xr-x) へ変更しています。これにより、インストーラーがこのスクリプトを正しく実行できるようになり、Goのインストールプロセスにおける特定の問題を解決します。

コミット

commit 1d1142f17834f75812448d54ce7a7abeebdf86c3
Author: Rob Pike <r@golang.org>
Date:   Thu Apr 11 13:40:14 2013 -0700

    misc/dist/darwin: add execute bit to preinstall
    Fixes #5258.
    
    R=golang-dev, iant, minux.ma
    CC=golang-dev
    https://golang.org/cl/8682043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/1d1142f17834f75812448d54ce7a7abeebdf86c3

元コミット内容

misc/dist/darwin: add execute bit to preinstall
Fixes #5258.

R=golang-dev, iant, minux.ma
CC=golang-dev
https://golang.org/cl/8682043

変更の背景

このコミットは、Go言語のインストーラーがmacOS上で正しく動作しないという問題(Issue 5258)を解決するために行われました。具体的には、macOSのパッケージインストーラー(pkgファイル)が実行する preinstall スクリプトに実行権限が不足していたことが原因でした。

通常、macOSのインストーラーパッケージは、インストール前後に特定のスクリプトを実行する機能を持っています。これらのスクリプトは、パッケージの展開や設定の変更など、インストールプロセスをカスタマイズするために使用されます。preinstall スクリプトは、パッケージの内容がディスクに書き込まれる前に実行されるスクリプトです。

Issue 5258の報告によると、Goのインストーラーパッケージに含まれる preinstall スクリプトが、インストーラーによって実行される際に「Permission denied」エラーが発生していました。これは、スクリプトファイル自体に実行権限(execute bit)が設定されていなかったためです。インストーラーは、実行権限のないファイルをスクリプトとして実行しようとしたため、エラーとなり、Goのインストールが失敗するか、不完全な状態になる可能性がありました。

この問題は、Goのディストリビューションパッケージのビルドプロセスにおいて、preinstall スクリプトが作成される際に、そのパーミッションが適切に設定されていなかったことに起因します。このコミットは、その根本原因を修正し、スクリプトが常に実行可能であることを保証することで、macOSユーザーがGoをスムーズにインストールできるようにすることを目的としています。

前提知識の解説

1. ファイルパーミッション (Unix/Linux/macOS)

Unix系オペレーティングシステム(macOSも含む)では、ファイルやディレクトリにはアクセス権限が設定されています。これは、誰がそのファイルに対して何ができるかを制御します。パーミッションは通常、3つのカテゴリ(所有者、グループ、その他)と3つのタイプ(読み取り、書き込み、実行)で表現されます。

  • 読み取り (r): ファイルの内容を読み取ることができる。ディレクトリの場合、その内容をリスト表示できる。
  • 書き込み (w): ファイルの内容を変更できる。ディレクトリの場合、その中のファイルを作成、削除、名前変更できる。
  • 実行 (x): ファイルをプログラムとして実行できる。ディレクトリの場合、その中に入ることができる。

これらのパーミッションは、数値(オクタル表記)で表現されることが多く、各タイプに以下の値が割り当てられます。

  • r = 4
  • w = 2
  • x = 1

例えば、rwxr-xr-x はオクタル表記で 755 となります。

  • 所有者 (rwx): 4+2+1 = 7
  • グループ (r-x): 4+0+1 = 5
  • その他 (r-x): 4+0+1 = 5

2. 実行ビット (Execute Bit)

「実行ビット」とは、ファイルパーミッションの「実行 (x)」権限を指します。このビットが設定されていないファイルは、たとえそれがスクリプトやバイナリであっても、直接実行しようとすると「Permission denied」エラーが発生します。シェルスクリプトの場合、chmod +x filename コマンドで実行ビットを設定するのが一般的です。

3. macOSインストーラーパッケージ (.pkg)

macOSでは、アプリケーションやシステムコンポーネントをインストールするために .pkg 形式のインストーラーパッケージがよく使用されます。これらのパッケージは、内部にペイロード(インストールされるファイル)とスクリプト(インストール前後に実行される処理)を含んでいます。

  • preinstall スクリプト: インストール対象のファイルがディスクに書き込まれる前に実行されるスクリプト。環境設定の確認、既存ファイルのバックアップ、一時ディレクトリの作成などが行われることがあります。
  • postinstall スクリプト: インストール対象のファイルがディスクに書き込まれた後に実行されるスクリプト。キャッシュのクリア、サービスの起動、パーミッションの調整などが行われることがあります。

これらのスクリプトは、インストーラーによって特定のユーザー(通常はroot)権限で実行されます。そのため、スクリプトファイル自体に実行権限がなければ、インストーラーはそれを実行できず、インストールプロセスが中断または失敗します。

4. Go言語のディストリビューション (misc/dist)

Go言語のソースコードリポジトリには、様々なプラットフォーム向けのディストリビューション(配布物)をビルドするためのツールやスクリプトが含まれています。misc/dist ディレクトリは、これらのディストリビューション関連のファイルが格納されている場所です。misc/dist/darwin はmacOS向けのディストリビューション関連のファイル、特にインストーラーパッケージのビルドに必要なスクリプトや設定が含まれています。

技術的詳細

このコミットの技術的な変更は非常にシンプルですが、その影響は重要です。Gitの差分表示を見ると、misc/dist/darwin/scripts/preinstall ファイルのモード(パーミッション)が変更されていることがわかります。

  • old mode 100644
  • new mode 100755

ここで示されている 100644 および 100755 は、Gitがファイルモードを記録する際の内部表現です。

  • 100644 は通常のファイル (100) で、パーミッションが 644 (rw-r--r--) であることを意味します。これは、所有者には読み書き権限があり、グループとその他には読み取り権限のみがあることを示します。このモードでは、ファイルは実行可能ではありません。
  • 100755 は通常のファイル (100) で、パーミッションが 755 (rwxr-xr-x) であることを意味します。これは、所有者には読み書き実行権限があり、グループとその他には読み取り実行権限があることを示します。このモードでは、ファイルは実行可能です。

この変更により、preinstall スクリプトがGoのインストーラーパッケージに組み込まれる際に、そのファイルに実行権限が正しく付与されるようになります。結果として、macOSのインストーラーがこのスクリプトを実行しようとした際に、「Permission denied」エラーが発生することなく、スクリプトが正常に実行されるようになります。

この修正は、Goのビルドシステムまたはパッケージングスクリプトが、preinstall ファイルを生成またはコピーする際に、そのパーミッションを明示的に 755 に設定するように変更されたことを示唆しています。Gitリポジトリ内でファイルのモードを変更することは、そのファイルがチェックアウトされた際に、指定されたパーミッションで作成されることを保証する効果があります。

コアとなるコードの変更箇所

diff --git a/misc/dist/darwin/scripts/preinstall b/misc/dist/darwin/scripts/preinstall
old mode 100644
new mode 100755

この差分は、misc/dist/darwin/scripts/preinstall ファイルの内容自体には変更がなく、そのファイルのパーミッション(モード)のみが変更されたことを示しています。

コアとなるコードの解説

このコミットは、Go言語のソースコードリポジトリ内の特定のファイル misc/dist/darwin/scripts/preinstall のメタデータ(具体的にはファイルパーミッション)を変更するものです。ファイルの内容は一切変更されていません。

  • old mode 100644: コミット前の preinstall ファイルのパーミッションは rw-r--r-- でした。これは、ファイル所有者のみが読み書きでき、他のユーザーは読み取りのみが可能であることを意味します。このパーミッションでは、ファイルは実行可能ではありません。
  • new mode 100755: コミット後の preinstall ファイルのパーミッションは rwxr-xr-x に変更されました。これは、ファイル所有者が読み書き実行でき、他のユーザーも読み取りと実行が可能であることを意味します。このパーミッションにより、preinstall スクリプトはmacOSのインストーラーによって実行可能になります。

この変更は、GoのビルドシステムがmacOS向けのインストーラーパッケージを作成する際に、preinstall スクリプトが適切な実行権限を持ってパッケージに含められるようにするために不可欠です。これにより、インストーラーがスクリプトを実行する際に発生していた「Permission denied」エラーが解消され、Goのインストールプロセスがスムーズに進行するようになります。

関連リンク

参考にした情報源リンク

  • Go Issue 5258の議論内容
  • Unix/Linuxファイルパーミッションに関する一般的な知識
  • macOSインストーラーパッケージの構造とスクリプトに関する情報
  • Gitのファイルモード変更に関するドキュメント

[インデックス 16164] ファイルの概要

このコミットは、Go言語のディストリビューションにおけるmacOS (Darwin) 用のインストーラースクリプト preinstall に実行権限を追加するものです。具体的には、misc/dist/darwin/scripts/preinstall ファイルのパーミッションを 100644 (rw-r--r--) から 100755 (rwxr-xr-x) へ変更しています。これにより、インストーラーがこのスクリプトを正しく実行できるようになり、Goのインストールプロセスにおける特定の問題を解決します。

コミット

commit 1d1142f17834f75812448d54ce7a7abeebdf86c3
Author: Rob Pike <r@golang.org>
Date:   Thu Apr 11 13:40:14 2013 -0700

    misc/dist/darwin: add execute bit to preinstall
    Fixes #5258.
    
    R=golang-dev, iant, minux.ma
    CC=golang-dev
    https://golang.org/cl/8682043

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/1d1142f17834f75812448d54ce7a7abeebdf86c3

元コミット内容

misc/dist/darwin: add execute bit to preinstall
Fixes #5258.

R=golang-dev, iant, minux.ma
CC=golang-dev
https://golang.org/cl/8682043

変更の背景

このコミットは、Go言語のインストーラーがmacOS上で正しく動作しないという問題(Issue 5258)を解決するために行われました。具体的には、macOSのパッケージインストーラー(pkgファイル)が実行する preinstall スクリプトに実行権限が不足していたことが原因でした。

通常、macOSのインストーラーパッケージは、インストール前後に特定のスクリプトを実行する機能を持っています。これらのスクリプトは、パッケージの展開や設定の変更など、インストールプロセスをカスタマイズするために使用されます。preinstall スクリプトは、パッケージの内容がディスクに書き込まれる前に実行されるスクリプトです。

Issue 5258の報告によると、Goのインストーラーパッケージに含まれる preinstall スクリプトが、インストーラーによって実行される際に「Permission denied」エラーが発生していました。これは、スクリプトファイル自体に実行権限(execute bit)が設定されていなかったためです。インストーラーは、実行権限のないファイルをスクリプトとして実行しようとしたため、エラーとなり、Goのインストールが失敗するか、不完全な状態になる可能性がありました。

この問題は、Goのディストリビューションパッケージのビルドプロセスにおいて、preinstall スクリプトが作成される際に、そのパーミッションが適切に設定されていなかったことに起因します。このコミットは、その根本原因を修正し、スクリプトが常に実行可能であることを保証することで、macOSユーザーがGoをスムーズにインストールできるようにすることを目的としています。

前提知識の解説

1. ファイルパーミッション (Unix/Linux/macOS)

Unix系オペレーティングシステム(macOSも含む)では、ファイルやディレクトリにはアクセス権限が設定されています。これは、誰がそのファイルに対して何ができるかを制御します。パーミッションは通常、3つのカテゴリ(所有者、グループ、その他)と3つのタイプ(読み取り、書き込み、実行)で表現されます。

  • 読み取り (r): ファイルの内容を読み取ることができる。ディレクトリの場合、その内容をリスト表示できる。
  • 書き込み (w): ファイルの内容を変更できる。ディレクトリの場合、その中のファイルを作成、削除、名前変更できる。
  • 実行 (x): ファイルをプログラムとして実行できる。ディレクトリの場合、その中に入ることができる。

これらのパーミッションは、数値(オクタル表記)で表現されることが多く、各タイプに以下の値が割り当てられます。

  • r = 4
  • w = 2
  • x = 1

例えば、rwxr-xr-x はオクタル表記で 755 となります。

  • 所有者 (rwx): 4+2+1 = 7
  • グループ (r-x): 4+0+1 = 5
  • その他 (r-x): 4+0+1 = 5

2. 実行ビット (Execute Bit)

「実行ビット」とは、ファイルパーミッションの「実行 (x)」権限を指します。このビットが設定されていないファイルは、たとえそれがスクリプトやバイナリであっても、直接実行しようとすると「Permission denied」エラーが発生します。シェルスクリプトの場合、chmod +x filename コマンドで実行ビットを設定するのが一般的です。

3. macOSインストーラーパッケージ (.pkg)

macOSでは、アプリケーションやシステムコンポーネントをインストールするために .pkg 形式のインストーラーパッケージがよく使用されます。これらのパッケージは、内部にペイロード(インストールされるファイル)とスクリプト(インストール前後に実行される処理)を含んでいます。

  • preinstall スクリプト: インストール対象のファイルがディスクに書き込まれる前に実行されるスクリプト。環境設定の確認、既存ファイルのバックアップ、一時ディレクトリの作成などが行われることがあります。
  • postinstall スクリプト: インストール対象のファイルがディスクに書き込まれた後に実行されるスクリプト。キャッシュのクリア、サービスの起動、パーミッションの調整などが行われることがあります。

これらのスクリプトは、インストーラーによって特定のユーザー(通常はroot)権限で実行されます。そのため、スクリプトファイル自体に実行権限がなければ、インストーラーはそれを実行できず、インストールプロセスが中断または失敗します。

4. Go言語のディストリビューション (misc/dist)

Go言語のソースコードリポジトリには、様々なプラットフォーム向けのディストリビューション(配布物)をビルドするためのツールやスクリプトが含まれています。misc/dist ディレクトリは、これらのディストリビューション関連のファイルが格納されている場所です。misc/dist/darwin はmacOS向けのディストリビューション関連のファイル、特にインストーラーパッケージのビルドに必要なスクリプトや設定が含まれています。

技術的詳細

このコミットの技術的な変更は非常にシンプルですが、その影響は重要です。Gitの差分表示を見ると、misc/dist/darwin/scripts/preinstall ファイルのモード(パーミッション)が変更されていることがわかります。

  • old mode 100644
  • new mode 100755

ここで示されている 100644 および 100755 は、Gitがファイルモードを記録する際の内部表現です。

  • 100644 は通常のファイル (100) で、パーミッションが 644 (rw-r--r--) であることを意味します。これは、所有者には読み書き権限があり、グループとその他には読み取り権限のみがあることを示します。このモードでは、ファイルは実行可能ではありません。
  • 100755 は通常のファイル (100) で、パーミッションが 755 (rwxr-xr-x) であることを意味します。これは、所有者には読み書き実行権限があり、グループとその他には読み取り実行権限があることを示します。このモードでは、ファイルは実行可能です。

この変更により、preinstall スクリプトがGoのインストーラーパッケージに組み込まれる際に、そのファイルに実行権限が正しく付与されるようになります。結果として、macOSのインストーラーがこのスクリプトを実行しようとした際に、「Permission denied」エラーが発生することなく、スクリプトが正常に実行されるようになります。

この修正は、Goのビルドシステムまたはパッケージングスクリプトが、preinstall ファイルを生成またはコピーする際に、そのパーミッションを明示的に 755 に設定するように変更されたことを示唆しています。Gitリポジトリ内でファイルのモードを変更することは、そのファイルがチェックアウトされた際に、指定されたパーミッションで作成されることを保証する効果があります。

コアとなるコードの変更箇所

diff --git a/misc/dist/darwin/scripts/preinstall b/misc/dist/darwin/scripts/preinstall
old mode 100644
new mode 100755

この差分は、misc/dist/darwin/scripts/preinstall ファイルの内容自体には変更がなく、そのファイルのパーミッション(モード)のみが変更されたことを示しています。

コアとなるコードの解説

このコミットは、Go言語のソースコードリポジトリ内の特定のファイル misc/dist/darwin/scripts/preinstall のメタデータ(具体的にはファイルパーミッション)を変更するものです。ファイルの内容は一切変更されていません。

  • old mode 100644: コミット前の preinstall ファイルのパーミッションは rw-r--r-- でした。これは、ファイル所有者のみが読み書きでき、他のユーザーは読み取りのみが可能であることを意味します。このパーミッションでは、ファイルは実行可能ではありません。
  • new mode 100755: コミット後の preinstall ファイルのパーミッションは rwxr-xr-x に変更されました。これは、ファイル所有者が読み書き実行でき、他のユーザーも読み取りと実行が可能であることを意味します。このパーミッションにより、preinstall スクリプトはmacOSのインストーラーによって実行可能になります。

この変更は、GoのビルドシステムがmacOS向けのインストーラーパッケージを作成する際に、preinstall スクリプトが適切な実行権限を持ってパッケージに含められるようにするために不可欠です。これにより、インストーラーがスクリプトを実行する際に発生していた「Permission denied」エラーが解消され、Goのインストールプロセスがスムーズに進行するようになります。

関連リンク

参考にした情報源リンク

  • Go Issue 5258の議論内容
  • Unix/Linuxファイルパーミッションに関する一般的な知識
  • macOSインストーラーパッケージの構造とスクリプトに関する情報
  • Gitのファイルモード変更に関するドキュメント