Handle hostnames with upper-case letters
[webmin.git] / makepackage.pl
1 #!/usr/bin/perl
2 # makepackage.pl <version>
3 # Copy files from some directory to /opt/webmin and build a package
4
5 @ARGV || die "usage: makepackage.pl <version> [directory]";
6 $dir = $ARGV[1] || "/usr/local/webadmin/tarballs/webmin-$ARGV[0]";
7 $> == 0 || die "makepackage.pl must be run as root";
8 -r "$dir/version" || die "$dir does not look like a webmin directory";
9 chop($v = `cat $dir/version`);
10
11 print "Copying $dir to /opt/webmin ..\n";
12 system("rm -rf /opt/webmin");
13 mkdir("/opt/webmin", 0755);
14 system("cd $dir ; tar cf - . | (cd /opt/webmin ; tar xf -)");
15 open(MODE, ">/opt/webmin/install-type");
16 print MODE "solaris-pkg\n";
17 close(MODE);
18 system("chown -R root /opt/webmin");
19 system("chgrp -R bin /opt/webmin");
20 system("chmod -R og-rxw /opt/webmin");
21 print ".. done\n\n";
22
23 print "Deleting non-Solaris modules ..\n";
24 system("cd /opt/webmin ; rm -rf /opt/webmin/{adsl-client,exports,fdisk,firewall,frox,grub,heartbeat,idmapd,ipsec,krb5,lilo,lvm,ppp-client,pptp-client,pptp-server,raid,shorewall,smart-status,vgetty,ldap-client}");
25 print ".. done\n\n";
26
27 print "Setting Perl path to /usr/bin/perl ..\n";
28 system("(find /opt/webmin -name '*.cgi' -print ; find /opt/webmin -name '*.pl' -print) | perl /opt/webmin/perlpath.pl /usr/bin/perl -");
29 print ".. done\n\n";
30
31 print "Making prototype file ..\n";
32 chdir("/opt/webmin");
33 open(PROTO, "> prototype");
34 print PROTO "i pkginfo=/opt/webmin/pkginfo\n";
35 close(PROTO);
36 system("find . -print | grep -v \"^prototype\" | pkgproto >>prototype");
37 open(PROTO, ">> prototype");
38 print PROTO "i postinstall=./postinstall\n";
39 print PROTO "i preremove=./preremove\n";
40 print PROTO "f none /etc/init.d/webmin=webmin-init 0755 root sys\n";
41 print PROTO "l none /etc/rc3.d/S99webmin=/etc/init.d/webmin\n";
42 print PROTO "l none /etc/rc0.d/K10webmin=/etc/init.d/webmin\n";
43 print PROTO "l none /etc/rc1.d/K10webmin=/etc/init.d/webmin\n";
44 print PROTO "l none /etc/rc2.d/K10webmin=/etc/init.d/webmin\n";
45 print PROTO "l none /etc/rcS.d/K10webmin=/etc/init.d/webmin\n";
46 close(PROTO);
47 print ".. done\n\n";
48
49 print "Making postinstall file ..\n";
50 open(POST, "> postinstall");
51 print POST <<EOF;
52 echo "Executing postinstall script .."
53 cd /opt/webmin
54 config_dir=/etc/webmin
55 var_dir=/var/webmin
56 perl=/usr/bin/perl
57 autoos=1
58 port=10000
59 login=root
60 crypt=x
61 ssl=0
62 atboot=0
63 nochown=1
64 autothird=1
65 noperlpath=1
66 nouninstall=1
67 export config_dir var_dir perl autoos port login crypt ssl atboot nochown autothird noperlpath nouninstall
68 ./setup.sh
69 EOF
70 close(POST);
71 print ".. done\n\n";
72
73 print "Making preremove file ..\n";
74 open(PRE, "> preremove");
75 print PRE <<EOF;
76 echo "In preremove script.."
77 /etc/webmin/stop
78 grep root=/opt/webmin /etc/webmin/miniserv.conf >/dev/null 2>&1
79 if [ "\$?" = 0 -a "\$KEEP_ETC_WEBMIN" = "" ]; then
80         # Package is being removed, and no new version of webmin
81         # has taken it's place. Delete the config files
82         echo "Running uninstall scripts .."
83         (cd /opt/webmin ; WEBMIN_CONFIG=/etc/webmin WEBMIN_VAR=/var/webmin /opt/webmin/run-uninstalls.pl)
84         rm -rf /etc/webmin /var/webmin
85 fi
86 EOF
87 close(PRE);
88 print ".. done\n\n";
89
90 print "Making pkginfo file ..\n";
91 @tm = localtime(time());
92 $pstamp = sprintf("%4.4d%2.2%2.2d%2.2d%2.2d%2.2d",
93                 $tm[5]+1900, $tm[4]+1, $tm[3], $tm[2], $tm[1], $tm[0]);
94 open(INFO, "> pkginfo");
95 print INFO <<EOF;
96 PKG="WSwebmin"
97 NAME="Webmin - Web-based system administration"
98 ARCH="all"
99 VERSION="$v"
100 CATEGORY="application"
101 VENDOR="Webmin Software"
102 EMAIL="jcameron\@webmin.com"
103 PSTAMP="Jamie Cameron"
104 BASEDIR="/opt/webmin"
105 CLASSES="none"
106 PSTAMP="$pstamp"
107 MAXINST="2"
108 EOF
109 close(INFO);
110 print ".. done\n\n";
111
112 print "Running pkgmk ..\n";
113 system("pkgmk -o -r /opt/webmin");
114 print ".. done\n\n";
115
116 print "Running pkgtrans ..\n";
117 system("pkgtrans -s /var/spool/pkg webmin-$v.pkg WSwebmin");
118 print ".. done\n\n";
119
120 print "Delete files in /opt/webmin ..\n";
121 chdir("/");
122 system("rm -rf /opt/webmin");
123 print ".. done\n\n";
124
125 print "Delete files in /var/spool/pkg ..\n";
126 system("rm -rf /var/spool/pkg/WSwebmin");
127 print ".. done\n\n";
128
129 if (-d "/usr/local/webadmin/solaris-pkg") {
130         $dest = "/usr/local/webadmin/solaris-pkg/webmin-$v.pkg.gz";
131         print "Moving package to $dest ..\n";
132         system("gzip -c /var/spool/pkg/webmin-$v.pkg >$dest");
133         unlink("/var/spool/pkg/webmin-$v.pkg");
134         print ".. done\n\n";
135         }
136