Open Tobotobo opened 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}
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}"
※未整理
Cloud-Init Support
https://pve.proxmox.com/wiki/Cloud-Init_Support
Ubuntu 22.04 のクラウドイメージからテンプレートを作成
user-data.yaml
※パスワードは平文ではなく openssl passwd で生成する必要があるので注意
※平文で書くと正常に読み込まれず、なぜか上記の設定が反映されない事態になる(原因わからなくて大変だった)
テンプレートから VM を作成
Ubuntu 22.04