Geek-Side

<< < 1 > >>

OpenBSD を PxeBoot でインストール

久々の更新になっちゃいました。
ノートPCが手に入ったのでOpenBSDをインストールすることにしました。
もらってから発覚したのですが、CDROMが壊れているマシンでした。インストールCDからインストールできない訳です。
それならと言うことで、以前から興味のあったPxeBootでインストールしてみることにしました。
構成としてはGentooマシンでdhcpdとtftpをホストしました。

やってみた感想としては、インストールするのにISOを焼く作業がなくなるし、設定もそんなに難しくないのでおすすめです。
インストール作業なんかはそんなに頻繁に行う作業ではないでしょうが、OpenBSDは半年に一回Updateがありますし。

参考にさせてもらったのは以下のドキュメント。
The Gentoo Linux alternative installation method HOWTO
OpenBSD FAQ 6.10 How do I boot using PXE? (i386, amd64)

ハマった所は、dhcpd.confで next-server を指定しないといけなかった所と、
PxeBoot環境では Grub は OpenBSD をうまく起動できない所でした。
dhcpdについてですが、設定ファイルでnext-serverを指定しないとサーバ機のIPアドレスを認識してくれませんでした。
また、OpenBSDをpxegrubで起動しようとしたのですが、起動時に下記のようなエラーがでて先に進めませんでした。
 panic: /boot too old: upgrade!
Grubの設定を下記のようにすればよいとの情報があったのですが、現状には当てはまらないようです。
 title=Diskless OpenBSD
 root (nd)
 kernel --type=openbsd /bsd.rd

うまくいった手順についてですが、まずはGentoo機にdhcpdとtftpをインストールします。
 $ sudo emerge dhcp
 $ sudo emerge tftp-hpa

Bootファイル設置用のディレクトリを作成します。
 $ sudo mkdir -p /diskless
まず bsd.rd を取得して、 /diskless 配下に置きます。
次に pxeboot を取得して、 /diskless 配下に置きます。

最終的な /etc/dhcp/dhcpd.conf の内容は以下のようになりました。
 ddns-update-style none ;
 option routers 192.168.1.10;
 option subnet-mask 255.255.255.0;
 option broadcast-address 192.168.1.255;
 option domain-name-servers 218.176.253.97;
 next-server 192.168.1.12;
 
 default-lease-time 120;
 max-lease-time 120;
 
 subnet 192.168.1.0 netmask 255.255.255.0 {
     # クライアントにロードさせるブートファイルを指定
     filename "pxeboot";
     range 192.168.1.36 192.168.1.250;
 }
tftpの起動オプションは以下のようになります。
/etc/conf.d/in.tftp
 INTFTPD_PATH="/diskless"
 INTFTPD_USER="nobody"
 INTFTPD_OPTS="-u ${INTFTPD_USER} -l -vvvvvv -p -c -s ${INTFTPD_PATH}"

クライアントをネットワークブートし、起動後に boot> プロンプトが表示されるので、 bsd.rd と入力します。
後は通常のインストールと変わりません。

SSHを使いこなせてません - keychainを使ってみよう


ssh(1)を使い倒す
sshを使いこなしていないひとを見るとイラっとする。パスワード認証大好き(もう21世紀ですよ)、
パスフレーズ入れるのが面倒(keychain使えよ)、放っといたssh接続が切れて「また切れた!」(screen使えよ)とか。
すいません、使いこなせてませんでした。
3台のサーバにSSHで接続したり、そもそもこのBlogはEmacsのTrampでssh接続して書いているというのに。

どう使いこなせていなかったかというと、ssh-agentとkeychainを導入してませんでした。
毎回パスフレーズをいれてたわけですな。
よく調べもせずに、セキュリティ的に大丈夫なのか不安だったので導入していませんでした。
マシンが一台増え、cron + rsync + sshでバックアップをとることにしたんで、良い機会なんで調べてみました。

まずはssh-agent と keychainがどういう物なのかから。
1.ssh-agentは一度パスフレーズを入力したら、ログインしている間はパスフレーズの入力が省略できる機能。
2.keychainは一度パスフレーズを入力したら、システムが再起動するまでパスフレーズの入力が省略できる機能。
と理解しました。

「keychainはアカウントをとられたら終わり?」という疑問から敬遠してましたが、
IBMの資料にある --clear オプションで不安もやわらぎました。
--clear オプションは新たなログインがあった時に、キャッシュをクリアするオプションです。
例えば SSH経由のrsync によるバックアップを毎晩cronに仕込んで置いた場合、
cronはログインはしないので、キャッシュされたSSH接続を使うことができます。
アカウントを奪われログインされた場合は、ログインした瞬間にSSH接続がクリアされるので、
他のマシンへパスフレーズの入力なしで接続される事はありません。

というわけで、keychainをインストールして、下記の内容を~/.bash_profileに追加。
 #!/bin/bash
 #on this next line, we start keychain and point it to the private keys that
 #we'd like it to cache
 /usr/bin/keychain ~/.ssh/id_rsa ~/.ssh/id_dsa
 source ~/.keychain/example.com-sh

これで一度ログインしてパスフレーズを入力しておけば、cronからもパスフレーズなしでSSH接続出きるようになります。
後は再起動時に忘れずにログインするような仕組みを作ればOK。
この仕組みはみんなどうやって実現してるのかな?

OpenNTPDでローカルNTPDサーバ構築


我が家にはPCが4台あるけど、きちんと時刻合わせしてませんでした。
時刻合わせは、いつ、何が起きたかを知る上で重要な作業なんですが、ついついサボってました。反省。
そこで、今頃って感じですが、NTPサーバで時刻合わせをすることにしました。
それぞれが外部のNTPDサーバに個別にアクセスしていては、ネットワークに優しいとは言えないので、
ローカルNTPDサーバを建てることに決定。
以前、ファイルサーバーをどうしようか悩んでいたOpenBSD4.2マシン、
こいつにNTPDサーバとしても働いてもらうことにしました。

OpenBSDをインストールすれば、OpenNTPDも一緒にインストールされます。
OpenNTPDは精度こそそこそこだけども、シンプルでセキュアなNTPサーバ&クライアントです。

インストールはされているので、設定を行います。
/etc/ntpd.confを編集します。
このファイルにはntpクライアントとしての設定とntpサーバとしての設定を一つのファイルで兼ねてます。
クライアントとして同期を行うサーバと、サーバとして公開するネットワークを設定します。
# ntpdサーバとして公開
listen on *

# 同期を行う外部のntpdサーバを設定。YahooBBと近場の大学をチョイス
servers ntp.bbtec.net
servers ns.kobe-u.ac.jp
ntpdを起動
 $ sudo /usr/sbin/ntpd
再起動時にもntpdが起動するように/etc/rc.conf.localに下記を追加
 /ntpd_flags=""
/var/log/daemonに吐かれるログに、"clock is now synced"とでれば同期完了です。

続いてクライアントの設定をしましょう。
クライアントがOpenBSDなら、上記の設定とほぼ同じで、サーバとしての設定を抜けばよいだけ。
クライアントがGentoo Linuxならopenntpdは下記でインストール完了です。
 $ sudo emerge openntpd
/etc/ntpd.confを編集します。ローカルNTPサーバを192.168.100.10とすると
servers 192.168.100.10
ntpdを起動
 $ sudo /etc/init.d/ntpd start
再起動時にもntpdが起動するように/etc/rc.conf.localに下記を追加
 $ sudo rc-update add ntpd default

これでローカルマシンの時刻が正確に同期できます。

NFSはpfと相性が悪いみたいなのでやめにした

NFSの構築はできたんだけど、pfを設定する段階になってやっぱり止めることにした。
NFSは結構仕事でも利用することがあって、馴染みのあるサービスだったんだけど、
NFSを含めたRPC系のサービスを自分で構築みるのは初めてだったんで、勉強になった。

まず把握していなかったのが、NFSを構築すると開けないといけないポートが増えてしまうこと。
この点は導入する前に把握すべきなんだろうけど。

rpcinfoの出力をみるとこんな感じ。
 $ sudo rpcinfo -p localhost
    program vers proto   port
     100000    2   tcp    111  portmapper
     100000    2   udp    111  portmapper
     100003    2   udp   2049  nfs
     100003    3   udp   2049  nfs
     100003    2   tcp   2049  nfs
     100003    3   tcp   2049  nfs
     100005    1   udp    718  mountd
     100005    3   udp    718  mountd
     100005    1   tcp   1021  mountd
     100005    3   tcp   1021  mountd
     100021    1   udp    913  nlockmgr
     100021    3   udp    913  nlockmgr
     100021    1   tcp    683  nlockmgr
     100021    3   tcp    683  nlockmgr
結構使ってるポートが多い。

NFSのポートレベルでのアクセス制御を行うのに、pfの設定を試みたけど、
portmaperがランダムに割り当てたポート番号を、pfに通知する術がないため、
NFS+pfという組み合わせができないよう。
OpenBSDのTheo氏の見解によると、mountdのポートを固定化するつもりはないし、
pfにportmapからポートを通知させるのは難しく、セキュリティ的に有用性もないと判断しているようです。
確かに、せっかく生成したランダムなポート番号を通知する仕組を作ること自体、リスクになると思う。
こうなるとPF+NFSってのは不可能という結論。

初めはここの記事をみてSamba+NFSでいこうかと安易に思ったけど、
sambaだけで行くか、Gentooにもドキュメントがある OpenAFSを試してみるか?
と悩んでいます。

OpenBSDのlibexpatはXが必要?!

ずいぶん前にCD購入して、インストールしたままだったOpenBSD4.2。
ファイルサーバーにしようかと考えてて、ほったらかしでした。
今日、腹痛で会社を休んで、午後からはだいぶ元気になったんで、
作業してみた。

我が家のクライアントは LinuxとWindowsなんで NFS + Samba の構成で行くことにした。
NFSは http://www.openbsd.org/faq/faq6.html#NFS を参考に構築。

で、SambaをPortsから make && make install してるとエラーでこけた。
エラーを見ると expat がらみのエラーらしくて、
OpenBSD4.2からは X11 と一緒に提供されている libexpat を使うことになったらしい。
http://www.openbsd.org/faq/upgrade42.html#libexpat

後からXを入れるにはファイルを展開すればよいだけだったので、
大変じゃなかった。
http://www.openbsd.org/faq/faq4.html#AddFileSet

OpenBSDとはそんなに深く、長いつきあいじゃないけど、
expatだけのために X をいれるってのは、らしくない気がしました。
4.3からは base43.tgz に含まれるそうな。

今回の件ではオフィシャルなドキュメントにずいぶん助けられた。
ドキュメントの充実度はさすがですね。

CapsLockとCtrlを入換よう (キーボードを新調した Elecom TK-P05F)

キーボードがぶっ壊れた。
ここ1,2ヶ月くらい、"v"と"5"が打ちにくくて、(しばらく押しっ放しにしたら直る)
そろそろ買い替えかなと思ってたけど、ついにCtrlボタンが効かなくなって買い替えを決断。
CtrlボタンなんてEmacs使ってたら致命傷ですわ。

今回ぶっ壊れたのはHappy Hacking Lite2。Hackerに憧れて使ってたけど、
打鍵音が大きかったり、テンキーがなくて嫁に不評だったりしたので、
静音、テンキー付きをテーマにキーボードを物色。
そんな中見つけたのがElecomのTK-P05F。
難点はスペースボタンが打ちにくい所だけど、それ以外はコンパクトだし、打鍵音も静かだし概ね満足。

jp106のキーボードの一番の難点はCtrlボタンの位置。
Hppy Hacking Keyboardは、Ctrlボタンがjp106キーボードで言うCapsの位置にあったので、
問題なかったけど、今回はソフト的に設定してやらないといけない。
切替器でつながってる全てのマシンを設定するんで、1台じゃ済まなかった。
以下、各マシンの設定内容。

Gentoo Desktop機
主にXで使用するデスクトップマシン。Xwindowの場合は、/etc/X11/xorg.conf を編集する。
InputDeviceに Option "XkbOptions" "ctrl:swapcaps" を追加
Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
       Option "XkbOptions" "ctrl:swapcaps"

Windows Desktop機
Gentoo Desktop機とのデュアルブートで使ってるWindows機。
窓使いの憂鬱をダウンロードして、~/.mayuを設定。
# CapsLockをCtrlに
mod control += 英数     # 英数を Control に
key *英数 = *LControl   #	〃

Gentoo Server機
Xは使わずコンソールが主な用途のマシン。コンソールの場合は、 /etc/conf.d/keymaps を編集
EXTENDED_KEYMAPS="ctrl"
keymapサービスを再起動
$ /etc/init.d/keymap restart

OpenBSD Server機
こちらもXは使わずコンソールが主な用途。
以下のコマンドでCapsLockとCtrlの切り替えが可能。
$ wsconsctl -w keyboard.map+="keysym Caps_Lock = Control_L"
再起動後も有効にしたければ、/etc/wsconsctl.confに設定を追加。
$ keyboard.map+="keysym Caps_Lock = Control_L"

あなたの知らないOpenBSD


次のOSCでは、trombikさんがあなたの知らないOpenBSDってお題でセミナーをやるそうで。
東京の遠さがもどかしい今日この頃です。

Gentoo飲み会でtrombikさんにOpenBSDの事を教えてもらい、OpenBSDを使うようになった訳だけど、
その時教えてもらったのは、コード監査の概要とかだった。
Randomizedすべき所なのに、されていないと行った風に、ソフトウェアの基本的なバグを探す作業から、
結果としてセキュリティホールを塞いでいっているという話だった。
基本を大切にして、地道にコツコツと結果を出すという姿勢は、
ソフトウェア開発に携わる者として、感銘を受けたのを覚えています。

東京近郊の方はぜひ。