SaCzech-U: Instalace

SaCzech-U je pouìitelnù v prostÞed’ opera‹n’ho systŽmu Unix, pro kterŽ je d‡le popisovanù postup instalace ur‹en.

Distribuce programu je uloìena v souboru

saczechU.tar.gz
Distribuci je tÞeba rozbalit pouìit’m pÞ’kazu
gunzip < saczechU.tar.gz | tar xvf -
Soubory budou rozbaleny do podadres‡Þe saczechU. PotŽ n‡sleduje f‡ze pÞizpósoben’ vaäim konkrŽtn’m podm’nk‡m. VeäkerŽ z‡sahy se tùkaj’ souboru make, kterù je sou‹‡st’ distribuce. Je tÞeba jednak zkontrolovat jeho prvn’ Þ‡dek (za‹’naj’c’ znaky #!), zda obsahuje platnù pÞ’kaz pro spuätžn’ interpretu jazyka Perl. D‡le v tomto souboru n‡sleduj’ promžnnŽ, jejichì hodnoty moìn‡ uzn‡te za vhodnŽ zmžnit. Jsou to:
$homedir
UNIXov‡ cesta na hlavn’ (login) adres‡Þ uìivatele.

$user
Virtu‡ln’ URL cesta (za jmŽnem serveru) vedouc’ na WWW koÞen uìivatele.

$cgipath
Virtu‡ln’ URL cesta vedouc’ k CGI skriptóm pro zmžnu k—dov‡n’.
Neché napÞ. login adres‡Þ uìivatele je /home/group/USER,
WWW koÞen tohoto uìivatele je /home/group/USER/www
a tŽto UNIXovŽ cestž odpov’d‡ virtu‡ln’ URL cesta http://www.kdesi.ca/~USER/
(tj., väechny soubory, kterŽ uìivatel um’st’ do jakŽholiv podadres‡Þe pod /home/group/USER/www jsou k dispozici celŽmu svžtu - pokud to uìivatel dovol’ vhodnùm nastaven’m m—du jejich pÞ’stupu - vžtven’m z tohoto URL). Neché uìivatel um’st’ svŽ CGI skripty do
/home/group/USER/www/cgi-bin,
vnejä’ svžt je pak móìe vyvol‡vat jako
http://www.kdesi.ca/~USER/cgi-bin/toASCII.cgi/..., etc.
V tomto pÞ’padž je nutno tÞi vùäe uvedenŽ promžnnŽ nastavit takto:
$homedir="/home/group/USER";
$user="/~USER";
$cgipath="/~USER/cgi-bin";
(uv‡džjte bez z‡vžre‹nùch zpžtnùch lom’tek).

Pokud je moìno skripty instalovat na serveru glob‡lnž (implicitnž do /www/cgi-bin), coì je situace odpov’daj’c’ póvodn’mu SaCzechu, budou vol‡ny jako http://www.kdesi.ca/cgi-bin/toASCII.cgi/~USER/..., etc.
a nastaven’ pÞ’sluänùch promžnnùch je:

$homedir="";
$user="";
$cgipath="/cgi-bin";

$names
Promžnn‡, kter‡ ur‹uje volbu n‡zvó generovanùch skriptó. Móìe nabùvat hodnot "WWWdia" a "EUnet". Odpov’daj’ jim dvž róznŽ definice pole @codes. Vz‡jemnù vztah obou definic je zajiäéov‡n asociativn’m polem %altCodes. PÞiÞazen’ k—dó a abeced uloìenùch v souberech abeceda.* je zajiäéov‡no asociativn’m polem %abcNames.

$cgiprefix
Ûetžzec, kterùm bude za‹’nat n‡zev skriptó. JmŽno j-tŽho skritptu bude vytv‡Þeno takto: $cgiprefix.$codes[j].$cgisuffix.

%codename
Asociativn’ pole, obsahuj’c’ jmŽna, pod kterùmi budou jednotlivŽ k—dy vystupovat v automaticky generovanŽ nab’dce k—dó. Nedoporu‹uje se pÞ’liä mžnit!

SaCzech-U definuje tyto promžnnž a pole n‡sledovž:
if ( $names eq "WWWdia" )
{
$cgiprefix="to";
# nadpisy kodu v liste
$codename{"ASCII"}="ASCII";
$codename{"CP1250"}="MS Win";
$codename{"CP852"}="PC Latin 2";
$codename{"ISO-8859-2"}="ISO Latin 2";
$codename{"ISO-8859-1"}="ISO Latin 1";
$codename{"KEYBCS2"}="KEYBCS2";
$codename{"KOI8-CS"}="KOI8-CS";
$codename{"MAC"}="Mac";
@codes=
 ("ASCII","CP1250","MAC","ISO-8859-2","ISO-8859-1","CP852","KEYBCS2","KOI8-CS");
%abcNames=("ASCII","ASCII","CP1250","CP1250","MAC","MAC",
 "ISO-8859-2","ISO-8859-2","ISO-8859-1","ISO-8859-1","CP852","CP852",
 "KEYBCS2","KEYBCS2","KOI8-CS","KOI8-CS");
%altCodes=("ASCII","ascii","CP1250","1250","MAC","mac","ISO-8859-2","iso",
 "ISO-8859-1","iso1","CP852","852","KEYBCS2","kam","KOI8-CS","koi8-cs");
}
elsif ( $names eq "EUnet")
{
$cgiprefix="";
# nadpisy kodu v liste
$codename{"ascii"}="Ascii";
$codename{"1250"}="CP1250";
$codename{"852"}="PC Latin 2";
$codename{"iso"}="ISO Latin 2";
$codename{"iso1"}="ISO Latin 1";
$codename{"kam"}="Kamenicti";
$codename{"koi8-cs"}="KOI8-CS";
$codename{"mac"}="Mac";
@codes=("ascii","1250","mac","iso","iso1","852","kam","koi8-cs");
%abcNames=("ascii","ASCII","1250","CP1250","mac","MAC","iso","ISO-8859-2",
 "iso1","ISO-8859-1","852","CP852","kam","KEYBCS2","koi8-cs","KOI8-CS");
%altCodes=%abcNames;
}
else { die '$names'." v 'make' se musi rovnat bud \"WWWdia\" nebo \"EUnet\"\n"; }

$ASC = $codes[0];
$ISO1 = $codes[4];

$whichcodelang
Zde uve“te jazyk (cesky nebo slovensky), kterùm bude skript whichcode[.cgi], nab’zej’c’ volbu k—du, oslovovat uìivatele. Väechny ostatn’ vygenerovanŽ skripty jsou identickŽ pro oba jazyky.

$source
Implicitn’ k—dov‡n’ zdrojovùch textó str‡nek. Zde uve“te k—dov‡n’, ve kterŽm bude pravdžpodobnž vytvoÞena vžtäina Vaäich str‡nek. Jestliìe si str‡nka nepÞedep’äe zdrojovù k—d, bude jako vùchoz’ pro jej’ pÞek—dov‡n’ pouìit tento k—d. make automaticky provžÞ’, zd‡ V‡mi vybran‡ hodnota $source je platnùm jmŽnem k—du pro danou volbu promžnnŽ $names.


Nastaven’ väech ostatn’ch parametró make se Þ’d’ stejnùmi pravidly jako v póvodn’m SaCzechu:
$perl
Mžla by obsahovat pÞ’kaz (v‹etnž absolutn’ cesty) pro spuätžn’ interpretu jazyka Perl. Bude vyuìita pro vytvoÞen’ prvn’ch Þ‡dkó konverzn’ch skriptó, kterŽ se budou spouätžt jako CGI skripty. Uve“te proto takovou cestu k interpretu, kterou mohou pouì’t CGI skripty (pokud v‡ä server pÞi spuätžn’ mžn’ koÞen systŽmu souboró, móìe se liäit od obvyklŽ cesty).

$cgisuffix
PÞ’pona CGI skriptó. Pokud v‡ä server vyìaduje, aby CGI skripty byly vyzna‹ov‡ny ur‹itou konkrŽtn’ pÞ’ponou (nej‹astžji .cgi), uve“te ji jako hodnotu tŽto promžnnŽ. Je-li server dostate‹nž inteligentn’ na to, aby poznal CGI skript podle cesty, doporu‹uji ponechat jako hodnotu promžnnŽ pr‡zdnù Þetžzec.

$getmethod
Zpósob, kterùm m‡ SaCzech-U z’sk‡vat k—dovanŽ texty. Móìete si vybrat jednu z n‡sleduj’c’ch alternativ:
file
Soubory budou vyzved‡v‡ny pÞ’mo ze systŽmu souboró po‹’ta‹e. Tento zpósob je efektivn’, ale umoìËuje k—dovat jen texty, kterŽ jsou pÞ’tomny v podobž souboró. Nelze napÞ. k—dovat vùstupy z CGI skriptó.

Zvol’te-li tuto variantu, nem‡ ì‡dnù vùznam nastaven’ promžnnùch $socklib a $flag{"decodequery"}.

http
V tomto reìimu pr‡ce SaCzech-U z’sk‡v‡ k—dovanŽ dokumenty od svŽho serveru prostÞednictv’m HTTP protokolu. Tedy zahraje si na WWW klienta, odstran’ svŽ vlastn’ jmŽno z dotazu, kterù mu byl poloìen, a poloì’ serveru tento modifikovanù dotaz. Data, kter‡ z’sk‡ jako odpovž“, posoud’ a bu“ pÞek—duje (jestliìe se jedn‡ o text, pÞesnžji MIME typ text/html nebo text/plain) nebo propust’ beze zmžny.

Tento zpósob je podstatnž mŽnž efektivn’ (obslouìen’ kaìdŽho dotazu vyvol‡v‡ jeden dotaz nav’c), umoìËuje väak pÞek—dovat väe, co je na serveru k dispozici - v‹etnž vùstupó z CGI skriptó.

Zvol’te-li tuto variantu, nem‡ ì‡dnù vùznam nastaven’ promžnnùch $defaultfile, $dirdelim a pÞ’znakó timeservices a $ifmodifiedsince.

guess
SaCzech-U se pokus’ automaticky ur‹it pro kaìdù dotaz, kterou z vùäe uvedenùch metod m‡ pouì’t. Vyuì’v‡ k tomu hodnotu promžnnŽ $cgipath. Jestliìe je za‹‡tek cesty ke k—dovanŽ informaci (‹‡st URL, uveden‡ za vol‡n’m skriptu) shodnù s $cgipath, pouì’je pro z’sk‡n’ dokumentu HTTP. V opa‹nŽm pÞ’padž jej vyzvedne pÞ’mo ze systŽmu souboró.

Metoda guess se snaì’ o rozumnù kompromis mezi pÞedchoz’mi alternativami. Ur‹en’, kdy pouì’t kterù zpósob, väak rozhodnž nen’ dokonalŽ.

$socklib
Existence tŽto promžnnŽ je zpósobena nejróznžjä’mi nekompatibilitami a z‡drhely pÞi pouì’v‡n’ s’éovùch sluìeb v Perlu. SaCzech-U pÞi z’sk‡v‡n’ textó protokolem HTTP (pouì’v‡ se pÞi metod‡ch http a guess) potÞebuje komunikovat se soketem. PÞi jeho otevÞen’ vyìaduje dvž konstanty - SOCK_STREAM a AF_INET. Standardn’m zpósobem je br‡t tyto œdaje ze systŽmovùch knihoven, aväak
  1. jejich existence nen’ samozÞejmost’ - mus’ se spouätžt h2ph
  2. je to neefektivn’ (zbyte‹nž se interpretuj’ pomžrnž rozs‡hlŽ knihovny)
Zkr‡tka je to komplikovanŽ a pomalŽ. Proto Pavel Satrapa puìil jako minim‡ln’ variantu vlastn’ definici zm’nžnùch konstant. Jejich hodnoty by mžly bùt stejnŽ väude. Kromž toho jsou v souboru make pÞipraveny alternativy pro Perl verze 4.0 a 5.0. Pokud v‡m vlastn’ definice nevyhovuje, sta‹’ pÞ’sluänùm zpósobem upravit koment‡ÞovŽ znaky, kterùmi je vybr‡na jedna z nab’zenùch alternativ.

$defaultfile
Obsahuje jmŽno souboru, kterù m‡ bùt uìivateli pÞedloìen, pokud zad‡ pouhŽ jmŽno adres‡Þe. Vžtäinou se pro tento œ‹el pouì’v‡ index.html. Pokud uìivatel poìaduje /texty/, ve skute‹nosti obdrì’ /texty/index.html.

$dirdelim
Znak, pouì’vanù v danŽm opera‹n’m systŽmu pro oddžlov‡n’ adres‡Þó. Bude pouìit v regul‡rn’ch vùrazech, proto je tÞeba jej pÞ’sluänž vybavit ochrannùmi zpžtnùmi lom’tky. Nejbžìnžjä’ hodnoty (lom’tko a zpžtnŽ lom’tko) jsou pÞipraveny v souboru make.

$barczhead, $barcztail, $barenhead, $barentail
Texty, kterŽ SaCzech-U vkl‡d‡ do str‡nky pÞed (...head) a za (...tail) nab’dku k—dó. Jsou ve dvou jazykovùch verz’ch - ‹eskŽ (...cz...) a anglickŽ (...en...).

$flag{"timeservices"}
Jedn‡ se o prvn’ z pÞ’znakó. Jejich pÞ’pustnùmi hodnotami jsou 0 (nula - vypnuto) nebo 1 (jedni‹ka - zapnuto). PÞ’znak timeservices ud‡v‡, zda se lze spolehnout vùsledky funkce stat programovac’ho jazyka Perl, kterou SaCzech-U vyuì’v‡ pro z’sk‡n’ informac’ o velikosti a dobž vzniku souboru.

Volba je ur‹ena pÞedevä’m pro opera‹n’ systŽmy jinŽ neì Unix, ve kterŽm by funkce stat mžla fungovat bez problŽmó. U odliänùch systŽmó je tÞeba vžc vyzkouäet.

$flag{"ifmodifiedsince"}
M‡ skript reagovat na hlavi‹ku If-Modified-Since? Pokud v‡mi pouì’vanù server nepÞed‡v‡ CGI skriptóm informace z HTTP hlavi‹ek dotazu (v promžnnùch prostÞed’ HTTP_hlavi‹ka), nedost‡v‡ SaCzech potÞebnŽ informace. V takovŽm pÞ’padž volbu vypnžte.

$flag{"decodequery"}
M‡ bùt dotaz (pÞi vol‡n’ pomoc’ GET obsah promžnnŽ prostÞed’ QUERY_STRING podle specifikace CGI, pÞi vol‡n’ pomoc’ POST pak tžlo dotazu), pÞed‡vanù serveru pÞi komunikaci protokolem HTTP (metoda http nebo guess), pÞek—dov‡n do vùchoz’ho k—du (definov‡n promžnnou $source)? Je-li tato vlastnost zapnuta, budou pÞek—dov‡na data, pÞich‡zej’c’ skriptu jako dotaz. PÞedpokl‡d‡ se pÞi tom, ìe uìivatel je zad‡ ve stejnŽm k—du, do kterŽho si nech‡v‡ pÞeloìit dokumenty.

T’m je ukon‹ena konfigura‹n’ f‡ze. Jako dalä’ krok spuséte

./make
Jeho vùsledkem by mžla bùt skupina souboró (toXXX[.cgi] nebo yyy[.cgi] a soubor whichcode[.cgi]. Tyto soubory pÞesuËte do adres‡Þe s CGI skripty tak, aby jejich um’stžn’ vyhovovalo identifikaci, uvedenŽ ve vùäe zmiËovanùch promžnnùch $cgipath a $homedir - napÞ’klad
mv *.cgi ~/www/cgi-bin/
Doporu‹uji nav’c pro skript whichcode zavŽst synonyma to__CHARSET__ (__CHARSET__) a to, pokud odkaz na nžkterù k—dovanù soubor neproäel pÞes SaCzech-U nebo j’m proäel se ztr‡tou des’tky. Doty‹n‡ synonyma zajist’ pÞ’kazy
cd ~/www/cgi-bin
ln -s whichcode to__CHARSET__
ln -s whichcode to
pÞ’padnž
ln -s whichcode.cgi __CHARSET__.cgi
ln -s whichcode.cgi to.cgi

a podobnž.
T’m je instalace ukon‹ena.