Synology製NAS DS216j をLinux鯖として使う - Entware-ng使ったメモ -
Table Of Contents
自宅のNASをLinux鯖として使うためのTips
もともとgarmy.jpは、さくらのVPSで運用していたのですが、 VPSを使う必要性のあることをあまりしなくなっていたこと、 Linuxサーバとしての運用に手間をかけられなくなってきたこと、 自宅のWin鯖をNAS箱に切り替えたので結構代替出来そうだ、 ということから、さくらのレンタルサーバ + NAS箱の鯖化を しようと思い立ちました。
で、Synology DSMにあるrubyを使おうとしたらgemsが上手く 再コンパイルできなかったので
Synology公式のrubyだと一部のgemsを入れようとしたときの再コンパイルがうまく行かないのでEntware-ngで対応することにした // Synology DS216j Entware-ng 導入 https://t.co/RKwpNqeVZx
— garmy (@garmy) March 4, 2017
ええい、メンドクサイ、それっぽいもの一式をマニュアルでいじれる ものを入れるぜ!という経緯でEntware-ngを使ったのです。
Entware-ngとは
NASとかの組み込み系でも使えるようなパッケージ管理ツール。 aptとかyumとかみたいなもの、だと思う。
ちなみに、はいってるパッケージ一覧はこちら。
ちなみにEntware-ngのパッケージ名一覧はこのページみて検索するのが早そう https://t.co/porLUraCPo
— garmy (@garmy) March 4, 2017
導入と基本動作
Synology DS216j Entware-ng 導入 - 雑記帳 - JasminInfoにあるとおりやればうまく行く。
Synology公式のrubyだと一部のgemsを入れようとしたときの再コンパイルがうまく行かないのでEntware-ngで対応することにした // Synology DS216j Entware-ng 導入 https://t.co/RKwpNqeVZx
— garmy (@garmy) March 4, 2017
yumとかaptとかだと、ヘッダファイルが入ってるのはruby-develみたいな パッケージ名だけれど、Entware-ngはtar.gzを取ってきて展開!という かなり雑な展開なんで、他パッケージシステムを前提とした説明で、なんとか-develを入れろとか言われたらこれをやればよい。
2018/04/04加筆: ソースの位置は、Entware-ngがEntwareに改名されたのにあわせてこちらのドキュメントの記述されているので注意。
Entwareには、ほげほげ-develとかのヘッダがあるパッケージがないのでこれで入れる(先に/opt/includeは作っておく https://t.co/ytGfkYpYGV
— garmy (@garmy) March 4, 2017
あとは、パッケージシステムを普通に使ったことがあれば 個別のノウハウだけで対応できると思う。
はまりポイントと回避法
githubからコード持ってくること多いならhttps対応は必須
opkg install git-http にしないと「https扱えないよ」エラーではまる(そしてググると「ソースから作れ」ばかりでてくる)
ということでgitで手元に最新版ソースもってきてパッケージ作って入れることにする。opkg install git-http にしないと「https扱えないよ」エラーではまる(そしてググると「ソースから作れ」ばかりでてくる)から注意
— garmy (@garmy) March 4, 2017
rubyがらみあるある
gems使うなら、 ruby-enc-extra, ruby-openssl, ruby-mkmf あたりはたぶん必要になるし、 ruby-csvみたいなのも別導入だったりするのに注意。
ruby gemを起動しようとして"failed to load encoding (Windows-31J)"とエラーがでたらruby-enc-extraを入れる https://t.co/hFFGgUKE8A
— garmy (@garmy) March 4, 2017
opensslがない、と怒られるので opkg install openssl-util ruby-openssl する。gemがnative extensionをbuildしようとしたときにmkmfがなくてこけるので ruby-mkmf入れる
— garmy (@garmy) March 4, 2017
Entware-ngのrubyには最初からcsvは入っていないのでopkg install ruby-csvすること
— garmy (@garmy) April 1, 2017
rubyのunf_extってgemsが作れない
手でBuildして突っ込んだ(ようだ)
なんかunf_extを作ろうとしてこけてるのでとりあえずdevelopment-dependenciesにある子たちを入れてみる gem install bundler rake rake-compiler rdoc test-unit
— garmy (@garmy) March 4, 2017
原因はここにある通りなんだが、「手でbuildして入れてね」って言われてもどうすんだ… // https://t.co/TPJyvBzkkV 0.0.7.2 fails to build on arm with gcc6
— garmy (@garmy) March 4, 2017
ということでgitで手元に最新版ソースもってきてパッケージ作って入れることにする。opkg install git-http にしないと「https扱えないよ」エラーではまる(そしてググると「ソースから作れ」ばかりでてくる)から注意
— garmy (@garmy) March 4, 2017
そして、これのbuild以降を実施してunf_extを作って入れた // 拡張ライブラリの gem をつくる https://t.co/FFHbwyrQHM
— garmy (@garmy) March 4, 2017
libruby.soがない
/opt/lib/libruby.so がなくてgemがNative Extensionを作ろうとするとこける
解決策:シンボリックリンクを手で張る ⇒ ruby 2.5系になったときには治ったようだ、自動設定された
root@********:~# ls -l /opt/lib/
(snip)
lrwxrwxrwx 1 root root 25 Mar 5 01:21 libruby.so -> /opt/lib/libruby.so.2.4.0
lrwxrwxrwx 1 root root 16 May 6 16:17 libruby.so.2.4 -> libruby.so.2.4.1
-rwxr-xr-x 1 root root 2233240 Apr 19 21:03 libruby.so.2.4.1
root@********:~# rm /opt/lib/libruby.so
root@********:~# ln -s /opt/lib/libruby.so.2.4 /opt/lib/libruby.so
root@********:~# ls -l /opt/lib/
(snip)
lrwxrwxrwx 1 root root 23 May 14 01:24 libruby.so -> /opt/lib/libruby.so.2.4
lrwxrwxrwx 1 root root 16 May 6 16:17 libruby.so.2.4 -> libruby.so.2.4.1
-rwxr-xr-x 1 root root 2233240 Apr 19 21:03 libruby.so.2.4.1
以下、当時の作業記録
初回
とtweetした瞬間にgcc作業がすすんだ…ここで事前にググってたときに見つけたページの状況になったので https://t.co/Zio2vILIgT これやる ln -s /opt/lib/libruby.so.2.4.0 /opt/lib/libruby.so がエラー…
— garmy (@garmy) March 4, 2017
2回目
Entware-ngでtweetstream入れようとしたら "/opt/bin/ld: cannot find -lruby" が出て他のgemsまで死んでヽ(`Д´)ノと思ったら、以前/opt/libのlibruby.soがないエラー対応にsymlink張って対応してたのが
— garmy (@garmy) May 13, 2017
rubyが2.4.0から2.4.1に上がったときにsymlink切れになっていたということだった(´・ω・`) https://t.co/ubMNhV8aSZ
— garmy (@garmy) May 13, 2017
単純な張り直しなのに1.5時間くらい時間を空費してしまった…(その代わり、rubyが2.4系列の間は切れないsymlinkに直せたのは良かった)
— garmy (@garmy) May 13, 2017
張り直した後は全てが順調で、復旧も一瞬だったしtweetstream突っ込んで利用するのも一瞬だった…(;´∀`)
— garmy (@garmy) May 13, 2017
3回目
opkg update; opkg upgradeをした後はlibrubyへのsymlink張り直さないと https://t.co/NCXjm90JY8 と思ったら2.5に上がるときの処理は自動でなされていた!
— garmy (@garmy) January 3, 2019
Nokogiriが入らない
単に/opt/include下を見失ってるだけなので本家チュートリにあるとおりincludeのパスを指定
Entware-ngのgemでNokogiriが入らなかったが単に/opt/include下を見失ってるだけなので本家チュートリ https://t.co/1vsHOKvpCl にあるとおりincludeのパスを指定したら入ったワイ
— garmy (@garmy) April 1, 2017
2021/02/17追記
たぶん1年以上は放置してたNASのEntware-ngを、opkg update; opkg upgradeする(rubyのrssを使いたくなったため)。わざわざARMアーキテクチャで無理する https://t.co/7yoNLhetJS の面倒だよなぁと思ったが、そもそも普通のx86なLinux鯖のメンテが面倒でNASにしたんじゃんと思うとトートロジー…
— garmy (@garmy) February 16, 2021