2009年10月10日土曜日

FreeBSD 8.0 無線LAN(wpi)の状況

/usr/src/UPDATINGの20080420のエントリーを見たら、そもそも無線LANは、直接デバイスを使わずwlanデバイス経由で使う設定になったみたい。CURRENTでは1年以上前からそうだったみたいですなぁ。

とりあえず無線LANは使えているが、よく切れる。
/var/log/messageを見ると以下のようなメッセージが出ている。


Oct 10 15:17:24 rx kernel: Beacon miss: 20 >= 7
Oct 10 15:17:24 rx kernel: Beacon miss: 21 >= 7
Oct 10 15:17:24 rx kernel: wpi_newstate: RUN -> ASSOC flags 0x0
Oct 10 15:17:24 rx kernel: wlan0: link state changed to DOWN
Oct 10 15:17:24 rx kernel: Beacon miss: 22 >= 7
Oct 10 15:17:24 rx kernel: Beacon miss: 23 >= 7
...


再接続するまで、missの後の数字がひたすら増えて行き、/var/log/messagesを食い付くしてしまいとっても不便です。とりあえず、「ifconfig wlan0 wepmode on」を実行しておいて、その場しのぎをしているのだけど。何が問題なのでしょう。

2009年10月9日金曜日

FreeBSD 8.0 無線LAN(wpi)の設定

無線LANがwpiデバイスなのだが、FreeBSD 8.0-stableにしたら、上手く使えなかった。

manを見つつ、よくわからないまま、wlan デバイスを作成して、そちらを使うと上手く通信出来たので、とりあえずメモしておく。

マジメに使い方を確認しておいた方が良いなぁ。

こんな感じ。今迄wpiに直接設定していたのを、wlan経由に変更する感じか?

ifconfig wlan0 create wlandev wpi0 ssid
ifconfig wlan0 weptxkey 1 wepkey 1:
ifconfig wlan0 wepkey
ifconfig wlan0 wepmode on
ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0
route add default 192.168.0.254


本当に、訳がわからんままに設定しているので、変な記述かも。
とりあえず通信出来ているので良いことにする。

2009年9月16日水曜日

ユーザ権限でgemをインストール

gemをインストールするにあたって、ユーザ権限でインストールしている。
ユーザ権限でインストールを行なうと、~/.gem配下にインストールされる。

pure rubyのgemの場合には問題無くインストール出来るが、sqlite3-rubyをイ
ンストールする際に、2点程注意点があるので、その備忘録。

なにも考えず、以下のコマンドだとインストールエラーとなった。

gem install


結論から言うと、以下のコマンドでインストール出来た。

env RB_USER_INSTALL= gem install sqlite3-ruby -- \
--with-sqlite3-include=/usr/local/include \
--with-sqlite3-lib=/usr/local/lib


そもそも、sqlite3-rubyはpure rubyのコードでは無く、C言語のソースをコン
パイルしてOSネイティブのライブラリを作成して、インストールされている。

sqlite3-rubyについては、extconf.rbを実行することで、Makefileを作成して、
コンパイルを実施している。他のOSネイティブのライブラリを用意するgemも、
多くはextconf.rbを使用していると思われるので、同様の手順で実施可能であ
ろう。

ライブラリの指定


対象gem固有のextconf.rbオプションの設定について。

gem install sqlite3-ruby -- \
--with-sqlite3-include=/usr/local/include \
--with-sqlite3-lib=/usr/local/lib


gem installをそのまま指定した場合、sqliteのライブラリを見つけることが
出来なかった。~/.gem/ruby/1.8/gems/sqlite3-ruby-1.2.5/README.txtにやり
かたその物が記載されていたので、それを参考に実施。

gem installの引数に、「--」で区切って、extconf.rbに渡す引数を指定する
のがミソのようだ。

ユーザ権限でインストール


extconf.rbを用いてユーザ権限でインストールする方法について。

env RB_USER_INSTALL= gem install 。。。


FreeBSDのextconf.rbはデフォルトではインストール時に、インストールファ
イルをroot権限に変更しようとする。その為、ユーザ権限でインストールしよ
うとしても、ファイルをroot権限に変更出来ないのでエラーとなる。
環境変数 RB_USER_INSTALL を設定してあげれば、ユーザ権限でインストール
が可能になるので、コマンドラインでenvを用いて指定してあげる。

2009年9月13日日曜日

mv: set flags (was: 00000000): Invalid argument

security run outputエラー


FreeBSDで日々送付されるsecurity run output内に、気になるメッセージ
が。。。

mv: /var/log/setuid.today: set flags (was: 00000000): Invalid argument


どうも、ZFSのバージョンによるが、UFS領域からZFS領域にファイルをmvする
とこのメッセージが発生するようです。

私の環境は、ルートがUFSでそれ以外はZFSという設定で、security run
output内のcheck_diff関数で/tmp(UFS)から/var/log(ZFS)にファイルをコピー
するので、上記のメッセージが出ている。

FreeBSDでは、zfsのバージョンは現在3、zpoolのバージョンは現在13となってい
る。私の環境だと、zfs:1/zpool:6となっていて結構古い。これが原因のよう。

(参照) http://www.mail-archive.com/freebsd-stable@freebsd.org/msg104840.html

とりあえずエラーは出るけど、動いてはいるようなので、無視してます。

zfsやzpoolのバージョンを上げれば問題無いみたいだから、上げるのか吉かと。


このmvはどこで呼ばれている?


mvは/etc/periodic/security/security.functionsのcheck_diff関数で使用さ
れています。
check_diff関数は/etc/periodic/security/配下の各ファイルで使われている
みたい。

2009年9月12日土曜日

bsnmpd

bsnmpdツールのインストール。



net-mgmt/bsnmptoolsをインストールすることで、bsnmpwalkを使えるようになる。

/etc/snmpd.configの編集


方針としては、「trapやwriteを無効」「MIBは可能な限り有効」。

@@ -6,18 +6,18 @@
#
# Set some common variables
#
-location := "Room 200"
-contact := "sysmeister@example.com"
+location := "mobile"
+contact := "秘密"
system := 1 # FreeBSD
-traphost := localhost
-trapport := 162
+# traphost := localhost
+# trapport := 162

# Change this!
-read := "public"
+read := "秘密"
# Uncomment begemotSnmpdCommunityString.0.2 below that sets the community
# string to enable write access.
-write := "geheim"
-trap := "mytrap"
+# write := "geheim"
+# trap := "mytrap"

#
# Configuration
@@ -50,9 +50,9 @@
begemotSnmpdLocalPortType."/var/run/snmpd.sock" = 4

# send traps to the traphost
-begemotTrapSinkStatus.[$(traphost)].$(trapport) = 4
-begemotTrapSinkVersion.[$(traphost)].$(trapport) = 2
-begemotTrapSinkComm.[$(traphost)].$(trapport) = $(trap)
+# begemotTrapSinkStatus.[$(traphost)].$(trapport) = 4
+# begemotTrapSinkVersion.[$(traphost)].$(trapport) = 2
+# begemotTrapSinkComm.[$(traphost)].$(trapport) = $(trap)

sysContact = $(contact)
sysLocation = $(location)
@@ -74,10 +74,10 @@
#
# Netgraph module
#
-#begemotSnmpdModulePath."netgraph" = "/usr/lib/snmp_netgraph.so"
-#
-#%netgraph
-#begemotNgControlNodeName = "snmpd"
+begemotSnmpdModulePath."netgraph" = "/usr/lib/snmp_netgraph.so"
+
+%netgraph
+begemotNgControlNodeName = "snmpd"

#
# pf(4) module
@@ -88,10 +88,10 @@
# Host resources module
# This requires the mibII module.
#
-#begemotSnmpdModulePath."hostres" = "/usr/lib/snmp_hostres.so"
+begemotSnmpdModulePath."hostres" = "/usr/lib/snmp_hostres.so"

#
# Bridge module
# This requires the mibII module.
#
-#begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"
+begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"


bsnmpdの起動。


/etc/rc.confに「bsnmpd_enable="YES"」の行を追加して、

# sudo /etc/rc.d/bsnmpd start

を実行することにより、起動。

bsnmpwalkでの動作確認


OIDを文字列にする為に、「-i」オプションでdefファイルを設定。
絶対パスで指定するのが基本みたいだけど、デフォルトでは
「/usr/share/snmp/defs」を検索してくれるので、ファイル名のみを「-i」で
複数する。

bsnmpwalk -i atm_freebsd.def -i hostres_tree.def -i pf_tree.def -i atm_tree.def -i mibII_tree.def -i tree.def -i bridge_tree.def -i netgraph_tree.def -s ”秘密”@localhost


現在有効なOIDの行数を確認すると、9056行だった。

hrProcessorLoad(1.3.6.1.2.1.25.3.3.1.2)


どうもhrProcessorLoadは上手く取得出来ない様子。
(参考) http://www.mail-archive.com/freebsd-stable@freebsd.org/msg100522.html

ここから特に話は進んでない様子。

2009年7月5日日曜日

/usr on zfs

FreeBSDのroot以外をzfsで構築している。
昨日(2009/07/05)のcsupでソースをアップデートした所、
make installworldでこけた。

理由はinstallコマンドでschgが設定される為エラーになった。
zfsはFreeBSDのファイルフラグに対応していない為。

make installworld -DNO_FSCHG

でファイルフラグが付くのを回避出来た。
(参照) /usr/share/mk/bsd.lib.mk と bsd.prog.mk

2009年1月26日月曜日

Rubyでファイルの暗号化(RSA)

rubyにて、opensslライブラリを用いて、文字列の暗号化。
公開鍵で暗号化して、秘密鍵で複合化。

webからはデータの入力だけにして、確認は人手で別途実施する場合などに使えるかと思います。

個人的には、南京錠で言うところの、錠(ジョウ)が公開鍵、
鍵(カギ)が秘密鍵だと理解しているので、それも追加しながらコメント

require 'openssl'
include OpenSSL::PKey

rsa = RSA.generate(2048)
これで、RSAを作成出来た。

rsa.public? # => true
rsa.private? #=> true

rsaには、公開鍵(錠)と暗号鍵(鍵)が含まれている。

公開鍵(錠)は、そのままテキストで取り出し。
public_key = rsa.public_key.to_s

暗号鍵(鍵)は、AESで暗号化し(パスワード付け)て取りだし。
private_key = rsa.export(OpenSSL::Cipher::Cipher.new('aes256'),
'password')

さて、ここで特定の文字列を暗号化してみる。対象はこれね。
target = 'hogehoge'

まずは、public_keyから公開鍵(錠)のrsaオブジェクト作成
pub = RSA.new(public_key)
pub.public? #=> true
pub.private? #=> fale

さあ、暗号化。
enc_target = pub.public_encrypt(target)
これで、targetを暗号化出来ました。
たしかに、’hogehoge’という文字列はみるかげもありません。

ちなみに、enc_targetはStringのようです。
enc_targe.class #=> string

では、次に複合化します。先程とは逆に秘密鍵(鍵)のrsaオブジェクト作成
private = RSA.new(private_key,'password')
こちらは、錠と鍵の両方を持っているようです。
private.public? #=> true
private.private? #=> ture

private.private_decrypt(enc_target) #=> 'hogehoge'

おおお、複合化出来ました。