この記事はなに?
- Miracle Linux8や9をOCIで動かしたい要件があったため、動かしてみました
- Miracle Linux公式で、ISOイメージが提供されています
ざっくり作業の流れ
- OCI上のCompute(今回はOracle Linux)にKVM(仮想環境)をインストールし、KVM上にISOイメージからMiracle Linuxをインストール
- インストールした仮想マシンからvmdkを作成
- vmdkファイルからカスタムイメージを作成し、Miracle Linuxを起動
Miracle Linuxとは?
- Miracle Linuxは、国産エンタープライズLinuxディストリビューションで、RHEL(Red Hat Enterprise Linux)互換のOSです
- Miracle LinuxのイメージはOCIのマーケットプレイスでは提供されていません
- Miracle LinuxはAlmaLinuxとの共同開発体制に移行し、AlmaLinux10以降はMiracle Linuxと互換性があります
- AlmaLinuxはOCIで提供されていますが、今回は公式のMiracle Linux ISOイメージから構築してみます
具体的な手順
カスタムイメージ作成用のComputeを用意
以下のスペックでComputeインスタンスを作成します。
| 項目 | 設定値 |
|---|---|
| OS | Oracle Linux 9 |
| シェイプ | VM.Standard.E4.Flex 2 OCPU(AMD互換ならどれでも可) |
| メモリ | 32GB |
| ディスク | 100GB以上(OCI初期の容量だと足りなくなる可能性あり!) |
システムアップデート
# システムを最新状態に
sudo dnf update -y
KVMの設定
KVM/QEMUのインストール
sudo dnf install -y qemu-kvm libvirt virt-install virt-viewer
sudo dnf install -y libvirt-client virt-top libguestfs-tools
# インストール確認
rpm -qa | grep qemu-kvm
rpm -qa | grep libvirt
インストールしたツールについて
- KVM (Kernel-based Virtual Machine): Linuxカーネルに組み込まれた仮想化技術です
- QEMU: KVMと連携して動作する仮想マシンエミュレータです
- libvirt: 仮想マシンを管理するためのツール群です
- virt-install: コマンドラインから仮想マシンを作成するツールです
- libguestfs-tools: 仮想マシンのディスクイメージを操作するためのツール群です
libvirtdの起動と有効化
libvirtdは仮想マシンを管理するデーモンで、KVMを操作するために必要です。
# libvirtdサービスの起動
sudo systemctl start libvirtd
# 自動起動を有効化
sudo systemctl enable libvirtd
# 状態確認
sudo systemctl status libvirtd
# Active: active (running) と表示されればOK
ユーザー権限の設定
# 現在のユーザーをlibvirtグループに追加と適用
sudo usermod -aG libvirt $(whoami)
newgrp libvirt
# 確認
groups
# libvirt が含まれていればOK
KVMの動作確認
# KVMモジュールがロードされているか確認
lsmod | grep kvm
# kvm_intel または kvm_amd が表示されればOK
# libvirtの接続確認
virsh list --all
# 空のリストが表示されればOK(エラーが出なければOK)
作業環境の準備
作業ディレクトリの作成
mkdir ~/miraclelinux-oci
cd ~/miraclelinux-oci
Miracle LinuxのISOファイルのダウンロード
今回は8.10のミニマルインストールイメージをダウンロードします。
# 最新のURLは公式サイトで確認してください
wget https://repo.dist.miraclelinux.net/miraclelinux/8.10-released/isos/x86_64/MIRACLELINUX-8.10-rtm-minimal-x86_64.iso
# ダウンロード確認(約2GBでした)
ls -lh
実行結果:
total 17G
-rw-r--r--. 1 qemu qemu 2.0G Oct 11 2024 MIRACLELINUX-8.10-rtm-minimal-x86_64.iso
仮想ディスク作成
# QCOW2形式で、20GBのディスクイメージを作成
qemu-img create -f qcow2 miraclelinux-oci.qcow2 20G
# 確認(約5.7GBでした)
ls -lh miraclelinux-oci.qcow2
実行結果:
-rw-r--r--. 1 opc libvirt 5.7G Oct 23 07:37 miraclelinux-oci.qcow2
仮想マシンの作成とインストール
virt-installでVMの作成と起動
sudo virt-install \
--name miraclelinux-oci \
--ram 2048 \
--vcpus 2 \
--disk path=$HOME/miraclelinux-oci/miraclelinux-oci.qcow2,format=qcow2 \
--os-variant rhel9.0 \
--network network=default \
--graphics none \
--console pty,target_type=serial \
--location $HOME/miraclelinux-oci/MIRACLELINUX-8.10-rtm-minimal-x86_64.iso \
--extra-args 'console=ttyS0,115200n8 inst.text'
Miracle Linuxのインストール
テキストベースでインストーラが起動します。
マニュアルはこちらを参照してください。対応しているバージョンの「テキストモード」の章を見てインストールしてください。
インストーラーで!マークのついている項目を設定していきます。主に以下の項目を設定します:
- インストール先(ディスクの選択)
- ネットワークの設定
- rootパスワード
- ユーザー作成
設定がすべて終わったら、[b]キーを押してインストールを開始します。
Miracle Linux初期設定
インストールが完了したら、仮想マシンにSSHでログインします。
システムアップデートとcloud-initのインストール
# システムアップデート
dnf update -y
# cloud-init関連パッケージのインストール
dnf install -y cloud-init cloud-utils-growpart
# その他必要な追加パッケージ
dnf install -y tar rsync
cloud-initについて
cloud-initは、クラウド環境でインスタンス起動時の初期化を行うツールです。OCIでは以下の処理に必要です:
- SSHキーの自動設定
- ホスト名の設定
- ネットワーク設定の初期化
- ディスクの自動拡張
- ユーザーの作成と権限設定
cloud-initの有効化と設定
# cloud-initサービスの有効化
systemctl enable cloud-init
systemctl enable cloud-config
systemctl enable cloud-final
systemctl enable cloud-init-local
# cloud-init設定ファイルの編集
vi /etc/cloud/cloud.cfg
以下の内容を確認・追加してください:
# /etc/cloud/cloud.cfg の内容
# データソースの設定
datasource_list: [ NoCloud, ConfigDrive, None ]
# システムの設定
system_info:
distro: rhel
default_user:
name: opc
gecos: OPC User
groups: [wheel, adm, systemd-journal]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
paths:
cloud_dir: /var/lib/cloud/
templates_dir: /etc/cloud/templates/
# クラウド初期化モジュール
cloud_init_modules:
- migrator
- seed_random
- bootcmd
- write-files
- growpart
- resizefs
- disk_setup
- mounts
- set_hostname
- update_hostname
- update_etc_hosts
- ca-certs
- rsyslog
- users-groups
- ssh
cloud_config_modules:
- ssh-import-id
- locale
- set-passwords
- yum-add-repo
- ntp
- timezone
- disable-ec2-metadata
- runcmd
cloud_final_modules:
- package-update-upgrade-install
- scripts-vendor
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- final-message
cloud-init設定ファイルの解説
なぜcloud-initが必要なのか?
OCIでインスタンスを起動すると、以下のような初期化処理が必要になります:
- SSHキーの配置: コンソールで指定したSSHキーをインスタンスに自動配置
- ネットワーク設定: VCN内のIPアドレスやDNS設定を自動構成
- ディスクの拡張: ブートボリュームのサイズに合わせてファイルシステムを自動拡張
- ホスト名の設定: OCIで指定したホスト名を自動設定
-
ユーザー作成: デフォルトユーザー(
opc)の作成と権限設定
cloud-initがないと、これらの設定をすべて手動で行う必要があり、OCIのインスタンスとして正常に動作しません。
設定ファイルの各項目について
datasource_list
- OCIのメタデータサービスからインスタンス情報を取得するための設定
-
NoCloud、ConfigDrive、Noneの順で試行します
system_info
-
distro: RHELベースのディストリビューションであることを指定 -
default_user: デフォルトユーザーopcの設定-
wheelグループに所属させることでsudo権限を付与 - パスワードなしで
sudoを実行可能に設定
-
cloud_init_modules(起動時に最初に実行される)
-
growpart: パーティションのサイズを拡張 -
resizefs: ファイルシステムのサイズを拡張 -
set_hostname/update_hostname: ホスト名の設定 -
ssh: SSHキーの配置
cloud_config_modules(システム設定に関するモジュール)
-
locale: ロケール設定 -
timezone: タイムゾーン設定 -
yum-add-repo: リポジトリの追加
cloud_final_modules(最後に実行される)
-
scripts-user: ユーザースクリプトの実行 -
ssh-authkey-fingerprints: SSH鍵のフィンガープリント表示 -
final-message: 起動完了メッセージの表示
SSHの有効化
# SSHサーバーの有効化
systemctl enable sshd
SSHについて
OCIのインスタンスにリモート接続するために、SSHサーバーを有効にしておく必要があります。OCIコンソールからSSHキーを指定してインスタンスを起動すると、cloud-initがSSHキーを自動設定します。
ファイアウォールの設定
# SSH接続を許可
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
# SSHが許可されていることを確認
firewall-cmd --list-all
ネットワーク設定
# DHCPが有効になっているか確認
nmcli con show
# NetworkManagerの有効化
systemctl enable NetworkManager
イメージのクリーンアップ
カスタムイメージの作成のために、不要なログ・キャッシュ・設定をすべて削除します。
# パッケージキャッシュのクリア
dnf clean all
# ログファイルのクリア
rm -rf /var/log/*
# 一時ファイルの削除
rm -rf /tmp/*
rm -rf /var/tmp/*
# bashヒストリーのクリア
cat /dev/null > ~/.bash_history
history -c
# SSHホストキーの削除(初回起動時に再生成される)
rm -f /etc/ssh/ssh_host_*
# マシンIDのクリア
truncate -s 0 /etc/machine-id
rm -f /var/lib/dbus/machine-id
# 永続的なネットワーク設定を削除
rm -f /etc/udev/rules.d/70-persistent-net.rules
# cloud-initのキャッシュをクリア
cloud-init clean --logs --seed
クリーンアップ完了後にシャットダウンします。
shutdown -h now
イメージの変換とVMDKの作成
Oracle Linuxのホストに戻って、以下の作業を実施します。
# VMが完全に停止していることを確認(miraclelinux-oci が shut off になっていればOK)
sudo virsh list --all
# VMの定義を削除(ディスクイメージは削除されない)
sudo virsh undefine miraclelinux-oci
# 確認(miraclelinux-oci が表示されなければOK)
sudo virsh list --all
# イメージファイルの圧縮
qemu-img convert -O qcow2 -c miraclelinux-oci.qcow2 miraclelinux-oci-compressed.qcow2
# vmdk形式への変換
qemu-img convert -O vmdk miraclelinux-oci-compressed.qcow2 miraclelinux-oci.vmdk
# 確認
ls -lh miraclelinux-oci.vmdk
実行結果:
-rw-r--r--. 1 opc opc 5.6G Oct 23 09:23 miraclelinux-oci.vmdk
カスタムイメージの作成
Object Storageへのアップロード
- Object Storageのバケットを作成
- 作成したバケットに
miraclelinux-oci.vmdkをアップロード
カスタムイメージのインポート
- OCIコンソールで、ハンバーガーメニュー → コンピュート → カスタム・イメージ
- 「イメージのインポート」を選択
- 以下の設定でインポート
| 項目 | 設定値 |
|---|---|
| 名前 | 任意(例: miracle-linux8.10-image) |
| オペレーティング・システム | Generic Linux |
| Object Storage | アップロードしたvmdkファイルを指定 |
| イメージ・タイプ | VMDK |
| 起動モード | 準仮想化モード |
カスタムイメージの作成には10分程度かかります。
Miracle Linuxのインスタンス起動
- Computeインスタンス作成画面を開く
- 「イメージの変更」から「マイ・イメージ」を選択
- 作成したカスタムイメージを選択
- その他の設定(シェイプ、ネットワーク、SSHキーなど)を行い、インスタンスを作成
- インスタンス起動後、SSHでログインして動作確認
まとめ
Miracle LinuxをOCIで動かすための手順を紹介しました。作業時間は約2時間ほどでした。
KVMを使った仮想マシンの作成からカスタムイメージの作成まで、一連の流れを実施することで、OCIでMiracle Linuxを稼働させることができました。
注意事項
- この方法は公式サポート対象外です
- 本番環境での利用は自己責任でお願いします
- セキュリティアップデートやパッチ適用は手動で行う必要があります


