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.