https://qiita.com/yubais/items/7c40227a17569dc9d412
http://www.kurobuti.com/linux_server/?page_id=58
ディスクレスクライアント
https://www.server-world.info/query?os=CentOS_7&p=pxe&f=4
まずは入れてみる。
最初に導入したサーバーのイーサネットポートは4つついていたので、1つは外向き、1つは内向きのネットを作ってネット空間を分けてしまう。そして内向きにdhcpサーバ、tftpサーバ、nfsサーバを立てて、ブートさせることを目指す。
tftpサーバーのインストール&起動
$ sudo yum install syslinux xinetd tftp-server
$ sudo mkdir /var/lib/tftpboot/pxelinux.cfg
$ sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
$ sudo nano /etc/xinetd.d/tftp
# default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
$ sudo systemctl start xinetd.service
$ sudo systemctl enable xinetd.service
dhcpサーバーのインストール&起動
$ sudo yum install dhcp
$ sudo nano /etc/dhcp/dhcpd.conf
# # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page # option domain-name-servers 192.168.1.100; default-lease-time 600; max-lease-time 7200; authritative; filename "pxelinux.0"; next-server 192.168.1.100; subnet 192.168.1.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.1.200 192.168.1.254; option broadcast-address 192.168.1.255; option routers 192.168.1.1; }
$ sudo systemctl start dhcpd
Job for dhcpd.service failed because the control process exited with error code. See "systemctl status dhcpd.service" and "journalctl -xe" for details.
起動できない・・・
$ sudo systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 月 2018-06-18 18:12:08 JST; 45s ago Docs: man:dhcpd(8) man:dhcpd.conf(5) Process: 10338 ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid (code=exited, status=1/FAILURE) Main PID: 10338 (code=exited, status=1/FAILURE) 6月 18 18:12:08 guilty-rx200s6 dhcpd[10338]: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not sp...g file 6月 18 18:12:08 guilty-rx200s6 dhcpd[10338]: Wrote 0 leases to leases file. 6月 18 18:12:08 guilty-rx200s6 dhcpd[10338]: 6月 18 18:12:08 guilty-rx200s6 dhcpd[10338]: No subnet declaration for virbr0 (192.168.122.1). 6月 18 18:12:08 guilty-rx200s6 dhcpd[10338]: ** Ignoring requests on virbr0. If this is not what 6月 18 18:12:08 guilty-rx200s6 dhcpd[10338]: you want, please write a subnet declaration 6月 18 18:12:08 guilty-rx200s6 systemd[1]: dhcpd.service: main process exited, code=exited, status=1/FAILURE 6月 18 18:12:08 guilty-rx200s6 systemd[1]: Failed to start DHCPv4 Server Daemon. 6月 18 18:12:08 guilty-rx200s6 systemd[1]: Unit dhcpd.service entered failed state. 6月 18 18:12:08 guilty-rx200s6 systemd[1]: dhcpd.service failed. Hint: Some lines were ellipsized, use -l to show in full.
んーdhcpの起動でコケるのはちゃんとサブネットが作れていないからかな。
とりあえず先に進んでみる。
NFSの導入&起動イメージのインストール
$ sudo yum install dracut-network nfs-utils
$ sudo mkdir -p /var/lib/tftpboot/centos7/root
$ sudo yum groups -y install "Server with GUI" --releasever=7 --installroot=/var/lib/tftpboot/centos7/root/
(GUI有りの場合、もっとシンプルでいい気がする。)
rootのパスワードを生成しておく
$ sudo python3 -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
Password:
ここで表示される文字列をコピーしておき、
$ sudo nano /var/lib/tftpboot/centos7/root/etc/shadow
root:<ここにコピーした文字列をペースト>:16372:0:99999:7:::
$ sudo wget -P /var/lib/tftpboot/centos7/ http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/initrd.img
$ sudo nano /var/lib/tftpboot/pxelinux.cfg/default
default centos7 label centos7 kernel centos7/vmlinuz append initrd=centos7/initrd.img root=nfs:192.168.1.100:/var/lib/tftpboot/centos7/root rw selinux=0
$ sudo nano /etc/exports
/var/lib/tftpboot/centos7/root 192.168.1.0/24(rw,no_root_squash)
$ sudo systemctl start rpcbind nfs-server
$ sudo systemctl enable rpcbind nfs-server
$ sudo nano /var/lib/tftpboot/centos7/root/etc/fstab
none /tmp tmpfs defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0
これでネットブート用のシステムは用意できたけど、dhcpがどうにも動かないな。
dhcpサーバが別に立っている場合
http://www.ichily.blog/entry/2017/05/07/DHCPサーバーが存在する環境でPXE_boot用tftpサーバー作る設定
こっちを参考にproxydhcpを使う方法を試す。
今度は2つのサーバを並列に外のネットワークに繋ぎ、dhcpは上位のルータ、tftpを1つ目のサーバに立てるという感じ。
$ sudo nano /var/lib/tftpboot/pxelinux.cfg/default
$ sudo nano /etc/dnsmasq.d/proxydhcp.conf
enable-tftp tftp-root=/var/lib/tftpboot # set server as proxy dhcp dhcp-range=10.0.0.0,proxy pxe-service=x86PC, "PXE Boot ", "pxelinux", 10.0.0.10 pxe-prompt="press [Enter]" # boot file dhcp-boot=./pxelinux.0
これでネットブートを試みるも、やはりうまくいかない。
あっちこっちの情報をくっつけて一発でうまくいくことはあんまりないな。
追記。
サブネットに対してサービスするdhcpについてはちゃんとケーブルを挿して、ネットワークを繋ぐとちゃんと起動することがわかった。なのでproxydhcpはやめにして、普通にPXEブートの設定をしてやったところ上記のやり方で問題なくディスクレスブートできることがわかった。
firewallの設定をdhcpだけじゃなくtftpとnfsについても開けてやる必要はあるようだ。あたりまえか。
sudo firewall-cmd --add-service=dhcp --zone=public --permanent sudo firewall-cmd --add-service=tftp --zone=public --permanent sudo firewall-cmd --add-service=nfs --zone=public --permanent sudo firewall-cmd --reload