Commit 3e75d777 authored by lenz@mysql.com's avatar lenz@mysql.com

- added more files to support-files/MacOSX and added them to the

   distribution
 - added Bootstrap, logger.pm and Do-pkg to Build-tools:
   Bootstrap is used to build the source distribution for the binary builds
   logger.pm includes some helper functions
   Do-pkg converts a binary distribution into a Mac OS X PKG (still needs
   some polishing)
parent 126e0857
This diff is collapsed.
#!/usr/bin/perl -w
#
# Do-pkg - convert a binary distribution into a Mac OS X PKG and put it
# inside a Disk Image (.dmg)
#
# Use the "--help" option for more info!
#
# written by Lenz Grimmer <lenz@mysql.com>
#
use Getopt::Long;
$opt_help= undef;
$opt_suffix= undef;
$opt_version= undef;
GetOptions(
"help|h",
"suffix=s",
"version=s",
) || &print_help;
&print_help if ($opt_help || !$opt_suffix || !$opt_version);
$PM= "/Developer/Applications/PackageMaker.app/Contents/MacOS/PackageMaker";
$HOME= $ENV{HOME};
$TMP= "/tmp/PKGBUILD";
$PKGROOT= "$TMP/PMROOT";
$PKGDEST= "$TMP/PKG";
$RESOURCE_DIR= "$TMP/Resources";
$SUFFIX= $opt_suffix;
$VERSION= $opt_version;
$NAME= "mysql$SUFFIX-$VERSION";
chomp($HOST= `hostname`);
$HOST=~ /^([^.-]*)/;
$HOST= $1;
$BUILDDIR= "$HOME/$HOST";
$SUPFILEDIR= <$BUILDDIR/mysql*-$VERSION/support-files/MacOSX>;
$TAR= <$BUILDDIR/$NAME-apple-darwin*-powerpc.tar.gz>;
$INFO= <$SUPFILEDIR/Info.plist>;
$DESC= <$SUPFILEDIR/Description.plist>;
@RESOURCES= qw/ ReadMe.txt postinstall preinstall /;
print "TAR: $TAR\nINFO: $INFO\nDESC: $DESC\n";
# Creating the UFS disk image requires root privileges
chomp($ID= `whoami`);
die "You must be root to run this script!\nUse \"sudo\" or become root first.\n" if ($ID ne "root");
foreach $file ($TAR, $INFO, $DESC)
{
die "Unable to find $file!\n" if (!-f $file);
}
# Remove old temporary build directories first
system ("rm -rf $TMP");
print "Creating temp directories\n";
foreach $dir ($TMP, $PKGROOT, $PKGDEST, $RESOURCE_DIR)
{
if (!-d $dir)
{
mkdir $dir;
}
}
foreach $resfile (@RESOURCES)
{
system ("cp $SUPFILEDIR/$resfile $RESOURCE_DIR") == 0 or die "Error while copying $SUPFILEDIR/$resfile to $RESOURCE_DIR: ?!";
}
# Extract the binary tarball and create the "mysql" symlink
print "Extracting $TAR to $PKGROOT\n";
system("gnutar zxf $TAR -C $PKGROOT") if (-f $TAR);
system("cd $PKGROOT ; ln -s mysql* ./mysql");
system("chown -R root.wheel $PKGROOT/*");
# Now build the PGK using PackageMaker
print "Running PackageMaker\n";
system("$PM -build -p $PKGDEST/$NAME.pkg -f $PKGROOT -r $RESOURCE_DIR -i $INFO -d $DESC") or die "Error while building package: $!\n";
print "Removing $PKGROOT\n";
system("rm -rf $PKGROOT");
# Determine the size of the Disk image to be created and add a 5% safety
# margin for filesystem overhead
print "Determining required disk image size for $PKGDEST: ";
chomp($_= `du -sk $PKGDEST`);
@size= split();
$size= int($size[0]+($size[0]*0.05));
print "$size KB\n";
die "Zero bytes? Something is wrong here!\n" if ($size == 0);
# Now create and mount the disk image
$TMPNAME= $NAME . ".tmp";
print "Creating temporary Disk image $TMPNAME\n";
system("hdiutil create $TMPNAME -size ${size}k -ov -fs UFS -volname $NAME");
print "Result: $!\n";
print "Attaching Disk image $TMPNAME.dmg\n";
system("hdid $TMPNAME.dmg");
print "Result: $!\n";
# Install the PKG into the .dmg
chomp($mountpoint=`mount | grep "\/Volumes\/$NAME" | cut -f3 -d" "`);
print "Copying $PKGDEST/$NAME.pkg to Disk image /Volumes/$NAME\n";
system("ditto $PKGDEST /Volumes/$NAME");
system("ditto $RESOURCE_DIR/ReadMe.txt /Volumes/$NAME");
chomp($mountpoint=`mount | grep "\/Volumes\/$NAME" | cut -f1 -d" "`);
die "/Volumes/$NAME not attached!\n" if (!$mountpoint);
print "Unmounting $mountpoint\n";
system("hdiutil detach $mountpoint");
print "Result: $!\n";
unlink ("$NAME.dmg") if (-f "$NAME.dmg");
print "Compressing disk image\n";
system("hdiutil convert $TMPNAME.dmg -format UDZO -imagekey zlib-level=9 -o $NAME.dmg");
# Final cleanups
print "Removing $TMPNAME.dmg\n";
unlink ("$TMPNAME.dmg");
print "Removing $TMP\n";
system("rm -rf $TMP");
print "$NAME.dmg created.\n";
exit 0;
sub print_help
{
print <<EOF;
Usage: Do-pkg --suffix=<suffix> --version=<version>
Creates a Mac OS X installation package (PKG) and stores it inside
a Disk Image (.dmg) file. You need to create a binary distribution
tarball with scripts/make_binary_distribution first!
NOTE: You need to run this script with root privileges (required
to create the disk image)
Options:
-h, --help Print this help
--suffix=<suffix> The package suffix (e.g. "-standard" or "-pro)
--version=<version> The MySQL version number (e.g. 4.0.11-gamma)
EOF
exit 1;
}
#
# Create a log entry
#
sub logger
{
my $message=$_[0];
print timestamp() . " " . $message . "\n" if $opt_verbose;
if (defined $opt_log && !$opt_dry_run)
{
open LOG, ">>$logfile" or die "Can't open logfile $logfile!";
print LOG timestamp() . " " . $message . "\n";
close LOG;
}
}
# Create a time stamp for logging purposes
sub timestamp
{
return &ymd() . " " . &hms();
}
#
# return the current time as a string (HH:MM:SS)
#
sub hms
{
my @ta= localtime(time());
my $h= $ta[2];
$h= "0" . "$h" if ($h <= 9);
my $m= $ta[1];
$m= "0" . "$m" if ($m <= 9);
my $s= $ta[0];
$s="0" . "$s" if ($s <= 9);
return "$h:$m:$s";
}
#
# return the current date as a string (YYYYMMDD)
#
sub ymd
{
my @ta=localtime(time());
my $d=$ta[3];
$d="0" . "$d" if ($d <= 9);
my $m=$ta[4]+1;
$m="0" . "$m" if ($m <= 9);
my $y=1900+$ta[5];
return "$y$m$d";
}
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<key>IFPkgDescriptionDeleteWarning</key> <key>IFPkgDescriptionDeleteWarning</key>
<string></string> <string></string>
<key>IFPkgDescriptionDescription</key> <key>IFPkgDescriptionDescription</key>
<string>This package provides a binary installation of MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X.</string> <string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X</string>
<key>IFPkgDescriptionTitle</key> <key>IFPkgDescriptionTitle</key>
<string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X</string> <string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X</string>
<key>IFPkgDescriptionVersion</key> <key>IFPkgDescriptionVersion</key>
......
...@@ -17,19 +17,34 @@ ...@@ -17,19 +17,34 @@
## Process this file with automake to create Makefile.in ## Process this file with automake to create Makefile.in
EXTRA_DIST = Info.plist.sh Description.plist.sh EXTRA_DIST = Info.plist.sh \
Description.plist.sh \
StartupParameters.plist.sh \
postinstall.sh \
preinstall.sh \
ReadMe.txt
pkgdata_DATA = Info.plist Description.plist pkgdata_DATA = Info.plist \
Description.plist \
StartupParameters.plist \
postinstall \
preinstall
CLEANFILES = Info.plist Description.plist CLEANFILES = Info.plist \
Description.plist \
StartupParameters.plist \
postinstall \
preinstall
SUFFIXES = .sh SUFFIXES = .sh
.sh: .sh:
@RM@ -f $@ $@-t @RM@ -f $@ $@-t
@SED@ \ @SED@ \
-e 's!@''prefix''@!$(prefix)!g' \
-e 's!@''VERSION''@!@VERSION@!' \ -e 's!@''VERSION''@!@VERSION@!' \
-e 's!@''MYSQL_SERVER_SUFFIX''@!@MYSQL_SERVER_SUFFIX@!' \ -e 's!@''MYSQL_SERVER_SUFFIX''@!@MYSQL_SERVER_SUFFIX@!' \
-e 's!@''MYSQLD_USER''@!@MYSQLD_USER@!' \
$< > $@-t $< > $@-t
@MV@ $@-t $@ @MV@ $@-t $@
......
Installation notes for MySQL on Mac OS X
PLEASE READ!
For more details about installing and running
MySQL on Mac OS X, also refer to the manual,
which is available online:
http://www.mysql.com/doc/en/Mac_OS_X_installation.html
NOTE: Before proceeding with the installation, please
make sure that no other MySQL server is running!
Please shut down all running MySQL instances before
continuing by either using the MySQL Manager
Application (on Mac OS X Server) or via "mysqladmin
shutdown" on the command line.
This MySQL package will be installed into
"/usr/local/mysql-<version>" and will also create a
symbolic link "/usr/local/mysql", pointing to the new
location.
A previously existing /usr/local/mysql directory will
be renamed to /usr/local/mysql.bak before proceeding
with the installation.
Additionally, it will install the mysql grant tables by
executing "mysql_install_db" after the installation.
If you are running Mac OS X Server, you already have a
version MySQL installed. Make sure to read Apple's help
about installing MySQL (Run the "Help View" application,
select "Mac OS X Server help", and do a search for MySQL
and read the item entitled "Installing MySQL").
If you previously used Marc Liyanage's MySQL packages
for MacOS X from http://www.entropy.ch, you can simply
follow the update instructions given on his pages.
After the installation (and restoring the old database
files, if necessary), you can start up MySQL by running
the following commands in a terminal window:
cd /usr/local/mysql
sudo ./bin/mysqld_safe
(Enter your password)
(Press CTRL+Z)
(Press CTRL+D to exit the shell)
bg
You should now be able to connect to the MySQL server,
e.g. by running /usr/local/mysql/bin/mysql
If you installed MySQL for the first time,
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER!
This is done with the following two commands:
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h $hostname password 'new-password'
Please note, that after upgrading from MySQL 3.23 to
MySQL 4.0 it is recommended to convert the MySQL
privilege tables using the mysql_fix_privilege_tables
script, since some new security privileges have been
added.
Please see
http://www.mysql.com/doc/en/Upgrading-from-3.23.html
for more information on how to upgrade from MySQL 3.23.
If you do not want to have to type the full path
"/usr/local/mysql/bin" in front of every command, you
can to add this directory to your PATH environment
variable in your login script. For the default shell
"tcsh", you can do this by running this command once:
echo 'setenv PATH $PATH:/usr/local/mysql/bin' >> ~/.tcshrc
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Description</key>
<string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@</string>
<key>OrderPreference</key>
<string>None</string>
<key>Provides</key>
<array>
<string>MySQL</string>
</array>
<key>Uses</key>
<array>
<string>Network</string>
<string>Resolver</string>
</array>
</dict>
</plist>
#!/bin/sh
#
# postinstall - this script will be executed after the MySQL PKG
# installation has been performed.
#
# This script will install the MySQL privilege tables using the
# "mysql_install_db" script and will correct the ownerships of these files
# afterwards.
#
cd @prefix@
if [ ! -f data/mysql/db.frm ] ; then
./scripts/mysql_install_db
fi
if [ -d data ] ; then
chown -R @MYSQLD_USER@ data
fi
#!/bin/sh
#
# preinstall - this script will be executed before the MySQL PKG
# installation will be performed.
#
# If this package has been compiled with a prefix ending with "mysql" (e.g.
# /usr/local/mysql or /opt/mysql), it will rename any previosuly existing
# directory with this name before installing the new package (which includes
# a symlink named "mysql", pointing to the newly installed directory, which
# is named mysql-<version>)
#
PREFIX="@prefix@"
BASENAME=`basename $PREFIX`
if [ -d $PREFIX -a ! -L $PREFIX -a $BASENAME = "mysql" ] ; then
mv $PREFIX $PREFIX.bak
fi
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment