LAN (プライベートネットワーク) 内の Web サーバ (Linux + Apache) に、 ローカル (Windows + cygwin) から HTML コンテンツを差分アップロード (更新) したい。
このサーバ機 (初代 OpenBlockS) ではなぜか ssh がうまく動かない。 普段は LAN 内からのみ telnet でログインしている。
LAN は外界 (インターネット) からは ADSL モデム (ルータ兼ファイアウォール?) で遮断されている。 FTP (21) と HTTP (80) のポートのみ静的 IP マスカレードで外から Web サーバ (OpenBlockS) に通している。 他のポート (telnet 含む) は外からはアクセスできない。
サーバ側は Tar ball を展開、
# ./configure --with-rsh=rsh # make # make install
で。
追記:どっちみちサーバ (rsyncd) として動かす場合は ssh は使わないので、 ここで --with-rsh=rsh は特に指定する必要はないのかも?
クライアント側は cygwin の setup.exe で。
/home/web/
以下のディレクトリにある
(Apache の httpd.conf で「DocumentRoot = /home/web
」と設定)
owner1user1
(実アカウント)
/etc/rsyncd.conf
の内容
pid file = /var/run/rsyncd.pid uid = user1 gid = user1 auth users = user1 secrets file = /etc/rsyncd.secrets read only = no hosts allow = 192.168.0.0/24, 127.0.0.1 hosts deny = * [webcontents] comment = rsync web contents path = /home/web
/etc/rsyncd.secrets
の内容
user1:PASSWORD1
rsyncd.secrets のパーミッションは 600、オーナは root。
auth user が実アカウントでも、
rsync のパスワードは実アカウントのログイン用パスワードと同じ必要はない。 (重要!)
rsync --daemon
で、デーモンとして起動しておく。
/cygdrive/c/my_web
以下のディレクトリにある
アップロード用スクリプトの内容 (パスワードの渡し方がヒドい)
#!/bin/sh echo PASSWORD1 | rsync -rvut --delete $1 $2 $3 /cygdrive/c/my_web/ rsync://user1@192.168.0.10/webcontents
rsync に (外から) パラメータを追加して渡せるよう $1 〜 $3 をつけてある。 (このへんはテキトー。主に -n を渡してアップロードされるファイルを確認するくらいしか使わないので)
パスワードを記述したファイルを用意してそっちから読み込ませるオプション (--password-file=FILE
) を使おうとしたんだけどうまくいかず、
どーせ cygwin だしいいやと思って上記のように対処。
追記: Web で、 --password-file は現バージョンでは無効になっているらしいような記述を見かけた。
(その割には man を見てもしっかり出てくるんだけど…どうなってんだろ)
オプション -o -g まわりがよく分からず。 結局現状のように対処。 これならとりあえず新規ファイルも所有者 user1.user1 でアップロード (サーバ側に作成) される。 (こんなんばっかしだな…ちゃんとドキュメント探して読まなきゃなァ)
Windows からファイルを作成・更新すると、 cygwin 上でのパーミッションが 777 になってしまう。
(一度 644 などに修正しても、 Windows から更新するとまた 777 に戻る)
rsync のオプションに -p をつけておくと、
このパーミッションのままアップロードされてしまうのであまり好ましくないため、
このオプションはつけない。
-p をつけずに rsync で新規ファイルをアップロードすると、サーバ上でのパーミッションは 755 などになる。
これは一旦 644 などに直しておけば、その後の (rsync での) アップデートでもサーバ上のパーミッションは維持される。
(新規ファイルを上げた時にいちいち直しとくのめんどくさいけど)