📝

【初心者】WSL2にDebianのインストールと初期設定

2023/10/12に公開

はじめに

この記事はWSL2にDebianをインストールし、Debianの初期設定を行うメモです。

WSLとは

WSLとはLinuxのコマンドラインツール、ユーティリティ、アプリケーションをWindows上で実行する技術です。
公式サイトは下記URLです。
https://learn.microsoft.com/ja-jp/

WSLにはWSL1とWSL2というバージョンがあります。基本的にはWSL2がWSL1の上位互換ですが、WSL1を使用したほうがいい場合もあります。詳しくはこちら
WSLを使用するにはWindows10バージョン2004以上(19041以上)またはWindows11である必要があります。下記コマンドでOSのバージョンを確認できます。

# OSのバージョン情報を確認する
> systeminfo

WSLの仕組み

WSL2はHyper-Vというハイバーバイザーでコンピュータを仮想化するためのプログラムを制御します。仮想化には複数の方法がありますが、WSL2はハイパーバイザー型です。

下記はホスト型と呼ばれる仮想化方法です。

ホスト型

ハイパーバイザー型

ホスト型とは対照的にハイパーバイザー型はハードウェアに直接、ゲストOSをインストールします。

ハイパーバイザー型のメリットはハードウェアへのアクセスするのにホストOSを経由しなければならないため、余計なオーバーヘッドがかかりません。

WSL2について、多少理解ができたと思うのでインストールまでの流れを説明します。
step1 Windowsに標準搭載のHyper-Vを有効にします。
step2 ゲストOS(今回は軽いと噂のDebian)をインストールします。
step3 そのゲストOSへログインし、必要パッケージのインストールや初期設定を行います。

Hyper-Vの有効化

PowerShellを管理者権限で開いてください。

# 実行中のWindowsのオプション機能を一覧表示します。
 > Get-WindowsOptionalFeature -Online

大量に表示されたと思います。下記のコマンドで見たいオプションのみを抽出します。

# Hyper-Vとつく機能のみ表示します。
> Get-WindowsOptionalFeature -Online  | ? FeatureName -Match "Hyper-V"

# 出力結果
FeatureName : Microsoft-Hyper-V-All
State       : Enabled

FeatureName : Microsoft-Hyper-V
State       : Enabled

FeatureName : Microsoft-Hyper-V-Tools-All
State       : Enabled

FeatureName : Microsoft-Hyper-V-Management-PowerShell
State       : Enabled

FeatureName : Microsoft-Hyper-V-Hypervisor
State       : Disabled

FeatureName : Microsoft-Hyper-V-Services
State       : Enabled

FeatureName : Microsoft-Hyper-V-Management-Clients
State       : Enabled

Microsoft-Hyper-V-AllがDisbleになっている場合、有効にする必要があります。

# Microsoft-Hyper-V-ALLを有効にする
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

コマンド操作では難しくてできない場合、こちらの方法をお試しください
別の方法

Linuxディストリビューションのインストール

ゲストOSとして利用可能なOSはLinuxカーネルとその他ソフトウェア群を一つにまとめたLinuxディストリビューションと呼ばれるものです。
利用可能なLinuxディストリビューションを表示します。

# オンラインストアから利用可能なLinuxディストリビューションを表示します。
> wsl --list --online

表示されたLinuxディストリビューションを簡単に説明します。

名前 説明
Ubuntu 代表的な使いやすいLinuxディストリビューション。
Debian Ubuntuに比べコンピュータリソースが低い古参のディストリビューション。
Kali-linux 特殊なパッケージが多く、上級者向けのディストリビューション。
OracleLinux RHELと互換性の高いLinuxディストリビューション。

Linuxディストリビューションごとに違いが大きいため、使い方の学習コストが発生します。ディストリビューションを選ぶ際には注意してください。

# 指定したLinuxディストリビューションをインストール
> wsl --install <Distribution Name>
# 指定しない場合、Ubuntuがインストールされます
> wsl --install

インストールが完了すると、usernameとpasswordの設定を要求されます。
passwordは入力した文字が表示されないので正確に入力してください。
再起動を行うことでインストールが完了するものもあります。

私は今回、Debianをインストールしました。

よく使われるWSLのコマンドです。

# インストールされているLinuxディストリビューションを表示
> wsl --list --verbose

# Linuxディストリビューションを起動
> wsl ~

# WSLを更新
> wsl --update

# wslの状態を確認
> wsl --status

# ヘルプコマンド
> wsl --help

# 全ての起動中のLinuxディストリビューションを終了
> wsl --shutdown

# 指定したディストリビューションを終了
> wsl --terminate <Distribution Name>

# ディストリビューションのアンインストール
> wsl --unregister <Distribution Name>

Debianの初期設定

# wslを起動します。
> wsl ~

バージョンの更新

まず、Debianのバージョン確認を行います。

# catコマンドでバージョンが記載されたファイルを取得
$ cat /etc/debian_version
12.0

パッケージ管理を行うaptパッケージを最新状態にします。

# aptをアップデート
$ sudo apt update

ダウンロード済のパッケージを最新版に更新します。

# インストールしているパッケージをアップデート
$ sudo apt upgrade

再度、バージョンの確認を行います。

$ cat /etc/debian_version
12.1

root権限にパスワードを設定

root権限にパスワードを設定しないとセキュリティ上問題があるので、パスワードを設定します。

# rootユーザになる
$ sudo su -

# パスワードの設定
# passwd
New password:
Retype new password:
passwd: password updated successfully

# ログアウトする
# exit

デーモンの設定

DebianではOSが最初に起動するプログラム(デーモン)がinitとなっています。initの欠点を克服するように設計されたsystemdに変更する必要があります。

デーモンの確認を行います。

$ ps -aux

PIDが1となるCOMMANDを確認してください。
/initとなっていると思います。
一応ファイルも確認します。

ls -l /init

こちらも/initとなっていると思います。

systemdをデーモンに登録します。
wsl.confファイルを作成します。

# rootユーザーに切り替える
$ sudo su

# wsl.confを作成する
# vi /etc/wsl.conf

viの使い方は独特です。vimを使う場合はダウンロードが必要です。
下記を入力してください。

[boot]
systemd=true
# rootユーザーからログアウトします
# exit

# wslからもログアウトします
$ exit
# wslを更新します
> wsl --update

再度wslにログインしプロセスを確認します。

$ ps -aux

/sbin/initとなっていると思います。
ファイルも確認します。

$ ls -l /sbin/init

/sbin/init -> /lib/systemd/systemdになっていると思います。

必要なパッケージをインストール

sudo apt install -y rsync bc openssh-client curl emacs-mozc-bin libgl1 libxcb-*

さいごに

他にも、Vimのインストール、localeの設定などありましたが割愛しました。
さらに必要な設定がありましたらコメントください。
最後まで読んでいただきありがとうございました。

Discussion