LAMP on Debian (Etch)
This document tries to describe how to install LAMP on Debian (etch) from source.
Disclaimer! This is not definitive guide, but a personal notes of how to do this kind of stuff. So everything you read from these pages you shall comprehend at your own risk!
Foreplay
Meaning the stuff you'll need to take under consideration before you start to install LAMP on Debian from source code. So get all the needful things you need at hand, like smokes, coffee, alcohol, vintage Hustler magazines, etc...
Step 1 - Install Debian
Install Debian Etch as small as you can! I use net-install CD-image to do this. Don't install any additional software! Uncheck all
the choices when the installation process asks you to choose what additional software you'd like to install. After installation upgrade your system ( apt-get upgrade
).
Step 2 - Install necessary development packages
Use apt-get
to install some necessary software we'll need to perform the task at hand.
Install ssh and basic development packages:
server:~#apt-get install ssh dpkg-dev file gcc g++ libc6-dev make patch perl autoconf flex bison bzip2 less
Step 3 - Install Apache
Get apache source code and install it:
server:~#cd /usr/local/src server:~#wget https:///apache/httpd/httpd-2.0.61.tar.bz2
I want to use secure socket layer with apache, so we'll need to install some additional packages for it:
server:~#apt-get install openssl libssl-dev ca-certificates
Unpack the source code, configure and install:
server:~#tar -xjvf httpd-2.0.61.tar.bz2 server:~#./configure --prefix=/usr/local/apache2 --enable-mods-shared=most \ --enable-so --with-mpm=prefork --enable-ssl --with-ssl=/usr server:~#make && make install
Start up the server:
server:~#/usr/local/apache2/bin/apachectl start server:~#/usr/local/apache2/bin/apachectl stop
Create a start up script in /etc/init.d
called apache:
#! /bin/bash # # apache Start the apache HTTP server. # NAME=apache PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/local/apache2/bin/httpd PIDFILE=/usr/local/apache2/logs/httpd.pid CONF=/usr/local/apache2/conf/httpd.conf APACHECTL=/usr/local/apache2/bin/apachectl trap "" 1 export LANG=C export PATH test -f $DAEMON || exit 0 test -f $APACHECTL || exit 0 # ensure we don't leak environment vars into apachectl APACHECTL="env -i LANG=${LANG} PATH=${PATH} $APACHECTL" if egrep -q -i "^[[:space:]]*ServerType[[:space:]]+inet" $CONF then exit 0 fi case "$1" in start) echo -n "Starting web server: $NAME" start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON ;; stop) echo -n "Stopping web server: $NAME" start-stop-daemon --stop --pidfile $PIDFILE --oknodo ;; reload) echo -n "Reloading $NAME configuration" start-stop-daemon --stop --pidfile $PIDFILE \ --signal USR1 --startas $DAEMON ;; reload-modules) echo -n "Reloading $NAME modules" start-stop-daemon --stop --pidfile $PIDFILE --oknodo \ --retry 30 start-stop-daemon --start --pidfile $PIDFILE \ --exec $DAEMON ;; restart) $0 reload-modules exit $? ;; force-reload) $0 reload-modules exit $? ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|reload|reload-modules|force-reload|restart}" exit 1 ;; esac if [ $? == 0 ]; then echo . exit 0 else echo failed exit 1 fi
Make it start at system startup:
server:~#update-rc.d apache defaults 99 20
Step 4 - Install MySQL-server
Install ncurses library and get MySQL source code and unpack it:
server:~#apt-get install libncurses5-dev server:~#wget https://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51.tar.gz/from/https://mysql.tonnikala.org/ server:~#tar -xzvf mysql-5.0.51.tar.gz
Create a user and a group for the MySQL server:
server:~#groupadd mysql server:~#useradd -g mysql -c "MySQL Server" -d /dev/null -s /usr/sbin/nologin mysql
Configure and compile MySQL:
server:~#cd mysql-5.0.51 server:~#./configure --prefix=/usr/local/mysql \ --localstatedir=/usr/local/mysql/data \ --disable-maintainer-mode \ --with-mysqld-user=mysql \ --with-unix-socket-path=/tmp/mysql.sock \ --without-comment \ --without-debug \ --without-bench server:~#make && make install
Compiling is going to take some time! Where did I put those Hustler magazines???
Install internal database:
server:~#/usr/local/mysql/bin/mysql_install_db --user=mysql
Change ownership of folders:
server:~#chown -R root:mysql /usr/local/mysql server:~#chown -R mysql:mysql /usr/local/mysql/data
Copy MySQL's configuration file to /etc
-directory and change ownership:
server:~#cp /usr/local/src/mysql-5.0.51/support-files/my-medium.cnf /etc/my.cnf server:~#chown root.sys /etc/my.cnf server:~#chmod 644 /etc/my.cnf
Copy the start-up script from support-files and test if MySQL starts up:
server:~#cp /usr/local/src/mysql-5.0.51/support-files/mysql.server /etc/init.d/mysql server:~#chown root.root /etc/init.d/mysql server:~#chmod 755 /etc/init.d/mysql server:~#/etc/init.d/mysql start server:~#update-rc.d mysql defaults 99 20
Change root password:
server:~#cd /usr/local/mysql/bin server:/usr/local/mysql/bin#./mysqladmin -u root password "new-password" server:/usr/local/mysql/bin#./mysqladmin -u root -h "yourhostname" password "new-password"
Step 5 - Install PHP 5
Yep! Now comes the icky part! The hard part in here is to find all the necessary packages you'll need to install PHP. It'll depend on what parts of PHP you want to install. So it's handy to learn how to use Debian websites package search tool.
Here is the configuration options that I've used:
./configure --prefix=/usr/local/php \ --with-apxs2=/usr/local/apache2/bin/apxs \ --enable-inline-optimization \ --enable-magic-quotes \ --with-openssl \ --with-ldap \ --with-ldap-sasl \ --enable-bcmath \ --enable-calendar \ --with-gdbm \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-zlib-dir \ --with-freetype-dir \ --enable-gd-native-ttf \ --with-iconv \ --enable-sockets \ --enable-wddx \ --enable-ftp \ --enable-xml \ --with-xsl \ --with-bz2 \ --with-mysql=/usr/local/mysql \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --with-xmlrpc \ --with-pspell \ --enable-sysvsem \ --enable-mbstring \ --with-curl \ --with-curlwrappers \ --with-gettext=/usr/bin \ --with-imap \ --with-imap-ssl \ --with-kerberos \ --with-mcrypt \ --enable-pcntl
To make this kind-of options to compile I needed to install these packages:
server:~#apt-get install libfreetype6 libfreetype6-dev libjpeg62 libjpeg62-dev libgd-xpm-dev \ libpng12-0 libpng12-dev libc-client2002edebian libc-client-dev libpam0g libldap2 \ libldap2-dev libsasl2-dev libltdl3 libmcrypt4 libmcrypt-dev libmhash2 libaspell15 \ libtidy-0.99-0 libxml2 libxml2-dev libxslt1.1 libxslt1-dev libcurl3 libcurl3-dev \ libbz2-dev libpspell-dev libgdbm-dev
Get PHP source, unpack it and configure:
server:~#wget https://fi2.php.net/get/php-5.2.5.tar.bz2/from/this/mirror server:~#tar -xjvf php-5.2.5.tar.bz2 server:~#cd php-5.2.5 server:~#./configure --prefix=/usr/local/php \ --with-apxs2=/usr/local/apache2/bin/apxs \ --enable-inline-optimization \ --enable-magic-quotes \ --with-openssl \ --with-ldap \ --with-ldap-sasl \ --enable-bcmath \ --enable-calendar \ --with-gdbm \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-zlib-dir \ --with-freetype-dir \ --enable-gd-native-ttf \ --with-iconv \ --enable-sockets \ --enable-wddx \ --enable-ftp \ --enable-xml \ --with-xsl \ --with-bz2 \ --with-mysql=/usr/local/mysql \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --with-xmlrpc \ --with-pspell \ --enable-sysvsem \ --enable-mbstring \ --with-curl \ --with-curlwrappers \ --with-gettext=/usr/bin \ --with-imap \ --with-imap-ssl \ --with-kerberos \ --with-mcrypt \ --enable-pcntl
If the configure didn't went through without warnings, install necessary packages and try again. Otherwise make and install it:
server:~#make && make install
Copy php.ini file to /usr/local/php/lib
directory:
server:~#cp php.ini-dist /usr/local/php/lib/php.ini
Add the necessary lines to httpd.conf at the end of file and change the directory index value. (Re)start Apache:
(/usr/local/apache2/conf/httpd.conf) .... DirectoryIndex index.php index.phtml index.html index.html.var .... AddType application/x-httpd-php .php .phtml
Step 6 - Install APC cache
This is necessary to get your crappy code to run a little faster! Get source code for it and unpack it:
server:~#cd /usr/local/src server:~#wget https://pecl.php.net/get/APC-3.0.14.tgz server:~#tar -xzvf APC-3.0.14.tgz server:~#cd APC-3.0.14
Phpize, configure, compile and install it:
server:/usr/local/src/APC-3.0.14# /usr/local/php/bin/phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 server:/usr/local/src/APC-3.0.14#./configure --enable-apc-mmap \ --with-apxs=/usr/local/apache2/bin/apxs \ --with-php-config=/usr/local/php/bin/php-config server:/usr/local/src/APC-3.0.14#make && make install
Edit your php.ini file. You need to tell php where to find these extensions:
.... extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613" .... extension=apc.so apc.enabled=1 apc.shm_segments=1 apc.shm_size=128 apc.ttl=7200 apc.user_ttl=7200 apc.num_files_hint=1024 apc.mmap_file_mask=/tmp/apc.XXXXXX apc.enable_cli=1
Restart Apache:
server:/usr/local/src/APC-3.0.14#../../apache2/bin/apachectl restart