1 | #! /usr/bin/perl
|
---|
2 | #<BR><BR><BR>
|
---|
3 | # <H1>start dit script op met:</H1><P> curl -s http://wLeiden.NET/genesis/ | perl --<P>
|
---|
4 | #<BR><BR><BR><PRE>
|
---|
5 | #! /usr/bin/perl
|
---|
6 | #
|
---|
7 | # aug 2002 jasper@WirelessLeiden.NL
|
---|
8 |
|
---|
9 | $version='0.3';
|
---|
10 |
|
---|
11 | #$DEBUG=1;
|
---|
12 |
|
---|
13 |
|
---|
14 | $start=localtime();
|
---|
15 | $home='/etc/wl';
|
---|
16 | $url='http://wLeiden.NET/genesis';
|
---|
17 | #$rpmurl='ftp://dl.xs4all.nl/pub/mirror/redhat/redhat-7.3-en/os/i386/RedHat/RPMS';
|
---|
18 | $rpmurl='ftp://dl.xs4all.nl/pub/mirror/redhat/linux/7.3/en/os/i386/RedHat/RPMS/';
|
---|
19 |
|
---|
20 | @Packages=(
|
---|
21 | 'wget-1.8.1','curl-7.9.5','openssh-server-3.1p1','openssh-clients-3.1p1',
|
---|
22 | 'joe-2.9.7','zebra-0.92a-3','mrtg-2.9.17',
|
---|
23 | 'tcpdump-3.6.2','squid-2.4.STABLE6-1.7.2',
|
---|
24 | 'bind-9.2.0','apache-1.3.23','rdate-1.2-1',
|
---|
25 | 'dhcp-2.0pl5'
|
---|
26 | );
|
---|
27 |
|
---|
28 | @MRTGJUNK=('cfgmaker.html','contrib.html','faq.html','forum.html','index.html',
|
---|
29 | 'indexmaker.html','logfile.html','mibhelp.html','mrtg-rrd.html','mrtg.html',
|
---|
30 | 'mrtglib.html','nt-guide.html','reference.html','squid.html','unix-guide.html',
|
---|
31 | 'webserver.html');
|
---|
32 |
|
---|
33 | @MRTGIMG=('mrtg-l.gif','mrtg-l.png','mrtg-m.gif','mrtg-m.png','mrtg-r.gif',
|
---|
34 | 'mrtg-r.png','mrtg-ti.gif','mrtg-ti.png');
|
---|
35 |
|
---|
36 |
|
---|
37 | $curl='/usr/bin/curl';
|
---|
38 | $inittab='/etc/inittab';
|
---|
39 | $sshd_config='/etc/ssh/sshd_config';
|
---|
40 | $authorized_keys='/root/.ssh/authorized_keys';
|
---|
41 | $syslogd_conf='/etc/syslog.conf';
|
---|
42 | $rclocal='/etc/rc.d/rc.local';
|
---|
43 | $sc_network='/etc/sysconfig/network';
|
---|
44 | $crontab='/etc/crontab';
|
---|
45 | $liloconf='/etc/lilo.conf.anaconda';
|
---|
46 | $mrtgdir='/var/www/html/mrtg';
|
---|
47 | $passwd='/etc/passwd';
|
---|
48 | $shadow='/etc/shadow';
|
---|
49 |
|
---|
50 | $var_named='/var/named';
|
---|
51 | $var_named_slave="$var_named/slave";
|
---|
52 |
|
---|
53 | $hostname=`/bin/hostname`;chomp($hostname);$hostname=~s/\..*//;
|
---|
54 |
|
---|
55 | #select(STDOUT); $| = 1;
|
---|
56 |
|
---|
57 | printc( "\n\n===== Wireless Leiden Genesis $version for $hostname =====\n\n");
|
---|
58 | printc("In the beginning there was /etc/wl");
|
---|
59 |
|
---|
60 | my_mkdir ($home,0750);
|
---|
61 |
|
---|
62 | ###################### DIVERSEN #########################
|
---|
63 |
|
---|
64 |
|
---|
65 | if ($ARGV[0])
|
---|
66 | {
|
---|
67 | $hostname=$ARGV[0];
|
---|
68 | changeline($sc_network,"HOSTNAME","HOSTNAME=$hostname");
|
---|
69 | system("/bin/hostname $hostname.wleiden.net");
|
---|
70 | prints ("New hostname: $hostname");
|
---|
71 | }
|
---|
72 |
|
---|
73 |
|
---|
74 | $node=`$curl -s $url/nodes/$hostname/`;
|
---|
75 | #print "NODE: [$node]\n";
|
---|
76 |
|
---|
77 | if (($node=~/found on this server/) || ($hostname eq ''))
|
---|
78 | {
|
---|
79 | print "\n\nHostname \"$hostname\" unknown on genesis system.\n";
|
---|
80 | print "Please restart with hostname as agument:\n\n";
|
---|
81 | print "curl -s http://wLeiden.NET/genesis/ | perl -- - [hostname] \n\n";
|
---|
82 | die;
|
---|
83 | }
|
---|
84 |
|
---|
85 | #goto skip;
|
---|
86 |
|
---|
87 | ##################### PACKAGES ####################################
|
---|
88 |
|
---|
89 | foreach $package (@Packages) {InstallIfNotThere($package);}
|
---|
90 |
|
---|
91 | InstallIfNotThere("bing-1.0.4","ftp://rpmfind.net/linux/contrib/libc6/i386");
|
---|
92 | InstallIfNotThere("fping-2.4b2","ftp://rpmfind.net/linux/PLD/current/dists/ra/PLD/i386/PLD/RPMS");
|
---|
93 | #InstallIfNotThere("ntop-2.1-1","http://belnet.dl.sourceforge.net/sourceforge/ntop/");
|
---|
94 | InstallIfNotThere("wavemon-0.3.3-1","ftp://rpmfind.net/linux/contrib/libc6/i386/");
|
---|
95 | #InstallIfNotThere("idled-1.16-3","ftp://rpmfind.net/linux/PLD/current/dists/ra/PLD/i386/PLD/RPMS/");
|
---|
96 |
|
---|
97 | AddIfNotThere($inittab,'S0:123:respawn:/sbin/agetty -L 9600 ttyS0');
|
---|
98 | AddIfNotThere($sshd_config,'PermitRootLogin yes');
|
---|
99 | AddIfNotThere($syslogd_conf,'*.* /dev/tty9');
|
---|
100 | AddIfNotThere($rclocal,'echo 60 > /proc/sys/kernel/panic');
|
---|
101 |
|
---|
102 | $doit='/usr/bin/rdate -s ntp.xs4all.nl;/sbin/clock --systohc --utc';
|
---|
103 | system($doit);
|
---|
104 | printc ("Checking /etc/crontab");
|
---|
105 | if (! filegrep('rdate',$crontab))
|
---|
106 | {
|
---|
107 | AddIfNotThere($crontab,"13 6 * * * root $doit");
|
---|
108 | }
|
---|
109 |
|
---|
110 | printc ("Checking $liloconf"); if (! filegrep('timeout=15',$liloconf)) {
|
---|
111 | changeline($liloconf,'timeout','timeout=15'); system("/sbin/lilo -C
|
---|
112 | $liloconf");
|
---|
113 | }
|
---|
114 |
|
---|
115 | # Jasper:
|
---|
116 | #
|
---|
117 |
|
---|
118 | AddIfNotThere($authorized_keys,'1024 35
|
---|
119 | 112316178287877254070956100425865829142003519260838089408287428288025179160927766087063935502299240797274832024419201965494823824334871043373834738280496449985305215259303428888378450891325700353005777564637335420689043600277656759878355825032152723795185677246322116557728089284732770412581611008730473076369
|
---|
120 | jasper@Foxtrot',0600); AddIfNotThere($authorized_keys,'1024 35
|
---|
121 | 118239913251009869865766536315021393707936886074250129280418473820786192419898669632268750479860782257598739847197103203348900588986714533679311193658890557424225585046131153077993767644932126481282093252667491668462126364793663058473958394234134729276158925678092948983706464884277485578826546212336317771647
|
---|
122 | jasper@Rumba'); AddIfNotThere($authorized_keys,'1024 35
|
---|
123 | 131115877365044889919364159918102221501007851129140588698864391358409700706033130394488227521530533168939153736569754398766671594746877715705568124401657833947746079021505059669681909865480458530856596287241882611975228914550983484838927508168402688375217383947586789572836291240495264780490011259940976676783
|
---|
124 | jasper@Tango');
|
---|
125 |
|
---|
126 | # Rudi:
|
---|
127 | #
|
---|
128 |
|
---|
129 | AddIfNotThere($authorized_keys,'1024 35
|
---|
130 | 175064508659828994627143321524163097781640785788870666512791607844470773231705101704418403768320192803174740066957164497121494748184227124076884950318600937518771055598445142736335521690474047053323012366268793076855215471573920191862419906922134514121969462360529797078932635823683742743592103014922572913173
|
---|
131 | rudi@flupke'); AddIfNotThere($authorized_keys,'1024 35
|
---|
132 | 143166375720170866349619197277385566768069875485196362699778322322352272754425517150081365776757054647703778864422036993461721791436126915970412582719415351906955315394823309461075762059061244401928288023541130196242097703041933109276811888686865551081981845265381340343445264057143590813968740962614380418301
|
---|
133 | rudi@quick'); AddIfNotThere($authorized_keys,'1024 35
|
---|
134 | 124752035168971877893059147471720282336429451383717387223954769248711511091174717193477105333864864131448165452070009395515515659396169159755357937833999410182494957674293616658655374538654124880362749453138940491080015307589195673993882335454433811025091710719877693183773703706788265932234293023384253606179
|
---|
135 | rudi@Classic');
|
---|
136 |
|
---|
137 |
|
---|
138 | AddIfNotThere($passwd,'croot:x:0:0:root:/root:/bin/bash',0,'croot',1);
|
---|
139 | AddIfNotThere($passwd,'rudi:x:1500:100::/home/rudi:/bin/bash',0,'rudi',1);
|
---|
140 | AddIfNotThere($passwd,'jasper:x:1501:100::/home/jasper:/bin/bash',0,'jasper',1);
|
---|
141 |
|
---|
142 | AddIfNotThere($shadow,'croot:$1$0ngjFP1K$NFBRKYS5Ltdd6ohgf67i31:11918:0:99999:7:::',0,'croot',1);
|
---|
143 | AddIfNotThere($shadow,'rudi:$1$Ni3ÁëñÍß$OnUTJgV3k.394Z1qDY.Vz0:11910:0:99999:7:::',0,'rudi',1);
|
---|
144 | AddIfNotThere($shadow,'jasper:$1$hZdZY2yU$5MsprMarQcBE42NicTxib.:11881:0:99999:7:::',0,'jasper',1);
|
---|
145 |
|
---|
146 |
|
---|
147 | ########################## MRTG #############################3
|
---|
148 |
|
---|
149 | my_mkdir ($mrtgdir,0750); chdir($mrtgdir); unlink(@MRTGJUNK); foreach $file
|
---|
150 | (@MRTGIMG) {
|
---|
151 | if (! -e "$mrtgdir/$file") {copyfile2("mrtg/$file",$mrtgdir,644);}
|
---|
152 | }
|
---|
153 | copyfile2("mrtg/cpuload.pl","/usr/local/sbin",755);
|
---|
154 | copyfile2("mrtg/uptime.pl","/usr/local/sbin",755);
|
---|
155 | copyfile2("mrtg/ipchains_traf.pl","/usr/local/sbin",755);
|
---|
156 | copyfile2("mrtg/latency.pl","/usr/local/sbin",755);
|
---|
157 | copyfile2("mrtg/memusage.pl","/usr/local/sbin",755);
|
---|
158 | copyfile2("mrtg/throughput.pl","/usr/local/sbin",755);
|
---|
159 | copyfile2("mrtg/uptime.pl","/usr/local/sbin",755);
|
---|
160 |
|
---|
161 |
|
---|
162 | copyfile2("mrtg/wlan_bitrate.pl","/usr/local/sbin",755);
|
---|
163 | copyfile2("mrtg/wlan_quality.pl","/usr/local/sbin",755);
|
---|
164 | copyfile2("mrtg/wlan_snr.pl","/usr/local/sbin",755);
|
---|
165 | copyfile2("mrtg/wlan_users.pl","/usr/local/sbin",755);
|
---|
166 |
|
---|
167 | AddIfNotThere($crontab,"*/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg",0,'mrtg');
|
---|
168 |
|
---|
169 |
|
---|
170 |
|
---|
171 | ###################### NAMED #########################
|
---|
172 |
|
---|
173 | my_mkdir ($var_named,0750);
|
---|
174 | my_mkdir ($var_named_slave,0750);
|
---|
175 | ($login,$pass,$uid,$gid) = getpwnam('named');
|
---|
176 | chown($uid,$gid,$var_named_slave) ||
|
---|
177 | die "Could not change perms $var_named_slave to $uid/$gid";
|
---|
178 |
|
---|
179 | copyfile2('named/named.conf','/etc/',0644);
|
---|
180 | copyfile2('named/localhost.zone','/var/named/',0644);
|
---|
181 | copyfile2('named/127.0.0.zone','/var/named/',0644);
|
---|
182 | copyfile2('named/root.hint','/var/named/',0644);
|
---|
183 | copyfile2('named/resolv.conf','/root/',0644);
|
---|
184 |
|
---|
185 | if (! -e '/etc/rc3.d/S55named')
|
---|
186 | {symlink('../init.d/named','/etc/rc3.d/S55named') ||
|
---|
187 | die "Could not symlink named.";}
|
---|
188 |
|
---|
189 | system("/etc/init.d/named restart"); # Direct zones gaan laden. --> cache
|
---|
190 |
|
---|
191 | ###################### APACHE #########################
|
---|
192 |
|
---|
193 | copyfile2('apache/httpd.conf','/etc/httpd/conf/');
|
---|
194 |
|
---|
195 | ###################### SQUID #########################
|
---|
196 |
|
---|
197 | copyfile2('squid/squid.conf','/etc/squid/');
|
---|
198 |
|
---|
199 | ###################### NETWERK #########################
|
---|
200 |
|
---|
201 |
|
---|
202 | copyfile2("nodes/$hostname/ifcfg-eth0","/etc/sysconfig/network-scripts/");
|
---|
203 |
|
---|
204 | copyfile2("tools/netmask","/usr/local/bin",0750);
|
---|
205 |
|
---|
206 | skip: copyfile2("areas.conf","/etc/wl/",0644);
|
---|
207 | copyfile2("nodes/$hostname/wleiden.conf","/etc/wl/",0644);
|
---|
208 | copyfile2("tools/wleiden.pl","/etc/wl/",0750);
|
---|
209 | copyfile2("tools/firewall","/etc/wl/",0750);
|
---|
210 | copyfile2("tools/nofirewall","/etc/wl/",0750);
|
---|
211 |
|
---|
212 | copyfile2("tools/wl-runlvl","/etc/init.d/wireless",0750);
|
---|
213 | if (! -e '/etc/rc3.d/S30wireless')
|
---|
214 | {symlink('../init.d/wireless','/etc/rc3.d/S30wireless') ||
|
---|
215 | die "Could not symlink wireless.";}
|
---|
216 |
|
---|
217 |
|
---|
218 |
|
---|
219 |
|
---|
220 | printc("Starting /etc/wl/wleiden.pl\n");
|
---|
221 | system("/etc/wl/wleiden.pl startall");
|
---|
222 |
|
---|
223 |
|
---|
224 |
|
---|
225 | ###################### #########################
|
---|
226 |
|
---|
227 |
|
---|
228 | # TODO:
|
---|
229 | #
|
---|
230 | # httpd
|
---|
231 | # mrtg
|
---|
232 | # eth0, wlan*
|
---|
233 | # zebra
|
---|
234 | # firewall
|
---|
235 |
|
---|
236 | exit;
|
---|
237 |
|
---|
238 | ##########################################################################
|
---|
239 |
|
---|
240 | sub printc
|
---|
241 | {
|
---|
242 | prints(@_);
|
---|
243 | $counter++;
|
---|
244 | }
|
---|
245 |
|
---|
246 | sub prints
|
---|
247 | {
|
---|
248 | local($line,$nlf)=@_;
|
---|
249 | local($time)=localtime();
|
---|
250 | ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
---|
251 |
|
---|
252 | printf ("[%02d %02d:%02d:%02d] $line",$counter,$hour,$min,$sec);
|
---|
253 | if ($nlf eq '') {print"\n";}
|
---|
254 | }
|
---|
255 |
|
---|
256 | sub filegrep
|
---|
257 | {
|
---|
258 | local($grep,$file)=@_;
|
---|
259 | local($found)=0;
|
---|
260 | open(FILE,$file) || die"Could not grep in file: $file\n";
|
---|
261 | while(<FILE>)
|
---|
262 | {
|
---|
263 | if (/$grep/) {$found=1;last;}
|
---|
264 | }
|
---|
265 | close(FILE);
|
---|
266 | return($found);
|
---|
267 | }
|
---|
268 |
|
---|
269 | sub add2file
|
---|
270 | {
|
---|
271 | local($file,$line,$nocr)=@_;
|
---|
272 | open (FILE,">>$file") || die "Coult not open $file\n";
|
---|
273 | if (! $nocr) {print FILE "\n";}
|
---|
274 | print FILE "$line\n";
|
---|
275 | close(FILE);
|
---|
276 |
|
---|
277 | }
|
---|
278 |
|
---|
279 | sub AddIfNotThere
|
---|
280 | {
|
---|
281 | local($file,$line,$mode,$search,$nocr)=@_;
|
---|
282 | if (! $search) {$search="^$line";}
|
---|
283 | if (($mode) && (! -e $file)) # Create file?
|
---|
284 | {
|
---|
285 | print("Creating file with $line\n");
|
---|
286 | add2file($file,$line);
|
---|
287 | chmod($mode,$file);
|
---|
288 | } else
|
---|
289 | {
|
---|
290 | printc("Checking $file: ",1);
|
---|
291 | if (! filegrep("$search",$file))
|
---|
292 | {
|
---|
293 | print("Adding $line\n");
|
---|
294 | add2file($file,$line,$nocr);
|
---|
295 | } else {print "OK!\n";}
|
---|
296 | }
|
---|
297 | }
|
---|
298 |
|
---|
299 |
|
---|
300 | sub InstallIfNotThere
|
---|
301 | {
|
---|
302 | local($package,$ru)=@_;if (! $ru) {$ru=$rpmurl;}
|
---|
303 | local($rpm);
|
---|
304 | printc("Checking for rpm $package: ",1);
|
---|
305 | $rpm=`rpm -q $package`;
|
---|
306 | if ($rpm=~/not installed/)
|
---|
307 | {
|
---|
308 | print "installing now.\n";
|
---|
309 | system("rpm -i $ru/${package}*-i386.rpm");
|
---|
310 | } else {print "OK: $rpm";}
|
---|
311 | }
|
---|
312 |
|
---|
313 | sub copyfile2
|
---|
314 | {
|
---|
315 | local($src,$dst,$perm)=@_;if (! $perm) {$perm=0640;}
|
---|
316 | local($fn,$ztime);
|
---|
317 | if (-d $dst)
|
---|
318 | {
|
---|
319 | $dst=~s/\/$//;
|
---|
320 | if ($src=~/\/([^\/]+)$/) {$dst.="/$1";} else {$dst.="/$src";}
|
---|
321 | }
|
---|
322 |
|
---|
323 | printc("Copying $src to $dst");
|
---|
324 |
|
---|
325 | if (-e $dst) {$ztime="-z $dst";}
|
---|
326 |
|
---|
327 | if ($DEBUG) {print("DEBUG: $curl $ztime $url/$src -o $dst\n");}
|
---|
328 | system("$curl -s -f $ztime $url/$src -o $dst");
|
---|
329 | if (! -f $dst) {die "Error copying file $src to $dst.\n";}
|
---|
330 | chmod($perm,$dst) || die "Could not change permission for $dst to $perm.\n";
|
---|
331 | }
|
---|
332 |
|
---|
333 | sub my_mkdir
|
---|
334 | {
|
---|
335 | local($dir,$perm)=@_;if (! $perm) {$perm=0755;}
|
---|
336 | prints ("Checking dir: $dir: ",1);
|
---|
337 | if (! -d $dir) {mkdir ($dir,$perm) || die "Could not make dir: $dir\n";print "created.\n";}
|
---|
338 | else {print "OK!\n";}
|
---|
339 | }
|
---|
340 |
|
---|
341 | sub changeline
|
---|
342 | {
|
---|
343 | local($file,$old,$new)=@_;
|
---|
344 | open(OLD,$file) || die "Could not open old file: $file\n";
|
---|
345 | open(NEW,">$file.genesis.$$") || die "Could not create new file: $file.genesis.$$\n";
|
---|
346 | while(<OLD>)
|
---|
347 | {
|
---|
348 | if (/$old/) {print NEW "$new\n";}
|
---|
349 | else {print NEW $_;}
|
---|
350 | }
|
---|
351 | close(NEW);
|
---|
352 | close(OLD);
|
---|
353 | rename("$file.genesis.$$",$file) || die "Coult not overwrite old file: $file\n";
|
---|
354 | }
|
---|
355 |
|
---|
356 |
|
---|
357 |
|
---|
358 |
|
---|
359 |
|
---|
360 | # </PRE>
|
---|
361 |
|
---|
362 |
|
---|