モチベーション¶
深い考えがあって、やったわけではなくて単に RHEL8 Betaがリリースされたので、ちょっと試してみたかった。
でも適当な機械がなかったのと、最近自分の PC にローカルの仮想環境を作るのが億劫なので、AWS上にインストールしてみることにした。
イメージの所在など¶
Red Hat のサイトに行って、デベロッパー登録するとイメージをダウンロードできるようになる。
まあ、この辺りを見ながら適当にポチポチしてたら、ダウンロードできた。
https://developers.redhat.com/rhel8/getrhel8/
VM Import を試みたが.....¶
一からイメージを作るのは面倒なので、カスタマーポータルをウロウロしていたら KVM のイメージを見つけたので、これを VM Import すればいいかなと思って、マニュアルを見ながらポチポチしてみたら、以下のエラーが出て失敗してしまった。
1 |
<span></span><span class="s2">"StatusMessage"</span>: <span class="s2">"ClientError: Unable to determine kernel version."</span> |
イメージの作り方なのか、 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 コマンドを使用した。
まずはコマンドのインストール
1 |
<span></span>$ sudo yum install -y qemu-img |
そして変換 qcow2 から raw イメージに変換
1 |
<span></span>$ qemu-img convert -O raw rhel-8.0-beta-1-x86_64-kvm.qcow2 rhel-8.0-beta-1-x86_64-kvm.raw |
変換後の確認。
1 2 3 4 5 |
<span></span>$ qemu-img info rhel-8.0-beta-1-x86_64-kvm.raw image: rhel-8.0-beta-1-x86_64-kvm.raw file format: raw virtual size: 10G <span class="o">(</span><span class="m">10737418240</span> bytes<span class="o">)</span> disk size: 10G |
無事に変換できた。サイズが 10GB なので、EBS を 10 GB 確保してインスタンスにアタッチする。アタッチしたディスクに dd コマンドでイメージをべた書きする。
1 2 3 4 |
<span></span>sudo dd <span class="k">if</span><span class="o">=</span>rhel-8.0-beta-1-x86_64-kvm.raw <span class="nv">of</span><span class="o">=</span>/dev/nvme1n1 <span class="nv">bs</span><span class="o">=</span><span class="m">4096</span> <span class="p">&</span> <span class="m">2621440</span>+0 records in2621440+0 records out10737418240 bytes <span class="o">(</span><span class="m">11</span> GB<span class="o">)</span> copied, <span class="m">80</span>.9751 s, <span class="m">133</span> MB/s |
bs オプションで書き込みのブロックサイズをある程度大きくしておかないと、異常に時間がかかるので注意が必要だ。
書き込みができたので、パーティションの構成を確認しておく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span></span>$ sudo parted /dev/nvme1n1 GNU Parted <span class="m">3</span>.1 Using /dev/nvme1n1 Welcome to GNU Parted! Type <span class="s1">'help'</span> to view a list of commands. <span class="o">(</span>parted<span class="o">)</span> print Model: NVMe Device <span class="o">(</span>nvme<span class="o">)</span> Disk /dev/nvme1n1: <span class="m">10</span>.7GB Sector size <span class="o">(</span>logical/physical<span class="o">)</span>: 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags <span class="m">1</span> 1049kB 1075MB 1074MB primary xfs boot <span class="m">2</span> 1075MB 2149MB 1074MB primary linux-swap<span class="o">(</span>v1<span class="o">)</span> <span class="m">3</span> 2149MB <span class="m">10</span>.7GB 8589MB primary xfs |
boot、swap、root という割と標準的な感じの構成。
マウントする。ここではカレントディレクトリに tmp というディレクトリを作成して、そこにマウントした。
1 2 3 4 5 6 |
<span></span>$ sudo mount /dev/nvme1n1p3 ./tmp $ sudo mount /dev/nvme1n1p1 ./tmp/boot $ sudo mount -o rbind /sys ./tmp/sys $ sudo mount -o rbind /dev ./tmp/dev $ sudo mount -t proc none ./tmp/proc |
sys,dev,proc もマウントしておくのがポイント。それで chroot する。
1 |
<span></span>$ sudo chroot ./tmp |
基本的には初期 RAM にディスクドライバが入っていれば起動するはずなので、初期 RAM の再作成を行う。
1 |
<span></span><span class="c1"># dracut -f --kver 4.18.0-32.el8.x86_64</span> |
少し待つと初期 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
1 2 3 4 5 6 7 8 9 10 11 |
<span></span><span class="p">[</span> <span class="p">{</span> <span class="nt">"DeviceName"</span><span class="p">:</span> <span class="s2">"/dev/sda1"</span><span class="p">,</span> <span class="nt">"Ebs"</span><span class="p">:</span> <span class="p">{</span> <span class="nt">"DeleteOnTermination"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nt">"SnapshotId"</span><span class="p">:</span> <span class="s2">"snap-xxxxxxxxxxxxxxxxx"</span><span class="p">,</span> <span class="nt">"VolumeSize"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="nt">"VolumeType"</span><span class="p">:</span> <span class="s2">"gp2"</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]</span> |
それで以下のコマンドラインで、AMI を作成。
1 2 3 4 5 6 7 |
<span></span>$ aws ec2 register-image <span class="se">\</span> --architecture x86_64 <span class="se">\</span> --block-device-mapping file://devicemap.json <span class="se">\</span> --ena-support <span class="se">\</span> --name <span class="s2">"RHEL8 Try1"</span> <span class="se">\</span> --root-device-name /dev/sda1 <span class="se">\</span> --virtualization-type hvm |
ポイントは "--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 作成。インスタンスを起動してみると無事、ログインに成功やったね。
悲報 その 2¶
composer というツールを使うと簡単にイメージが作れるらしい。機会があったら試してみる。
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8-beta/html/installing_and_deploying_rhel/building-custom-system-images-with-composer_graphical-installation
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?