source: ProjectBuilder/devel/pb/contrib/pbsetupqemu@ 203

Last change on this file since 203 was 203, checked in by Bruno Cornec, 17 years ago

use make and not the macro not portable
document Ubuntu 6.06 distribution detection hack
fix some VMs handling pb

  • Property svn:executable set to *
File size: 7.3 KB
Line 
1#!/usr/bin/perl -w
2
3# Script to be used as pbscript to create a potentialy
4# missing pb account on the QEMU VM, and adds it to sudo
5
6# Needs to be extented with the pb Distribution.pm module at the end externally
7#
8# Needs to use root account to connect to the VM
9
10# You need to specify here your local public SSH key used to access
11# the pb account in the VM later on
12
13use strict;
14use File::Basename;
15
16my $file = "/tmp/pbkey";
17
18open(PBFILE,"> $file") || die "Unable to open $file";
19print PBFILE "ssh-dss AAAAB3NzaC1kc3MAAACBAMC06bNLMu8ZBJv3Hi77+fi+GUhtQScIbGKru86C/IP27EjrmYhPVccbu8kpX6SDHIouhpZ00gaefP3zHjLUmPKlXkMNUNjxx5JNLPoHhSIuUvoSTNoh9gsi31abAvzbW+RNer7rvBJO4ytNJRdsuNxBwqjxK04JEmatds+aKTQjAAAAFQDHaNmIuvYZ0RtNBVe+tzTzxxCQmQAAAIA4o89Xob2VBRtQKBjmWVAuTS14qiqnQUPNloaRkM+r2odI+NJDFc+WXOIG9QAPKKt1jvFOBOX9Mu3/xwiDLnAGhxud98FoyHevSpIWUld7rG4j1aww1WxolFWY/iPyAvDDMW3iysCoqQeSOlpRd9Mz/dq6/P/VcizhdGOKyc3JBgAAAIAA1eY+BoneiQ/tQ8j3GYbMTu6U7VzZ2OaoVeQn4NtZmPl+ZeQIj83nFpo99mYCbaBPqnZToERndl+ljp/JX5pamwj6RcLIDCyiB6MXLbQSWj0goegU1htp5aMd3NcyR2Jy8gCnf0QjDr7j23Q+CFGExtRb/nsDmaG5W9D6QSWQ/g== bruno\@victoria\n";
20close(PBFILE);
21chmod 0644,$file;
22
23$file="/etc/passwd";
24open(PBFILE,$file) || die "Unable to open $file";
25my $found = 0;
26while (<PBFILE>) {
27 $found = 1 if (/^pb:/);
28}
29close(PBFILE);
30
31if ( $found == 0 ) {
32 if ( ! -d "/home" ) {
33 mkdir "/home";
34 }
35 system "groupadd pb";
36 system "useradd pb -g pb -m -d /home/pb";
37}
38
39# For root
40mkdir ".ssh",0700;
41system 'cp /tmp/pbkey .ssh/authorized_keys';
42chmod 0600,".ssh/authorized_keys";
43
44# For pb
45chdir "/home/pb";
46mkdir ".ssh",0700;
47system 'cp /tmp/pbkey .ssh/authorized_keys';
48chmod 0600,".ssh/authorized_keys";
49system 'chown -R pb:pb .ssh';
50
51# No passwd for pb only keys
52$file="/etc/shadow";
53open(PBFILE,$file) || die "Unable to open $file";
54open(PBOUT,"> $file.new") || die "Unable to open $file.new";
55while (<PBFILE>) {
56 s/^pb:\!\!:/pb:*:/;
57 s/^pb:\!:/pb:*:/; #SLES 9 e.g.
58 print PBOUT $_;
59}
60close(PBFILE);
61close(PBOUT);
62rename("$file.new",$file);
63chmod 0640,$file;
64
65unlink "/tmp/pbkey";
66
67my ($ddir, $dver, $dfam, $dtype, $pbsuf) = pb_distro_init();
68print "distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf))."\n";
69
70# Get and install pb
71if ( $ddir eq "fedora" ) {
72 system "yum clean all";
73 system "yum update -y";
74 my $arch=`uname -m`;
75 my $opt = "";
76 chomp($arch);
77 if ($arch eq "x86_64") {
78 $opt="--exclude=*.i?86";
79 }
80
81 my $topbuilddir=`rpmquery --eval '%{_topdir}' 2> /dev/null`;
82 chomp($topbuilddir);
83
84 if ( $dver <= 4 ) {
85 # FC4 - AppConfig unavailable
86 system "yum -y $opt install neon newt-devel slang-devel autoconf automake libtool gcc rpm-build wget gcc-c++ docbook-utils-pdf ImageMagick man patch cdrecord mkisofs perl-DateManip ntp sudo ; rm -rf AppConfig-* ; wget http://search.cpan.org/CPAN/authors/id/A/AB/ABW/AppConfig-1.66.tar.gz ; tar xvfz AppConfig-1.66.tar.gz ; cd AppConfig* ; perl Makefile.PL ; make ; make install ; cd ..";
87 } else {
88 # FC5/6/7
89 system "yum -y $opt install neon newt-devel slang-devel autoconf automake libtool gcc rpm-build wget gcc-c++ docbook-utils-pdf ImageMagick man patch cdrecord mkisofs ntp sudo perl-AppConfig perl-DateManip";
90 }
91} elsif (( $dfam eq "rh" ) || ($ddir eq "sles") || (($ddir eq "suse") && (($dver eq "10.1") || ($dver eq "10.0"))) || (($ddir eq "mandrake") && ($dver eq "10.1"))) {
92 # Suppose pkg are installed already
93 system "rpm -e lsb 2>&1 > /dev/null";
94 system "rm -rf AppConfig-* ; wget http://search.cpan.org/CPAN/authors/id/A/AB/ABW/AppConfig-1.66.tar.gz ; tar xvfz AppConfig-1.66.tar.gz ; cd AppConfig* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf DateManip* ; wget http://search.cpan.org/CPAN/authors/id/S/SB/SBECK/Date-Manip-5.46.tar.gz ; tar xvfz Date-Manip-5.46.tar.gz ; cd Date-Manip* ; perl Makefile.PL ; make ; make install ; cd .. ";
95} elsif ($ddir eq "suse") {
96 # New OpenSuSE
97 system "export TERM=linux ; liste=\"\" ; for i in neon newt-devel slang-devel autoconf automake libtool make gcc wget gcc-c++ docbook-utils ImageMagick man patch mkisofs sudo perl-DateManip perl-AppConfig perl-File-HomeDir xntp; do rpm -q \$i 1> /dev/null 2> /dev/null ; if [ \$\? != 0 ]; then liste=\"\$liste \$i\"; fi; done; echo \"Liste: \$liste\" ; if [ \"\$liste\" != \"\" ]; then yast2 -i \$liste ; fi";
98} elsif ( $dfam eq "md" ) {
99 if (( $dver eq "2006.0" ) || ( $dver eq "10.2" )) {
100 # mondo not available
101 system "urpmi.update -a ; urpmi --auto neon newt-devel slang-devel glibc-static-devel autoconf automake libtool gcc rpm-build wget gcc-c++ docbook-utils-pdf ImageMagick sudo man patch mkisofs cdrecord ntp-client perl-AppConfig perl-DateManip";
102 } else {
103 system "urpmi.update -a ; urpmi --auto neon newt-devel slang-devel glibc-static-devel autoconf automake libtool gcc rpm-build wget gcc-c++ docbook-utils-pdf ImageMagick man patch mondo mkisofs cdrecord ntp-client perl-AppConfig perl-DateManip";
104 }
105} elsif ( $dfam eq "du" ) {
106 if (( $dver eq "3.1" ) && ($ddir eq "debian")) {
107 system "apt-get update; apt-get -y install autoconf automake libtool g++ wget patch mondo groff imagemagick docbook-utils docbook2x docbook-to-man ssh dpkg-dev sudo debian-builder dh-make fakeroot libnewt-dev ntpdate libncurses5-dev libdate-manip-perl libappconfig-perl";
108 } else {
109 system "apt-get update; apt-get -y install autoconf automake libtool g++ wget patch mondo groff imagemagick docbook-utils docbook2x docbook-to-man openssh-server dpkg-dev sudo debian-builder dh-make fakeroot libnewt-dev ntpdate libncurses5-dev libdate-manip-perl libappconfig-perl";
110 }
111} elsif ( $dfam eq "gen" ) {
112 system "emerge neon newt slang autoconf automake subversion libtool gcc wget vim man groff lynx grub afio buffer mindi mondo-rescue cdrecord mkisofs ntp-client";
113} else {
114 print "No pkg to install\n";
115}
116
117# Adapt sudoers
118$file="/etc/sudoers";
119$found = 0;
120open(PBFILE,$file) || die "Unable to open $file";
121open(PBOUT,"> $file.new") || die "Unable to open $file.new";
122while (<PBFILE>) {
123 $found = 1 if (/^pb /);
124 s/Defaults[ \t]+requiretty//;
125 print PBOUT $_;
126}
127close(PBFILE);
128print PBOUT "pb ALL=(ALL) NOPASSWD:ALL\n" if ( $found == 0 );
129close(PBOUT);
130rename("$file.new",$file);
131chmod 0440,$file;
132
133# Suse wants sudoers as 640
134if (($ddir eq "sles") || ($ddir eq "suse")) {
135 chmod 0640,$file;
136}
137
138# Sync date
139system "/usr/sbin/ntpdate ntp.home.musique-ancienne.org";
140
141# Patch AppConfig
142my $module=`find /usr/*/perl5 -type f -name File.pm | grep AppConfig/File.pm`;
143chomp($module);
144$found = 0;
145open(PBFILE,$module) || die "Unable to open $module";
146while (<PBFILE>) {
147 $found = 1 if (/Fix a bug if the variable is a hash/);
148}
149close(PBFILE);
150
151if ( $found == 0 ) {
152 chdir basename($module);
153 open(PBFILE,$module) || die "Unable to open $module";
154 my $module1 = $module."new";
155 open(PBOUT," > $module1") || die "Unable to open $module1";
156 while (<PBFILE>) {
157 s/^use AppConfig;/use AppConfig qw(:argcount);/;
158 if (/# variables prefixed '-' are reset to their default values/) {
159print PBOUT << 'EOF';
160 # Fix a bug if the variable is a hash - 1 has been created as a key
161 if ($nargs eq AppConfig::ARGCOUNT_HASH) {
162 delete $state->{ VARIABLE }->{ $variable }{1};
163 }
164
165EOF
166 }
167 print PBOUT "$_";
168 }
169 close(PBFILE);
170 close(PBOUT);
171 rename($module1,$module);
172}
173
174system "rm -rf project-builder-* ; wget ftp://ftp.mondorescue.org/src/project-builder-latest.tar.gz ; tar xvfz project-builder-latest.tar.gz ; cd project-builder-* ; perl Makefile.PL ; make ; make install ; cd ..";
175
Note: See TracBrowser for help on using the repository browser.