AzureにRed Hat Enterprise Linux 9がやってきた！デスクトップに接続しよう！

# 最新Linuxデスクトップを楽しもう

皆さんお待ちかねのRed Hat Enterprise Linux 9 がAzureのマーケットプレイスにやってきた！

WSLを使ってコマンドだけで満足するのは勿体ないと思う。<b>AzureでLinuxデスクトップ環境を使ってみたい。</b>そう思ってQiitaブログに手順を掲載します。(お約束ですが、このブログエントリーは個人の見解であり、所属する組織の公式見解ではありません)

## Red Hat Enterprise Linux 9 がマーケットプレイスで提供を開始

恐らく全人類のうちRed Hat系ディストリビューション派が待ち望んでいた、Red Hat Enterprise Linux 9 (以降、RHEL9)が、晴れてAzure Market Placeで提供を開始しました。そう、この日を待っていたのだ。「マケプレに9がまだ無いんじゃー」と寒さを加速させて、例年よりも冷え込ませてしまった事をお詫びします。

## Red Hat Developer Programについて

Azureを個人的に契約して、開発や検証目的でRHELを利用しているユーザーには朗報です。
個人で利用するならRHELを無料で利用できる「Individual Developerサブスクリプション」を活用できるかと思います。
- 「Individual Developerサブスクリプション」で、サブスクリプション費用が無料になる
- 登録者本人だけが利用する用途に限定
- 1ユーザ(共用不可)、16システムのみに利用できる
- 一部の認定パブリッククラウドへ持ち込むことが可能で、<b>Microsoft Azureにも持ち込める</b>

何という太っ腹なプログラムなのだろう。「Individual Developerサブスクリプション」をAzure個人環境に持ち込むことで、実質仮想マシンの費用だけで利用できるのだから、使わない手はない。詳細については以下URLを参照してください。

https://developers.redhat.com/

## Linuxデスクトップの通信暗号化について

Linuxデスクトップに関して話を戻します。
玄人な読者の方にとって、当たり前の話かと思いますが、簡単な設定でポートを空けておいたら、数時間でハッキングされマイニングツールを仕込まれた話などもよく聞く手口ですので、ポートを誰にでも開放しない、通信の暗号化対策を講じるなど、管理者も利用者も意識をして取り組む必要が出てきます。


## SPICEプロトコル非サポート

少しだけ悲しいお知らせです。RHEL9になって、SPICEプロトコルはサポートされなくなりました。SPICEプロトコルの代替となる画像転送プロトコルを検討しないといけません。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/considerations_in_adopting_rhel_9/ref_changes-to-spice_assembly_virtualization

代替としてVNCがありますが、SSHポートフォワーディングなどの対策も必要になってきます。
我が家のような一般家庭で使えて、かつ誰でも使える素敵なソリューションはないでしょうか。来年こそ、我々は満を持してLinuxデスクトップ元年を迎えられるのでしょうか。

<b>Azureでいいツールありますよ。その名も「Bastion」</b>

## Bastion とは

Bastionの読み方は「バッション」「バスティオン」など発音は人それぞれ異なる場合がありますが、「要塞」や「砦(とりで)」という意味合いのパブリックなIPアドレスを使わずに、ブラウザのHTML5で仮想マシンに接続できるAzureの便利サービスです。TLS 経由で Azure portal から直接、仮想マシンに安全に接続できます。

Azure Bastion 経由で接続する場合、仮想マシンにパブリック IP アドレス、エージェント、クライアント ソフトウェアはいずれも不要です。そうなんです、特別なツールは要らないフル プラットフォーム マネージド PaaS サービスです！

時代は変わった。SSHで繋ぐために踏み台サーバーを立てなくていいんです。超便利なので、Bastionは便利すぎて一度使ったらやめられません。必要なものは、HTML5をサポートしているEdgeまたはChromeブラウザです。

https://learn.microsoft.com/ja-jp/azure/bastion/bastion-faq

ちなみに、BastionはSSHだけではなくて、RDPの通信もサポートしています。
RDP対応しているのはWindowsだけだと思いがちですが、実はLinuxにもRDPのツールがあるので、RDPに繋ぐためのツールをインストールしてBastionに対応させます。

:::note info
<b>RDPとは？</b>
リモートデスクトッププロトコル(RDP)は、ネットワーク接続を介して別のコンピュータに接続するためのグラフィカルインターフェースをユーザーに提供するプロトコルで、Microsoftによって開発されました。オープンソースの RDP サーバには、FreeRDP、xrdp などがあります。
:::

今回は、オープンソースのxrdpを利用します。

# 実践！Linuxデスクトップを立てよう

一家に一台あると嬉しくなる、LinuxデスクトップをRHEL9で作ってみましょう。

今回の流れとしては、以下の手順を想定しています。

1. Azure Virtual MachineとしてマーケットプレイスのRHEL9.1 (最新バージョン) でVMを立ち上げる
1. Bastion の有効化
1. Key Vault の 有効化
1. Bastion をSSHに接続 (SKU Basic/Standard)
1. xrdp の各種設定
1. GNOMEデスクトップ設定
1. BastionをRDPに接続 (SKU Standard)
1. オプション：タイムゾーンと日本語化の設定


:::note info
<b> Key Vaultとは？</b>

Azure Key Vault は、キー、シークレット、証明書を管理するために使用されるクラウド サービスです。
Key Vault を使用すると、開発者がコードにセキュリティ情報を保存する必要がなくなります。これにより、アプリケーション シークレットのストレージを一元化できるため、シークレットが漏洩する可能性が大幅に減少します。Key Vaultを使用すると、ハードウェア セキュリティ モジュールまたは HSM でサポートされているシークレットとキーを安全に保存できます。使用されている HSM は、連邦情報処理規格 (FIPS) 140-2 レベル 2 が検証されています。さらに、キー コンテナーでは、コンプライアンスのための完全な監査証跡を確保できるように、シークレットのアクセスと使用のすべての試行に関するログが提供されます。
:::

## マーケットプレイスのRHEL9をデプロイする

Azure Portalにログインします。

![スクリーンショット 2022-12-11 230646.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/54ac26da-cd12-04c3-515b-2a9e4892abe0.png)

リソースグループと仮想ネットワークを作成後、仮想マシンをマーケットプレイスから選びます。そうするとトップにRHELが出てきます。「作成」を選択し、バージョンを選びます。

![スクリーンショット 2022-12-11 230723.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/dbf668c4-98e9-5f88-9531-f53a7f526a18.png)

今回はRHEL9.1を選び、仮想マシンを作成します。

## 仮想マシンを作成する

今回はJapan Eastリージョンに仮想マシンを作成します。最初に作成したリソースグループを選択します。

![スクリーンショット 2022-12-13 000451.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/ce67ab50-1fb2-ac26-fbd8-b722dd41aa80.png)

マシンサイズはお好みで。初回のセットアップにGNOMEインストールを行います。マシンリソースを使うため、少し贅沢な気持ちで4vcpuにしています。クラウドの利点ですが、仮想マシンのインスタンスサイズは後から柔軟に変更できます。

![スクリーンショット 2022-12-13 000358.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/1220036a-e3e1-0c75-3858-e21324dc0e22.png)

パブリック受信ポートはBastionでは不要ですので「なし」でいいです。
そして、仮想マシンの作成を完了させます。

## Bastionを有効化

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/341cb1fd-bc08-5526-eee7-e64341f63e7c.png)


今回はお試しに、SSH接続時のコマンドでの作業と、RDP接続どちらもBastionで繋げてみる例を提示します。
Bastionの作成は「規定値を使用してBastionを作成する」または「手動で作成」を選びます。LinuxのRDPサポートをしているSKUはStandardになります。今回は、初回はSKU Basicで作成して、後からStandardに変更してみます。

仮想マシンが問題なく作成完了して起動している状態になっていたら、「接続」で「Bastion」を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/f0f415ef-2e0a-6ca9-6e74-9526f70ebbd1.png)


規定値での作成についてはデフォルトのSKUがBasicになりBastionではSSHを利用するためコマンドラインでの接続になります。LinuxでRDPを利用する場合は、SKUをStandardで作成するか、Standardへ後から変更します。SKUをStandardに変更したい場合は、作成後にプランを変更できます。(今回は、後からxrdpで接続するため、後半でSKUをStandardに設定変更します)
なお、SKUでBasicが適用後、後からStandardに変更はできますが、StandardからBasicに戻すことはできません。

Bastionのデプロイには10分ほどかかる場合があります。ここでお茶をすすります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/a90a92ed-0cd6-96f3-fdf5-af7b8278cc9d.png)

## Key Vaultの有効化

Bastionが有効化になるまで時間が少し掛かるので、その間にKey Vaultの設定を完了させます。
今回はBastionでKey Vaultを使ってみましょう。以下のようにキーコンテナを作成します。AzureのサービスでKey Vaultを選びます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/0ac4b394-5e5a-0555-ca71-9697a944b4b7.png)


次に、Key Vaultのシークレットを生成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/397f1c5f-635b-5ab8-0877-04e6a26e708a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/217e78eb-533b-dfc3-597f-2622f69a187f.png)

## xrdpのセットアップを完了させる

Bastionのデプロイ完了後、接続情報を入力してから「接続」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/e1487d6c-bc40-308c-b921-a477447b9a10.png)

なんと言うことでしょう。Bastionを使ってブラウザ経由でSSHし、RHEL9に接続することができました。

#### RHEL9 コマンドの変更点

標準のパッケージ管理ツールが、yumコマンドからdnfコマンドに変更になりました。従来通りyumコマンドを使う場合バックエンドでdnfコマンドにリダイレクトしているため、慣れている方で良いかと思います。

xrdpはFedora ProjectのEPELパッケージに該当します。エンタープライズLinux用の拡張パッケージ(EPEL) は、RHEL向けのアドオンパッケージであり、Fedora プロジェクトによって作成されたパッケージになります。

### xrdp の設定

EPELパッケージでxrdpをインストールします。

```shell_session
$ sudo dnf update -y
$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
$ sudo dnf install xrdp -y
```

xrdpをインストール後、systemdで起動し、有効化します。

```shell_session
$  sudo systemctl start xrdp
$  sudo systemctl enable xrdp --now
Created symlink /etc/systemd/system/multi-user.target.wants/xrdp.service → /usr/lib/systemd/system/xrdp.service.
```

### GNOMEの設定

Azure上ではRHEL9にはGNOMEがインストールされていないため、忘れずインストールします。
そして、GUIで直接起動するようにシステムを設定してから、graphical.target に切り替えます。

```shell_session
$ sudo dnf group install GNOME base-x
$ sudo systemctl set-default graphical.target
```

### Firewalldの設定

OS上ではポート3389が閉じられている状態のため、こちらのポートをfirewalldで開けて、リロードします。

```shell_session
$ sudo firewall-cmd --permanent --zone=public --add-port=3389/tcp
success
$ sudo firewall-cmd --reload
success
```

xrdp接続時にパスワードを利用するため、パスワードを設定します。

```shell_session
$ sudo passwd azureuser
```

コマンドでの設定は以上で終了です。

## Bastion をRDPに接続する

これで、下準備は整いました。Bastion→該当するBastionの構成を開いて、SKUをBasicからStandardに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/6acb99c4-d167-47f6-feac-484719ea0445.png)

仮想マシンに接続してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/064a3710-757b-6bed-dd14-400bb9bd274b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/28cd1b65-845a-fd1b-3051-02f8a12b78af.png)

XRDPで繋げました！azureuserで入ります。先ほどパスワード設定をした情報を入力します。

https://learn.microsoft.com/ja-jp/azure/bastion/bastion-connect-vm-rdp-linux

### 念願のGNOMEデスクトップが出現

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/0ec0ae76-dad8-06cb-ee7a-36b4baaeee60.png)

これはとてつもなく格好いい！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/60f167b7-623c-08ec-4bc2-239ff6f86533.png)

### オプション：タイムゾーン設定、日本語パッケージ

忘れてたんですが、タイムゾーンをJSTに合わせます。当たり前ですが、左上の赤い帽子からプロンプトを開いてそこでコマンドを入力することもできます。

```shell_session
$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo dnf -y install langpacks-ja glibc-langpack-ja.x86_64
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/773ab314-5701-5a38-34aa-15444352d052.png)

日本語化設定後、再起動を実施して無事に変更できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852041/14fb8ab4-4b8d-1022-3956-fdac39838db1.png)

### RHEL9をデスクトップで動かすためのAzure環境

今回、RHELを動かしているVMは従量課金制でD4ds V5(48.856円/時間)を使っていますが、D2ds V5(28.592円/時間)でも動作するかと思います。

イケているRHEL9をAzureで無料で試したい！そんな方に朗報です。Azureに新規登録する方は無料クレジットが付いています。

学生はここでAzureをお試しできます。

https://azure.microsoft.com/ja-jp/free/students/

学生ではない方もこちらから！

https://azure.microsoft.com/ja-jp/free/

# まとめ

<b>来年こそLinuxデスクトップ元年！</b>
本気でLinuxデスクトップを普及させていきたいと思っているので、ぜひぜひ盛り上げていきましょう！！