Apache, PHP, Mysql auf einer Ramdisk

Hallo Basher….

Weil es mich sehr interessiert, habe ich mir die mühe gemacht eine LAMP umgebung in ein chroot auf einer Ramdisk zu werfen die bei jedem Start vom Computer Kompiliert wird. Vorweg:



Dieses Tutorial / und die dazugehörigen Scripte sind für Testzwecke geeignet da man keine Garantie zur funktion geben kann. Auch für eventuelle Schäden übernehme ich keine Haftung. Ihr bastelt alles in eigenverantwortung!

Herunterladen der Konfigurationsdateien und der Scripts: Download

Damit ihr starten könnt, müsst ihr zuerst mal eine Ordnerstruktur Anlegen damit wir beim Start alles ins Ram laden können.
  • /sourcefiles/apache-sources/ <—- Apache Source Files, bitte downloaden 2.2.17 /sourcefiles/mysql-source/ <—- MySQL Source Files, auch runterladen als source /sourcefiles/php-source/ <—- PHP Source Files, auch als source downloaden /sourcefiles/config/apache/ <—- Apache Config Files, RamDiskFreak.zip Downloaden /sourcefiles/config/mysql/ <—- MySQL Config Files, RamDiskFreak.zip Downloaden /sourcefiles/config/php/ <—- PHP Config Files, RamDiskFreak.zip Downloaden /sourcefiles/database/ <—- Database zum importieren, Erstelle eine ;=) /sourcefiles/www/ <—- Webserver directory Files, Erstelle eine index.php Datei /sourcefiles/scripts/ <—- Hier sind die Ram Disk Scripts drin

  • /etc/init.d/ramdisk <—- wird ein neu erstelltes Script (source in dem Blog Eintrag)

Test System war ein Server von Hetzner mit Debian 5.0

Script 1, erstellt die Ramdisk mit 500MB


#!/bin/bash
####################################
#
# Debian Ramdisk Creator Bash Script
# Edited by Mike Jans 10.3.2011
#
####################################


# create 500MB ramdisk
/bin/mount -t tmpfs -o rw,size=500M tmpfs /chroot-ramdisk


# create apache directory and set permissions
/bin/mkdir /chroot-ramdisk/apache/

# create www doc root directory
/bin/mkdir /chroot-ramdisk/www/

# set apache permissions to ramdisk
/bin/chown -R nobody:nobody /chroot-ramdisk/apache/
/bin/chown -R nobody:nobody /chroot-ramdisk/www/

# create etc directory and set permissions
/bin/mkdir /chroot-ramdisk/etc/

# create logs directory and set permissions
/bin/mkdir /chroot-ramdisk/logs/
/bin/chmod 755 /chroot-ramdisk/logs/


# create mysql directory and set permissions
/bin/mkdir /chroot-ramdisk/mysql/
/bin/mkdir /chroot-ramdisk/mysql/data/
/bin/chown -R mysql:mysql /chroot-ramdisk/mysql/


#create php directory
/bin/mkdir /chroot-ramdisk/php/


Das zweite Script das notwendig ist, kompiliert den Apache in die angelegte Ramdisk und zusätzlich den ganzen MySQL Server wie auch PHP. Alles wird in dieses chroot-ramdisk directory gespeichert. Keine der Applikationen braucht zugriff ausserhalb der erstellten Ramdisk. Um den zweiten Start eures Servers zu beschleunigen wurde eine Freshinstall variable gesetzt, die nur beim 1. Start auf 1 stehen sollte und somit das wiederholte Kompilieren unterbindet. Getestet wurde es mit Apache 2.2.17 , der aktuellste PHP Version, und dem aktuellsten Stable MySQL. Nun folgt Script 2

#!/bin/bash
####################################
#
# LAMP Ramdisk installer Bash Script
# Edited by Mike Jans 10.3.2011
#
####################################


# fresh operating system (first time running script2.sh)
# 1 = yes / 0 = no

freshinstall=“0”


###########################################
# mySQL setup
###########################################

cd /sourcefiles/mysql-source/

# configure mySQL
if [ “$freshinstall” -eq 1 ]
then
./configure –prefix=/chroot-ramdisk/mysql –enable-assembler –with-extra-charsets=complex –enable-thread-safe-client –with-big-tables –with-readline –with-ssl –with-plugins=max-no-ndb –with-embedded-server –enable-local-infile –with-mysqld-user=mysql
fi



# compile mysql
if [ “$freshinstall” -eq 1 ]
then
make
fi



# install mysql to ramdisk
make install

# import / install database to ramdisk-mysql
if [ “$freshinstall” -eq 1 ]
then
# create generic database so mysql can start
/chroot-ramdisk/mysql/bin/mysql_install_db –user=mysql –basedir=/chroot-ramdisk/mysql –datadir=/chroot-ramdisk/mysql/data
/bin/cp -R /sourcefiles/database/* /chroot-ramdisk/mysql/data/
else
# import existing databases
/bin/cp -R /sourcefiles/database/* /chroot-ramdisk/mysql/data/
fi

# set user:group to ramdisk mysql
/bin/chown -R mysql:mysql /chroot-ramdisk/mysql/


###########################################
# Apache setup
###########################################

# switch to apache source folder
cd /sourcefiles/apache-sources/


# configure apache
if [ “$freshinstall” -eq 1 ]
then
./configure –prefix=/chroot-ramdisk/apache –enable-mime-magic –enable-expires –enable-headers –enable-ssl –enable-http –enable-info –enable-dir –enable-rewrite –enable-so
fi


# compile apache
if [ “$freshinstall” -eq 1 ]
then
make
fi



# install apache to ramdisk
make install

#copy over sourcefiles httpd.conf to ramdisk-apache
/bin/cp /sourcefiles/config/apache/httpd.conf /chroot-ramdisk/apache/conf/

# copy over test php file to ramdisk-www
/bin/cp /sourcefiles/scripts/test.php /chroot-ramdisk/www/
/bin/cp /sourcefiles/index.php /chroot-ramdisk/www/

###########################################
# PHP setup
###########################################

# switch to apache source folder
cd /sourcefiles/php-source/

# configure php
if [ “$freshinstall” -eq 1 ]
then

./configure –prefix=/chroot-ramdisk/php –with-apxs2=/chroot-ramdisk/apache/bin/apxs –with-mysql=shared,/chroot-ramdisk/mysql –with-zlib –with-gettext –with-mysql=/chroot-ramdisk/mysql –with-mysqli=/chroot-ramdisk/mysql/bin/mysql_config –with-mysql-sock=/chroot-ramdisk/mysql/mysql.sock –with-sqlite
fi


# compile php

if [ “$freshinstall” -eq 1 ]
then
make
fi


# install php to ramdisk
make install


# copy over sourcefiles php.ini to ramdisk-php
/bin/cp /sourcefiles/config/php/php.ini /chroot-ramdisk/php/lib/php.ini


###########################################
# Start mySQL / Apache
###########################################
# start mysql server off disk
/chroot-ramdisk/mysql/libexec/mysqld –basedir=/chroot-ramdisk/mysql –datadir=/chroot-ramdisk/mysql/data –user=mysql –log-error=/chroot-ramdisk/mysql/mysql.ramdisk.err –pid-file=/chroot-ramdisk/mysql/mysql.ramdisk.pid –port=3308 –socket=/chroot-ramdisk/mysql/mysql.sock >/dev/null &

# start apache
/chroot-ramdisk/apache/bin/apachectl start


Und weil wir natürlich alle faul sind und nicht gerne in der Shell kilometerlange Einzeiler abtippen um einen Apache zu starten, habe ich noch ein init.d Script gebaut welches ihr einfügen könnt.

#!/bin/sh -e
### BEGIN INIT INFO
# Provides: ramdisk
# Required-Start: checkroot
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: lamp on ramdisk
# Description: start/stop lamp on ramdisk
#
### END INIT INFO
####################################
#
# Init Script for Ramdisk Scripts Bash Script
# Edited by Mike Jans 10.3.2011
#
####################################

case “$1” in

start)

/sourcefiles/scripts/script1.sh
/sourcefiles/scripts/script2.sh

;;

stop)
killall -9 httpd
killall -9 mysqld
umount /chroot-ramdisk
;;

reload|restart|force-reload)
killall -9 mysqld
killall -9 httpd
umount /chroot-ramdisk
/sourcefiles/scripts/script1.sh
/sourcefiles/scripts/script2.sh

;;

*)

echo “Usage: [this] {start|stop|restart|reload|force-reload}” >&2

exit 1

;;

esac

exit 0


bevor ihr das init.d Script verwenden könnt, müsst ihr noch eure init Scripte update damit die datei ramdisk auch beim start vom Server gestartet wird. Dies macht ihr mit
$ update-rc.d ramdisk defaults


Ich hoffe dieser Beitrag hat euch weitergeholfen und es kommen ein paar kommentare ;=) . Aber bitte lasst uns nicht über sinn oder unsinn Streiten ;=) Falls ihr Verbesserungsvorschläge habt, habe ich immer ein offenes Ohr dafür…

comments powered by Disqus