Posted at

MacをPXEサーバーにする

More than 3 years have passed since last update.


この記事について

タイトルの通り、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対応していれば機種は選ばないはず。


だいたいの手順


  1. tftpdのルートパスにファイル配置


    • 初期状態だと/private/tftpboot/



  2. tftpd有効化

  3. bootpd設定変更



    • /etc/bootpd.plist オプション66・67の設定


    • /etc/bootptab 固定アサインしたいなら



  4. インターネット共有を有効にする


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




bootpd.plist

<?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

とかやって見ていると、払い出されたログが見れます。