/[cvs]/nfo/perl/scripts/umltools/uml_setup.pl
ViewVC logotype

Contents of /nfo/perl/scripts/umltools/uml_setup.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Tue Oct 22 02:25:56 2002 UTC (21 years, 6 months ago) by joko
Branch: MAIN
Branch point for: nfo
File MIME type: text/plain
Initial revision

1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 # path to modules
7 use lib '/home/service/bin/umltools';
8
9 # path to config-file
10 use lib '/home/service/etc';
11
12 END {
13 print "\n";
14 }
15
16 use Getopt::Long;
17 use UML::Config;
18 use UML::Clone;
19 use UML::Utils;
20 use ConfigPatcher::Main;
21 use Fcntl ':mode';
22
23 sub usage {
24 print "\n";
25 print " Usage: uml_setup.pl [OPTIONS] which may be ...", "\n";
26 print " --skel=<skel-name> ", "supply a skel-name to create virtual host from", "\n";
27 print " --vhost=<vhost-name> ", "supply a distingushed name for a virtual host", "\n";
28 print " --clear ", "clear a virtual host", "\n";
29 print " --create ", "create a virtual host", "\n";
30 print " --patch ", "patch a virtual host", "\n";
31 print " --build ", "tries a --create and --patch", "\n";
32 print " --rebuild ", "tries a --clear, --create and --patch", "\n";
33 print " --daemonize ", "creates proper scripts under /etc/init.d and -rc3.d/", "\n";
34 print " --ask ", "ask questions", "\n";
35 exit;
36 }
37
38 my $vhost_name;
39 my $skel_name;
40 my $bool_clear;
41 my $bool_create;
42 my $bool_patch;
43 my $bool_build;
44 my $bool_rebuild;
45 my $bool_daemonize;;
46 my $glbl_ask;
47 my $args_parsed = GetOptions (
48 # "length=i" => \$length, # numeric
49 # "file=s" => \$data, # string
50 # "verbose" => \$verbose, # flag
51 "skel=s" => \$skel_name,
52 "vhost=s" => \$vhost_name,
53 "clear" => \$bool_clear,
54 "create" => \$bool_create,
55 "patch" => \$bool_patch,
56 "build" => \$bool_build,
57 "rebuild" => \$bool_rebuild,
58 "daemonize" => \$bool_daemonize,
59 "ask" => \$glbl_ask,
60 );
61
62 my $bool_argsInvalid = 1;
63
64 if ($bool_daemonize && $vhost_name) {
65 $bool_argsInvalid = 0;
66 }
67 elsif ($bool_build && $skel_name && $vhost_name) {
68 $bool_argsInvalid = 0;
69 }
70 elsif ($vhost_name && $skel_name && $bool_patch) {
71 $bool_argsInvalid = 0;
72 }
73
74 if ($bool_argsInvalid) {
75 usage();
76 }
77
78 if ($glbl_ask) { our $DEBUG_STEP; $DEBUG_STEP = 1; }
79
80 my $vhost = get_host_cfg($vhost_name);
81 my %vhost = %{$vhost};
82
83 if ($bool_build) {
84 logAction("building");
85 $bool_create = 1;
86 $bool_patch = 1;
87 }
88
89
90 if ($bool_rebuild) {
91 logAction("rebuilding");
92 $bool_clear = 1;
93 $bool_create = 1;
94 $bool_patch = 1;
95 }
96
97
98 if ($bool_clear) {
99 logAction("=== clearing \"$vhost_name\"");
100 UML::Clone::PackAndRemove($vhost_name);
101 }
102
103
104 if ($bool_create) {
105 logAction("=== creating \"$vhost_name\"");
106
107 logAction("building directory structure");
108 UML::Clone::DirectoryStructure($vhost_name);
109
110 logAction("creating rootfs");
111 UML::Clone::RootFS($vhost_name, $skel_name);
112
113 logAction("creating datafs");
114 UML::Clone::DataFS($vhost_name, $skel_name);
115
116 logAction("creating swapfs");
117 UML::Clone::SwapFS($vhost_name);
118 }
119
120
121 if ($bool_patch) {
122 logAction("=== patching \"$vhost_name\"");
123 my $vhost_base = UML::Config::get_host_basepath($vhost_name);
124 my $vhost_rootfs = UML::Config::get_host_rootfs($vhost_name);
125 my $vhost_datafs = UML::Config::get_host_datafs($vhost_name);
126 my $skel_base = UML::Config::get_skel_base($skel_name);
127
128 my $cmd;
129
130 # transfer patches from skel to vhost-base
131 $cmd="cp $skel_base/patches/src/*.tar.gz $vhost_base/tmp/";
132 askCmd("do it", $cmd, "copying patches from skel/patches/ to vhost/tmp/");
133 # extract patches
134 $cmd="cd $vhost_base/tmp/ && tar -xzf datafs.tar.gz && tar -xzf rootfs.tar.gz && rm datafs.tar.gz && rm rootfs.tar.gz";
135 askCmd("do it", $cmd, "extracting patches at vhost/tmp/");
136
137 # modify/prepare/configure patch-dir
138 logAction("configuring patches");
139 %ConfigPatcher::Main::vhost = %vhost;
140 preparePatches("$skel_base/patches/patchlist_rootfs_fs.txt", "$vhost_base/tmp/rootfs");
141
142 # pack packages again
143 $cmd="cd $vhost_base/tmp && tar -czf ../mnt/rootfs.tar.gz rootfs/ && tar -czf ../mnt/datafs.tar.gz datafs/ && rm -r $vhost_base/tmp/*";
144 askCmd("do it?", $cmd, "packing patches");
145
146 $cmd = "mount $vhost_rootfs $vhost_base/mnt/rootfs/ -o loop";
147 askCmd("do it?", $cmd, "mounting rootfs");
148 $cmd="cd $vhost_base/mnt && tar -xzf rootfs.tar.gz";
149 askCmd("do it?", $cmd, "applying patches");
150 $cmd = "umount $vhost_rootfs";
151 askCmd("do it?", $cmd, "unmounting rootfs");
152
153 $cmd = "mount $vhost_datafs $vhost_base/mnt/datafs/ -o loop";
154 askCmd("do it?", $cmd, "mounting datafs");
155 $cmd="cd $vhost_base/mnt && tar -xzf datafs.tar.gz";
156 askCmd("do it?", $cmd, "applying patches");
157 $cmd = "umount $vhost_datafs";
158 askCmd("do it?", $cmd, "unmounting datafs");
159
160 }
161
162 if ($bool_daemonize) {
163 my $cmd;
164 my $content;
165 my $filename;
166
167 my $runlevel = 3;
168 my $uml_boot = "/bin/uml_boot";
169 my $daemon = "uml" . $vhost_name;
170
171 my $initscript_path = "/etc/init.d/$daemon";
172 my $runlevel_base = "/etc/init.d/rc$runlevel.d";
173
174 # main init script
175 $content = "#!/usr/bin/perl
176 use strict;
177 use warnings;
178 my \$action = shift;
179 if (!\$action) {
180 print \"no action!\", \"\\n\";
181 exit;
182 }
183 if (\$action eq \"start\") {
184 system(\"$uml_boot --start --vhost=$vhost_name\");
185 }
186 if (\$action eq \"stop\") {
187 system(\"$uml_boot --stop --vhost=$vhost_name\");
188 }
189 ";
190
191 $cmd = "echo '" . $content . "'" . " > $initscript_path";
192 askCmd("do it?", $cmd, "create $initscript_path");
193 chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, $initscript_path;
194
195 # runlevel init scripts
196 $filename = "$runlevel_base/S30$daemon";
197 $cmd = "rm $filename; ln $initscript_path -s $filename";
198 askCmd("do it?", $cmd, "unmounting datafs");
199 chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, $filename;
200
201 $filename = "$runlevel_base/K01$daemon";
202 $cmd = "rm $filename; ln $initscript_path -s $filename";
203 askCmd("do it?", $cmd, "unmounting datafs");
204 chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, $filename;
205
206 }

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed