PXEbootを用いてUbuntuをautoinstallする
nyahahahnoha
前提
routerIP: 172.17.0.1
serverIP: 172.17.0.2
clientIP: 172.17.0.101
clientMAC: BC:24:11:D2:53:08
パッケージのインストール
$ sudo apt install dnsmasq pxelinux syslinux nginx
dnsmasqの設定
$ sudo mkdir /tftpboot # tftpのrootディレクトリ
$ sudo tee -a /etc/dnsmasq.conf << 'EOF'
interface=ens18 # dhcpを吐くinterface
tftp-root=/tftpboot # rootディレクトリの指定
dhcp-leasefile=/var/lib/misc/dnsmasq.leases # leaseファイル
dhcp-option=option:router,172.17.0.1 # routerのIP
dhcp-option=option:netmask,255.255.0.0 # サブネットマスク
dhcp-option=option:dns-server,8.8.8.8 # DNSserverのIP
pxe-service=x86PC, "PXELINUX (BIOS)", "pxelinux.0" # pxeブートのoption
dhcp-range=172.17.0.101,172.17.0.199,12h # dhcpの範囲
dhcp-host=BC:24:11:D2:53:08,172.17.0.101,ubuntu-server # 特定のMACaddressに対してIPを指定する.
#dhcp-host=MACaddress,IPaddress,HostName
EOF
nginxの設定
$ sudo mkdir /var/www/{autoinstall,iso}
$ sudo vim /etc/nginx/sites-available/default
server {
...
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /autoinstall {
root /var/www/;
autoindex on;
}
location /iso {
root /var/www/;
autoindex on;
}
...
}
Bootに必要なファイルをtftpdに置く
- pxelinux.0はpxeの設定ファイルを取得する
- ldlinux.c32はbootloaderの補助を行う
- initrdはbootloader
- vmlinuzはkernel
pxelinux.0がpxelinux.confの先の設定ファイルをmacアドレスに従って見つけ、clientがpxebootの設定を確認する
pxelinux.confの先のファイルのappendの意味は - initrdでinitrdの場所を示す
- autoinstallはautoinstallでsetupすることを示す
- ipはdhcpで一時的なipアドレスを割り当てることを示す
- urlはisoファイルの場所を示す
- dsはcloud-config(autoinstallの設定ファイル)を示す
$ sudo cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /tftpboot/
$ sudo cp /usr/lib/PXELINUX/pxelinux.0 /tftpboot/
$ sudo mkdir /tftpboot/pxelinux.conf
$ sudo tee /tftpboot/pxelinux/01-bc-24-11-d2-53-08 << 'EOF'
default linux
prompt 0
timeout 30
label linux
kernel /images/jammy/vmlinuz
ipappend 2
append initrd=/images/jammy/initrd autoinstall ip=dhcp url=http://172.17.0.2/iso/ubuntu-22.04.2-live-server-amd64.iso ds=nocloud-net;s=http://172.17.0.2/autoinstall/bc:24:11:d2:53:08/
EOF
$ wget https://releases.ubuntu.com/jammy/ubuntu-22.04.2-live-server-amd64.iso
$ sudo mount -o loop,ro ubuntu-22.04.2-live-server-amd64.iso /mnt # isoファイルを/mntに展開
$ sudo mkdir -p /tftpboot/images/jammy
$ sudo cp /mnt/casper/{initrd,vmlinuz} /tftpboot/images/jammy/
$ sudo umount /mnt # 展開を解除
$ sudo mv ubuntu-22.04.2-live-server-amd64.iso /var/www/iso/
cloud-configを記述する
cloud-configの書き方は下記url参照
https://ubuntu.com/server/docs/install/autoinstall
パスワード生成はopenssl passwd -6 password
コマンドでpassword
を各自のパスワードに変更して出力してください
$ sudo mkdir /var/www/autoinstall/bc:24:11:d2:53:08
$ sudo touch /var/www/autoinstall/bc:24:11:d2:53:08/{user-data,meta-data}
$ sudo tee /var/www/autoinstall/08:00:27:84:bd:fe/user-data <<'EOF'
autoinstall:
version: 1
locale: ja_JP.UTF-8
keyboard:
layout: "jp"
user-data:
timezone: Asia/Tokyo
identity:
hostname: ubuntu-server
username: ubuntu
password: "$6$~~~~~~~~~~~~~~~~~~~~~~~~"
ssh:
install-server: yes
EOF
サービスを開始
$ sudo systemctl restart dnsmasq
$ sudo systemctl reload nginx
参考文献