On Thu, Dec 11, 2008 at 02:41:46PM -0500, Bailo, John wrote:
> Is Postfix available for or part of Sun's Solaris 10 OS as a compiled
> package?
Build Postfix from source, and then create a package out of that.
Attached a script I used to use to build the "prototype" and "pkginfo" files
for an SvR4 package. The "prototype" is sent to stdout. Then just
"pkgmk" and there you are.
Have not used in a long time, so it may require a bit of tweaking...
And you may need to add an init.d start script in some cases.
--
Viktor.
Disclaimer: off-list followups get on-list replies or get ignored.
Please do not ignore the "Reply-To" header.
To unsubscribe from the postfix-users list, visit
http://www.postfix.org/lists.html or click the link below:
<mailto:[email protected]?body=unsubscribe%20postfix-users>
If my response solves your problem, the best way to thank me is to not
send an "it worked, thanks" follow-up. If you must respond, please put
"It worked, thanks" in the "Subject" so I can delete these quickly.
#! /bin/env perl
use IO::File;
my $prefix=shift(@ARGV);
# Commands in $INSTALL_EXEC_PREFIX/sbin
# Daemons in $INSTALL_EXEC_PREFIX/libexec
# Docs in $INSTALL_PREFIX/{man,html,readme}
my $INSTALL_EXEC_PREFIX="$prefix";
my $INSTALL_PREFIX="$prefix";
my $CFDIR="/etc/postfix";
my $POSTCONF="$INSTALL_EXEC_PREFIX/sbin/postconf -c $CFDIR";
# Create pkginfo file:
# ARCH and VERSION are computed dynamically.
# The Postfix configuration parameters become package parameters,
# with the first letter converted to upper case.
#
my $info = IO::File->new("pkginfo", "w");
print $info "PKG=postfix\n";
print $info "NAME=Postfix MTA\n";
print $info "ARCH=".qx{uname -p};
print $info "VERSION=".qx{$POSTCONF -d -h mail_version};
print $info "CATEGORY=system\n";
print $info "BASEDIR=/\n";
print $info "DESC=Mail Transport Agent http://www.postfix.org/\n";
print $info "CLASSES=none site\n";
for (@ARGV) { print $info "\u$1=$3\n"; }
# List pkginfo and the install/remove scripts for "site" files.
#
print "1 i pkginfo\n";
print "1 i postinstall\n";
print "1 i i.site\n";
print "1 i r.site\n";
# These configuration files are preserved if present
#
my %preserve;
for (qw(aliases main.cf master.cf)) { $preserve{$_}=1; }
my $pfiles = "$INSTALL_EXEC_PREFIX/libexec/postfix-files";
my $pfd = IO::File->new($pfiles, "r")
or die "$0: Could not open: $pfiles: $!\n";
# Parse postfix-files
#
while(defined($_ = <$pfd>) || defined($_ = shift(@extra))) {
next if (/^#/);
chomp;
# Expected format is: name:type:owner:group:permission[:flags]
#
my @F=split(/:/, $_);
# skip obsolete files
next if ($#F > 4 && $F[5] =~ /o/);
# Default group for Solaris is "bin"
#
$F[3] = "bin" if ($F[3] eq "" || $F[3] eq "-");
# Compute substituted values for the file locations.
#
(my $path = $F[0]) =~ s{^\$(\w+)}{getconfig($1, 1) || die "$0: $1 not
known\n"}e;
(my $owner = $F[2]) =~ s{^\$(\w+)}{getconfig($1, 0) || die "$0: $1 not
known\n"}e;
(my $group = $F[3]) =~ s{^\$(\w+)}{getconfig($1, 0) || die "$0: $1 not
known\n"}e;
next if ($path =~ m{^no/});
# Small-caps Postfix installation parameters
#
map {s{^\$(\w+)}{\$\u$1}} @F;
my $dest = $F[0];
# Check installed image.
#
if (!lstat("$path")) {
# Allow missing directories if automatically created.
#
next if ($F[1] eq "d" && $F[5] =~ /c/ || $F[1] eq "l");
die "$0: $dest missing from image\n";
}
if ($F[1] eq "d") {
# postfix-files wants a directory.
#
if ( -d _ ) {
printf "1 d none %s 0%o %s %s\n",
$dest, oct($F[4]), $F[2], $F[3];
next;
}
die "$0: $dest is not a directory\n";
}
if ($F[1] eq "f") {
# postfix-files wants a file.
#
if ( -f _ ) {
my $class = "f none";
if ( $dest =~ m{^\$Config_directory/(.*)}) {
if (exists $preserve{$1}) {
$class = "v site";
}
}
printf "1 %s %s=%s 0%o %s %s\n",
$class, $dest, $path, oct($F[4]), $F[2], $F[3];
next;
}
die "$0: $dest is not a file\n";
}
if ($F[1] eq "l") {
# postfix-files wants a symlink
#
my $link = readlink("$path") or die "$0: readlink($path): $!\n";
printf "1 s none %s=%s\n", $dest, $link;
}
if ($F[1] eq "h") {
# postfix-files wants a hardlink
#
my $link = $F[2];
printf "1 l none %s=%s\n", $dest, $link;
}
}
close($pfd);
close($info) or die "$0: pkginfo write error: $!\n";
my %config;
sub getconfig {
my ($p, $ispath) = @_;
return $config{$p} if (defined($config{$p}));
$v = qx{$POSTCONF -d -h $p};
die "$0: Parameter $p lookup failed\n" if ($? != 0);
chomp($v);
return $config{$p}="no" if ($v eq "no");
die "$0: Parameter $p not an absolute pathname: $v\n"
if ($ispath && $v !~ m{^/});
print $info "\u$p=$v\n";
my $v = qx{$POSTCONF -h $p};
die "$0: Parameter $p lookup failed\n" if ($? != 0);
chomp($v);
return $config{$p} = $v;
}
#
error=no
echo "## Preserving existing site configuration files"
while read src dest
do
[ "$src" = /dev/null ] && continue
if [ -f "$dest" ]
then
echo $dest preserved
else
echo $dest
cp $src $dest || error=yes
fi
done
[ "$error" = yes ] && exit 2
exit 0
#
error="no"
echo "## Preserving existing site configuration files"
while read dest
do
if [ -f "$dest" ]
then
echo $dest preserved
fi
done
[ "$error" = yes ] && exit 2
exit 0