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
RevLine 
[164]1#!/usr/bin/perl -w
[153]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
[166]5
6# Needs to be extented with the pb Distribution.pm module at the end externally
[153]7#
[163]8# Needs to use root account to connect to the VM
[153]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
[164]13use strict;
14use File::Basename;
[153]15
[164]16my $file = "/tmp/pbkey";
[153]17
[164]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 }
[176]35 system "groupadd pb";
[179]36 system "useradd pb -g pb -m -d /home/pb";
[164]37}
38
[203]39# For root
40mkdir ".ssh",0700;
41system 'cp /tmp/pbkey .ssh/authorized_keys';
42chmod 0600,".ssh/authorized_keys";
43
44# For pb
[171]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
[153]51# No passwd for pb only keys
[164]52$file="/etc/shadow";
53open(PBFILE,$file) || die "Unable to open $file";
[166]54open(PBOUT,"> $file.new") || die "Unable to open $file.new";
[164]55while (<PBFILE>) {
56 s/^pb:\!\!:/pb:*:/;
[185]57 s/^pb:\!:/pb:*:/; #SLES 9 e.g.
[166]58 print PBOUT $_;
[164]59}
60close(PBFILE);
[166]61close(PBOUT);
62rename("$file.new",$file);
[167]63chmod 0640,$file;
[164]64
65unlink "/tmp/pbkey";
66
67my ($ddir, $dver, $dfam, $dtype, $pbsuf) = pb_distro_init();
[176]68print "distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf))."\n";
[164]69
[158]70# Get and install pb
[164]71if ( $ddir eq "fedora" ) {
72 system "yum clean all";
[169]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 }
[171]80
81 my $topbuilddir=`rpmquery --eval '%{_topdir}' 2> /dev/null`;
82 chomp($topbuilddir);
83
[164]84 if ( $dver <= 4 ) {
[171]85 # FC4 - AppConfig unavailable
[200]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 ..";
[164]87 } else {
88 # FC5/6/7
[200]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";
[164]90 }
[181]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"))) {
[175]92 # Suppose pkg are installed already
[200]93 system "rpm -e lsb 2>&1 > /dev/null";
[175]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 .. ";
[191]95} elsif ($ddir eq "suse") {
96 # New OpenSuSE
[203]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";
[164]98} elsif ( $dfam eq "md" ) {
[175]99 if (( $dver eq "2006.0" ) || ( $dver eq "10.2" )) {
[171]100 # mondo not available
[200]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";
[171]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 }
[164]105} elsif ( $dfam eq "du" ) {
[203]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 }
[164]111} elsif ( $dfam eq "gen" ) {
[166]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";
[164]113} else {
114 print "No pkg to install\n";
115}
[158]116
[203]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
[171]138# Sync date
139system "/usr/sbin/ntpdate ntp.home.musique-ancienne.org";
140
[158]141# Patch AppConfig
[191]142my $module=`find /usr/*/perl5 -type f -name File.pm | grep AppConfig/File.pm`;
[164]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);
[158]150
[164]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 ..";
[166]175
Note: See TracBrowser for help on using the repository browser.