08 IO-DATA製LANDISKをいぢる
1.まえおき
IO−DATAからLANDISKを購入。(HDL−GTRシリーズ)
で、以下のような共有フォルダを作ろうとしました。

作成フォルダ名
フォルダ権限ユーザ"A"及び管理者は、書き込み可
その他のユーザは読み取り専用

ファイルの提供者"A"とそれを受け取る者とで権限を分けて、提供者以外はそこに書き込めないようにしたかったのですが、そういう設定が管理画面のどこにも見当たらない。
フォルダaに対して「読み取り専用」にするかどうかの設定はあるのですが、ユーザやグループに対しての設定がどこを探してもない。

これでは読み取り専用のフォルダを誰もメンテナンスできない?
これが信じられなくてメーカーに問い合わせたところ、以下の回答が


 また、読み取り専用となっております共有フォルダには、大変申し訳ございませんが、HDL-GTR2U2.0の設定画面から読み取り専用を解除していただかないと、管理者であっても書き込みすることができません。

LANDISKの中身はsambaだと知っていたのでこれくらいの事はできると思い込み調べなかったのが悪い。
とはいえ、購入した以上無駄にはできないので、sambaの設定を直接変更することにしました。
というわけで、そのカスタマイズの内容を書いていきます。


2.まずはtelnetできるようにしよう
LANDISKの設定は管理画面でしか行えません。sambaの設定を直接変更するには、telnetやsshでLANDISKにログインしなければなりません。
幸いLANDISKにはtelnetdが起動されてないだけで、導入はされてるらしいです。
なら、それを起動するだけでtelnet接続が可能になります。簡単。


最初に、LANDISKのファームウェアを最新にします。
IO−DATAのサイトから、最新版をダウンロードします。
ファームウェア自身はUNIXファイルですが、自動解凍ファイルはWindowsファイルなので解凍する環境のOSに合わせたファームウェアを選択します。(↓はWin2000用)


ダウンロードしたexeファイルを起動すると、update.tgzが出てきますので、それをLANDISKの管理画面からファームウェア更新画面を開き、参照ボタンを押してupdate.tgzを選択します。

※バージョンを見てすでに最新であれば、更新する必要はないです



LANDISK上のファームウェアと、ダウンロードしたupdate.tgzが同じバージョンになったら、update.tgzを基にtelnetd起動版に改造して、それをファームウェア更新すれば完成です。
大雑把に書くと、update.tgzの中からrc.localを残して全部削除し、rc.localの最後の行にtelnetdを起動する処理を追加します。

では、具体的に行った操作について順を追って書いていきます。
update.tgzの改造はUNIX環境で行う必要があるので、まずはUNIX環境に転送して、それから以下のように操作します。

まずlsコマンドでupdate.tgzがあることを確認
sh-3.00# ls
update.tgz

作業ディレクトリの作成を行い、作業ディレクトリに移動、そこにupdateg.tgzを解凍
sh-3.00# mkdir hdl2u
sh-3.00# cd hdl2u
sh-3.00# tar xvfz ../update.tgz
conf_HDL-GT.tgz
conf_HDL-GTR.tgz
fix_112.tgz
for_HDL-GTR_series
for_HDL-GT_series
landisk-update.sh
rmlist
update-files.tar.gz
update.pl

不要なファイル及びディレクトリを削除
sh-3.00# rm -rf conf_HDL-GT.tgz fix_112.tgz rmlist update.pl conf_HDL-GTR.tgz
sh-3.00# ls
for_HDL-GTR_series  for_HDL-GT_series  landisk-update.sh  update-files.tar.gz

残ったファイルはそれぞれ次のような用途のファイルです
ファイルファイルの用途
for_HDL-GTR_seriesバージョン番号が入っている
for_HDL-GT_seriesバージョン番号が入っている
landisk-update.sh更新プログラム
update-files.tar.gz更新対象

更新プログラムlandisk−update.shをエディタで編集。不要な部分を削除する
sh-3.00# vi landisk-update.sh

landisk−update.shの内容は500行近くもあるのですが、update−files.tar.gzを展開する箇所だけあればいいので、それを残して他は消しまくります。
出来上がったファイルをcatコマンドで見ると以下のようになります。
sh-3.00# cat landisk-update.sh
#!/bin/sh
#
# landisk-update.sh
#
# $Id$
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

ROOTPATH='/mnt/hda5/.update'

TARFILE="${ROOTPATH}/update-files.tar.gz"

# remount rw /
mount -o remount,rw,noatime /

# tarで展開
tar xpzf ${TARFILE} -C / || exit_select 1

本当は元ファイルの最後のほうにごみファイルの削除処理があるのですが、どうせtelnetして自分で消せばいいので、その行も削除。

次に、update−files.tar.gzを変更します。
作業ディレクトリの作成を行い、そこに移動し、update−files.tar.gzを解凍します。
sh-3.00# mkdir upd
sh-3.00# cd upd
sh-3.00# tar xvfz ../update-files.tar.gz
./bin/
./bin/busybox
./boot/
    :
    :
./usr/share/locale/pl/LC_MESSAGES/
./usr/share/locale/pl/LC_MESSAGES/quota.mo

解凍したファイルをlsコマンドで確認すると以下のようになります。
sh-3.00# ls
bin  boot  dev  etc  lib  root  sbin  usr

etc/init.d/rc.local以外は全部削除します。
まずetc以外を全部削除。
その後etcに移動し、init.d以外は全部削除。
最後にinit.dに移動し、rc.local以外は全部削除します。
sh-3.00# rm -rf [!e*]
sh-3.00# ls
etc
sh-3.00# cd etc
sh-3.00# ls
apache2  blkid.tab      cron.weekly  init.d   logrotate_post
apcupsd  blkid.tab.old  default      logmail  rc2.d
sh-3.00# rm -rf [!i]*
sh-3.00# ls
init.d
sh-3.00# cd init.d
sh-3.00# ls
apcupsd  lcd        rc.local  sysklogd  ups-monitor
fwcheck  mountraid  shutdown  umountfs  winbind
sh-3.00# rm [!r]*
sh-3.00# ls
rc.local

次に、rc.localをエディタで編集し、最後の行にtelnetdを起動する行を追加します。
sh-3.00# vi rc.local

出来上がったファイルをcatコマンドで見ると以下のようになります。
sh-3.00# cat rc.local
    :
    :
        ln -s $WWW_DIR/$BASENAME.$MODEL_SUFFIX.cgi $WWWMODEL_DIR/$file
        ;;
    esac
done

# TELNET
telnetd

telnetするためのもう一つ、etc/securettyファイルの作成を行います。
一つ上の階層に移動し、securettyファイルをエディタで新規作成します。
sh-3.00# cd ..
sh-3.00# ls
init.d
sh-3.00# vi securetty

securettyファイルの内容は、ただpts/0があるだけ。(念のためconsoleも用意)
securettyファイルをcatコマンドで見ると以下のようになります。
sh-3.00# cat securetty
console
pts/0


lsコマンドで確認しながら、あとは圧縮していきます。
sh-3.00# ls
init.d             securetty
sh-3.00# cd ..
sh-3.00# ls
etc
sh-3.00# tar cvfz ../upd.tar.tgz .
./
./etc/
./etc/securetty
./etc/init.d/
./etc/init.d/rc.local
sh-3.00# cd ..
sh-3.00# ls
for_HDL-GTR_series  landisk-update.sh  upd.tar.gz
for_HDL-GT_series   upd                 update-files.tar.gz
sh-3.00# rm -rf upd
sh-3.00# mv upd.tar.gz update-files.tar.gz
sh-3.00# ls -l
合計 16
-rw-r--r--  1 root root    5  2月  8 11:45 for_HDL-GTR_series
-rw-r--r--  1 root root    5  2月  8 11:45 for_HDL-GT_series
-rwxrwxrwx  1 root root  461  7月  4 14:18 landisk-update.sh
-rw-r--r--  1 root root 2184  7月  4 14:24 update-files.tar.gz

for_xxxxファイルにバージョンが書かれているので数値を更新します。
sh-3.00# vi for_*

今回は、内容が1.24だったので1.241に変更しました。
catコマンドで見た結果↓
sh-3.00# cat for_HDL-GTR_*
1.241
sh-3.00# cat for_HDL-GT_*
1.241

最後に、update.tgzを作成します。
sh-3.00# tar cvfz ../update_new.tgz *
for_HDL-GTR_series
for_HDL-GT_series
landisk-update.sh
update-files.tar.gz
sh-3.00# cd ..
sh-3.00# ls
update_new.tgz  update.tgz


出来上がったupdate_new.tgzを、管理画面にて更新します。


バージョン1.241であることを確認し、更新ボタンを押します。

※1.241ですがこの値は更新されないのでアップデート後のバージョンは1.24のままです。これによって失敗してもやり直しができます。



これでtelnetできるようになります。実際にtelnetして、パスワード変更とアップデート時のごみ掃除を行います。
以下、telnet後〜パスワード変更の画面
Using fallback suid method
LANDISK login: root
Linux LANDISK 2.6.12.6-arm1 #4 Fri Feb 8 10:22:50 JST 2008 armv5tejl GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
LANDISK:~# mount -o rw,remount /
LANDISK:~# passwd
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
LANDISK:~# 

アップデート時にできたファイルを削除する画面
LANDISK:~# cd /mnt/hda5/.update
LANDISK:/mnt/hda5/.update# ls
for_HDL-GTR_series  for_HDL-GT_series  landisk-update.sh  update-files.tar.gz
LANDISK:/mnt/hda5/.update# rm *
LANDISK:/mnt/hda5/.update# ls
LANDISK:/mnt/hda5/.update#



3.そしてsambaの設定を直接変更…しなかった
当初の目的は、1つの共有フォルダに対しユーザによって権限を分けることですが、権限が別の共有フォルダを複数用意し元をシンボリックリンクすれば同じことなのだし、こちらの方が簡単なので、そうすることにしました。

管理画面で共有フォルダを2つ用意する
a_write:ユーザ「system」だけが利用可能。書き込み可


a_read:すべてのユーザが利用可能。読み取り専用


LANDISKにtelnetし、上記2つの共有フォルダのディレクトリを一つに
LANDISK:~# cd /mnt/sataraid1/share
LANDISK:/mnt/sataraid1/share# ls -l
合計 0
drwxr-xr-x  2 nobody nobody   8 2008-07-07 14:22 a_read
drwxrwxrwx  2 system system 124 2008-07-07 13:15 a_write
drwxrwxr-x  2 nobody nobody   8 2008-07-04 17:48 disk1
LANDISK:/mnt/sataraid1/share# rm -rf a_read
LANDISK:/mnt/sataraid1/share# ln -s a_write a_read
LANDISK:/mnt/sataraid1/share# ls -l
合計 0
lrwxrwxrwx  1 root   root     7 2008-07-07 14:23 a_read -> a_write
drwxrwxrwx  2 system system 124 2008-07-07 13:15 a_write
drwxrwxr-x  2 nobody nobody   8 2008-07-04 17:48 disk1
LANDISK:/mnt/sataraid1/share# 
おわり

雑記