Files
tms-mysql-pkg/PKGBUILD
2025-12-15 05:14:00 +08:00

156 lines
6.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Maintainer: Your Name <your.email@example.com>
pkgname=tms-mysql
pkgver=5.6.47
pkgrel=3
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'
'2b33f02157e15a6ab622b9c1a67f84ff1dbb5a70dd170e38f9a62b89e356ec65')
# 配置备份,如果用户修改了这些文件,升级时会生成 .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."
}