Debian11をVirtualBoxにインストールしたメモ（忘備録）

VirtualBoxにインストールした時の忘備録です。
ちょいと実験用に使いたくDebianの最新リリース11をVirtualBoxにインストールしました。わりと最近使っていたCentOSと比べると少し勝手が違ったので忘備録としてメモしておきました。インストール時オプションは何も考えずにデフォルトのままです。

# とりあえずやったこと（やっておきたいこと）
1. VirtualBoxのネットワーク設定
2. GUIにrootでログインしたい
3. IPアドレスを固定
4. TeraTermを使いたい
    * rootでログインしちゃう？
5. sudoを使える様に
6. ランレベルの設定など
    * CUIで起動させたい
7. コンパイラとかのインストール
    * C、C++のコンパイラはいるでしょ
    * makeもいるでしょ
    * Pythonは標準で入ってるからそのままでいいかな
    * node.jsを使いたい

## VirtualBoxのネットワーク設定
何も考えずにインストールしたらVirtualBoxのネットワーク設定がNATになっていて、DHCPで10.0.なんちゃらとか言うIPアドレスになっていましたので、ブリッジ接続に変更しました。IPは後で固定にします。

## GUIにrootでログインしたい
各種設定をするにあたり、いろいろ調べていると、一般ユーザーでsudo使って... と言う記述が多かったのですが、めんどくさいのでrootユーザーでやれればいいかなと思い、GUIにログインしようとしたらできませんでした。どうやらデフォルトではrootユーザーでGUIへのログインは許可されていない様ですのでログインできる様に設定します。
1. /etc/pam.d/gdm-password の3行目をコメントアウトすればよい様です。
    ```bash:/etc/pam.d/gdm-password
    #%PAM-1.0
    auth    requisite       pam_nologin.so
    auth    required        pam_succeed_if.so user != root quiet_success
    @include common-auth
    ```
2. 3行目の「auth required ～ user != root」の定義をコメントアウト。
    ```bash:/etc/pam.d/gdm-password
    #%PAM-1.0
    auth    requisite       pam_nologin.so
    #auth    required        pam_succeed_if.so user != root quiet_success
    @include common-auth
    ```

## IPアドレスを固定
ネットで調べていると、/etc/network/interface を編集して云々と言う記事が多かったのですが、GUIからできる様なのでGUIから設定しました。
まあよくあるネットワーク設定なのでこんな感じで定義しておきます。適用ボタンを押下したら設定完了で、切断して接続し直せば反映されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106424/1bfb13d4-781e-5092-9bdb-a24aff9791be.png)
今回は 192.168.1.130 にしておきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106424/383960b7-3d3c-2b29-a5ce-98087c130703.png)

### IPアドレスが変更されているか確認
え～と、古いLinuxに慣れていると無意識に「ifconfig」って打ち込んだりしちゃうんだけど「ifconfig」ってありません😅。「ifconfig」の代わりは「ip address（ip a）」コマンドです。
```
root@debian11:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:f5:4e:ef brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.130/24 brd 192.168.1.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 2404:7a80:cfa0:4500:317f:dcf6:2337:a97d/64 scope global dynamic noprefixroute
       valid_lft 13665sec preferred_lft 11865sec
    inet6 fe80::ce4f:303c:79b8:2c0c/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
```

## TeraTermを使いたい
と、思い、TeraTermから 192.168.1.130 で接続しようとしたら、接続できませんって言われました。で、よくよく調べてみると、デフォルトでSSHサーバーが入ってないんですね。ってことでSSHサーバーをインストールします。これもGUIのSynapticパッケージマネージャからできる様ですが今回はターミナルからインストールしました。
（途中でインストール用DVDのセットを促されます。）
```bash:
root@debian11:~# apt install openssh-server
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  openssh-sftp-server
提案パッケージ:
  molly-guard monkeysphere ssh-askpass ufw
以下のパッケージが新たにインストールされます:
　 ・
　 ・
（中略）
　 ・
man-db (2.9.4-2) のトリガを処理しています ...
root@debian11:~#
```
インストールが終わるとSSHサーバーは自動的に起動されますので、TeraTermから接続できる様になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106424/65350b82-fa0b-5337-1c36-8caccf605419.png)
### rootでもログインしたい
ターミナルからだとsuコマンド使えばいいじゃん！ って話になりますが、ものはついでなのでメモっておきます。rootユーザーで/etc/ssh/sshd_configの34行目を編集します。「PermitRootLogin prohibit-password」は元々コメントアウトされていますので「PermitRootLogin yes」の行を追加します。
```bash:/etc/ssh/sshd_config
27 # Logging
28 #SyslogFacility AUTH
29 #LogLevel INFO
30
31 # Authentication:
32
33 #LoginGraceTime 2m
34 #PermitRootLogin prohibit-password
35 PermitRootLogin yes
36 #StrictModes yes
37 #MaxAuthTries 6
38 #MaxSessions 10
```
SSHサーバーを再起動すればrootでもログインできる様になります。
```bash:
root@debian11:~# systemctl restart ssh
```
## sudoを使える様に
/etc/sudoersを編集、一般ユーザーの名前を登録する。
```bash:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification

# ↓この行を追加（hogeユーザーにsudoを許可）
hoge  ALL=(ALL:ALL) ALL

# Cmnd alias specification
# User privilege specification
root    ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d
```

# ランレベルの設定など
なんとなくGUIで起動される様になってしまったけど、CUIで起動させるにはどうしたらいいのかを調べてみた。
## ディスプレイマネージャサービスを停止
Debian11の場合は単純に「init 3」とか打ち込んでもランレベル3になってCUIのモードになるわけではなかった。GRUBでランレベルを指定してもCUIで起動はされなかった。いろいろ調べてみたところディスプレイマネージャサービスと言うのがあって、gdm3とか言うサービスを停めないとならないとか。じゃあサービスを停めちゃえばいいのね。と思ったんだけど、systemctlからはgdm3のサービスは変更できないらしい。そこで、Windowsのサービス画面みたいのはないかな～ と探していたら、CUIの画面から設定できるユーティリティがあった。「sysv-rc-conf」と言うコマンドだけど、デフォルトでインストールされていないのでインストールする。
```
root@debian11:~# apt install sysv-rc-conf
```
インストールして起動するとこんな画面が出るので gdm3 のサービスをランレベル2～3で動かない様にしてみよう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106424/b2e8fec7-5d80-6cde-ba7b-cf29811ac9d1.png)
そして、init 3 コマンドを打ち込むとCUI画面に移行しました。
```
root@debian11:~# init 3
```
## 起動時にランレベル3にするには
GRUBの画面が出たら自動起動される前に1行目を選択して e を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106424/22e2ff68-cba0-e7b7-8eb8-a4e58d96b1fc.png)
こんな画面が出るので赤丸のところに 3 と書いてF10キーを押してbootすると、GUIが起動しないでCUIでのログイン待ち状態の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106424/18d8f412-0069-4970-9ec1-6cc97682678d.png)
この後、rootでログインして、init 5 コマンド や startxコマンド でGUIを立ち上げることもできます。

# コンパイラとかのインストール
差し当たって、こいつらをインストールしておこうと思います。
* gcc、g++（c++）
* make
* Python
* node.js
## gccとg++
最近はLinuxもバイナリのパッケージをダウンロードしてインストールが普通みたいですが、古い人間はなんとなくソースのtarボールからインストールしたいと言う気持ちがあります。そんな時はこれがないと話になりません:sweat_smile:。
1. gccをインストール
    ```bash:
    root@debian11:~# apt install gcc
    ```
2. g++をインストール
    ```bash:
    root@debian11:~# apt install g++
    ```
3. makeも必要なので
    ```bash:
    root@debian11:~# apt install make
    ```
## Python
Python3.9.2はデフォルトでインストールされていました。
## node.js
node.jsはaptコマンドからでもインストールできますが、ソースのtarボールからインストールしようと思います。まずはソースのtarボールを [node.js公式サイト](https://nodejs.org/ja/download/ "https://nodejs.org/ja/download/") からダウンロードします。現時点（2023/1/18）での推奨版は node-v18.13.0.tar.gz でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106424/0483dbc5-0312-0661-631f-87b1ea6a8d52.png)

1. /usr/local/src に置いて展開
    ```
    root@debian11:/usr/local/src# ll
    合計 82616
    -rw-r--r--  1 root   root   84593514  1月 18 15:52 node-v18.13.0.tar.gz
    root@debian11:/usr/local/src# tar xvfz node-v18.13.0.tar.gz
    ```
2. /usr/local/src/node-v18.13.0 に展開されるので、configureを実施
    ```bash:
    root@debian11:/usr/local/src/node-v18.13.0# ./configure
    Node.js configure: Found Python 3.9.2...
    INFO: configure completed successfully
    ```
3. 続けてmakeを実施
    ```
    root@debian11:/usr/local/src/node-v18.13.0# make
    ```
4. 続けてmake install を実施
    ```
    root@debian11:/usr/local/src/node-v18.13.0# make install
    ```
5. 無事インストールされたかを確認
    ```
    root@debian11:/usr/local/src/node-v18.13.0# which node
    /usr/local/bin/node
    root@debian11:/usr/local/src/node-v18.13.0# node -v
    v18.13.0
    ```
6. npmもインストール
    ```
    root@debian11:/usr/local/src/node-v18.13.0# apt install npm
    ```








# 参考
http://note.kurodigi.com/debian8-cuilaunch/

https://mirrorshades.jp/?p=1087

https://www.server-world.info/query?os=Debian_11&p=download

https://qiita.com/silverskyvicto/items/a57b6296ff3238b1547c