うちのQNAP NASはちょっと古いTS-669Lです。
[ 0.017724] CPU0: Intel(R) Atom(TM) CPU D2701 @ 2.13GHz stepping 01
dmesgではx86アーキテクチャのAtom D2701を使っていることがわかります。
アプリケーションのアップデートに合わせて、時たまQTSのアップデートもありますが、
[ 522.957235] ====== 2024-05-04 09:16:06 TS-669L (4.3.4.2675-20240131) boot finished.
バージョンは4.3.4。2017年にリリースされたものです。最新バージョンはQTS 5.2です。なのですでにサポート対象外です。一応、最新の筐体をディスクレスで持ってきて、HDDを順番通りに載せ替えれば使えるらしいですが、でもちゃんと使えてますので。16TBx6ですけど、使えてますので。
ところでこのQNAP、App Centerで提供されているアプリ以外にも、Linuxで利用できる色々なソフトウェアが利用できるようになっています。メールサーバやWikiサーバにすることもできます。そのためには、Entware-stdをインストールして、QPKGを使えるようにする必要があります。
Entware-stdは、以前にあったEntware-ng-3xとEntware-ngが1本化されたものです。インストール方法は、こちらにあります。このページにあるリンクからqpkgをダウンロードして、App Centerの右上にある田の字っぽいアイコンから手動インストールを行います。
次に、ユーザのホームディレクトリ($HOME)に、.profileを作成します。Entware-stdは/opt/etcにprofileファイルを作成し、opkgでインストールされるディレクトリへのパスなどを設定するようになっています。なので、Entwareをインストールしたら、$HOMEに以下の内容を記述した.profileを作成して、/opt/etc/profileをソースします。
Entware-stdはGUIアプリではないので、いろいろとインストールするにはsshログインする必要があります。が、sshログインするためのいろいろは割愛で。
Entwareはopkgコマンドで管理します。sshログインしてopkgとタイプすると、ずらーっとコマンドオプションが表示されます。リポジトリのパッケージリストを取得するには、
opkg update
します。ちなみにパッケージリストはここにあるものと同じ内容みたいです。が、ここでroot(あるいはadmin)権限がないと、パッケージリストのxmlファイルを保存できずにエラーになります。もちろんadminアカウントでログインすればいいんですが、個人的セキュリティポリシーとしては通常ユーザでログインして、suなりsudoなりしたいです。使い勝手ならsudoがベスト。でも、sudoするにはsudoersにユーザの記述をしないといけません。標準で入っているsudoは、/usr/etcからsudoersを読み込んでいます。ところがこのディレクトリは、リブートのたびにリフレッシュされます。つまり、起動後にこのsudoersを編集しても、リブートするともとに戻ってしまいます。
リフレッシュするにはオリジナルが必要ですが、そのオリジナルは /mnt/HDA_ROOT/.config にあります。が、そこにはsudoersがありません。どこにあるのか調べようと思っても、ディレクトリツリーもいろいろあっちゃこっちゃしていて、探すのめんどくさい。こんなときこそlocate!……入ってません。しかたないからfindで……Permission denied。
じゃあどこかにファイルを作っておいて、起動時に自動で上書きコピーするしかないか、ということでぐぐってみると、Running Your Own Application at Startupなるページを見つけました。起動時にautorun.shを実行してくれるようです。
autorun.shを使用するには、QNAPのコントロールパネルから、「システム」➔「ハードウェア」➔一般タブの「起動時にユーザー定義処理を実行」にチェックを入れて、autorun.shを実行してくれるように設定します。
起動時のどのタイミングで実行されるのかがわからないので、そのあたりは試してみるしかなさそうです。が、ここにあらかじめ用意しておいたファイルをコピーするような指示を入れれば、うまくいきそうです。もっとも、パーミッションとかセキュリティ的に考えることがありそうなので、/mnt/HDA_ROOT/.autorunなどのフォルダを作ってsudoersなどを置き、それをコピーするようにすればよさそう。
なのですが、もうちょっとクレバーなやり方はないかな、と探してみたら、create-autorunというのを見つけました。これは、上記の方法で作成されたautorun.shをお仕着せで作成してくれるツールです。このツールを使うと、
/share/CACHEDEV1_DATA/.system/autorun/autorun.sh
を自動で作成してくれます。さらに、
/share/CACHEDEV1_DATA/.system/autorun/scripts/
以下に、rc.dスクリプトのように数字付きでスクリプトを置くことで、順番に実行してくれるようです。
このツールはインストールする必要はなく、adminアカウントで
curl -skL https://git.io/create-autorun | sudo bash
などとすればよさそう。
実行すると以下のようにメッセージが出力されます。幅が足りなくて改行が変ですが。
[/mnt/HDA_ROOT] # curl -skL https://git.io/create-autorun | sudo bash
create-autorun.sh 230527
info: NAS model: TS-669L
info: QTS version: 4.3.4 #20240131
info: default volume: /share/CACHEDEV1_DATA
info: autorun partition should be: /dev/sdg6
done: mounted: ext2 device: /dev/sdg6 -> /tmp/create-autorun.fh0ERU
info: confirmed partition tag-file exists: uLinux.conf (we're in the right place)
done: created autorun script processor: /share/CACHEDEV1_DATA/.system/autorun/autorun.sh
done: created script store: /share/CACHEDEV1_DATA/.system/autorun/scripts
done: created symlink from partition to autorun.sh
skip: autorun.sh is already enabled in OS
done: unmounted ext2 autorun partition
info: please place your startup scripts into: /share/CACHEDEV1_DATA/.system/autorun/scripts
info: your autorun.sh file is located at: /share/CACHEDEV1_DATA/.system/autorun/autorun.sh
インストールしたら、/share/CACHEDEV1_DATA/.system/autorun/scriptsに必要なスクリプトを記述すればいいので、まずsudoersをコピーしてきます。
mkdir etc
/share/CACHEDEV1_DATA/.system/autorun/etc
cp /usr/etc/sudoers .
そしてsudoersを修正したあと、00_sudoersとでもしてscripts以下にファイルを作成します。
#!/usr/bin/env bash
ETC_DIR=/share/CACHEDEV1_DATA/.system/autorun/etc
cp -v ${ETC_DIR}/sudoers /usr/etc
これでsudoが使えるようになりました。
さっそくzshをインストール。
[kats@QNAP ~]$ opkg list zsh
zsh - 5.9-2 - Zsh is a UNIX command interpreter (shell) usable as an interactive
login shell and as a shell script command processor. Of the standard
shells, zsh most closely resembles ksh but includes many enhancements.
Zsh has command line editing, builtin spelling correction, programmable
command completion, shell functions (with autoloading), a history
mechanism, and a host of other features.
[kats@QNAP ~]$ sudo opkg install zsh
Installing zsh (5.9-2) to root...
Downloading http://bin.entware.net/x64-k3.2/zsh_5.9-2_x64-3.2.ipk
Installing libcap (2.69-1) to root...
Downloading http://bin.entware.net/x64-k3.2/libcap_2.69-1_x64-3.2.ipk
Installing libncursesw (6.4-2a) to root...
Downloading http://bin.entware.net/x64-k3.2/libncursesw_6.4-2a_x64-3.2.ipk
Installing libncurses (6.4-2a) to root...
Downloading http://bin.entware.net/x64-k3.2/libncurses_6.4-2a_x64-3.2.ipk
Configuring libcap.
Configuring libncursesw.
Configuring libncurses.
Configuring zsh.
[kats@QNAP ~]$ which zsh
/opt/bin/zsh
めでたしめでたし。