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.