I was really pleased to see the announcement by Oracle MySQL yum repositories that they have now produced a yum repository from where the MySQL RPMs they provide can be downloaded. This makes keeping up to date much easier. Many companies setup internal yum repositories with the software they need as then updating servers is much easier and can be done with a simple command. For many people at home that means you set this up once and don’t need to check for updates and do manual downloads, but can do a quick yum update xxxx and you get the latest version. Great! This new yum repository only covers RHEL6 did not include RHEL5 which is not yet end of life and still used by me and probably quite a lot of other people. I filed bug#70773 to ask for RHEL5 support to be considered, especially as it was being provided already, and asked for them to also consider including 5.7, but have been told that RHEL5 support will not be added. As you will see later perhaps it is now clear why.
I was somewhat surprised then to read a later post Updating MySQL using official repositories which showed that actually the rpms in this new repository are completely different to the previous ones (MySQL community rpms) that we have been downloading from http://dev.mysql.com/downloads/mysql/#downloads. The package names differ being MySQL-server…rpm, MySQL-client…rpm on the latest page whilst the package names in the new yum repository are named mysql-community-client…rpm, mysql-community-server…rpm, etc. It looks like these packages are incompatible, thus for those of us already using the first set of RPMs the new yum repository is rather useless, and switching from one set of RPMs to another is quite a nuisance if you have a number of servers.
To avoid confusion in any later comments in this article I will refer to the ORIGINAL MySQL packages as the ones provided by Oracle previously and the NEW MySQL packages as these new ones provided in the new yum repo.
No mention of these differences was made by Oracle in their announcements, so obviously no reasons were given for why they might have chosen to name packages differently and not simply provided a yum repository containing the existing packages they have already built. That is what I had assumed they’d done and would have seemed to have been the most logical step to take.
Independently of the reasons that Oracle has decided to build two sets of RPMs, one thing is clear: They now have to maintain 2 different sets of package for the same distribution (RHEL6) in parallel. It also brings up the question of what will happen with MySQL 5.7 that is out there already being offered in the ORIGINAL packaging format and whether or not new 5.7 packages will be provided in ORIGINAL or NEW versions or both…. I have been trying out the current DEV version of 5.7 and indeed I know that 5.7 can change anyway Oracle chooses until they declare the version GA, so fair enough. The only thing it does is raise doubt about how to prepare for that moment as MySQL 5.7 has many interesting features and some of us way want to use those as soon as possible.
Anyway I digress. I thought that I would see what differences there may be between the src rpms of the ORIGINAL and NEW packages. As the src rpms are available I was able to download these packages to see. One would expect them to be pretty much the same, as after all the software is the same. It is also true that the NEW packages must provide support for Fedora releases so some changes would have been necessary to make that work correctly. Other than that I would not expect many differences.
I downloaded the src rpms from both locations, the original sets of MySQL community rpms has a package named MySQL-5.6.14-1.el6.src.rpm, and the new yum repo version is called mysql-community-5.6.14-3.el6.src.rpm. There’s a minor release difference here but that difference should be easy to see in the spec file.
I installed the src rpm which basically unpacks it ready for building. Given I have setup my rpm directory structure to install the src packages into a directory named after the package it is quite easy to then compare the resulting files contained in the source rpm. The source rpm normally contain the spec file which defines how the package should be built, the original source tarball files and any patches that may need applying to the original source files to build the final binaries.
The results can be seen below with the first listing being from the ORIGINAL src rpm and the second from the NEW src rpm:
$ ls -l MySQL/ total 35244 -rw-r--r-- 1 sjmudd sjmudd 80764 Sep 10 09:43 mysql.5.6.14.spec -rw-r--r-- 1 sjmudd sjmudd 36005278 Sep 10 09:43 mysql-5.6.14.tar.gz $ ls -l mysql-community/ total 81532 -rw-r--r-- 1 sjmudd sjmudd 160 Oct 16 13:11 filter-provides.sh -rw-r--r-- 1 sjmudd sjmudd 159 Oct 16 13:11 filter-requires.sh -rw-r--r-- 1 sjmudd sjmudd 919 Oct 16 13:11 my_config.h -rw-r--r-- 1 sjmudd sjmudd 23994221 Oct 16 13:11 mysql-5.1.70.tar.gz -rw-r--r-- 1 sjmudd sjmudd 8403 Oct 16 13:11 mysql-5.6.14-mysql-install.patch -rw-r--r-- 1 sjmudd sjmudd 59388513 Oct 16 13:11 mysql-5.6.14.tar.gz -rw-r--r-- 1 sjmudd sjmudd 37 Oct 16 13:11 mysql.conf -rw-r--r-- 1 sjmudd sjmudd 607 Oct 16 13:11 mysql_config.sh -rw-r--r-- 1 sjmudd sjmudd 1058 Oct 16 13:11 mysqld.service -rw-r--r-- 1 sjmudd sjmudd 640 Oct 16 13:11 mysql-embedded-check.c -rw-r--r-- 1 sjmudd sjmudd 56865 Oct 16 13:11 mysql.spec -rw-r--r-- 1 sjmudd sjmudd 1422 Oct 16 13:11 mysql-systemd-start $
As you see there are several differences just in the number of files that are being provided. It is nice to see that the NEW package actually contains an older version of mysql (5.1.70) which I’m assuming is used to build the older “shared-compat” libraries. That was missing from the ORIGINAL package and actually meant that it is not completely possible to build the ORIGINAL package binaries only from the src.rpm.
Some of the files in the NEW package are clearly for Fedora’s new systemd, which is the replacement for the traditional init scripts.
I also diff’d the spec files, and there you see several differences. One surprising one is there’s a difference in the licensing: The ORIGINAL rpms have a GPL license specified, whilst the NEW rpms have a GPLv2 license. Oracle never changes things without a reason and I know there have been many discussions on the topic of GPLv2 vs GPLv3 so I wonder why this change exists.
There are quite a lot of other differences in the 2 spec files, some changes seems insignificant but others may not be. I have not had the time to investigate further.
Many of you may remember that we have had bugs related to Oracle releasing multiple tarballs of the same name but having different checksums. Unlike some other package managers, RPM is not good at noticing or recording these differences so they can go unnoticed. I actually filed a feature request to RH to see if this may get fixed. That is their bug#995822. If you think this may be useful please tell RedHat.
That feature request refers to bug#69512 where this issue came up and I noticed it again in bug#69987 in September. Oracle said they would ensure they would not distribute source tar balls with the same name and different contents to avoid the confusion that can result from this. It seems they have already forgotten as I see:
$ md5sum MySQL/mysql-5.6.14.tar.gz 52224ce51dbf6ffbcef82be30688cc04 MySQL/mysql-5.6.14.tar.gz $ md5sum mysql-community/mysql-5.6.14.tar.gz c9d329b5eabf7127d60a1ea2c8e48377 mysql-community/mysql-5.6.14.tar.gz
So yes, it seems they have done this again. I know that they build from a VCS but if they tag something as 5.6.14 it really helps to have a single tar ball that refers to that tagged version. I haven’t bothered to do a diff between the 2 tarballs but can imagine the new tarball is somewhat more up to date than the last one. However, that is really no excuse. So time to file yet another bug report which I have done with bug#70847.
In the end it seems that Oracle is trying to do the right thing and make life easier for us. That is welcome. However, they seem to trip up making that effort. Things need not be this complicated.
I had a quick check of the differences in the 2 tarballs which are hugely different in size:
$ diff -uNr ORIGINAL NEW | diffstat CMakeLists.txt | 2 Docs/ChangeLog | 57 Docs/INFO_SRC | 10 Docs/mysql.info |31803 +++++++----- INSTALL-SOURCE | 40 man/comp_err.1 | 4 man/innochecksum.1 | 4 man/msql2mysql.1 | 4 man/my_print_defaults.1 | 4 man/myisam_ftdump.1 | 4 man/myisamchk.1 | 7 man/myisamlog.1 | 4 man/myisampack.1 | 4 man/mysql-stress-test.pl.1 | 4 man/mysql-test-run.pl.1 | 4 man/mysql.1 | 4 man/mysql.server.1 | 4 man/mysql_client_test.1 | 4 man/mysql_config.1 | 4 man/mysql_config_editor.1 | 4 man/mysql_convert_table_format.1 | 4 man/mysql_find_rows.1 | 4 man/mysql_fix_extensions.1 | 4 man/mysql_install_db.1 | 4 man/mysql_plugin.1 | 4 man/mysql_secure_installation.1 | 6 man/mysql_setpermission.1 | 4 man/mysql_tzinfo_to_sql.1 | 4 man/mysql_upgrade.1 | 32 man/mysql_waitpid.1 | 4 man/mysql_zap.1 | 4 man/mysqlaccess.1 | 4 man/mysqladmin.1 | 4 man/mysqlbinlog.1 | 4 man/mysqlbug.1 | 4 man/mysqlcheck.1 | 4 man/mysqld.8 | 4 man/mysqld_multi.1 | 4 man/mysqld_safe.1 | 6 man/mysqldump.1 | 14 man/mysqldumpslow.1 | 4 man/mysqlhotcopy.1 | 4 man/mysqlimport.1 | 4 man/mysqlshow.1 | 4 man/mysqlslap.1 | 4 man/mysqltest.1 | 4 man/ndb-common-options.1 | 4 man/ndb_blob_tool.1 | 4 man/ndb_config.1 | 6 man/ndb_cpcd.1 | 4 man/ndb_delete_all.1 | 4 man/ndb_desc.1 | 4 man/ndb_drop_index.1 | 6 man/ndb_drop_table.1 | 4 man/ndb_error_reporter.1 | 216 man/ndb_index_stat.1 | 4 man/ndb_mgm.1 | 4 man/ndb_mgmd.8 | 4 man/ndb_print_backup_file.1 | 4 man/ndb_print_schema_file.1 | 4 man/ndb_print_sys_file.1 | 4 man/ndb_restore.1 | 12 man/ndb_select_all.1 | 4 man/ndb_select_count.1 | 4 man/ndb_setup.py.1 | 4 man/ndb_show_tables.1 | 4 man/ndb_size.pl.1 | 4 man/ndb_waiter.1 | 4 man/ndbd.8 | 4 man/ndbd_redo_log_reader.1 | 4 man/ndbinfo_select_all.1 | 4 man/ndbmtd.8 | 6 man/perror.1 | 4 man/replace.1 | 4 man/resolve_stack_dump.1 | 4 man/resolveip.1 | 4 mysql-test/collections/default.release.done | 2 packaging/rpm-fedora/CMakeLists.txt | 36 packaging/rpm-fedora/my.cnf | 31 packaging/rpm-fedora/my_config.h | 30 packaging/rpm-fedora/mysql-5.6-libmysqlclient-symbols.patch | 1038 packaging/rpm-fedora/mysql-5.6.14-mysql-install.patch | 239 packaging/rpm-fedora/mysql-embedded-check.c | 26 packaging/rpm-fedora/mysql-systemd-start | 52 packaging/rpm-fedora/mysql.conf | 1 packaging/rpm-fedora/mysql.spec.in | 1623 packaging/rpm-fedora/mysql_config.sh | 28 packaging/rpm-fedora/mysqld.service | 48 packaging/rpm-oel/CMakeLists.txt | 37 packaging/rpm-oel/filter-provides.sh | 6 packaging/rpm-oel/filter-requires.sh | 6 packaging/rpm-oel/my.cnf | 31 packaging/rpm-oel/my_config.h | 30 packaging/rpm-oel/mysql-5.1.70.tar.gz |binary packaging/rpm-oel/mysql-5.6.14-mysql-install.patch | 239 packaging/rpm-oel/mysql-embedded-check.c | 26 packaging/rpm-oel/mysql-systemd-start | 52 packaging/rpm-oel/mysql.conf | 1 packaging/rpm-oel/mysql.init | 209 packaging/rpm-oel/mysql.spec.in | 1558 packaging/rpm-oel/mysql_config.sh | 28 packaging/rpm-oel/mysqld.service | 48 scripts/fill_help_tables.sql | 18 sql/sql_yacc.cc | 4428 - sql/sql_yacc.h | 4 105 files changed, 27417 insertions(+), 14925 deletions(-)
Despite what looks like a large change set it seems most of the changes are in the documentation (mysql.info and man files) and these seem to be due to the fact that the source files have been regenerated between the tar balls, most of the changes are thus spacing or generated timestamp differences. Also mysql-5.1.70.tar.gz is included in the new mysql-5.6.14.tar ball so really there’s no need for it to be included separately in the mysql-community 5.6.14 src.rpm. That is likely to be an oversight and will no doubt get corrected.
My conclusion is that simply the mysql-community version of the mysql-5.6.14.tar.gz tar ball is simply more up to date than the one provided in the MySQL-5.6.14 src rpm. So perhaps much ado about nothing. That said a few questions remain unanswered so it will be interesting to see how things develop.