Skip to content

新規 LXC の追加

terraform/lxcs.tf に module ブロックを追加し、plan / apply で Proxmox 上にコンテナを作成する。

事前確認

手順

  1. terraform/lxcs.tf に module "lxc_<id>" ブロックを追加する
  2. PR を作成し、CI の terraform plan を確認する(または手元で terraform plan)
  3. merge 後に CI の apply で反映する(手元 apply も可)
  4. インベントリ を更新する

定義例(新規作成向け)

import 直後の既存コンテナ定義は項目が多く、新規作成では必要な項目だけを指定する。

module "lxc_310" {
  source = "./modules/lxc"

  node_name     = "pve-03"
  vm_id         = 310
  unprivileged  = true
  start_on_boot = true

  disk = {
    datastore_id = "local-lvm"
    size         = 8
  }

  initialization = {
    hostname = "example"
    dns = {
      servers = ["192.168.40.1", "8.8.8.8"]
    }
    ip_config = {
      ipv4 = {
        address = "192.168.40.310/24"
        gateway = "192.168.40.1"
      }
    }
  }

  memory = {
    dedicated = 512
    swap      = 512
  }

  cpu = {
    cores = 1
  }

  network_interface = {
    bridge = "vmbr0"
    name   = "eth0"
  }

  operating_system = {
    template_file_id = "local:vztmpl/debian-13-standard_13.1-2_amd64.tar.zst"
    type             = "debian"
  }
}

DHCP にする場合は ip_config.ipv4.address = "dhcp" とし、gateway は省略する。

root パスワード

ログイン名は root である。 これは Proxmox ノードの root ではなく、コンテナの中の root である。

modules/lxc にユーザー名もパスワードも無い。 コンテナ作成時、パスワードは入らない。 ホストからコンテナへ入る pct はパスワードを使わないので、未設定のまま passwd で決められる。

pct は、そのコンテナが動いているノードで実行する。 ノードが違うと、コンテナが無いと言って失敗する。

googlehome-watch(ID 303、ノード pve-03)なら、pve-03 のシェルで次を実行する。

pct exec 303 -- passwd root

手元が pve-03 でないときは、TTY を割り当ててノード上で同じ pct を実行する。

ssh -t root@pve-03 pct exec 303 -- passwd root

passwd は新しいパスワードを二度尋ねる。 ログイン名は root のままである。 あとの terraform apply は、このパスワードを戻さない。

パスワードを入れても ssh root@<コンテナIP> が Permission denied, please try again. になることがある。 Debian テンプレートの sshd は PermitRootLogin prohibit-password が既定で、root のパスワードログインを受け付けない。 この拒否は、パスワードの一致より先に決まる。

pve-03 で実効値を見る。

pct exec 303 -- sshd -T | grep permitrootlogin

prohibit-password なら、パスワードログインを許して sshd を読み直す。

pct exec 303 -- bash -c 'printf "%s\n" "PermitRootLogin yes" > /etc/ssh/sshd_config.d/permit-root-password.conf'
pct exec 303 -- systemctl reload ssh

そのあと ssh root@192.168.40.221 で、passwd で決めたパスワードを使う。

補足

  • モジュールは console にデフォルトを持つため、通常は省略してよい
  • features.nesting をデフォルトで有効にしている
  • 既存コンテナを取り込む場合は 既存リソースの import を参照する