概要

この記事は ProxmoxVE に RockyLinux9 仮想OSを立てる(LXC編) の焼き直しである。LXCの特徴云々は省略。

本家の Red Hat Enterprise Linux 10 は 2025/5/21(日本時間)にリリース、 続いて Rocky Linux 10 が 2025/6/11 にリリース された。

Rocky 10 の LXC コンテナも間もなくリリースされるだろうと心待ちにしていたが、2025/9/10 にようやく LXC/Incus コンテナ版がリリース された。

この記事を書くまでに Proxmox VE 自体が 8 → 9 へアップグレードしたため、LXC コンテナから見える Kernel バージョンが前記事より新しく見えるはず。

LXC テンプレートから Rocky Linux コンテナ作成

作成する前にゲスト OS のパラメータを決めておく。

OSパラメータの例

項目 設定値
ホスト名 lxc-rocky10
パスワード xxxxxxxxx
割当ディスク容量(GB) 20
割当CPUコア 1
割当メモリ(MiB) 2048
スワップ(MiB) 1024
IPv4アドレス/ネットマスク長 192.168.0.51/24
IPv4デフォルトゲートウェイ 192.168.0.1
IPv6アドレス/ネットマスク長 (今回は未設定)
IPv6デフォルトゲートウェイ (今回は未設定)
DNSドメイン home
DNSサーバ 192.168.0.1

LXC テンプレートをProxmox VE ストレージへダウンロード

2025/9/23 現在、Rocky Linux 10 のテンプレートファイルは Proxmox VE のCTテンプレート一覧には出てこない。

Proxmox VE Rocky Linux 10 のテンプレートファイルは一覧には出てこない

そこで下記から直接ダウンロードする。

Image server for Incus and LXC

このサイトでは日々イメージが更新されているので、目標のディストリビューションの最新版を探す。

Distribution Release Architecture Variant Build date
rockylinux 10 amd64 default (最新)
Image server for Incus and LXC

※Architecture に amd64arm64 版があり、大変紛らわしいので注意。

このリンクを開くと複数のイメージファイルがあるので、rootfs.tar.xz を探して URL を取得する。

rootfs.tar.xzのリンクを取得

Proxmox VE の CTテンプレート管理画面に行って、この URL からダウンロードする。

  • データセンター > ストレージ > local
  • [CTテンプレート] > [URLからダウンロード]
URLからダウンロード

2025/9/23 の例:

※ファイル名を指定しないと rootfs.tar.xz となってしまうため、Proxmox の標準CTテンプレート名に準じて下記のように命名しておくとわかりやすい。

ディストリビューション名-リリース-バリアント_日付_アーキテクチャ.tar.xz

URLとファイル名を指定

ダウンロードウィンドウが開いて進行する。TASK OK と出たら右上の (×) で閉じる。

URLからダウンロード

CTテンプレート一覧に、ダウンロードしたテンプレートファイルが出てくれば完了。

ダウンロードしたテンプレートが表示されることを確認

コンテナ作成(WebUI版)

Proxmox VE の WebUI で LXC コンテナを作成してゆく。
※CLIで実施する場合は コンテナ作成(CLI版) を参照。

Proxmox Web UI から開始

[CTを作成] ボタンをクリック

CTを作成 のボタンをクリック

「作成: LXCコンテナ」ウィンドウにパラメータを入れてゆく。

  • 「非特権コンテナ」とは LXC において親 Kernel の PID 1 を共有しない仕組みである。よほど必要がない限り、チェックは入れたままにして置く方が安全。なお、構築後の変更が面倒。
  • 「ネスト」は、非特権コンテナに於いて内側で Docker 等の準仮想サービスを立てる際に必要。チェックを入れたままでよい。
  • SSH 公開鍵は、作業用 PC で作成済みの公開鍵をペーストするか、ファイルを読ませる
    LXCコンテナ作成の全般タブ、各項目に入力

プルダウンして、ダウンロードした Rocky linux のテンプレートを選択

ダウンロード済みのテンプレートを選択

ディスクサイズを指定

ディスクサイズを指定

割当 CPU コア数を指定

CPUコア数を指定

メモリと SWAP 容量を指定

割当メモリとスワップ容量を指定

固定 IP の指定

IPv6 が使用できる環境では、SLAAC を選択しておく。

IPアドレスを指定

(家庭内)DNS サーチドメインと、DNS サーバの指定

DNSサーチドメインとDNSサーバのIPアドレスを指定

設定値を確認後、問題なければ [完了] クリック

設定一覧を確認できたら完了ボタンをクリック

「Task viewer: CT nnn -作成」ウィンドウの構築を待つ。このスペックなら 10秒程度。
TASK OK が出たら (×) ボタンで閉じる

TASK OK と表示されたらバツボタンで閉じる

  • 左メニュー [LXCコンテナ] → [作成したホスト名] 選択
  • ノードメニュー [コンソール] をクリックしてから [開始] ボタンをクリック
    作成したLXCコンテナのコンソールを開く

数秒で Rocky Linux が起動する

Linuxが起動したことを確認

root ユーザー+指定パスワードでログインしてみる。
df -h コマンドでディスク容量を確認。

rootユーザーでログインしてみる

起動後の調整

  • Proxmox の Web UI「コンソール」で root でログイン
  • 初回アップデートと sshサーバパッケージの追加
  • 一旦再起動
# 先にmanを入れないとman pageが出ないことがある
dnf install -y man man-pages
# アップデート
dnf update -y
# ssh server 起動
dnf install -y openssh-server
reboot

ここからは、PC端末の SSH クライアントから root / 公開鍵認証でログインできるようになる。
以降は RLogin/PuTTY 等のターミナルで接続し、設定を続行する。

# 不足パッケージを導入 (お好み)
dnf install -y bash-completion net-tools which zip unzip bzip2 xz zstd tar telnet perl dnf-plugins-core
# viエディタ (お好み)
dnf install -y vim-enhanced
# EPEL レポジトリの追加
dnf install -y epel-release
# もろもろツール (お好み)
dnf install -y htop whois bind-utils wireshark-cli tcpdump traceroute nc fping
#タイムゾーン設定
timedatectl set-timezone Asia/Tokyo

# 再起動
reboot

コンテナ作成 (CLI版)

上記 コンテナ作成(WebUI版) での作業を、Proxmox VE の linux CLI から直接実行することもできる。

  • LXC テンプレートのダウンロードは WebUI でやっておく
  • 下記のスクリプトを編集
    • PC端末の SSH 公開鍵を指定
    • 仮想環境の設定値として CTxxxx 変数を修正
    • コンテナID (CTID) は自動で払い出されない ので、空き番号を探して記入
  • 編集後、スクリプトを Proxmox VE のコンソールに貼り付ける
  • コンテナの作成と初期化まで全自動で実施
# SSH 公開鍵
cat <<'__EOT__' >/tmp/ssh_public_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIErv+lDj844n1VKiL2tm+CiP+HytuFDmQLgPBtcOA6Zi MyPC
__EOT__
# 設定値を記入
## 未使用コンテナIDの指定
CTID=100
CTDESCRIPTION="Rocky Linux Sample 1"
CTHOSTNAME="lxc-rocky1"
CTPASSWORD="xxxxxxxxx"
CTCORE=1
CTSTORAGESIZE=20
CTMEMORY=2048
CTSWAP=1024
CTIPV4="192.168.0.51/24"
CTIPV4GW="192.168.0.1"
CTIPV4DNS="192.168.0.24"
CTSEARCHDOMAIN="home"
CTTEMPLATE=$(ls -1 /var/lib/vz/template/cache/rockylinux-9-* | tail -1)
# コンテナ作成
pct create ${CTID} ${CTTEMPLATE} \
    --arch amd64 \
    --cores ${CTCORE} \
    --description "${CTDESCRIPTION}" \
    --unprivileged 1 \
    --features "nesting=1,fuse=1" \
    --hostname "${CTHOSTNAME}" \
    --memory "${CTMEMORY}" \
    --nameserver "${CTIPV6DNS} ${CTIPV4DNS}" \
    --net0 "name=eth0,bridge=vmbr0,gw=${CTIPV4GW},ip=${CTIPV4},ip6=auto,type=veth" \
    --onboot 1 \
    --ostype "centos" \
    --password "${CTPASSWORD}" \
    --rootfs "local-lvm:${CTSTORAGESIZE}" \
    --searchdomain "${CTSEARCHDOMAIN}" \
    --ssh-public-keys "/tmp/ssh_public_keys" \
    --start 1 \
    --swap "${CTSWAP}" \
    --timezone "Asia/Tokyo"
rm -f /tmp/ssh_public_keys
sleep 10
# 初期設定やパッケージ追加の実施
pct exec ${CTID} -- bash -c "\
    systemctl set-default multi-user.target &&\
    dnf install -y man man-pages &&\
    dnf install -y openssh-server &&\
    systemctl start sshd &&\
    nmcli c m 'eth0' ipv4.dhcp-send-hostname no &&\
    nmcli c reload &&\
    nmcli c down 'eth0' ; nmcli c up 'eth0' &&\
    dnf install -y dnf-plugins-core &&\
    dnf install -y epel-release &&\
    dnf install -y bash-completion net-tools which zip unzip bzip2 xz zstd tar telnet perl vim-enhanced htop whois bind-utils tcpdump traceroute nc fping fastfetch glibc-langpack-ja &&\
    dnf update -y &&\
    reboot"
sleep 10
# アップデート情報クリーンアップ
pct exec ${CTID} -- bash -c "\
    dnf clean all"

参考