WSL

WSL2 Debian10にPHP7.4をインストールする為の思考錯誤とかの記録

Debianのロゴ

GAEがPHP7.4をサポートしたそうな。
なので、これからつくるサービスはせっかくなのでPHP7.4でやってみようと。

そして、GAEはLinux・ディストリビューションのDebianで動いていると。
開発環境はWindowsなので、話題のWSLを使ってDebianを構築、そしてそこにPHP7.4をインストールしてみる。

すんなりいくと思ったら、Ubuntu でも同じ「Debian系」だからと思って参考にしてたら全然うまくいきませんでした。
そのあたりの記録がてら、記しておこうと思います。

環境

  • ホストOS: WIndows10 Pro
  • ゲストOS: WSL2 Debian 10.7
    2021/01/15 時点で、WSLを設定し、Microsoft Store からインストールして設定。

Debianのバージョンは

cat /etc/debian_version

にて確認。

結論

下記ページの通りでいけた。
How To Install PHP 7.4 on Debian 10 / Debian 9

もう少し突っ込んで見たら、PPAは基本的にUbuntuのための非公式パッケージ保管場所になるんだなと。
UbuntuもDebian系になるので、非常に似てはいるのだけれどやっぱり違ううんだなー。

https://wiki.debian.org/DontBreakDebian/
上記のdebian公式でもPPAはFrankenDebianを作ることになるリポジトリとされてる。
割れたコップの写真が味わい深い。。。

FrankenDebianとは日本語で言うと、改悪Debian?
混ぜるな危険、ということなのでしょう。

debというパッケージは同じなので無理やり導入は可能だけども、パッケージが混在してしまうと管理できなくなり、破綻するので、DebianならDebian用に用意されたパッケージを導入しなければいけない、という事ですね。

Linuxのコマンドの意味も、きちんと把握できていない為、そのコマンドの役割をおさえつつ進めてみる。

sudo apt update

sudoを頭につけて、スーパーユーザー(管理者権限的な)で実行すると。
sudo は Super-user Do のこと。

最初は構築時に設定した、管理者パスワードを入力する事になる。

そして、RedHat系ならパッケージ管理は「yum」コマンド。
そしてUbuntuなどDebian系は「apt-cache」と「apt-get」コマンド。

けれど、Ubuntu 14.04から「apt-get」じゃなくて「apt」コマンドが推奨されているとのこと。
なるほど。
この辺りはDebianで同じかな?参考にしたページもきっとそれでaptコマンドを記してる筈。

updateはaptにアクセスし、ソフトウェアの更新がないかを調べ、その”更新リスト”をローカルに落としてくる作業です。
なので、実際にソフトウエアを更新するわけではないという事ですね。
ソフトウエアをインストールしたら、それに関する情報を書いたテキストも取得してくると思うので、それをベースに見ているのかな?

sudo apt upgrade -y && sudo reboot

upgrade で、updateにて更新したリストを元に、実際にソフトウェアのデータをアップデートする、と。
aptが自体がコマンドで、Debian系のディストリビューションに使われているパッケージ管理用コマンド、という事ですね。

オプションの -y は途中で聞かれる(Yes/No)にて、Yesを選択してね、というのを省略するとき用っぽい。

んで、 sudo reboot で再起動すると。

sudo apt -y install lsb-release apt-transport-https ca-certificates 

Download and store PPA repository in a file on your Debian Server/Desktop. But first, download GPG key.

PPA repository をこれkらダウンロードするんだけど、最初はGPG Keyを入れるぜよ、と。

Linux Standard Base (http://www.linuxbase.org/) は Linux 用に書かれた サードパーティアプリケーションが依存できる標準的な中核システムです。
lsb-release コマンドは、利用中の Linux ディストリビューションおよび Linux Standard Base との互換性の識別を補助するためのシンプルなツール です。 要求されたメタパッケージがインストールされていなければ、LSB との適合性は 報告されません。
LSB パッケージによる利用を意図していますが、このコマンドは、純粋な Debian と Debian 派生ディストリビューションをプログラム的に区別するため にも役立ちます。

This package enables the usage of ‘deb https://foo distro main’ lines in the /etc/apt/sources.list so that all package managers using the libapt-pkg library can access metadata and packages available in sources accessible over https (Hypertext Transfer Protocol Secure).
This transport supports server as well as client authentication with certificates.

このパッケージによって、/etc/apt/sources.list にあるパッケージリストのデータをhttpsによってアクセスできるようになりますよ、という事でしょうか?

  • ca-certificates
    パッケージ: ca-certificates
    >このパッケージには SSL ベースのアプリケーションが SSL 接続時の認証で接続先 を確認するための CA 証明書の PEM ファイルが含まれています。
    特に、Debian のインフラが使用する証明機関や Mozilla ブラウザに同梱の証明書 の証明機関も含まれています。
    Debian は、このパッケージに含まれる証明書の証明機関が信頼できると評価されて いるものなのか、RFC 3647 に準拠しているのかについて肯定も否定もできません。 これらの証明書を使う責任は、各システムの管理者にあるという点に留意してくだ さい。

上記の引用文、難しいですね。
CA証明書 【Certificate Authority (CA) certificate】は 電子証明書を発行する認証局自身の公開鍵が含まれた電子証明書。 認証局が発行した電子証明書の検証を行う場合にサーバやクライアントにインストールされている必要がある、と。

調べたら調べるほど、難解な用語が出てきます。
SSL/TLSで接続する際にはCA証明書が必要で、今後接続する事になるであろう対象先の、必要な証明書を一通り集めておくけれどそれらの証明書が適正かどうかはまでは分かりませんよ、という事なんでしょうね。

GPGについても結構奥深そうなので、このあたりもチェックしていきたいと思います。
その際、下記記事とか参考になりそう。
GPGについて学んだことを整理してみる

sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

wgetコマンドは URLを使用してファイルをダウンロードするコマンド、であると。
wgetコマンドもすごい基本的なコマンドのように感じますが最初インストールしないとなんですね。

-O オプションは –output-file=ファイル名 かな?
ダウンロードしてくる先は https://packages.sury.org/php/apt.gpg ですね。
これは何をダウンロードしてきているのでしょう?

apt.gpg が置いてある https://packages.sury.org/php/ へアクセスするとファイルの一覧が見て取れます。
https://packages.sury.org/php/

GPGファイル形式は、ファイル暗号化ツールであるGNU Privacy Guard(GnuPG)で作成されたファイル。
GPGファイルには、 公開セキュリティキーと暗号化されたトークンが含まれまていると。

更に上の階層の https://packages.sury.org/ も覗いてみると

../
apache2/                                           17-Jul-2020 18:49                   -
bind/                                              17-Jul-2020 18:49                   -
bind-dev/                                          17-Jul-2020 18:49                   -
bind-esv/                                          17-Jul-2020 18:49                   -
bird/                                              18-Nov-2019 16:41                   -
coccinelle/                                        12-May-2020 11:16                   -
cppcheck/                                          17-Jul-2020 18:49                   -
frr/                                               17-Jul-2020 18:49                   -
kea/                                               18-Nov-2019 16:41                   -
lmdb/                                              25-Mar-2020 14:37                   -
nginx/                                             17-Jul-2020 18:49                   -
nginx-mainline/                                    17-Jul-2020 18:49                   -
php/                                               04-Aug-2020 15:00                   -
qbittorrent/                                       18-Nov-2019 16:41                   -
softhsm2/                                          17-Jul-2020 18:49                   -
wireguard/                                         18-Nov-2019 16:41                   -
error403.html                                      22-Dec-2019 08:33                1083
report.html                                        16-Jan-2021 00:02              991152

phpの他にも、こんなリストがありました。
更に、本ドメインの sury.org へアクセスすると下記ページへ。

https://deb.sury.org/

orgなので、団体?な感もしますがリンクされているTwitterアカウント見ると、個人っぽくも見える…

こういった方の活動で、便利な構築ライフを行う事ができるのですね。

README.txt もあるので覗いてみると、

#!/bin/bash
# To add this repository please do:

if [ "$(whoami)" != "root" ]; then
    SUDO=sudo
fi

${SUDO} apt-get -y install apt-transport-https lsb-release ca-certificates curl
${SUDO} wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
${SUDO} sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
${SUDO} apt-get update

こんな内容が書かれてました。
「こんな風に利用してね」という事なのかな?

そして、次は下記コマンドです。

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

echoは画面に文字列や数値、変数を表示するコマンド。
それが、なぜこのタイミングで。。。?となりましたが

Then add repository.

このコマンドで、リポジトリを追加しているという事なのですね。
このコマンドの途中に | があって、これはパイプラインであろうと。
小さなコマンドをこのパイプラインで連結して、複数のコマンドを一つのコマンドのようにする事ができるんだな、と。

ここでは echo と tee コマンドが使われているんだな、と。

teeコマンドは
「tee」は標準入力から受け取った内容を、標準出力とファイルに書き出すコマンドです。
ファイルへの保存と標準出力への出力を同時に行ったり、複数のファイルに出力したりすることができるんだな、と。
/etc/apt/sources.list.d/php.list のファイルに、つなげた内容を書き出しているという事なのでしょう。

cat で上記フィルを見たら

deb https://packages.sury.org/php/ buster main

と、なっておりました。

$(lsb_release -sc)

は、buster になってるんですね。
これは lsb_release コマンドを使ってたんですね。

-sc はその中のCodenameを出力するん「c」で、それを短く出力sがついたということですな。
lsb_release だけだと、何も出力されなくて、-a をつけないとダメみたい。

No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
sudo apt update

そして、これでまたアップデートリストを更新して、いよいよPHP7.4のダウンロード!
途中の(Yes/No)の確認でYesをするYをつけて、実行!

sudo apt -y install php7.4

無事、インストールされました!
コマンドもコピペで済ませがちですが、ちゃんと把握しなきゃですね。
また、このようなパッケージを作っていただいている方にも感謝です!

Linuxはまだまだ勉強中ですが、下記書籍が本当に入門書として分かりやすいです…!
コマンドの例の頭に何で#がつくの?というところから説明してあったりします。

こちら慌てずしっかり知識を身に付けていきたいと思います。

%d人のブロガーが「いいね」をつけました。