#!/usr/bin/perl -w # # Automated processes to create SUN packages # You can run this script after you did a 'make install' in the chrooted # environment. Run it from the /packagename-1.0/usr/local/ directory # # JA: 06-01-2000 Initial release # JA: 25-01-2000 Beautified a little # AH: 20-07-2000 Beautified a bit more $bits = $ARGV[0]; $ver = $ARGV[1]; $name = $ARGV[2]; $pkg = "MHSL$name$bits"; print "\nStarting make_package (sun solaris)\nbits= $bits\nver= $ver\nname= $name, pkg=$pkg\n"; $find = "/usr/bin/find"; $pkgproto = "/usr/bin/pkgproto"; $pkgmk = "/usr/bin/pkgmk"; $pkgtrans = "/usr/bin/pkgtrans"; $temp = "/tmp/prototype$$"; $prototype = "prototype"; $pkginfo = "pkginfo"; $postinstall = "postinstall"; ($gid ,$uid ,$userInfo ,$email ,$quota ,$group ,$passwd ,$category ,$userHome ,$vendor ,$loginShell ,$pstamp ,$basedir)=(); # Sanitycheck #$pwd = `pwd`; #if ($pwd =~ '\/usr\/local') { # $pwd = $`; #} #die "Wrong location, please cd to /usr/local/ and run again.\n" # if ($pwd eq ""); system ("$find . -print | $pkgproto > $temp"); open (PREPROTO,"<$temp") || die "Unable to read prototype information ($!)\n"; open (PROTO,">$prototype") || die "Unable to write file prototype ($!)\n"; print PROTO "i pkginfo=./$pkginfo\n"; print PROTO "i postinstall=./$postinstall\n"; while () { # Read the prototype information from /tmp/prototype$$ chomp; $thisline = $_; if ($thisline =~ " prototype " or $thisline =~ " pkginfo " or $thisline =~ " postinstall ") { # We don't need that line } elsif ($thisline =~ "^[fd] ") { # Change the ownership for files and directories ($dir, $none, $file, $mode, $user, $group) = split / /,$thisline; print PROTO "$dir $none $file $mode root bin\n"; } else { # Symlinks and other stuff should be printed as well ofcourse print PROTO "$thisline\n"; } } close PROTO; close PREPROTO; # Clean up unlink $temp || warn "Unable to remove tempfile ($!)\n"; # Now we can start building the package # # First get some info $default{"name"} = $name; $default{"version"} = $ver; $default{"pkg"} = "MHSL$name$bits"; $default{"arch"} = "sparc$bits"; $default{"category"} = "application"; $default{"vendor"} = "March Hare Software Ltd"; $default{"email"} = "tony-hoyle\@march-hare.com"; $login = getlogin(); ($user, $passwd, $uid, $gid, $quota, $default{"pstamp"}, $userInfo, $userHome, $loginShell) = getpwnam ($login); $default{"pstamp"} = "Jasper Aukes" if ($default{"pstamp"} eq ""); $os = `uname -r`; $os =~ '\.'; $os = "sol$'"; chomp $os; $default{"basedir"} = "/"; # Check for correctness of guessed values by userinput %questions = ( pkg => "Please give the name for this package", name => "Now enter the real name for this package", arch => "What architecture did you build the package on?", version => "Enter the version number of the package", category => "What category does this package belong to?", vendor => "Who is the vendor of this package?", email => "Enter the email adress for contact", pstamp => "Enter your own name", basedir => "What is the basedir this package will install into?", packagename => "How should i call the packagefile?", ); @vars = qw(pkg name arch version category vendor email pstamp basedir packagename); foreach $varname (@vars) { $default{"$varname"} = "$name-$version-$os-sparc$bits" if ($varname eq "packagename"); getvar($varname); } $classes = "none"; # Create the pkginfo file print "\nNow creating $pkginfo file\n"; open (PKGINFO,">$pkginfo") || die "Unable to open $pkginfo for writing ($!)\n"; print PKGINFO "PKG=\"$pkg\"\n"; print PKGINFO "NAME=\"$name\"\n"; print PKGINFO "ARCH=\"$arch\"\n"; print PKGINFO "VERSION=\"$version\"\n"; print PKGINFO "CATEGORY=\"$category\"\n"; print PKGINFO "VENDOR=\"$vendor\"\n"; print PKGINFO "EMAIL=\"$email\"\n"; print PKGINFO "PSTAMP=\"$pstamp\"\n"; print PKGINFO "BASEDIR=\"$basedir\"\n"; print PKGINFO "CLASSES=\"$classes\"\n"; close PKGINFO; print "Done.\n"; # Build and zip the package print "Building package\n"; system ("$pkgmk -o -r `pwd`"); print "Translate package format\n"; print " (cd /var/spool/pkg;$pkgtrans -s `pwd` /tmp/$packagename $pkg)\n"; system ("(cd /var/spool/pkg;$pkgtrans -s `pwd` /tmp/$packagename $pkg)"); print "Zip package\n"; system ("gzip /tmp/$packagename"); print "Move package\n"; system ("mv /tmp/$packagename.gz .."); print "Done. (../$packagename.gz)\n"; # The subroutines sub getvar { my $questionname = "@_"; # print "$questions{$questionname} [$default{\"$questionname\"}]: "; my $answer = ""; #; chomp $answer; $$questionname = $answer; $$questionname = $default{$questionname} if ($$questionname eq ""); }