From 29dcd86135192b116ee8b5607eae59d6faf3a59d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 14 Feb 2008 01:05:25 -0700 Subject: [PATCH 1/2] Bug #21158 mysql_config doesn't include -lmygcc Add -lmygcc to mysql_config output for libs, libs_r, and embedded_libs. Required when linking against our static libs, if yassl is used, and gcc used to build library is significantly different from that which is using the library. scripts/mysql_config.sh: Add -lmygcc to --libs, --libs_r, and --embedded-libs output, if libmygcc.a is found in the pkglibdir. This works around a problem when linking against the static client libs which were built with a different GCC than the current compiler. In this case, without -lmygcc, several builtin functions (e.g., __pure_virtual, __builtin_delete) are left undefined. Currently it is yassl which pulls in these symbols. This isn't a problem when linking against shared libraries, or when using the same compiler version. Currently it shows up with libs built on build.mysql.com with gcc 2.95.3, when using them on more recent systems. Also strip the -mcpu, -mtune, and -march cflags. The calling package can determine what optimization parameters to choose. --- scripts/mysql_config.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/mysql_config.sh b/scripts/mysql_config.sh index ae58655ed0f..8abad75bc2a 100644 --- a/scripts/mysql_config.sh +++ b/scripts/mysql_config.sh @@ -107,6 +107,16 @@ libs="$libs @openssl_libs@ @STATIC_NSS_FLAGS@ " libs_r=" $ldflags -L$pkglibdir -lmysqlclient_r @ZLIB_DEPS@ @LIBS@ @openssl_libs@ " embedded_libs=" $ldflags -L$pkglibdir -lmysqld @ZLIB_DEPS@ @LIBS@ @WRAPLIBS@ @innodb_system_libs@ @openssl_libs@ " +if [ -r "$pkglibdir/libmygcc.a" ]; then + # When linking against the static library with a different version of GCC + # from what was used to compile the library, some symbols may not be defined + # automatically. We package the libmygcc.a from the build host, to provide + # definitions for those. Bugs 4921, 19561, 19817, 21158, etc. + libs="$libs -lmygcc " + libs_r="$libs_r -lmygcc " + embedded_libs="$embedded_libs -lmygcc " +fi + cflags="-I$pkgincludedir @CFLAGS@ " #note: end space! include="-I$pkgincludedir" @@ -116,6 +126,7 @@ include="-I$pkgincludedir" for remove in DDBUG_OFF DSAFEMALLOC USAFEMALLOC DSAFE_MUTEX \ DPEDANTIC_SAFEMALLOC DUNIV_MUST_NOT_INLINE DFORCE_INIT_OF_VARS \ DEXTRA_DEBUG DHAVE_purify O 'O[0-9]' 'xO[0-9]' 'W[-A-Za-z]*' \ + 'mtune=[-A-Za-z0-9]*' 'mcpu=[-A-Za-z0-9]*' 'march=[-A-Za-z0-9]*' \ Xa xstrconst "xc99=none" \ unroll2 ip mp restrict do From 36bfc5b825911e5df939946d3c44e6e12b7cc5d3 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 18 Feb 2008 12:03:39 -0700 Subject: [PATCH 2/2] Bug #28555 Upgrading MySQL Fails to shut down old server and kills socket file Check for an existing MySQL server package from a different vendor or major MySQL version. In such a case, refuse to install the server and recommend how to safely remove the old packages before installing the new ones. support-files/mysql.spec.sh: Add to the %pre server scriptlet checks to ensure that we're not upgrading from another vendor's package, or that this is not a major version upgrade. If an automatic upgrade isn't safe, print basic instructions on how to do a manual upgrade, and bail out. --- support-files/mysql.spec.sh | 74 ++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 8c4909fc8d5..acf7d571710 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -15,6 +15,7 @@ # MA 02110-1301 USA. %define mysql_version @VERSION@ +%define mysql_vendor MySQL AB # use "rpmbuild --with static" or "rpm --define '_with_static 1'" (for RPM 3.x) # to enable static linking (off by default) @@ -69,7 +70,7 @@ License: %{license} Source: http://www.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/mysql-%{mysql_version}.tar.gz URL: http://www.mysql.com/ Packager: MySQL Production Engineering Team -Vendor: MySQL AB +Vendor: %{mysql_vendor} Provides: msqlormysql MySQL-server mysql BuildRequires: ncurses-devel Obsoletes: mysql @@ -420,6 +421,72 @@ touch $RBR%{_sysconfdir}/my.cnf touch $RBR%{_sysconfdir}/mysqlmanager.passwd %pre server +# Check if we can safely upgrade. An upgrade is only safe if it's from one +# of our RPMs in the same version family. + +installed=`rpm -q --whatprovides mysql-server 2> /dev/null` +if [ $? -eq 0 -a -n "$installed" ]; then + vendor=`rpm -q --queryformat='%{VENDOR}' "$installed" 2>&1` + version=`rpm -q --queryformat='%{VERSION}' "$installed" 2>&1` + myvendor='%{mysql_vendor}' + myversion='%{mysql_version}' + + old_family=`echo $version | sed -n -e 's,^\([1-9][0-9]*\.[0-9][0-9]*\)\..*$,\1,p'` + new_family=`echo $myversion | sed -n -e 's,^\([1-9][0-9]*\.[0-9][0-9]*\)\..*$,\1,p'` + + [ -z "$vendor" ] && vendor='' + [ -z "$old_family" ] && old_family="" + [ -z "$new_family" ] && new_family="" + + error_text= + if [ "$vendor" != "$myvendor" ]; then + error_text="$error_text +The current MySQL server package is provided by a different +vendor ($vendor) than $myvendor. Some files may be installed +to different locations, including log files and the service +startup script in %{_sysconfdir}/init.d/. +" + fi + + if [ "$old_family" != "$new_family" ]; then + error_text="$error_text +Upgrading directly from MySQL $old_family to MySQL $new_family may not +be safe in all cases. A manual dump and restore using mysqldump is +recommended. It is important to review the MySQL manual's Upgrading +section for version-specific incompatibilities. +" + fi + + if [ -n "$error_text" ]; then + cat <&2 + +****************************************************************** +A MySQL server package ($installed) is installed. +$error_text +A manual upgrade is required. + +- Ensure that you have a complete, working backup of your data and my.cnf + files +- Shut down the MySQL server cleanly +- Remove the existing MySQL packages. Usually this command will + list the packages you should remove: + rpm -qa | grep -i '^mysql-' + + You may choose to use 'rpm --nodeps -ev ' to remove + the package which contains the mysqlclient shared library. The + library will be reinstalled by the MySQL-shared-compat package. +- Install the new MySQL packages supplied by $myvendor +- Ensure that the MySQL server is started +- Run the 'mysql_upgrade' program + +This is a brief description of the upgrade process. Important details +can be found in the MySQL manual, in the Upgrading section. +****************************************************************** +HERE + exit 1 + fi +fi + # Shut down a previously installed server first if test -x %{_sysconfdir}/init.d/mysql then @@ -715,6 +782,11 @@ fi # itself - note that they must be ordered by date (important when # merging BK trees) %changelog +* Mon Feb 18 2008 Timothy Smith + +- Require a manual upgrade if the alread-installed mysql-server is + from another vendor, or is of a different major version. + * Fri Nov 16 2007 Joerg Bruehe - When testing the debug server, use "make test-bt-debug".