Today is the 1000th day that
pinkaccordions.homelinux.org
at sheevaplug is online.
During that period the only problem experienced was Sheevaplug's PSU breakdown.
Cf. Kopia zapasowa karty SDHC, rsync i problemy and Konfigurowanie Apacha (in Polish)
Rozpoczynam od założenia w serwisie dyndns.org
konta.
Potem przechodzę do My Services→Host services,
wybieram nazwę hosta (w moim przypadku pinkaccordions
) i domeny
(homelinux.org
).
Typ usługi: Host with IP address
. Resztę pól
można zostawić niewypełnione.
Darmowe konto pozwala na przydzielenie 5 adresów...
Teraz w menu Tomato klikam w Basic→DDNS. Jako service
wybieram DynDNS -- static, Username/Password to dane z rejestracji
w serwisie DynDNS, hostname to z kolei wybrana przez nas
nazwa hosta, tj. w moim przypadku pinkaccordions.homelinux.org
.
Więcej niczego nie trzeba wpisywać wystarczą dane domyślne.
Można ustawić w ten sposób dwa adresy...
Por też notatki tutaj.
Pozostaje wreszcie uruchamienie usługi port forwarding na routerze z działającym Tomato. Jest to bardzo proste i sprowadza się do wypełnienia pól Proto, Ext Ports, Int Address oraz opcjonalnie Description (por. ekran obok).
Instalacja serwera apache oraz php w systemie Debian Lenny.
apt-get install apache2 apache2-mpm-prefork apache2-utils apache2.2-common apt-get install php5 libapache2-mod-php5 php5-common php5-curl apt-get install php5-dev php5-gd php5-imagick php5-mcrypt php5-memcache php5-mhash \ php5-mysql php5-pspell php5-snmp php5-sqlite php5-xmlrpc php5-xsl
W pliku /etc/apache2/ports.conf
umieszczam komentarz
przed dyrektywą NameVirtualHost
:
#NameVirtualHost *:80
Zaś powyższą dyrektywę umieszczam w /etc/apache2/httpd.conf
.
Konfiguracja wirtualnego hosta; plik /etc/apache2/sites-available/pinkaccordions
powstaje przez skopiowanie pliku domyślnego:
cd /etc/apache2/sites-available/ ; cp default pinkaccordions
Następnie plik modyfikuję dopisując
ServerName
i ServerAlias
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName pinkaccordions.homelinux.org ServerAlias pinkaccordions.homelinux.org DocumentRoot /var/www_pinkaccordions/ <!-- dalej w zasadzie niezmienione --> </VirtualHost>
Teraz:
cd /etc/apache2/sites-enabled && ln -s ../sites-available/pinkaccordions pinkaccordions
To samo dla drugiego i ewentualnie kolejnych hostów. Innych plików
za wyjątkiem opisanych wyżej httpd.conf
,
ports.conf
oraz plików z katalogu
./sites-available/
i linków z katalogu ./sites-enabled/
nie ruszam. Teraz
/etc/init.d/apache2 restart # albo apache2ctl graceful
No i powinno działać...
Dopisane 15 września 2010:
Aby logrotate
nie usuwał najstarszego przechowywanego pliku
modyfikuję /etc/logrotate.d/apache2
i dodając stosowane prerotate...endscript
:
sharedscripts prerotate if [ -f "/path2logs/access.log.52.gz" ] ; then cp /path2logs/access.log.52.gz /path2archive/access.`date +%Y%m%d`.log.gz ; fi if [ -f "/path2logs/access.fabians.log.52.gz" ] ; then cp /path2logs/access.log.52.gz /path2logs/access.`date +%Y%m%d`.log.gz ; fi endscript
Teraz (mam nadzieję), plik access.log.52.gz
przed skasowaniem zostanie
skopiowany w inne miejsce i ocaleje. Pewnie można by prościej, przykładowo
brutalnie wpisując po prostu rotate 156
.
Ponieważ główny system plików powinien być jak najmniejszy, z uwagi
na szczupłość miejsca w pamięci FLASH przenoszę na kartę SD bazy mysql
oraz główny katalog dokumentów Apacza.
Procedura nie jest skomplikowana (por. How to change the MySQL data default directory):
service mysql stop cp -R -p /var/lib/mysql /media/sd/data/ ## zmiana pliku konfiguracyjnego: vim /etc/mysql/my.cnf
W pliku zmieniam:
#datadir = /var/lib/mysql datadir = /media/sd/data/mysql
Piszą, że trzeba dokonfigurować apparmor
(niepotrzebne, bo w wersji Ubuntu na Sheevaplug, nie ma
działającego apparmora
,
co można sprawdzić wpisując np. service apparmor restart
):
## u mnie apparmor nie działa ale plik jest: vim /etc/apparmor.d/usr.sbin.mysqld
Gdyby wszakże ktoś uruchomił apparmor
, to należy zmienić var/lib/
na
/media/sd/data
. Podobne zmiany należy zaaplikować do zawartości pliku
/etc/apparmor.d/abstractions/mysql
Zrestartować mysql
.
Teraz dla sprawdzenia, że wsio działa
uruchomiłem mysql
:
mysql -u root -p
dodałem użytkownika tomek
:
-- tomek ma status superużytkownika -- CREATE USER 'tomek'@'localhost' IDENTIFIED BY 'hasło'; GRANT ALL ON *.* TO 'tomek'@'localhost'; FLUSH PRIVILEGES;
Załadowałem przykładową bazę:
mysql -u <user> -p < r-sklep.sql
Działa...
Domyślnym katalogiem dla dokumentów WWW serwera Apache
w Ubuntu jest /var/www/
. Zaczynam od skopiowania
tego katalogu w inne miejsce:
cp -R -p /var/www /media/sd/data/
Kopiuję także stosowny plik konfiguracyjny:
cp /etc/apache2/sites-available/default /etc/apache2/sites-available/jupiter
Teraz trzeba zmienić plik jupiter
:
vim /etc/apache2/sites-available/jupiter
Należy zmienić (w dwóch miejscach)
/var/www/
na /media/sd/data/wwww/
.
Teraz należy zmodyfikować ustawienia systemowe uruchamiając:
a2dissite default a2ensite jupiter ## restart serwera service apache2 restart
Działa...
Wymieniony w tytule Apache Velocity DocBook Framework (AVDF) to
sterowany antem zbiór narzędzi do zamiany dokumentów DocBook na
HTML/PDF. Konkretnie tymi narzędziami są Fop (w wersji 0.20.5), Saxon i szablony XSL
N. Walsha.
Po ściągnięciu archiwum .zip
lub
.tgz
ze strony projektu
i rozpakowaniu, na dysku pojawi się następująca struktura katalogów:
<korzeń instalacji AVDF> | +---- build-docbook.xml +---- project.properties +-- src +-- styles +-- docs +-- build.xml +-- project.properties +-- src +--css +--docbook | +--<projekt> +-- images +-- target +-- lib
Katalog lib
zawiera fopa i saxona plus niezbędne
dodatkowe aplikacje. Katalog src/styles
zawiera szablony
,,startowe'', uruchamiane przy zamianie plików XML na HTML i PDF. [Tu
trzeba dłubnąć żeby dokonać polonizacji.] Wreszcie dokument
,,źródłowy'' ma być obowiązkowo umieszczony w katalogu
docs/src/docbook/<projekt>
. Pliki z rysunkami zaś
muszą być umieszczone w docs/src/images
. Wynik
transformacji będzie się znajdował
w docs/target/<projekt>
. Dodatkowo
w docs/src/css
znajduje się szablon CSS wykorzystywany
przez wygenerowane pliki HTML.
Polonizacja wymaga: 1) ściągnięcia następującego archiwum
.zip
i rozpakowania
jego zawartości w tak sposób aby została dodana do oryginalnej dystrybucji AVDF
(kilka plików zostanie nadpisanych); 2) wykonania polecenia
ant -f build-docbook.xml dbf.init
z poziomu
korzenia instalacji AVDF. Tyle -- powinno działać. Reszta tego wpisu
dotyczy szczegółów: co, jak i dlaczego. Można nie czytać...
Pliki build-docbook.xml
zmieniłem tak, że
dodałem do wywołania
fopa argument -c plik.cnf
, tj.:
<java classname="org.apache.fop.apps.Fop" fork="true" maxmemory="256m" dir="${basedir}" classpathref="dbf.classpath"> <arg value="${pdf.target.file}.xml"/> <arg value="${target.dir}/${docbook.dir}/pdf/${docbook.file}.pdf"/> <arg value="-c"/> <arg value="${dbf.basedir}/conf/userconfig.xml"/> </java>
Parametr ${dbf.basedir}
to katalog główny, w którym znajduje
się cały framework. Dodany katalog conf/
zawiera
plik konfiguracyjny fopa + pliki metryczne fontów.
Same fonty (pliki .ttf
) są w katalogu fonts/
.
Dodanie do AVDC fontów powoduje, że całość jest gotowa
do użycia w każdym systemie.
[Można oczywiście tak skonfigurować AVDF żeby
używał fontów systemowych]. Z kilku zestawów
rozpowszechnianych bezpłatnie
fontów truetype
(Core fonts for the Web (Nie najwyższej jakości i do tego ich
rozpowszechnianie podlega pewnym ograniczeniom),
TeX Gyre,
Quasi,
STIX (tylko jedna odmiana -- brak kroju
bezszeryfowego i kroju typu monospace),
DejaVue)
zdecydowałem się na fonty Quasi.
Wprawdzie są one już obsolete ale działają z fopem a fonty TeX Gyre,
które są lepszą wersją Quasi -- nie bardzo.
[Są problemy nawet po konwersji OTF->TTF.]
Położenie fontów w systemie jest określone w pliku conf/userconfig.conf
. Ponieważ
ścieżka do fontu nie może być zaszyta na zicher, plik conf/userconfig.conf
rozpoczyna się od następującej deklaracji
DOCTYPE
:
<!DOCTYPE configuration SYSTEM "config.dtd" [ <!ENTITY fop.home "@dbf.basedir@"> <!ENTITY ttf.dir "@dbf.basedir@/fonts">
Napisy @dbf.basedir@
są zamieniane na to co trzeba po uruchomieniu
ant -f build-docbook.xml dbf.init
(trzeba to zrobić dokładnie raz).
Cel (target) dbf.init
wygląda zaś następująco:
<target name='dbf.init' description='Adjust some system specific files'> <copy file="${basedir}/conf/userconfig.conf" tofile='${basedir}/conf/userconfig.xml' overwrite="true" failonerror="false" filtering="on" > <filterset> <filter token="dbf.basedir" value="${basedir}"/> </filterset> </copy> </target>
Jak widać plik conf/userconfig.conf
jest kopiowany do conf/userconfig.xml
a dodatkowo napisy @dbf.basedir@
są zamieniane na bieżącą wartość ${basedir}
.
To się nazywa token substitution (cf. Using
Ant as a Text Substitution Preprocessor).
Ostatni etap polonizacji AVDF to poprawienie plików html.xsl
, htmlsingle.xsl
z katalogu src/styles
. Dodałem do plików html.xsl
oraz htmlsingle.xsl
:
<xsl:output method="html" encoding="utf-8" indent="no" saxon:character-representation="native;decimal" xmlns:saxon="http://icl.com/saxon" /> <!-- zapisuje znaki `natywnie' a nie jako encje (domyślnie) --> <xsl:param name="chunker.output.encoding" select="'utf-8'"/> <xsl:param name="saxon.character.representation" select="'native;decimal'"/>
A do pliku pdf.xsl
(z tego samego katalogu):
<!-- przełącza się na fonty Quasi, domyślnym fontem szeryfowym jest QuasiPalatinoTTF, zmień na QuasiTimesTTF jeżeli ma być Times New Roman --> <xsl:param name="sans.font.family" select="'QuasiSwissTTF'"/> <xsl:param name="title.font.family" select="'QuasiSwissTTF'"/> <xsl:param name="body.font.family" select="'QuasiPalatinoTTF'"/> <xsl:param name="monospace.font.family" select="'QuasiCourierTTF'"/>
Powyższe to minimum: polskie znaki są prawidłowo wyświetlane na ekranie oraz -- co ważne --
zapisywane w pliku jako sekwencje UTF a nie w postaci encji (tj. ó
).
Jeżeli układ graficzny dokumenty komuś nie odpowiada,
no to musi jeszcze bardziej zmodyfikować pliki .xsl
i/lub CSS (oczywiście szablony CSS dotyczą wyłącznie dokumentów HTML).