RHEL8 Beta AMI を作ってみた

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

モチベーション

深い考えがあって、やったわけではなくて単に RHEL8 Betaがリリースされたので、ちょっと試してみたかった。
でも適当な機械がなかったのと、最近自分の PC にローカルの仮想環境を作るのが億劫なので、AWS上にインストールしてみることにした。

イメージの所在など

Red Hat のサイトに行って、デベロッパー登録するとイメージをダウンロードできるようになる。
まあ、この辺りを見ながら適当にポチポチしてたら、ダウンロードできた。
https://developers.redhat.com/rhel8/getrhel8/

VM Import を試みたが.....

一からイメージを作るのは面倒なので、カスタマーポータルをウロウロしていたら KVM のイメージを見つけたので、これを VM Import すればいいかなと思って、マニュアルを見ながらポチポチしてみたら、以下のエラーが出て失敗してしまった。

イメージの作り方なのか、 VM Import がまだ対応していないのか知らないが、単純にはいかないようだ。

しょうがないので手動で作る。

適当に EBS を確保して、手動で RPM パッケージを展開してもいいんだけど、それだとめんどくさいので KVM用のイメージをEBSに書き込んでみることにした。
適当に Amazon Linux 2 のインスタンスを起動して、カスタマーポータルからダウンロードした qcow2 イメージを転送する。後で使いまわしやすいように S3 にアップロードしてEC2 インスタンスでダウンロードした。
ちなみにインスタンスサイズは、m5.large。せっかくなのでNITRO 世代を利用した。
最初に、WEB のコンソールからアップロードしようとしたら、200KB/s 位しか速度がでない。イメージサイズが結構あるので、シャレにならないので、CLI からアップロードすることにした。
10倍速い。 ということで S3 は CLI がおすすめです。
さて、qcow2 のままだと EBS に書いても起動しないのでraw イメージに展開する。展開するには qemu-img コマンドを使用した。
まずはコマンドのインストール

そして変換 qcow2 から raw イメージに変換

変換後の確認。

無事に変換できた。サイズが 10GB なので、EBS を 10 GB 確保してインスタンスにアタッチする。アタッチしたディスクに dd コマンドでイメージをべた書きする。

bs オプションで書き込みのブロックサイズをある程度大きくしておかないと、異常に時間がかかるので注意が必要だ。
書き込みができたので、パーティションの構成を確認しておく。

boot、swap、root という割と標準的な感じの構成。
マウントする。ここではカレントディレクトリに tmp というディレクトリを作成して、そこにマウントした。

sys,dev,proc もマウントしておくのがポイント。それで chroot する。

基本的には初期 RAM にディスクドライバが入っていれば起動するはずなので、初期 RAM の再作成を行う。

少し待つと初期 RAM が更新される。 lsinitrd コマンドなどで、nvme ドライバが取り込まれていることを確認する。

そして AMI 化 だがしかし

とりあえず exit で、chroot を抜けて 1 回 os をリブートする。 mount コマンドを rbind 付きで実行しているので、再帰的にいろいろマウントされていて、umount をするのが異常にめんどくさい。
リブートするとマウントが解除されるので、先ほど書き込んだEBS のスナップショットを作成する。ここはマネジメントコンソールから簡単にできる。そして snapshot から AMI を作成。で AMI から起動を試みた。
がしかし、m5 とか NITRO 世代のインスタンスが選択できない!
でいろいろ ググってみると、AMI 作成時に ENA サポートを有効にしないといけないらしい。で ENA サポートを有効にするには、現状 CLI で作成しないといけない。
まず EBS デバイスマップを書いた json ファイルを作成する。ここでは単純に devicemap.json というファイルを以下の内容で作成した。 SnapshotId は先ほど作成した snapshot のID

それで以下のコマンドラインで、AMI を作成。

ポイントは "--ena-support" オプション。環境によっては "--region" オプションが必要になる。適宜追加してほしい。
これで NITRO 世代も選択できるようになった。

起動はできたけれど.....

それで、早速 M5.large で起動。 Get System log で、起動ログを見ていると、ちゃんと起動しているように見える。
が、ssh でログインできない。しょうがないので、一旦インスタンスをストップにして、EBS をプチっと取り外して作業用のインスタンスにアタッチして、ログをよく見てみる。
sshd が キーのパーミッションがよろしくないので起動できないというメッセージが出ている。でそのちょっと上にキーのグループの設定に失敗しているログも出ていた。
selinux で deny しているログも見つけたので、おそらくselinux を permissive に設定すればよさそう。
それで、元のディスクを再びマウントして /etc/selinux/config ファイルのSELINUX=enforcing の行を SELINUX=permissive に変更した。

(変更前)
SELINUX=enforcing
(変更後)
SELINUX=permissive

これで再び、snapshot からの AMI 作成。インスタンスを起動してみると無事、ログインに成功やったね。

悲報 その 1

もうすでに Red Hat 公式の RHEL8 Beta AMI があった。

投稿者プロフィール

スカイブロガー

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.