いままでサーバー用は CentOS 一択だったのですが、CentOS が方針転換をしてから状況が一変しました。
現在メインで使っている CentOS 7 のサポート期限が見えてきたので、そろそろ次に使う OS を検証していく必要があります。
ContOS の後継として Rocky Linux や AlmaLinux が候補に挙がりますが、本家の RHEL が本番環境でも無償で利用可能になったので、今回は ConoHa の VPS に RHEL9 をインストールしてみようと思います。
RHEL9 のダウンロード
Red Hat Enterprise Linux は、個人開発者向けの Red Hat Developer Subscription を取得することで、無償利用することができます。2020年に利用規約の改正があり、開発環境だけでなく本番環境であっても、最大16台までRHELを使えるようになりました。
Red Hat Developer Program にアカウントを登録
Red Hat アカウントを持っていない方は、https://developers.redhat.com/register にアクセスして、アカウントを作成します。
ISO のダウンロード
無事アカウントが登録できたら、https://developers.redhat.com/products/rhel/download/ から RHEL9 の ISO をダウンロードしてください。
※今回は「rhel-baseos-9.0-x86_64-dvd.iso」がダウンロードされました。
ConoHa で仮サーバーを作成
RHEL の最小システム要件を満たす 1.5GB 以上のプランで VPS を作成します。
ダウンロードした RHEL9 の ISO を使ってサーバーを作成したいのですが、先にサーバー作らないと、ISO をマウントすることができません。
仕方がないのでリストにある OS で仮サーバーを作成してから ISO をマウントし、RHEL9 を上書きインストールします。
OS はどれを選んでも大丈夫ですが、メモリや CPU はこの段階で決めておいてください。
今回は 2GB のプランで、OS は RHEL のクローンである AlmaLinux 9.0 を選択しました。
仮サーバーの設定
ConoHa には、さくらの VPS とは違って直接 ISO をアップロードする機能がなく、API を使って指定した URL から ISO をダウンロードすることで取り込みます。
ところが Red Hat Enterprise Linux 公式のダウンロードリンクはログインが必要なため、API から直接読み込むことができません。
そこで仮サーバー(先ほど作成した VPS)に Apache をインストールし、ISO ファイルをアップロードすることで、API から読み込めるようにします。
Apache の設定
仮サーバーに Apache をインストールします。
ディレクトリのインデックスを表示する必要があるので、ウェルカムページを表示するための設定ファイルを削除します。
また、ファイヤーウォールで http 通信を許可するようにしてください。
1 2 3 4 5 6 7 | # cat /etc/redhat-release ← OS のバージョン確認 AlmaLinux release 9.0 (Emerald Puma) # dnf install httpd -y ← apache のインストール # rm /etc/httpd/conf.d/welcome.conf -y ← インデックス表示をできるように # systemctl start httpd ← apache を起動 # firewall-cmd --zone=public --add-service=http ← ファイヤーウォールで http を許可 |
Apache のルートディレクトリに ISO をアップロードする
Apache のルートディレクトリ(/var/www/html)に ISO ファイルを転送します。
手段は何でも良いですが、SCP を使うのが最も簡単だと思います。
Tera Term の場合は、ISO ファイルを黒い画面にドラッグ & ドロップすれば図のようなウインドウが表示されますので、SCP で送信先を指定すれば OK です。
ブラウザーで「http://仮サーバーのIPアドレス」にアクセスして、下のように表示されれば仮サーバーの設定は完了です。
ConoHa API を使って ISO を読み込む
ここから先は ConoHa API を使って ISO を取り込むための作業になります。
公式のサポートページでは conoha-iso というツールを使った解説になっていますが、API に対する理解度を深めるために今回は cURL を使って設定していきます。
cURL コマンドは Linux や Mac はターミナルから、Windows 10(1803以降)でもコマンドプロンプトから実行できます。ただし Windows 10 の cURL はシングルクオーテーションに挙動の違いがあるため、コマンドプロンプト用の表記も併記しておきます。
API ユーザーを追加
ConoHa コントロールパネルから API のタブを開き、API ユーザーを追加します。
パスワードを設定するだけで、ユーザー名は自動的に割り当てられます。
※テナント ID と、エンドポイント URL(特に「tyo2」の部分)も確認しておきましょう。
ConoHa API でトークンを取得
まずは、この先の操作で必要になるトークンを取得します。
ターミナルかコマンドプロンプトを開き、cURL コマンドで API を叩きましょう。
1 2 3 4 | curl -i -X POST \ -H "Accept: application/json" \ -d '{"auth":{"passwordCredentials":{"username":"APIユーザ名","password":"APIパスワード"},"tenantId":"テナントID"}}' \ https://identity.tyo2.conoha.io/v2.0/tokens |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | HTTP/1.1 200 OK Date: Thu, 16 Jun 2022 07:34:49 GMT Server: Apache Content-Length: 2346 Content-Type: application/json { "access":{ "token":{ "issued_at":"2022-06-16T07:34:50.084255", "expires":"2022-06-17T07:34:50Z", "id":"トークン", "tenant":{ "domain_id":"xxx", "description":"v2", "enabled":true, "id":"テナントID", "name":"テナント名" }, "audit_ids":["xxxxxxxxxxxxxxxxxxxxxx"] }, "serviceCatalog":[ (以下略) |
ずらずら表示されますが、access ⇒ token ⇒ id の値がトークンになります。
※トークンには期限(expires)がありますので、切れたら新しいトークンを取得する必要があります。
ConoHa API で ISO ダウンロード
先ほど取得したトークンを使用して、ダウンロードリクエストを送信します。
1 2 3 4 5 | curl -i -X POST -H 'Content-Type: application/json' \ -H "Accept: application/json" \ -H "X-Auth-Token: トークン" \ -d '{"iso-image":{"url":"http://仮サーバーのIPアドレス/rhel-baseos-9.0-x86_64-dvd.iso"}}' \ https://compute.tyo2.conoha.io/v2/テナントID/iso-images |
ダウンロードリクエストを送信
1 2 3 4 5 6 7 8 9 10 11 12 | HTTP/1.1 201 Created Date: Thu, 16 Jun 2022 07:39:30 GMT Server: Apache Content-Length: 134 Content-Type: application/json { "request":{ "iso-image":{"url":"http://仮サーバーのIPアドレス/rhel-baseos-9.0-x86_64-dvd.iso"} }, "user":"テナントID" } |
途中経過は表示されませんので、暫く待ちます。
ISO ダウンロード確認
1 2 3 4 5 | curl -i -X GET \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -H "X-Auth-Token: トークン" \ https://compute.tyo2.conoha.io/v2/テナントID/iso-images |
完了した場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | HTTP/1.1 200 OK Date: Fri, 17 Jun 2022 07:26:19 GMT Server: Apache Content-Length: 270 Content-Type: application/json { "iso-images":[ { "ctime":"Tue Jun 14 02:01:07 2022", "name":"rhel-baseos-9.0-x86_64-dvd.iso", "path":"/mnt/isos/repos/tenant_iso_data/テナントID/rhel-baseos-9.0-x86_64-dvd.iso", "size":8579448832, "url":"http://仮サーバーのIPアドレス/rhel-baseos-9.0-x86_64-dvd.iso" } ] } |
今回のファイルは約 8GB でしたが、1 時間程度放置して確認したら完了していました。
完了していない場合
1 2 3 4 5 6 7 | HTTP/1.1 200 OK Date: Thu, 16 Jun 2022 09:04:00 GMT Server: Apache Content-Length: 17 Content-Type: application/json {"iso-images":[]} |
数時間経っても結果が空の場合は失敗と見なして、再度コマンドを実行するか、ISO をアップしたサーバーの設定を見直してみてください。
いつまでたっても完了しない場合
ConoHa API の仕様上、http(ftp)接続で Directory Index が表示されるサーバーに ISO をアップロードする必要があるようです。
https(ftps)ではエラーを返すこともなく、ひっそりと失敗しているので気づきません。
上記の手順通り進めてきた場合は大丈夫だと思いますが、既に運用中のサーバーを使って ISO をダウンロードしようとするとハマる可能性があります。私も下記の記事を見つけるまで数日単位で無駄にしましたのでご注意ください。
サーバー ID を取得
ここまで来たら、あと少しです。
次のステップでサーバーに ISO をマウントするのですが、その際にサーバー ID が必要になります。
ConoHa コントロールパネルの「VPS 設定」から UUID を参照するか、下記のコマンドでサーバー ID を取得してください。
1 2 3 4 | curl -i -X GET \ -H "Accept: application/json" \ -H "X-Auth-Token: トークン" \ https://compute.tyo2.conoha.io/v2/テナントID/servers |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | HTTP/1.1 200 OK Date: Mon, 20 Jun 2022 08:07:35 GMT Server: Apache Content-Length: 717 Content-Type: application/json { "servers":[ { "id":"サーバーID", "links":[ {"href":"https://compute.tyo2.conoha.io/v2/テナントID/servers/サーバーID","rel":"self"}, {"href":"https://compute.tyo2.conoha.io/テナントID/servers/サーバーID","rel":"bookmark"} ], "name":"IPアドレス" } ... ] } |
※複数のサーバーを管理している場合、サーバー ID は、IP アドレスから判断してください。
ISO をマウントする
サーバーが起動した状態だとマウントに失敗するので、仮サーバーをシャットダウンしてください。
※仮サーバー上で cURL を実行していた場合は、ここから先は別端末で作業を行う必要があります。
1 2 3 4 5 | curl -i -X POST \ -H "Accept: application/json" \ -H "X-Auth-Token: トークン" \ -d '{"mountImage": "/mnt/isos/repos/tenant_iso_data/テナントID/rhel-baseos-9.0-x86_64-dvd.iso"}' \ https://compute.tyo2.conoha.io/v2/テナントID/servers/サーバーID/action |
1 2 3 4 5 | HTTP/1.1 204 No Content Date: Mon, 20 Jun 2022 08:20:14 GMT Server: Apache Content-Length: 0 Content-Type: application/json |
RHEL9 をインストール
ConoHa コントロールパネルのサーバーから仮サーバーを起動し、コンソールを開いてください。
ISO がマウントされているので、Red Hat Enterprise Linux 9 の画面が表示されます。
いよいよ RHEL9 のインストールを進めていきます。
Red Hat に接続
RHEL はサブスクリプション絡みが面倒なイメージがありますので、まず最初に済ましてしまいましょう。
インストールメニューのソフトウェアの項目から「Red Hat に接続」を開いてください。
Red Hat アカウントに登録したユーザー名(メールアドレスではない)とパスワードを入力してください。
無事に登録されました。
パーティションの設定
次に、パーティションの設定を行います。
インストールメニューのシステムの項目から「インストール先」を選択してください。
ストレージの設定を自動構成にしたまま「完了」を押すと
インストールオプションが表示されます。
仮でインストールした AlmaLinux 9.0 のパーティション情報が残っていますので、すべて削除します。
すると「領域の再利用」ボタンが押せるようになりました。
インストール完了
他の項目は特に迷うところは無いと思います。
インストールを開始
システムの再起動をしますが、ISO がマウントされたままなので、インストール用のブートメニューが表示されます。
VPS を停止
ConoHa コントロールパネルから RHEL9 をインストールしたサーバーをシャットダウンします。
ISO のアンマウント
RHEL9 のインストールが完了したので、インストーラーの ISO をアンマウントします。
1 2 3 4 5 | curl -i -X POST \ -H "Accept: application/json" \ -H "X-Auth-Token: トークン" \ -d '{"unmountImage": ""}' \ https://compute.tyo2.conoha.io/v2/テナントID/servers/サーバーID/action |
1 2 3 4 5 | HTTP/1.1 204 No Content Date: Mon, 20 Jun 2022 09:06:24 GMT Server: Apache Content-Length: 0 Content-Type: application/json |
※テナントにダウンロードした ISO を削除するコマンドは無いようです。
まとめ
以上で無事 ConoHa VPS に RHEL9 をインストールすることができました。
今回はじめて ConoHa API を触りましたが、ドキュメントも充実していて割と簡単に使えることが分かりました。ただし、コマンド実行結果のログが見られないため、ハマったときは割と大変でした。
コメント