パステルコーダー

フロントエンドエンジニア ゆきしば の日常

Synology の NAS で apt-get がなくても Linux の基本的なコマンドを使えるようにする方法

Synology の DS418 という NAS を使っています。
このNASLinux 系の OS で動いているため、
ssh でログインすることで、Linux マシンとして扱う事が可能です。

ただし、あくまで NAS なので最低限のコマンドしか使うことができません。 上位機種(CPU違い)だと Docker が使えたり、 apt-get を使うために Debian Chroot というツールがあったりするのですが、 この機種ではそれも使えないようです。

そこで、パッケージ管理ツールがなくても
使いたいパッケージを地道にインストールしていく方法をご紹介します。

おおよその流れは、

  1. ホームディレクトリに、bin include lib の各ディレクトリを作成する
  2. 作成したディレクトリにpathを通す
  3. 必要なパッケージをダウンロードして dpkg したものを作成したディレクトリに移動

の3段階でインストールが可能です。

順を追って説明していきます。

1. ホームにディレクトリを作成する

NASssh でログインしてホームディレクトリにいる状態からスタートします。

mkdir bin
mkdir include
mkdir lib

2. 作成したディレクトリにpathを通す

.bashrc を vim で開いて(作成して)

vim .bashrc

中身に以下を書き込みます。 ユーザー名 としたところは適宜変更してください。
他に path を通しているところがあれば、適宜変更してください。

export PATH=/var/services/homes/ユーザー名/bin/:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/var/services/homes/ユーザー名/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/var/services/homes/ユーザー名/include

私は node.js をインストールしていたので1行目が以下のようになっています。

export PATH=/volume1/@appstore/Node.js_v8/usr/local/bin/:/var/services/homes/ユーザー名/bin/:$PATH

:wq で保存して vim を閉じます。

3. 必要なパッケージをダウンロードして dpkg したものを作成したディレクトリに移動

ダウンロードするフォルダを作っておきます。

mkdir packages
cd packages

ubuntsのサイトでインストールするパッケージを検索します。
DS418 は ARMv8 なので arm64 のパッケージを探します。

git をインストールする

以下のURLを目指します。

http://cdn-fastly.deb.debian.org/debian/pool/main/頭文字/

今回は g なので以下のURLです

http://cdn-fastly.deb.debian.org/debian/pool/main/g/

git をクリックします。

出て来たパッケージの中から arm64 が含まれるものを探します。
あまり新しいバージョンだと動かなかったりしました。 動かなかったら、他のバージョンを選ぶとあっさり動くものです。

wget 選んだパッケージのURL
mkdir 展開先
dpkg -x 落としたパッケージ 展開先

ダウンロードして dpkg で展開すると、 usr/ の中に binlib が入っていると思います。
その中身を先ほどホームディレクトリ直下に作ったフォルダにそれぞれコピーします。

これで git が動くように……!なったと思ったらエラーが出てしまいました。

error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory

ライブラリが足りないようです。
でも、私たちは既にパッケージを見つけてインストールする方法を知っています!

おわりに

Entware-ng という NAS 向けのパッケージ管理ツールがあるそうです。
でも他で使う予定だったパッケージが提供されていない事が分かったので、
自力でなんとかならないかと試してみました。

そもそも linux に詳しくなかったので、
bin include lib などの役割もなんとなく分かって面白かったです。

ホームディレクトリの中なのでわりと安心して試せますが、 くれぐれも自己責任でおねがいいたします。
記事情報の利用により生じたいかなる損害も当方では一切の責任を負いかねます。