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.