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.