kuroの覚え書き

96の個人的覚え書き

クラスタにするかただの並列にするか

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