Ubuntu-server20.04にopenssl、apache2.4、php7.4をソースからビルドする。
今回の流れは大まかにOpenSSL、Apache Subversion、APR、APR-util、PCRE,、Apache2(httpd)、PHPの順です。適宜パッケージとビルドを使い分けていきます。
環境 | |
---|---|
OS | Ubuntu server 20.04 |
CPU | Intel Core i5 2500 |
メモリ | 4GB(DDR3) |
Network | LAN |
バージョン | 2020/09/01現在、最新 |
---|---|
httpd | 2.4.26 |
OpenSSL | 1.1.1g |
PHP | 7.4.9 |
0.パッケージの追加と削除とPorgのインストール
sudo apt update -y && sudo apt upgrade -y
sudo apt install build-essential
sudo apt purge openssl
sudo apt purge apache2
ビルドインストールしたソフトウェアを管理できるPorgをインストールする。詳しくはこちらの記事をご覧ください。(https://qiita.com/ksugawara61/items/38fe9d8e2cc444639fe0)
最新:https://sourceforge.net/projects/porg/files/
cd /usr/local/src
sudo wget http://sourceforge.net/projects/porg/files/porg-0.10.tar.gz/download -O porg-0.10.tar.gz --no-check-certificate
sudo tar xvf porg-0.10.tar.gz && cd porg-0.10
sudo ./configure --prefix=/usr/local --disable-grop
sudo make && sudo install
2.zlibをインストールする。
cd /usr/local/src
sudo wget http://www.zlib.net/zlib-1.2.11.tar.gz
sudo tar xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
sudo ./configure
sudo make
sudo porg -lD "make install"
3.OpenSSLをインストールする。
最新:https://www.openssl.org/source/
cd /usr/local/src
sudo wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
sudo tar xvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
sudo ./config shared zlib
sudo make
sudo porg -lD "make install"
3.Apache subversionをインストールする。
今回はaprとapr-utilはapache subversionでソースをダウンロードすることにする。
まずApache subversionをインストールする。1
続いて、aprとapr-utilをダウンロードする。2と3
sudo apt install subversion (1)
sudo svn co https://svn.apache.org/repos/asf/apr/apr/branches/1.7.x/ apr (2)
sudo svn co https://svn.apache.org/repos/asf/apr/apr-util/branches/1.7.x/ apr-util (3)
以下は推測ですが、
(2はおそらく、必要なツールがインストールされているのか確認しているのだろうと思う。そうすることで、3でよくわからんエラーが出たけど結局必要なツールがインストールされてなかっただけでしたみたいなのが防げるのかもしれません。)
4.aprをインストールする。1.7.x
最新:https://apr.apache.org/anonsvn.html
aprとapr-utilはマイナーバージョンを揃えると良いでしょう。
cd apr
sudo ./buildconf (2)
sudo ./configure (3)
sudo make
sudo porg -lD "make install"
例えば筆者の環境では2で次のように出力された。これを見ればどのツールが未インストールなのかがすぐに分かる。
buildconf: checking installation...
buildconf: python version 3.8.2 (ok)
buildconf: autoconf not found.
You need autoconf version 2.59 or newer installed
to build APR from SVN.
buildconf: libtool not found.
You need libtool version 1.4 or newer installed
to build APR from SVN.
autoconf
とlibtool
が必要であることがわかる。ここでパッケージを使うかソースからビルドするか悩むところである。結局autoconf
はパッケージ、libtool
はソースからビルドすることにした。
sudo apt install autoconf
sudo tar xvf libtool-2.4.6.tar.gz
cd libtool-2.4.6
sudo ./configure
sudo make
sudo porg -lD "make install"
これでもう一度、2を実行してほしい、うまく行ったなら3を含めた3から先を実行してください。
5.apr-utilのインストール 1.7.x
最新:https://apr.apache.org/anonsvn.html
aprとapr-utilはマイナーバージョンを揃えると良いでしょう。
まず必要なlibexpat1-dev
パッケージをインストールする。
sudo apt install libexpat1-dev -y
それからビルドに進む。
cd apr-util
sudo ./buildconf
sudo ./configure --with-apr=/usr/local/apr
sudo make
sudo porg -lD "make install"
6.pcreのインストール
pcre2ではなくpcreであることに注意!
cd /usr/local/src
sudo wget ftp://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
sudo tar xvf pcre-8.44.tar.gz
cd pcre-8.44
sudo ./configure
sudo make
sudo make install
7.Apache2(httpd)のインストール
最新:https://httpd.apache.org/download.cgi
cd /usr/local/src
sudo apt install libxml2-dev
sudo wget https://downloads.apache.org//httpd/httpd-2.4.46.tar.gz --no-check-certificate
sudo tar xvf httpd-2.4.46.tar.gz
cd httpd-2.4.46
sudo ./configure --enable-ssl --enable-mods-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr/bin/apu-1-config --with-pcre=/usr/local/pcre-8.44 --with-ssl=/usr/local/ssl --enable-shard=ssl
sudo make
sudo porg -lD "make install"
最後に出てくる、次のうようなもので各ディレクトリが分かるので確認しておく。
.
.
.
Installing configuration files
mkdir /usr/local/apache2/conf (設定ファイル)
.
.
.
Installing HTML documents
mkdir /usr/local/apache2/htdocs (ドキュメントルート)
.
.
.
8. PHP7.4.9のインストール
最新:https://www.php.net/downloads
cd /usr/local/src
sudo wget https://www.php.net/distributions/php-7.4.9.tar.gz --no-check-certificate
sudo tar xvf php-7.4.9.tar.gz
cd php-7.4.9
ここから./configure
のオプションをリストします。
--prefix=/opt/php-x.x.x
:PHPのインタプリタやライブラリをどこにインストールするか。PHP単体で使うときなどのbinがここに来ます。--with-apxs2
:Apache2に関する情報を返してくれるスクリプトをします。PHPはApache2に組み込んで使うので必要になります。--enable-mbstring
:日本語はマルチバイト文字であり、PHPのコアはマルチバイト文字対応ではないので思いもよらぬ起きたら困るので指定します。--enable-intl
:ロケール関連のさまざまな操作を行えるようにします。 フォーマット、音訳、エンコード変換、カレンダーの処理、UCA準拠の照合順序 (collation)、 テキストの区切り、ロケール識別子やタイムゾーンや書記素を用いた操作などが可能です。とPHPマニュアルにあります。有効にします。`--enable-bcmath
:対話モードで、誤差なく数値計算を行うために有効にします。--with-pcre-dir
:Apache2のビルドに使った、pcreと同じものを指定します。--with-readline
:これをしてするとPythonのように対話モードのインタプリタがPHPで使えるようになります。--with-libxml-dir
:これはXML処理に関するライブラリの場所を指定するものです。標準で有効ですが後コンフィグオプションを見たときにひと目でどのライブラリでビルドしたかを分かるように指定しておきます。
PHPでこれからMySQLを扱うことがあるかと思います。PHPではPDOを用いたMySQLの操作を推奨しています。なのでPDOを用いてMySQLを扱えるように次を指定します。
PDOは今までそれぞれのデータベース用に用意された別々の関数を用いて、データベースを扱っていたので、MySQLの用に書かれたプログラムは大幅に書き換えなければPostgreSQL用にはできませんでした。
しかし各データベースの違いを収集し、画一的に扱えるPDOを用いることで、同じ関数で各データベースを操作できるようになります。PDOを用いてデータベースを扱うにはPDOエクステンションとPDOが用いる各データベースのドライバが必要です。
--with-pdo-mysql
:PDOエクステンションは標準で有効なので、PDOエクステンションが使用する、MySQLドライバをこれで指定します。ちなみにこれにはMySQL Native Driver(mysqlnd)を指定します。MySQL以外を扱うのであれば、次を参照してください。(https://www.php.net/manual/ja/pdo.drivers.php)--with-zlib
と--with-zlib-dir
:OpenSSLでも用いた、(そしてMySQLのビルドでも用いる)zlibを指定します。pdo-mysqlを用いるには必要です。-
--enable-gd
:GDサポートを有効にします。jpegとpngを扱えるように、sudo apt install libpng-dev libjpeg-dev
-
--with-freetype
:freetype2を有効にします。sudo apt install freetype-dev
--with-openssl
:PHPからもOpenSSLを利用できるように、OpenSSLのインストールディレクトリを指定します。with-sodium
:削除された、mcryptの代わりにこれを有効にします。
以上です。次に必要なパッケージのインストールをします。(x)の数字は上のどのエクステンションで必要かを表しています。
sudo apt install libicu-dev (4)
sudo apt install libreadline-dev (7)
sudo apt install libxml2-dev (8)
sudo apt install libpng-dev libjpeg-dev (11)
sudo apt install libfreetype-dev (12)
sudo apt install libsodium-dev (14)
sudo apt install libsqlite3-dev libonig-dev
まとめ
sudo ./configure \
--prefix=/opt/php-7.4.9 \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-mbstring \
--enable-intl \
--enable-bcmath \
--with-pcre-regex=/usr/local/lib \
--with-readline \
--with-libxml=/usr/bin/xml2-config \
--with-pdo-mysql=mysqlnd \
--with-zlib=/usr/local \
--with-zlib-dir=/usr/local \
--enable-gd \
--with-freetype \
--with-openssl=/usr/local/ssl \
--with-openssl \
--with-sodium
ここから、
sudo make
sudo porg -lD "make install"
稼働の確認
1.httpd.confファイル
apache2のビルドの最後で確認した、設定ファイルのディレクトリ内のhttpd.conf
が設定ファイルです。
/usr/local/apache2/conf/httpd.conf
のLoadModule php7_module modules/libphp7.so
という記述でApacheとは別にビルドしたPHPのApacheモジュールの組み込みを行っています。
そして、Apache2にPHPを実行させるにはもう一つ設定が必要です。このままでは、.php
にリクエストが来てもテキストファイルのように.php
ファイルを返してしまいます。そこで、リクエストされたファイルがxxxx.php
ならきちんと実行されるように、次のような記述を加えます。
<FilesMatch "\.php$">
SetHandler application/x-httpd-php
</FilesMatch>
(https://www.atmarkit.co.jp/ait/articles/1112/12/news118.html) より。
これで実行する準備は整いました。
/usr/local/apache2/htdocs
下につぎのPHPファイルを作成しましょう。
<?php
phpinfo()
?>
Apache2(httpd)の稼働に関する各種コマンドは次の通りです。
Apache2(httpd) | |
---|---|
稼働開始 | sudo /usr/local/apache2/bin/apachectl start |
再起動 | sudo /usr/local/apache2/bin/apachectl restart |
稼働停止 | sudo /usr/local/apache2/bin/apachectl stop |
ifconfig
(sudo apt install net-tools
で利用可能です。)などで、サーバーのプライベートIPアドレスをしらべて同じネットワーク内のコンピュータから、http://192.168.x.x/info.php
にアクセスしてください。きちんとconfigureの設定が反映されているか確認してください。
サマリー
これでこの記事でインストールするものはインストールし終えました。porg -a
を用いて、ここまでビルドしたものを確認したいと思います。
>porg -a
apr
apr-util
httpd-2.4.46
libtool-2.4.6
openssl-1.1.1g
pcre-8.44
php-7.4.9
zlib-1.2.11
参考
おまけ - React-Appの環境を構築し、Hello, Worldをブラウザに表示させる。
Node.jsとNPMをインストールする。
sudo apt install npm nodejs -y
sudo npminstall -g n
sudo n stable
sudo apt purge nodejs npm -y
reboot
node -v
npm -v
npm no such file or ...
と出る場合は、reboot
した後にecho export PATH=/usr/local/bin/:\$PATH >> ~/.bashrc
としてください。
n stable error 参考:(https://stackoverflow.com/questions/36494336/npm-install-error-unable-to-get-local-issuer-certificate)
ここから速く進めます。詳しくは、(https://qiita.com/Suzukaze31/items/3cd7054dd7749d79eb70) を。
mkdir /usr/local/apache2/htdocs/react-app
chown USER_NAME:USER_NAME -R /usr/local/apache2/htdocs/react-app
npm init -y
sudo npm i -g react react-dom @babel/core @babel/cli @babel/preset-env @babel/preset-react webpack webpack-cli webpack-dev-server babel-loader css-loader style-loader html-webpack-plugin
npm i -save react react-dom
npm i --save-dev @babel/core @babel/cli @babel/preset-env @babel/preset-react webpack webpack-cli webpack-dev-server babel-loader css-loader style-loader html-webpack-plugin
touch webpack.config.js
mkdir src && cd src
touch index.html index.js App.js
index.html
<!DOCTYPE html>
<head>
<meta charset="utf-8">
</head>
<body>
<div id="root"></div>
</body>
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
App.js
import React from 'react';
function App() {
return <h1>Hello, World</h1>;
}
export default App;
webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
mode: 'development',
output: {
path: path.resolve(__dirname, './'),
filename: 'bundle.js',
},
module: {
rules: [
{test: /\.(js)$/, use: 'babel-loader'},
{test: /\.css$/, use: ['style-loader', 'css-loader']}
]
},
plugins: [
new HtmlWebpackPlugin({
template: 'src/index.html'
})
]
}
package.json
...
"babel":{
"presets" : [
"@babel/preset-env",
"@babel/preset-react"
]
},
"scripts": {
"build-react-app": "webpack",
"start": "webpack-dev-server --open"
},
...
これで、webpackを実行する。
cd /usr/local/apache2/htdocs/react-app
npm run build-react-app
http://192.168.x.x/react-app/
にウェブブラウザでアクセスしてください。HelloWorldが表示されればOKです。
Author And Source
この問題について(Ubuntu-server20.04にopenssl、apache2.4、php7.4をソースからビルドする。), 我々は、より多くの情報をここで見つけました https://qiita.com/Suzukaze31/items/32f67ab351bc8dc1d6e2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .