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 (⑅ • ᴗ • ⑅)
--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)
--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.
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.
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.
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.
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
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>
…
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
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.
# 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.
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é. .. ..
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