/* ----------------------------------------------------------------------- */ /* install NAMED under OS/2 eCS */ /* ----------------------------------------------------------------------- */ /* */ /* activate REXX Utils */ call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' call SysLoadFuncs '@echo off' /* ----------------------------------------------------------------------- */ say '' say 'Diese Routine macht folgendes:' say '- stellt den Hostnamen dieses Systems fest' say '- stellt die Dom„ne dieses Systems fest' say '- prft, ob EMX installiert ist' say '- fragt nach dem gewnschten Installlationsverzeichnis (c:\a\named)' say '- kopiert die Programme in dieses Verzeichnis' say '- erg„nzt den Pfad im config.sys' say '- erstellt die Konfigurationsdatei \mptn\etc\named.conf' say '- erstellt die Verzeichnisse in \var\lib\named' say '- erstellt auf Wunsch die Konfiguration fuer eine Zone (xxx.intern' say '- erstellt die Zonendatei \var\lib\named\master\xxx.intern' say '' say '(zum Weiterfahren eine Taste drcken...)' pull . /* ----------------------------------------------------------------------- */ /* determine source drive for installation (CD or LAN drive) */ /* source directory should be ..\named (from cmd directory) */ 'cd ..\named' cddrv=directory() /* current directory (= source dir) */ say 'Quell-Laufwerk ist' cddrv /* determine boot drive */ bootdrv = SysBootDrive() say 'Boot-Laufwerk ist ' bootdrv say '' /* extract hostname from environment variable HOSTNAME */ hostname = VALUE('HOSTNAME',,OS2ENVIRONMENT) say 'Hostname ist: ' hostname /* determine actual domain name from \mptn\etc\resolv2 */ oldcfg=bootdrv||'\mptn\etc\resolv2' domain='xxxx.intern' /* read resolv2 line by line */ do while lines(oldcfg) line=linein(oldcfg) /* read line */ if pos('domain ',line) <> 0 then do /* domain found */ parse var line part1 ' ' domain domain=strip(domain) /* remove blanks */ say 'Domain ist:' domain end /* if pos */ end /* do while lines */ /* close files */ call stream oldcfg,'c','close' /* ----------------------------------------------------------------------- */ /* Name der gewnschten Domain erfragen */ /* ----------------------------------------------------------------------- */ do forever say ' ' say ' ' say 'Fr welche Zone soll dieser Name-Server Master sein?' say '----------------------------------------------------' say '(Dom„nennamen in Kleinbuchstaben eingeben z.B. xxxx.intern)' say '(ohne Eingabe heisst die Zone:) ' domain say ' ' parse pull answer3 if answer3<>'' then do parse var answer3 part1 '.' part2 if part2='' then do say 'Dom„neanme muss mindestens einen Punkt enthalten' say answer3 'enth„lt keinen Punkt!' end /* then do */ else do domain=answer3 say 'Dom„nenname ist: ' domain leave end /* else do */ end /* if answer3 */ else leave end /* do forever */ /* ----------------------------------------------------------------------- */ /* Namen des Nameservers erfragen */ /* ----------------------------------------------------------------------- */ do forever say ' ' say ' ' say 'Wie soll dieser Name-Server heissen?' say '------------------------------------' say '(Servername in Kleinbuchstaben ohne Punkt, z.B. dns1' say '(ohne Eingabe heisst der Name-Server:) ' hostname say ' ' parse pull answer4 if answer4<>'' then do parse var answer4 part1 '.' part2 if part2='' then do hostname=answer3 leave end /* then do */ else do say 'Name-Servername darf keinen Punkt enthalten! ' answer3 say ' ' end /* else do */ end /* if answer3 */ else leave end /* do forever */ /* ----------------------------------------------------------------------- */ /* IP address of this DNS */ /* ----------------------------------------------------------------------- */ ipaddr='0.0.0.0' infile=bootdrv||'\ipaddr.txt' 'netstat -a > ' infile do while lines(infile) line=linein(infile) if pos('addr ',line) <> 0 then do /* Blank nach addr wichtig */ parse var line adresse ' ' addr 'Interface' rest /* englische MPTS V5.1 */ addr = strip(addr) /* Blanks vorne und hinten etnfernen */ if addr<>'127.0.0.1' then ipaddr=addr end /*do */ end /* do while lines */ /* close files */ call stream infile,'c','close' 'erase ' bootdrv||'\ipaddr.txt' say ' ' say 'Die IP-Adresse dieses Servers lautet: ' ipaddr /* ----------------------------------------------------------------------- */ /* eMail of responsible for this DNS */ /* ----------------------------------------------------------------------- */ do forever say ' ' say ' ' say 'Wie lautet die eMail-Adresse des Veranwortlichen fr den DNS?' say '-------------------------------------------------------------' say '(Mailadresse in Kleinbuchstaben angeben)' say '(ohne Eingabe heisst er:) info@'||domain say ' ' mailaddr='info.'||domain parse pull answer5 if answer5<>'' then do parse var answer5 part1 '@' part2 '.' part3 if part2='' then do say '@-Zeichen fehlt, Adresse muss die Form yyy@xxx.ccc haben' end /* then do */ else do if part4='' then do say '. fehlt, Adresse muss die Form yyy@xxx.ccc haben' end /* then do */ else do mailaddr=part1||'.'||part2||'.'||part3 leave end /* else do */ end /* else do */ end /* if answer3 */ else leave end /* do forever */ say 'eMail-Adresse ist: ' mailaddr say ' ' /* ----------------------------------------------------------------------- */ /* create \mptn\etc\named.conf */ /* ----------------------------------------------------------------------- */ say ' ' say 'Konfigrationsdatei \mptn\etc\named.conf wird erstellt:' /* forwardlookup zone file for this domain */ 'xcopy 'cddrv||'\a-net\named.conf' bootdrv||'\mptn\etc\' 'echo zone "'||domain||'" IN { >>' bootdrv||'\mptn\etc\named.conf' 'echo type master; >>' bootdrv||'\mptn\etc\named.conf' 'echo file "master/'||domain||'"; >>' bootdrv||'\mptn\etc\named.conf' 'echo }; >>' bootdrv||'\mptn\etc\named.conf' /* reverslookup zone file for this subnet */ parse var ipaddr ip1 '.' ip2 '.' ip3 '.' ip4 reversefile=ip3||'.'||ip2||'.'||ip1||'.in-addr.arpa' 'echo zone "'||reversefile||'" IN { >>' bootdrv||'\mptn\etc\named.conf' 'echo type master; >>' bootdrv||'\mptn\etc\named.conf' 'echo file "master/'||reversefile||'"; >>' bootdrv||'\mptn\etc\named.conf' 'echo }; >>' bootdrv||'\mptn\etc\named.conf' /* ----------------------------------------------------------------------- */ /* zone files are created */ /* ----------------------------------------------------------------------- */ say ' ' say 'Zonendatei wird erstellt fr Zone: ' domain say 'ein Host www.'||domain||' wird als alias (CNAME) eingefgt' say ' ' 'md ' bootdrv||'\var' 'md ' bootdrv||'\var\lib' 'md ' bootdrv||'\var\tmp' /* for log files */ 'md ' bootdrv||'\var\lib\named' 'md ' bootdrv||'\var\lib\named\master' 'md ' bootdrv||'\var\lib\named\slave' 'copy ' cddrv||'\a-net\0.0.127.zone ' bootdrv||'\var\lib\named\' 'copy ' cddrv||'\a-net\localhost.zone ' bootdrv||'\var\lib\named\' 'copy ' cddrv||'\a-net\root.hint ' bootdrv||'\var\lib\named\' /* Master zone file for domain */ 'echo $TTL 1D > ' bootdrv||'\var\lib\named\master\'||domain 'echo @ IN SOA ' hostname||'.'||domain||'.' mailaddr||'. ( >> ' bootdrv||'\var\lib\named\master\'||domain 'echo 2005013000 ; Seriennummer YYYYMMDDxx >> ' bootdrv||'\var\lib\named\master\'||domain 'echo 3H ; refresh >> ' bootdrv||'\var\lib\named\master\'||domain 'echo 1H ; retry >> ' bootdrv||'\var\lib\named\master\'||domain 'echo 1W ; expiry >> ' bootdrv||'\var\lib\named\master\'||domain 'echo 1D ) ; minimum >> ' bootdrv||'\var\lib\named\master\'||domain 'echo IN NS ' ||hostname||' >> ' bootdrv||'\var\lib\named\master\'||domain 'echo '||hostname||' IN A ' ||ipaddr||' >> ' bootdrv||'\var\lib\named\master\'||domain 'echo www IN CNAME ' ||hostname||' >> ' bootdrv||'\var\lib\named\master\'||domain /* Master reverslookup zone file for subnet */ 'echo $TTL 1D > ' bootdrv||'\var\lib\named\master\'||reversefile 'echo @ IN SOA ' hostname||'.'||domain||'.' mailaddr||'. ( >> ' bootdrv||'\var\lib\named\master\'||reversefile 'echo 2005013000 ; Seriennummer YYYYMMDDxx >> ' bootdrv||'\var\lib\named\master\'||reversefile 'echo 3H ; refresh >> ' bootdrv||'\var\lib\named\master\'||reversefile 'echo 1H ; retry >> ' bootdrv||'\var\lib\named\master\'||reversefile 'echo 1W ; expiry >> ' bootdrv||'\var\lib\named\master\'||reversefile 'echo 1D ) ; minimum >> ' bootdrv||'\var\lib\named\master\'||reversefile 'echo IN NS ' ||hostname||'.'||domain||'. >> ' bootdrv||'\var\lib\named\master\'||reversefile 'echo '||ip4||' IN PTR ' ||hostname||'.'||domain||'. >> ' bootdrv||'\var\lib\named\master\'||reversefile /* ----------------------------------------------------------------------- */ /* check, if emx is already installed on system */ /* ----------------------------------------------------------------------- */ say 'Suche EMX ...' rc=SysFileTree(bootdrv||'\emxlibcm.dll','emxloc.','FS') /* search for emxlibcm.dll */ if rc==0 then do say 'EMX scheint installiert zu sein in: ' say emxloc.1 end /* if rc==0 */ else do say 'EMX muss erst installiert sein' signal ende end /* else */ /* copy files */ drive=bootdrv nameddir='\a\named' /* named directory OS/2 style */ say ' ' say 'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿' say '³ Installationslaufwerk w„hlen ³' say 'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ' say 'named wird auf ' drive||nameddir ' kopiert' say '[Enter] falls o.k.,' say 'sonst Laufwerks-Buchstaben angeben:' pull answer if answer=='' then answer='C' if answer<>'' then do if substr(answer,length(answer),1) == ':' /* : am Zeilenende */ then dd = '' else dd = ':' drive=answer||dd end /* if answer */ say 'Falls erwnscht ein anderes Verzeichnis angeben, sonst [Enter]' parse pull answer2 if answer2<>'' then do if substr(answer2,length(answer2),1) == '\' /* remove \ at the end */ then answer2=substr(answer2,1,length(answer2)-1) if substr(answer2,1,1) == '\' /* \ at the beginning */ then answer2=substr(answer2,2,length(answer2)) nameddir='\'||answer2 end /* if answer2 */ nameddir = strip(nameddir) /* Trailing Blanks entfernen */ say 'named wird auf ' drive||nameddir||'\ kopiert ...' call SysSleep(4) say ' ' 'xcopy ' cddrv||'\. ' drive||nameddir||'\ /s' /* copy program files */ /* ----------------------------------------------------------------------- */ /* add program directory to path in config.sys */ /* ----------------------------------------------------------------------- */ oldcfg=bootdrv||'\config.sys' newcfg=bootdrv||'\config.new' 'if exist ' newcfg ' erase ' newcfg /* read CONFIG.SYS line by line */ do while lines(oldcfg) line=linein(oldcfg) /* read line */ linenew=translate(line) /* convert to upper case */ if pos('SET PATH=',linenew) <> 0 then do /* PATH found */ /* search existing named Path in PATH */ namedfound='0' parse upper var line anfang '=' rest anfang = space(anfang) /* remove possible double blanks */ do while rest \= '' parse upper var rest next ';' rest if next==nameddir then namedfound='1' end /* do while */ if namedound='1' then do say 'PATH gefunden mit: ' nameddir ' keine Aenderung' end /* then do */ else do say 'PATH wird mit ' nameddir ' erweitert' if substr(line,length(line),1) == ';' /* ; am Zeilenende */ then sc = '' else sc = ';' line=line||sc||drive||nameddir||';' end /* else do */ end /* if pos */ call lineout newcfg,line /* write changed lines */ end /* do while lines */ /* close files */ call stream oldcfg,'c','close' call stream newcfg,'c','close' /* ----------------------------------------------------------------------- */ /* Menu erstellen */ /* ----------------------------------------------------------------------- */ bootdrv 'cd ' nameddir 'start ' bootdrv||nameddir||'\makefolder.cmd' /* ----------------------------------------------------------------------- */ /* display meesage for necessary reboot */ /* ----------------------------------------------------------------------- */ say ' ' if namedfound='0' then do 'copy ' oldcfg bootdrv||'\config.named' /* save old CONFIG.SYS */ 'copy ' newcfg oldcfg say 'alter CONFIG.SYS gesichert unter CONFIG.NAMED' say 'CONFIG.SYS ge„ndert, Neustart notwendig' say ' ------------------' end /* if namefound */ ende: parse var cddrv ndrive ':' rest ndrive||':' 'cd \'