web-dev-qa-db-ja.com

Ubuntu 20.04をベアメタルまたはvirtualboxにデプロイするVM by pxelinux、cloud-initがユーザーデータファイルを取得しない

私はUbuntu(12.04以降)を他のLinuxと共にpxelinuxと共に何年も配備してきました。 Debian-installerを使用すると、問題なく動作します。最近私は20.04をデプロイしようとしていますが、これも基本的には機能します。ただ1つの質問、「ユーザーデータ」ファイルは取得されませんでした。私が何をしようとも、いつもインストーラーから尋ねられるすべての質問を受け取ります。これが私の環境です:

  1. ファイルサーバーの/ var/www/html/ubuntu/cloud-initの下にユーザーデータファイルを作成しました。その内容は次のとおりです。

cloud-config

自動インストール:

バージョン:1

apt:

preserve_sources_list: false

primary:

- arches: [default]

  uri: [can't write since I don't have enough reputation]/images/ubuntu

アイデンティティ:{realname:wrsadmin、username:wrsadmin}

キーボード:{レイアウト:us、トグル:null、バリアント: ''}

ロケール:en_US

通信網:

ethernets:

  enp0s3:

    critical: true

    dhcp-identifier: mac

    dhcp4: true

    nameservers:

      addresses: [128.224.160.11, 128.224.160.12]

      search: [wrs.com., corp.ad.wrs.com.]

version: 2

ssh:

allow-pw: true

authorized-keys: []

install-server: true

遅いコマンド:

- rm -f /target/etc/resolv.conf
- wget -O /target/etc/resolv.conf [can't write since I don't have enough reputation]/ubuntu/resolv.conf
- chattr +i /target/etc/resolv.conf

EOF

  1. pxelinuxの「デフォルト」ファイル。以下に示すように、Debian-Installerネットブートファイルを使用すると、PXEが機能し、preseedも機能します。 cloud-init形式のネットブートファイルを使用すると、PXEも機能し、900MBのサーバーライブイメージが正常に読み込まれます。しかし、「autoinstall ds = nocloud-net; s = [十分な評判がないため書き込みできません]/ubuntu/cloud-init /」は存在しないようです。

Debian-installer + preseed:

LABEL Ubuntu 20.04 x64レガシー

メニューラベルUbuntu 20.04 x64レガシー

テキストヘルプ

Ubuntu 20.04 x64レガシー

ENDTEXT

カーネルLinux/Ubuntu2004/linux

APPEND vga = normal initrd = Linux/Ubuntu2004/initrd.gz locale = en_US.UTF-8 keyboard-configuration/layoutcode = us ipv6.disable = 1 url = [十分な評判がないため書き込めません]/ubuntu /preseed/preseed2004.cfg

クラウド初期化+ユーザーデータ

LABEL Ubuntu 20.04 x64

メニューラベルUbuntu 20.04 x64

テキストヘルプ

Ubuntu 20.04 x64

ENDTEXT

カーネルLinux/Ubuntu2004/vmlinuz

APPEND initrd = Linux/Ubuntu2004/initrd ip = dhcp url = [十分な評価がないため書き込みできません] /images/ubuntuExtra/ubuntu2004/ubuntu-20.04-live-server-AMD64.iso autoinstall ds = nocloud- net; s = [十分な評判がないため書き込みできません]/ubuntu/cloud-init /

私が間違っていた部分を診断するのを手伝っていただけませんか?

1
Wei Du

UEFIベースのサーバー(syslinuxの代わりにgrubを使用)でこれを行ったとき、コマンドラインでセミコロンをエスケープする必要がありました。

変更してみてください

ds=nocloud-net;s=http://blah/ubuntu/cloud-init/

ds=nocloud-net\;s=http://blah/ubuntu/cloud-init/

インストーラー環境で確認する最も簡単な方法は、alt-f2を使用してコンソールを取得し、コマンドを使用することです。

dmesg | grep 'Command line'

これは、完全なds引数が渡されているか、それとも;にのみ渡されるかを示します。

3
Andrew Lowther

これらの手順を使用して、BIOSベースのVMで自動インストールを実行できました。それらは私のUEFIステップからわずかに変更されています。うまくいけば、彼らはあなたがあなたの問題を理解するのに役立つ例を提供するでしょう。あなたはそれらをあなたの環境に合わせることができます

Tftpサーバーを構築する

以下のステップはすべてrootとして実行されます。これらは、Ubuntu 18.04サーバーでテストされました。

Tftpサーバー、webサーバー、syslinuxファイルをインストールする

apt-get -y install tftpd-hpa Apache2 pxelinux

Apacheを設定してtftpディレクトリからファイルを提供する

cat > /etc/Apache2/conf-available/tftp.conf <<EOF
<Directory /var/lib/tftpboot>
        Options +FollowSymLinks +Indexes
        Require all granted
</Directory>
Alias /tftp /var/lib/tftpboot
EOF
a2enconf tftp
systemctl restart Apache2

Syslinuxファイルを配置します

cp /usr/lib/PXELINUX/gpxelinux.0 /var/lib/tftpboot/pxelinux.0.bios
cp /usr/lib/syslinux/modules/bios/*.c32 /var/lib/tftpboot

ライブサーバーISOをダウンロードする

wget https://releases.ubuntu.com/20.04/ubuntu-20.04-live-server-AMD64.iso -O /var/lib/tftpboot/ubuntu-20.04-live-server-AMD64.iso

ライブサーバーisoからカーネルとinitramfsを抽出します

mount /var/lib/tftpboot/ubuntu-20.04-live-server-AMD64.iso /mnt/
cp /mnt/casper/vmlinuz /var/lib/tftpboot/
cp /mnt/casper/initrd /var/lib/tftpboot/
umount  /mnt

Syslinuxを構成する

MYIP=$(hostname --ip-address)
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cat > /var/lib/tftpboot/pxelinux.cfg/default <<EOF
DEFAULT vesamenu.c32
TIMEOUT 600
ONTIMEOUT focal-live-install-autoinstall
Prompt 0

NOESCAPE 1

LABEL focal-live-install
        MENU DEFAULT
        MENU label Install focal
        KERNEL vmlinuz
        INITRD initrd
        APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://${MYIP}/tftp/ubuntu-20.04-live-server-AMD64.iso

LABEL focal-live-install-autoinstall
        MENU DEFAULT
        MENU label Install focal - autoinstall
        KERNEL vmlinuz
        INITRD initrd
        APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://${MYIP}/tftp/ubuntu-20.04-live-server-AMD64.iso autoinstall ds=nocloud-net;s=http://${MYIP}/tftp/cloud-init-bios/

EOF

自動インストール構成でcloud-initを構成します。最初に手動でインストールを実行して、生成された/var/log/installer/autoinstall-user-dataファイルとして使用する。次に、自分のニーズと発生したエラーに基づいて変更を加えました。

mkdir -p /var/lib/tftpboot/cloud-init-bios/
cat > /var/lib/tftpboot/cloud-init-bios/meta-data <<EOF
instance-id: focal-autoinstall
EOF
cat > /var/lib/tftpboot/cloud-init-bios/user-data <<'EOF'
#cloud-config
autoinstall:
  version: 1
  # use interactive-sections to avoid an automatic reboot
  #interactive-sections:
  #  - locale
  apt:
    # even set to no/false, geoip lookup still happens
    #geoip: no
    preserve_sources_list: false
    primary:
    - arches: [AMD64, i386]
      uri: http://us.archive.ubuntu.com/ubuntu
    - arches: [default]
      uri: http://ports.ubuntu.com/ubuntu-ports
  # r00tme
  identity: {hostname: focal-autoinstall, password: $6$.c38i4RIqZeF4RtR$hRu2RFep/.6DziHLnRqGOEImb15JT2i.K/F9ojBkK/79zqY30Ll2/xx6QClQfdelLe.ZjpeVYfE8xBBcyLspa/,
    username: ubuntu}
  keyboard: {layout: us, variant: ''}
  locale: en_US.UTF-8
  # interface name will probably be different
  network:
    network:
      version: 2
      ethernets:
        ens192:
          critical: true
          dhcp-identifier: mac
          dhcp4: true
  ssh:
    allow-pw: true
    authorized-keys: []
    install-server: true
  # this creates an bios_grub partition, /boot partition, and root(/) lvm volume
  storage:
    config:
    - {ptable: gpt, path: /dev/sda, wipe: superblock, preserve: false, name: '', grub_device: true,
      type: disk, id: disk-sda}
    - {device: disk-sda, size: 1048576, flag: bios_grub, number: 1, preserve: false,
      type: partition, id: partition-0}
    - {device: disk-sda, size: 1073741824, wipe: superblock, flag: '', number: 2,
      preserve: false, type: partition, id: partition-1}
    - {fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-0}
    - {device: disk-sda, size: -1, wipe: superblock, flag: '', number: 3,
      preserve: false, type: partition, id: partition-2}
    - name: ubuntu-vg
      devices: [partition-2]
      preserve: false
      type: lvm_volgroup
      id: lvm_volgroup-0
    - {name: ubuntu-lv, volgroup: lvm_volgroup-0, size: 100%, preserve: false,
      type: lvm_partition, id: lvm_partition-0}
    - {fstype: ext4, volume: lvm_partition-0, preserve: false, type: format, id: format-1}
    - {device: format-1, path: /, type: mount, id: mount-1}
    - {device: format-0, path: /boot, type: mount, id: mount-0}
write_files:
  # override the kernel package
  - path: /run/kernel-meta-package
    content: |
      linux-virtual
    owner: root:root
    permissions: "0644"
  # attempt to also use an answers file by providing a file at the default path.  It did not seem to have any effect
  #- path: /subiquity_config/answers.yaml
  #  content: |
  #    InstallProgress:
  #      reboot: no
  #  owner: root:root
  #  permissions: "0644"
EOF

DHCPを構成する

DHCPサーバーのドキュメントに従って、DHCPオプション66、67を設定します。

サーバーを起動する

この時点で、UEFIベースのサーバーを起動して、完全に自動インストールを実行できるはずです。

1
Andrew Lowther

/ var/log/httpd/access_logに生成されるエントリは3つだけです(/ var/log/httpd/error_logには新しいエントリはありません)。

128.224.180.84--[14/May/2020:09:48:45 +0800] "GET /images/ubuntuExtra/ubuntu2004/ubuntu-20.04-live-server-AMD64.iso HTTP/1.1" 200 952107008 "-" " Wget」

128.224.180.84--[14/May/2020:09:49:35 +0800] "GET /images/ubuntuExtra/ubuntu2004/ubuntu-20.04-live-server-AMD64.iso HTTP/1.1" 200 952107008 "-" " Cloud-Init/20.1-10-g71af48df-0ubuntu5 "

128.224.180.84--[14/May/2020:09:50:06 +0800] "GET /images/ubuntuExtra/ubuntu2004/ubuntu-20.04-live-server-AMD64.iso HTTP/1.1" 200 952107008 "-" " Cloud-Init/20.1-10-g71af48df-0ubuntu5 "

最初のエントリは、インストーラがライブイメージを読み込んでいることを示しています。

しかし、次の2つのエントリは理解できません。そして、自動インストールファイルをロードするためのエントリは確かにありません。その理由はわかりません。

0
Wei Du