Tobotobo / my_knowledge_base

0 stars 0 forks source link

Proxmox VE メモ #26

Open Tobotobo opened 2 months ago

Tobotobo commented 2 months ago

※未整理

Cloud-Init Support
https://pve.proxmox.com/wiki/Cloud-Init_Support

Ubuntu 22.04 のクラウドイメージからテンプレートを作成

# イメージをダウンロードします ※Ubuntu 22.04
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

# VirtIO SCSI コントローラーを使用して新しい VM を作成します
qm create 9000 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci 

# ダウンロードしたディスクを local-lvm ストレージにインポートし、SCSI ドライブとして接続します
# qm set 9000 --scsi0 local-lvm:0,import-from=jammy-server-cloudimg-amd64.img ← 400 Parameter verification failed.
qm importdisk 9000 jammy-server-cloudimg-amd64.img local-lvm
qm set 9000 --scsi0 local-lvm:vm-9000-disk-0

# Cloud-Init CD-ROMドライブを追加する
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot order=scsi0
# qm set 9000 --serial0 socket --vga serial0
# qm set 9000 --vga std
qm set 9000 --serial0 socket --vga std

# 事前設定
# pvesm alloc snippets 9000 user-data.yaml --content snippets
qm set 9000 --cicustom "user=local:snippets/user-data.yaml"
# qm cloudinit dump 9000 user
qm set 9000 --cores 2 --memory 2048
qm set 9000 --ipconfig0 ip=dhcp

# テンプレート化
qm template 9000
# pvesm set local --content iso,backup,snippets,vztmpl
# pvesm status -content snippets
Name          Type     Status           Total            Used       Available        %
local          dir     active        29083776        12594948        16488828   43.31%
# ls /var/lib/vz/
dump  images  private  root  snippets  template

user-data.yaml

#cloud-config
users:
  - name: ubuntu
    passwd: $5$6aQEKMmv$PLyB3tn51MZZwDwTrEI3M/HEoawi9oaVzOy7aBzjhd9
    lock_passwd: false
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: sudo
    shell: /bin/bash

※パスワードは平文ではなく openssl passwd で生成する必要があるので注意
※平文で書くと正常に読み込まれず、なぜか上記の設定が反映されない事態になる(原因わからなくて大変だった)

cp ./user-data.yaml /var/lib/vz/snippets

テンプレートから VM を作成

qm clone 9000 123 --name ubuntu2
# qm set 123 --cores 2 --memory 2048
# qm set 123 --ipconfig0 ip=dhcp
# qm set 123 --vga std

Ubuntu 22.04

wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
qm create ${vmid} --core ${PVE_CORE} --memory ${PVE_MEMORY} --net0 virtio,bridge=vmbr0
qm importdisk ${vmid}  ubuntu-22.04.img local-lvm
qm set ${vmid} --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-${vmid}-disk-0
qm resize ${vmid} scsi0 +${PVE_VOLUME}G
qm set ${vmid} --ide2 local-lvm:cloudinit
qm set ${vmid} --boot c --bootdisk scsi0
qm set ${vmid} --serial0 socket --vga serial0
qm set ${vmid} --agent enabled=1
qm set ${vmid} --ipconfig0 ip=dhcp
qm template ${vmid}
Tobotobo commented 2 months ago

create_template_ubuntu-22.04.sh

#!/bin/bash

# -x: 実行したコマンドと引数も出力する
# -e: スクリプト内のコマンドが失敗したとき(終了ステータスが0以外)にスクリプトを直ちに終了する
# -E: '-e'オプションと組み合わせて使用し、サブシェルや関数内でエラーが発生した場合もスクリプトの実行を終了する
# -u: 未定義の変数を参照しようとしたときにエラーメッセージを表示してスクリプトを終了する
# -o pipefail: パイプラインの左辺のコマンドが失敗したときに右辺を実行せずスクリプトを終了する 
set -xeEuo pipefail
shopt -s inherit_errexit # '-e'オプションをサブシェルや関数内にも適用する

# このスクリプトがあるフォルダへカレントディレクトリを移動
cd "$(dirname "$0")"

# イメージをダウンロードします ※Ubuntu 22.04
img_filename=jammy-server-cloudimg-amd64.img
if [ ! -f "${img_filename}" ]; then
    wget https://cloud-images.ubuntu.com/jammy/current/${img_filename}
fi

# 設定
vm_id=9000
vm_name=ubuntu-2204-template
vm_user=ubuntu
vm_pass=ubuntu

# VirtIO SCSI コントローラーを使用して新しい VM を作成する
qm create ${vm_id}
qm set ${vm_id} --name ${vm_name}
qm set ${vm_id} --net0 virtio,bridge=vmbr0
qm set ${vm_id} --scsihw virtio-scsi-pci

# ダウンロードしたディスクを local-lvm ストレージにインポートし、SCSI ドライブとして接続する
qm importdisk ${vm_id} jammy-server-cloudimg-amd64.img local-lvm
qm set ${vm_id} --scsi0 local-lvm:vm-${vm_id}-disk-0

# Cloud-Init CD-ROMドライブを追加する
qm set ${vm_id} --ide2 local-lvm:cloudinit
qm set ${vm_id} --boot order=scsi0
qm set ${vm_id} --serial0 socket --vga serial0

# qm set 9000 --vga std
# qm set 9000 --serial0 socket --vga std

# 事前設定
# pvesm alloc snippets 9000 user-data.yaml --content snippets
# qm set 9000 --cicustom "user=local:snippets/user-data.yaml"
# qm set 9000 --cicustom "user=local:snippets/userconfig.yaml"

# qm cloudinit dump 9000 user
qm set ${vm_id} --cores 2 --memory 2048
qm set ${vm_id} --ipconfig0 ip=dhcp
qm set ${vm_id} --ciuser ${vm_user}
qm set ${vm_id} --cipassword ${vm_pass}

# テンプレート化
qm template ${vm_id} 
Tobotobo commented 2 months ago

create_vm_ubuntu-22.04.sh ※git, docker, samba をインストール ※vm_user, vm_pass は機能していない。

#!/bin/bash

# -x: 実行したコマンドと引数も出力する
# -e: スクリプト内のコマンドが失敗したとき(終了ステータスが0以外)にスクリプトを直ちに終了する
# -E: '-e'オプションと組み合わせて使用し、サブシェルや関数内でエラーが発生した場合もスクリプトの実行を終了する
# -u: 未定義の変数を参照しようとしたときにエラーメッセージを表示してスクリプトを終了する
# -o pipefail: パイプラインの左辺のコマンドが失敗したときに右辺を実行せずスクリプトを終了する 
set -xeEuo pipefail
shopt -s inherit_errexit # '-e'オプションをサブシェルや関数内にも適用する

# このスクリプトがあるフォルダへカレントディレクトリを移動
cd "$(dirname "$0")"

# 設定
template_vm_id=9000
vm_id=123
vm_name=ubuntu-2204-${vm_id}
vm_user=ubuntu
vm_pass=ubuntu

cloud_config_filename=${vm_name}_cloud-config.yaml

# cloud-init
cat <<EOF > "/var/lib/vz/snippets/${cloud_config_filename}"
#cloud-config
hostname: ${vm_name}
fqdn: ${vm_name}.local

package_update: true
packages:
  - ca-certificates
  - curl
  - git
  - samba

timezone: Asia/Tokyo
locale: ja_JP.utf8
keyboard:
  layout: jp

ssh_pwauth: true

users:
  - name: ubuntu
    # ubuntu
    passwd: \$5\$6aQEKMmv\$PLyB3tn51MZZwDwTrEI3M/HEoawi9oaVzOy7aBzjhd9
    lock_passwd: false
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: sudo
    shell: /bin/bash

runcmd:
  # nmbd だけ使いたいので smbd は停止
  - systemctl stop smbd
  - systemctl disable smbd
  # 最新の Docker をインストール
  - install -m 0755 -d /etc/apt/keyrings
  - curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
  - chmod a+r /etc/apt/keyrings/docker.asc
  - echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "\$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
  - apt-get update
  - apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  - usermod -aG docker ubuntu
EOF

qm clone ${template_vm_id} ${vm_id}
qm set ${vm_id} --name ${vm_name}
qm set ${vm_id} --cores 2
qm set ${vm_id} --memory 2048
qm resize ${vm_id} scsi0 20G
qm set ${vm_id} --cicustom "user=local:snippets/${cloud_config_filename}"