01d. 開発環境構築(WSL2+Ubuntu18.04+Docker)(備忘録)(作成中)

前回WSL(Windows Subsystem for Linux)のUbuntuを使用してRails環境を構築したところ、Mac使ってる人はスムーズに構築できたのに対して、WSLでは少々手こずりました。やっぱり開発するならMacかなと思い始めた矢先、Windows10 Insider PreviewWSL2が使用できるようになりました!WSL1に比べてLinuxとの互換性が高く、Dockerも動かせるとのことで、もう暫くWindowsでもいいかなと揺れてます。

Windows 10 Insider Preview のインストール

WSL2は、Build 18917以降で利用可能ですが、2019/06/29時点では正式リリースはされていません。Windows Insider Programへ参加して、Windows10 Insider Previewをインストールすることで、Build 18917以降(開発中のバージョン)を利用できるようになります。

PCの動作が不安定になる可能性もあるので(開発中のバージョンなので)、どうしても今すぐDockerが使いたいんだー!という人以外は、正式リリースを待った方がいいと思います。

Windows 10 Insider Preview の開始方法

Windows Subsystem for Linuxの有効化

Build番号の確認

PowerShellから下記コマンドでBuild 18917以降になっていることを確認します。

PS C:\> systeminfo
ホスト名:               DEV01
OS 名:                  Microsoft Windows 10 Home Insider Preview
OS バージョン:          10.0.18922 N/A ビルド 18922

 

Windows Subsystem for Linuxの有効化

管理者としてPowerShellを開き、下記コマンドを実行後、Windowsを再起動します。
※Microsoft Storeからもインストールできますが、私はコマンドラインからの実行が好きです。

PS C:\> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux            
Path          :
Online        : True
RestartNeeded : False

Windows Subsystem for Linuxの有効化

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

管理者としてPowerShellを開き、下記コマンドを実行します。

# Ubuntuディストリビューション(18.04)のダウンロード
PS C:\> Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu.appx -UseBasicParsing

# Ubuntuディストリビューションのインストール
PS C:\> .\Ubuntu.appx

インストール画面が起動後、ユーザ名とパスワードを入力するとUbuntuが起動します。

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: user01				# ユーザ名を入力
Enter new UNIX password:					# パスワードを入力
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

user01@dev01:~$ exit						# 抜ける

WSL用ディストリビューションのダウンロード

WSL2用に変換

PowerShellから下記コマンドを実行します。

PS C:\> wsl -l -v							# WSLのバージョンを確認
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         1

PS C:\> wsl --set-version Ubuntu-18.04 2		# UbuntuのディストリビューションをWSL2用に変換
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

PS C:\> wsl -l -v							# WSL2に変換されたことを確認
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
PS C:\>

参考
Windows10 20H1で導入された「WSL2」を使用する方法
「WSL2」へのバージョンアップでLinux互換環境はどう変わるのか?

ssh設定

Ubuntu上での操作

WSL2でLinuxとの互換性を向上させたり、Visual Studio Codeなどの使い勝手のよいプロダクトを生み出したりと、個人的なMicrosoftの評価は上がっているのですが、なぜターミナルはキー操作でコピペすらできないクソのままなのでしょうか?不思議で仕方ないですが、今まで通り、Teratermからssh接続できるようにしていきます。

$ ssh -V												# open-sshがインストールされていることを確認
OpenSSH_7.6p1 Ubuntu-4, OpenSSL 1.0.2n  7 Dec 2017
$ cd /etc/ssh											# /etc/sshディレクトリへ移動

# rsaは強度が弱いので、現時点では楕円曲線暗号のecdsaがベター(ローカル環境なので使わないですけど..)
$ sudo ssh-keygen -t ecdsa -N '' -f ssh_host_ecdsa_key		# keygenで秘密鍵、公開鍵を作成
Generating public/private ecdsa key pair.
Your identification has been saved in ssh_host_ecdsa_key.
Your public key has been saved in ssh_host_ecdsa_key.pub.
The key fingerprint is:
SHA256:19SWObm4YCiKrVMcMpWDcdSVNpwcrGRCYIt0+QKuweU root@dev01
The key's randomart image is:
+---[ECDSA 256]---+
| .+B=o =o+       |
|.+o== + O    . + |
|+ =..= o .  . B  |
|.ooE...  . o o o |
|.. +... S + o .  |
|.  oo. . o . .   |
|  ..o       .    |
|  ..             |
|  ..             |
+----[SHA256]-----+
$ ll
total 572
drwxr-xr-x  2 root root   4096 Jun 29 16:49 ./
drwxr-xr-x 87 root root   4096 Jun 29 16:31 ../
-rw-r--r--  1 root root 553122 Feb 10  2018 moduli
-rw-r--r--  1 root root   1580 Feb 10  2018 ssh_config
-rw-------  1 root root    227 Jun 29 16:49 ssh_host_ecdsa_key			# 公開鍵が作成されていることを確認
-rw-r--r--  1 root root    172 Jun 29 16:49 ssh_host_ecdsa_key.pub		# 秘密鍵が作成されていることを確認
-rw-r--r--  1 root root    338 Jul 26  2018 ssh_import_id
-rw-r--r--  1 root root   3262 Jul 26  2018 sshd_config

# sshdの設定
$ sudo vi sshd_config
$ diff sshd_config.org sshd_config
19c19
< #HostKey /etc/ssh/ssh_host_ecdsa_key
---
> HostKey /etc/ssh/ssh_host_ecdsa_key		# コメントを外す
56c56
< PasswordAuthentication no
---
> PasswordAuthentication yes					# パスワード認証を許可

$ sudo service ssh restart
 * Restarting OpenBSD Secure Shell server sshd                                                                   [ OK ]

$ ssh localhost								# ssh接続できることを確認
user01@localhost's password:
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.19.43-microsoft-standard x86_64)
  :
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.XX  netmask 255.255.255.0  broadcast 192.168.0.255	# IPアドレスを確認

 

Terateamから上記IPアドレスでssh接続

# sudoコマンド実施時、serviceコマンドについてはパスワード入力を省略できるよう追記
$ sudo visudo
    :
# Allow sudo without a password
user01	ALL=(ALL)	NOPASSWD: /usr/sbin/service
 
# ログイン時にsshが起動するよう追記
$ vi ~/.profile
    :
# ssh start
if ! service ssh status > /dev/null 2>&1 ; then
	sudo service ssh start > /dev/null 2>&1
fi
 
$ . ~/.profile					# .profile読み込み

WSL1の時のようにlocalhostでアクセスできればよいのですが、上記URLに記載されている下記内容により、現時点ではWindows側と異なるIPアドレスを持つので、WSL2のIPアドレスを指定してssh接続する必要があります(面倒だけど、UbuntuでIPアドレスを都度確認する必要あり)。

WSL1では、Win32側とネットワークを共有していたため同じIPアドレスを持ち、localhostでWin32側へのアクセスができた。WSL2では、Win32側と異なるIPアドレスを持つだけでなく、WSL2からWin32側へアクセスする場合には、Win32側の仮想内部ネットワーク側のIPアドレスにアクセスする必要がある。Microsoftは、「これは一時的なもので、修正する優先順位リストの中で非常に高いもの」として対策中であるということだ。

下記で「apt update」を実行したところ、上手くいきませんでした。Windows側とIPアドレスが別になっていることで、外部にアクセスできなくなっているようです(ウィルス対策ソフトのFW設定を外してもダメでした)。WSL1に戻すと外部(インターネット)にアクセスできるので、パッケージのインストール等はWSL1で実施して、Dockerを使用するところで再度WSL2に変換しようと思います。

パッケージの全更新

$ sudo apt update			# パッケージを管理しているDBを最新の状態に更新
$ sudo apt dist-upgrade		# インストールされているパッケージを全更新。追加でパッケージが必要になった場合もインストールしてくれる
$ sudo apt install build-essential	# gcc, gdb ...などの開発ツールをインストール

続きは別途記載していきます。

タイトルとURLをコピーしました