FC2ブログ

PCで: PCの環境あれこれ

 ここのところウチのPCの環境の整備がちょこちょこと進みました。
 何だかしょっちゅう色々いじっていますが、実を言うと半分くらいはそれ自体が目的だったりするんですよね。マトモな人から見れば、なんでそんなに安定しないものを使ってるのかってところでしょうけど。
 少しここを改善したいなーみたいなところを見つけては手を加え、たまにそれでなんかおかしくなって原因を探って、みたいな感じですけど、そういうことをするのが実はストレス解消だったり。

 このところの進展は、結局のところ自分のミスが原因だったわけですが、それでも、色々調べてわかったことがあったり、何かができるようになったりすると面白いと感じたりします。

 そのミスのせいというのがまずは二つありました。

 一つは、USB3.0が不安定だったことです。
 以前eSATAで使っていた外付けHDDですが(というか私はPCにHDDを内蔵していなかったりしますが)、ディスクを複数入れられるケースなのでPMP(ポートマルチプライヤ)が必須です。しかしチップセットが対応していないのでPCI Expressのカードを使っていました。
 ですが、使いたいカードができてしまってスロットが不足し、仕方がないのでその外付けケースが対応している別のI/F、USB3.0にすることにしました。
 ちなみにPMPですが、Intelのチップセットは歴史的に大概ダメみたいですね。最新のはどうか知りませんが。SATAのコントローラだとMarvellのは使える傾向にあるようです。

 そのUSB3.0が不安定で、私はネットで見つけてきたパッチ(OSはLinuxなので)を代々のカーネルに当てて来ました。内容は、LPM機能対応の処理を無理やりカットするものです。
 いい加減対応してくれないかなーと先日ちょっとぐぐってみたら、どうやらそのトラブルはデバイスの方に問題があるケースが殆んどだとのこと。メーカーが対応したファームを出してくれるのを待つか別の製品に交換しなさいみたいな話がありました。
 私が持っているのは、買った時点で既にファームのアップデートが公開されていたのですが、念のため自分のを確認してみたら、なんとファームが古く、しかもそのアップデートで何が改善されるかというとUSB3.0。
 なのでそれを適用して無事使えるようになりました。

 しかしおかしいですね。私はずっとアップデートしたつもりになっていました。確認してみたところ、以前そのパッチはダウンロードしていましたし、今回ダウンロードしてみたものと内容を比べてみたら同一でした。
 してみると、私は持って来はしたもののそれを当てていなかったのか(笑)。

 ともあれ、これでカーネルをアップデートするときに自前で当てるパッチがまた減りました。
 ちょっと前に、某MLで流れていたパッチが本家に取り込まれたので、もう実質、マイナーなパッチは、とあるデバイスのために自分で作ったもののみってことになりました。だいぶやりやすくなりましたね。

 しかし、ここまでの話では、他の人にも意味がありそうなのってPMP対応はIntelがダメでMarvellがOkっぽいということくらいですね(笑)。

 さて、もう一つのミスは何かというと、カーネルのコンフィグでした。
 いつの頃からか、滅多に使わないのでよくわかりませんが、WiFiがうまく使えなくなりました。たまーにWiMAXのモバイルルータを使うことがあるんですが、この間使おうとしたらルータに接続できません。ちょっとつながったと思うとすぐに切れます。ルータ自身はWindowsから普通に使えるので、Linuxの問題です。
 まああまり困らないので放っておいたのですが、この間ちょっと気になって調べてみました。
 カーネルが何かログを出力するのは気づいていたのでそれでぐぐってみたら、どうやらCONFIG_CFG80211_INTERNAL_REGDBがYesになっていたせいらしいです。

 警告のメッセージは、こんな感じです。
WARNING: at net/wireless/reg.c:434 regulatory_init+0x85/0xf5 [cfg80211]()
db.txt is empty, you should update it...
 これは本来、今のシステムではドライバの持つ情報の一部をユーザランドに持つようになっているのですが、それをカーネルに組み込みたい人は上記のパラメータを設定するべし、というものでした。で、それが足りないのできちんと動かなかったわけです。
 どうしてこんなものを設定してしまったんだろう(笑)?
 参考URL: http://wireless.kernel.org/en/developers/Regulatory

 さて、たまにしか使わないので、WiFiのデバイスは普段は寝かせておいて、たまに使うときに自作のシェルスクリプトでつないでいるわけですけど、この問題を探っている間に色々波及的に変更したりしました。
 たとえば、もうiwconfigは古くて時代はiwらしい、とか。

iw is a new nl80211 based CLI configuration utility for wireless devices. It supports all new drivers that have been added to the kernel recently. The old tool iwconfing, which uses Wireless Extensions interface, is deprecated and it's strongly recommended to switch to iw and nl80211.

 どうでもいいですけど、大事なところに誤字がありますね。"iwconfing"だって。

 また、以前見せたパケットフィルタリングの設定も、実はその後、FORWARDに大きな抜けがあることに気づいてその設定を加えていたのですが、どうもこれがやってあるとWiFiの問題が出やすいように思えてちょっと止めていました。結局関係なかった、もしくは主因ではなかったのですけど。
 というわけで、またそれを設定するにあたりスクリプトを見直し、例えば、ログを取ってドロップする処理(iptablesのほぼ同じ行が二つ設定される)は何だか無駄なので、ログを取ってドロップするチェインを用意しそこにジャンプするようにしたとか。
 上記サイトにはその内、改良版を載せようかな。

 またその関連で、(スタティック)ルーティングの方も色々見直しました。ドロップする範囲とか、設定の順序を意識しないといけないぞとか。
 後者はつまり、ホストの設定にFQDNを使用できるようにしているわけですが、ではその名前解決をどうするのかという話。オプションでそのときに使うリゾルバのIPアドレスを指定できるんですが、そこには届くようにしないといけない。だからまずはdefault_providersはLANの設定から、とか。

 あとこれはついでですが。
 上記の二種類の設定スクリプトでも使用していますが、私はたまにこういうシェル関数を使用していました。
echo_and_do () {
if [ "$verbose" ]; then echo "$@"; fi
if [ "$execute" ]; then "$@"; fi
}
 要するに、この関数の引数としてコマンドラインを記述すると、$verboseが設定してあればそれを表示してから実行するし、$executeがなければ実行はしない。
 ちなみに後者、実際に実行する行ですが、evalを使わないのは、コマンド引数が空白文字を含むとうまく動かなくなるからです。
 ところがこれ、呼び出す行でリダイレクションを使用するとコマンドライン表示がそっちにまざってしまうんですよね。
 というわけでこんな風にしました。
exec 128>&1
echo_and_do () {
if [ "$verbose" ]; then echo "$@" >&128; fi
if [ "$execute" ]; then "$@"; fi
}
 関数定義のとき(通常は本来の処理開始前)に標準出力の口を複製しておいて、コマンドラインの表示にはそちらを使います。ちなみに128なのは16進数で切りがいいから、ではありません(笑)。しかし、深い意味があるわけでもありません。
 これを実行すると、こういう風になります。まずは呼び出し側。
echo_and_do echo 'x   y' z
echo_and_do echo xyz > /dev/null
echo_and_do echo *
echo_and_do echo '*'
 次に出力結果。
echo x   y z
x y z ← xとyの間の空白がちゃんと渡っている
echo xyz ← 実行結果は/dev/nullに捨てられているがコマンドラインは表示されている
echo a b c ← ちなみにカレントディレクトリにはa, b, cの三つのファイルがある
a b c
echo * ← このワイルドカードは展開されない
*
 こういう風にしても、例えば引数に変数を使ったことはわからないし、スクリプト実行時の標準出力以外にコマンドライン表示をリダイレクトするのはそれなりに面倒ですが。

 まあ、こういうのもbashに拘らないで例えばzshとか使うともっと便利に書けそうですけど。

 これ以外にもいくつか、使う上ではあまり変わらなくとも、ややこしい環境が少しすっきり綺麗になったので、何となく気持ちがいいです。

コメント

非公開コメント

プロフィール

水響俊二

Author:水響俊二
水響 俊二 [MIZUKI Shunji]

暫定的に、18禁作品の感想などは裏サイトで書いています。
   

最新記事
最新コメント
カテゴリ
検索フォーム
リンク
RSSリンクの表示
月別アーカイブ
アクセス解析中