🍱

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設定ファイルとは別の専用ディレクトリに作成します。

  1. 保存場所の決定:
    VDIファイルを保存するための専用ディレクトリを決めます。ここでは例として、ホームディレクトリ直下に ~/VirtualBoxDisks というディレクトリを使用します。
  2. ディスク作成コマンドの実行:
    以下のコマンドをターミナルで実行します。
# --- 変数を設定します ---  
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をセットアップします。

  1. VMの新規作成:
    • VirtualBoxを起動し、「新規」ボタンをクリックします。
    • 名前: ArchLinuxAzure, フォルダー: ~/VirtualBox VMs/
    • タイプ: Linux, バージョン: Arch Linux (64-bit)
    • メモリーサイズ: 1024MB 以上
  2. ハードディスクの設定:
    • すでにある仮想ハードディスクファイルを使用する を選択します。
    • フォルダアイコンから、ステップ1で作成したVDIファイル(~/VirtualBoxDisks/ArchLinuxAzure.vdi) を選択します。
  3. VM設定の最終調整:
    • 作成されたVMを選択し、「設定」を開きます。
    • システム: EFIを有効化のチェックが外れていることを確認します。
    • ストレージ: IDEコントローラーにArch LinuxのインストールISOを割り当てます。
    • ネットワーク: ブリッジアダプターを選択します。

ステップ3: Arch Linuxのインストール

  1. VMを起動し、ISOからブートします。 loadkeys jp106
  2. パーティショニング: cfdisk /dev/sda (dosラベル, 起動可能フラグ)
  3. フォーマット: mkfs.ext4 /dev/sda1
  4. マウント: mount /dev/sda1 /mnt
  5. ベースシステムのインストール:
pacstrap /mnt base linux linux-firmware nano openssh python python-setuptools python-distro git parted net-tools cloud-init grub

ステップ4: chroot環境でのシステム設定

  1. genfstab -U /mnt >> /mnt/etc/fstab
  2. arch-chroot /mnt
  3. タイムゾーン: ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime, hwclock \--systohc
  4. ロケール: /etc/locale.genen_US.UTF-8 を有効化し locale-gen/etc/locale.confLANG=en_US.UTF-8 を設定。
  5. ホスト名: echo "archlinux" > /etc/hostname
  6. mkinitcpio: /etc/mkinitcpio.confMODULES(hv_vmbus hv_storvsc hv_netvsc) を追加し、mkinitcpio -P を実行。
  7. rootパスワード: passwd で一時的なパスワードを設定。
  8. 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の設定

  1. systemd-networkd: /etc/systemd/network/20-wired.network を作成。
[Match]
Name=en*

[Network]
DHCP=yes
  1. サービスの有効化:
systemctl enable systemd-networkd  
systemctl enable systemd-resolved  
systemctl enable sshd
  1. resolv.conf: ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

ステップ6: WALinuxAgentのインストールと設定

  1. ソースからインストール:
cd /usr/local/src  
git clone https://github.com/Azure/WALinuxAgent.git
cd WALinuxAgent
python setup.py install --register-service
  1. /etc/waagent.conf の設定:
Provisioning.Agent=cloud-init  
ResourceDisk.Format=n  
ResourceDisk.EnableSwap=n
  1. waagentサービスの有効化: systemctl enable waagent.service

ステップ7: cloud-initの最適化と一般化の準備

Azure専用イメージとしてデータソースを限定します。この段階ではまだcloud-initサービスを有効化しません。

  1. データソースをAzureに限定: nano /etc/cloud/cloud.cfg を実行し、ファイルの末尾に以下を追記(または既存の設定を上書き)します。
datasource_list: [ Azure ]
  1. chrootを抜けてシャットダウン:
exit  
umount -R /mnt  
shutdown now
  1. ISOイメージの取り外し: VM設定からインストールISOを必ず取り外してください。

ステップ8: 一般化のための特殊起動と最終設定

このステップでは、ttyS0とcloud-initのハング問題を回避してログインし、イメージを最終化します。

  1. VMを起動し、GRUBメニューで待機:
    • VMを起動し、すぐにShiftキーを押し続けてGRUBのブートメニューを表示させます。
  2. ブートパラメータを一時的に編集:
    • Arch Linux が選択されている状態で、キーボードの e キーを押します。
    • linux /boot/vmlinuz-linux ... で始まる行を探し、console=ttyS0 earlyprintk=ttyS0 の部分を削除します。
    • 編集が終わったら、Ctrl + x または F10 キーを押して起動します。
  3. ログインと最終設定の実行:
    • これで画面にログインプロンプトが表示されます。設定した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で完了しているためです。今回の一時的な編集は、この起動セッションにのみ影響します。

  1. 警告: このVMは二度と起動しないでください。起動すると再び固有情報が生成され、一般化が無効になります。

ステップ9: VDIからVHDへの変換とAzureへのアップロード

  1. VDIからVHDへの変換: Macのターミナルで実行します。
VBoxManage clonemedium disk "$HOME/VirtualBoxDisks/ArchLinuxAzure.vdi" "$HOME/VirtualBoxDisks/ArchLinuxAzure.vhd" \--format VHD

Discussion