GRUB2からLVMにインストールしたGRUB2をチェーンロードする

一台のマシンに複数のディストリビューションをインストールしているので、特定のディストリビューションでインストールしたGRUBからブートするのは無理が出てきた。そこで、1段目のGRUBではディストリビューションを選択して、各ディストリビューションの管理する2段目のGRUBカーネルを選択してブートする構成にすることにした。/boot以外のパーティションはLVMを使って構成している。

最初は各ディストリビューションのrootパーティション(LVM)にgrub-setupコマンドを使用してチェーンロード用のPBRを書き込もうとしたのだが、

$ sudo grub-setup /dev/mapper/vg1-Mint64
grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition.  This is a BAD idea..
grub-setup: error: embedding is not possible, but this is required when the root device is on a RAID array or LVM volume.

と言われて失敗してしまう。

そもそもPBRにインストールする必要は本当にあるのかと考え直したところ、直接GRUBのイメージをロードして起動し直してやればいいのではないかと気づいた。(起動しないで設定だけ読む手も考えられるが)
GRUB2の本体はcore.imgらしいので、起動に必要そうなモジュールを2段目のGRUBに埋め込んで作り直す。

$ sudo grub-mkimage -p '(vg1-Mint64)/boot/grub' -O i386-pc -o /boot/grub/core.img biosdisk ext2 part_msdos lvm

-pオプションでパーティションの名前を埋め込んでやるのは重要で、これを怠ると起動時に

grub rescue>

となり停止することになる。どのパーティションから設定やモジュールを読めばいいのかが分からなくなっているのだと考えられる。

そして1段目のGRUB2にチェインロードのためのメニューを作成する。

menuentry "Linux Mint 64 bit (on /dev/vg1/Mint64)" {
        insmod ext2
        insmod lvm
        set root=(vg1-Mint64)
        multiboot /boot/grub/core.img
}

rtl8192cuのドライバをdkmsで自動インストール

前回の記事だけではカーネルの更新があったときにドライバを手動で再コンパイルする必要がある。
そこで、ドライバはdkmsにコンパイルとインストールを任せてしまいたい。

まずRTL819xCU_USB_linux_ v3.3.2_3192.zipをダウンロードしてきて、一度install.shでインストールした。
/usr/src/rtl8192cu-3.3.2_3192.20120103 というディレクトリを作成し、driver/rtl8188C_8192C_8192D_usb_linux_v3.3.2_3192.20120103.tar.gz の中身をそこに展開した。
さらに/usr/src/rtl8192cu-3.3.2_3192.20120103/dkms.confを作成し、

PACKAGE_NAME="rtl8192cu"
PACKAGE_VERSION="3.3.2_3192.20120103"
CLEAN="make clean"
BUILT_MODULE_LOCATION[0]="./"
BUILT_MODULE_NAME[0]="8192cu"
MAKE[0]="cd ${dkms_tree}/rtl8192cu/3.3.2_3192.20120103/build; make KVER=${kernelver} modules"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/wireless/"
AUTOINSTALL="yes"

と記述した。DEST_MODULE_LOCATIONはinstall.shによるインストール先に合わせてある。

make_drvを読むとMakefileを書き換えているようなのだが、install.shを実行したあとのMakefileとtarボールに入っていたMakefileを比較しても差はなかった。本来はinstall.sh後のMakefileを/usr/src/rtl8192cu-3.3.2_3192.20120103にコピーしたほうが良いと思う。

その後、次のコマンドを実行してdkmsに追加、インストールした。

$ sudo dkms add -m rtl8192cu -v 3.3.2_3192.20120103
$ sudo dkms build -m rtl8192cu -v 3.3.2_3192.20120103
$ sudo dkms install -m rtl8192cu -v 3.3.2_3192.20120103

以上で /lib/modules/$(uname -r)/kernel/drivers/net/wireless/8192cu.ko にカーネルを更新するたびにドライバがインストールされる、はず。

GW-USValue-EZをLinux Mint 12で動かす

Linux Mint 12(Linux kernel 3.0.0-12-generic)を入れたマシンに無線LANインターフェイスとしてGW-USValue-EZを接続した所、認識しているように見えるのだがWPAの認証に失敗するようで繰り返しWPAのパスフレーズを聞いてきた。

RTL8192CU の新ドライバ | a weblog by k1を参考にRealtekのサイトからドライバをダウンロードしてインストールしてみたが変化がなかった。

dmesgをよく読むと、

Error: Driver 'rtl8192cu' is already registered, aborting...

というログが見えたので、カーネルに含まれるドライバと衝突しているのではないかと思い/etc/modprobe.d/wlan.confに次の設定を書いて再起動してみた結果、正常に接続できるようになった。

blacklist rtl8192cu

カーネルに含まれるRTL8192CUのドライバにはバグがあるのだろうか。

続き: rtl8192cuのドライバをdkmsで自動インストール

ノートPCでL2の通信をキャプチャする

目的: リピータハブやポートミラーリング機能のある機器を使わず、ノートPCを間に挟み込んで通信を調べる。

使用機器

  • ノートPC(イーサネットポートx1), GNU/Linux機(Ubuntu 10.10)
  • 追加のイーサネットポート: Buffalo LUA3-U2-ATX
  • LANケーブルx2 (ストレート)
    • 本来は片方クロスにしなければならない気がするがAutoMDI/MDI-Xが効いたのか動いてしまった

事前にNetworkManagerでeth0, eth1の自動接続を無効化しておく。

eth0, eth1をプロミスキャスモードにして、*1ブリッジを作成して接続、ブリッジを有効化する。

# brctl addbr br0
# brctl addif br0 eth0
# brctl addif br0 eth1
# ifconfig br0 up
# tcpdump -w dump -i eth0

ifconfig br0 upを忘れてしばらく悩んだ。

*1:必要なかった

Can you crack it?解いた

数日前に話題になっていた Can you crack it? を解き終わった。
なかなか捻りがきいていて面白かった。
難易度的にはstage2 << stage1 = stage3と言ったところか。

stage3はもう駄目かと思ったところでようやく鍵に気づけた感じ。

HTTPSへのBEAST攻撃の要約

SSL/TLSで保護されたHTTPS通信を解読すると話題になった Thai Duong と Juliano Rizzo によるBEAST攻撃について調べたので自分の理解についてまとめておくことにする。

参考文献

攻撃対象はSSL 3.0/TLS 1.0のブロック暗号のCBCモードである。RC4を使用している場合はストリーム暗号なので影響を受けない。

結論から言えばHTTPSに対して広範囲に使える攻撃ではなさそうである。攻撃を成功させるにはWebSocketやJavaなどによってSSL/TLS上に生の通信を流す(最初のブロックを操作する)ことが必要であるが、WebSocketは対象のサーバが許可していなければ使えないし、Java脆弱性がなければ*1Same-origin Policyによって攻撃対象のサイトと攻撃者のサイトのIPアドレスが同じ場合などにしか攻撃できないようだ。許可なしに攻撃できる方法を思いついたので後で調べる。

脆弱性の詳細は以下に

*1:クロスサイトでのデモが行われたとすれば未知の脆弱性が使われた?

続きを読む

Ubuntu 10.04にFirefox Stable ChannelからFirefox4を導入したときに変化するパッケージ

依存関係を満たすために自動的にインストールされるパッケージ

更新されるパッケージ

  • firefox
  • firefox-branding
  • firefox-gnome-support
  • language-pack-en
  • language-pack-en-base
  • language-pack-ja
  • language-pack-ja-base
  • ubufox