【Debian、AlmaLinux】LinuC学習用仮想環境をWindowsターミナルで構築


# 本記事の対象読者

-   『<b>[最短突破 LinuC レベル 1 バージョン 10.0 合格教本［101 試験, 102 試験対応］ 改訂新版](https://gihyo.jp/book/2024/978-4-297-14236-0)</b>』の「<b>学習用仮想環境のセットアップ</b>」章の手順に従い環境構築を完了させた方
-   `VBoxManage.exe`の存在する場所が`C:\Program Files\Oracle\VirtualBox`の方<br />（別の場所の場合は適宜読み替えて下さい）
-   Windows ターミナル（Windows Terminal）をインストール済みの方

# 完成後イメージ

![wt_dropdown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285738/ead0c9a9-2c78-efb5-6148-4f7913874188.png)

-   Windows ターミナルのドロップダウンメニューに「Alma Linux[^1]」と「Debian」の 2 つの項目を追加<br />（※アイコン部は本記事の対象外）

# 動作確認済バージョン

|                      | バージョン     |
| :------------------- | :------------- |
| ホスト OS            | Windows10 22H2 |
| Oracle VM VirtualBox | 7.0.6          |
| Windows Terminal     | 1.20.11781.0   |
| OpenSSH              | 8.1            |
| LibreSSL             | 3.0.2          |

# 構築

## バッチファイルの配置

```bat:"%USERPROFILE%\remote-console.bat"
@echo off
set Path=C:\Program Files\Oracle\VirtualBox;%Path%
set VM_NAME=%~1
set VM_USER=%~2
set VM_PORT=%~3
VBoxManage showvminfo "%VM_NAME%" --machinereadable | findstr /i "VMState=" | findstr /i "running" > nul
if %ERRORLEVEL% neq 0 (
    VBoxManage startvm "%VM_NAME%" --type headless
)
chcp 65001 > nul
:userspecified
if "%VM_USER%"=="" (
    set /p VM_USER=login:
    goto userspecified
)
ssh -t "%VM_USER%@localhost" -p "%VM_PORT%"

```

上記の内容のバッチファイル[^2]を`remote-console.bat`のファイル名で、エクスプローラーのアドレスバーに`%USERPROFILE%`と入力して Enter キーを押すと開く場所に保存して下さい。

## VirtualBox 登録済の「Alma Linux」「Debian」の追加設定

```:コマンドプロンプト
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "Alma Linux" --defaultfrontend headless --natpf2 "SSH,tcp,,2222,,22"
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "Debian" --defaultfrontend headless --natpf2 "SSH,tcp,,22222,,22"
```

VirtualBox 登録済の「Alma Linux」「Debian」について、デフォルトの起動方法をヘッドレス起動とし、新たなポートフォワーディングルールを追加します。

## Windows ターミナルにてプロファイル追加

1. Windows ターミナル起動
1. 「設定」タブ表示（`Ctrl+,`）
1. 左ペインの「新しいプロファイルを追加します」をクリック
1. 右ペインの「新しい空のプロファイル」をクリック
1. <b>名前</b>を`Alma Linux`に設定
1. <b>コマンド ライン</b>を`"%USERPROFILE%\remote-console.bat" "Alma Linux" "testuser" "2222"`に設定[^3]
1. 下ペインの「保存」をクリック
1. 左ペインの「新しいプロファイルを追加します」をクリック
1. 右ペインの「新しい空のプロファイル」をクリック
1. <b>名前</b>を`Debian`に設定
1. <b>コマンド ライン</b>を`"%USERPROFILE%\remote-console.bat" "Debian" "testuser" "22222"`に設定
1. 下ペインの「保存」をクリック
1. ドロップダウンメニューに「Alma Linux」「Debian」が追加されていることを確認

## SSH 接続の確立

Windows ターミナルのドロップダウンメニューから「Alma Linux」をクリックすると新たなタブが追加され、下記の様な入力待ち状態になります。（`******`の部分は公開鍵のハッシュ値）

```
Waiting for VM "Alma Linux" to power on...
VM "Alma Linux" has been successfully started.
The authenticity of host '[localhost]:2222 ([127.0.0.1]:2222)' can't be established.
ECDSA key fingerprint is SHA256: ******
Are you sure you want to continue connecting (yes/no/[fingerprint])?
```

`yes`と入力し、Enter キー押して下さい。自動的に`"%USERPROFILE%\.ssh\known_hosts"`ファイルに公開鍵が登録され、下記の様に表示されます。

```
Waiting for VM "Alma Linux" to power on...
VM "Alma Linux" has been successfully started.
The authenticity of host '[localhost]:2222 ([127.0.0.1]:2222)' can't be established.
ECDSA key fingerprint is SHA256: ******
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2222' (ECDSA) to the list of known hosts.
Connection reset by 127.0.0.1 port 2222
```

下記の表示の際は、Enter キーを押して下さい。

```
[プロセスはコード 255 (0x000000ff) で終了しました]
このターミナルを Ctrl+D で閉じるか、Enter キーを押して再起動できます。
```

下記の様なパスワード入力待ち状態になった際は、パスワードを入力してログインし、root ユーザーに切り替えた上で`shutdown -h now`コマンドでゲスト OS をシャットダウンして下さい。

```
testuser@localhost's password:
```

<b>ゲスト OS のシャットダウン処理後</b>、下記の表示になったら`Ctrl+D`で閉じて下さい。（Enter キーを押すとゲスト OS が再起動します）

```
[プロセスはコード 255 (0x000000ff) で終了しました]
このターミナルを Ctrl+D で閉じるか、Enter キーを押して再起動できます。
```

「Debian」についても、上記同様の処理を行って下さい。

# 動作確認

Windows ターミナルのドロップダウンメニューから「Alma Linux」をクリックすると新たなタブが追加され、ゲスト OS が起動し、下記の様なパスワード入力待ち状態になります。

```
Waiting for VM "Alma Linux" to power on...
VM "Alma Linux" has been successfully started.
testuser@localhost's password:
```

正しく構築されました。
(〃^∇^)o お疲れさま～

# 余談

## Alma Linux の GUI モードをオフにする

root ユーザーに切り替えて`systemctl set-default multi-user.target`を実行

## Alma Linux で Web サーバー起動

参考

-   [他の PC やスマホから VirtualBox(ゲスト OS)の Web サーバに接続する（Qiita 記事）](https://qiita.com/OharanD/items/bcf5cff7096179641691)
-   [LinuC レベル１の概要と活かし方（YouTube 動画）](https://youtu.be/8M14ZwOfWdk?t=2976s&list=PLAsEyLm5aGOAEVCWfff-qZ5mBQxFFXnrS)

### VirtualBox 登録済の「Alma Linux」への更なる追加設定

```:コマンドプロンプト
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "Alma Linux" --natpf2 "HTTP,tcp,,50080,,80"
```

VirtualBox 登録済の「Alma Linux」について、新たなポートフォワーディングルールを追加します。

### Web サーバー起動

Alma Linux を起動し、root ユーザーに切り替え、下記のコマンドを順次実行します。

```console
# systemctl start firewalld
# firewall-cmd --add-service=http
# systemctl start httpd
```

### ホスト OS のブラウザで閲覧

ホスト OS のブラウザのアドレスバーに`http://localhost:50080`と入力し Enter キーを押すと、AlmaLinux Test Page が表示されます。但し、ゲスト OS に`/var/www/html/index.html`が存在する場合は、そのファイルの中身が表示されます。

[^1]: RHEL (Red Hat Enterprise Linux) のクローン OS (所謂 RedHat 系 Linux) で、CentOS の代替として注目されている OS の 1 つ。
[^2]: `passwd`コマンド等を正常に動作させる為、`ssh`コマンドに`-t`オプションを付けています。
[^3]: 第 2 引数`"testuser"`を`""`（空値）にすると、ゲスト OS 起動・接続時にログインユーザーを指定できるようになります。