OpenBSD grundinstallation med Apache, PHP, MySQL

Instruktionerna uppdaterade för version 4.6 (1 Nov 2009)

Översätt / translate
Svenska English German French Spanish Finnish Russian 
Högerklicka på länkarna i annonsen och välj att "öppna i nytt fönster" (eller ny flik) för att inte tappa bort denna sida
beställ installationsscript Med min guide som grund har jag skapat ett (nästan) helautomatiskt installationsscript. Det du behöver göra själv är att göra installationen som beskrivs på sid 1 i guiden ("introduktion"). Installationen från "Ports" till "Startup och shutdown filer" sker automatiskt med scriptet, med undantag för brandväggskonfiguration då denna är väldigt specifik för serverns användsingsområde samt det nät maskinen installeras i.

Förberedelser för PHP

För att uttnyttja lite extra funktioner i PHP och för att jpeg och png ska fungera måste några libraries installeras först:

zlib

http://www.zlib.net/
http://www.zlib.net/zlib-1.2.3.tar.gz

version 1.2.3 kommer förinstallerat (senaste versionen)

libpng

http://www.libpng.org/pub/png/
http://www.libpng.org/pub/png/libpng.html
http://mesh.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.40.tar.gz
ports/graphics/png

version 1.2.35 finns som package, 1.2.40 är den senaste
Port: png-1.2.35

libjpeg (jpeg-6b)

http://www.ijg.org/
http://www.ijg.org/files/jpegsrc.v6b.tar.gz
ports/graphics/jpeg

version 6bp5 finns som package
Port: jpeg-6bp5

libxml2

http://www.xmlsoft.org/
ftp://xmlsoft.org/libxml2/
ftp://xmlsoft.org/libxml2/libxml2-2.7.6.tar.gz
ports/textproc/libxml,-main

version 2.6.32p2 finns som package, 2.7.6 är den senaste
Port: libxml-2.6.32p2

Installation av dessa libraries (från ports/packages):

export PKG_PATH=ftp://ftp.su.se/pub/OpenBSD/4.6/packages/`machine -a`/
pkg_add png-1.2.35 
pkg_add jpeg-6bp5 
pkg_add libxml-2.6.32p2 
ln /usr/local/include/libpng/png.h  /usr/local/include
ln /usr/local/include/libpng/pngconf.h  /usr/local/include

Installation av dessa libraries (uppdatera i ports, eller installera från source):

libpng

Installation från source gör att PHP inte kan hitta libpng (-lpng). Relativt små förändringar behövs i /usr/ports/graphics/png för at det ska gå installera den nyaste versionen i package-form:
De som vill slippa göra dessa ändringar själv kan ladda ner en färdigfixad version:
png_1.2.40.tgz
cd /tmp
wget http://www.bsd-guide.net/openbsd-base-4.6/files/php/png_1.2.40.tgz
cd /usr/ports/graphics
tar cfv png.tar png
tar xfz /tmp/png_1.2.40.tgz
rm /tmp/png_1.2.40.tgz
cd png
make install
ln /usr/local/include/libpng/png.h  /usr/local/include
ln /usr/local/include/libpng/pngconf.h  /usr/local/include
Den medföljande porten av libpng innehåller en bugg som är fixad i den senaste versionen:

Vulnerability Warning

All versions of libpng from 0.89c through 1.2.34 contain an uninitialized-data bug that can be triggered by a malicious user. Specifically, there are several instances in which a malloc'd array of pointers is then initialized by a secondary sequence of malloc() calls. If one of these calls fails, libpng's cleanup routine will attempt to free the entire array, including any uninitialized pointers, which could lead to execution of an attacker's code with the privileges of the libpng user (including remote compromise in the case of a libpng-based browser visiting a hostile web site). This vulnerability has been assigned ID CVE-2009-0040 and is fixed in version 1.2.35, released 18 February 2009.

libjpeg

cd /usr/local/src
wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
tar xfz jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure --prefix=/usr/local --enable-shared
make
make test
make install
make install-lib
./configure --prefix=/usr/local
make
make test
make install
make install-lib
Givetvis går det/ska det gå att kombinera installation från ports/packages eller source. I libjpeg's fall, så har det nog inte hänt så mycket på den officiella källkoden att det är värt att kompilera själv, hellre tvärtom - den port som kommer med OpenBSD är en nyare, genomgången OpenBSD-anpassad version av originalkoden från 2001.

libxml

cd /usr/local/src
wget ftp://xmlsoft.org/libxml2/libxml2-2.7.6.tar.gz
tar xfz libxml2-2.7.6.tar.gz
unset CFLAGS; cd libxml2-2.7.6 
./configure --prefix=/usr/local
make
make install
Under mina senaste installationer har jag fått problem med 'gettext' (--with-gettext) vid körning av PHP's configure, och efter många installationer för felsökning så har jag kommit fram till att det är nåt relaterat till installationen av libxml2-2.6.32 (från källkod enligt ovan) som gör att det blir fel.

Med stor sannolikhet beror felet på att jag själv börjat fuska vid installationen och inte läser min guide :), för guiden är testad med OpenBSD 4.2 och de nyaste versionerna av allt..

Problemet uppstår inte om man installerar libxml2-2.6.30 från packages/ports, och inte heller om man patchar och installerar libxml2-2.6.32 på samma sätt.
jag har som för libpng gjort några smärre modifieringar på ports filerna för att få in den nyaste versionen:

De som vill slippa göra dessa ändringar själv kan du köra följande shellscript:
Eftersom mina fixar skriver över filerna i den befintliga porten, så sparas alla filer som ändras eller tar bort med "30_" i början på filnamnet.
xml_version=2.6.32
cd /usr/ports/textproc/libxml
wget http://www.bsd-guide.net/openbsd-base-4.3/files/php/libxml_${xml_version}.port.tgz
mv Makefile 30_Makefile
mv distinfo 30_distinfo
mv patches/patch-doc_Makefile_in patches/30_patch-doc_Makefile_in
mv patches/patch-python_Makefile_in patches/30_patch-python_Makefile_in
tar xfz libxml_${xml_version}.port.tgz
rm libxml_${xml_version}.port.tgz
FLAVOR=no_python make install

Saker som behövs under installationens gång

(gmake behövs för bl.a FreeType2)

GMAKE

ports/devel/gmake
pkg_add gmake-3.81p0

freetype2

http://www.freetype.org/
http://download.savannah.gnu.org/releases/freetype/freetype-2.3.11.tar.gz
cd /usr/local/src
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.11.tar.gz
tar xfz freetype-2.3.11.tar.gz
cd freetype-2.3.11 
GNUMAKE=/usr/local/bin/gmake ./configure
gmake
gmake install

PHP med HTTPS stöd (med Curl och OpenSSL)

http://curl.haxx.se/
http://curl.haxx.se/download/curl-7.19.5.tar.gz
ports/net/curl

version 7.19.6 finns som package, 7.19.5 är den senaste
Port: curl-7.19.6

export PKG_PATH=ftp://ftp.su.se/pub/OpenBSD/4.6/packages/`machine -a`/
pkg_add curl-7.19.6

Som en bonus installeras även libidn-1.11

PHP med IMAP stöd (IMAP client library)

http://www.washington.edu/imap/
ftp://ftp.cac.washington.edu/imap/imap.tar.Z

Paketversionen som finns lägger filerna på lite konstiga ställen. Det går säkert att lista ut vars alla filerna ligger, och ge rätt parametrar för PHP's configure, men den enklaste lösningen är att kompilera IMAP libraryt själv och lägga filerna samlade i /usr/local/imap.

mkdir -p /usr/local/imap
cd /usr/local/imap
wget ftp://ftp.cac.washington.edu/imap/imap.tar.Z
uncompress imap.tar.Z
tar xf imap.tar
mv imap-* src
cd src
make bso EXTRACFLAGS='-fPIC -O3'
cd ..
ln -s /usr/local/imap/src/c-client include
ln -s /usr/local/imap/src/c-client lib
cd lib
ln -s c-client.a libc-client.a

cd ../src/c-client
mkdir tmp
cd tmp
ar xv ../c-client.a 
gcc -shared -o c-client.so *.o 
cp c-client.so /usr/local/imap/lib/libc-client.so
ldconfig -m /usr/local/imap/lib

Enligt instruktionerna på http://se2.php.net/imap, så ska man göra ovanstående manuella installation av IMAP includes och libs för att inte blanda ihop filerna med systemfilerna. På något sätt (kopiera filer istället för att länka) borde man kunna göra en installation som är fristående från källkoden (så att man kan ta bort den sen om man vill). Kopieringen beskrivs i PHP's dokumentation, men den som skrivit den första (sista) kommentaren tycker att man ska länka istället.

Fr.o.m guiden för OpenBSD 4.5 så har jag flyttat på källkoden så att den kommer att lämnas i /usr/local/imap/src.

ldconfig sist ser till att libc-client.so är tillgängligt när PHP ska startas upp via Apache.

För att libc-client.so ska hittas av PHP senare (efter omstart) måste shlib_dir ändras i /etc/rc.conf.local (fanns där sen MySQL installationen):

shlib_dirs="/usr/local/mysql/lib/mysql /usr/local/imap/lib"

FileInfo, Multibyte och Mcrypt

Ifall RoundCube (webmail) ska installeras på servern, så rekommenderas dessa PHP-tillägg. Av dessa är det libmcrypt som går och måste installeras innan PHP kompileras.

libmcrypt

pkg_add libmcrypt

PHP

http://www.php.net/
http://se2.php.net/distributions/php-5.3.0.tar.gz

Hämta PHP källkoden och packa upp:

cd /usr/local/src
wget http://se2.php.net/distributions/php-5.3.0.tar.gz
tar xfz php-5.3.0.tar.gz

cd php-5.3.0 
./configure  --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs \
--with-config-file-path=/usr/local/php/conf \
--with-mysql=/usr/local/mysql --with-curl=/usr/local --with-openssl=/usr \
--enable-cli --with-gd --enable-ftp  --with-gettext --enable-soap \
--with-zlib-dir=/usr --with-png-dir=/usr/local --with-jpeg-dir=/usr/local \
--with-freetype-dir=/usr --enable-gd-native-ttf --with-ttf \
--with-mcrypt --enable-mbstring \
--with-imap=/usr/local/imap --with-imap-ssl
make
make install

Om du inte installerat IMAP libraryt (c-client), så ska du inte ta med sista backslashen (\) och den sista raden på 'configure' kommandot ovan (det som ska bort är markerat)

FileInfo (som används, ifall det finns installerat, av RoundCube) installeras då PHP är kompilerat och installerat:

FileInfo

pkg_add autoconf-2.62p0
pkg_add libmagic
AUTOCONF_VERSION=2.62 /usr/local/php/bin/pecl install FileInfo
cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/fileinfo.so \
/usr/local/php/lib/php/extensions

Kopiera konfigurationsfil för PHP:

mkdir /usr/local/php/conf
cp php.ini-production /usr/local/php/conf/php.ini

Ändra max_execution_time (sök 'Resource Limits')

max_execution_time = 300

och upload_max_filesize (sök 'File Uploads')

upload_max_filesize = 20M

Ändra så att sessions sparas i /var/sess istället för direkt i /tmp

session.save_path = "/var/sess"

(för FileInfo)
Lägg till/ändra i php.ini

extension_dir = "/usr/local/php/lib/php/extensions/"
extension=fileinfo.so

Fixa sökvägarna till MySQL, Apache och PHP:

Fyll på i slutet på path-variabeln.

/.cshrc (och /root/.cshrc)

/usr/local/apache2/bin /usr/local/mysql/bin /usr/local/php/bin

/.profile (och /root/.profile)

:/usr/local/apache2/bin:/usr/local/mysql/bin:/usr/local/php/bin

/etc/login.conf

/usr/local/apache2/bin /usr/local/mysql/bin /usr/local/php/bin
 
 
Visar de 30 senaste vägarna in till guiden. Visa alla
G o o g l e (www.google.se), sökning efter 'guide till dns'
G o o g l e (www.google.se), sökning efter 'www.webmail.dataphone.se/src/logi'
G o o g l e (www.google.se), sökning efter 'tomas+awenmark+olin'
G o o g l e (www.google.se), sökning efter 'openbsd apache2'
G o o g l e (www.google.com), sökning efter 'openbsd filserver hÃ¥rdvara'
G o o g l e (www.google.se), sökning efter 'cgi to check openbsd pf status'
G o o g l e (www.google.se), sökning efter 'openbsd apache2'
G o o g l e (www.google.se), sökning efter 'openbsd apache php'
G o o g l e (www.google.se), sökning efter 'mysql guide'
G o o g l e (www.google.se), sökning efter 'mysql guide'
G o o g l e (www.google.se), sökning efter 'sinterad'
G o o g l e (www.google.se), sökning efter 'php.ini openbsd'
G o o g l e (www.google.se), sökning efter 'php.ini openbsd'




G o o g l e (www.google.se), sökning efter 'openbsd apache ssl php'
G o o g l e (www.google.se), sökning efter 'max_allowed_packed mysql'
G o o g l e (www.google.se), sökning efter 'named openbsd'
G o o g l e (www.google.se), sökning efter 'openbsd bind'
G o o g l e (www.google.se), sökning efter 'apache ssl guide'
G o o g l e (www.google.se), sökning efter 'DNS bind guide'
http://translate.googleusercontent.com/translate_c?hl=en&sl=sv&tl=en&u=http://www.bsd-guide.net/openbsd-base/index.php&rurl=translate.google.com&usg=ALkJrhgJ_xi2pu9ZiILk9lw8PU40Bu1m1w
G o o g l e (www.google.se), sökning efter 'openbsd install problem'
G o o g l e (www.google.se), sökning efter 'openbsd apache'
G o o g l e (www.google.se), sökning efter 'inurl:index.php?userID='
G o o g l e (www.google.se), sökning efter 'inurl:index.php?userID='
G o o g l e (www.google.se), sökning efter 'Domain Name server med bind'
G o o g l e (www.google.se), sökning efter 'Domain Name server med bind'