【検証】reboot.targetをブートターゲットにする

こんにちは。

現在、Linux技術者認定試験のLinuCレベル１を勉強中のエンジニアです。

LinuC試験項目の「ブートターゲット」の科目勉強中、

**「デフォルトのターゲットをrebootにしたらどうなるか」**

が気になったことがあったので試してみました。

# ブートターゲットとは
ブートターゲットは、簡単に言うとLinux起動時にCUI（コンソール）モードで起動するかGUI（デスクトップ）モードで起動するかを指定するモードです。

具体的には以下のモードがあります。
| ターゲット | 内容 | 対応ランレベル|
|:-----------|:------------|:-------|
| multi-user.target       | CUIログイン        |3|
| graphical.target     | グラフィカルログイン      |5| 
| poweroff.target       | システム終了        | 0 |
| rescue.target         | レスキュー（シングルユーザーモード）| 1         |
| reboot.target       | システム再起動       | 6 |

``systemctl get-default``コマンドでデフォルトの起動ターゲットを調べることができます
```
$ systemctl get-default 
graphical.target
```

また、``systemctl isolate``コマンドでコマンド実行直後にターゲットを実行することができます。

:::note info
``systemctl isolate``コマンドは実行時にroot権限が必須です。
:::

```:CUIモードに切り替える
# systemctl isolate multi-user.target
```
![スクリーンショット 2024-03-16 14.31.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586882/34807b0c-5a67-da19-154b-9871630cc662.png)

```:GUIモードに切り替える
# systemctl isolate multi-user.target
```
![スクリーンショット 2024-03-16 14.32.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586882/21bd9bd4-c01a-7bf3-014f-ac10fcfe86ce.png)

## 再起動する
```
# systemctl isolate reboot.target
```
コマンド実行後、再起動します。

# デフォルトのターゲットを変更する
デフォルトのターゲットを変更するには、``systemctl set-default``コマンドを用います。

:::note info
``systemctl set-default``コマンドは実行時にroot権限が必須です。
:::

```:デフォルトのターゲットをCUIモードにする
$ sudo systemctl set-default multi-user.target 
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/multi-user.target.
```

```:デフォルトのターゲットをGUIモードにする
$ sudo systemctl set-default graphical.target 
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/graphical.target.
```

``/lib/systemd/system/``ディレクトリ以下のターゲットが``/etc/systemd/system/default.target``にリンクされます。

```
$ ls /lib/systemd/system/default.target -l
lrwxrwxrwx 1 root root 16  1月 27 06:48 /lib/systemd/system/default.target -> graphical.target
```
``$ systemctl get-default``でもデフォルトのターゲットを確認できます。

```
$ systemctl get-default 
graphical.target
```

# 【危険】デフォルトのターゲットをreboot(再起動)にする
さて、本題ですが、デフォルトのターゲットをreboot.targetにしたらどうなるか試してみます。

:::note alert
起動直後に無限に再起動を繰り返すため、実行しないでください。
:::

```:デフォルトのターゲットを「再起動」にする
$ sudo systemctl set-default reboot.target
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/reboot.target.
```
この時点ではシンボリックリンクが作成されるだけです。

```
$ ls /etc/systemd/system/default.target -l
lrwxrwxrwx 1 root root 33  3月 16 15:06 /etc/systemd/system/default.target -> /lib/systemd/system/reboot.target
```

```
$ systemctl get-default 
reboot.target
```

再起動します。

:::note alert
無限に再起動を繰り返し起動不能になるため、絶対に再起動しないでください。
実行される際は自己責任でお願いします。
:::
```
$ reboot
```

# 結果
無事（？）、起動直後に再起動を繰り返し、無限ループに陥ることを確認しました。
コマンドを何も受け付けないため、物理的に電源を切るしかないです。

復旧させるには、``/etc/systemd/system/default.target``のシンボリックリンク先を``/lib/systemd/system/multi-user.target``若しくは``/lib/systemd/system/graphical.target``に変える必要があります。（未検証）

起動時のgrub画面で復旧できるかもしれませんが未検証です。

# まとめ
そもそも危険な操作をさせないようにする、「フールプルーフ」の考えがとても大事だと感じました。

https://medium-company.com/%E3%83%95%E3%83%BC%E3%83%AB%E3%83%97%E3%83%AB%E3%83%BC%E3%83%95/