From 8570bfa9cd30521c86e27984f34a3a81456a9c25 Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Wed, 10 Dec 2014 14:26:40 +0000
Subject: mysql: update to 5.6.21

---
 abs/core/mysql/PKGBUILD                 | 160 ++++++++++++++++++++------------
 abs/core/mysql/__changelog              |   5 +-
 abs/core/mysql/my.cnf                   |  24 ++---
 abs/core/mysql/mysql-srv_buf_size.patch |  20 ++++
 abs/core/mysql/mysql.install            |  19 +++-
 abs/core/mysql/mysqld-post.sh           |   3 +-
 abs/core/mysql/mysqld.rc                |  77 ---------------
 abs/core/mysql/mysqld.service           |   9 +-
 8 files changed, 159 insertions(+), 158 deletions(-)
 mode change 100755 => 100644 abs/core/mysql/PKGBUILD
 create mode 100644 abs/core/mysql/mysql-srv_buf_size.patch
 delete mode 100755 abs/core/mysql/mysqld.rc

diff --git a/abs/core/mysql/PKGBUILD b/abs/core/mysql/PKGBUILD
old mode 100755
new mode 100644
index 17850bd..b65aa04
--- a/abs/core/mysql/PKGBUILD
+++ b/abs/core/mysql/PKGBUILD
@@ -1,27 +1,39 @@
-# $Id: PKGBUILD 167246 2012-09-29 09:32:53Z andrea $
-# Maintainer: Andrea Scarpino <andrea@archlinux.org>
+# Maintainer: Muflone http://www.muflone.com/contacts/english/
+# Contributor: Rustam Tsurik <rustam.tsurik@gmail.com>
+# Contributor: Andrea Scarpino <andrea@archlinux.org>
 # Contributor: Douglas Soares de Andrade <douglas@archlinux.org>
 
+pkgname=('mysql' 'libmysqlclient' 'mysql-clients')
 pkgbase=mysql
-pkgname=('libmysqlclient' 'mysql-clients' 'mysql')
-pkgver=5.5.28
-pkgrel=2
+pkgver=5.6.21
+pkgrel=1
+pkgdesc="Fast SQL database server, community edition"
 arch=('i686' 'x86_64')
+makedepends=('openssl' 'zlib' 'cmake' 'systemd-tools' 'libaio' 'jemalloc')
 license=('GPL')
 url="https://www.mysql.com/products/community/"
-makedepends=('cmake' 'openssl' 'zlib')
 options=('!libtool')
-source=("http://ftp.gwdg.de/pub/misc/mysql/Downloads/MySQL-5.5/${pkgbase}-${pkgver}.tar.gz"
-        'mysqld.rc' 'my.cnf' 'mysqld-post.sh' 'mysqld-tmpfile.conf' 'mysqld.service')
+source=("https://dev.mysql.com/get/Downloads/MySQL-5.6/${pkgbase}-${pkgver}.tar.gz"
+        "mysqld-post.sh"
+        "mysqld-tmpfile.conf"
+        "mysqld.service"
+        "my.cnf"
+        "mysql-srv_buf_size.patch")
+
+prepare() {
+  cd "${pkgbase}-${pkgver}"
+  patch -p0 -i "../mysql-srv_buf_size.patch"
+}
 
 build() {
+  rm -rf build
   mkdir build
   cd build
 
-  # CFLAGS/CXXFLAGS as suggested upstream
-
-  cmake ../${pkgbase}-${pkgver} \
-    -DCMAKE_BUILD_TYPE=Release \
+  cmake "../${pkgbase}-${pkgver}" \
+    -DCMAKE_AR=/usr/bin/gcc-ar \
+    -DCMAKE_RANLIB=/usr/bin/gcc-ranlib \
+    -DBUILD_CONFIG=mysql_release \
     -DCMAKE_INSTALL_PREFIX=/usr \
     -DSYSCONFDIR=/etc/mysql \
     -DMYSQL_DATADIR=/var/lib/mysql \
@@ -39,95 +51,125 @@ build() {
     -DINSTALL_MYSQLSHAREDIR=share/mysql \
     -DINSTALL_DOCDIR=share/mysql/docs \
     -DINSTALL_SHAREDIR=share/mysql \
-    -DWITH_READLINE=ON \
     -DWITH_ZLIB=system \
     -DWITH_SSL=system \
     -DWITH_LIBWRAP=OFF \
-    -DWITH_MYSQLD_LDFLAGS="${LDFLAGS}" \
+    -DCMAKE_EXE_LINKER_FLAGS='-ljemalloc' \
     -DWITH_EXTRA_CHARSETS=complex \
     -DWITH_EMBEDDED_SERVER=ON \
-    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
-    -DWITH_PARTITION_STORAGE_ENGINE=1 \
-    -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-    -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \
-    -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 \
-    -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
-    -DCMAKE_C_FLAGS="-fPIC ${CFLAGS} -fno-strict-aliasing -DBIG_JOINS=1 -fomit-frame-pointer" \
-    -DCMAKE_CXX_FLAGS="-fPIC ${CXXFLAGS} -fno-strict-aliasing -DBIG_JOINS=1 -felide-constructors -fno-rtti"
-
+    -DWITH_ARCHIVE_STORAGE_ENGINE=ON \
+    -DWITH_BLACKHOLE_STORAGE_ENGINE=ON \
+    -DWITH_INNOBASE_STORAGE_ENGINE=ON \
+    -DWITH_PARTITION_STORAGE_ENGINE=ON \
+    -DWITHOUT_EXAMPLE_STORAGE_ENGINE=ON \
+    -DWITHOUT_FEDERATED_STORAGE_ENGINE=ON \
+    -DCMAKE_C_FLAGS="-fPIC ${CFLAGS} -fno-strict-aliasing -DBIG_JOINS=1 -fomit-frame-pointer -fno-delete-null-pointer-checks" \
+    -DCMAKE_CXX_FLAGS="-fPIC ${CXXFLAGS} -fno-strict-aliasing -DBIG_JOINS=1 -felide-constructors -fno-rtti -fno-delete-null-pointer-checks" \
+    -DWITH_MYSQLD_LDFLAGS="-pie ${LDFLAGS},-z,now"
   make
 }
 
 package_libmysqlclient(){
   pkgdesc="MySQL client libraries"
   depends=('openssl')
+  conflicts=('libmariadbclient')
+  provides=("libmariadbclient=${pkgver}")
 
   cd build
-  for dir in include libmysql libmysqld libservices; do
-    make -C ${dir} DESTDIR="${pkgdir}" install
+  for dir in include libmysql libmysqld libservices
+  do
+    make -C "${dir}" DESTDIR="${pkgdir}" install
   done
 
-  install -d "${pkgdir}"/usr/bin
-  install -m755 scripts/mysql_config "${pkgdir}"/usr/bin/
-  install -d "${pkgdir}"/usr/share/man/man1
-  for man in mysql_config mysql_client_test_embedded mysqltest_embedded; do
-    install -m644 "${srcdir}"/${pkgbase}-${pkgver}/man/$man.1 "${pkgdir}"/usr/share/man/man1/$man.1
+  install -m 755 -d "${pkgdir}/usr/bin"
+  install -m 755 scripts/mysql_config "${pkgdir}/usr/bin/"
+  install -m 755 -d "${pkgdir}/usr/share/man/man1"
+  for man in mysql_config mysql_client_test_embedded mysqltest_embedded
+  do
+    install -m 644 "${srcdir}/${pkgbase}-${pkgver}/man/${man}.1" \
+      "${pkgdir}/usr/share/man/man1/${man}.1"
   done
 }
 
 package_mysql-clients(){
   pkgdesc="MySQL client tools"
-  depends=('libmysqlclient')
+  depends=('libmysqlclient' 'jemalloc')
+  conflicts=('mariadb-clients')
+  provides=("mariadb-clients=${pkgver}")
 
   cd build
-  make -C client DESTDIR="${pkgdir}" install
+  make -C "client" DESTDIR="${pkgdir}" install
 
   # install man pages
-  install -d "${pkgdir}"/usr/share/man/man1
-  for man in mysql mysqladmin mysqlcheck mysqldump mysqlimport mysqlshow mysqlslap; do
-    install -m644 "${srcdir}"/${pkgbase}-${pkgver}/man/$man.1 "${pkgdir}"/usr/share/man/man1/$man.1
+  install -d "${pkgdir}/usr/share/man/man1"
+  for man in mysql mysqladmin mysqlcheck mysqldump mysqlimport mysqlshow mysqlslap
+  do
+    install -m644 "${srcdir}/${pkgbase}-${pkgver}/man/${man}.1" \
+      "${pkgdir}/usr/share/man/man1/${man}.1"
   done
 
   # provided by mysql
-  rm "${pkgdir}"/usr/bin/{mysql_{plugin,upgrade},mysqlbinlog,mysqltest}
+  rm "${pkgdir}/usr/bin/mysql_plugin"
+  rm "${pkgdir}/usr/bin/mysql_upgrade"
+  rm "${pkgdir}/usr/bin/mysql_config_editor"
+  rm "${pkgdir}/usr/bin/mysqlbinlog"
+  rm "${pkgdir}/usr/bin/mysqltest"
 }
 
 package_mysql(){
-  pkgdesc="A fast SQL database server"
+  pkgdesc="Fast SQL database server, community edition"
   backup=('etc/mysql/my.cnf')
-  install=mysql.install
-  depends=('mysql-clients' 'systemd-tools')
+  install="${pkgbase}.install"
+  depends=('mysql-clients' 'libaio')
+  conflicts=('mariadb')
+  provides=("mariadb=${pkgver}")
   options=('emptydirs')
 
   cd build
   make DESTDIR="${pkgdir}" install
 
-  install -Dm644 "${srcdir}"/my.cnf "${pkgdir}"/etc/mysql/my.cnf
-  install -Dm755 "${srcdir}"/mysqld.rc "${pkgdir}"/etc/rc.d/mysqld
-  install -Dm755 "${srcdir}"/mysqld-post.sh "${pkgdir}"/usr/bin/mysqld-post
-  install -Dm644 "${srcdir}"/mysqld-tmpfile.conf "${pkgdir}"/usr/lib/tmpfiles.d/mysqld.conf
-  install -d "${pkgdir}"/usr/lib/systemd/system
-  install -Dm644 "${srcdir}"/mysqld.service "${pkgdir}"/usr/lib/systemd/system/
+  install -m 644 -D "${srcdir}/my.cnf" "${pkgdir}/etc/mysql/my.cnf"
+  install -m 755 -D "${srcdir}/mysqld-post.sh" "${pkgdir}/usr/bin/mysqld-post"
+  install -m 644 -D "${srcdir}/mysqld-tmpfile.conf" "${pkgdir}/usr/lib/tmpfiles.d/mysqld.conf"
+  install -m 755 -d "${pkgdir}/usr/lib/systemd/system"
+  install -m 644 -D "${srcdir}/mysqld.service" "${pkgdir}/usr/lib/systemd/system/"
 
   # provided by libmysqlclient
-  rm "${pkgdir}"/usr/bin/{mysql_config,mysql_client_test_embedded,mysqltest_embedded}
+  rm "${pkgdir}/usr/bin/mysql_config"
+  rm "${pkgdir}/usr/bin/mysql_client_test_embedded"
+  rm "${pkgdir}/usr/bin/mysqltest_embedded"
   rm "${pkgdir}"/usr/lib/libmysql*
-  rm -r "${pkgdir}"/usr/include/
-  rm "${pkgdir}"/usr/share/man/man1/{mysql_config,mysql_client_test_embedded,mysqltest_embedded}.1
+  rm -r "${pkgdir}/usr/include/"
+  rm "${pkgdir}/usr/share/man/man1/mysql_config.1"
+  rm "${pkgdir}/usr/share/man/man1/mysql_client_test_embedded.1"
+  rm "${pkgdir}/usr/share/man/man1/mysqltest_embedded.1"
 
   # provided by mysql-clients
-  rm "${pkgdir}"/usr/bin/{mysql,mysqladmin,mysqlcheck,mysqldump,mysqlimport,mysqlshow,mysqlslap}
-  rm "${pkgdir}"/usr/share/man/man1/{mysql,mysqladmin,mysqlcheck,mysqldump,mysqlimport,mysqlshow,mysqlslap}.1
+  rm "${pkgdir}/usr/bin/mysql"
+  rm "${pkgdir}/usr/bin/mysqladmin"
+  rm "${pkgdir}/usr/bin/mysqlcheck"
+  rm "${pkgdir}/usr/bin/mysqldump"
+  rm "${pkgdir}/usr/bin/mysqlimport"
+  rm "${pkgdir}/usr/bin/mysqlshow"
+  rm "${pkgdir}/usr/bin/mysqlslap"
+  rm "${pkgdir}/usr/share/man/man1/mysql.1"
+  rm "${pkgdir}/usr/share/man/man1/mysqladmin.1"
+  rm "${pkgdir}/usr/share/man/man1/mysqlcheck.1"
+  rm "${pkgdir}/usr/share/man/man1/mysqldump.1"
+  rm "${pkgdir}/usr/share/man/man1/mysqlimport.1"
+  rm "${pkgdir}/usr/share/man/man1/mysqlshow.1"
+  rm "${pkgdir}/usr/share/man/man1/mysqlslap.1"
 
   # not needed
-  rm -r "${pkgdir}"/usr/{data,mysql-test,sql-bench}
-  rm "${pkgdir}"/usr/share/man/man1/mysql-test-run.pl.1
-
-  install -dm700 "${pkgdir}"/var/lib/mysql
+  rm -r "${pkgdir}/usr/data"
+  rm -r "${pkgdir}/usr/mysql-test"
+  rm -r "${pkgdir}/usr/sql-bench"
+  rm "${pkgdir}/usr/share/man/man1/mysql-test-run.pl.1"
 }
-md5sums=('da8ddb3d00e6e159153d2444360f52a8'
-         'e7eb2faeab755cbb2fe03542bf328da9'
-         'e0f0c53cb6e3cead8896fa1f0c902789'
-         '6ea6ceb360d09a774e87335ee098ddd5'
+
+md5sums=('e47c3a70b8d89db3199a349204b2ae4e'
+         'b79e65a5aa536e6b5bc60988eb0b78a2'
          '2fa6e456964d4ff5e6d4f9ff0126aed6'
-         'a0e1460c276a50a9666c331de83271f2')
+         '81b62df0f569935109c1b107dfe9f9fa'
+         '162238ee0665e68b37136f3e046123a1'
+         'f2b34ac2954bb56c4abf08c66a7f840e')
diff --git a/abs/core/mysql/__changelog b/abs/core/mysql/__changelog
index ec41d21..a0e903b 100644
--- a/abs/core/mysql/__changelog
+++ b/abs/core/mysql/__changelog
@@ -1,2 +1,3 @@
-data dir  /data/srv/mysql
-removed binary logging
+PKGBUILD: copy my.cnf to /etc/mysql/
+my.cnf: data dir  /data/srv/mysql
+my.cnf: removed binary logging
diff --git a/abs/core/mysql/my.cnf b/abs/core/mysql/my.cnf
index 6d24cfa..f0b87da 100755
--- a/abs/core/mysql/my.cnf
+++ b/abs/core/mysql/my.cnf
@@ -1,8 +1,7 @@
-# MySQL config file for medium systems.
+# Example MySQL config file for very large systems.
 #
-# This is for a system with little memory (32M - 64M) where MySQL plays
-# an important part, or systems up to 128M where MySQL is used together with
-# other programs (such as a web server)
+# This is for a large system with memory of 1G-2G where the system runs mainly
+# MySQL.
 #
 # MySQL programs look for option files in a set of
 # locations which depend on the deployment platform.
@@ -27,20 +26,21 @@ socket		= /var/run/mysqld/mysqld.sock
 port		= 3306
 socket		= /var/run/mysqld/mysqld.sock
 datadir		= /data/srv/mysql
+
 skip-external-locking
 
 net_buffer_length = 8K
-key_buffer_size = 80M
+key_buffer_size = 384M
 max_allowed_packet = 1M
 table_open_cache = 256
-tmp_table_size = 16M
-max_heap_table_size = 16M
-sort_buffer_size = 1M
-read_buffer_size = 1M
+tmp_table_size = 32M
+max_heap_table_size = 32M
+sort_buffer_size = 2M
+read_buffer_size = 2M
 read_rnd_buffer_size = 4M
 myisam_sort_buffer_size = 64M
 thread_cache_size = 8
-query_cache_size = 16M
+query_cache_size = 32M
 join_buffer_size = 128K
 
 
@@ -143,8 +143,8 @@ no-auto-rehash
 #safe-updates
 
 [myisamchk]
-key_buffer_size = 20M
-sort_buffer_size = 20M
+key_buffer_size = 256M
+sort_buffer_size = 256M
 read_buffer = 2M
 write_buffer = 2M
 
diff --git a/abs/core/mysql/mysql-srv_buf_size.patch b/abs/core/mysql/mysql-srv_buf_size.patch
new file mode 100644
index 0000000..12212fc
--- /dev/null
+++ b/abs/core/mysql/mysql-srv_buf_size.patch
@@ -0,0 +1,20 @@
+--- storage/innobase/row/row0log.cc.orig	2013-07-10 16:17:27.000000000 +0000
++++ storage/innobase/row/row0log.cc	2013-08-21 12:48:22.216656556 +0000
+@@ -2364,7 +2364,7 @@ all_done:
+ 		and be ignored when the operation is unsupported. */
+ 		fallocate(index->online_log->fd,
+ 			  FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
+-			  ofs, srv_buf_size);
++			  ofs, srv_sort_buf_size);
+ #endif /* FALLOC_FL_PUNCH_HOLE */
+ 
+ 		next_mrec = index->online_log->head.block;
+@@ -3153,7 +3153,7 @@ all_done:
+ 		and be ignored when the operation is unsupported. */
+ 		fallocate(index->online_log->fd,
+ 			  FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
+-			  ofs, srv_buf_size);
++			  ofs, srv_sort_buf_size);
+ #endif /* FALLOC_FL_PUNCH_HOLE */
+ 
+ 		next_mrec = index->online_log->head.block;
diff --git a/abs/core/mysql/mysql.install b/abs/core/mysql/mysql.install
index a98f1a8..f420406 100644
--- a/abs/core/mysql/mysql.install
+++ b/abs/core/mysql/mysql.install
@@ -1,17 +1,26 @@
+if [[ $(command -v my_print_defaults >/dev/null 2>&1) ]]; then
+  datadir=$(my_print_defaults mysqld | sed -n "s/^--datadir=//p")
+fi
+[[ -z $datadir ]] && datadir=/var/lib/mysql 
+
 post_install(){
   groupadd -g 89 mysql &>/dev/null
-  useradd -u 89 -g mysql -d /var/lib/mysql -s /bin/false mysql &>/dev/null
-  usr/bin/mysql_install_db --user=mysql --basedir=/usr
-  chown -R mysql:mysql var/lib/mysql &>/dev/null
+  useradd -u 89 -g mysql -d $datadir -s /bin/false mysql &>/dev/null
+
+  if [[ ! -e $datadir ]]; then
+    install -dm700 $datadir
+    usr/bin/mysql_install_db --user=mysql --basedir=/usr --datadir=$datadir
+    chown -R mysql:mysql var/lib/mysql &>/dev/null
+  fi
 
   usr/bin/systemd-tmpfiles --create mysqld.conf
 }
 
 post_upgrade(){
   getent group mysql >/dev/null 2>&1 || groupadd -g 89 mysql &>/dev/null
-  getent passwd mysql >/dev/null 2>&1 || useradd -u 89 -g mysql -d /var/lib/mysql -s /bin/false mysql &>/dev/null
+  getent passwd mysql >/dev/null 2>&1 || useradd -u 89 -g mysql -d $datadir -s /bin/false mysql &>/dev/null
 
-  if [ "$(vercmp $2 5.5)" -lt 0 ]; then
+  if [ "$(vercmp $2 5.6)" -lt 0 ]; then
     echo " >> "
     echo " >> Major version update. Consider restart the service, and then running mysql_upgrade after it."
     echo " >> "
diff --git a/abs/core/mysql/mysqld-post.sh b/abs/core/mysql/mysqld-post.sh
index 8dc9c4e..c4ac181 100755
--- a/abs/core/mysql/mysqld-post.sh
+++ b/abs/core/mysql/mysqld-post.sh
@@ -1,7 +1,8 @@
 #!/bin/sh
 
 while true; do
-    response=`/usr/bin/mysqladmin -uUNKNOWN_USER ping 2>&1` && break
+    response=$(/usr/bin/mysqladmin -uUNKNOWN_USER ping 2>&1) && break
     echo "$response" | grep -q "mysqld is alive" && break
+    echo "$response" | grep -q "Access denied for user" && break 
     sleep 1
 done
diff --git a/abs/core/mysql/mysqld.rc b/abs/core/mysql/mysqld.rc
deleted file mode 100755
index 4bbddb5..0000000
--- a/abs/core/mysql/mysqld.rc
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/bash
-
-# general config
-. /etc/rc.conf
-. /etc/rc.d/functions
-
-getPID() {
-   echo $(pgrep -u mysql mysqld 2>/dev/null);
-}
-
-case "$1" in
-  start)
-    stat_busy "Starting MySQL Server"
-    [ ! -d /run/mysqld ] && install -d -g mysql -o mysql /run/mysqld &>/dev/null
-    if [ -z "$(getPID)" ]; then
-       /usr/bin/mysqld_safe --user=mysql &>/dev/null &
-      if [ $? -gt 0 ]; then
-        stat_fail
-        exit 1
-      else
-        timeo=30
-        while [ $timeo -gt 0 ]; do
-          response=`/usr/bin/mysqladmin -uUNKNOWN_USER ping 2>&1` && break
-          echo "$response" | grep -q "mysqld is alive" && break
-          sleep 1
-          let timeo=${timeo}-1
-        done
-        if [ $timeo -eq 0 ]; then
-          stat_fail
-          exit 1
-        else
-          echo $(getPID) > /run/mysqld/mysqld.pid
-          add_daemon mysqld
-          stat_done
-        fi
-      fi
-    else
-      stat_fail
-      exit 1
-    fi
-    ;;
-
-  stop)
-    stat_busy "Stopping MySQL Server"
-    if [ ! -z "$(getPID)" ]; then
-      timeo=30
-      kill $(getPID) &> /dev/null
-      if [ $? -gt 0 ]; then
-        stat_fail
-        exit 1
-      fi
-      while [ ! -z "$(getPID)" -a $timeo -gt 0 ]; do
-        sleep 1
-        let timeo=${timeo}-1
-      done
-      if [ -z "$(getPID)" ]; then
-        rm -f /run/mysqld/mysqld.pid &>/dev/null
-        rm_daemon mysqld
-        stat_done
-      else
-        stat_fail
-        exit 1
-      fi
-    else
-      stat_fail
-      exit 1
-    fi
-    ;;
-
-  restart)
-    $0 stop
-    $0 start
-    ;;
-  *)
-    echo "usage: $0 {start|stop|restart}"
-esac
-exit 0
diff --git a/abs/core/mysql/mysqld.service b/abs/core/mysql/mysqld.service
index 0175c68..a6fc8cf 100644
--- a/abs/core/mysql/mysqld.service
+++ b/abs/core/mysql/mysqld.service
@@ -1,11 +1,16 @@
 [Unit]
-Description=MySQL Server
+Description=MySQL database server
+After=syslog.target
 
 [Service]
 User=mysql
-ExecStart=/usr/bin/mysqld --user=mysql
+Group=mysql
+
+ExecStart=/usr/bin/mysqld --pid-file=/run/mysqld/mysqld.pid 
 ExecStartPost=/usr/bin/mysqld-post
+
 Restart=always
+PrivateTmp=true
 
 [Install]
 WantedBy=multi-user.target
-- 
cgit v0.12