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

mishimaの日記: Linuxの無線LANふたたび 4

日記 by mishima

ちっちゃいLinux Boxに無線LANアダプタを付けてルータにしてたのだけど、そのマシンのHDDが死んでしまったらしく動かなくなった。
そこで新しい小型PCを購入(最近はOSレスで2万でそこそこのものが買えるんですね)、
古いマシンで使っていた BAFFALO の無線LANアダプタ(WI-U2-433DHP)を付け替えてみたんだけど…

  • OS が Debian buster になってカーネルが 4.19 に上がった
  • https://github.com/diederikdehaas/rtl8812AU.git このソースだとポインタの型が変更になってビルドもできない。そこだけローカルに変更を入れてビルドだけは通してみたけど…動かない(hostapd を動かしたらOSがハングした)。
  • rtl8821のドライバはだいたい rtl8812 とリポジトリに入ってることが多いので、GitHubで「rtl8812au」で検索してみたけど…たくさんあって困る。
  • いくつかDLしてビルドを試してみるけど、基本的に rtl8812 中心でメンテされているようで、全然ビルドできない。
  • じゃあrtl8821中心でメンテされているものを…と思ってGitHubで「rtl8821au」を検索すると…これもそこそこたくさん出てくる
  • スターの多いものから順に試してみる
  • https://github.com/ulli-kroll/rtl8821au.git これもビルドできない。かなり多くのエラーが出たのでとりあえずあきらめる。
  • https://github.com/minjae/rtl8821au.git これは以前同様の手順ですんなりビルドできた。
    1. git clone https://github.com/minjae/rtl8821au.git /usr/src/minjae_rtl8821au-2019.01.23
    2. usb_intf.c に以下を追記 {USB_DEVICE(0x0411, 0x029b),.driver_info = RTL8821}, /* Buffalo - WI-U2-433DHP */
    3. 他のリポジトリにある dkms.conf をコピー。
    4. dkms install minjae_rtl8821au/2019.01.23
  • しかしmodprobe で組み込もうとすると「Unknown symbol __vfs_read」のエラーが。エラーメッセージでググると「sed -i -e "s/__vfs_read/kernel_read/" os_dep/osdep_service.c でイケる」という情報があったので再トライ。今度はちゃんと組み込み成功。
  • NICの名前を見ると… enXXXXXXXXXXXX みたいな変な名前。MACアドレス? しかもOS再起動や rmmod + modprobe のたびに名前が変わる。ネットワークの設定が書けないじゃん!
  • どうも Debian buster から NIC の名称に予測可能な名前 を採用したらしい。なぜかはわからないけどアダプタから固定のMACアドレスが取得できないみたいなので、その影響でNICの名前が毎回違ってしまう、と。
  • udevで固定化させる方法を検討中←いまここ

なるほど、Linuxの無線LANのドライバ周りは確かに苦労するわ…
ただ、今度の新しいマシンはSSDになったのでビルド等についてはけっこう快適です。

13860928 journal
日記

mishimaの日記: メタモデレートやってる? 13

日記 by mishima

自分は最近全くやってないのだけど、同意できないマイナスモデが最近増えた気がするんだよなぁ。

これで荒らしとか
これでフレームの元とか。

13674459 journal
モニター

mishimaの日記: cgroupのIO帯域制限と性能監視 2

日記 by mishima

弊社のサーバ運用ポリシーに変更があり、全Linuxサーバでウィルススキャンソフトによる全ファイルのフルスキャンが基本となった。
そのこと自体は問題ないのだけど(rootkit検出じゃなくてウィルススキャン、というところにやる意味あんのかという気がしないのではないけど、自分の管理している部分はともかくとして他のサーバ管理者の水準が怪しい気もするのでやらないよりはやったほうがいいと思う)、ふつうにスキャンを実施すると30分程度は負荷の高い状況になる。

ウィルススキャンというのは基本的に大量のIOを発行する処理で、放っておくとディスクのIO帯域を使い切ってしまう。その間に本来のサーバの業務が発生し、それに関連するディスクIOが発行された場合、業務側にそれなりの遅延が発生する。

これを避けるため、cgroup によるIO帯域の制限を入れてみた。この方法だとウィルススキャン中でも業務側の遅延があまり悪化せず、いい方法だと思ったのだけれど…欠点が一つあって、見かけ上CPU負荷が100%になってしまう。

cgroup による IO 帯域制限に引っかかったプロセスはIO待ち状態になるのだけど、CPU統計情報では「IO待ち状態のプロセスが存在している=IO待ち時間」としてカウントされてしまう。そのため、実際にはディスクIOの帯域に余裕があるにもかかわらずCPU使用率100%、うちIO待ち時間が95%…みたいな状態になる。気が付いてみると当たり前といえば当たり前なんだけど、これがよくあるCPU性能監視と相性が悪く、一般的な監視ツールの設定だけでは本当の高負荷との区別が難しい。

何かいい方法がないものだろうか。

13667880 journal
日記

mishimaの日記: grep -T オプションの仕様変更

日記 by mishima

grep-2.20の時点では、「grep -H -T キーワード ファイル名」で実行すると

"ファイル名" TAB(\x09) BS(\x08) ":" ヒットした内容

というフォーマットで表示されていた。これが grep-2.27になると

"ファイル名" ":" TAB(\x09) ヒットした内容

というフォーマットに変わる。

バッチ等で修正が必要な場所が地味に多いぞこれ…

13630796 journal
日記

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

日記 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 も含まれている」

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

typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...