Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP

Hypothèses et préparatifs

Article sur la construction du serveur Linux

Dernière fois a construit Apache httpd 2.4.46 sur Raspberry Pi par compilation source, mais cette fois, continuant de la fois précédente, c'est l'épine dorsale du serveur d'applications Web dans Apache. Introduisez PHP 7.4 par compilation source (⑅ • ᴗ • ⑅)

environnement

--Programme serveur Web: Apache 2.4.46 + PHP 7.4.10 (compilation source) --Client: Windows10 Pro --Architecture serveur: Raspberry Pi 3B + (avec armv8) Distribution Linux: openSUSE 15.1 Leap (64bit) / Raspberry Pi OS 2020.08 version (32bit)

supposition

--Utilisateur installé en tant que root (dans ma vérification, il s'agit d'un compte administrateur appelé admin, et il est traité par sudo à partir de là) --Dans openSUSE, le pare-feu utilise firewalld (n'utilise pas les commandes de pare-feu spécifiques à la distribution). Dans le système d'exploitation Raspberry Pi de Rasppie, pour firewalld, l'interverrouillage autour d'IPv6 était un gaspillage, j'ai donc décidé d'utiliser le standard Debian ufw.

Conditions du serveur

adresse IP

Fonctions et versions pour télécharger et installer individuellement les packages (à partir de juin 2020)

Les autres packages requis sont installés à l'aide des commandes de package standard de la distribution (dnf, apt, etc.) et n'ont pas besoin d'être téléchargés individuellement.

Pour le téléchargement, vous pouvez accéder au site officiel, le télécharger à partir de là et le transférer par FTP, ou vous pouvez l'obtenir avec wget si vous connaissez l'URL du fichier à télécharger, mais la méthode d'acquisition est omise.

Procédure de travail

Installation de PHP

Introduction des bibliothèques requises pour la compilation des sources PHP

openSUSE15.1(RaspberryPi)


# zypper -n install libxml2-tools libxml2-devel sqlite3-devel oniguruma-devel

RaspberryPiOS(2020.08)


# apt-get -y install libxml2 libxml2-dev libsqlite3-dev libonig-dev

Jusqu'à PHP7.3, il était possible d'installer pour gérer des chaînes de caractères multi-octets sans utiliser SQLite et la bibliothèque de voiture de démon, mais en PHP7.4, il est devenu obligatoire pour la compilation des sources.

Compilation de sources PHP (en fait, j'étais accro à l'arrêt forcé en raison du manque de mémoire virtuelle d'échange)

La compilation prendra environ 30 à 40 minutes. Puisqu'il est plus grand qu'Apache, il peut être préférable de faire une pause avec une tasse de café pendant la compilation (\ * ˘︶˘ \ *) ...: \ * ♡

# cd [php-7.4.10.tar.Répertoire où se trouve gz]
# tar xvzf php-7.4.10.tar.gz
# cd php-7.4.10/
# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysqli --with-pdo-mysql --enable-mbregex --enable-mbstring
# make
# make test

--MySQL active PDO

«Make» et «make test» sont des commandes qui prennent du temps. S'il n'y a pas d'erreurs en cours de route, la compilation est terminée, mais ** il y a un problème avec le système d'exploitation Raspberry Pi. ** **

RaspberryPiOS(2020.08)


# make

/bin/bash /home/admin/php-7.4.10/libtool --silent --preserve-dup-deps --mode=compile cc -I/home/admin/php-7.4.10/ext/fileinfo/libmagic -Iext/fileinfo/ -I/home/admin/php-7.4.10/ext/fileinfo/ -DPHP_ATOM_INC -I/home/admin/php-7.4.10/include -I/home/admin/php-7.4.10/main -I/home/admin/php-7.4.10 -I/home/admin/php-7.4.10/ext/date/lib -I/usr/include/libxml2 -I/home/admin/php-7.4.10/ext/mbstring/libmbfl -I/home/admin/php-7.4.10/ext/mbstring/libmbfl/mbfl -I/usr/local/include -I/home/admin/php-7.4.10/TSRM -I/home/admin/php-7.4.10/Zend  -D_REENTRANT -pthread  -I/usr/include -g -O2 -fvisibility=hidden -pthread -Wall -Wno-strict-aliasing -DZTS -DZEND_SIGNALS   -c /home/admin/php-7.4.10/ext/fileinfo/libmagic/apprentice.c -o ext/fileinfo/libmagic/apprentice.lo
cc: fatal error:Signal de terminaison forcée programme terminé cc1
compilation terminated.
make: *** [Makefile:738: ext/fileinfo/libmagic/apprentice.lo]Erreur 1

Il a été interrompu de force lors de make comme ceci (´ • ω • ̥`) PHP se construit avec beaucoup de traitement, alors je me suis demandé pourquoi seul le système d'exploitation Raspberry Pi ... et j'ai vérifié l'espace mémoire libre ...

RaspberryPiOS(2020.08)


# free
              total        used        free      shared  buff/cache   available
Mem:         948072      389256      367752       99504      191064      394740
Swap:        102396      102256         140

J'ai remarqué qu'il n'y avait que 100 Mo d'espace d'échange dans le système d'exploitation Raspberry Pi, et qu'il n'y avait que 1 Mo d'espace libre ... (openSUSE avait 400 Mo dans Raspberry Pi)

J'ai donc décidé d'augmenter la zone de swap pour augmenter la mémoire virtuelle. ** Dans le système d'exploitation Raspberry Pi, le swap est défini dans dphys-swapfile au lieu de la partition **

--Référence: Augmentation de l'échange de tarte

RaspberryPiOS(2020.08)


# vi /etc/dphys-swapfile
CONF_SWAPSIZE=100 ← augmentation
CONF_SWAPFACTOR=2 ← Réglez le grossissement

# reboot

Dans mon cas, je l'ai augmenté à 200 Mo et réglé le grossissement sur 2. J'ai redémarré et reconstruit, et cette fois ce fut un succès! !! [Mais il semble que la compilation se soit bien déroulée en redémarrant]

Mais ** d'autres problèmes sont survenus **. Cette fois, un événement qui provoque une erreur de segmentation dans "make test" s'est produit. La génération aurait dû réussir, mais le test s'est écrasé en raison d'une violation de segmentation (appelée erreur d'application dans Windows). .. ..

Je vais lancer PHP pour le moment pour savoir s'il y a un problème avec l'outil de test ou le module que j'ai construit, alors j'ai mis le test en attente.

Installation de PHP

Installez lorsque la compilation est terminée.

# make install
Installing PHP SAPI module:       apache2handler
/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/opt/apr-1.7.0/build-1/libtool' libphp7.la /usr/local/apache2/modules
/opt/apr-1.7.0/build-1/libtool --mode=install install libphp7.la /usr/local/apache2/modules/
libtool: install: install .libs/libphp7.so /usr/local/apache2/modules/libphp7.so
libtool: install: install .libs/libphp7.lai /usr/local/apache2/modules/libphp7.la
libtool: warning: remember to run 'libtool --finish /home/admin/php-7.4.6/libs'
chmod 755 /usr/local/apache2/modules/libphp7.so
[activating module `php7' in /usr/local/apache2/conf/httpd.conf]
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-zts-20190902/
Installing PHP CLI binary:        /usr/local/bin/
Installing PHP CLI man page:      /usr/local/php/man/man1/
Installing phpdbg binary:         /usr/local/bin/
Installing phpdbg man page:       /usr/local/php/man/man1/
Installing PHP CGI binary:        /usr/local/bin/
Installing PHP CGI man page:      /usr/local/php/man/man1/
Installing build environment:     /usr/local/lib/php/build/
Installing header files:          /usr/local/include/php/
Installing helper programs:       /usr/local/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php/man/man1/
  page: phpize.1
  page: php-config.1
/home/admin/php-7.4.6/build/shtool install -c ext/phar/phar.phar /usr/local/bin
ln -s -f phar.phar /usr/local/bin/phar
Installing PDO headers:           /usr/local/include/php/ext/pdo/

Certaines des bibliothèques PHP sont placées à plusieurs endroits selon le but, comme "/ usr / local / include / php /" et "/ usr / local / lib / php /". De plus, cette fois, PHP 7.4.10 n'est pas placé dans "/ usr / local / lib64 / php /" même dans openSUSE de Raspeye, mais au même endroit que les autres distributions **. Je ne sais pas pourquoi, mais pour le moment, quand j'ai implémenté PHP 7.4.10 + openSUSE 15.1 avec Raspeye, j'ai trouvé qu'il n'était pas placé dans lib64 mais dans le répertoire lib.

De plus, à ce stade, ** les DLL PHP (bibliothèques de liens dynamiques, correspondant à des applications d'extension externes) sont automatiquement déployées dans le dossier Apache **.

Ensuite, faites une copie du fichier de préférences PHP. Tout d'abord, copiez php.ini dans le dossier de la bibliothèque PHP / usr / local / lib (y compris openSUSE) /.

# cp php.ini-development /usr/local/lib/php.ini
# ls -l /usr/local/lib
Total 328
-rw-r--r--1 racine racine 144402 24 juin 12:34 libz.a
lrwxrwxrwx 1 racine racine 14 24 juin 12:34 libz.so -> libz.so.1.2.11
lrwxrwxrwx 1 racine racine 14 24 juin 12:34 libz.so.1 -> libz.so.1.2.11
-rwxr-xr-x 1 racine racine 113656 24 juin 12:34 libz.so.1.2.11
drwxr-xr-x 4 racine racine 37 24 juin 16:19 php
-rw-r--r--1 racine racine 72278 24 juin 16:21 php.ini
drwxr-xr-x 2 racine racine 21 24 juin 12:34 pkgconfig

Paramètres côté Apache

Je dois rendre le fichier PHP reconnaissable par Apache, alors modifiez-le. La DLL PHP est automatiquement écrite dans httpd.conf lorsque PHP est installé, il n'est donc pas nécessaire de l'ajouter. Tout ce que vous avez à faire du côté httpd.conf est qu'Apache reconnaisse le type PHP MIME.

# vi /usr/local/apache2/conf/httpd.conf

/usr/local/apache2/conf/httpd.conf


…
<IfModule dir_module>
    DirectoryIndex index.html ← 「index.Ajouter "php"
</IfModule>
…
<IfModule mime_module>
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    …
    AddType application/x-httpd-php .php ← Ajouter cette ligne
</IfModule>
…

Préférences PHP

Modifiez le code de caractère PHP et les paramètres de la bibliothèque de référence.

# vi /usr/local/lib/php.ini

php.ini


#Le contenu étant long, seuls ceux qui ont été partiellement modifiés et ceux qui ont été modifiés sont répertoriés. point-virgule ";"Est retiré. ";Il est décrit avec la ligne que vous venez de supprimer
output_buffering = On
default_charset = "UTF-8"
include_path = ".:/usr/local/include/php:/usr/local/lib/php"
extension_dir = "/usr/local/include/php/ext"
date.timezone = Asia/Tokyo
mbstring.language = Japanese
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8, SJIS, EUC-JP, JIS, ASCII
mbstring.substitute_character = none

Vérification du fonctionnement PHP

Page de confirmation PHP

Tout d'abord, créez une page PHP pour confirmation.

# vi /usr/local/apache2/htdocs/phpi.php

phpi.php


<?php phpinfo(); ?>

Pourquoi placer les fichiers PHP dans / usr / local / apache2 / htdocs /? ?? Cependant, lorsqu'Apache est installé par compilation source, le dossier de stockage par défaut pour les données de page Web est "/ usr / local / apache2 / htdocs /". Eh bien, vous pouvez changer l'emplacement de stockage dans httpd.conf, mais cette fois je l'omettrai.

Redémarrez Apache

# systemctl stop httpd
# systemctl start httpd
# systemctl status httpd

Si vous ne redémarrez pas, Apache ne fonctionnera pas avec le module PHP chargé, alors arrêtez-le et redémarrez-le. Après cela, assurez-vous qu'il est démarré avec status. phpinfo.png

pdo.png

L'image ci-dessus provient d'une machine virtuelle, mais Raspberry Pi a montré un phpinfo similaire, donc PHP est prêt à être utilisé (\ * ˘ᗜ˘ \ *) ... Je ne l'ai tout simplement pas fait parce que préparer des images est compliqué. .. ..

la prochaine fois

Connectez-vous à MySQL et mettez le serveur d'application Web PHP à la disposition de la base de données. ** MySQL n'est pas pris en charge dans Raspeye **, vous ne pouvez donc pas l'installer facilement directement à partir du référentiel, et même si vous l'installez, cela ne fera que raccourcir la durée d'écriture de la microSD, donc la prochaine fois que vous pourrez vous connecter au serveur MySQL * Validez *.

Recommended Posts

Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache
Compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --3. Utilisez MySQL
Source compilez Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web ―― 1. Introduction à Apache
Source compile Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web --2 introduction PHP
Source compile Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web --3 MySQL 8.0 introduction
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Créez des serveurs sur Linux et des réseaux locaux avec Raspberry Pi NextCloud et le partage de bureau
Créer un environnement Tensorflow avec Raspberry Pi [2020]
J'ai créé un serveur Web avec Razpai pour regarder des anime
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
Lancer un serveur Web avec Python et Flask
Construire un serveur Web avec Apache 2.4 (httpd 2.4.43) + PHP 7.4 sous Linux --4 Security (chown et firewalld)
Création d'un environnement distribué avec la série Raspberry PI (Partie 3: Installation et configuration de dnsmasq)
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
J'ai essayé de connecter Raspeye et conect + avec l'API Web
Configurer un serveur Web avec CentOS7 + Anaconda + Django + Apache
Créez un serveur API Web ultra-rapide avec Falcon
Créez un environnement LAMP avec Vagrant (Linux + Apache + MySQL + PHP)
Créer une application Web avec Django
Construire un serveur VPN avec Raspberry Pie
Utiliser une webcam avec Raspberry Pi
Classique de Noël (?) Éclairage d'un arbre de Noël avec Raspberry Pi et Philips Hue
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Faire une boussole d'affichage kanji avec Raspberry Pi et Sense Hat
Surveillance des animaux avec Rekognition et Raspberry pi
[Raspberry Pi] Ajouter un thermomètre et un hygromètre
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
[Python + PHP] Créez un moniteur de température / humidité / pression avec Raspberry Pi
Configurons un serveur WEB avec Chromebook
Faire une minuterie de lavage-séchage avec Raspberry Pi
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Introduction et utilisation de la bouteille Python ・ Essayez de configurer un serveur Web simple avec une fonction de connexion
Démarrez un serveur Web en utilisant Bottle et Flask (j'ai également essayé d'utiliser Apache)
Créez un compteur de voiture avec Raspberry Pi
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code
Création d'un système de contrôle de température avec tarte aux framboises et ESP32 (3) Réception d'un fichier Python
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
Créer un serveur local avec une commande sur une seule ligne [Mac]
Construire un environnement Django sur Raspai (MySQL)
Démarrez un serveur Web Python simple avec Docker
MQTT Radicon Car avec Arduino et Raspberry
Créez un environnement virtuel avec pyenv et venv
Compilez et exécutez Rust avec une seule commande
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Construire un environnement de développement Python sur Raspberry Pi
Contrôlez la lecture de musique sur un smartphone connecté à Raspberry Pi 3 et Bluetooth avec AVRCP
Création d'un environnement distribué avec la série Raspberry PI (Partie 4: Création d'un serveur NFS et importation d'un système d'exploitation client)
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
IoT facile pour démarrer avec Raspeye et MESH
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
[Partie 2] Construisons un serveur Web avec EC2 Linux
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Créer un serveur HTTP Apache et Wildfly sur Oracle Linux 8
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Le débutant de la CTF a tenté de créer un serveur problématique (Web) [Problème]
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python