PXEインストールの環境

会社のネットワーク環境では既にDHCPサーバが動いている。

そんな訳で、以前PXE-DHCPというソフトを使ってPXEサーバを構築してた。

PXE boot [Fool For the City]

しかし、このpxe-pdhcpでは4011ポートで待ち受けしてくれない。

PXEブートの詳細についてはここを見た方が詳しく書いてあるw

frsyuki.hatenablog.com

 

4011ポートがなぜ必要になったかというと、KVMのゲストOSをPXEでインストール出来ないかってのが発端。

まぁ、KVMのゲストOSなんでISOをDVDとしてマウントすればPXEなんて不要なんだけど、出来ないと言われると解決したくなる。

それで見つけたのがこのサイト

d.hatena.ne.jp

PXE-PDHCPの修正は上記サイトでパッチを公開してくれてるので何とかなるんだけど、Etherbootを修正するのが面倒(--;)

うにゅ~

gPXEは既に開発が終了して今はiPXEなんですね。なんだかよくわかんない・・・。

 

でもって、ここからが本題 < 前置きが長すぎwww

pxe-pdhcpやtftp-serverを個別に用意しなくても、dnsmasqを使えばpxe-dhcpもtftp-serverも設定が出来る。

 

試した環境はCentOS7.2。結構ミニマムな環境でもインストールされてたので大概は入ってるんじゃないかな。

 ※CentOS6は入ってなかったのでyum install dnsmasqでインストールする

でもって、/etc/dnsmasq.confを編集する


vi /etc/dnsmasq.conf

---------------------------------------------------------------------------------------------------------------

  port=0

  enable-tftp
  tftp-root=/var/lib/tftpboot

  dhcp-range=【DHCPのセグメント】,proxy

  pxe.proxydhcp
  pxe-servicec=x86PC,"dnsmasq-tftp-root/gpxe... proxydhcp.0",pxelinux

---------------------------------------------------------------------------------------------------------------

細かい説明はGoogle先生に聞くとわかる(こらっ

設定が完了したらdnsmasqサービスを起動する。

 

CentOS7ではserviceコマンドではなくsystemctlを使ってサービスを起動・停止などをする。

   systemctl start dnsmasq

serviceコマンドみたいにOKとか出てくれない。

  systemctl status dnsmasq

でステータスを確認


サーバ起動時も有効にする為に以下のコマンドも実行

  systemctl enable dnsmasq

 

tftp-serverの設定が必要なんだけど、それは最初のwikiに書いてるので読んでねw

 

無事にKVMのゲストもPXEからインストール出来るようになりました。

 

おぃおぃ、肝心なところが書いてないだろ!って意見が聞こえてきそうですが・・・ここの記事はそんなもんです(開き直りwww

 

 CentOS7やScientific Linux7はそろそろ真剣に触っていかないとダメだなぁ~と思う今日この頃

CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu)

CentOS7で作るネットワークサーバ構築ガイド (Network server construction gu)

 

 

 この辺りも勉強しなきゃなぁ。。。

ネットワーク仮想化?基礎からすっきりわかる入門書?

ネットワーク仮想化?基礎からすっきりわかる入門書?

 

 

DockerもLXC連携でなんとなく使ってるけど、実は良くわかってないw

 そういや、Rocketはどうなったのかな?

www.atmarkit.co.jp

 

 

 

 systemctlでも良いのだけど、いちいちステータス確認するのが面倒なので、こんなスクリプトを書いてみた。

 

---------------------------------------------------------------------------------------------------------------
#!/bin/bash

chk_status() {
if [ "$3" == "" ]; then
chk=`systemctl status $2 | grep Active`
echo ${chk}
else
systemctl status $2 $3
fi
}

case $1 in
start)
systemctl start $2
chk_status $1 $2 $3
;;
stop)
systemctl stop $2
chk_status $1 $2 $3
;;
status)
if [ "$3" == "" ]; then
systemctl status $2
else
systemctl status $2 $3
fi
;;
restart)
systemctl restart $2
chk_status $1 $2 $3
;;
reload)
systemctl reload $2
chk_status $1 $2 $3
;;
enable)
systemctl enable $2
systemctl list-unit-files --type=service | grep $2
;;
disable)
systemctl disable $2
systemctl list-unit-files --type=service | grep $2
;;
*)
systemctl $1 $2 $3
;;
esac

---------------------------------------------------------------------------------------------------------------

 

適当に/usr/local/sbin/辺りに保存して実行権を付けたら使える。

単純に実行後にstatusを出すようにしてるだけw