WSL1でUbuntu 20.04環境を作りたかった話

この記事は最終更新日から1年以上が経過しています。情報が古くなっている可能性があります。

WSL1 で Ubuntu 20.04 がうまく動かない件(参考)は知っていたけど、LAMP 環境ならインストールできるだろうとたかをくくった結果 MySQL がインストールできなかった上環境ぶっ壊れたのでやめましょう(やめましょう)。
結果的にうまくいかなかったので、試さないほうが無難です。

この記事はコマンドメモなので説明は省きます。
また全体的にろれつが回っていない記事です。参考にしないでください。

Sponsored Link

WSL (Ubuntu) のインストール

Windows の機能の有効化してWindowsストアから Ubuntu をインストールする。
Ubuntu 20.04 は WSL だと glibc 周りの問題があるらしい(参考)けどそこまで影響範囲が大きくないと信じて普通にいれる(今「Ubuntu 18.04 LTS」と書かれている方をいれてしまうと後でアプデとか大変になりそうというのも)。

root でログインしたいので初回起動時にユーザー名を訊かれたときに root を入力する(参考
そのユーザーは存在するとか怒られるけどそのままウインドウをそっ閉じしてもう一度開き直すとログインできてるはず。

とりあえずおまじないで

apt update -y && apt upgrade -y

を実行しておく(重要)。

Ubuntu を日本語化する

デフォルトだと英語になっているので、これを日本語化する(参考)。

apt install -y language-pack-ja
update-locale LANG=ja_JP.UTF8

終わったら Ubuntu を再起動して、

dpkg-reconfigure tzdata

これで日本語化は終わり。

LAMP 環境を整備する

PHP のインストール

Ubuntu 20.04 ではインストールされる PHP がデフォルトで 7.4 になったので、もう PPA からいちいちリポジトリを追加する必要はない(7.5 が出たときはどうなるか微妙だけど)。
拡張機能もあとからインストールするのだるいので全部入れとく。

apt install php php-common php-apcu php-curl php-gd php-imagick php-intl php-json php-mbstring php-mysql php-opcache php-xml php-zip

Apache のインストール

なんでかしらないけど PHP を入れたタイミングで勝手に Apache が入るっぽい(もしくは標準でインストールされている)ので、別途インストールする必要はなさそう。
ただサービスは起動してないので、

service apache2 start

としてあげるが、ファイアウォールが開いて無いので Windows ファイアウォールが開いた上でエラーで落ちる。アクセスを許可してあげた上でもう一度実行するといける。

http://localhost/ にアクセスして例のデフォルトページが表示されれば OK。

適当に /var/www/html/index.php として、

<?php phpinfo();

とだけ書いたファイルをおいて、PHP の各種情報が表示されれば OK。
テキストで表示される場合は Apache の PHP 用拡張が有効化されてないので適宜 a2enmod する(ちなみに PHP をあえて先に入れたのは先に入れとくと勝手に有効化されるっぽいからというのが理由)。

MySQL のインストール

Ubuntu 20.04 ではデフォルトでインストールされるバージョンが 5.7 から 8.0 になってる。

apt install mysql-server

と普通にインストールするが、なぜか

dpkg: 依存関係の問題により mysql-server の設定ができません:
 mysql-server は以下に依存 (depends) します: mysql-server-8.0 ...しかし:
  パッケージ mysql-server-8.0 はまだ設定されていません。

dpkg: パッケージ mysql-server の処理中にエラーが発生しました (--configure):
 依存関係の問題 - 設定を見送ります
libcgi-pm-perl (4.46-1) を設定しています ...
エラーメッセージは前の失敗から続くエラーであることを示しているので、レポートは書き込まれません。
                                                                                                
libhtml-template-perl (2.97-1) を設定しています ...
libcgi-fast-perl (1:2.15-1) を設定しています ...
systemd (245.4-4ubuntu3.1) のトリガを処理しています ...
man-db (2.9.1-1) のトリガを処理しています ...
libc-bin (2.31-0ubuntu9) のトリガを処理しています ...
処理中にエラーが発生しました:
 mysql-server-8.0
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

とでて失敗する(かなしい)。
「mysql-server は以下に依存 (depends) します: mysql-server-8.0 …しかし: パッケージ mysql-server-8.0 はまだ設定されていません」って進次郎構文かよ…

dpkg --configure -a

を実行すると、

mysql-server-8.0 (8.0.20-0ubuntu0.20.04.1) を設定しています ...
invoke-rc.d: could not determine current runlevel
 * Stopping MySQL database server mysqld                                                     [ OK ]
Renaming removed key_buffer and myisam-recover options (if present)
/proc/net/unix が開けません: そのようなファイルやディレクトリはありません
ファイルをstatできません /proc/1/fd/5: 許可されていない操作です
ファイルをstatできません /proc/1/fd/10: 許可されていない操作です
ファイルをstatできません /proc/1/fd/6: 許可されていない操作です
ファイルをstatできません /proc/8179/fd/7: 許可されていない操作です
ファイルをstatできません /proc/8179/fd/10: 許可されていない操作です
ファイルをstatできません /proc/8179/fd/5: 許可されていない操作です
ファイルをstatできません /proc/20751/fd/10: 許可されていない操作です
ファイルをstatできません /proc/20752/fd/10: 許可されていない操作です
ファイルをstatできません /proc/20753/fd/10: 許可されていない操作です
ファイルをstatできません /proc/20754/fd/10: 許可されていない操作です
ファイルをstatできません /proc/20755/fd/10: 許可されていない操作です
ファイルをstatできません /proc/20788/fd/10: 許可されていない操作です
ファイルをstatできません /proc/20789/fd/10: 許可されていない操作です
ファイルをstatできません /proc/20790/fd/10: 許可されていない操作です
mysqld will log errors to /var/log/mysql/error.log
mysqld is running as pid 22091
sleep: 実時間の時計を読み取ることができません: 無効な引数です
dpkg: パッケージ mysql-server-8.0 の処理中にエラーが発生しました (--configure):
 installed mysql-server-8.0 package post-installation script subprocess returned error exit status 1
dpkg: 依存関係の問題により mysql-server の設定ができません:
 mysql-server は以下に依存 (depends) します: mysql-server-8.0 ...しかし:
  パッケージ mysql-server-8.0 はまだ設定されていません。

dpkg: パッケージ mysql-server の処理中にエラーが発生しました (--configure):
 依存関係の問題 - 設定を見送ります
処理中にエラーが発生しました:
 mysql-server-8.0
 mysql-server

となるのでやっぱり glibc の不具合が影響しているっぽい、無念…。

末路

glibc 2.31 が WSL1 非互換のシステムコールを利用していることでインストールに失敗していることは「sleep: 実時間の時計を読み取ることができません: 無効な引数です」というエラーメッセージからして自明。
ダメ元で WSL1 非互換のシステムコールが使われる前の glibc (libc6)・libc-bin 2.30 を Ubuntu 19.10 用の deb パッケージを無理やり dpkg -i でインストールしたりしてみたけど、思ったより依存関係が多かったらしく一筋縄ではいかず(ダウングレード自体はできた)、戻そうとするも既に依存関係がぶっ壊れて MySQL すらインストールできなかった。
結局潔くアンインストールして Ubuntu 18.04 LTS を入れた。玉砕。

2020年6月現在では、Ubuntu 20.04 を WSL1 で使うのはまだ早い。新規インストールだと MySQL が使えないのはつらい。
WSL 側で修正予定らしいので早く適用されることを祈る。

コメント