2019年7月現在CentOS 6.4をEC2で新規に使おうとしたら意外と大変だった。

はじめに

CentOS 6.4をEC2に新規インストールしたかったのですが、AWS Marketplaceに存在しませんでした。
そこで自分でAMIイメージを作ったのですが、苦労したのでメモ。

作業前に決めておくこと

HVM AMIs (GRUB)を作成するか、Paravirtual AMIs (PV-GRUB)を作成するか

両者の解説は、User Provided Kernels - Amazon Elastic Compute Cloud に記載されています。
主な違いは以下の通りです。

種類 作成したAMIを起動できるインスタンスタイプ AMI構築時のポイント
HVM AMIs (GRUB) 現行世代のインスタンスと旧世代のインスタンスタイプ(全部の旧世代で起動するかは不明)。 Partition Tableの設定が必要(parted等のコマンドで設定する)。
Paravirtual AMIs (PV-GRUB) t1等旧世代のインスタンスタイプのみ。*1 Partition Tableを設定しなくていい。
私は今回HVM AMIs (GRUB)を使うことにしました。

作業前に知っておくべきこと

ISOイメージからOSを(多分)起動できないという事実

結構調べたんですが、方法がさっぱり分からず。
私はISOイメージを使わずにセットアップしました。

どこのサイトでCentOS 6.4を配布しているのか

「何を当たり前な」と思うかと思いますが、古いディストリビューションミラーサイトではもう配布していないことがあります。
日本のミラーでは、もう、CentOS 6.4は配布していませんでした。
私はhttp://vault.centos.org/から入手しました。

インストール方法を解説したサイト

種類 サイト
HVM AMIs (GRUB) EC2でCentOS6のEBS-Backed HVM方式 AMIをゼロから作る - Qiita
Paravirtual AMIs (PV-GRUB) EC2でCentOS6のEBS-Backed AMIをゼロから作る - SEEDS Creator's Blog *2

今回私は、EC2でCentOS6のEBS-Backed HVM方式 AMIをゼロから作る - Qiita のサイトを参考に作成しました。

インストール方法を解説したサイト(EC2でCentOS6のEBS-Backed HVM方式 AMIをゼロから作る - Qiita)に対する補足

前述のサイトを見ながら作業していく中で、気づいた点があったので、僭越なのは承知なのですがメモしていきます。

OSはCentOS 6.xでも良い

作業用インスタンスを作成」ではAmazon Linux 64bitを使っていますが、私はCentOS 6.10にしました。
特別な根拠はないのですが、まあ、バージョンが近いOSの方で作業した方が良いかと思っての、験担ぎ的判断です。
ただし、途中で使うツールが時々インストールされていないので、適宜yum installでインストールする必要がありました。

EBSのパーティション作成。フォーマット。マウント」のデバイスの名前(/dev/xvdf)について

当然なのですが、AWSコンソール上から/dev/sdf以外でマウントした場合は別の名前になります。
lsblk*3コマンドを使用して、自分の環境ではどういう名前になっているか確認してから作業します。

私が作業したインスタンスではlsblkは以下の結果になりました。

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdb    202:16   0  30G  0 disk
└─xvdb1 202:17   0  30G  0 part

ですので、私の環境ではdev/xvdbを使用することになります。

EBSのパーティション作成。フォーマット。マウント」のフォーマットで指定するデバイス名は末尾に1がついている方

ちゃんと記事を読めば失敗しないのですが、デバイス名は末尾に1がついている方を使用してください。
私の場合は以下の通りですね。

mkfs.ext4 /dev/xvdb1

うっかり、末尾に1がついてない方を指定してもコマンドは成功してしまうのですが、Partition Tableが変になってしまい、grubの設定ではまります。

間違った場合、parted -lで確認した際にloopというみたことないPartition Tableになります。
以下に間違った場合の例を示します。

# parted -l
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvda: 8590MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  8590MB  8589MB  primary  ext4         boot


Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  32.2GB  32.2GB  ext4

インストール用の yum.conf を作成で前提としているrikenさんのmirrorが無い

http://vault.centos.org/のみでどうにかします。

鍵のダウンロード

cd /mnt
wget -O ../RPM-GPG-KEY-CentOS-6 http://vault.centos.org/6.4/os/x86_64/RPM-GPG-KEY-CentOS-6

repos.confの作成の内容は以下のようにします。

vi ../repos.conf
[ami-base]
name=CentOS-6 - Base
mirrorlist=file://${PWD}/../mirrorlist.centos
gpgcheck=1
gpgkey=file://${PWD}/../RPM-GPG-KEY-CentOS-6

[ami-updates]
name=CentOS-6 - Updates
mirrorlist=file://${PWD}/../mirrorlist.centos.updates
gpgcheck=1
gpgkey=file://${PWD}/../RPM-GPG-KEY-CentOS-6||<

repos.confから参照するmirrorlist.centosは以下のように作成します。

vi ../mirrorlist.centos
http://vault.centos.org/6.4/os/x86_64/

repos.confから参照するmirrorlist.centos.updatesは以下のように作成します。

vi ../mirrorlist.centos.updates
http://vault.centos.org/6.4/updates/x86_64/

あとは記事通りでOK

うっかり手順を飛ばさないように気を付けて行いましょう。

さいごに

こうやって整理して書くと大半は参考記事通りなんですが、HVM AMIs (GRUB)とParavirtual AMIs (PV-GRUB)の違いをちゃんと理解しておらず、やたら時間が掛りました。
Paravirtual AMIs (PV-GRUB)の手順で途中までやって、「あれ。なんか使いたいインスタンスタイプで起動できない??」となって、あーだこーだして時間を浪費する結果に。

*1:これが実は結構な制約で、東京リージョンの場合、GUIから選べるインスタンスがあんまり無いです。Linux AMI 仮想化タイプ - Amazon Elastic Compute Cloudに載っているものは選べてよさそうなんですが、実際に選べるのはもっと少ないという。

*2:明確にはParavirtual AMIs (PV-GRUB)と記載されていないのですが、「作成したEBSをAMI化する」のところでHVM AMIs (GRUB)作成時には選べないカーネルを選択しているので、区別がつきます。

*3:Linux で Amazon EBS ボリュームを使用できるようにする - Amazon Elastic Compute Cloud