Synology DiskStation の Intel プラットフォームの DSM 7.x に Homebrew (Linuxbrew) をインストールする

# Synology DiskStation の Intel プラットフォームの DSM 7.x に Homebrew (Linuxbrew) をインストールする
## 元ネタはこちら
* [Installing Homebrew on DSM: done!](https://community.synology.com/enu/forum/1/post/153781 "Installing Homebrew on DSM: done!") を発見！
* [can't add community repo - "invalid location" error - problem solved #4897](https://github.com/SynoCommunity/spksrc/issues/4897 "can't add community repo - invalid location error - problem solved #4897")
* しかし一筋縄ではいかず…… 試行錯誤の末の知見を記録に残す

### 前提条件

:::note warn
* DiskStation の要件が、Linux 3.2以降、Glibc 2.13 以降、64ビットx86_64 CPUであること
    * 注意：ARM プラットフォーム対象外
    * 注意：32 ビット x86 プラットフォーム対象外
* DiskStation に admin 権限で SSH ログインした状態で作業すること
    * 参考資料：[Synology DiskStation で SSH 接続を公開鍵認証方式にする](https://qiita.com/shimizumasaru/items/56474d98e723ea1b5ae3 "Synology DiskStation で SSH 接続を公開鍵認証方式にする
")
:::

### DiskStation に、コミュニティパッケージの Git と Ruby をインストールする
*  インストール手順
    1. DSM7 に管理者としてログイン
    1. メインメニュー → パッケージセンター → [パッケージソース]タブを選択
    1. [追加]をクリックし、[名前：]に `SynoCommunity`、[場所：]に `https://packages.synocommunity.com/` と入力し、[OK]を押す
    ![pict01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41095/159b835d-31b0-2e5d-f984-85c9d37eb41c.png)
    1. パッケージセンター に戻り、左ペインの [コミュニティ] を選択、Git と Ruby をインストールする
    ![pict02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41095/4dd7dbf8-c487-798b-95e7-1a22bd5367ff.png)
    :::note warn
    注意：パッケージソースのタブに追加できない場合は、証明書を最新にする
    ```shell:DiskStation に admin 権限で SSH ログインした状態で作業すること
    $ sudo mv /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt.bak
    $ sudo curl -Lko /etc/ssl/certs/ca-certificates.crt https://curl.se/ca/cacert.pem
    $ sudo chmod 777 /etc/ssl/certs/ca-certificates.crt
    ```

* 参考資料：[Packages for Synology NAS 公式サイト](https://synocommunity.com/ "Packages for Synology NAS")
* 参考資料：[パッケージセンターでアプリケーションをインストールするにはどうすればよいですか？](https://kb.synology.com/ja-jp/DSM/tutorial/How_to_install_applications_with_Package_Center "パッケージセンターでアプリケーションをインストールするにはどうすればよいですか？")

### Homebrew インストール前の準備を行う

1. `/usr/bin/` にダミーの `ldd` コマンドを作成する
    ```shell:DiskStation に admin 権限で SSH ログインした状態で作業すること
    $ cd /usr/bin/
    $ sudo touch ldd
    $ sudo chmod 777 /usr/bin/ldd
    $ sudo vi ldd
    # vi で以下の「ダミーの ldd のスクリプト」の内容をコピペして保存
    ```
    ```shell:ダミーの ldd のスクリプト
    #!/bin/bash
    [[ $(/usr/lib/libc.so.6) =~ version\ ([0-9]\.[0-9]+) ]] && echo "ldd ${BASH_REMATCH[ 1]}"
    ```
    ```shell:ダミーの ldd の詳細と実行を確認する
    $ ls -la /usr/bin/ldd
    -rwxrwxrwx 1 root root 101 Feb 14 13:03 /usr/bin/ldd
    $ /usr/bin/ldd
    ldd 2.26
    ```
1. `/bin`にある`ldd`コマンドの権限を変える
    ```shell:DiskStation に admin 権限で SSH ログインした状態で作業すること
    $ sudo chmod 777 /bin/ldd
    $ ls -la /bin/ldd
    -rwxrwxrwx 1 root root 101 Feb 14 13:03 /bin/ldd
    $ /bin/ldd
    ldd 2.26
    ```
1. `/volume1/homes` を `/home` としてバインドする
    ```shell:DiskStation に admin 権限で SSH ログインした状態で作業すること
    $ sudo mkdir /home
    $ sudo chmod 777 /home
    $ sudo mount -o bind "/volume1/homes" /home
    ```
    :::note warn
    注意：DiskStation の再起動時はマウントが解除されるので、自動的に再マウントするスクリプトを追加する
    * 以下の手順でタスクを新規設定する
        * コントロールパネル→　タスク スケジューラー→
        * 作成→　トリガーされたタスク→
        * ユーザー指定のスクリプト
    * 「全般」タブを選択して、以下を設定する
        * タスク： 任意の名前（例：BIND HOME）
        * ユーザー： root
        * イベント： ブートアップ
        * プリタスク：　そのまま
        * 有効：　オン
    * 「タスク設定」タブを選択して、以下を設定する
        * 「ユーザー指定のスクリプト」に以下のスクリプトを記述する
    ```shell:ユーザー指定のスクリプトの入力欄に記述する内容
    #!/bin/sh
    sleep 10
    mount -o bind "/volume1/homes" /home
    ```

### Homebrew をインストールする

1. [Homebrew公式ページ](https://brew.sh/ja/)のインストールコマンドを実行する
    ```shell:DiskStation に SSH ログインして作業する
    # 以下は参考：インストールコマンドは随時修正される、公式ページのインストールコマンドをコピペして実行すること
    $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    ```

### Homebrew インストール成功直後のメッセージ

* Homebrew のインストールに成功すると以下のようなメッセージが表示される

```shell:DiskStation に SSH ログインして作業する
# Homebrew インストール成功
==> Installation successful!  

# Homebrew の匿名情報収集とオプトアウトの説明表示 
==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics data has been sent yet (nor will any be during this install run).

# Homebrew は完全無給のボランティア運営、寄付のお願い
==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
  https://github.com/Homebrew/brew#donations

# 次のステップ：
==> Next steps:

# ターミナルで以下の2つのコマンドを実行し、PATH に Homebrew を追加する
- Run these two commands in your terminal to add Homebrew to your PATH:
    (echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /var/services/homes/自分のユーザー名/.profile
    eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

# sudo権限がある場合は、Homebrewの依存ファイルをインストール、詳しくは以下、URL を参照
- Install Homebrew dependencies if you have sudo access:
  For more information, see:
    https://docs.brew.sh/Homebrew-on-Linux

# GCCのインストールを推奨
- We recommend that you install GCC:
    brew install gcc

#  brew help を実行してヘルプを表示、さあ始めましょう
- Run brew help to get started

# さらにドキュメントを見たい場合は：
- Further documentation:
    https://docs.brew.sh

```
### 上記のメッセージを受けて、PATHを通し、必須コンパイラ（含む llvm）の追加を行う


```shell:DiskStation に SSH ログインして作業する
$ (echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /var/services/homes/自分のユーザー名/.profile
$ eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
$ brew update
$ brew upgrade
$ brew install gcc
$ brew install llvm
$ brew doctor
```

:::note warn
注意：brew doctor で警告があれば、メッセージに従って修正すること
ただし、以下の警告は無視してよい（参考URLは、以下のとおり）
[[Synology DSM] Any command outputs "brew.sh: line 604: /etc/os-release: No such file or directory" #4670](https://github.com/orgs/Homebrew/discussions/4670)

```shell:DiskStation に SSH ログインして作業する
$ brew doctor
/home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 598: /etc/os-release: No such file or directory
Your system is ready to brew.
```
:::


### 余談　Homebrew 4.0 からの技術的な変更点

* 参考資料：[Homebrew 4.0 で git repo の保持が不要になったので削除した](https://www.hsbt.org/diary/20230221.html#p01)
* 参考資料：[パッケージマネージャ「Homebrew 4.0」正式リリース、より高速に。Git cloneからJSONによるパッケージ管理へ切り替え](https://www.publickey1.jp/blog/23/homebrew_40git_clonejson.html)
* 参考資料：[Today, I’d like to announce Homebrew 4.0.0.](https://brew.sh/2023/02/16/homebrew-4.0.0/)