ARM 系 QNAP に git/php7/golang などをパッケージでコマンドインストールする [Entware で Opkg 編]

> **[QNAP<sup>®</sup>](https://ja.wikipedia.org/wiki/QNAP) の [NAS](https://ja.wikipedia.org/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%82%BF%E3%83%83%E3%83%81%E3%83%88%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8) に [git](https://ja.wikipedia.org/wiki/Git) や PHP7 や Golang をインストールしたい**

と、思うも「[App Center](https://www.qnap.com/ja-jp/app_center/)」にないので困った。Python3 はあるのに。筆者の QNAP マシンがショボい（[TS-110P+](https://blog.keinos.com/20180308_3646), `ARMv5`, メモリ 512MB）ため QNAP 用のコンテナ環境「[Container Station](https://www.qnap.com/ja-jp/how-to/tutorial/article/container-station-%E3%81%AE%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95)」も入れられない仕様で、どうしよう。（棒読み）

Docker は諦めるにしても、`gcc` `make` も入ってないし。`git` くらいは簡単にインストールできる **`apt` `yum` `brew` のような CLI 版のパッケージマネージャーはないものか**。

- 検証機器：OS: QTS 4.3.3, TS119P+, 1ベイ, Marvell ARMv5（ARMADA 300/Feroceon 88F6282, 2010年11月発売モデル） 

:::note info
**`QNAP Club`の `www.qnapclub.eu` などのドメインがダウンしている件について**

`www.qnapclub.eu` や `www.qnapclub.jp` が落ちて、一向に復旧しない場合は、[MY QNAP.org](https://www.myqnap.org)も選択肢です。

<details><summary><code>QNAP Club</code> vs <code>MyQNAP.org</code></summary>

元々 QNAP Club のサイトやリポジトリは落ちやすい傾向があったのですが、しばらくの沈黙のあと 2022年に復活するも、すぐにダウンしてしまい、<font color="darkorange">2024/10/13 現在も長期ダウンが続いています</font>。

ちょうど、その頃（2022年11月）に [MY QNAP.org](https://www.myqnap.org) という同類のリポジトリが立ち上がりました。QNAP Club と同等の使い方で [XML ファイルをインストール](https://www.myqnap.org/install-the-repo/)できるため、EU圏の法律がらみかドメイン切れのたぐいかなと思ったのですが、どうやら別物で、別のコミュニティが運用しているようです。

オフィシャルなアナウンスはないものの、「ベルギーにある QNAP Club の本家のマネージャーが、メイン・デベロッパーである [qoolbox](https://www.myqnap.org/author/qoolbox/) を外したことが原因であり、[MyQNAP.org](https://www.myqnap.org/about-us/) は、そのデベロッパーがフランスのメンバーと立ち上げた別団体である」という[噂](https://www.reddit.com/r/qnap/comments/108u0qn/comment/j3xhd4e/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button)があります。

確かに QNAP Club のダウンと [MyQNAP.org の立ち上げ](https://www.myqnap.org/the-rocket-has-taken-off/)時期が重なっていたり、[MyQNAP.org のフォーラム](https://www.forum-nas.fr/)を見ると、フランスのドメインだったり、フランス語圏の投稿が多いことからも噂の信憑性が増します。

とは言え、[MyQNAP.org の About Us](https://www.myqnap.org/about-us/) を見ても、古巣とのイザコザを表に出さないよう配慮した結果なのかもしれませんが、いまいち団体像が見えません。「このリポジトリは、私たちが使う、もしくは気に入ったパッケージしかサポートしないことを強調しておきます」と言っているので、なんでもかんでも受け入れて悪質パッケージのチェック体制がパンクすることはなさそうです。

また、<font color="darkorange">**MyQNAP.org は、Apache、PHP、MySQL、PostgreSQL などセキュリティ・パッチが重要なものは有料なものが多い**</font>ことにも気をつける点です。有料が悪いというわけではなく、無料のパッケージが有料パッケージに依存していた場合は結果的に有料と同じであることに注意する必要があります。

裏で何が起きているか不明ですが、QNAP Club 側も再立ち上げの準備で遅れているならアナウンスするべきです。デベロッパーを外しただけで、サーバーならびにドメインなどが根こそぎダウンするとは考えづらいので、コミュニティの統率に何かしらの問題が起きていることは確実です。

そもそも、QNAP Store のオフィシャル・リポジトリ以外を使うのは自己責任です。コミュニティ版であってもリスクは変わらず、これらサードパーティーのリポジトリを盲目的に利用するのは危険です。結局のところ、自分で色々調べて納得して使うしかないのです。

長年 QNAP を使っているユーザーなら感じていると思いますが、近年 QNAP 社自身も方針がブレブレになっており、コミュニティが離れるような方針を打ち出したりしているので、QNAP 自身が1つの時代を終える時期（もしくは次の時代の節目？）に来ている体感があります。残念です。

</details>

:::

## TL; DR（概要）

> **[`opkg`](https://en.wikipedia.org/wiki/Opkg) コマンドで、`git` の `ipk` パッケージをインストール**してどうか。
>
> [**2018年版 Entware（Entware-std）**](https://github.com/Entware/Entware) の `QPKG` アプリをインストールすると使えるようになります。

`ffmpeg` は v4.3.1、`php-cli` は v7.4.12、`go(golang)` は v1.15.5 が入っちゃいますよ。（2021/01/27 現在）

- 準備
    1. 「アプリジポジトリ」に[リポジトリ XML ファイル](https://www.qnapclub.eu/en/repo.xml)を追加する
    2. 更新後、「`Entware-std`」を「App Center」からインストールする
    3. QNAP 本体に SSH 経由で接続する

- `opkg` コマンドの利用方法（`git` を入れたい場合）
    1. `$ opkg update` で最新のパッケージ情報を取得する
    1. `$ opkg upgrade` でインストール済みパッケージを更新する
    1. `$ opkg list git` で `git` パッケージがあるか検索する
    1. `$ opkg info git` で `git` パッケージの情報を表示する<br>（出どころ、バージョンや依存など）
    1. `$ opkg install git` で `git` をインストールする
    1. `$ opkg install git-http` も入れて `http` による `clone` をできるようにする<br>（これを入れないと `git: 'remote-https' is not a git command. See 'git --help'` エラーが出る)
    1. `$ opkg list-installed` でインストール済みパッケージを確認する
    1. `$ opkg remove git` で `git` をアン・インストールする
    1. `$ opkg status` でパッケージの状態を確認する
    1. アプデしてもバージョンが変わらない場合は再接続してみる。（パス変更の問題）

> 　 _ 　∩
> (　ﾟ∀ﾟ)彡　Opkg！Opkg！
> 　⊂彡

## TS; DR（詳細）

### インフォ

- `Entware-3x-std` と `Entware-ng` は **`Entware-std` に統合された**ことが 2018/03/07 にアナウンスされました。ちなみに `ng` は `no-good` ではなく `next-generation` の略です。
    - QNAP Forum: https://forum.qnap.com/viewtopic.php?f=351&t=139781 （要ログイン）
    - GitHub: https://github.com/Entware/Entware
    - 対応プラットフォーム： `x86`, `x64`, `ARM5`, `ARM7` and `MIPS forks`

- **`Entware-3x` の QPKG アプリをすでにインストール済みの場合**
    - ARMv7 版 QNAP の場合
        - `opkg update` `opkg upgrade` を**２回実行**すると、`Entware` にアップグレードできます
        - 「AppCenter」からアンインストール後、本記の手順ででも可。（推奨）
    - ARMv5 版 QNAP の場合
        - 「AppCenter」からアンインストール後、本記の手順で行います

- `opkg` コマンドでインストールされたパッケージ（バイナリ）の設置先
    - `/opt/bin`

- `opkg` コマンドでインストールできる `ipk` パッケージ一覧
    - https://bin.entware.net/armv5sf-k3.2/Packages.html （ARMv5）
    - http://bin.entware.net/armv7sf-k3.2/Packages.html （ARMv7）
    - https://bin.entware.net/ （その他）
    - インストール可能な有名どころの `ipk` パッケージ例
        - `asterisk` `bind` `boost.python` `busybox` `cmake` `coreutils` `django` `erlang` `gcc` `ghostscript` `go(golang)` `libc` `lua` `lynx` `make` `mariadb` `nginx` `perl` `PHP7` `python3` `redis` `ruby` `pgsql` `mariadb` `transmission` `tree` `zsh` `youtube-dl` `vim` `tor` `softethervpn` 
        - 詳しくは `opkg list` を試してみよう

- <details><summary>Differences between Entware standard installation and Entware-ng/Entware-3x</summary>
<div>

> Current armv7 architecture users running Entware-ng, or any user currently running Entware-3x, can switch to Entware by running `opkg update; opkg upgrade` twice. Qnap owners using Entware-ng (armv5, x64) can upgrade to the new Entware using unofficial instructions published in this topic. This will not change package name in AppCenter.
> 
> Entware standard installation is similar to Entware-ng. It does not install Entware version of busybox and adds /opt/bin and /opt/sbin to the end of PATH variable. There is also alternative installer in Entware that is similar to Entware-3x installer.
> It installs Entware version of busybox. For this installation Entware users are independent from firmware users. Entware has root user with 12345 password. Other users can be added permanently to Entware in this case to run services that require such users.

- Entware の BusyBox 環境内の `root` ユーザーのデフォルト・パスワードは "12345" らしい。

</div></details>

### `opkg` コマンドのインストール手順

1. コミュニティ版リポジトリを追加する。
    「App Center」の「アプリジポジトリ」設定に、[EU 圏の QNAP Club](https://www.qnapclub.eu/en) が提供している XML ファイルを追加します。これにより[コミュニティ版の QPKG アプリ](https://www.qnapclub.eu/en)がインストールできるようになります。（互換性のあるものに限る）
    - `https://www.qnapclub.eu/en/repo.xml`
    <img width="100%" alt="EntwereViaQnapClub.png" src="https://qiita-image-store.s3.amazonaws.com/0/78776/a9e2d137-05dc-e2ac-b80f-8ab09b1f39cd.png">

2. :repeat: で更新後、「`Entware-std`」を検索してインストールする
    - これにより [Entware のコミュニティが動作確認した ipk 形式のパッケージ](https://bin.entware.net/armv5sf-k3.2/Packages.html)を `opkg` コマンドでインストールできるようになります
    - `Entware-3x-std` `Entware-ng-std` でも動きますが、今後はアップデートされないので注意。`Entware-std` のインストールをおすすめします
    ![Entwere_Install.png](https://qiita-image-store.s3.amazonaws.com/0/78776/3d4689fd-a1f2-7708-eb86-6840e99d7279.png)

3. QNAP に [SSH](https://ja.wikipedia.org/wiki/Secure_Shell) 接続する

    ```shell-session
    $ ssh admin@192.168.xx.xx
    [~] # whoami
    admin
    
    [~] # ## CPU やカーネルのバージョンを確認する（ARMv5が確認できた）
    [~] # uname -a
    Linux NASxxxxxx 3.4.6 #1 Mon Oct 29 10:28:40 CST 2018 armv5tel GNU/Linux
    
    [~] # ## QNAP のファームウェア/QTSのバージョン確認コマンド
    [~] # getcfg system version
    4.3.3
    ```
    - 「[`QNAP` `ssh接続` `公開鍵認証`](https://www.google.com/search?q=site%3Aqiita.com+%22QNAP%22+ssh%E6%8E%A5%E7%B6%9A+%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC)」の Qiita 記事検索 @ Google

4. `opkg` コマンドの確認とアップデート

    この `opkg` がパッケージマネージャーのコマンドになります。

    ```shell-session
    [~] # opkg --version
    opkg version 0.1.8
    
    [~] # ## 大事なことなので２回実行します（以降は１回でOK）
    [~] # opkg update; opkg upgrade
    [~] # opkg update; opkg upgrade
    ```

5. 例として `git` コマンドのパッケージ確認とインストールをしてみる

    ```shell-session
    [~] # ## 既存の Git がないか確認
    [~] # git --version
     -sh: git: command not found
    
    [~] # ## Entware のリポジトリに Git があるか検索
    [~] # opkg list git
git - 2.19.2-2 - Git is a free & open source, distributed version control system
 designed to handle everything from small to very large projects
 with speed and efficiency.
    
    [~] # ## Git のインストール
    [~] # opkg install git
    Installing git (2.19.2-2) to root...
    Downloading http://bin.entware.net/armv5sf-k3.2/git_2.19.2-2_armv5-3.2.ipk
    Installing libopenssl (1.0.2p-1a) to root...
    Downloading http://bin.entware.net/armv5sf-k3.2/libopenssl_1.0.2p-1a_armv5-3.2.ipk
    Installing zlib (1.2.11-2) to root...
    Downloading http://bin.entware.net/armv5sf-k3.2/zlib_1.2.11-2_armv5-3.2.ipk
    Configuring zlib.
    Configuring libopenssl.
    Configuring git.
    
    [~] # ## インストールされた Git のバージョン確認
    [~] # git --version
    git version 2.19.2
    
    [~] # ## インストールされた Git の場所を確認
    [~] # which git
    /opt/bin/git
    ```


## 参考文献

- 「[Entware-ng & Entware-3x merge!!!](https://forum.qnap.com/viewtopic.php?f=351&t=139781)」| Forum @ QNAP.com
- 「[[QPKG] Entware-ng - Optware & Qnapware replacement (all platforms)](https://forum.qnap.com/viewtopic.php?f=351&t=116737)」| Forum @ QNAP.com
- 「[QNAPのパッケージマネージャ](https://qiita.com/nak1114/items/b534cd3bd79db3e3f256)」@ Qiita
- 「[QNAP にパッケージマネージャを入れる](http://qiita.com/qurage/items/7d97ad870db2b7b661f1)」@ Qiita
- 「[QNAP firmware 4.1.4以降にgccを入れる](http://qiita.com/efee/items/5da74eb7e7423e61823c)」@ Qiita