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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide 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 joko 1.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