# Maintainer: Your Name pkgname=tms-mysql pkgver=5.6.47 pkgrel=2 pkgdesc="MySQL 5.6.47 Database Server for SmartTMS Application (pre-compiled binary)" arch=('x86_64') url="https://www.mysql.com/" license=('GPLv2') # Arch Linux 通常不直接使用 group 字段,但可以作为 pkgdesc 的补充 # group="Applications/Databases" # options=('!strip') # Source0 是 MySQL 预编译二进制包 # Source1 是自定义的 my.cnf 配置文件 # Source2 是 systemd 服务单元文件 # Source3 是 SmartTMS 应用程序的初始数据库 SQL 文件 (保留,可以作为参考或手动导入) # Source4 是预初始化好的 MySQL 数据目录压缩包 source=( "mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz" "my.cnf" "mysqld.service" "tms_db_s3.sql" "mysql.zip" # 添加预初始化数据压缩包 ) # 构建依赖 # systemd 是运行时依赖,tar/gzip 是 pacman 自动处理的 makedepends=('systemd' 'unzip') # 添加 unzip 用于解压 mysql.zip # 运行时依赖 # shadow-utils 提供 useradd/groupadd # libaio 是 MySQL 常见的运行时依赖 # perl-data-dumper 是 mysql_install_db 脚本的依赖 (如果不再使用 mysql_install_db,此依赖可以移除) depends=( 'systemd' 'libaio' 'perl-data-dumper' # 保留,以防万一或作为通用依赖 ) # 安装脚本,用于处理用户/组、数据目录、服务启用和数据库初始化 install="${pkgname}.install" # 校验和,请使用 makepkg -g 生成 # makepkg -g >> PKGBUILD sha256sums=('be2fa4fffc74dff626cfa8d62f16d9eef93bcd81bc8133ae500e04460e1fb795' 'a664d5b110640f877bd994e3218a0ae4531a0493f0a3869eea8973928f06e0cd' '92cc61a5db1e791e463a030955566c1a6eb308f1cd3ff921f6d7bd1e4cdd48ff' 'b9e6e58cbc4809a2dd3432d36272ba71e0fc63af4a48288b24f30968c830e0c9' '12db700d9c47df4bba4e9262a1eccfb6fe6eadd6bd320effa205f6c723574436') # 配置备份,如果用户修改了这些文件,升级时会生成 .pacnew 文件 backup=( 'etc/my.cnf' 'etc/profile.d/mysql.sh' 'etc/systemd/system/mysqld.service' # 虽然是服务文件,但如果用户修改了,也可以备份 ) prepare() { # makepkg 自动解压 tar.gz 文件到 $srcdir/mysql-5.6.47-linux-glibc2.12-x86_64/ # 解压 mysql.zip 到 $srcdir 下的一个临时目录 local _preinit_data_extract_dir="${srcdir}/mysql_preinit_data_extracted" mkdir -p "$_preinit_data_extract_dir" echo "Extracting mysql.zip to $_preinit_data_extract_dir..." if ! unzip -q "${srcdir}/mysql.zip" -d "$_preinit_data_extract_dir"; then error "Failed to extract mysql.zip. Ensure 'unzip' is installed and the file is valid." exit 1 fi # 切换到 MySQL 二进制包的解压目录 cd "${srcdir}/mysql-5.6.47-linux-glibc2.12-x86_64" } build() { # 对于预编译二进制包,通常不需要编译步骤。 msg "No build step required for pre-compiled binaries." } package() { set -x # 启用调试输出 local _mysql_install_dir="/usr/local/mysql" local _mysql_data_dir="/data/mysql" # 这是最终安装到系统上的数据目录 local _mysql_user="mysql" # 仅作参考,实际用户创建在 .install 脚本中 local _mysql_group="mysql" # 仅作参考 local _mysql_root_password="PythA90ra5" # 仅作参考,因为数据目录已预设密码 local _mysql_sql_file="${srcdir}/tms_db_s3.sql" # SQL 文件在 $srcdir local _mysql_service_name="mysqld.service" # 从 tar.gz 解压出来的 MySQL 二进制目录 local _mysql_extracted_bin_dir="${srcdir}/mysql-5.6.47-linux-glibc2.12-x86_64" # 最终安装到 pkgdir 中的带版本号的目录名 local _mysql_base_dir="/usr/local/${_mysql_extracted_bin_dir##*/}" # 1. 创建安装路径 install -d "${pkgdir}/usr/local" install -d "${pkgdir}/etc/systemd/system" # systemd 服务文件通常放在这里 install -d "${pkgdir}/etc/profile.d" install -d "${pkgdir}/usr/share/${pkgname}" # 用于存放 SQL 导入文件 (tms_db_s3.sql) # 2. 复制 MySQL 二进制文件到 /usr/local/ echo "Copying MySQL binaries to $pkgdir$_mysql_base_dir..." cp -a "${_mysql_extracted_bin_dir}/." "${pkgdir}$_mysql_base_dir" # 3. 创建 /usr/local/mysql 软链接 echo "Creating symlink $pkgdir$_mysql_install_dir..." ln -s "${_mysql_base_dir##*/}" "${pkgdir}$_mysql_install_dir" # 4. 复制配置文件 echo "Installing my.cnf to $pkgdir/etc/my.cnf..." install -m644 "${srcdir}/my.cnf" "${pkgdir}/etc/my.cnf" # 5. 复制 systemd 服务文件 echo "Installing systemd service file to $pkgdir/etc/systemd/system/$_mysql_service_name..." install -m644 "${srcdir}/mysqld.service" "${pkgdir}/etc/systemd/system/$_mysql_service_name" # 6. 创建 PATH 环境变量配置脚本 echo "Creating PATH configuration script $pkgdir/etc/profile.d/mysql.sh..." echo 'PATH=/usr/local/mysql/bin:$PATH' > "${pkgdir}/etc/profile.d/mysql.sh" chmod 0644 "${pkgdir}/etc/profile.d/mysql.sh" # 7. 复制初始 SQL 导入文件 (仅用于参考或手动导入,因为数据已预初始化) echo "Copying initial SQL import file to $pkgdir/usr/share/${pkgname}/tms_db_s3.sql..." install -m644 "${srcdir}/tms_db_s3.sql" "${pkgdir}/usr/share/${pkgname}/tms_db_s3.sql" # --- 使用预初始化数据目录 --- # 8. 创建最终的 MySQL 数据目录 echo "Creating final MySQL data directory: $pkgdir$_mysql_data_dir..." install -d -m750 "$pkgdir$_mysql_data_dir" # 9. 将预初始化数据从解压目录移动到最终数据目录 local _preinit_data_src="${srcdir}/mysql_preinit_data_extracted" echo "Moving pre-initialized MySQL data from $_preinit_data_src to $pkgdir$_mysql_data_dir..." # 处理 zip 文件可能包含一个顶层目录的情况 local _contents=("$_preinit_data_src"/*) if [ "${#_contents[@]}" -eq 1 ] && [ -d "${_contents[0]}" ]; then mv "${_contents[0]}"/* "$pkgdir$_mysql_data_dir/" || { error "Failed to move contents from single top-level directory."; exit 1; } else mv "$_preinit_data_src"/* "$pkgdir$_mysql_data_dir/" || { error "Failed to move extracted data."; exit 1; } fi # 设置所有权 (在 fakeroot 环境中,所有文件都由 root 拥有。 # 最终的 chown 权限设置会在 .install 脚本的 pre_install 中完成。) chown -R root:root "$pkgdir$_mysql_data_dir" # 暂时设置为 root,实际会在 post_install 中被 mysql 用户拥有 # 10. 清理临时文件 echo "Cleaning up temporary setup files..." rm -rf "$_preinit_data_src" # 删除解压后的临时目录 echo "SmartTMS MySQL package creation complete with pre-initialized database from mysql.zip." }