[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
[0504]
[0505]
[0506]
[0507]
[0508]
[0509]
[0510]
[0511]
[0512]
[0513]
[0514]
[0515]
[0516]
[0517]
[0518]
[0519]
[0520]
[0521]
[0522]
[0523]
[0524]
[0525]
[0526]
[0527]
[0528]
[0529]
[0530]
[0531]
[0532]
[0533]
[0534]
[0535]
[0536]
[0537]
[0538]
[0539]
[0540]
[0541]
[0542]
[0543]
[0544]
[0545]
[0546]
[0547]
[0548]
[0549]
[0550]
[0551]
[0552]
[0553]
[0554]
[0555]
[0556]
[0557]
[0558]
[0559]
[0560]
[0561]
[0562]
[0563]
[0564]
[0565]
[0566]
[0567]
[0568]
[0569]
[0570]
[0571]
[0572]
[0573]
[0574]
[0575]
[0576]
[0577]
[0578]
[0579]
[0580]
[0581]
[0582]
[0583]
[0584]
[0585]
[0586]
[0587]
[0588]
[0589]
[0590]
[0591]
[0592]
[0593]
[0594]
[0595]
[0596]
[0597]
[0598]
[0599]
[0600]
[0601]
[0602]
[0603]
[0604]
[0605]
[0606]
[0607]
[0608]
[0609]
[0610]
[0611]
[0612]
[0613]
[0614]
[0615]
[0616]
[0617]
[0618]
[0619]
[0620]
[0621]
[0622]
[0623]
[0624]
[0625]
[0626]
[0627]
[0628]
[0629]
[0630]
[0631]
[0632]
[0633]
[0634]
[0635]
[0636]
[0637]
[0638]
[0639]
[0640]
[0641]
[0642]
[0643]
[0644]
[0645]
[0646]
[0647]
[0648]
[0649]
[0650]
[0651]
[0652]
[0653]
[0654]
[0655]
[0656]
[0657]
[0658]
[0659]
[0660]
[0661]
[0662]
[0663]
[0664]
[0665]
[0666]
[0667]
[0668]
[0669]
[0670]
[0671]
[0672]
[0673]
[0674]
[0675]
[0676]
[0677]
[0678]
[0679]
[0680]
[0681]
[0682]
[0683]
[0684]
[0685]
[0686]
[0687]
[0688]
[0689]
[0690]
[0691]
[0692]
[0693]
[0694]
[0695]
[0696]
[0697]
[0698]
[0699]
[0700]
[0701]
[0702]
[0703]
[0704]
[0705]
[0706]
[0707]
[0708]
[0709]
[0710]
[0711]
[0712]
[0713]
[0714]
[0715]
[0716]
[0717]
[0718]
[0719]
[0720]
[0721]
[0722]
[0723]
[0724]
[0725]
[0726]
[0727]
[0728]
[0729]
[0730]
[0731]
[0732]
[0733]
[0734]
[0735]
[0736]
[0737]
[0738]
[0739]
[0740]
[0741]
[0742]
[0743]
[0744]
[0745]
[0746]
[0747]
[0748]
[0749]
[0750]
[0751]
[0752]
[0753]
[0754]
[0755]
[0756]
[0757]
[0758]
[0759]
[0760]
[0761]
[0762]
[0763]
[0764]
[0765]
[0766]
[0767]
[0768]
[0769]
[0770]
[0771]
[0772]
[0773]
[0774]
[0775]
[0776]
[0777]
[0778]
[0779]
[0780]
[0781]
[0782]
[0783]
[0784]
[0785]
[0786]
[0787]
[0788]
[0789]
[0790]
[0791]
[0792]
[0793]
[0794]
[0795]
[0796]
[0797]
[0798]
[0799]
[0800]
[0801]
[0802]
[0803]
[0804]
[0805]
[0806]
[0807]
[0808]
[0809]
[0810]
[0811]
[0812]
[0813]
[0814]
[0815]
[0816]
[0817]
[0818]
[0819]
[0820]
[0821]
[0822]
[0823]
[0824]
[0825]
[0826]
[0827]
[0828]
[0829]
[0830]
[0831]
[0832]
[0833]
[0834]
[0835]
[0836]
[0837]
[0838]
[0839]
[0840]
[0841]
[0842]
[0843]
[0844]
[0845]
[0846]
[0847]
[0848]
[0849]
[0850]
[0851]
[0852]
[0853]
[0854]
[0855]
[0856]
<!DOCTYPE html>
<!-- WASDOC AXP-2.0.0 (CGILIB AXP-1.9.9) -->
<!-- wasDOC Copyright (C) 2019,2020 Mark G.Daniel - Apache-2.0 licenced -->
<!--  3-NOV-2021 02:50 -->
<noscript>NOTE: SOME FUNCTIONALITY EMPLOYS JAVASCRIPT</noscript>
<div id="erreport1" style="display:none;"></div>
<script>
function errorReport(string) {
   for (var cnt = 1; cnt <= 2; cnt++) {
      var err = document.getElementById('erreport'+cnt);
      err.style.display = 'block';
      err.innerHTML += string;
   }
}
</script>
<style type="text/css">
html { font-family: arial, verdana, sans-serif; font-size:12pt; margin:1em; }
h1 { font-size:124%; font-style:bold;
     margin-top:1em; margin-bottom:0.5em; }
h2 { font-size:120%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.4em; }
h3 { font-size:116%; font-style:bold;
     margin-top:1.0em; margin-bottom:0.3em; }
h4 { font-size:112%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.3em; }
h5 { font-size:112%; font-style:bold; 
     margin-top:1.1em; margin-bottom:0.3em; }
h6 { font-size:112%; font-style:bold; padding:0; margin:0; }

h1 .text { text-decoration:underline; }
h1 .numb { padding-right:0.8em; }
h1 .numb:empty { display:none; padding-right:0; }
h2 .numb { padding-right:0.8em; }
h2 .numb:empty { display:none; padding-right:0; }
h3 .numb { padding-right:0.8em; }
h3 .numb:empty { display:none; padding-right:0; }
h4 .numb { padding-right:0.8em; }
h4 .numb:empty { display:none; padding-right:0; }
h5 .numb { display:none; padding-right:0; }
h6 .numb { display:none; padding-right:0; }

kbd { font-family:monospace; }

noscript { font-size:1.2em; }

p { line-height:1.1em; margin-top:1em; margin-bottom:1em; }

.chunk { font-size:130%; text-decoration:underline; }
.head {}
.high {}
.bold { font-weight:bold; }
.center { text-align:center; }
.italic { font-style:italic; }
.left { text-align:left; }
.nowrap { white-space:nowrap; }
.prewrap { white-space:pre; }
.right { text-align:right; }
.strike { text-decoration:line-through; }
.under { text-decoration:underline; }

.backlight { background-color:#f2f2f2; }
.display0 { display:none; }

img { max-width:100%; }
.imglink { }

.link { }
.blank { }

.list { margin-bottom:1em; }
.list li { margin-top:0.5em; }
.list0 li { margin-top:0; }
.item {}

.tabl { border-collapse:collapse; text-align:left; margin:0.4em 2em 0.5em 2em; }
.tabu { border-collapse:collapse; text-align:right; margin:0.4em 2em 0.5em 2em; }

.tabr { vertical-align:top; }
.tabh { padding:0.2em 0 0 2em; margin:0; }
.tabd { padding:0.1em 0 0 2em; margin:0; }
.tabh:first-of-type, td:first-of-type { padding-left:0; }

.tabu .tabh,
.tabu .tabd { border:1px solid gray; padding:0.2em 0.3em 0.2em 0.3em; }
.tab0 { border:none; visibility:hidden; max-width:1em; 
        white-space:nowrap; overflow:hidden; }

.tabauto { margin-left:auto; margin-right:auto; }

.tabr:empty { height:0.2em; }
.tabu .tabh:empty, .tabu .tabd:empty { border:none; visibility:hidden; }

.error { font-size:110%; color:black; background-color:yellow;
         font-family:sans-serif; font-weight:bold; font-style:normal;
         width:95%; border:solid 1px gray; padding:0.5em 1em 0.5em 1em; }
.error::before { content:'\026a0\00a0'; }
.image { }
.page { width:98%; border:1px dashed gray; margin:1.5em 0 1.8em 0; }
.epage { width:98%; border:1px dashed black; margin:1.5em 0 1.8em 0; }
.monosp { font-family:monospace; }
.ppage { display:none; }
.simple { list-style-type:none; }
.valtop { vertical-align:top; }
.valmid { vertical-align:middle; }
.valbot { vertical-align:bottom; }

.code { border-style:solid; border-width:0 0 0 1px; padding-left:1em;
        font-family:monospace; white-space:pre; }
.block { }
.blockof { margin:0.4em 2em 0.5em 2em; }
.example { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
           margin-top:0.5em; margin-bottom:0.5em; white-space:pre; }
.indent { margin-left:2em; margin-right:2em; }
.noindent { margin-left:0; margin-right:0; }
.inblock { display:inline-block; }
.mono { white-space:pre; font-family:monospace; }
.note { margin:0.4em 2em 0.5em 2em; page-break-inside:avoid; }
.note h5 { margin-top:0 }
.note_hr { width:80%; border:1px solid gray; }
.prop { padding-left:1em; margin-top:0.5em; margin-bottom:0.5em; }
.quote { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
         margin-top:0.5em; margin-bottom:0.5em; }
.this { display:none; }

a:link,a:visited { color:black; text-decoration:none; }
a:hover,a:active { text-decoration:underline; }
a:focus { outline:0; } 

:target:before { content:''; display:block; height:0.1em; margin:-0.1em; }
a.link:link, a.link:visited,a.link:active 
{ color:midnightBlue; text-decoration:underline; text-decoration-style:solid; }

.TOC1cols1 { width:80%; max-width:80%; }
.TOC1cols2 { column-count:2; width:80%; max-width:80%; }
.TOC1cols3 { column-count:3; max-width:90%; max-width:90%; }
.TOC1cols4 { column-count:4; max-width:100%; max-width:100%; }
.TOC1table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC1table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC1table td+td { padding:0 0 0 0.5em; }
.TOC1table .numb { width:3em; max-width:3em; }
.TOC1table .sepr { width:5em; max-width:6em; overflow:hidden; }
.TOC1table .majr { font-weight:bold; }
.TOC1table .text { white-space:normal; }

/* These are due to Firefox (at least <= 76) recalcitrant multi-column handling.
   Web search "Split table into css columns, issue in Firefox" (stackoverflow).
   "Good grief, Charlie Brown!" */
 
.TOC1cols2 table,
.TOC1cols2 tbody,
.TOC1cols2 tr,
.TOC1cols3 table,
.TOC1cols3 tbody,
.TOC1cols3 tr,
.TOC1cols4 table,
.TOC1cols4 tbody,
.TOC1cols4 tr { display:block; padding:0; }

.TOC2cols1 { width:60%; max-width:60%; }
.TOC2cols2 { column-count:2; width:70%; max-width:70%; }
.TOC2cols3 { column-count:3; width:80%; max-width:80%; }
.TOC2cols4 { column-count:4; width:90%; max-width:90%; }
.TOC2table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC2table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC2table .numb { font-weight:bold; padding-right:0.5em; }
.TOC2table .text { width:100%; white-space:normal; }

/* see "recalcitrant" above */
.TOC2cols2 table,
.TOC2cols2 tbody,
.TOC2cols2 tr,
.TOC2cols3 table,
.TOC2cols3 tbody,
.TOC2cols3 tr,
.TOC2cols4 table,
.TOC2cols4 tbody,
.TOC2cols4 tr { display:block; padding:0; }

.NAVtable { margin:0.1em 0 0 2em; }
.NAVtable td { font-size:110%; font-weight:bold; padding:0; margin:0; }
.NAVtable a { padding:0 0.5em 0 0.5em; text-decoration:none; }

.IDXcols1 { width:80%; max-width:80%; }
.IDXcols2 { column-count:2; width:90%; max-width:90%; }
.IDXcols3 { column-count:3; width:95%; max-width:95%;  }
.IDXcols4 { column-count:4; width:100%; max-width:100%;  }
.IDXtable { margin:1em 0 1em 2em; white-space:nowrap; break-inside:auto; }
.IDXtable tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.IDXtable .alpha { font-weight:bold; min-width:2em; }
.IDXtable .text  { width:100%; white-space:normal; }
.IDXtable .para:before { content:'\00b6\00a0'; }

/* see "recalcitrant" above */
.IDXcols2 table,
.IDXcols2 tbody,
.IDXcols2 tr,
.IDXcols3 table,
.IDXcols3 tbody,
.IDXcols3 tr,
.IDXcols4 table,
.IDXcols4 tbody,
.IDXcols4 tr { display:block; padding:0; }

.insight { background-color:cyan; font-family:monospace;
           padding:0 0.2em 0 0.2em; margin:0 0.2em 0 0.2em;
           font-size:100%; font-style:normal; font-weight:normal;
           text-decoration:none; }

.wasdoc { font-family: "Lucida Console", Monaco, monospace; 
          letter-spacing:-0.07em; }

@media screen { .blank::after { content:"\2924"; } 
                .print { display:none; }
}

@media print {
   table { page-break-inside:avoid; }
   .noprint { display:none; }
   .page { border:none; page-break-after: always; }
   .epage { display:none; }
   .ppage { page-break-after:always; }
   .NAVtable { display:none; }
   .NAVprint { display:block!important; }
}

@page { margin:2cm 1cm 2cm 1cm;  }
</style>
<!-- source:0000_INSTALL.WASDOC -->

<style type="text/css">._smiley::after { font-size:150%; vertical-align:middle; content:'\263a' }</style>
<style type="text/css">._frowny::after { font-size:150%; vertical-align:middle; content:'\2639' }</style>

<a id="0." href="#"></a>
<title>WASD Install and Update &ndash; Other Ways to Deploy</title>
<a id="5." href="#"></a>
<a id="5.otherwaystodeploy" href="#"></a>
<a id="otherwaystodeploy" href="#"></a>
<h1 class="head chunk">WASD Install and Update</h1>
<h1 class="head"><span class="numb">5.</span><span class="text">Other Ways to Deploy</span></h1>

<div class="TOC2cols2">
<table class="TOC2table">
<tr><td><a href="install005.html#5.1.serverenvironments"><span class="numb">5.1</span><span class="text">Server Environments</span></a>
<tr><td><a href="install005.html#5.1.1.adhocserverwrapper"><span class="numb">5.1.1</span><span class="text">Ad Hoc Server Wrapper</span></a>
<tr><td><a href="install005.html#5.1.2.formalenvironments"><span class="numb">5.1.2</span><span class="text">Formal Environments</span></a>
<tr><td><a href="install005.html#5.1.3.considerations"><span class="numb">5.1.3</span><span class="text">Considerations</span></a>
<tr><td><a href="install005.html#5.2.multipleinstallations"><span class="numb">5.2</span><span class="text">Multiple Installations</span></a>
<tr><td><a href="install005.html#5.3.selectcomprocedure"><span class="numb">5.3</span><span class="text">SELECT.COM Procedure</span></a>
<tr><td><a href="install005.html#5.4.0x0337btaincomprocedure"><span class="numb">5.4</span><span class="text">0&#x0337;BTAIN.COM Procedure</span></a>
<tr><td><a href="install005.html#5.5.clonecomprocedure"><span class="numb">5.5</span><span class="text">CLONE.COM Procedure</span></a>
</table>
</div>

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="install004.html#4.">&#8598;&#xFE0E;</a>
<td><a href="install000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="install006.html#6.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>

<p> While <span class="high italic">vanilla</span> installations provide a straight-forward and complete WASD
package there a number of other approaches to the installation and maintenance
of a site or sites.

<a id="5.1" href="#"></a>
<a id="5.1.serverenvironments" href="#"></a>
<a id="serverenvironments" href="#"></a>
<h2 class="head"><span class="numb">5.1</span><span class="text">Server Environments</span></h2>

<p> WASD server environments allow multiple, distinctly configured environments
to execute on a single system.  Generally, WASD's unlimited virtual servers and
multiple account scripting eliminates the need for multiple execution
environments to kludge these requirements.  However there may be circumstances
that make this desirable; regression and forward-compatibility testing comes to
mind.

<p> First some general comments on the design of WASD.

<ul class="list">

<li class="item"> WASD creates and populates it's own logical name table (see
<a class="link" href="install004.html#4.5.logicalnames">4.5 Logical Names</a>).

<p> It also adds the WASD_FILE_DEV[<span class="high italic">n</span>] and WASD_ROOT[<span class="high italic">n</span>]
logical names to the SYSTEM logical name table.

<li class="item"> WASD creates and uses rights identifiers.

<p> Installation creates and associates specific rights identifiers with
separate accounts for server and script execution.  Some specifically named
identifiers have functional meaning to the server.  Server startup can create
and associate rights identifers used to manage the server run-time environment.

<p> All executing server images are aware of all other executing server images
on the same system and within the same cluster.  This performs all manner of
coordination (e.g. instance recovery, instantiated services) and data exchange
(e.g. &dollar;HTTPD/DO=MAP/ALL) activities.

<li class="item"> WASD uses global sections to accumulate data and for communication
between WASD instances.

<p> Some of these are by default permanent and remain on a system unless
explicitly removed.

<li class="item"> WASD uses detached scripting processes.

<p> As it's possible to &dollar;STOP a server process (and thereby prevent it's
run-down handlers from cleaning up those detached processes).  It therefore
needs to be able to recognise as its 'own' and clean any such 'orphaned'
processes up next time it starts.  It does this by having a rights identifier
associated with the server process name (e.g. WASD:80 grants its scripting
processes WASD_PRC_WASD_80, a second instance WASD2:80, WASD_PRC_WASD2_80,
etc.)

</ul>

<p> All of these mechanisms support multiple, independent environments on a
single system.  Due to design and implementation considerations there are
fifteen such environments available per system.  The primary (default) is one. 
Environments two to fifteen are available for site usage.  (Demonstration mode,
/DEMO uses environment zero.)  Server <span class="high italic">instances</span>
(<a class="link blank" target="_blank" href="../features/#serverinstances">Server Instances</a> section in <a class="link blank" target="_blank" href="../features/#0.">WASD Features</a> document)
share a single environment.

<p> There are two approaches to provisioning such multiple, independent
environments.

<a id="5.1.1" href="#"></a>
<a id="5.1.1.adhocserverwrapper" href="#"></a>
<a id="adhocserverwrapper" href="#"></a>
<h3 class="head"><span class="numb">5.1.1</span><span class="text">Ad Hoc Server Wrapper</span></h3>

<p> This is a DCL procedure that allows virtually any WASD release HTTP server
to be executed in a detached process, either by itself or concurrently with a
full release or other ad hoc detached server.  The server image and associated
configuration files used by this process can be specified within the procedure
allowing completely independent versions and environments to be fully
supported.

<p> Full usage instructions may be found in the example procedure(s) in
<a class="link blank" target="_blank" href="/wasd_root/example/*adhoc*.*">WASD_ROOT:[EXAMPLE]*ADHOC*.COM</a>

<p> Two versions are provided, one for pre-v10 and one for post-v10 (due to
changes in logical naming schema).

<a id="5.1.2" href="#"></a>
<a id="5.1.2.formalenvironments" href="#"></a>
<a id="formalenvironments" href="#"></a>
<h3 class="head"><span class="numb">5.1.2</span><span class="text">Formal Environments</span></h3>

<p> Although the basic infrastructure for supporting multiple environments
(i.e. the 0..15 environment number) has been in place since version 8, formal
support in server CLI qualifiers and DCL procedures has only been available
since version 10.  To support version 9 or earlier environments the
<a class="link" href="install005.html#5.1.1.adhocserverwrapper">5.1.1 Ad Hoc Server Wrapper</a> must be used.

<p> WASD version 10 startup and other run-time procedures have been modified to
support running multiple WASD environments simply from independent WASD
file-system trees.  The standard
<a class="link blank" target="_blank" href="/wasd_root/example/startup.com">STARTUP.COM</a>
procedure accepts the WASD_ENV parameter to specify which environment (1..15)
the server should execute within (primary/default is 1).  The procedure then
derives the WASD_ROOT logical name from the location of the startup procedure.

<p> For example:

<div class="blockof code">&dollar;! start current release
&dollar; WASD_STARTUP = &quot;/SYSUAF=(ID,SSL)/PERSONA&quot;
&dollar; @DKA0:[WASD_ROOT.STARTUP]STARTUP.COM
&dollar;! start previous release in environment 2
&dollar; WASD_ENV = 2
&dollar; @DKA0:[WASD_ROOT_MINUS1.STARTUP]STARTUP.COM
</div>

<a id="5.1.3" href="#"></a>
<a id="5.1.3.considerations" href="#"></a>
<a id="considerations" href="#"></a>
<h3 class="head"><span class="numb">5.1.3</span><span class="text">Considerations</span></h3>

<p> WASD environments each fully support all WASD features and facilities
(including multiple server instances) with the exception of DECnet scripting
where because of DECnet objects' global (per-system) definition only the one
must be shared between environments.

<p> Per-environment configuration must be done in its own WASD_ROOT part of the
file-system and logical names must be defined in the environment's associated
logical name table.  The site administrator must keep track of which
environment requires to be accessed from the command-line and set the process
logical name search list using the appropriate

<div class="blockof code">&dollar; @WASD_FILE_DEV<span class="high italic">n]</span>
</div>

where <span class="high italic">n</span> can be a non-primary environment number (see <a class="link" href="install004.html#4.5.logicalnames">4.5 Logical Names</a>).

<p> It is not possible to have multiple environments bind their services to the
same IP address and port (for fundamental networking reasons).  Unless the
network interface is specifically multi-homed for the purpose, services
provided by separate environments must be configured to use unique IP ports.

<p> Non-primary environments (2&hellip;15) prefix the environment as a (hex) digit
before the &quot;WASD&quot; in the process name.  The above example when executing, each
with a single scripting process, would appear in the system as (second
environment providing a service on port 2280):

<div class="blockof code">Pid      Process Name    State  Pri      I/O       CPU       Page flts  Pages
00000101 SWAPPER         HIB     16        0   0 00:00:11.98         0      0
&hellip;
00000111 ACME_SERVER     HIB     10     6247   0 00:00:12.63       540    611 M
00000112 QUEUE_MANAGER   HIB     10      328   0 00:00:00.18       136    175
00000122 TCPIP&dollar;INETACP   HIB     10  1249419   0 00:07:33.95       401    326
00000123 TCPIP&dollar;ROUTED    LEF      6  3495839   0 00:01:15.49       166    165 S
&hellip;
00000468 WASD:80         HIB      6   132924   0 00:01:29.26     17868   2856
0000046D 2WASD:2280      HIB      6   129344   0 00:01:29.26     17712   2840
0000049D WASD:80-8       LEF      4     4449   0 00:00:00.67       934    194
00000503 2WASD:2280-2    LEF      4      565   0 00:00:00.28       732    102
&hellip;
</div>

<a id="5.1.3.0.1" href="#"></a>
<a id="5.1.3.cleaningup" href="#"></a>
<a id="cleaningup" href="#"></a>
<h5 class="head"><span class="text">Cleaning Up</span></h5>

<p> As described earlier each environment creates and maintains logical name
table(s) and system-level name(s), detached scripting processes, lock resources
and permananent global sections.  Lock resources disappear with the server
processes.  Logical names, global sections, rights identifiers and occasionally
detached scripting processes may require some cleaning up when a non-primary
environment's use is concluded.

<a id="5.2" href="#"></a>
<a id="5.2.multipleinstallations" href="#"></a>
<a id="multipleinstallations" href="#"></a>
<h2 class="head"><span class="numb">5.2</span><span class="text">Multiple Installations</span></h2>

<p> It is possible, and often useful, to build another WASD on a system with an
existing and/or running installation.  One purpose might be to maintain the
previous version as a fallback in case of unexpected problems when migrating to
a more recent version.  Another, to maintain multiple releases for regression
testing.

<p> The general process is as follows:

<ul class="list">

<li class="item"> A clash with any existing [WASD_ROOT] directory must be avoided.
<br> Using the &quot;-d&quot; switch, UNZIP into a working directory using any
unique name (BLAH in this example).

<div class="blockof code">&dollar; SET DEFAULT device:[000000]
&dollar; UNZIP -d [.BLAH] device:[dir]archive.ZIP
</div>

Do the same with object module archive(s) if required.

<li class="item"> For the WASD OpenSSL package the WASD_ROOT portion of the tree
must additionally be specified.

<div class="blockof code">&dollar; UNZIP -d [.BLAH.WASD_ROOT] device:[dir]OPENSSLWASD<span class="high italic">nnn-arch</span>.ZIP
</div>

<li class="item"> Rename the WASD root directory into the current directory using a
representative name (appending the version number is suggested) and then
delete the working directory.

<div class="blockof code">&dollar; RENAME [.BLAH]WASD_ROOT.DIR []WASD_ROOT_<span class="high italic">nnnn</span>.DIR
&dollar; DELETE BLAH.DIR;*
</div>

<li class="item"> Move into the just renamed directory and build using the parameter INSTALL.
<br> The build is (always) performed using locally defined logical names.

<div class="blockof code">&dollar; SET DEFAULT [WASD_ROOT_<span class="high italic">nnnn</span>]
&dollar; @INSTALL INSTALL
</div>

<p> The INSTALL parameter overrides the install check and advisory message
otherwise generated:
 
<div class="blockof code">*****************************************
*   &quot;WASD_ROOT&quot; LOGICAL NAME DETECTED.  *
*  THIS DOES NOT LOOK LIKE AN INSTALL!  *
*****************************************
</div>

<li class="item"> As appropriate, copy configuration and other files from the current WASD
installation to the new.
<br> Check release notes for any variants. 

<div class="blockof code">&dollar; COPY WASD_ROOT:[LOCAL]*.* [WASD_ROOT_<span class="high italic">nnnn</span>.LOCAL]
</div>

<p> Other site-specific localisations similarly may need to be copied or
otherwise reproduced.
<br> For example, server or scripting account LOGIN.COM, scripts, etc.

</ul>

<p> To move the running WASD environment from one installation to another:

<ul class="list">

<li class="item"> Shut down the currently running server.

<div class="blockof code">&dollar; HTTPD/DO=EXIT=NOW
</div>

<li class="item"> Start the desired version of WASD from its file-system location.

<div class="blockof code">&dollar; @device:[WASD_ROOT_<span class="high italic">nnnn</span>.STARTUP]STARTUP.COM
</div>

<p> WASD logical names and environment will reflect the particular WASD root
directory.

<br> Site-specific elements in the startup might need to be similarly
flexible.

</ul>

<a id="5.2.0.0.0.999" href="#"></a>
<a id="5.2.dclprocedureselectcom" href="#"></a>
<a id="dclprocedureselectcom" href="#"></a>
<h6 class="head display0"><span class="text">DCL Procedure SELECT.COM</span></h6>
<a id="5.3" href="#"></a>
<a id="5.3.selectcomprocedure" href="#"></a>
<a id="selectcomprocedure" href="#"></a>
<h2 class="head"><span class="numb">5.3</span><span class="text">SELECT.COM Procedure</span></h2>

<p> The <a class="link blank" target="_blank" href="/wasd_root/install/select.com">WASD_ROOT:[INSTALL]SELECT.COM</a>
procedure allows a selective update to the most recent version from an
earlier version, usually but not exclusively the previous version.  Where there
is some advantage in only updating part of the package this procedure can be
used.

<div class="blockof code">&dollar; SET DEFAULT WASD_ROOT:[INSTALL]
&dollar; @SELECT DKA100:[WASD]WASD1150.ZIP

      WASD VMS Web Services, Copyright (C) 1996-2020 Mark G.Daniel.
  This package (all associated programs), comes with ABSOLUTELY NO WARRANTY.
   This is free software, and you are welcome to redistribute it under the
 conditions of the GNU GENERAL PUBLIC LICENSE, version 3, or any later version.
                    http://www.gnu.org/licenses/gpl.txt

                    *************************************
                    *  SELECTIVELY UPDATE FROM ARCHIVE  *
                    *************************************

This procedure provides a site UPDATE using a full archive as the source.
It examines the currently installed package to determine the relationship
between the site and the archive.  It then selectively extracts required files
to bring the site up to revision.  It can be used with full source archives
as well as the optional object module archives.

Each full archive is released with an increment in at least the tweak-level
digit in the version string (&lt;major&gt;.&lt;minor&gt;.&lt;tweak&gt; e.g. &quot;11.0.0&quot;) so this is
used to determine the base-level installation of the current site.  If for some
reason this is not a standard site then do not use this procedure.

Continue? [NO]: y

                         ***************************
                         *  CHECK CURRENT VERSION  *
                         ***************************

This selective update is to 11.5.0

This site has been determined to be 11.4.0

If this is not accurate then do not continue!

                          ************************
                          *  UPDATE FROM 11.4.n  *
                          *         -or- 11.3.n  *
                          ************************

DKA100:[000000]WASD_ROOT.DIR;1
                     13-APR-2020 01:14:42.25
DKA100:[WASD]WASD1150.ZIP;1
                      9-JUL-2020 15:53:47.19

Continue? [NO]:
</div>

<p> When extracted, the content can then be built using
<span class="high monosp">@[.WASD_ROOT.INSTALL]UPDATE.COM</span> as described in <a class="link" href="install003.html#3.2.updatecomprocedure">3.2 UPDATE.COM Procedure</a>.  It may or may not require a full update build.  The procedure
will advise if a specific portion can be more quickly built and deployed.

<a id="5.4" href="#"></a>
<a id="5.4.0x0337btaincomprocedure" href="#"></a>
<a id="0x0337btaincomprocedure" href="#"></a>
<h2 class="head"><span class="numb">5.4</span><span class="text">0&#x0337;BTAIN.COM Procedure</span></h2>
<a id="5.4.0.0.0.999" href="#"></a>
<a id="5.4.0btaincomprocedure" href="#"></a>
<a id="0btaincomprocedure" href="#"></a>
<h6 class="head display0"><span class="text">0BTAIN.COM Procedure</span></h6>
<a id="5.4.0.0.0.999" href="#"></a>
<a id="5.4.0btaincomprocedure" href="#"></a>
<a id="0btaincomprocedure" href="#"></a>
<h6 class="head display0"><span class="text">0BTAIN.COM Procedure</span></h6>
<a id="5.4.0.0.0.1000" href="#"></a>
<a id="5.4.dclprocedure0x0337btaincom" href="#"></a>
<a id="dclprocedure0x0337btaincom" href="#"></a>
<h6 class="head display0"><span class="text">DCL Procedure 0&#x0337;BTAIN.COM</span></h6>

<p> <span class="high bold" style="font-size:110%;">Yes &mdash; that's a ZERO!</span>

<p> The <a class="link blank" target="_blank" href="/wasd_root/install/0btain.com">WASD_ROOT:[INSTALL]0&#x0337;BTAIN.COM</a>
procedure assists in installing and updating selected portions of a WASD package
allowing a &quot;bare-bones&quot; site to be created.

<p> An example use of the procedure looks something like:

<div class="blockof code">&dollar; SET DEFAULT DKA200:[000000]
&dollar; @WASD_ROOT:[INSTALL]0BTAIN DKA100:[WASD]WASD1150.ZIP

        WASD VMS Web Services, Copyright (C) 1996-2020 Mark G.Daniel.
  This package (all associated programs), comes with ABSOLUTELY NO WARRANTY.
   This is free software, and you are welcome to redistribute it under the
 conditions of the GNU GENERAL PUBLIC LICENSE, version 3, or any later version.
                    http://www.gnu.org/licenses/gpl.txt

                     ***********************************
                     *  WASD VMS Web Services v11.5.0  *
                     ***********************************

This DCL procedure allows elements of the above version of the WASD package to
be extracted and installed/updated in a selective manner.  It does require some
knowledge of the WASD package and sometimes significant manual intervention.
It is intended to allow a site to tailor the WASD content of the installation.

Press RETURN to continue:

The WASD_ROOT directory is always assumed to be a subdirectory of the current
directory and is always created if not already existing.  Always perform @0BTAIN
from the parent of the (desired) [.WASD_ROOT] even when updating.

There is currently no [.WASD_ROOT] in the current directory.
Any further action will result in the creation of one.

Continue? [NO]: y

The selection can be made by specifying one of the listed elements, or by
archive path.  An overview will be presented and continuing with the option can
be declined before continuing.  If declined an option to display what would
have been extracted is available.  If an object module archive is present along
with the primary archive the relevant modules are also extracted.

   1.  CORE        extracts build, server, monitor, documentation
   2.  INSTALL     extracts install environment
   3.  SERVER      extracts server code
   4.  WASDOC      extracts documentation and wasDOC code
   5.  SCRIPTS     extracts essential scripts
   6.  path        archive path (e.g. &quot;wasd_root/src/httpd/*&quot;)
   0.  exit

Number or string? [0]:
</div>

<p> When extracted, the content of the new <span class="high monosp">[.WASD_ROOT]</span> directory can then be
built using <span class="high monosp">@[.WASD_ROOT.INSTALL]INSTALL.COM</span> as described in
<a class="link" href="install002.html#2.9.installcomprocedure">2.9 INSTALL.COM Procedure</a>, or <span class="high monosp">@[.WASD_ROOT.INSTALL]UPDATE.COM</span> as
described in <a class="link" href="install003.html#3.2.updatecomprocedure">3.2 UPDATE.COM Procedure</a>, as appropriate.  When using these
procedures individual sections building non-extracted elements must be
declined.  Alternatively, the build procedures associated with individual
elements may be directly used.

<p> The latest version of the procedure is automatically extracted from the
specified package, or it manually can be extracted from the target package
archive using

<div class="blockof code">&dollar; SET DEFAULT <span class="high italic">parent_device</span>:[<span class="high italic">parent_directory</span>]
&dollar; UNZIP -jl <span class="high italic">location:archive</span>.ZIP &quot;*/0btain.com&quot;  !(just to check)
&dollar; UNZIP -j <span class="high italic">location:archive</span>.ZIP &quot;*/0btain.com&quot;
&dollar; @[]0BTAIN.COM
</div>

<p> When manually extracted as above, the final stage of the procedure will
report 

<div class="blockof code">      ****************************************************************
      *                   - IGNORE THE FOLLOWING -                   *
      *  %RMS-E-FNF, file not found                                  *
      *  %RMS-F-ISI, invalid internal stream identifier (ISI) value  *
      ****************************************************************
</div>

which can be safely ignored (the procedure deletes itself from the extracted-to
directory which results in the DCL interpreter reporting the disappearance of
the file).

<p> Alternatively, if the latest package has been extracted to a local location,
or a previous installation included [INSTALL]0BTAIN.COM, then that version can
be used to start the whole thing off, extracting the relevant 0BTAIN.COM from
the specified archive and then executing it.

<a id="5.4.0.0.0.999" href="#"></a>
<a id="5.4.0btaincomprocedure" href="#"></a>
<a id="0btaincomprocedure" href="#"></a>
<h6 class="head display0"><span class="text">0BTAIN.COM Procedure</span></h6>
<a id="5.5" href="#"></a>
<a id="5.5.clonecomprocedure" href="#"></a>
<a id="clonecomprocedure" href="#"></a>
<h2 class="head"><span class="numb">5.5</span><span class="text">CLONE.COM Procedure</span></h2>

<p> The <a class="link blank" target="_blank" href="/wasd_root/install/clone.com">WASD_ROOT:[INSTALL]CLONE.COM</a>
procedure assists in creating a ZIP archive of an existing WASD installation
suitable for recreating the server on another system without the necessity of a
full installation.  This could be used to populate a series of systems with
pre-configured servers.

<p> An example use of the procedure looks something like:

<div class="blockof code">&dollar; @WASD_ROOT:[INSTALL]CLONE

      WASD VMS Web Services, Copyright (C) 1996-2020 Mark G.Daniel.
  This package (all associated programs), comes with ABSOLUTELY NO WARRANTY.
   This is free software, and you are welcome to redistribute it under the
 conditions of the GNU GENERAL PUBLIC LICENSE, version 3, or any later version.
                    http://www.gnu.org/licenses/gpl.txt

                           ***********************
                           *  CLONE THE PACKAGE  *
                           ***********************

This utility creates a separate DCL procedure containing ZIP commands to
archive specified portions of the current system's WASD_ROOT:[000000] tree.
That procedure can then be executed to create an archive which may then be
UNZIPed on any other system(s) to create a copy of the original.  In this way
multiple WASD packages can be deployed without going through the full
installation process and using the original as a working template.

Some portions of the package are essential to any working installation.  These
are always archived.  Others are prompted for and commands to archive those are
only added to the procedure if required.  Multiple such procedures may be
created by specifying unique archive procedure names.

Create a cloning procedure? [NO]: y

                          ************************
                          *  DCL PROCEDURE NAME  *
                          ************************

If multiple cloning procedures are required enter a specific file name,
otherwise use the default.

DCL procedure? [CLONE_WASD.COM]:

                             ******************
                             *  ARCHITECTURE  *
                             ******************

Executables for multiple architectures ([AXP], [IA64], [X86_64]) detected.

Add [AXP] executables? [NO]: y

Add [IA64] executables? [NO]: n

Add [X86_64] executables? [NO]: n

Continue? [NO]: y

                               ***************
                               *  ESSENTIAL  *
                               ***************

These directories and files are essential and always included:

  [AXP]              HTTPD.EXE  HTTPD_SSL.EXE  HTTPDMON.EXE  SECHAN.EXE
  [AXP-BIN]          Alpha script executables
  [CGI-BIN]          architecture-neutral script files
  [HTTP&dollar;NOBODY]      server account home
  [HTTP&dollar;SERVER]      scripting account home
  [INSTALL]          installation, update and security procedures
  [LOCAL]            local configuration files
  [LOG]              access logs
  [LOG_SERVER]       server process logs
  [RUNTIME.HTTPD]    server runtime files (directory listing graphics, etc)
  [SCRATCH]          scripting scratch space
  [STARTUP]          startup procedures (STARTUP*.COM)

Most directories retain some files (e.g. .WWW_HIDDEN, READMEs) but are only
optionally populated with other files as requested.

Continue? [NO]: y

                             *******************
                             *  CONFIGURATION  *
                             *******************

Files from [LOCAL]*.conf (e.g. HTTPD&dollar;CONFIG, HTTPD&dollar;MAP, etc.)

Add? [NO]: y

                                *************
                                *  SCRIPTS  *
                                *************

Files from [CGI-BIN] and executables from [AXP-BIN] and/or [IA64-BIN] and/or
[X86_64-BIN].  Note that this adds ALL files from these directories.  Of course
you can manually edit the resultant procedure to remove unwanted items.

This also adds the rest of the files from the [RUNTIME...] directory tree
(remembering that [RUNTIME.HTTPD] is included with the essential files).

Add? [NO]: n

                             *******************
                             *  DOCUMENTATION  *
                             *******************

Files from [WASDDOC...]*.*

Add? [NO]: y

                          ************************
                          *  EXAMPLE &amp; EXERCISE  *
                          ************************

Files from [EXAMPLE]*.* and [EXERCISE]*.*.

Add? [NO]: n

                                ************
                                *  SOURCE  *
                                ************

Files from [SRC...]*.*.

Add? [NO]: n

                      ********************************
                      *  CREATING ARCHIVE PROCEDURE  *
                      ********************************

Created WASD_ROOT:[install]CLONE_WASD.COM;1

The contents of this procedure can be manually modified and/or other command
lines added to archive or remove specific areas and/or files.

                            *********************
                            *  C O M P L E T E  *
                            *********************
</div>
<!-- source:0600_INDEX.WASDOC -->

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="install004.html#4.">&#8598;&#xFE0E;</a>
<td><a href="install000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="install006.html#6.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>