SaCzech-U: Instalace

SaCzech-U je pouzitelný v prostredí operaçního systému Unix, pro které je dále popisovaný postup instalace urçen.

Distribuce programu je ulozena v souboru

saczechU.tar.gz
Distribuci je treba rozbalit pouzitím príkazu
gunzip < saczechU.tar.gz | tar xvf -
Soubory budou rozbaleny do podadresáre saczechU. Poté následuje fáze prizpűsobení vasim konkrétním podmínkám. Veskeré zásahy se týkají souboru make, který je souçástí distribuce. Je treba jednak zkontrolovat jeho první rádek (zaçínající znaky #!), zda obsahuje platný príkaz pro spustëní interpretu jazyka Perl. Dále v tomto souboru následují promënné, jejichz hodnoty mozná uznáte za vhodné zmënit. Jsou to:
$homedir
UNIXová cesta na hlavní (login) adresár uzivatele.

$user
Virtuální URL cesta (za jménem serveru) vedoucí na WWW koren uzivatele.

$cgipath
Virtuální URL cesta vedoucí k CGI skriptűm pro zmënu kódování.
Necht napr. login adresár uzivatele je /home/group/USER,
WWW koren tohoto uzivatele je /home/group/USER/www
a této UNIXové cestë odpovídá virtuální URL cesta http://www.kdesi.ca/~USER/
(tj., vsechny soubory, které uzivatel umístí do jakéholiv podadresáre pod /home/group/USER/www jsou k dispozici celému svëtu - pokud to uzivatel dovolí vhodným nastavením módu jejich prístupu - vëtvením z tohoto URL). Necht uzivatel umístí své CGI skripty do
/home/group/USER/www/cgi-bin,
vnejsí svët je pak műze vyvolávat jako
http://www.kdesi.ca/~USER/cgi-bin/toASCII.cgi/..., etc.
V tomto prípadë je nutno tri výse 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 mozno skripty instalovat na serveru globálnë (implicitnë do /www/cgi-bin), coz 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í príslusných promënných je:

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

$names
Promënná, která urçuje volbu názvű generovaných skriptű. Műze nabývat hodnot "WWWdia" a "EUnet". Odpovídají jim dvë rűzné definice pole @codes. Vzájemný vztah obou definic je zajistován asociativním polem %altCodes. Prirazení kódű a abeced ulozených v souberech abeceda.* je zajistováno asociativním polem %abcNames.

$cgiprefix
Retëzec, kterým bude zaçínat název skriptű. Jméno j-tého skritptu bude vytváreno 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 prílis 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 uvedte jazyk (cesky nebo slovensky), kterým bude skript whichcode[.cgi], nabízející volbu kódu, oslovovat uzivatele. Vsechny ostatní vygenerované skripty jsou identické pro oba jazyky.

$source
Implicitní kódování zdrojových textű stránek. Zde uvedte kódování, ve kterém bude pravdëpodobnë vytvorena vëtsina Vasich stránek. Jestlize si stránka nepredepíse zdrojový kód, bude jako výchozí pro její prekódování pouzit tento kód. make automaticky provërí, zdá Vámi vybraná hodnota $source je platným jménem kódu pro danou volbu promënné $names.


Nastavení vsech ostatních parametrű make se rídí stejnými pravidly jako v pűvodním SaCzechu:
$perl
Mëla by obsahovat príkaz (vçetnë absolutní cesty) pro spustëní interpretu jazyka Perl. Bude vyuzita pro vytvorení prvních rádkű konverzních skriptű, které se budou spoustët jako CGI skripty. Uvedte proto takovou cestu k interpretu, kterou mohou pouzít CGI skripty (pokud vás server pri spustëní mëní koren systému souborű, műze se lisit od obvyklé cesty).

$cgisuffix
Prípona CGI skriptű. Pokud vás server vyzaduje, aby CGI skripty byly vyznaçovány urçitou konkrétní príponou (nejçastëji .cgi), uvedte 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ý retëzec.

$getmethod
Zpűsob, kterým má SaCzech-U získávat kódované texty. Műzete si vybrat jednu z následujících alternativ:
file
Soubory budou vyzvedávány prímo ze systému souborű poçítaçe. Tento zpűsob je efektivní, ale umozńuje kódovat jen texty, které jsou prítomny v podobë souborű. Nelze napr. kódovat výstupy z CGI skriptű.

Zvolíte-li tuto variantu, nemá zádný význam nastavení promënných $socklib a $flag{"decodequery"}.

http
V tomto rezimu práce SaCzech-U získává kódované dokumenty od svého serveru prostrednictvím HTTP protokolu. Tedy zahraje si na WWW klienta, odstraní své vlastní jméno z dotazu, který mu byl polozen, a polozí serveru tento modifikovaný dotaz. Data, která získá jako odpovëd, posoudí a bud prekóduje (jestlize se jedná o text, presnëji MIME typ text/html nebo text/plain) nebo propustí beze zmëny.

Tento zpűsob je podstatnë ménë efektivní (obslouzení kazdého dotazu vyvolává jeden dotaz navíc), umozńuje vsak prekódovat vse, co je na serveru k dispozici - vçetnë výstupű z CGI skriptű.

Zvolíte-li tuto variantu, nemá zádný význam nastavení promënných $defaultfile, $dirdelim a príznakű timeservices a $ifmodifiedsince.

guess
SaCzech-U se pokusí automaticky urçit pro kazdý dotaz, kterou z výse uvedených metod má pouzít. Vyuzívá k tomu hodnotu promënné $cgipath. Jestlize je zaçátek cesty ke kódované informaci (çást URL, uvedená za voláním skriptu) shodný s $cgipath, pouzíje pro získání dokumentu HTTP. V opaçném prípadë jej vyzvedne prímo ze systému souborű.

Metoda guess se snazí o rozumný kompromis mezi predchozími alternativami. Urçení, kdy pouzít který zpűsob, vsak rozhodnë není dokonalé.

$socklib
Existence této promënné je zpűsobena nejrűznëjsími nekompatibilitami a zádrhely pri pouzívání sítových sluzeb v Perlu. SaCzech-U pri získávání textű protokolem HTTP (pouzívá se pri metodách http a guess) potrebuje komunikovat se soketem. Pri jeho otevrení vyzaduje dvë konstanty - SOCK_STREAM a AF_INET. Standardním zpűsobem je brát tyto údaje ze systémových knihoven, avsak
  1. jejich existence není samozrejmostí - musí se spoustë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 puzil jako minimální variantu vlastní definici zmínëných konstant. Jejich hodnoty by mëly být stejné vsude. Kromë toho jsou v souboru make pripraveny alternativy pro Perl verze 4.0 a 5.0. Pokud vám vlastní definice nevyhovuje, staçí príslusným zpűsobem upravit komentárové znaky, kterými je vybrána jedna z nabízených alternativ.

$defaultfile
Obsahuje jméno souboru, který má být uzivateli predlozen, pokud zadá pouhé jméno adresáre. Vëtsinou se pro tento úçel pouzívá index.html. Pokud uzivatel pozaduje /texty/, ve skuteçnosti obdrzí /texty/index.html.

$dirdelim
Znak, pouzívaný v daném operaçním systému pro oddëlování adresárű. Bude pouzit v regulárních výrazech, proto je treba jej príslusnë vybavit ochrannými zpëtnými lomítky. Nejbëznëjsí hodnoty (lomítko a zpëtné lomítko) jsou pripraveny v souboru make.

$barczhead, $barcztail, $barenhead, $barentail
Texty, které SaCzech-U vkládá do stránky pred (...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 príznakű. Jejich prípustnými hodnotami jsou 0 (nula - vypnuto) nebo 1 (jedniçka - zapnuto). Príznak timeservices udává, zda se lze spolehnout výsledky funkce stat programovacího jazyka Perl, kterou SaCzech-U vyuzívá pro získání informací o velikosti a dobë vzniku souboru.

Volba je urçena predevsím pro operaçní systémy jiné nez Unix, ve kterém by funkce stat mëla fungovat bez problémű. U odlisných systémű je treba vëc vyzkouset.

$flag{"ifmodifiedsince"}
Má skript reagovat na hlaviçku If-Modified-Since? Pokud vámi pouzívaný server nepredává CGI skriptűm informace z HTTP hlaviçek dotazu (v promënných prostredí HTTP_hlaviçka), nedostává SaCzech potrebné informace. V takovém prípadë volbu vypnëte.

$flag{"decodequery"}
Má být dotaz (pri volání pomocí GET obsah promënné prostredí QUERY_STRING podle specifikace CGI, pri volání pomocí POST pak tëlo dotazu), predávaný serveru pri komunikaci protokolem HTTP (metoda http nebo guess), prekódován do výchozího kódu (definován promënnou $source)? Je-li tato vlastnost zapnuta, budou prekódována data, pricházející skriptu jako dotaz. Predpokládá se pri tom, ze uzivatel je zadá ve stejném kódu, do kterého si nechává prelozit dokumenty.

Tím je ukonçena konfiguraçní fáze. Jako dalsí krok spustte

./make
Jeho výsledkem by mëla být skupina souborű (toXXX[.cgi] nebo yyy[.cgi] a soubor whichcode[.cgi]. Tyto soubory presuńte do adresáre s CGI skripty tak, aby jejich umístëní vyhovovalo identifikaci, uvedené ve výse zmińovaných promënných $cgipath a $homedir - naprí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 neprosel pres SaCzech-U nebo jím prosel se ztrátou desítky. Dotyçná synonyma zajistí príkazy
cd ~/www/cgi-bin
ln -s whichcode to__CHARSET__
ln -s whichcode to
prípadnë
ln -s whichcode.cgi __CHARSET__.cgi
ln -s whichcode.cgi to.cgi

a podobnë.
Tím je instalace ukonçena.