🍱
Azure向けArch Linuxイメージ作成 完全ガイド (v12)
このガイドでは、Macのターミナルで1MBアラインされた仮想ディスクを確実に作成し、その後VirtualBoxのGUIを使ってVMを設定する、安全で分かりやすい方法を解説します。Azureの第1世代VM(BIOSベース)で利用可能な30GB固定のArch Linuxイメージを作成し、cloud-init を使ってプロビジョニングするまでの全手順を網羅します。
ステップ1: コマンドラインによる仮想ディスク作成
最初に、Macのターミナルを使って、1MB境界に完全にアラインされた30GBの固定サイズ仮想ディスク(VDIファイル)を作成します。VM作成時エラーを避けるため、VDIファイルはVM設定ファイルとは別の専用ディレクトリに作成します。
- 保存場所の決定:
VDIファイルを保存するための専用ディレクトリを決めます。ここでは例として、ホームディレクトリ直下に~/VirtualBoxDisks
というディレクトリを使用します。 - ディスク作成コマンドの実行:
以下のコマンドをターミナルで実行します。
# --- 変数を設定します ---
DISK_DIR="$HOME/VirtualBoxDisks"
VDI_NAME="ArchLinuxAzure.vdi"
VDI_PATH="${DISK_DIR}/${VDI_NAME}"
# --- VDIファイルを保存するディレクトリを作成 ---
mkdir -p "${DISK_DIR}"
# --- 1MBアラインされたディスクを作成 ---
# 30GB = 30720MB の固定サイズVDIを作成します。
VBoxManage createmedium disk --filename "${VDI_PATH}" --size 30720 --format VDI --variant Fixed
echo "ディスクを作成しました: ${VDI_PATH}"
ステップ2: GUIによるVirtualBox VMの作成
次に、VirtualBoxのGUIを使い、先ほど作成したディスクを指定してVMをセットアップします。
-
VMの新規作成:
- VirtualBoxを起動し、「新規」ボタンをクリックします。
-
名前: ArchLinuxAzure, フォルダー:
~/VirtualBox VMs/
- タイプ: Linux, バージョン: Arch Linux (64-bit)
- メモリーサイズ: 1024MB 以上
-
ハードディスクの設定:
- すでにある仮想ハードディスクファイルを使用する を選択します。
- フォルダアイコンから、ステップ1で作成したVDIファイル(
~/VirtualBoxDisks/ArchLinuxAzure.vdi
) を選択します。
-
VM設定の最終調整:
- 作成されたVMを選択し、「設定」を開きます。
- システム: EFIを有効化のチェックが外れていることを確認します。
- ストレージ: IDEコントローラーにArch LinuxのインストールISOを割り当てます。
- ネットワーク: ブリッジアダプターを選択します。
ステップ3: Arch Linuxのインストール
-
VMを起動し、ISOからブートします。
loadkeys jp106
-
パーティショニング:
cfdisk /dev/sda
(dosラベル, 起動可能フラグ) -
フォーマット:
mkfs.ext4 /dev/sda1
-
マウント:
mount /dev/sda1 /mnt
- ベースシステムのインストール:
pacstrap /mnt base linux linux-firmware nano openssh python python-setuptools python-distro git parted net-tools cloud-init grub
ステップ4: chroot環境でのシステム設定
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
-
タイムゾーン:
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime, hwclock \--systohc
-
ロケール:
/etc/locale.gen
でen_US.UTF-8
を有効化しlocale-gen
。/etc/locale.conf
にLANG=en_US.UTF-8
を設定。 -
ホスト名:
echo "archlinux" > /etc/hostname
-
mkinitcpio:
/etc/mkinitcpio.conf
のMODULES
に(hv_vmbus hv_storvsc hv_netvsc)
を追加し、mkinitcpio -P
を実行。 -
rootパスワード:
passwd
で一時的なパスワードを設定。 -
GRUBブートローダー:
/etc/default/grub
を編集し、Azure用のカーネルパラメータを追加します。
GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=300 console=ttyS0 earlyprintk=ttyS0"
その後、GRUBをインストールし、設定ファイルを生成します。
grub-install --target=i386-pc /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
ステップ5: ネットワークとSSHの設定
- systemd-networkd: /etc/systemd/network/20-wired.network を作成。
[Match]
Name=en*
[Network]
DHCP=yes
- サービスの有効化:
systemctl enable systemd-networkd
systemctl enable systemd-resolved
systemctl enable sshd
-
resolv.conf:
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
ステップ6: WALinuxAgentのインストールと設定
- ソースからインストール:
cd /usr/local/src
git clone https://github.com/Azure/WALinuxAgent.git
cd WALinuxAgent
python setup.py install --register-service
- /etc/waagent.conf の設定:
Provisioning.Agent=cloud-init
ResourceDisk.Format=n
ResourceDisk.EnableSwap=n
-
waagentサービスの有効化:
systemctl enable waagent.service
ステップ7: cloud-initの最適化と一般化の準備
Azure専用イメージとしてデータソースを限定します。この段階ではまだcloud-initサービスを有効化しません。
-
データソースをAzureに限定:
nano /etc/cloud/cloud.cfg
を実行し、ファイルの末尾に以下を追記(または既存の設定を上書き)します。
datasource_list: [ Azure ]
- chrootを抜けてシャットダウン:
exit
umount -R /mnt
shutdown now
- ISOイメージの取り外し: VM設定からインストールISOを必ず取り外してください。
ステップ8: 一般化のための特殊起動と最終設定
このステップでは、ttyS0とcloud-initのハング問題を回避してログインし、イメージを最終化します。
-
VMを起動し、GRUBメニューで待機:
- VMを起動し、すぐにShiftキーを押し続けてGRUBのブートメニューを表示させます。
-
ブートパラメータを一時的に編集:
- Arch Linux が選択されている状態で、キーボードの e キーを押します。
- linux /boot/vmlinuz-linux ... で始まる行を探し、console=ttyS0 earlyprintk=ttyS0 の部分を削除します。
- 編集が終わったら、Ctrl + x または F10 キーを押して起動します。
-
ログインと最終設定の実行:
- これで画面にログインプロンプトが表示されます。設定したrootパスワードでログインします。
- 以下のコマンドを順番に実行し、一般化と最終設定を完了します。
# 1. VM固有の情報をクリーンアップ
cloud-init clean --logs --seed
# 2. Azureでの初回起動に必要なcloud-initサービスを有効化
systemctl enable cloud-init-main.service cloud-final.service
# 3. コマンド履歴を削除し、VMを完全にシャットダウン
history -c
shutdown -h now
注意: /etc/default/grub
を再編集する必要はありません。永続的な設定は既にステップ4で完了しているためです。今回の一時的な編集は、この起動セッションにのみ影響します。
- 警告: このVMは二度と起動しないでください。起動すると再び固有情報が生成され、一般化が無効になります。
ステップ9: VDIからVHDへの変換とAzureへのアップロード
- VDIからVHDへの変換: Macのターミナルで実行します。
VBoxManage clonemedium disk "$HOME/VirtualBoxDisks/ArchLinuxAzure.vdi" "$HOME/VirtualBoxDisks/ArchLinuxAzure.vhd" \--format VHD
Discussion