パスワードを忘れた? アカウント作成

mishimaさんのトモダチの日記みんなの日記も見てね。 みんなの日記の更新状況はTwitterの@sradjp_journalsでもチェックできます。

13630796 journal
日記

mishimaの日記: 俺はもうべからず集を作らないといけないのかも知れない 34

日記 by mishima

「(OS起動直後はいろんなサービスが準備中だったりするから)OS起動後5分待ってから処理するようにしてね」
と要件に書いて委託したソースコードがこんな処理になって帰ってきた:

                                TimeSpan ReleaseTime = new TimeSpan(0, 5, 0);
                                DateTime DelayTime = DateTime.Now + ReleaseTime;
                                while (DelayTime > DateTime.Now)
                                { }

コメントには堂々と「指定した時間待機させるにはこれしかない」と書いてあるわけですよ。
ぐぬぬ。

13609639 journal
日記

mishimaの日記: ansible 2.5.3 is broken

日記 by mishima

synchronize モジュールが使えなくなってる。
調べてみたら既に報告済み https://github.com/ansible/ansible/issues/40551 で devel ブランチでは修正済みのようだけど…

うーん、こんなコアなモジュールが動かなくなるような変更が 2.5.2 → 2.5.3 で入っちゃうところで、 ansible の開発体制への不安感がある。枯れるのはまだまだ先のようだ。

13412191 journal
日記

mishimaの日記: Grafanaに日本語のダッシュボード名 3

日記 by mishima

Grafanaでダッシュボードを作成すると、そのダッシュボードに対応するURLが(共有とかの目的のために)自動的に生成される仕組みがある。たとえば ABCD とかいう名前のダッシュボードなら /grafana/dashboard/db/abcd というURLになるという寸法。

ところで、ここでダッシュボード名に日本語を付けると、非ASCIIコード部分がなんか適当に変換されるのね。

日本語_にほんご

ri-ben-yu-_nihongo

ひらがな部分はヘボン式に、漢字部分はピンインになってるっぽい。
この読みの情報はどこから持ってきているんだろう。
変換後のURLの予想が付かない(予測がめんどくさい)仕様だなぁ…

13411104 journal
日記

mishimaの日記: Linuxの無線LAN設定について 4

日記 by mishima

自宅の部屋の一部はAPからの無線LANの電波が届かない。
仕方がないのでアンテナのでかいUSBの無線LANデバイスを買ってきてみた(それまではAPとして使っているPC内蔵の無線LANを使用)。
あとで忘れそうなので備忘録として設定方法をメモっておく。

1. 買ってきたのは WI-U2-433DHP。ひとまずLinux PCに差し込んでみたけど認識されない。ぐぐると RTL8821 というチップを使っているらしく、Github にドライバが有るらしいことがわかる。RTL8812 という紛らわしいチップがあって、これと同じドライバで動くらしい。

2. この手のドライバをぶっこむときは、最近のお作法としては DKMS を使うのがいいらしい。まず /usr/src 以下に、「ドライバ名-バージョン番号」のフォーマットでソースを置く。
こんな感じ:
# git clone https://github.com/diederikdehaas/rtl8812AU.git /usr/src/diederikdehaas_rtl8812AU-4.3.22
(rtl8812auのドライバは色んな人が保守してるみたい。diederikdehaas という人のが一番良く保守されているようだ。あとでどのメンテナのソースを入れたのかわかりやすいようにドライバの名前にメンテナの名前を入れておく。)

3. dkms に組み込む。とりあえず次のコマンド一発でよい:
# dkms install diederikdehaas_8812au/4.3.22
うまくいかない場合は削除すればよい:
# dkms remove diederikdehaas_8812au/4.3.22 --all
現在の dkms の状態は次のようにすればわかる:
# dkms status

4. ビルド中にエラーが発生。ログが出てるようなので調べたら、なんか未定義の関数 allow_signal を呼んでいるような。インクルード漏れだろうと高をくくって osdep_service.h に追記:
#include <linux/signal.h>
#include <linux/sched/signal.h>

5. ビルドはうまくいってカーネルに組み込めるようになったが、やっぱりデバイスを認識しない。lsusb で ID を調べて、該当する ID がソース中にあるかどうか調べると、やっぱりない。usb_intf.c に列挙すればいいみたいなので追加してみる:
{USB_DEVICE(0x0411, 0x029b),.driver_info = RTL8821}, /* Buffalo - WI-U2-433DHP */

6. iwconfig で認識するようになったので hostapd の設定をしてみるが、"Could not select hw_mode and channel" などというエラーが出る。これもぐぐってみると hostapd.conf の hw_mode=a という部分がダメっぽい。hw_mode=g に変更する。

7. APとして無事構築完了。電波もかなり強くなって、自宅のどこでも利用できるようになった。

13185004 journal
日記

mishimaの日記: fluentd の forest plugin を Time slice で使用するとfluentd再起動時にログが消失する

日記 by mishima

https://github.com/tagomoris/fluent-plugin-forest

ここに以下のような設定例があるんだけど

<match service.*>
    @type forest
    subtype file
    remove_prefix service
    <template>
        time_slice_format %Y%m%d%H
        compress gz
        path /var/log/${tag}.*.log
    </template>
</match>

このような設定をしている場合、以下の条件が重なるとログが消失(バッファ内に格納されたまま吐き出されない)する。

* 再起動後、
* 同一 Time slice の期間内に、
* 同一タグのログが入力されない

forest プラグインは新規のタグを見つけるたびにスレッドを作成し、そのスレッドがそのタグについてのバッファファイルも管理するような構成になっている。再起動するとスレッドが全部停止するが、このときバッファファイルのことも忘れてしまうので、Time slice の期間が終わってもバッファファイルの書き出しが発生しない。

対策として flush_at_shutdown true を追記しておくことが必要(停止時にバッファファイルを書き出してくれる)。

11032381 journal
日記

mishimaの日記: Redmine のデータ移設(SQLite → MySQL)

日記 by mishima

Debian的に正しい手法(パッケージで提供されているファイルを変更しない)で、データをダンプする手順がわかりにくかったので、きちんと書き留めておく。

1. yaml_db をインストール

  # aptitude install ruby-yaml-db

2. 適当なディレクトリに redmine をコピー

%  rsync -aSvx /usr/share/redmine/ /tmp/redmine/

3. その中に yaml_db を入れる

  % rsync -aSvx /usr/lib/ruby/vendor_ruby/tasks/ /tmp/redmine/lib/tasks/.

4. ダンプする。

  % cd  /tmp/redmine
  % rake RAILS_ENV=production -r yaml_db db:dump

5. 移行先のデータベース情報に書き換える。

  # vi /etc/redmine/default/database.yml
 
production:
  adapter: mysql
  database: redmine_default
  host: localhost
  port:
  username: redmine_default
  password: XXXXXXXXX
  encoding: utf8

6. データをロードする。

  % rake RAILS_ENV=production -r yaml_db db:load

「Rake には tasks という概念がある。それは lib/tasks の下に格納される」
「yaml_db はデータダンプの tasks である db:dump を提供する。それは単独では機能せず、 db:schema:dump を提供する他の tasks を組み合わせて使う」
「Redmineのホームディレクトリには Rakefile があって、いろいろな tasks を提供する。その中に db:schema:dump も含まれている」

このあたりの前提条件がわからないと、何をやったらいいかわからないよ〜

10007348 journal
日記

mishimaの日記: VMware上の仮想サーバでfluentdが使えない件 4

日記 by mishima

http://d.hatena.ne.jp/oranie/20121107/1352298768
VMWareのバグで、ちいさなUDPパケットが破棄されてしまうんだと。なんだこのバグ…

fluentd では死活確認のため、1バイトの内容("\0")のパケットを送り合ってるんだけど、これが欠落しているのが原因。ソースコードを書き換えてパケットの中身を増やせば対応可能。うちでは12バイト以上にすればパケットの受信が確認できた。

2013-09-11 08:51:11 +0900 [warn]: temporarily failed to flush the buffer. next_retry=2013-09-11 08:51:12 +0900 error_class="RuntimeError" error="no nodes are available" instance=159840520

こんなエラーメッセージが出ているのがポイント。
あまりこのバグに引っかかる人は多くないような気がするが、一度引っかかると原因を探すのがなかなかむずかしい(アプリ側の設定を疑ってしまう)のでとりあえず情報を拡散してみる

9818418 journal
日記

mishimaの日記: 一般ユーザ権限でGemをインストールする

日記 by mishima

次のことをやればおk

mkdir ~/gems
cat >>~/.zshenv <<'EOF'
########
########
########
export GEM_HOME=$HOME/gems
export GEM_PATH=$HOME/gems
export PATH=$PATH:$HOME/gems/bin
EOF

zsh 使ってない?しらんがな

9669337 journal
日記

mishimaの日記: libkeepalive がDebianに入った!

日記 by mishima

今年の2月から入った模様。jessieとsidで使える。知らんかった~

8840055 journal
日記

mishimaの日記: ajaxterm より shellinabox

日記 by mishima

緊急時用の端末として ajaxterm を用意していたのだが、気がついたら最近の firefox ではちゃんと表示できないみたい。
ajaxterm は、固定のHTMLの中に AJAX で端末画面を埋め込むような動きになっていて、正常稼働の場合、DOMはこんな階層構造になるはず。

 div id="term" 要素 ← 静的なHTML中に記載
  div style="cursor: auto;" 要素 ← AJAX で挿入
   pre class="term" 要素 ← AJAX で挿入

ところが、最近の firefox ではDOMの構造はこうなる。

 div id="term" 要素 ← これは変更なし
  div style="cursor: auto;" 要素 ← これも変更なし
  div class="term" 要素 ← 階層が違うし、pre のはずが div になってる

HTML要素の挿入がミスってるぽい。JavaScriptは専門じゃないし、これを修正するのはめんどくせーなーと思ってしらべてたら ajaxterm と同じようなツールで shellinabox というのが最近の Debian に入ったらしい。
早速使ってみた。

…うわ、ちょうすごい!
うごきがいい!
しかも、ajaxterm みたいに、いじってないとすぐセッションが切断されちゃったりすることもない。
UTF-8 への対応もバッチリ。
こっちに乗り換えるぜ!

…と思ったのもつかの間、いくつかの記号が入力できないことに気がついた。「@」とか「:」とか。
ソフトウェアキーボードがあるにしても、これは常用するには辛い。
バグ報告にはイタリア語レイアウトのキーボードでも記号が入力できない事例が登録されていたので、たぶん日本語キーボードの問題だ。
こういうのは開発側で再現できないので、単にバグ報告を出しても修正されないことが多い。
もっと調べて見ることにする。

サーバ側で strace してみると、「ふつうの記号はキーを押すとサーバにリクエストが来る」
「入力されない記号の場合、キーを押してもサーバにリクエストがこない」ということが分かった。
ブラウザ側、JavaScript の実装に問題があるという事だ。

幸い firefox には開発者向けのデバッグ機能が載ってるので、そのまま JavaScript をデバッグする。
ちょっと調べた結果、次のようなことが分かった。

  1. keyDown, keyPress, keyUp あたりのイベントで面倒くさい処理をしている。
  2. 一文字のキーを押した時に、「keyDown/keyUp」の1組イベントが発生する場合と「keyPress」のイベント一つが発生する場合がある。どちらか一方だけが発生するはずだが、世の中のブラウザ実装では両方発生してしまうことも多いらしい。
  3. そのためshellinaboxでは「keyDownイベントでキー入力を処理した場合、keyPressイベントの処理は無視する」という実装をとっている。
  4. keyDownイベントは、通常のキー(ASCII文字=数字、アルファベット、記号など)以外に、シフトキー押下などでも発生する。そのため、keyDown時にこれを判定して、通常のキーの場合だけキー入力処理をおこなう。
  5. ところが、USキーボードでは、@ や : はシフトキーを押しながらでないと入力できないので、shellinaboxでは keyDown 時のチェック範囲から漏れている。
  6. そのため、JPキーボードでは、 - ^ @ : の4つのキーは「通常キーでもないけど特殊キーでもない」ものとして扱われてしまい、入力が無効になる
  7. シフトキーを押しながら - ^ @ : を入力した時に発生するはずの = ~ ` * も同様に入力が無効になる。

これに対して、次のようにパッチを作成した。

  1. apt-get source shellinabox でソースを取得し、 debuild でコンパイルできることを確認する。
  2. dch で適当に changelog を書く。
  3. dquilt new fix-keycode.patch でパッチを作成する。(dquiltはDebianのNew Mainteiner Guideを参照)
  4. dquilt add shellinabox/vt100.js
  5. vt100.jsを修正する。

    add ascii keycode.
    --- a/shellinabox/vt100.js
    +++ b/shellinabox/vt100.js
    @@ -2933,8 +2933,10 @@
       // } 107
       var asciiKey                  =
         event.keyCode ==  32                         ||
    -    event.keyCode >=  48 && event.keyCode <=  57 ||
    -    event.keyCode >=  65 && event.keyCode <=  90;
    +    event.keyCode == 160                         ||
    +    event.keyCode == 173                         ||
    +    event.keyCode >=  48 && event.keyCode <=  58 ||
    +    event.keyCode >=  64 && event.keyCode <=  90;
       var alphNumKey                =
         asciiKey                                     ||
         event.keyCode ==  59 ||

  6. dquilt refresh
  7. dquilt header -e
  8. 再度 debuild で完成!

これで @ も * も入力できる。パスワード入力時に「なんでパスワード間違いになっちゃうんだろう」とか悩まなくても良くなるわけです。
ということで、みなさん安心して shellinabox に乗り換えればいいと思うよ!

typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...