[实践OK]rpmbuild的打包技术在install 安装写成多行时的右斜杠后面不能有空格是特别要注意的点~

jack 2026-3-9 16:02 | |
```
# credential example
install -m 600 %{_sourcedir}/mysql_backup/config/ldmgr.cnf \
    %{buildroot}/etc/mysql_backup/.ldmgr.cnf


========================================
正确格式(必须紧贴)
正确写法:
install -m 600 %{_sourcedir}/mysql_backup/config/ldmgr.cnf \
    %{buildroot}/etc/mysql_backup/.ldmgr.cnf
注意:
\ 后 不能有空格 :是指:ql_backup/config/ldmgr.cnf \的\后面不能有空格,有就会报错:/root/rpmbuild/tmp/rpm-tmp.MVnKem: line 65: /root/rpmbuild/BUILDROOT/etc/mysql_backup/.ldmgr.cnf: No such file or directory
下一行必须紧接
```

```
Name:           mysql-backup
Version:        1.0.0
Release:        1%{?dist}
Summary:        MySQL multi-instance backup tool

License:        GPL
URL:            internal
BuildArch:      noarch

Requires:       bash
Requires:       gzip
Requires:       util-linux

%description
MySQL backup tool for multi-project and multi-instance environments.

Features:
- Multiple instance backup
- Credential isolation
- Project based configuration
- Automatic cleanup of old backups
- Cron scheduling
- Log rotation support
- flock based concurrency protection


%prep
# nothing required


%build
# nothing required


%install
rm -rf %{buildroot}

#
# Program directory
#

install -d %{buildroot}/usr/local/mysql_backup

#
# Config directory
#

install -d %{buildroot}/etc/mysql_backup

#
# Runtime directories
#

install -d %{buildroot}/var/lib/mysql_backup
install -d %{buildroot}/var/lock/mysql_backup
install -d %{buildroot}/app/mysql_backup
install -d %{buildroot}/data/logs/mysql_backup

#
# Cron and logrotate directories
#

install -d %{buildroot}/etc/cron.d
install -d %{buildroot}/etc/logrotate.d

#
# Install program
#

install -m 750 %{_sourcedir}/mysql_backup/mysql_backup.sh \
    %{buildroot}/usr/local/mysql_backup/

install -m 640 %{_sourcedir}/mysql_backup/db.cfg \
    %{buildroot}/usr/local/mysql_backup/

#
# Credential template
#

install -m 600 %{_sourcedir}/mysql_backup/config/ldmgr.cnf \
    %{buildroot}/etc/mysql_backup/.ldmgr.cnf

#
# Cron job
#

cat > %{buildroot}/etc/cron.d/mysql_backup << 'EOF'
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""

40 03 * * * mysql_backup /usr/local/mysql_backup/mysql_backup.sh ldmgr 10.75.17.10 3306 >> /data/logs/mysql_backup/backup.log 2>&1
EOF

chmod 644 %{buildroot}/etc/cron.d/mysql_backup

#
# Logrotate
#

cat > %{buildroot}/etc/logrotate.d/mysql_backup << 'EOF'
/data/logs/mysql_backup/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 640 mysql_backup mysql_backup
}
EOF


%pre

#
# Create system group
#

getent group mysql_backup >/dev/null || groupadd -r mysql_backup

#
# Create system user
#

if ! getent passwd mysql_backup >/dev/null; then
    useradd -r \
        -g mysql_backup \
        -d /var/lib/mysql_backup \
        -s /sbin/nologin \
        -c "MySQL Backup Service" \
        mysql_backup
fi


%post

#
# Ensure runtime directories exist
#

mkdir -p /var/lib/mysql_backup
mkdir -p /var/lock/mysql_backup
mkdir -p /app/mysql_backup
mkdir -p /data/logs/mysql_backup

#
# Ownership
#

chown mysql_backup:mysql_backup /var/lib/mysql_backup
chown mysql_backup:mysql_backup /var/lock/mysql_backup
chown mysql_backup:mysql_backup /app/mysql_backup
chown mysql_backup:mysql_backup /data/logs/mysql_backup

#
# Permissions
#

chmod 750 /var/lock/mysql_backup
chmod 750 /app/mysql_backup
chmod 750 /data/logs/mysql_backup

#
# SELinux compatibility
#

if command -v restorecon >/dev/null 2>&1; then
    restorecon -R \
        /var/lib/mysql_backup \
        /var/lock/mysql_backup \
        /app/mysql_backup \
        /data/logs/mysql_backup \
        2>/dev/null || true
fi

echo "mysql-backup installed successfully."


%preun
# nothing required


%files
%defattr(-,root,root,-)

#
# parent directories
#

%dir /app
%dir /data
%dir /data/logs

#
# runtime directories
#

%dir %attr(0750,mysql_backup,mysql_backup) /var/lib/mysql_backup
%dir %attr(0750,mysql_backup,mysql_backup) /var/lock/mysql_backup
%dir %attr(0750,mysql_backup,mysql_backup) /app/mysql_backup
%dir %attr(0750,mysql_backup,mysql_backup) /data/logs/mysql_backup

#
# program
#

%dir %attr(0750,root,root) /usr/local/mysql_backup
/usr/local/mysql_backup/mysql_backup.sh
%config(noreplace) /usr/local/mysql_backup/db.cfg

#
# configuration
#

%dir %attr(0750,root,mysql_backup) /etc/mysql_backup
%config(noreplace) /etc/mysql_backup/.ldmgr.cnf

#
# cron
#

%config(noreplace) /etc/cron.d/mysql_backup

#
# logrotate
#

%config(noreplace) /etc/logrotate.d/mysql_backup


%changelog

* Mon Mar 09 2026 DevOps Team
- Enterprise initial release
- Multi-instance MySQL backup support
- Cron scheduling
- Logrotate integration
- flock lock protection
```

作者:jack@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/13290/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jack 编辑于2026-3-9 16:06
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]