GeekFactory

int128.hatenablog.com

Mac OS XをPXEサーバにしてLinuxをネットワークインストールする

Linux を使って別の PC に Linux をネットワークインストールする方法はよく知られていますが、Mac OS X を使って別の PC に Linux をネットワークインストールする方法は情報が少ないのでまとめてみました。

本稿は Proxy DHCPによるネットワークインストール - GeekFactory のリメイク版です。Proxy DHCP を使います。

前提

  • 既存の DHCP サーバがあること。
  • インストール先の PC はネットワークブートできること。
  • Mac OS X では brew コマンドで新しいパッケージをインストールできること。
  • DHCP サーバ、インストール先の PC、Mac OS X が同じサブネットに存在すること。

準備

dnsmasq をインストールします。

brew install dnsmasq
mkdir /tmp/tftpboot
vim /usr/local/etc/dnsmasq.conf

/usr/local/etc/dnsmasq.conf を編集します。サブネットは既存のDHCPスコープに合わせてください。

no-daemon
dhcp-leasefile=/tmp/dnsmasq.lease
port=0
dhcp-range=192.168.1.0,proxy
pxe-service=x86PC,install,pxelinux
enable-tftp
tftp-root=/tmp/tftpboot

ネットワークブート用のイメージを /tmp/tftpboot に準備します。下記では Scuentific Linux 6.4 のイメージを持ってきていますが、他のディストリビューションでもだいたい同じです。syslinux は kernel.org からダウンロードします。

cd /tmp/tftpboot
curl -O http://ftp.jaist.ac.jp/pub/Linux/scientific/6.4/x86_64/os/images/pxeboot/initrd.img
curl -O http://ftp.jaist.ac.jp/pub/Linux/scientific/6.4/x86_64/os/images/pxeboot/vmlinuz

curl -O https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.02.tar.bz2
tar jxf syslinux-6.02.tar.bz2
ln -s syslinux-6.02/bios/com32/elflink/ldlinux/ldlinux.c32
ln -s syslinux-6.02/bios/core/pxelinux.0

mkdir pxelinux.cfg
vim pxelinux.cfg/default

/tmp/tftpboot/pxelinux.cfg/default を編集します。

label install
kernel vmlinuz
append load initrd=initrd.img

ちなみに、apppend行に repo=http://ftp.riken.jp/Linux/scientific/6.4/x86_64/os/ のように追記することで、インストールソースの入力を省略できます。

インストール編

dnsmasq を起動します。そして、PCでネットワークブートします。

sudo dnsmasq
Password:
dnsmasq: started, version 2.66 DNS disabled
dnsmasq: compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack no-ipset auth
dnsmasq: setting --bind-interfaces option because of OS limitations
dnsmasq-dhcp: DHCP, proxy on subnet 192.168.1.0
dnsmasq-tftp: TFTP root is /tmp/tftpboot 
dnsmasq-dhcp: PXE(en0) xx:xx:xx:xx:xx:xx proxy
dnsmasq-dhcp: PXE(en0) 192.168.1.101 xx:xx:xx:xx:xx:xx pxelinux.0
dnsmasq-tftp: error 0 TFTP Aborted received from 192.168.1.101
dnsmasq-tftp: failed sending /tmp/tftpboot/pxelinux.0 to 192.168.1.101
dnsmasq-tftp: sent /tmp/tftpboot/pxelinux.0 to 192.168.1.101
dnsmasq-tftp: sent /tmp/tftpboot/ldlinux.c32 to 192.168.1.101
dnsmasq-tftp: file /tmp/tftpboot/pxelinux.cfg/xx-xx-xx-xx-xx-xx not found
(中略)
dnsmasq-tftp: sent /tmp/tftpboot/pxelinux.cfg/default to 192.168.1.101

PC の画面にプロンプトが現れるので install と入力します。カーネルと initramfs が読み込まれてしばらく待つと見慣れたインストーラが現れます。あとは HTTP とかでインストールを進めてください。