#ConoHaVPS でrootパスワード忘れたのでsingle-modeでpasswd初期化しようとしたらemergency-mode突入した件（なんとかなったlog）

# 事象 / Symptoms
- ConoHa VPS
    - OS: おそらく RHEL系 (AlmaLinux 8)
    - Kernel: 5.14.0-*****
    - GRUB: 2.06
- root password を忘れてしまった。
- sudo できるユーザのパスワードも忘れた。
    - 普段は証明書認証（passなし）でログインしているのでパスワードは使ってない。
- Internet の海に転がってる情報そのまま試してもうまくいかず、Emergency-mode に突入、shellが起動しない。
- または single-mode に突入できるが、 root passwd を聞かれパスワードリセットできない。

# 対処
- GRUB bootloader の設定に下記追加して起動（再起動すると消えるのでやり直す場合は編集し直し。）
- 起動後 passwd 再設定
```diff
- linux ro console=tty0,115200n8r
+ linux rw init=/sysroot/bin/sh single console=
```

# 免責事項
- 本記事に記載している内容を実施して発生した内容については責任を負えません。
- あくまで ***自己責任で*** 実施お願いします。
- 極力正しい情報であるよう心がけていますが、versionの違い等により意図しない結果になることがあります。

# 手順
1. OS起動している場合は `halt -p` をなんとかして実行する。
    - といっても無理な場合が殆ど。なので。。。
    - ConoHaのVPS管理コンソールからシャットダウンを実施する。
    - ちなみに再起動でもいいが、bootloader画面のタイムアウト時間（自動でOSが立ち上がり始める時間）が reboot だとかなり短いので、一旦シャットダウンしたほうが楽。
    - コンソールボタンはこの時点で押しておくと次の手順のとき少し楽。
[![図1-1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/647d13ef-7879-05ab-03a2-dc33afccfa33.jpeg)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/647d13ef-7879-05ab-03a2-dc33afccfa33.jpeg)(図1-01)

2. シャットダウンさせたらConoHaのVPS管理コンソールから起動させる。
    - コンソールボタンが有効化されたらすぐに押すこと。
    - 前項でコンソール開いていた場合は、おそらくステータスが "切断" になっているので、右上の "再読み込み" をクリックしておく。（ "接続完了" になっていればOK）

3. GRUB(bootloader)が立ち上がってきたら、自動起動カウントダウンが始まっているので、↑↓(矢印キー)など押してカウントダウンを止める。
    - カウントダウン止めると図3-01のようになる。
[![図3-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/ce68bc49-37e1-5b4d-897c-520dadc6e3cb.jpeg)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/ce68bc49-37e1-5b4d-897c-520dadc6e3cb.jpeg)(図3-01)

4. 通常起動している設定プランを選択（通常は一番上の項目）を選択（矢印キーで移動。マウスは使用できない）して、`e`キーを押下する。
    - 押下すると 図4-01 のようになる。
    [![図4-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/279d3dc9-53be-db3e-ac10-d7136f2785d0.jpeg)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/279d3dc9-53be-db3e-ac10-d7136f2785d0.jpeg)(図4-01)


5. 編集する箇所は下記の通り `linux` で始まっている行の `ro` と `init=`, `console=`, `single`
    - すでに編集モードになっているので `h`, `j`, `k`, `l`, `w`, `b` などのショートカットキーは使用できない。
    - Emacs-like と書かれているので Emacs のショートカットキーなら使えるかもしれんが、Emacsは~~宗教上の理由で~~使えない
    - `=` などの記号はキーマップがいつものとは異なっており、入力するのが大変だった。
        - 弊方の環境では `^` が `=` に紐づいていた。
    - ConoHa のVPSコンソールにはテキスト送信機能があるが、そっちに `=` 入力しても `_` に変わってしまうので、手入力したほうがはやそう。
    - `linux` セクション内に `console=` が複数記述されているが、 `console=tty0,115200n8r` だけ編集すればOK
    - 変更後は 図5-01 のようになる。
    [![図5-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/6f78a6cd-cb63-7ec7-1766-5aec5aebfffe.jpeg)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/6f78a6cd-cb63-7ec7-1766-5aec5aebfffe.jpeg)(図5-01)


        ```diff
        - linux ro console=tty0,115200n8r (以降略)
        + linux rw init=/sysroot/bin/sh single console= (以降略)
        ```

        ```conf:変更前
        load_video
        set gfxpayload=keep
        insmod gzio
        linux ($root)/vmlinuz-5.14.0-284.25.1.el9_2.x86_64 root=UUID=(略) ro net.ifnames=0 console=net.ifname=0 console=tty0 console=tty0,115200n8r crashkernel=1G-4G:192M,4G-64G:64G-:512M
        initrd ($root)/initramfs-5.14.0-284.25.1.el9_2.x86_64.img $tuned_initrd
        ```
        
        ```conf:変更後
        load_video
        set gfxpayload=keep
        insmod gzio
        linux ($root)/vmlinuz-5.14.0-284.25.1.el9_2.x86_64 root=UUID=(略) rw init=/sysroot/bin/sh single net.ifnames=0 console=net.ifname=0 console=tty0 console= crashkernel=1G-4G:192M,4G-64G:64G-:512M
        initrd ($root)/initramfs-5.14.0-284.25.1.el9_2.x86_64.img $tuned_initrd
        ```
6. 編集が完了したら、`Ctrl-x` (`Ctrl`キーと`x`キー同時に押す）を実行して編集した設定で起動させる。
    [![図6-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/052a2d56-d15b-dc7f-42a2-c440638e1748.jpeg)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/052a2d56-d15b-dc7f-42a2-c440638e1748.jpeg)(図6-01)

7. GRUBの画面で編集した内容に問題なければ、**rootのパスワードが聞かれずに**OSが立ち上がってくれます。
    [![図7-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/4a0c29e4-e113-46ed-8b6d-6f737bbbc3ba.jpeg)
](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/4a0c29e4-e113-46ed-8b6d-6f737bbbc3ba.jpeg)(図7-01)

8. あとは `chroot` して、`passwd`すれば rootのパスワード書き換えできます。
    - chroot することでいつものフォルダ（ディレクトリ）が見えてきます。
        - この状態なら passwd が再設定可能(図8-01)
    - chroot 環境では `/proc` が適切にマウントされていない為か、`reboot` できませんでした。(図8-02)
    - chroot 環境から `exit` することで `reboot` できるようです。
    [![図8-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/67197de4-7d02-c5f4-c3d7-89e9d8ee76eb.jpeg)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/67197de4-7d02-c5f4-c3d7-89e9d8ee76eb.jpeg)(図8-01)
    [![図8-02](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/0f2b5613-1de0-dbd3-8e17-393383aa415e.jpeg)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/0f2b5613-1de0-dbd3-8e17-393383aa415e.jpeg)(図8-02)

        ```sh
        chroot /sysroot
        passwd
        exit
        reboot
        ```

9. 再起動後はいつも通りに使えばOK
    [![図9-01](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/fdb1f90a-6cf4-8a88-7987-f3a2069ee8be.jpeg)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104374/fdb1f90a-6cf4-8a88-7987-f3a2069ee8be.jpeg)(図9-01)

# 簡単に動画化してみた

[忘却の神詞を呼び覚ます on ConoHa VPS 【#coefont実況 #voiceroid実況 】](https://youtu.be/4pBt2TgK-dg)

https://youtu.be/4pBt2TgK-dg

# Refs
- [C.10. レスキューモードの使用
 @ Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/system_design_guide/using-rescue-mode_troubleshooting-after-installation)
- [Resetting root password by booting into Single User Mode from Linux GRUB @ LayerStack TOGTHER WE CLOUD](https://www.layerstack.com/resources/tutorials/Resetting-root-password-for-Linux-Cloud-Servers-by-booting-into-Single-User-Mode)
- [Red Hat Enterprise Linux - シングルユーザモードで起動したい @ Hewlett Packard Enterprise](https://support.hpe.com/hpesc/public/docDisplay?docId=c01982340&docLocale=ja_JP)
- [シングルユーザーモードで起動する @ Z.com Cloud](https://cloud.z.com/jp/guide/cp-single_user_mode/)