0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linux Mint 20.2をVirtualBoxからPXEでネットワークインストール

Last updated at Posted at 2021-09-28

はじめに

はじめての投稿になります。宜しくお願いします。

Windows10が厳しくなってきてLinuxMint20への入れ替えを考えています。
USBメモリやDVD-Rから起動できればいいのですが
何故かBIOSでブート順を変更できず(グレーアウトされている)
かろうじてPXEからのインストールは選択できるようなので
別のPCでPXEサーバを立ててみようと思いました。

インターネットでいろいろ調べましたが、結構ハマりましたので
何かの役に立てばと思い共有します。

準備するもの

  • サーバとなるPC (空き容量100GB以上)
    • VirtualBox (インストール方法は割愛します)
    • VirtualBox上にUbuntuDesktop20.04LTS (これもインストール方法割愛)
  • サーバとインストール先PCをつなぐルータ (DHCPサーバ機能を使用します)
  • インストール先となるPC

おおまかな手順

  1. PXEサーバとなるVirtualBox上のUbuntuに必要なものをインストールする
  2. 試験のため、PXEサーバのネットワーク設定を変更する
  3. 試験用の仮想PCをVirtualBox上に作成し、動作を確認する
  4. 本番用にネットワークを設定し、ターゲットPCにインストールを実施する

【手順1】 PXEサーバのセットアップ

まず、今回インストールしたいLinuxMintのISOファイルをダウンロードします。
今回はMATEを使用します。こちらからダウンロードしてください
私はVirtualBoxでのマウント操作に馴染んでいるのでホスト側にダウンロードしました。後でメディアに移すのも楽ですし。


ここからは仮想マシンのUbuntu上の作業になります。
インストールするパッケージは以下になります。

  • dnsmasq : 今回はProxyDHCPおよびTFTPサーバとして使用します。
  • nfs-kernel-server : 今回はNFSにてインストールするファイルを共有します。
  • syslinux-common : ブートに必要な各種ファイルがインストールされます。
  • pxelinux : PXEブートに必要なファイルがインストールされます。

これらをインストールするために以下のコマンドを端末で実行してください。

パッケージのインストール
sudo apt update
sudo apt install dnsmasq nfs-kernel-server syslinux-common pxelinux -y

これからdnsmasqの設定を行うため、一旦サービスを停止します。
(インストールと同時に自動的に起動されていると思います)

dnsmasqの停止
sudo systemctml stop dnsmasq
# 再起動時に自動的に起動するのも停止しておく
sudo systemctl disable dnsmasq

PXEブート時のTFTPサーバのコンテンツルートを /var/lib/tftpboot とします。
ブートに必要なファイルをコンテンツルートに紐つけます。

ブートに必要なファイルのリンクを貼る
cd /var/lib/tftpboot
sudo mkdir -p bios
sudo ln -s /usr/lib/syslinux/modules/bios/* bios
sudo ln -s /usr/lib/PXELINUX/* bios

これは必須ではありませんが、ターゲットPCのチェック用に Memtest86+ を入れています。
Memtest86+ V5.31b をダウンロード&解凍したものを $HOME/Downloads に入れた後、以下の操作を行いました。

Memtest86+の導入
cd /var/lib/tftpboot
sudo mkdir -p memtest
# 拡張子があるとうまく動かないようなので外してコピーする
cd memtest
sudo cp $HOME/Downloads/memtest86+-5.31b.bin memtest86+-5.31b

PXEブートの初期に上記の Memtest86+LinuxMintインストール の起動を選択できる設定を加えます。これを応用すれば複数の種類のインストールに対応できるサーバもできると思います。
これは /var/lib/tftpboot/pxelinux.cfg フォルダを作成し、その配下に設定ファイルを作成することで実現できます。なお設定ファイル名は default としておけば良いようです。

今回は この記事 を参考に(というか丸パクリ、、)メニューが表示されるようにしています。

PXEブートの設定
cd /var/lib/tftpboot
sudo mkdir -p pxelinux.cfg
# viコマンドでdefaultファイルを作成(内容は別掲)
sudo vi pxelinux.cfg/default
# メニュー設定をpxe.confファイルとして作成(内容は別掲)
sudo vi pxelinux.cfg/pxe.conf
pxelinux.cfg/default
DEFAULT ::bios/vesamenu.c32
TIMEOUT 800
ONTIMEOUT 1
PROMPT 0
# メニューファイルの設定
MENU INCLUDE ::pxelinux.cfg/pxe.conf
NOESCAPE 1

# メニュー1 Memtest86+
LABEL memtest86
  MENU LABEL Memtest86+ 5.31
  KERNEL ::memtest/memtest86+-5.31b

# メニュー2 LinuxMintインストール起動(要編集:IPアドレス)
LABEL LinuxMint20
  MENU Linux Mint 20.2 MATE 64bit
  KERNEL ::mint20mate/casper/vmlinuz
  INITRD ::mint20mate/casper/initrd.lz
  APPEND boot=casper ip=dhcp root=/dev/nfs ro netboot=nfs nfsroot=<PXEサーバのIPアドレス>:/var/lib/tftpboot/mint20mate toram nosplash --
pxelinux.cfg/pxe.conf
MENU TITLE PXE Server
NOESCAPE 1
ALLOWOPTIONS 1
PROMPT 0
menu width 80
menu rows 14
MENU TABMSGROW 24
MENU MARGIN 10
menu color title 1;36;44 #ff008080 #00000000 std

さらっと書きましたが、この pxelinux.cfg/default の設定が今回の肝のひとつで、ディストリビューションおよびその世代によって起動の仕方が異なるので内容が異なる様です。他のディストリビューションなどには応用効かない箇所もあると思いますので注意してください。

まだ設定が残っていますが、通常、この仮想マシンのネットワーク設定は NAT もしくは ブリッジアダプター のみの場合が多いと思いますので
一旦ネットワークの設定を変更するために仮想マシンをシャットダウンしてください。

【手順2】 ホストオンリーネットワークでの設定

VirtualBoxでの仮想マシンのネットワークのデフォルトは NAT です。
VirtualBoxのネットワークの解説は この記事 などが参考になると思いますが、今回はこの設定を切り替えることで、ターゲットPCのような物理マシンVirtualBox上に作成した試験用仮想マシン 両方に対応できるようにします。

最終的な目標であるターゲットPCへのインストール時は以下のような構成になります。PXEサーバのネットワーク設定を ブリッジアダプター にすることでターゲットPCと同じLAN上に接続されることになります。
Qiita記事用20210927-1.png
その前段階として、試験用の仮想マシンとPXEサーバを ホストオンリーアダプター を介したネットワークで検証します。先の構成ではルータが担っていたDHCPサーバ機能はホストが行うので、PXEサーバ(dnsmasq)は同じProxyDHCP構成(付与されるIPアドレスは異なるのに注意)で運用することができます。
Qiita記事用20210927-2.png

【手順1】の最後でPXEサーバの仮想マシンは電源オフの状態になっていると思いますので、VirtualBoxマネージャの設定からネットワークを選択し、ホストオンリーアダプターを割り当てて再起動してください。
vitualbox_4.png


再起動したらまずPXEサーバのIPアドレスを確認します。
UbuntuDesktopでしたら有線接続されている筈ですので設定メニューから確認ください。

このIPアドレスは一定ではありません。今回はネットワーク構成を変えますし
変更しなくてもDHCPのリース期間が経てば変わる場合があります。
PXEサーバを立ち上げる度に確認する方がいいでしょう。

このIPアドレスが必要になるのは以下の設定です。

  1. ProxyDHCPの設定: /etc/dnsmansq.d/pxe.conf (後で説明)
  2. PXEサーバの設定: /var/lib/tftpboot/pxelinux.cfg/default (【手順1】で説明済)
  3. NFSサーバの設定: /etc/exports (後で説明)

2.の方ですが、<PXEサーバのIPアドレス> がこの値になります。

また、dnsmasqの設定ファイルは /etc/dnsmasq.conf ですが
今回は1.の/etc/dnsmasq.d/pxe.confを作成して/etc/dnsmasq.confから読み込ませるようにします。
(dnsmasqをインストールした時点で/etc/dnsmasq.dフォルダは作成されている筈です)

ここで編集すべき、**<ネットワークアドレス>**ですが、ここでは詳しい説明は省略します。
仮に、PXEサーバのIPアドレスが 192.168.56.101 ならば、
ネットワークアドレスは 192.168.56.0 でOKだと思います。

/etc/dnsmasq.d/pxe.conf
# DNSサーバとして機能させない設定
port=0

log-dhcp
 
# PXEリクエストに対してProxyDhcpとして応答する設定
# <ネットワークアドレス>は通常PXEサーバのIPアドレスの4オクテット目
# ("."で区切られた数字の4番目)を"0"にすればOK
dhcp-range=<ネットワークアドレス>,proxy 
 
# PXEブート時のイメージを指定
# UEFIのPCはこの設定では起動しないとのことだが未検証
pxe-service=x86PC,"PXE Boot",pxelinux
 
# pxelinux.0 の送信のため、TFTPサーバを起動
# 【手順1】のとおりファイルを置かないと失敗する
enable-tftp
tftp-root=/var/lib/tftpboot

/etc/dnsmasq.d/pxe.confを読み込ませる為、/etc/dnsmasq.conf内の以下の行のコメントを外します。

/etc/dnsmasq.conf (一部)
#conf-dir=/etc/dnsmasq.d/*.conf

dnsmasqはその名の通り本来はDNSサーバ機能を提供していますが、今回のようにDNS機能を殺す場合(pxe.conf内にport=0を設定)、名前解決にdnsmasqを利用しない様、/etc/default/dnsmasq の最後に以下の行を追加します。

/etc/default/dnsmasq (最後に以下の行を追加)
DNSMASQ_EXCEPT=lo

あと3.のNFSサーバの設定ですが、/etc/exports に以下の行を追加して、ISOイメージをNFSを介して共有できるようにします。

/etc/exports (最後に以下の行を追加)
/var/lib/tftpboot/mint20mate  <PXEサーバのIPアドレス>/255.255.255.0(ro,sync,no_subtree_check)

設定を反映するため、NFSサーバを再起動します。

NFSサーバの再起動
sudo systemctl restart nfs-kernel-server

これまで当然のように書いてきましたが、今回LinuxMintのISOイメージにあるファイル一式を/var/lib/tftpboot/mint20mate 配下にコピーします。
VirtualBoxの機能を使って、ISOイメージをマウントした場合、/media/$USER/Linux Mint 20.2 MATE 64-bit にマウントされると思いますので、以下のコマンドでコピーします。

ISOイメージのコピー
cd /var/tftpboot
sudo mkdir -p mint20mate
sudo cp -r /media/$USER/Linux\ Mint\ 20.2\ MATE\ 64-bit/. mint20mate

上記のなにげないファイルのコピーですが、ここでハマりました。
はじめは、cp -r 「コピー元のフォルダ」/* 「コピー先のフォルダ」としていたのですが、うまくいかず調べてみたところ、
ISOイメージのトップフォルダに、.disk という隠しフォルダがあり、それがコピーされていないのが原因でした。ご参考までに。

長文になりましたが、PXEサーバの設定は以上になります。
最後にデバッグモードで dnsmasqを起動し、試験に臨みます。

デバッグモードでdnsmasqを起動
sudo dnsmasq -d

【手順3】 試験用仮想マシンでの起動試験

試験用に新たな仮想マシンをVirtualBoxで作成します。
ポイントは以下の2点だけです。あとはデフォルトで構わないと思います。

  • 起動順序のネットワークにチェックをいれて順序を最上位にする
  • ネットワークアダプターをホストオンリーアダプターにする
    vitualbox_1.png
    vitualbox_2.png
    仮想マシンを起動したら、以下の様な画面が表示されると思います。
    カーソルを下にして「Enter」を入力し、LinuxMintのLiveCD画面が表示されたら成功です。
    vitualbox_3.png

##おわりに
以上で説明を終わります。【手順4】本番環境での説明は省略します。
おおざっぱに書くと、PXEサーバのネットワークアダプタを変更し再起動後、IPアドレス関連を修正して、nfs-kernel-serverの再起動およびdnsmasqの起動を行うという手順になります。

ただし、/etc/dnsmasq.d/pxe.confの**<ネットワークアドレス>の説明を簡略化**したことなどもあり、以下の注意喚起をさせてください。

今回の構成は、家庭内ネットワークなど限られたネットワーク内での実施を前提としています。
企業内ネットワークなど複雑な構成のネットワーク内での実施を想定していません。
個別にルータを準備してローカル環境内で実施するなどの配慮をお願いします。

本記事の手順を実施して、何か問題が起こっても当方は責任を負いかねます。

以上です。最後までお読みいただき、ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?