WindowsでLinux(WSL, LAMP, WordPress)

Windows

WSLとは?

WSLとはWindows Subsystem for Linuxのこと。仮想OSとかエミュレーターではなく、ネイティブで動作するのが特徴。ここで登場するLinuxはUbuntuです。

≪前編≫ Ubuntu Apache MySQL PHP

Windowsメニュー右にある検索窓から”con”と入力してコントロールパネルを検索し起動します。

コントロールパネルから「プログラム」→「プログラムと機能」を開き、左ペインの「Windowsの機能の有効化または無効化」をクリックする。

[Linux 用 Windows サブシステム]にチェックを入れ、「OK」をクリックする。

「今すぐ再起動」をクリックして、PCを再起動する。

Edgeで、「https://aka.ms/store/

Microsoft Store
「WindowsでLinuxを実行する」
「Windows Subsystem for Linux (WSL) に Linux ディストリビューション
をインストールして、実行できます。」
から、Ubuntu をインストール

Ubuntu のウィンドウが開くので、

user:*******
password:********

$ sudo su –
pass

#

管理者権限で入れました。


Ubuntu をしばらく起動していなかった時は
# sudo apt update
を行ってから

# sudo apt install apache2

# /etc/apache2/apache2.conf
このファイルの末尾に以下の記述を追加します。

AcceptFilter https none
AcceptFilter http none

ファイルを編集したあと以下のコマンドでApacheを再起動します。

# service apache2 restart


ちなみにApacheを停止する場合は以下を実行します。
# service apache2 stop

Edgeで、「http://localhost」が表示されればOK

ApacheのWebサイトを表示するルートフォルダは以下です。
/var/www/html/
ここにページを表示するためのファイルを置きます。
WordPressもここにインストールします。

最初はindex.htmlが/var/www/htmlに入っているので、
cd /var/www/html
rm index.html
で削除しておく。

$ sudo apt install mysql-server
ディスクスペース消費を確認してくるので”y”を入力します。

dpkg: error processing package mysql-server (–configure):
dependency problems – leaving unconfigured
Setting up libcgi-fast-perl (1:2.15-1) …
No apport report written because the error message indicates its a followup error from a previous failure.
Processing triggers for man-db (2.10.2-1) …
Processing triggers for libc-bin (2.35-0ubuntu3.1) …
Errors were encountered while processing:
mysql-server-8.0
mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
エラーになったので、

$ sudo apt remove mysql-server
$ sudo apt autoremove
$ sudo apt install mysql-server

$ sudo apt remove mysql-server-8.0
$ sudo apt autoremove
$ sudo apt install mysql-server-8.0

Errors were encountered while processing:
mysql-server-8.0
E: Sub-process /usr/bin/dpkg returned an error code (1)

エラーになったので、
$ sudo dpkg –-configure –a

エラーになったので、
Ubuntuでは/var/lib/dpkg/info配下に、パッケージのインストール前、インストール後に実行するためのスクリプトファイルや、その他パッケージに関する情報を含むファイルが置かれています。そしてこのディレクトリにある問題のパッケージ(ここではmysql-server-5.7)のpreinstとprerm(インストール前用スクリプトファイル)、postinstとpostrm(インストール後用スクリプトファイル)の削除します。その後でapt updateやapt upgradeが正常に実行できるようになりました。
具体的には、以下のコマンドを実行します。
$ cd /var/lib/dpkg/info
$ sudo mv mysql-server-8.0.post* /tmp
$ sudo mv mysql-server-8.0.pre* /tmp
$ sudo mv mysql-server.post* /tmp
$ sudo mv mysql-server.pre* /tmp

$ sudo su –

# apt update
# apt upgrade

上記は時間かかります。
インストールができたらMySQLのバージョンを確認します。
$ mysql –version ←ハイフン2個
mysql Ver 8.0.40-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

MySQLを起動して動作確認します。
# service mysql start
# mysql

エラーになったら、やり直す。

$ sudo apt update
$ sudo apt install mysql-client
$ sudo apt install mysql-server

サーバー起動
$ sudo service mysql start

初期化
$ sudo mysqld –-initialize ←ハイフン2個

$ sudo grep mysql /etc/passwd
mysql:x:108:118:MySQL Server,,,:/nonexistent:/bin/false

/nonexistent がホームディレクトリに設定されています。
/var/lib/mysql をホームディレクトリとして設定する場合:
$ sudo usermod -d /var/lib/mysql mysql

/var/lib/mysql ディレクトリの所有権が mysql ユーザーになっているか確認し、適切に設定します。
$ sudo chown -R mysql:mysql /var/lib/mysql

MySQL サーバーを再起動して動作を確認します。
$ sudo service mysql restart

以下に従い、rootパスワードを変更する。
************************************************************

# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 初期パスワードを入力する→********

The existing password for the user account root has expired. Please set a new password.

New password: 新しいパスワードを入力する→********

Re-enter new password: 再度同じ新しいパスワードを入力する→********

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password: ポリシーに沿った新しいパスワードを入力→********

Re-enter new password: 再度新しいパスワードを入力する→********

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user, a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
‘localhost’. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named ‘test’ that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y Success.

– Removing privileges on test database…
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

************************************************************
≪どうしてもパスワード認証できない場合≫

MySQLサーバーを停止します。
$ sudo service mysql stop
$ sudo service mysql status

MySQLをセーフモードで起動する
$ sudo mysqld_safe –skip-grant-tables &

セーフモードの状態でMySQLに接続します。
$ mysql -u root

権限データベースを選択します。
mysql> USE mysql;

rootユーザーのパスワードをリセットします。your_new_passwordを新しいパスワードに置き換えてください。
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘your_new_password’;
mysql> FLUSH PRIVILEGES;
mysql> exit;

************************************************************
≪パスワードがリセットできない場合の確認事項≫

MySQLの認証プラグインを確認する 最近のMySQLでは、rootユーザーがauth_socketプラグインを使用している可能性があります。この場合、ソケット接続のみが許可され、パスワード認証が無効になっていることがあります。
現在の認証方式を確認するには、セーフモードで以下を実行してください。
mysql> SELECT user, host, plugin FROM mysql.user;
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘your_new_password’;
mysql> UPDATE user SET authentication_string=PASSWORD(‘your_new_password’) WHERE User=’root’ AND Host=’localhost’;
mysql> UPDATE user SET Password=PASSWORD(‘your_new_password’) WHERE User=’root’ AND Host=’localhost’;

変更を反映させます。
mysql> FLUSH PRIVILEGES;
mysql> exit;

************************************************************

以降mysqlコマンドを使用するときはrootパスワードを入力します。
$ sudo mysql -u root -p
WordPress用データベース「wp」を作成、権限を「user」に与える。
mysql> grant all on *.* to root@localhost identified by ‘password′;
mysql> grant all on *.* to root@’%’ identified by ‘password’;
mysql> create database wp;
mysql> grant all on wp.* to user@localhost identified by ‘password’;
mysql> flush privileges;
mysql> exit

PHPをインストールする。
$ sudo apt install php libapache2-mod-php php-mysql
$ sudo service apache2 restart

ApacheのWebサイトを表示するルートフォルダに簡単なPHPコードが書かれたファイルを置いてブラウザで表示します。

viエディタでPHPファイルを作成します。

$ sudo vi /var/www/html/info.php
エディタが起動したら以下の内容を記述してファイルを保存します。


ファイルが保存できたらブラウザで表示してみます。

http://localhost/info.php
PHPの情報が表示されれば正しく動作しています。

動作確認できればこのファイルはいらないので削除しておきましょう。
$ sudo rm /var/www/html/info.php

次にPHPでマルチバイト文字を扱うためと、各ロケールに対応したプログラミングを行えるようにするため以下のパッケージをインストールします。
$ sudo apt install php-mbstring

PHP拡張モジュールであるmbstringを有効にするため以下のコマンドを実行します。
$ sudo phpenmod mbstring

そしてApacheを再起動します。
$ sudo service apache2 restart

phpMyAdminをインストールする
phpMyAdminを以下のコマンドでインストールします。

$ sudo apt install phpmyadmin

Webサーバーを選択する画面が表示されるとapache2にカーソルを持っていきスペースキーで*印を付けて選択します。TABキーで、OKにあわせて、ENTER。

データベースの設定画面が表示されるとそのままYesを選択してEnterキーを押します。

アプリケーションパスワードの設定画面が表示されると任意のパスワードを入力し、TABキーで、OKにあわせて、ENTER。

********

インストールが完了したら、以下をブラウザのアドレスバーに入力してphpMyAdminにアクセスしてください。

http://localhost:8080/phpmyadmin
phpMyAdminのログイン画面が表示されます。

MySQLインストール時に設定したrootパスワードを使ってrootユーザーでログインします。
ログインできると画面が表示されます。
以上でWSLへのLAMP環境の作成は完了です。

エラーの時は・・・

「みんなこの問題に遭遇するんだ。一度WSLを閉じて再起動し、 sudo service mysql start, sudo dpkg –configure -a を実行すると完了するよ」
という感じに見受けられます。

ということで、

WSLを再起動
sudo service mysql start を実行
sudo dpkg –configure -a を実行
してみましょう。それでどうでしょう?

WSLを再起動
$ sudo service mysql start
$ sudo mysql -u root -p

WSLを再起動
$ sudo dpkg –configure -a
WSLを再起動
http://localhost:8080/phpmyadmin

エラーになったので、
config.inc.phpを探す。
/etc/phpmyadmin/config.inc.php
にあることがわかる。

# vi /etc/phpmyadmin/config.inc.php

https://codeaid.jp/blog/wsl-lamp-wp1/ 参照

≪後編≫ WordPress phpMyAdmin

WordPressの最新バージョンを公式サイトよりダウンロードします。
セキュリティソフトを外して、
# cd /var/www/html
# wget https://ja.wordpress.org/latest-ja.tar.gz
# tar xvzf latest-ja.tar.gz
wordpressフォルダ内にデフォルトで含まれているサンプルの設定ファイルをコピーして設定ファイルを作成します。
# cp ./wordpress/wp-config-sample.php ./wordpress/wp-config.php
wordpressフォルダとファイルの所有権をApacheの「www-data」に変更します。
# chown -R www-data:www-data /var/www/html/wordpress
テーマやプラグインが変更できるようにwordpress配下の「wp-content」ディレクトリのグループに書き込み権限を追加します。
# chmod g+w /var/www/html/wordpress/wp-content
テーマとプラグインのディレクトリ配下のすべてのファイルにApacheの書き込み権限を追加します。
# chmod -R g+w /var/www/html/wordpress/wp-content/themes
# chmod -R g+w /var/www/html/wordpress/wp-content/plugins

前編でインストールしたphpMyAdminコンソールを使ってデータベースを作成します。

# service mysql start
# service apache2 restart
# apt install phpmyadmin

http://localhost:8080/phpmyadmin

設定ファイルを作成
vi /etc/apache2/conf-available/phpmyadmin.conf

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php

<IfModule mod_php7.c>
<FilesMatch “.+\.php$”>
SetHandler application/x-httpd-php
</FilesMatch>
</IfModule>

<IfModule mod_php8.c>
<FilesMatch “.+\.php$”>
SetHandler application/x-httpd-php
</FilesMatch>
</IfModule>

<IfModule !mod_php.c>
<FilesMatch “.+\.php$”>
SetHandler none
</FilesMatch>
</IfModule>

<RequireAny>
Require all granted
</RequireAny>
</Directory>

<Directory /usr/share/phpmyadmin/setup>
<RequireAny>
Require all granted
</RequireAny>
</Directory>

<Directory /usr/share/phpmyadmin/libraries>
<RequireAny>
Require all granted
</RequireAny>
</Directory>

設定ファイルを有効化
$ sudo ln -s /etc/apache2/conf-available/phpmyadmin.conf /etc/apache2/conf-enabled/

—————————————————
phpMyAdminへrootでログインして”wordpress”という名前でデータベースを作成します。(データベース名は任意でいいです。ここでは”wordpress”で例として作成しています)
phpMyAdmin画面でデータベースタブを選択します。
作成するデータベース名を入力し、utf8_general_ciを選択して作成します。

WordPressの設定ファイルを修正します。
# vi /var/www/html/wordpress/wp-config.php

/** WordPress のためのデータベース名 */
define(‘DB_NAME’, ‘wordpress’);
/** MySQL データベースのユーザー名 */
define(‘DB_USER’, ‘user’);
/** MySQL データベースのパスワード */
define(‘DB_PASSWORD’, ‘password’);
・・・
define(‘FS_METHOD’,’direct’);
先程作成したWordPressで使うデータベース名とユーザー名とパスワードを入力し、設定ファイル下部にテーマやプラグインのアップデートが直接ダウンロードできるよう
「define(‘FS_METHOD’,’direct’);」
を記述して保存します。
—————————————————

WordPressをインストール
http://localhost:8080/wordpress

サイトのタイトル:********
ユーザー名:********
パスワード:********
メールアドレス:********@********

まとめ
作成した環境でWordPressのテーマやプラグインを開発する場合などでファイルを書き換えるときは、WSLからCLIでコマンド操作するのが基本的な方法になります。

今のところWSLからWindowsのファイルへアクセスできますが、WindowsからWSL環境へアクセスできません。

例えば、プラグインの開発作業で動作確認しながらファイル修正するような作業をするには、Windows環境で修正したファイルをWSLのUbuntuでWordPress環境のwp-content/pluginsフォルダ配下にファイルをコピーする操作をします。

WSLからWindowsのファイルへは、「/mnt/c」からCドライブへアクセスできます。

「/mnt」はWindowsシステムがマウントしているドライブが表示されますが、USBやネットワークドライブは表示されないようです。

今後はWindowsからWSL環境のファイルへアクセスできるようになるという情報も出ているので、そうなればWidnowsから直接WordPressのテーマやプラグインファイルを直接修正できるようになります。

それから、WordPressの更新、テーマやプラグインのインストール・更新のときにもし以下のようなSSLでエラーが発生した場合

curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to ubuntu.com:443
Windowsにセキュリティソフトを入れていれば、それが原因でこのエラーが発生します。

一度セキュリティソフトを停止してから再度実行してください。

前編にも記載しましたが、WSLのUbuntuはsystemctlコマンドが使えないためこれによる自動起動設定ができません。

利用する際はコマンド操作でMySQLとApacheを起動してください。

https://codeaid.jp/blog/wsl-lamp-wp2/ 参照

コメント

  1. Hi there, I enjoy reasing through your article post.
    I wanted to write a little comment to support you. http://Boyarka-inform.com/

    • Благодаря ви за коментара. Ако е възможно, моля, публикувайте такива коментари в съответните статии. моля