LoginSignup
10

More than 5 years have passed since last update.

MacをPXEサーバーにする

Posted at

この記事について

タイトルの通り、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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10