                        FreeBSD und Solid State-Gera:te

  John Kozubik

   <john@kozubik.com>

   Version: 8def749c53

   Copyright (c) 2001, 2009 The FreeBSD Documentation Project

   FreeBSD ist ein eingetragenes Warenzeichen der FreeBSD Foundation.

   Viele Produktbezeichnungen von Herstellern und Verka:ufern sind
   Warenzeichen. Soweit dem FreeBSD Project das Warenzeichen bekannt ist,
   werden die in diesem Dokument vorkommenden Bezeichnungen mit dem Symbol
   "(TM)" oder dem Symbol "(R)" gekennzeichnet.

   Redistribution and use in source (SGML DocBook) and 'compiled' forms
   (SGML, HTML, PDF, PostScript, RTF and so forth) with or without
   modification, are permitted provided that the following conditions are
   met:

    1. Redistributions of source code (SGML DocBook) must retain the above
       copyright notice, this list of conditions and the following disclaimer
       as the first lines of this file unmodified.

    2. Redistributions in compiled form (transformed to other DTDs, converted
       to PDF, PostScript, RTF and other formats) must reproduce the above
       copyright notice, this list of conditions and the following disclaimer
       in the documentation and/or other materials provided with the
       distribution.

  Wichtig:

   THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS
   IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION
   PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

   Zuletzt bearbeitet am 2013-11-13 07:52:45 +0000 von Hiroki Sato.
   Zusammenfassung

   Dieser Artikel behandelt die Verwendung von Solid State Festplatten in
   FreeBSD, um eingebettete Systeme zu erstellen.

   Eingebettete Systeme haben den Vorteil, dass sie eine ho:here Stabilita:t
   aufgrund des fehlens von beweglichen Bauteilen (Festplatten) besitzen. Es
   muss jedoch beachtet werden, dass generell weniger Speicherplatz zur
   Verfu:gung steht und die Lebensdauer des Speichermediums geringer ist.

   Spezielle Themen die behandelt werden beinhalten die Typen und Attribute
   von Solid State Datentra:gern, die in FreeBSD verwendet werden,
   Kernel-Optionen die in solch einer Umgebung von Interesse sind, der
   rc.initdiskless-Mechanismus, welcher die Initalisierung solcher Systeme
   automatisiert, sowie die Notwendigkeit von Nur-Lese-Dateisystemen und das
   Erstellen von Dateisystemen von Grund auf. Der Artikel schliesst mit ein
   paar generellen Strategien fu:r kleine und Nur-Lese-FreeBSD Umgebungen.

   U:bersetzt von Benedict Reuschling.

   [ einzelne Abschnitte / komplettes Dokument ]

     ----------------------------------------------------------------------

   Inhaltsverzeichnis

   1. Solid State Festplattengera:te

   2. Kerneloptionen

   3. Die rc-Subsysteme und nur-Lese Dateisysteme

   4. Ein Dateisystem von Grund auf neu erstellen

   5. Systemstrategien fu:r kleine und Nur-Lese-Umgebungen

1. Solid State Festplattengera:te

   Der Umfang des Artikels ist auf Solid State Gera:te beschra:nkt, die auf
   Flash-Speicher basieren. Flash-Speicher ist ein Solid State Speicher
   (keine beweglichen Teile), der nicht flu:chtig ist (der Speicher beha:lt
   die Daten sogar nachdem alle Energiequellen ausgeschaltet wurden).
   Flash-Speicher kann grossen physischen Schock aushalten und ist
   vergleichsweise schnell (die Flash-Speicher Lo:sungen, die in diesem
   Artikel behandelt werden, sind nur wenig langsamer als eine
   EIDE-Festplatte in der Schreibgeschwindigkeit und viel schneller bei
   Lese-Operationen). Ein sehr wichtiger Aspekt von Flash-Speichern, dessen
   Auswirkungen spa:ter in diesem Artikel diskutiert werden, ist, dass jeder
   Sektor eine begrenzte Kapazita:t zur Wiederbeschreibung besitzt. Man kann
   nur eine bestimmte Anzahl von Schreib-, Lo:sch- und
   Wiederbeschreibungsvorga:ngen durchfu:hren, bevor der Sektor permanent
   unbrauchbar wird. Obwohl viele Flash-Speicher Produkte automatisch
   schlechte Blo:cke markieren und manche Gera:te Schreiboperationen
   gleichma:ssig verteilen, bleibt weiterhin die Anzahl der durchfu:hrbaren
   Schreibvorga:nge begrenzt. Verschiedene Gera:teeinheiten besitzen zwischen
   1,000,000 und 10,000,000 Schreibzyklen pro Sektor in ihren
   Spezifikationen. Diese Zahlen variieren aufgrund der Umgebungstemperatur.

   Im Speziellen werden wir ATA-kompatible Compact-Flash-Karten betrachten,
   welche als Speichermedien fu:r Digitalkameras ziemlich popula:r sind. Von
   besonderem Interesse ist der Umstand, dass diese direkt an den IDE-Bus
   angeschlossen werden und kompatibel zu den ATA-Befehlen sind. Aus diesem
   Grund ko:nnen diese Gera:te mit einem einfachen und billigen Adapter
   direkt an den IDE-Bus eines Computers angeschlossen werden. Auf diese
   Weise sehen Betriebssysteme wie FreeBSD diese Gera:te dann als normale
   (wenn auch sehr kleine) Festplatten an.

   Andere Solid State Plattenlo:sungen existieren, jedoch platzieren deren
   Kosten, Obskurita:t und ihre Unhandlichkeit sie aussserhalb des Umfangs
   dieses Artikels.

2. Kerneloptionen

   Ein paar Kerneloptionen sind von besonderem Interesse fu:r diejenigen,
   welche diese eingebetteten FreeBSD-Systeme erstellen mo:chten.

   Alle eingebetteten FreeBSD-Systeme, die Flash-Speicher als Systemplatte
   verwenden, sind interessant fu:r Dateisysteme im Hauptspeicher und
   RAM-Disks. Wegen der begrenzten Anzahl von Schreibzyklen, die auf
   Flash-Speicher durchgefu:hrt werden ko:nnen, werden die Platte und die
   Dateisysteme darauf mit grosser Wahrscheinlichkeit nur lesend eingeha:ngt
   werden. In dieser Umgebung werden Dateisysteme wie /tmp und /var als
   RAM-Disks eingebunden, um dem System zu erlauben, Logdateien anzulegen und
   Za:hler sowie tempora:re Dateien zu aktualisieren. RAM-Disks sind eine
   kritische Komponente fu:r eine erfolgreiche Solid State Umsetzung in
   FreeBSD.

   Sie sollten dafu:r sorgen, dass die folgenden Zeilen in Ihrer
   Kernelkonfigurationsdatei vorhanden sind:

 options         MFS             # Memory Filesystem
 options         MD_ROOT         # md device usable as a potential root device
 pseudo-device   md              # memory disk

3. Die rc-Subsysteme und nur-Lese Dateisysteme

   Die Initialisierung nach dem Bootvorgang eines eingebetteten
   FreeBSD-Systems wird von /etc/rc.initdiskless kontrolliert.

   /etc/rc.d/var ha:ngt /var als RAM-Disk ein, erstellt eine konfigurierbare
   Liste von Verzeichnissen in /var mittels des mkdir(1)-Kommandos und
   a:ndert die Attribute von ein paar dieser Verzeichnisse. Bei der
   Ausfu:hrung von /etc/rc.d/var kommt eine andere rc.conf-Variable ins
   Spiel: varsize. Die Datei /etc/rc.d/var erstellt eine /var-Partition
   basierend auf dem Wert dieser Variable in rc.conf:

 varsize=8192

   Standardma:ssig wird dieser Wert in Sektoren angegeben.

   Der Fakt, dass es sich bei /var um ein nur-Lese Dateisystem handelt, ist
   eine wichtige Unterscheidung, da die /-Partition (und jede andere
   Partition, die Sie auf Ihrem Flash-Medium haben) nur lesend eingeha:ngt
   wird. Erinnern Sie sich, dass in Abschnitt 1, "Solid State
   Festplattengera:te" die Beschra:nkungen von Flash-Speichern erla:utert
   wurden, speziell deren begrenzte Kapazita:t zum Schreiben. Die
   Notwendigkeit, Dateisysteme auf Flash-Speichern nur lesend einzubinden und
   keine Swap-Dateien zu verwenden, kann nicht oft genug erwa:hnt werden.
   Eine Swap-Datei auf einem ausgelasteten System kann in weniger als einem
   Jahr den gesamten Flash-Speicher aufbrauchen. Ha:ufige Protokollierung
   oder das Erstellen und Lo:schen von tempora:ren Dateien kann das gleiche
   verursachen. Aus diesem Grund sollten Sie zusa:tzlich zum entfernen des
   swap-Eintrags aus ihrer /etc/fstab-Datei auch noch die Optionsfelder fu:r
   jedes Dateisystem auf ro wie folgt stellen:

 # Device                Mountpoint      FStype  Options         Dump    Pass#
 /dev/ad0s1a             /               ufs     ro              1       1

   Ein paar Anwendungen im normalen System werden sofort nach dieser
   A:nderung ausfallen. Beispielsweise wird Cron nicht richtig funktionieren,
   aufgrund von fehlenden Cron-Tabellen in /var die von /etc/rc.d/var
   erstellt wurden. Syslog und DHCP werden ebenfalls Probleme durch das
   nur-Lese Dateisystem und fehlende Elemente im Verzeichnis /var
   verursachen, die /etc/rc.d/var erstellt hat. Diese Probleme sind jedoch
   nur voru:bergehend und werden zusammen mit Lo:sungen zur Ausfu:hrung von
   anderen gebra:uchlichen Softwarepaketen in Abschnitt 5, "Systemstrategien
   fu:r kleine und Nur-Lese-Umgebungen" angesprochen.

   Eine wichtige Sache, an die man sich erinnern sollte, ist, dass ein
   Dateisystem, welches als nur lesend in /etc/fstab eingebunden wurde,
   jederzeit als schreibend durch das folgende Kommando eingeha:ngt werden
   kann:

 # /sbin/mount -uw partition

   und auch wieder zuru:ck auf nur lesend durch den Befehl:

 # /sbin/mount -ur partition

4. Ein Dateisystem von Grund auf neu erstellen

   Wenn ATA-kompatible Compact-Flash-Karten von FreeBSD als normale
   IDE-Festplatten erkannt werden, ko:nnten Sie theoretisch FreeBSD aus dem
   Netzwerk mittels der Kern- und mfsroot-Floppies oder einer CD
   installieren.

   Jedoch kann selbst eine kleine Installation von FreeBSD durch die normale
   Installationsprozedur ein System erzeugen, dass gro:sser als 200 MB ist.
   Da die meisten Leute kleinere Flash-Speichermedien einsetzen (128 MB wird
   hier als gross angesehen - 32 oder sogar 16 MB sind gebra:uchlich) ist
   eine gewo:hnliche Installation mit normalen Methoden nicht mo:glich, da es
   einfach nicht genug freien Plattenplatz gibt, selbst fu:r die kleinste
   Installationsart.

   Der einfachste Weg, diese Speicherlimitierung zu umgehen, ist, FreeBSD auf
   konventionelle Weise auf eine normale Festplatte zu installieren. Nachdem
   die Installation abgeschlossen wurde, ku:rzen Sie das Betriebssystem auf
   das no:tigste, bis Sie eine Gro:sse erreicht hat, die auf das Flash-Medium
   passt und benutzen Sie dann tar auf dem gesamten Dateisystem. Die
   folgenden Schritte werden Sie durch den Prozess der Vorbereitung eines
   Flash-Mediums fu:r ihr getartes Dateisystem fu:hren. Beachten Sie, dass
   Operationen wie Partitionierung, Benennung, Erstellung von Dateisystemen,
   etc. von Hand durchgefu:hrt werden mu:ssen, da eine normale Installation
   nicht mo:glich ist. Zusa:tzlich zu den Kern- und mfsroot-Disketten
   beno:tigen Sie auch die fixit-Floppy.

    1. Partitionierung Ihrer Flash-Medien

       Wa:hlen Sie nach dem Starten der Kern- und mfsroot-Disketten, custom
       aus dem Installationsmenu:. In diesem Menu: wa:hlen Sie dann partition
       aus. Dort sollten Sie alle bestehenden Partitionen mit Hilfe der Taste
       d lo:schen. Nachdem alle bestehenden Partitionen gelo:scht wurden,
       erstellen Sie mittels der Taste c eine Partition und akzeptieren Sie
       den Standardwert fu:r die Gro:sse der Partition. Wenn Sie nach dem Typ
       der Partition gefragt werden, stellen Sie sicher, dass der Wert auf
       165 eingestellt ist. Schreiben Sie jetzt diese Partitionstabelle auf
       die Platte durch beta:tigen der Taste w (dies ist die versteckte
       Option auf diesem Bildschirm). Wenn Sie eine ATA-kompatible Compact
       Flash-Karte verwenden, sollten Sie den FreeBSD Bootmanager auswa:hlen.
       Dru:cken Sie nun die Taste q, um das Partitionsmenu: zu verlassen. Sie
       werden das Menu: des Bootmanagers noch ein weiteres Mal gezeigt
       bekommt. In diesem Fall wiederholen Sie die Auswahl von vorher.

    2. Anlegen von Dateisystemen auf Ihrem Flashspeicher-Gera:t

       Verlassen Sie das Installationsmenu: und wa:hlen Sie aus dem
       Hauptinstallationsmenu: die Option fixit. In der fixit-Umgebung
       angelangt, geben Sie den folgenden Befehl ein:

 # disklabel -e /dev/ad0c

       Zu diesem Zeitpunkt sollten Sie sich im vi-Editor unter der Herrschaft
       des disklabel-Kommandos befinden. Als na:chstes mu:ssen Sie die eine
       a:-Zeile an das Ende der Datei hinzufu:gen. Diese a:-Zeile sollte wie
       folgt aussehen:

 a:      123456  0       4.2BSD  0       0

       Wobei 123456 eine Zahl darstellt, die exakt der gleichen Zahl in der
       bestehenden Zeile mit dem c:-Eintrag entspricht. Sie kopieren quasi
       die bestehende Zeile c: als eine neue Zeile a: und stellen sicher,
       dass fstype 4.2BSD entspricht. Speichern Sie die Datei und verlassen
       Sie den Editor.

 # disklabel -B -r /dev/ad0c
 # newfs /dev/ad0a

    3. Schreiben des Dateisystems auf Ihr Flash-Medium

       Ha:ngen Sie das neu erstellte Flash-Medium ein:

 # mount /dev/ad0a /flash

       Verbinden Sie diese Maschine mit dem Netzwerk, um die tar-Datei zu
       u:bertragen und extrahieren Sie es auf das Dateisystem des
       Flash-Mediums. Ein Beispiel dazu wa:re folgendes:

 # ifconfig xl0 192.168.0.10 netmask 255.255.255.0
 # route add default 192.168.0.1

       Jetzt da die Maschine ans Netzwerk angeschlossen ist, kopieren Sie die
       tar-Datei. An diesem Punkt werden Sie mo:glicherweise mit einem
       Dilemma konfrontiert - sollte Ihr Flash-Speicher beispielsweise 128 MB
       gross sein und Ihre tar-Datei gro:sser als 64 MB, ko:nnen Sie ihre
       tar-Datei auf dem Flash-Speicher nicht entpacken - Ihnen wird vorher
       der Speicherplatz ausgehen. Eine Lo:sung fu:r dieses Problem, sofern
       Sie FTP verwenden, ist, dass Sie die Datei entpacken ko:nnen, wa:hrend
       es von FTP u:bertragen wird. Wenn Sie die U:bertragung auf diese Weise
       durchfu:hren, haben Sie niemals die tar-Datei und deren Inhalt zur
       gleichen Zeit auf Ihrem Medium:

 ftp> get tarfile.tar "| tar xvf -"

       Sollte Ihre tar-Datei gezippt sein, ko:nnen Sie dies ebenso
       bewerkstelligen:

 ftp> get tarfile.tar "| zcat | tar xvf -"

       Nachdem der Inhalt Ihrer tar-Datei auf dem Dateisystem des
       Flash-Mediums abgelegt wurden, ko:nnen Sie den Flash-Speicher
       ausha:ngen und neu starten:

 # cd /
 # umount /flash
 # exit

       In der Annahme, dass Sie Ihr Dateisystem richtig konfiguriert haben,
       als es noch auf der gewo:hnlichen Festplatte gebaut wurde (mit Ihren
       Nur-Lese-Dateisystemen und den no:tigen Optionen im Kernel), sollten
       Sie nun erfolgreich von Ihrem FreeBSD Embedded-System starten ko:nnen.

5. Systemstrategien fu:r kleine und Nur-Lese-Umgebungen

   In Abschnitt 3, "Die rc-Subsysteme und nur-Lese Dateisysteme" wurde darauf
   hingewiesen, dass das /var-Dateisystem von /etc/rc.d/var konstruiert wurde
   und die Pra:senz eines Nur-Lese-Wurzeldateisystems Probleme mit vielen in
   FreeBSD gebra:chlichen Softwarepaketen verursacht. In diesem Artikel
   werden Vorschla:ge fu:r das erfolgreiche Betreiben von cron, syslog,
   Installationen von Ports und dem Apache-Webserver unterbreitet.

  5.1. cron

   Wa:hrend des Bootvorgangs wird /var von /etc/rc.d/var anhand der Liste aus
   /etc/mtree/BSD.var.dist gefu:llt, damit cron, cron/tabs, at und ein paar
   weitere Standardverzeichnisse erstellt werden.

   Jedoch lo:st das noch nicht das Problem, Crontabs u:ber Neustarts des
   Systems hinaus zu erhalten. Wenn das System neu gestartet wird,
   verschwindet das /var-Dateiystem, welches sich im Hauptspeicher befunden
   hat und jegliche Crontabs, die Sie hatten werden ebenfalls verschwinden.
   Aus diesem Grund besteht eine Lo:sung darin, Crontabs fu:r diejenigen
   Benutzer zu erstellen, die diese auch beno:tigen. Dazu sollte das
   /-Dateisystem lesend und schreibend eingeha:ngt und diese Crontabs an
   einen sicheren Ort kopiert werden, wie beispielsweise /etc/tabs. Fu:gen
   Sie dann eine Zeile an das Ende der Datei /etc/rc.initdiskless hinzu, die
   diese Crontabs in /var/cron/tabs kopiert, nachdem dieses Verzeichnis
   wa:hrend der Systeminitialisierung erstellt wurde. Sie werden auch eine
   Zeile hinzufu:gen mo:ssen, welche die Besitzer und Berechtigungen auf
   diesen Verzeichnissen, die Sie erstellen und den dazugeho:rigen Dateien,
   die Sie mittels /etc/rc.initdiskless kopieren, setzen.

  5.2. syslog

   Die Datei syslog.conf spezifiziert den Ort von bestimmten Logdateien,
   welche in /var/log existieren. Diese Dateien werden nicht von
   /etc/rc.d/var wa:hrend der Systeminitialisierung erstellt. Aus diesem
   Grund mu:ssen Sie irgendwo in /etc/rc.d/var nach dem Abschnitt, der die
   Verzeichnisse in /var erstellt, eine Zeile a:hnlich der folgenden
   hinzufu:gen:

 # touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages
 # chmod 0644 /var/log/*

  5.3. Installation von Ports

   Bevor die notwendigen A:nderungen erka:rt werden, einen Ports-Baum zu
   verwenden, ist es notwendig, Sie an die Nur-Lese-Besonderheit Ihres
   Dateisystems auf dem Flash-Medium zu erinnern. Da dieses nur lesend
   verfu:gbar ist, mu:ssen Sie es voru:bergehend mit Schreibrechten
   ausstatten, indem Sie die mount-Syntax, wie in Abschnitt 3, "Die
   rc-Subsysteme und nur-Lese Dateisysteme" dargestellt wird, verwenden. Sie
   sollten immer diese Dateisysteme erneut mit nur-Lese-Rechten einha:ngen
   wenn Sie damit fertig sind - unno:tige Schreibvorga:nge auf dem
   Flash-Medium kann dessen Lebenszeit erheblich verku:rzen.

   Um es zu ermo:glichen, in das Ports-Verzeichnis zu wechseln und
   erfolgreich make install auszufu:hren, mu:ssen wir ein Paketverzeichnis
   auf einem Nicht-Hauptspeicherdateisystem erstellen, welches die Pakete
   u:ber Neustarts hinweg im Auge beha:lt. Weil es sowieso no:tig ist, Ihre
   Dateisysteme mit Lese-Schreibrechten fu:r die Installation eines Pakets
   einzuha:ngen, ist es sinnvoll anzunehmen, dass ein Bereich Ihres
   Flash-Mediums ebenfalls fu:r Paketinformationen, die darauf abgespeichert
   werden, verwendet wird.

   Erstellen Sie zuerst ein Verzeichnis fu:r die Paketdatenbank.
   Normalerweise ist dies /var/db/pkg, jedoch ko:nnen wir es dort nicht
   unterbringen, da es jedesmal verschwinden wird, wenn das System neu
   gestartet wird.

 # mkdir /etc/pkg

   Fu:gen Sie nun eine Zeile in /etc/rc.d/var hinzu, welche das
   /etc/pkg-Verzeichnis mit /var/db/pkg verknu:pft. Ein Beispiel:

 # ln -s /etc/pkg /var/db/pkg

   Nun wird jedes Mal, wenn Sie Ihre Dateisysteme mit Lese-Schreibrechten
   einbinden und ein Paket installieren, der Befehl make install
   funktionieren und Paketinformationen werden erfolgreich nach /etc/pkg
   geschrieben (da zu diesem Zeitpunkt das Dateisystem mit
   Lese-Schreibrechten eingebunden ist), welche dann stets dem Betriebssystem
   als /var/db/pkg zur Verfu:gung stehen.

  5.4. Apache Webserver

  Anmerkung:

   Die Anweisungen in diesem Abschnitt sind nur notwendig, wenn Apache so
   eingerichtet ist, dass dieser seine PID oder Protokollierungsinformationen
   ausserhalb von /var ablegt. Standardma:ssig bewahrt Apache seine PID-Datei
   in /var/run/httpd.pid und seine Protokolldateien in /var/log auf.

   Es wird nun davon ausgegangen, dass Apache seine Protokolldateien in einem
   Verzeichnis namens apache_log_dir ausserhalb von /var speichert. Wenn
   dieses Verzeichnis auf einem nur-Lese-Dateisystem existiert, wird Apache
   nicht in der Lage sein, Protokolldateien zu speichern und wird vermutlich
   nicht richtig funktionieren. Wenn dies der Fall ist, muss ein neues
   Verzeichnis zu der Liste der Verzeichnisse in /etc/rc.d/var hinzugefu:gt
   werden, um dieses in /var zu erstellen und um apache_log_dir nach
   /var/log/apache zu verknu:pfen. Es ist auch no:tig, Berechtigungen und
   Besitzer auf diesem neuen Verzeichnis zu setzen.

   Fu:gen Sie zuerst das Verzeichnis log/apache zu der Liste von
   Verzeichnissen hinzu, die in /etc/rc.d/var angelegt werden sollen.

   Danach tragen Sie die folgenden Befehle in /etc/rc.d/var nach dem
   Abschnitt zum Erstellen der Verzeichnisse ein:

 # chmod 0774 /var/log/apache
 # chown nobody:nobody /var/log/apache

   Schliesslich lo:schen Sie das bestehende apache_log_dir Verzeichnis und
   ersetzen es mit einer Verknu:pfung:

 # rm -rf apache_log_dir
 # ln -s /var/log/apache apache_log_dir
