Hyper-VとPXEサーバー構築を構築する。本稿のIPアドレスは一例のため、環境に合わせて変更すること。
何ができるか
- 仮想マシンの使用
- 仮想マシンを作成と起動するだけで、Linuxディストリビューションのインストール
成果物
Hyper-V
ハードウェアの仮想化プラットフォーム。Windowsで使用する方法を紹介する。
Hyper-V有効化方法
以下リンク先のインストラクションに従って、有効化する。
Hyper-V 環境構築
Hyper-Vの初期設定を行う。特に仮想ネットワークを設定する。
仮想ネットワーク作成
仮想ネットワーク名はprivateとする。種類は内部ネットワークで、作成する。 ホスト環境と、仮想マシンが相互に通信できるようにする。
PowerShellを管理者権限で開く。[スタート] をクリックし、「powershell」と入力し、 [PowerShell] を右クリックして、 [管理者として実行] をクリックする。
仮想ネットワーク(内部ネットワーク)を作成する。以下打鍵する。
# @host - PowerShell new-vmswitch -name private -switchtype internal
- ネットワーク名はマシン作成時に使用するので変更しないのがベター
- 詳しくはリンク参照https://image.itmedia.co.jp/l/im/ait/articles/2008/14/l_wi-hyperv01.png
ホストIPアドレス設定
WindowsのNIC設定
仮想ネットワークにホストを参加させる。IPアドレス第4オクテット254を割り当てる。
- 「Windowsキー」+「R」を押して、ファイル名を指定して実行を開き、名前に「ncpa.cpl」と入力
- vEthernet(private)のアイコンを右クリック、プロパティを選択
- IPアドレス(172.17.64.254)、ネットマスク(255.255.255.0)を入力
- 前手順で作成したネットワークにホストのIPアドレスの割り当て
Linuxディストリビューションのメディア(ISO)の用意
使用するLinuxディストリビューションのメディア(ISO)を用意する。本稿では、RHEL8を想定とする。後続手順のPXEサーバーで使用するため、用意しておく。
ホストにダウンロードすること。
ローカルPXEサーバーの用意
VMマシンの新規作成
- Hyper-V マネージャーでの仮想マシンの作成 Windows キーを押して「Hyper-V マネージャー」と入力するか、アプリケーションの一覧で [Hyper-V マネージャー] を見つけて、Hyper-V マネージャーを開く。
- 右側ペーンの操作→新規→仮想マシンを選択
- 名前、格納場所は好きなものに設定
- 世代は第2世代を選択
- 起動メモリも好きな量に設定
- 前手順で用意したRHELメディアを使うこと
- ネットワークは、privateを選択
- HDDは20GBで十分
- ブートイメージファイルからオペレーティングシステムをインストールするを選択
- 前手順で用意したLinuxディストリビューションのメディア(ISO)を選択する
PXEサーバー用仮想マシンのブート
接続、起動
- ゲストOSを右クリックして設定を選択
- セキュリティ、セキュアブートを無効にする→OK
- ゲストOSを右クリックして接続→起動を選択
参考: https://qiita.com/bitterrich/items/7003a3b2e09e38b656c0
RHELインストール
- 省略(ミニマルで)
インストール後設定
ネットワーク設定
# @pxe server nmcli networking on nmcli device # インターフェースを確認 c=enp0s # 確認したインターフェース名を代入にする。 nmcli c del $c nmcli c add con-name $c ifname $c type ethernet nmcli c mod $c ipv4.addresses 172.17.64.1/24 nmcli c mod $c ipv4.gateway 172.17.64.254 nmcli c mod $c ipv4.dns 172.17.64.254 nmcli c mod $c ipv4.method manual nmcli c mod $c ipv6.method disabled nmcli c mod $c connection.autoconnect yes nmcli c up $c ping 172.17.64.254
パケットロスがないこと、疎通していること
パッケージレポジトリ設定
パッケージレポジトリ設定とLinuxディストリビューションのメディア(ISO)マウントをする。外部レポジトリを使用せず、メディアのレポジトリを使用するようにする。
以下打鍵する。
# @pxe server mkdir /root/repos mv /etc/yum.repos.d/* /root/repos cat <<DVDREPO >/etc/yum.repos.d/dvd.repo [DVD-BaseOS] name=DVD-BaseOS baseurl=file:///media/BaseOS/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [DVD-AppStream] name=DVD-AppStream baseurl=file:///media/AppStream/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release DVDREPO cat <<DVDMOUNT >dvd_mount.sh mount /dev/cdrom /media DVDMOUNT sh dvd_mount.sh
レポジトリ確認
# @pxe server
dnf list
PXEサーバー構築
Linuxディストリビューションのメディア(ISO)をPXEサーバーへアップロードする。/tmpにlinux8.isoの名前で格納する。
以下打鍵する。少しずつ打鍵したほうがいい。シェルにするのであれば、一気に流してもいい。
# @pxe server dis_name=linux8 dnf -y install tftp-server systemctl enable --now tftp.socket dnf -y install firewalld firewall-cmd --permanent --zone=public --add-service=tftp firewall-cmd --reload dnf -y install dhcp-server cat <<DHCPCONFIG > /etc/dhcp/dhcpd.conf default-lease-time 600; max-lease-time 7200; authoritative; option space pxelinux; option pxelinux.magic code 208 = string; option pxelinux.configfile code 209 = text; option pxelinux.pathprefix code 210 = text; option pxelinux.reboottime code 211 = unsigned integer 32; option architecture-type code 93 = unsigned integer 16; subnet 172.17.64.0 netmask 255.255.255.0 { range dynamic-bootp 172.17.64.200 172.17.64.250; option broadcast-address 172.17.64.254; option routers 172.17.64.254; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 172.17.64.254; if option architecture-type = 00:07 { filename "BOOTX64.EFI"; } else { filename "pxelinux.0"; } } } DHCPCONFIG firewall-cmd --permanent --zone=public --add-service=dhcp firewall-cmd --reload systemctl enable --now dhcpd systemctl restart dhcpd cat /var/lib/dhcpd/dhcpd.leases rpmdir=/tmp/rpm mkdir -p ${rpmdir} dnf -y reinstall --downloadonly --downloaddir=${rpmdir} shim grub2-efi-x64 cd ${rpmdir} && rpm2cpio shim-x64-*.rpm | cpio -dimv cd ${rpmdir} && rpm2cpio grub2-efi-x64-*.rpm | cpio -dimv cp -v ${rpmdir}/boot/efi/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot/ cp -v ${rpmdir}/boot/efi/EFI/*/grubx64.efi /var/lib/tftpboot/ chmod 644 /var/lib/tftpboot/{BOOTX64.EFI,grubx64.efi} ls -ld /var/lib/tftpboot/{BOOTX64.EFI,grubx64.efi} mkdir -p /var/pxe/${dis_name} mount -t iso9660 -o loop,ro /tmp/${dis_name}.iso /var/pxe/${dis_name} mkdir /var/lib/tftpboot/${dis_name} cp -prv /var/pxe/${dis_name}/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/${dis_name} cat <<GRUBCONF > /var/lib/tftpboot/grub.cfg set timeout=5 menuentry "Install ${dis_name}" { linuxefi ${dis_name}/vmlinuz ip=dhcp inst.ks=http://192.168.255.2/ks/${dis_name}-ks.cfg initrdefi ${dis_name}/initrd.img } GRUBCONF cat /var/lib/tftpboot/grub.cfg chmod 644 /var/lib/tftpboot/grub.cfg dnf -y install httpd systemctl enable --now httpd firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --reload cat <<APACHEEOF > /etc/httpd/conf.d/pxeboot.conf Alias /${dis_name} /var/pxe/${dis_name} <Directory /var/pxe/${dis_name}> Options Indexes FollowSymLinks Require all granted </Directory> APACHEEOF systemctl restart httpd mkdir /var/www/html/ks cat <<KICKSTART > /var/www/html/ks/${dis_name}-ks.cfg text reboot url --url=http://172.17.64.254/${dis_name}/ keyboard --vckeymap=jp106 --xlayouts='jp','us' lang en_US.UTF-8 network --bootproto=dhcp --ipv6=auto --activate --hostname=localhost zerombr %packages @core %end ignoredisk --only-use=sda autopart clearpart --all --initlabel timezone Asia/Tokyo --utc KICKSTART dnf -y install python3 pass=$(python3 -c 'import crypt; print(crypt.crypt("root", crypt.METHOD_SHA512))') echo "rootpw --iscrypted --allow-ssh ${pass}" >> /var/www/html/ks/${dis_name}-ks.cfg pass='' chmod 644 /var/www/html/ks/${dis_name}-ks.cfg
※/tmp/linux8.isoがマウントされているときのみPXEサーバーが正常に動作する。再起動の際の動作未確認
環境構築完了
次は、PXEサーバーを試す。
PXEサーバーを利用した新規マシン構築
新規仮想マシンの作成(CUI)
管理者権限で、powershellを開き、以下打鍵する。
# @host - powershell $vm_name="4pxe" new-vm -name $vm_name -memorystartupbytes 2gb -bootdevice vhd -newvhdpath .\$vm_name\vms\test.vhdx -path .\$vm_name\vmdata -newvhdsizebytes 20gb -generation 2 -switch private set-vmfirmware $vm_name -enablesecureboot off $nw = get-vmnetworkadapter -vmname $vm_name set-vmfirmware $vm_name -firstbootdevice $nw start-vm -name $vm_name $hdd = get-vmharddiskdrive -vmname $vm_name set-vmfirmware $vm_name -firstbootdevice $hdd
マシンの作成は前手順でGUIで行っているが、この箇所では、CUIで仮想マシン作成を行っている。
- Hyper-Vの新規マシンが作成される
- 仮想マシン用のハードディスクも同時に作成されている
- 待つとRHELがインストールされる。前手順で構築したPXEサーバーのサービスが利用され、自動でRHELのインストールが行われる。
新しく新しいマシンが作成され、RHELがインストールされていること(ログイン画面が現れること)
補足事項
新規マシンに付与されるIPアドレス
PXEサーバーを利用して作成される(PXEブートで起動した)サーバーはのIPアドレスはPXEサーバーで構築したDHCPサーバーのアドレスプールれんじで設定される。DHCPの設定ファイルもしくは、PXEブートしたマシンでIPアドレスを確認できる。
# @pxe server grep range /etc/dhcp/dhcpd.conf
# @new machine
ip a