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

#

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

# 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もここにインストールします。

exitして、

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

[エラー] Sub-process /usr/bin/dpkg returned an error code (1)

エラーになった
dpkg: error processing package mysql-server (–configure):
dependency problems – leaving unconfigured
Errors were encountered while processing:
mysql-server-8.0
mysql-server
ので、
$ 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

エラーになったので、
$ 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
mysql Ver 8.0.20-Oubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

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

mysql>

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

$ sudo apt update
$ sudo apt install mysql-client
必要なら
$ sudo apt install mysql-server

サーバー起動
$ sudo service mysql start

初期化
$ sudo mysqld –initialize

初期ルートパスを所得
$ grep ‘temporary password’ /var/log/mysql/error.log
このパスワードを使って、rootパスワードを変更していく。
何も聞かれないので、

以下に従い、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!

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

設定ファイルは CentOS であれば /etc/my.cnf です。 [mysqld] 節に次のものを追加します。

[mysqld]
…(略)
character-set-server = utf8
default_password_lifetime = 0

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

①以下のコマンドで今の認証の内容をチェックします。
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

パスワード認証を有効にするため以下のコマンドでパスワードを設定します。
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘********’;
以下のコマンドで有効にします。

mysql> FLUSH PRIVILEGES;
mysql> exit;

以降mysqlコマンドを使用するときはrootパスワードを入力します。
$ sudo mysql -u root -p

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/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/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

root
********

http://localhost/phpmyadmin

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

WordPressをインストール
http://localhost/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/ 参照