メモ – bluegold https://blog.bluegold.me OpenSolaris と MacBook で自宅ネットワークを構築するメモ Sat, 06 Aug 2011 16:08:37 +0000 ja hourly 1 https://wordpress.org/?v=5.2.1 6047458 AirMac Extreme で困った事 https://blog.bluegold.me/2011/08/problem-of-airmac-extreme/ https://blog.bluegold.me/2011/08/problem-of-airmac-extreme/#respond Sat, 06 Aug 2011 16:08:37 +0000 http://blog.bluegold.me/?p=627 AirMac Extreme に買い替えてみた

自宅でルーターとして使っていた安物の無線LAN AP の調子が悪く、頻繁に落ちるようになったので、新しい物に買い替えました。

EAP-TLS の実験もしたかったので、今回は AirMac Extreme にしてみました。

AirMac Extreme はアップル製だけあって設定は簡単で、802.1X EAP-TLS で認証をさせても安定しているようです。それはいいのですが。。。

困った事

アップルの製品は設定が簡単でいいのですが、設定項目が少なく、アップルの想定している使い方からちょっとでも外れるとどうにも出来なくなる事があります。

今回も2点ほど困った点があったので、メモしておきます。

  1. ローカル側のIPアドレスが変更できない。

    AirMac Extreme をルーターとして使用する場合、ローカル側の IPアドレスが 192.168.0.1 のように末尾が 1 に固定されていて、変更することができません。
    ローカルのIPアドレスを設定できないネットワーク機器なんてあるはずないと思い、方法を探してみましたが、解決策は無いようでした。

    うちのネットワークは、これまで 192.168.0.254 のように 254 で終わるアドレスをデフォルトゲートウェイにしていたので、このアドレスが変わると固定アドレスを持っているたくさんのサーバーたちの設定も変更する必要が出てきてめんどくさいんですよね。

    しかたないので、常時起動している Linux に 254 のアドレスを割り当てて、ICMP redirect で正しいデフォルトゲートウェイのアドレスを通知するようにしました。(ついでにキャッシュ用のネームサーバーも立てました。)

    最初は OpenSolaris に ICMP redirect を投げさせようとしたんですが、なぜか出来なかった。。。

  2. ftp のポートマッピング(NAT)で標準以外のポートを使えない

    他の人とデータのやり取りをする為に ftp サーバーを立てていますが、標準のポートで起動させておくと勝手にログインしてこようとする人たちがたくさんいます。パスワードとログの管理がめんどくさいので、これまではルーターで標準以外の別のポートから NAT させていました。

    AirMac Extreme でも同様の設定をしてみたのですが、接続できません。

    アップルのフォーラムでも同様に困っている人はたくさんいるのですが、やはり解決策は無いようでした。

    いろいろと試してみた結果をまとめると

    • ftp 以外の NAT は予想した通りに動作する。
    • プライベートTCPポートを 21 にして、パブリックTCPポートが21以外だと、ルータで止められる。
    • プライベートポート、パブリックポートの双方を 21にすると接続できるようになる。
      ただし、FTP のデータポートを正しく扱えなくなるので、実質的に使えない。

余談その1

実験中に OpenSolaris で動かしている ftpサーバーのポートを変えようとしたが、inetadm ではポートを変更する方法がなかった。。。

しかたがないので、/etc/services を修正して対応。。。

余談その2

Mac OS X 10.7 Lion で EAP を使う場合の設定方法がものすごくシンプルになりました。

どこかで見た事あるなぁ、と思ったら iOS と同じになったみたいです。

]]>
https://blog.bluegold.me/2011/08/problem-of-airmac-extreme/feed/ 0 627
Snow Leopard で隠しファイルを表示するショートカット https://blog.bluegold.me/2011/01/shortcut-to-show-hidden-file-on-snow-leopard/ https://blog.bluegold.me/2011/01/shortcut-to-show-hidden-file-on-snow-leopard/#respond Mon, 03 Jan 2011 16:25:11 +0000 http://blog.bluegold.me/?p=601 Snow Leopard で隠しファイルを表示するショートカット

Mac OS X の Finder では先頭が ‘.'(ドット) で始まるファイル名や不可視属性の着いているファイルは表示されませんが、これらの隠しファイルを「開く/保存」ダイアログで表示するショートカットが Snow Leopard で追加されました。

「Command」キー+「Shift」キー+「 . 」(ピリオド)

補足:ファイルの不可視属性の設定方法

これだけだと短すぎるので、不可視属性の設定方法もメモ

SetFile -a V filename

逆に不可視ファイルを表示させるには V を v にします。

]]>
https://blog.bluegold.me/2011/01/shortcut-to-show-hidden-file-on-snow-leopard/feed/ 0 601
証明書と RSA 鍵がペアかどうかを調べる方法 https://blog.bluegold.me/2010/08/how-to-check-certificate-and-private-key-pair/ https://blog.bluegold.me/2010/08/how-to-check-certificate-and-private-key-pair/#respond Thu, 26 Aug 2010 14:36:34 +0000 http://blog.bluegold.me/?p=574 証明書ファイルと RSAの秘密鍵ファイルがペアになっているかどうかの確認方法をよく忘れるのでメモ。

RSA 鍵で作成した証明書の場合、証明書内の公開鍵と秘密鍵は同一のモジュロ(Modulus)を持っているので、これを比較します。

証明書(公開鍵)

openssl x509 -noout -modulus -in certificate_file.pem

秘密鍵

openssl rsa -noout -modulus -in private_key.pem

ついでにCSR

openssl req -noout -modulus -in cert_request.pem

これらの実行結果として表示されるモジュロはかなり長くなるので、更に MD5 ダイジェストを計算した法が比較は簡単になります。

openssl x509 -noout -modulus -in certificate_file.pem | openssl md5
openssl rsa -noout -modulus -in private_key.pem | openssl md5
openssl req -noout -modulus -in cert_request.pem | openssl md5
]]>
https://blog.bluegold.me/2010/08/how-to-check-certificate-and-private-key-pair/feed/ 0 574
Snow Leopard で IP alias を設定する https://blog.bluegold.me/2010/06/configure-ip-alias-on-snow-leopard/ https://blog.bluegold.me/2010/06/configure-ip-alias-on-snow-leopard/#respond Fri, 04 Jun 2010 01:57:32 +0000 http://blog.bluegold.me/?p=450

Snow Leopard でNICにIP aliasを設定する方法のメモ。

IP alias の追加

sudo ifconfig en0 alias 192.168.0.1 255.255.255.0

IP alias の削除

sudo ifconfig en0 -alias 192.168.0.1

ついでに Linux と OpenSolari での設定方法もメモ。

Linux の場合

IP alias の追加

# /sbin/ifconfig eth0:1 192.168.0.1/24

IP alias の削除

# /sbin/ifconfig eth0:1 down

OpenSolaris の場合

IP alias の追加

pfexec ifconfig gbe0:1 plumb
pfexec ifconfig gbe0:1 192.168.0.5 netmask 255.255.255.0 up

IP alias の削除

pfexec ifconfig gbe0:1 down
pfexec ifconfig gbe0:1 unplumb

Snow Leopard のやり方のほうが、何個目のエイリアスなのかを考えなくてもいいので楽なのかなぁ。
エイリアス単位でインターフェースの UP/DOWN はできなそうだけど。

]]>
https://blog.bluegold.me/2010/06/configure-ip-alias-on-snow-leopard/feed/ 0 450
Xenのディスクイメージをマウントする https://blog.bluegold.me/2010/03/how-to-mount-xen-disk-image-on-linux/ https://blog.bluegold.me/2010/03/how-to-mount-xen-disk-image-on-linux/#respond Fri, 05 Mar 2010 13:21:47 +0000 http://blog.bluegold.me/?p=410 XenのイメージファイルをLinuxからマウントする方法のメモ

Xenのディスクイメージファイルは以下のように固定ディスクをそのままファイルに移したような構造になっています。

# file test.img
test.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x82, starthead 0, startsector 208845, 2104515 sectors; partition 3: ID=0x83, starthead 0, startsector 2313360, 18651465 sectors, code offset 0x48

なので、基本的にはループバック・デバイスとしてマウントする事が可能です。
ただし、ディスクイメージはパーティションに区切ってあると思いますので、その分にひと手間ひつようです。

基本的な作業の流れは以下のとおり。

  1. losetup コマンドでディスクイメージファイルをループバック・デバイスに割り当てる。
  2. kpartx コマンドでディスクイメージ内の各パーティションにデバイスファイルを割り当てる。
  3. 必要なパーティションのデバイスファイルを mount コマンドでマウントする。

losetup コマンドでディスクイメージファイルをループバック・デバイスに割り当てる。

losetup -fコマンドで空いているループバック・デバイスを探して、そのデバイスにイメージファイルを割り当てます。

# losetup -f
/dev/loop0
# losetup /dev/loop0 /var/lib/xen/images/test.img
# losetup -a
/dev/loop0: [0900]:153944114 (/var/lib/xen/images/test.img)

kpartx コマンドでディスクイメージ内の各パーティションにデバイスファイルを割り当てる。

ループバック・デバイスに割り当てた仮想ディスクにパーティションの状況をfdiskコマンドで調べます。

# fdisk /dev/loop0

このディスクのシリンダ数は 1305 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/loop0: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *           1          13      104391   83  Linux
/dev/loop0p2              14         144     1052257+  82  Linux swap / Solaris
/dev/loop0p3             145        1305     9325732+  83  Linux

コマンド (m でヘルプ): q

3つのパーティションが存在することが確認できます。
kpartx -aでそれぞれのパーティションをデバイスファイルに割り当てます。
/dev/mapperディレクトリの下に新たなデバイスファイルが作成されます。

# kpartx -a /dev/loop0
# ls -l /dev/mapper/
合計 0
crw------- 1 root root  10, 62  2月 24 00:07 control
brw-r----- 1 root disk 253,  0  3月  5 22:07 loop0p1
brw-r----- 1 root disk 253,  1  3月  5 22:07 loop0p2
brw-r----- 1 root disk 253,  2  3月  5 22:07 loop0p3

仮想ディスクでLVMを使っているとここから先がめんどくさいので、私はXenの仮想ディスクではLVMは使いません。

必要なパーティションのデバイスファイルを mount コマンドでマウントする。

あとは通常のディスクと同じようにマウントするだけです。

# mount -t ext3 /dev/mapper/loop0p1 /mnt/tmp
# ls -l /mnt/tmp
-rw-r--r-- 1 root root  952782 11月  4 08:46 System.map-2.6.18-164.6.1.el5xen
drwxr-xr-x 2 root root    1024 11月  9 15:51 grub
-rw------- 1 root root 2383144 11月  9 15:51 initrd-2.6.18-164.6.1.el5xen.img
drwx------ 2 root root   12288  6月 17  2009 lost+found
-rw-r--r-- 1 root root   80032  3月 13  2009 message
-rw-r--r-- 1 root root  107413 11月  4 08:47 symvers-2.6.18-164.6.1.el5xen.gz
-rwxr-xr-x 1 root root  817164 11月  4 09:53 xen-syms-2.6.18-164.6.1.el5
-rw-r--r-- 1 root root  375762 11月  4 06:11 xen.gz-2.6.18-164.6.1.el5

使い終わった後の手順

必要なくなった仮想ディスクを開放するには、逆の手順で行います。

# umount /mnt/tmp
# kpartx -d /dev/loop0
# ls -l /dev/mapper/
合計 0
crw------- 1 root root 10, 62  2月 24 00:07 control
# losetup -d /dev/loop0
# losetup -a
# losetup -f
/dev/loop0

]]>
https://blog.bluegold.me/2010/03/how-to-mount-xen-disk-image-on-linux/feed/ 0 410
OpenSolarisで64bitのnginxをビルドする https://blog.bluegold.me/2010/02/howto-build-64bit-nginx-with-ssl-support-on-opensolaris/ https://blog.bluegold.me/2010/02/howto-build-64bit-nginx-with-ssl-support-on-opensolaris/#respond Thu, 04 Feb 2010 09:05:29 +0000 http://blog.bluegold.me/?p=362

nginxの新しいバージョン(0.7.65)がリリースされていたので,バージョンアップしてみました。

しばらく前に見つかっていたSSLの脆弱製の実験をやろうと、久しぶりに SSL を有効にしたバイナリを作ろうとしたのですが,オプションの設定の仕方を忘れていて苦労しました。また、忘れても大丈夫なようにメモ。

OpenSolaris 2009.06 に含まれるOpenSSLは 0.9.8a と古いので、現時点での最新バージョンであるopenssl-0.9.8lをダウンロードしてきて使いました。今回はSNI(Server Name Indication)を有効にしたいのでenable-tlsextオプションを渡しています。

./config --prefix=/usr/local no-shared enable-tlsext
make
pfexec make install

これだけでもビルドは出来るのですが,OpenSolaris 2009.06 のデフォルトの GCC 3.2.3 ではなく新しい /usr/bin/gcc-4.3.2 を使いたいので,少し手を入れています。

export CC=/usr/bin/gcc-4.3.2
export CFLAGS='-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -march=native -O3 -Wall -DL_ENDIAN -DMD32_REG_T=int -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM' 
./Configure --prefix=/usr/local no-shared enable-tlsext solaris64-x86_64-gcc
make
pfexec make install

export CC=/usr/bin/gcc-4.3.2した後にconfigスクリプトを実行すると,solaris64-x86_64-gcc-4.3.2 みたいな os:compiler になってエラーになってしまうんですよね。回避方法を探すのに手間取ってしまいました。

次に nginx のビルドですが,普通に configure を実行すると 32bit のバイナリが出来てしまいますので、gcc に渡すオプションも configure に渡します。

./configure --prefix=/usr/local --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-cc=/usr/bin/gcc-4.3.2 --with-cc-opt='-m64 -march=native -O3 -I/usr/local/include ' --with-cpu-opt=amd64 --with-ld-opt='-m64 -L/usr/local/lib -L/usr/lib/amd64'
make
pfexec make install

ビルドした内容を確認

$ file /usr/local/sbin/nginx
/usr/local/sbin/nginx:  ELF 64-bit LSB executable AMD64 Version 1, dynamically linked, stripped

$ /usr/local/sbin/nginx -V
nginx version: nginx/0.7.65
built by gcc 4.3.2 (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/opt/local --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-cc=/usr/bin/gcc-4.3.2 --with-cc-opt='-m64 -march=native -O3 -I/usr/local/include' --with-cpu-opt=amd64 --with-ld-opt='-m64 -L/usr/local/lib -L/usr/lib/amd64'

SNIも有効になっています

]]>
https://blog.bluegold.me/2010/02/howto-build-64bit-nginx-with-ssl-support-on-opensolaris/feed/ 0 362
Mercurial で削除してしまったファイルを元に戻す https://blog.bluegold.me/2010/02/revert-missing-file-with-mercurial/ https://blog.bluegold.me/2010/02/revert-missing-file-with-mercurial/#respond Mon, 01 Feb 2010 17:43:10 +0000 http://blog.bluegold.me/?p=348

3ヶ月ほど前に、10年以上使い続けたCVSからMercurialにソース管理を移行しました。(Subversion は手になじまなかった。)

移行して不便に感じるのはViewVCが使えなくなった事くらいで、普段はあまり違いは感じていませんが、1つだけ直感的にやり方が分からなくて困る事があります。

ワーキングディレクトリで作業中に誤って必要なファイルを削除してしまった場合、例えば

$ ls -l
total 8
-rw-r--r--  1 user  staff  1345 Jan 16 22:33 Makefile
drwxr-xr-x  5 user  staff   170 Jan 16 22:45 help/
drwxr-xr-x  5 user  staff   170 Jan 16 22:33 tutorial/
$ rm Makefile

としてしまった場合、必要なファイルが存在しない事は hg status コマンドで調べる事ができます。

$ hg status
! Makefile

CVS(やSubversion)では、誤って削除したファイルはcvs update(svn up)で元に戻すことができますが、Mercurial ではそうはいきません。

$ hg update
ファイル状態: 更新数 0、マージ数 0、削除数 0、衝突未解決数 0
$ ls -l
total 0
drwxr-xr-x  5 user  staff  170 Jan 16 22:45 help/
drwxr-xr-x  5 user  staff  170 Jan 16 22:33 tutorial/

このように削除されたファイルはそのままです。

Mercurial では update コマンドはワーキングディレクトリのリビジョンを変更するコマンドなので、この動きで正しいらしいのですが、CVS等から乗り換えてくるとちょっとビックリします。

このような場合はhg revertを使うのが正しいらしいです。

$ hg revert Makefile
$ ls -l
total 8
-rw-r--r--  1 user  staff  1345 Feb  2 02:41 Makefile
drwxr-xr-x  5 user  staff   170 Jan 16 22:45 help/
drwxr-xr-x  5 user  staff   170 Jan 16 22:33 tutorial/
]]>
https://blog.bluegold.me/2010/02/revert-missing-file-with-mercurial/feed/ 0 348
tcpdump でキャプチャしたファイルを WireShark で解析 https://blog.bluegold.me/2010/01/tcpdump-options-working-wih-wireshark/ https://blog.bluegold.me/2010/01/tcpdump-options-working-wih-wireshark/#comments Fri, 29 Jan 2010 16:31:09 +0000 http://blog.bluegold.me/?p=337

WireSharkを使ってダンプを解析するためのキャプチャファイルをtcpdumpで保存するためのオプションを毎回忘れてしまうのでメモ。

tcpdump -n -i en0 -s 0 -w dumpfile.cap [filter]

tcpdump -w filenameだけでも、キャプチャファイルは作れるが、デフォルトではキャプチャ用のバッファ(snaplen)が 68バイトと小さく(TCP のヘッダー分のサイズらしい)、あふれたデータを取りこぼしてしまいます。tcpdump で見ている分には必要の無いデータですが、WireShark で「Follow TCP Stream」を見ようとした時に壊れていたりします。

そこでオプション ‘-s’ を指定して snaplen のサイズを大きく設定しています。(0は無制限、と言っても65535バイトくらいしか見た事ない)

(Open)Solarisの場合は悩む事無く、以下のように普通にファイルに保存するだけで大丈夫です。

snoop -r -d bge0 -o dumpfile.cap [filter]
]]>
https://blog.bluegold.me/2010/01/tcpdump-options-working-wih-wireshark/feed/ 1 337
Linux Software RAID のディスク交換 https://blog.bluegold.me/2009/09/linux-software-raid-replace-hdd/ https://blog.bluegold.me/2009/09/linux-software-raid-replace-hdd/#respond Thu, 17 Sep 2009 06:59:34 +0000 http://blog.bluegold.me/?p=287

今月の頭にお客さんに収めたサーバ機のハードディスクが1週間で壊れたので、急遽ディスクのリプレースに行ってきました。今回のシステムは Linux の Software RAID で 2 本のディスクを使用して RAID1 を組んでいたのでデータ自体は無事だったのですが、手を離れたと思った瞬間のトラブルは心臓に悪いですね。

めったに行わない作業なので、自分用にメモ。

  • RHEL5 のレスキューCD でブート
    プロンプトで linux rescue と入力
    レスキューモードで起動する
  • 途中で、既にインストールされている Linux を検出するかを聞かれるので適当に答える
    (今回はオフラインで作業するのでマウントはさせませんでした)
  • 存在するディスクから RAIDデバイスを探す
    mdadm -Es > /etc/mdadm.conf
    
  • 見つけた物理デバイスから md デバイスを作成
    mdadm --assemble --scan
    
  • ディスクを不良ディスクに指定して取り除く
    mdadm --manage /dev/md0 --fail /dev/sdb1
    mdadm --manage /dev/md0 --remove /dev/sdb1
    
    mdadm --manage /dev/md1 --fail /dev/sdb2
    mdadm --manage /dev/md1 --remove /dev/sdb2
    
  • ここでシャットダウンしてディスク交換
  • 交換したら、先程と同様にレスキューモードで起動させる
  • 新しいディスクのパーティションを元からあるものと完全にあわせる
  • 新しいディスクをアレイに追加
    mdadm --manage /dev/md0 --add /dev/sdb1
    mdadm --manage /dev/md1 --add /dev/sdb2
    
  • ディスクをアレイに追加すると自動的にリビルドが始まるので、終わるまで待つ
    進行状況は下のようにして確認

    cat /proc/mdstat
    

リビルドが終わるまでの6時間を客先で待ち続けるのは辛かった。。。

]]>
https://blog.bluegold.me/2009/09/linux-software-raid-replace-hdd/feed/ 0 287