この記事について
タイトルの通り、MacをPXEサーバーにします。
別筐体へのLinuxインストールのときなどに、ブートメディアを用意する必要が無くなるので便利です。
Macを使うと何が嬉しいのか
Macのインターネット共有機能を使うと、DHCP(bootpd)がついてきます。(過去記事参照)
さらに、TFTPサーバーも最初からついてきます。
また、インターネット共有機能のおかげで、PXEでのブート後はそのままインターネットにも到達できます。つまり、ネットインストールのイメージでもOK。
環境
- MacBookAir 13 Mid 2011
- Thunderbolt Ethernet付き
- OS X Yosemite
- tftpd (OSX標準)
- bootpd (OSX標準)
構成図
+----------+ Wi-Fi +---------+ Ethernet +--------+
| Wi-Fi AP | ------> | MacBook | ---------> | Server |
+----------+ +---------+ +--------+
ServerはPXEで立ち上がってくるマシン。
今回使ったのはALIX.2D13っていうワンボードx86機ですが、PXE対応していれば機種は選ばないはず。
だいたいの手順
- tftpdのルートパスにファイル配置
- 初期状態だと
/private/tftpboot/
- 初期状態だと
- tftpd有効化
- bootpd設定変更
-
/etc/bootpd.plist
オプション66・67の設定 -
/etc/bootptab
固定アサインしたいなら
-
- インターネット共有を有効にする
tftpd
特に設定は必要なし。
/private/tftpboot/
配下がルートパスになります。
ルートパスを変更したい場合は、/System/Library/LaunchDaemons/tftp.plist
を変更してください。
tftpd有効化
$ sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
無効にするときはlaunchctl unload
で。
動作確認
$ tftp localhost
tftp>
tftp> quit
プロンプトが出てくればOK。quit
で終了。
bootpd
インターネット共有を有効にすれば勝手に立ち上がりますが、何点か変更が必要です。
DHCP オプション66,67の設定を追加
/etc/bootpd.plist
にオプションを2つ追加。
- 66 ftp_server_name
- 例では
192.168.2.1
- 例では
- 67 boot_file_name
- 例では
pxelinux.0
- 例では
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Subnets</key>
<array>
<dict>
<key>_creator</key>
<string>com.apple.NetworkSharing</string>
<key>allocate</key>
<true/>
<key>dhcp_domain_name_server</key>
<array>
<string>192.168.2.1</string>
</array>
〜中略〜
<key>net_range</key>
<array>
<string>192.168.2.2</string>
<string>192.168.2.254</string>
</array>
<key>dhcp_option_66</key>
<string>192.168.2.1</string>
<key>dhcp_option_67</key>
<data>cHhlbGludXguMAA=</data>
</dict>
</array>
<key>bootp_enabled</key>
<false/>
〜中略〜
<key>use_server_config_for_dhcp_options</key>
<false/>
</dict>
</plist>
ちょっとハマったこと
後述のbootptub
で指定するからって、オプション67を端折ってはいけません。
OSXのbootpdは、bootpd.plist
に66・67両方が書かれていないと、両方ともDHCP_OFFERに流してくれないようです。
固定アサインの設定
/etc/bootptub
を作成・編集。
必須じゃないけど、固定の方があとで楽なことが多いので。
# hostname hwtype hwaddr ipaddr bootfile
client1 1 01:02:03:04:05:06 192.168.2.11 pxelinux.0
bootpd有効化
インターネット共有機能を有効にすれば勝手に有効になります。
手動で立ち上げたいときは以下。
sudo launchctl load -w /System/Library/LaunchDaemons/bootps.plist
tftpdと同じく、無効にするときはunload
。
そういえば、何でここだけ「bootps」なんだろう。
動作確認
何か繋いでみる。
$ tail -f /var/log/system.log | grep DHCP
とかやって見ていると、払い出されたログが見れます。