LoginSignup
0
0

PXEbootを用いてUbuntuをautoinstallする

Posted at

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

参考文献

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