[LINUX] Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --2 PHP Einführung

Annahmen und Vorbereitungen

Artikel zum Aufbau eines Linux-Servers

Letztes Mal hat Apache httpd 2.4.46 auf Raspberry Pi durch Quellkompilierung erstellt. Dieses Mal ist es jedoch das Rückgrat des Webanwendungsservers in Apache. Führen Sie PHP 7.4 durch Quellenkompilierung ein (⑅ • ᴗ • ⑅)

Umgebung

--Webserverprogramm: Apache 2.4.46 + PHP 7.4.10 (Quellkompilierung) --Client: Windows10 Pro

Annahme

--Benutzer als root installiert (bei meiner Überprüfung handelt es sich um ein Administratorkonto namens admin, das von sudo von dort aus verarbeitet wird)

Serverbedingungen

IP Adresse

Funktionen und Versionen zum individuellen Herunterladen und Installieren von Paketen (Stand Juni 2020)

Andere erforderliche Pakete werden mit den Standardpaketbefehlen der Distribution (dnf, apt usw.) installiert und müssen nicht einzeln heruntergeladen werden.

Zum Herunterladen können Sie auf die offizielle Website zugreifen, von dort herunterladen und per FTP übertragen oder mit wget abrufen, wenn Sie die URL der Download-Datei kennen, die Erfassungsmethode jedoch weggelassen wurde.

Arbeitsablauf

PHP-Installation

Einführung von Bibliotheken, die für die Kompilierung von PHP-Quellen erforderlich sind

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

Bis zu PHP7.3 war es möglich, Multi-Byte-Zeichenfolgen ohne Verwendung von SQLite und der Demon-Car-Bibliothek zu installieren. In PHP7.4 wurde dies jedoch für die Quellkompilierung obligatorisch.

Zusammenstellung von PHP-Quellen (eigentlich war ich wegen fehlenden virtuellen Swap-Speichers süchtig nach erzwungener Beendigung)

Das Kompilieren dauert ca. 30-40 Minuten. Da es größer als Apache ist, ist es möglicherweise besser, während der Kompilierung eine Pause mit einer Tasse Kaffee einzulegen (\ * ˘︶˘ \ *) ...: \ * ♡

# cd [php-7.4.10.tar.Verzeichnis, in dem sich gz befindet]
# 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 aktiviert PDO

"Make" und "make test" sind zeitaufwändige Befehle. Wenn unterwegs keine Fehler auftreten, ist die Kompilierung abgeschlossen, aber ** es liegt ein Problem mit dem Raspberry Pi-Betriebssystem vor. ** ** **

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:Erzwungenes Beendigungssignal beendet Programm cc1
compilation terminated.
make: *** [Makefile:738: ext/fileinfo/libmagic/apprentice.lo]Fehler 1

Es wurde während der Erstellung wie folgt gewaltsam beendet (´ • ω • ̥`) PHP wird mit viel Verarbeitung erstellt, daher habe ich mich gefragt, warum nur Raspberry Pi OS ... und den freien Speicherplatz überprüft ...

RaspberryPiOS(2020.08)


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

Ich habe festgestellt, dass in Raspberry Pi OS nur 100 MB Swap-Speicher und in Raspberry Pi nur 1 MB freier Speicherplatz vorhanden sind ... (openSUSE hatte 400 MB in Raspberry Pi)

Deshalb habe ich beschlossen, den Auslagerungsbereich zu vergrößern, um den virtuellen Speicher zu vergrößern. ** In Raspberry Pi OS wird Swap in dphys-swapfile anstelle von partition definiert **

RaspberryPiOS(2020.08)


# vi /etc/dphys-swapfile
CONF_SWAPSIZE=100 ← erhöhen
CONF_SWAPFACTOR=2 ← Stellen Sie die Vergrößerung ein

# reboot

In meinem Fall habe ich es auf 200 MB erhöht und die Vergrößerung auf 2 eingestellt. Ich habe neu gestartet und neu aufgebaut, und diesmal war es ein Erfolg! !! [Aber es scheint, dass der Build durch einen Neustart gut gelaufen ist]

Aber ** weitere Probleme sind aufgetreten **. Dieses Mal ist ein Ereignis aufgetreten, das einen Segmentierungsfehler in "make test" verursacht. Der Build sollte erfolgreich gewesen sein, aber der Test stürzte aufgrund einer Segmentierungsverletzung ab (in Windows als Anwendungsfehler bezeichnet). .. ..

Ich werde vorerst PHP ausführen, um herauszufinden, ob es ein Problem mit dem Testtool oder dem erstellten Modul gibt, also werde ich den Test aussetzen.

PHP-Installation

Installieren Sie, wenn die Kompilierung abgeschlossen ist.

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

Einige der PHP-Bibliotheken befinden sich je nach Zweck an mehreren Orten, z. B. "/ usr / local / include / php /" und "/ usr / local / lib / php /". Außerdem befindet sich PHP 7.4.10 dieses Mal nicht in "/ usr / local / lib64 / php /", auch nicht in Raspeyes openSUSE, sondern an derselben Stelle wie andere Distributionen **. Ich weiß nicht warum, aber als ich PHP 7.4.10 + openSUSE 15.1 mit Raspeye implementierte, stellte ich vorerst fest, dass es nicht in lib64, sondern im lib-Verzeichnis abgelegt war.

Zu diesem Zeitpunkt werden ** PHP-DLLs (Dynamic Link Libraries, die externen Erweiterungsanwendungen entsprechen) automatisch im Apache-Ordner bereitgestellt **.

Erstellen Sie als Nächstes eine Kopie der PHP-Einstellungsdatei. Kopieren Sie zunächst die Datei php.ini in den PHP-Bibliotheksordner / usr / local / lib (einschließlich openSUSE) /.

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

Einstellungen auf der Apache-Seite

Ich muss die PHP-Datei für Apache erkennbar machen, also bearbeite sie. Die PHP-DLL wird bei der Installation von PHP automatisch in httpd.conf geschrieben, sodass sie nicht hinzugefügt werden muss. Alles, was Sie auf der Seite httpd.conf tun müssen, ist, dass Apache den PHP-MIME-Typ erkennt.

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

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


…
<IfModule dir_module>
    DirectoryIndex index.html ← 「index.Fügen Sie "php" hinzu
</IfModule>
…
<IfModule mime_module>
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    …
    AddType application/x-httpd-php .php ← Diese Zeile hinzufügen
</IfModule>
…

PHP-Einstellungen

Ändern Sie die Einstellungen für den PHP-Zeichencode und die Referenzbibliothek.

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

php.ini


#Da der Inhalt lang ist, werden nur diejenigen aufgelistet, die teilweise geändert wurden, und diejenigen, die geändert wurden. Semikolon";"Ist entfernt. "";Es wird beschrieben, einschließlich der Zeile, die Sie gerade entfernen
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

PHP-Funktionsprüfung

PHP-Bestätigungsseite

Erstellen Sie zunächst eine PHP-Seite zur Bestätigung.

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

phpi.php


<?php phpinfo(); ?>

Warum PHP-Dateien in / usr / local / apache2 / htdocs / ablegen? ?? Wenn Apache jedoch durch Quellkompilierung installiert wird, lautet der Standardspeicherordner für Webseitendaten "/ usr / local / apache2 / htdocs /". Nun, Sie können den Speicherort in httpd.conf ändern, aber dieses Mal werde ich ihn weglassen.

Starten Sie Apache neu

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

Wenn Sie nicht neu starten, funktioniert Apache nicht mit dem geladenen PHP-Modul. Beenden Sie es also und starten Sie es neu. Stellen Sie danach sicher, dass es mit dem Status gestartet wird. phpinfo.png

pdo.png

Das Bild oben stammt von einer virtuellen Maschine, aber Raspberry Pi zeigte eine ähnliche PHP-Info, sodass PHP einsatzbereit ist (\ * ˘ᗜ˘ \ *). ... Ich habe es einfach nicht getan, weil es mühsam ist, Bilder vorzubereiten. .. ..

nächstes Mal

Stellen Sie eine Verbindung zu MySQL her und stellen Sie den PHP-Web-App-Server der Datenbank zur Verfügung. ** MySQL wird in Raspeye nicht unterstützt **, daher kann es nicht einfach direkt aus dem Repository installiert werden, und selbst wenn es installiert ist, verkürzt es nur die Schreiblebensdauer der microSD, sodass ich beim nächsten Mal eine Verbindung zum MySQL-Server herstellen kann * Validieren *.

Recommended Posts

Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --2 PHP Einführung
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver. 1. Apache-Einführung
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --3. Verwenden Sie MySQL
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers ―― 1. Einführung in Apache
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --2 PHP-Einführung
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --3 MySQL 8.0 Einführung
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Erstellen Sie Server in Linux und lokalen Netzwerken mit Raspberry Pi NextCloud und Desktop-Sharing
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Ich habe mit Razpai einen Webserver erstellt, um Anime zu schauen
Erstellen Sie mit Docker eine CentOS Linux 8-Umgebung und starten Sie Apache HTTP Server
Starten Sie einen Webserver mit Python und Flask
Webserverkonstruktion mit Apache 2.4 (httpd 2.4.43) + PHP 7.4 unter Linux ―― 4. Sicherheit (chown und firewalld)
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 3: Installieren und Konfigurieren von dnsmasq)
Einfache Einführung in Home Hack mit Raspberry Pi und discord.py
Ich habe versucht, Raspeye und conect + mit der Web-API zu verbinden
Richten Sie einen Webserver mit CentOS7 + Anaconda + Django + Apache ein
Erstellen Sie mit Falcon einen Light-Speed-Web-API-Server
Erstellen Sie eine LAMP-Umgebung mit Vagrant (Linux + Apache + MySQL + PHP)
Erstellen Sie eine Webanwendung mit Django
Aufbau eines VPN-Servers mit Raspberry Pie
Verwenden einer Webkamera mit Raspberry Pi
Weihnachtsklassiker (?) Einen Weihnachtsbaum mit Raspberry Pi und Philips Hue anzünden
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Erstellen Sie einen Kanji-Kompass mit Raspberry Pi und Sense Hat
Haustierüberwachung mit Rekognition und Raspberry pi
[Raspberry Pi] Fügen Sie ein Thermometer und ein Feuchtigkeitsmessgerät hinzu
Erstellen Sie mit Raspberry Pi einen WLAN-Ethernet-Konverter und einen einfachen Router
[Python + PHP] Erstellen Sie mit Raspberry Pi einen Temperatur-, Feuchtigkeits- und Druckmonitor
Lassen Sie uns einen WEB-Server mit Chromebook einrichten
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Bedienen Sie das Oszilloskop mit dem Raspberry Pi
Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten
Starten Sie einen Webserver mit Bottle and Flask (ich habe auch versucht, Apache zu verwenden)
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Stellen Sie Docker in Windows Home und führen Sie einen einfachen Webserver mit Python aus
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Cross-Compilieren von Raspberry Pi und Erstellen einer Remote-Debug-Entwicklungsumgebung mit VS Code
Erstellen eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (3) Empfangen einer Python-Datei
[Für Anfänger] Ich habe mit Raspberry Pi einen menschlichen Sensor erstellt und LINE benachrichtigt!
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Erstellen Sie einen lokalen Server mit einem einzeiligen Befehl [Mac]
Erstellen Sie eine Django-Umgebung auf Raspai (MySQL)
Starten Sie mit Docker einen einfachen Python-Webserver
MQTT Radicon Car mit Arduino und Himbeere
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Kompilieren Sie Rust und führen Sie es mit einem einzigen Befehl aus
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Steuern Sie die Musikwiedergabe auf einem Smartphone, das mit Raspberry Pi 3 und Bluetooth mit AVRCP verbunden ist
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 4: Erstellen eines NFS-Servers und Importieren eines Client-Betriebssystems)
Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera
Einfaches IoT, um mit Raspeye und MESH zu beginnen
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Ermitteln Sie den Tragezustand der Maske mit OpenCV und Raspberry Pi
[Teil 2] Erstellen wir einen Webserver mit EC2 Linux
Messen Sie Temperatur und Luftfeuchtigkeit mit Raspberry Pi3 und visualisieren Sie mit Ambient
Erstellen Sie Apache HTTP Server und Wildfly unter Oracle Linux 8
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
CTF-Anfänger haben versucht, einen Problemserver (Web) zu erstellen [Problem]
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden