あるシステム管理者の日常 このページをアンテナに追加 RSSフィード

2018-04-20 rsyncをexpectで動かしたかった

rsyncをexpectで動かしたかった

| 17:48 | rsyncをexpectで動かしたかったを含むブックマーク

4月11日のエントリで書いた件。これをexpectをつかって自動化しようとしました。

書いたスクリプトがこんなの。

#!/usr/bin/expect
set timeout -1
spawn sudo rsync -auvz -e "sudo -u hoge ssh -l hoge" --rsync-path="sudo rsync" /usr/local/apache2/ server1:/usr/local/apache2/
expect {
    -re "Enter passphrase for key .*: " {
        send "password\n"
    }
}

ところがこれがちゃんと動作しない。spawnでrsyncは起動しているし、expectで"Enter passphrase for.."もちゃんとキャッチしている。ところが、sendしてくれないでスルッと終了する。

なぜだと悩むこと3時間ほど。expectのmanを繰り返し読んでいるとこんな記述を見つけました。

       send [-flags] string
             Sends string to the current process.  For example, the command

                 send "hello world\r"

             sends the characters, h e l l o <blank> w o r l d <return> to the
             current process.  (Tcl includes  a  printf-like  command  (called
             format) which can build arbitrarily complex strings.)

sendのところの説明ですね。カレントプロセス文字列を送付するとあります。

上記に例で"Enter passphrase for key.."と聞いているのはexpectのspawnで起動されたrsyncではなく、rsync中の-eオプションで指定されているssh。つまりexpectからみてカレントプロセスではないんですな。

仕方がないので、ノーパスワードの鍵ペアを作ってsshを張ることにします。

トラックバック - http://d.hatena.ne.jp/rougeref/20180420

2018-04-19 ルールテスト作成マクロ

ルールテスト作成マクロ

| 10:43 | ルールテスト作成マクロを含むブックマーク

今年度からJBAからルールテスト例題が配布されています。150問あって、カテゴリ単位で数問づつだしないってことになっています。

しかしながらそんなこと手動でやっていたら時間がかかるし間違いが発生するので、例題から適当に選択してルールテストをつくるマクロを作成しました。

ループが複数あったり、行の幅が決め打ちだったりいろいろ手抜きをしている部分はありますが、まぁそれなりに動くみたい。難易度の選択ルーチンはありません。

KyuuChanKyuuChan 2018/04/23 14:00 >> 難易度の選択ルーチンはありません。

上記ロジック対応したとしても難易度の基準は"あるシスさん"基準ですね 笑

KyuuChanKyuuChan 2018/04/23 14:04 訂正! 難易度が書いてありますね ハハハ 苦笑

rougerefrougeref 2018/04/23 14:05 例題が難易度A〜Dでわけられているんです。
乱数で問題選択したときに、決められた難易度以下ってなルーチンをつければいいんでしょうが。

KyuuChanKyuuChan 2018/04/23 14:13 上手く作れば全国区で使ってもらえそうですね!

rougerefrougeref 2018/04/23 14:24 あとは任せました!>KyuuChan

KyuuChanKyuuChan 2018/04/23 17:53 頭がウニなのでごめんなさい&#128591;

トラックバック - http://d.hatena.ne.jp/rougeref/20180419

2018-04-18 nginxでHTMLを改変

nginxでHTMLを改変

| 10:08 | nginxでHTMLを改変を含むブックマーク

nginxでリバースプロクシを実現しているアプリケーションが出力するHTMLに、aタグとか画像リンク中に絶対パスが含まれているところがあって、ちょいと困ったことになっている。

消してくれとリクエストしたんですが、ベンダさんはできないとの回答。できないのとやり方を知らないのは違うぞ。

まぁそんなことも言ってられないのでこちらでなんとかする。要するに絶対パスのところに入ってるアドレスとかプロトコルあたりを消しちゃえばいい。

Apacheならmod_sedでできるんですが、nginxだとどうするんだろと調べたところ、sub_moduleってのがあるみたいなのでこれで実現。

nginxをconfigure,makeし直す。 

sub_moduleを有効にする。

$ ./configure ..(中略) --with-http_sub_module
$ make 
$ sudo make install

設定ファイル書く

こんな感じ。

location /hoge {
    proxy_set_header Accept-Encoding "";
    sub_filter 'http://hoge.example.com:8080' '' ;
    sub_filter_once off
    proxy_pass http://hoge.example.com:8080/fuga ;
}

nginxとプロクシ先との通信が圧縮されていると変換できないので、Accept-Encodingを空にする。残念ながらこのモジュール正規表現は利用できないので、単純な文字列置き換えしかできない。今回のケースではそれでも充分役に立つのでそのまま利用する。

正規表現での置き換えが必要な場合は lua モジュールを利用するとハッピーなようですが、なかなか敷居が高い。

再起動する

ちゃんと再起動する。-s reloadだと上記モジュール有効になりません。それで1時間ほど悩んだ。

トラックバック - http://d.hatena.ne.jp/rougeref/20180418

2018-04-17 プール

プール

| 10:34 | プールを含むブックマーク

先週の金曜日に続いてプール。走れないので有酸素というとスイムかなぁということで走れるようになるまでは積極的にプールへ行きたいと思います。

先週金曜日に数年来つかっていたゴーグルのバンドが切れてしまって、使えなくなってしまいました。amazonで適当に見繕ってゴーグルを購入して、この日初めて使いました。

普通ゴーグルというと体に当たるところ(目の周辺)にはなにかしらのパットがついていてそれで密着させていると思うのですが、購入したゴーグルにはパットに該当する部分がまったくなくて、直接プラスチック部分と体を密着させるタイプ。バンドでぎゅっと閉めると確かに全然水は入ってきません。その代わり、体にあたっている部分がだんだん痛くなってくる。短い時間なら問題ありませんが、1キロとか2キロとかだと30分〜50分ほど。その時間内イタいのはいやだなぁ。

慣れてくるんならいいんだけど。最近イタいって話ばかりしているような気がします。

トラックバック - http://d.hatena.ne.jp/rougeref/20180417

2018-04-16 社会人連盟審判委員会

社会人連盟審判委員会

| 10:27 | 社会人連盟審判委員会を含むブックマーク

月曜日は定時後に社会人連盟の審判委員会。組織改編後の初会合です。21日に予定されている総会にむけていろいろ話し合い。

会社から会場のJBAが入っているビルまではおよそ10kmほど。自転車だとちょうどいい距離なので、いつもシェアサイクルでいっています。この日も久しぶりに自転車で行ったのですが、膝がちゃんと曲がらないのでずっと立ちこぎで走っていました。経が小さい自転車でスタンディングすると不安定なのでちょっと怖いですね。

トラックバック - http://d.hatena.ne.jp/rougeref/20180416