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

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

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

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 をいれました(玉砕)

悪いことは言わないので Ubuntu 20.04 を WSL1 で使うのはやめましょう…
(新規インストールだと MySQL が使えないのはつらい)

WSL 側で修正予定らしいので早く適用されることを祈ります

コメント