SaCzech-U: Instalace

SaCzech-U je pouzitelny v prostredi operacniho systemu Unix, pro ktere je dale popisovany postup instalace urcen.

Distribuce programu je ulozena v souboru

saczechU.tar.gz
Distribuci je treba rozbalit pouzitim prikazu
gunzip < saczechU.tar.gz | tar xvf -
Soubory budou rozbaleny do podadresare saczechU. Pote nasleduje faze prizpusobeni vasim konkretnim podminkam. Veskere zasahy se tykaji souboru make, ktery je soucasti distribuce. Je treba jednak zkontrolovat jeho prvni radek (zacinajici znaky #!), zda obsahuje platny prikaz pro spusteni interpretu jazyka Perl. Dale v tomto souboru nasleduji promenne, jejichz hodnoty mozna uznate za vhodne zmenit. Jsou to:
$homedir
UNIXova cesta na hlavni (login) adresar uzivatele.

$user
Virtualni URL cesta (za jmenem serveru) vedouci na WWW koren uzivatele.

$cgipath
Virtualni URL cesta vedouci k CGI skriptum pro zmenu kodovani.
Necht napr. login adresar uzivatele je /home/group/USER,
WWW koren tohoto uzivatele je /home/group/USER/www
a teto UNIXove ceste odpovida virtualni URL cesta http://www.kdesi.ca/~USER/
(tj., vsechny soubory, ktere uzivatel umisti do jakeholiv podadresare pod /home/group/USER/www jsou k dispozici celemu svetu - pokud to uzivatel dovoli vhodnym nastavenim modu jejich pristupu - vetvenim z tohoto URL). Necht uzivatel umisti sve CGI skripty do
/home/group/USER/www/cgi-bin,
vnejsi svet je pak muze vyvolavat jako
http://www.kdesi.ca/~USER/cgi-bin/toASCII.cgi/..., etc.
V tomto pripade je nutno tri vyse uvedene promenne nastavit takto:
$homedir="/home/group/USER";
$user="/~USER";
$cgipath="/~USER/cgi-bin";
(uvadejte bez zaverecnych zpetnych lomitek).

Pokud je mozno skripty instalovat na serveru globalne (implicitne do /www/cgi-bin), coz je situace odpovidajici puvodnimu SaCzechu, budou volany jako http://www.kdesi.ca/cgi-bin/toASCII.cgi/~USER/..., etc.
a nastaveni prislusnych promennych je:

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

$names
Promenna, ktera urcuje volbu nazvu generovanych skriptu. Muze nabyvat hodnot "WWWdia" a "EUnet". Odpovidaji jim dve ruzne definice pole @codes. Vzajemny vztah obou definic je zajistovan asociativnim polem %altCodes. Prirazeni kodu a abeced ulozenych v souberech abeceda.* je zajistovano asociativnim polem %abcNames.

$cgiprefix
Retezec, kterym bude zacinat nazev skriptu. Jmeno j-teho skritptu bude vytvareno takto: $cgiprefix.$codes[j].$cgisuffix.

%codename
Asociativni pole, obsahujici jmena, pod kterymi budou jednotlive kody vystupovat v automaticky generovane nabidce kodu. Nedoporucuje se prilis menit!

SaCzech-U definuje tyto promenne a pole nasledove:
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), kterym bude skript whichcode[.cgi], nabizejici volbu kodu, oslovovat uzivatele. Vsechny ostatni vygenerovane skripty jsou identicke pro oba jazyky.

$source
Implicitni kodovani zdrojovych textu stranek. Zde uvedte kodovani, ve kterem bude pravdepodobne vytvorena vetsina Vasich stranek. Jestlize si stranka nepredepise zdrojovy kod, bude jako vychozi pro jeji prekodovani pouzit tento kod. make automaticky proveri, zda Vami vybrana hodnota $source je platnym jmenem kodu pro danou volbu promenne $names.


Nastaveni vsech ostatnich parametru make se ridi stejnymi pravidly jako v puvodnim SaCzechu:
$perl
Mela by obsahovat prikaz (vcetne absolutni cesty) pro spusteni interpretu jazyka Perl. Bude vyuzita pro vytvoreni prvnich radku konverznich skriptu, ktere se budou spoustet jako CGI skripty. Uvedte proto takovou cestu k interpretu, kterou mohou pouzit CGI skripty (pokud vas server pri spusteni meni koren systemu souboru, muze se lisit od obvykle cesty).

$cgisuffix
Pripona CGI skriptu. Pokud vas server vyzaduje, aby CGI skripty byly vyznacovany urcitou konkretni priponou (nejcasteji .cgi), uvedte ji jako hodnotu teto promenne. Je-li server dostatecne inteligentni na to, aby poznal CGI skript podle cesty, doporucuji ponechat jako hodnotu promenne prazdny retezec.

$getmethod
Zpusob, kterym ma SaCzech-U ziskavat kodovane texty. Muzete si vybrat jednu z nasledujicich alternativ:
file
Soubory budou vyzvedavany primo ze systemu souboru pocitace. Tento zpusob je efektivni, ale umoznuje kodovat jen texty, ktere jsou pritomny v podobe souboru. Nelze napr. kodovat vystupy z CGI skriptu.

Zvolite-li tuto variantu, nema zadny vyznam nastaveni promennych $socklib a $flag{"decodequery"}.

http
V tomto rezimu prace SaCzech-U ziskava kodovane dokumenty od sveho serveru prostrednictvim HTTP protokolu. Tedy zahraje si na WWW klienta, odstrani sve vlastni jmeno z dotazu, ktery mu byl polozen, a polozi serveru tento modifikovany dotaz. Data, ktera ziska jako odpoved, posoudi a bud prekoduje (jestlize se jedna o text, presneji MIME typ text/html nebo text/plain) nebo propusti beze zmeny.

Tento zpusob je podstatne mene efektivni (obslouzeni kazdeho dotazu vyvolava jeden dotaz navic), umoznuje vsak prekodovat vse, co je na serveru k dispozici - vcetne vystupu z CGI skriptu.

Zvolite-li tuto variantu, nema zadny vyznam nastaveni promennych $defaultfile, $dirdelim a priznaku timeservices a $ifmodifiedsince.

guess
SaCzech-U se pokusi automaticky urcit pro kazdy dotaz, kterou z vyse uvedenych metod ma pouzit. Vyuziva k tomu hodnotu promenne $cgipath. Jestlize je zacatek cesty ke kodovane informaci (cast URL, uvedena za volanim skriptu) shodny s $cgipath, pouzije pro ziskani dokumentu HTTP. V opacnem pripade jej vyzvedne primo ze systemu souboru.

Metoda guess se snazi o rozumny kompromis mezi predchozimi alternativami. Urceni, kdy pouzit ktery zpusob, vsak rozhodne neni dokonale.

$socklib
Existence teto promenne je zpusobena nejruznejsimi nekompatibilitami a zadrhely pri pouzivani sitovych sluzeb v Perlu. SaCzech-U pri ziskavani textu protokolem HTTP (pouziva se pri metodach http a guess) potrebuje komunikovat se soketem. Pri jeho otevreni vyzaduje dve konstanty - SOCK_STREAM a AF_INET. Standardnim zpusobem je brat tyto udaje ze systemovych knihoven, avsak
  1. jejich existence neni samozrejmosti - musi se spoustet h2ph
  2. je to neefektivni (zbytecne se interpretuji pomerne rozsahle knihovny)
Zkratka je to komplikovane a pomale. Proto Pavel Satrapa puzil jako minimalni variantu vlastni definici zminenych konstant. Jejich hodnoty by mely byt stejne vsude. Krome toho jsou v souboru make pripraveny alternativy pro Perl verze 4.0 a 5.0. Pokud vam vlastni definice nevyhovuje, staci prislusnym zpusobem upravit komentarove znaky, kterymi je vybrana jedna z nabizenych alternativ.

$defaultfile
Obsahuje jmeno souboru, ktery ma byt uzivateli predlozen, pokud zada pouhe jmeno adresare. Vetsinou se pro tento ucel pouziva index.html. Pokud uzivatel pozaduje /texty/, ve skutecnosti obdrzi /texty/index.html.

$dirdelim
Znak, pouzivany v danem operacnim systemu pro oddelovani adresaru. Bude pouzit v regularnich vyrazech, proto je treba jej prislusne vybavit ochrannymi zpetnymi lomitky. Nejbeznejsi hodnoty (lomitko a zpetne lomitko) jsou pripraveny v souboru make.

$barczhead, $barcztail, $barenhead, $barentail
Texty, ktere SaCzech-U vklada do stranky pred (...head) a za (...tail) nabidku kodu. Jsou ve dvou jazykovych verzich - ceske (...cz...) a anglicke (...en...).

$flag{"timeservices"}
Jedna se o prvni z priznaku. Jejich pripustnymi hodnotami jsou 0 (nula - vypnuto) nebo 1 (jednicka - zapnuto). Priznak timeservices udava, zda se lze spolehnout vysledky funkce stat programovaciho jazyka Perl, kterou SaCzech-U vyuziva pro ziskani informaci o velikosti a dobe vzniku souboru.

Volba je urcena predevsim pro operacni systemy jine nez Unix, ve kterem by funkce stat mela fungovat bez problemu. U odlisnych systemu je treba vec vyzkouset.

$flag{"ifmodifiedsince"}
Ma skript reagovat na hlavicku If-Modified-Since? Pokud vami pouzivany server nepredava CGI skriptum informace z HTTP hlavicek dotazu (v promennych prostredi HTTP_hlavicka), nedostava SaCzech potrebne informace. V takovem pripade volbu vypnete.

$flag{"decodequery"}
Ma byt dotaz (pri volani pomoci GET obsah promenne prostredi QUERY_STRING podle specifikace CGI, pri volani pomoci POST pak telo dotazu), predavany serveru pri komunikaci protokolem HTTP (metoda http nebo guess), prekodovan do vychoziho kodu (definovan promennou $source)? Je-li tato vlastnost zapnuta, budou prekodovana data, prichazejici skriptu jako dotaz. Predpoklada se pri tom, ze uzivatel je zada ve stejnem kodu, do ktereho si nechava prelozit dokumenty.

Tim je ukoncena konfiguracni faze. Jako dalsi krok spustte

./make
Jeho vysledkem by mela byt skupina souboru (toXXX[.cgi] nebo yyy[.cgi] a soubor whichcode[.cgi]. Tyto soubory presunte do adresare s CGI skripty tak, aby jejich umisteni vyhovovalo identifikaci, uvedene ve vyse zminovanych promennych $cgipath a $homedir - napriklad
mv *.cgi ~/www/cgi-bin/
Doporucuji navic pro skript whichcode zavest synonyma to__CHARSET__ (__CHARSET__) a to, pokud odkaz na nektery kodovany soubor neprosel pres SaCzech-U nebo jim prosel se ztratou desitky. Dotycna synonyma zajisti prikazy
cd ~/www/cgi-bin
ln -s whichcode to__CHARSET__
ln -s whichcode to
pripadne
ln -s whichcode.cgi __CHARSET__.cgi
ln -s whichcode.cgi to.cgi

a podobne.
Tim je instalace ukoncena.