{"skill":{"slug":"rpm-packager","displayName":"rpm-packager","summary":"Build installable RPM packages from source code on CentOS/RHEL by creating SPEC files and compiling for versions 7, 8, or 9 RPM-based systems.","description":"---\nname: rpm-packager\ndescription: Build RPM packages from source code for CentOS/RHEL systems. Use when user needs to: (1) package software source into installable RPM, (2) create SPEC files, (3) build packages for CentOS 7/8/9 or RHEL, (4) prepare software for distribution on RPM-based Linux systems.\n---\n\n# RPM Packager Skill\n\nTransform source code into installable RPM packages for CentOS/RHEL systems.\n\n## Quick Start\n\n```bash\n# Basic usage\n./scripts/build-rpm.sh <source-dir> <package-name> <version> <release>\n\n# Example\n./scripts/build-rpm.sh ./myapp myapp 1.0.0 1\n```\n\n## Workflow\n\n### 1. Prepare Source Code\n\nEnsure source code is ready:\n- Has a build system (Makefile, CMakeLists.txt, setup.py, etc.)\n- Clean directory structure\n- No build artifacts\n\n### 2. Check Prerequisites\n\nRequired tools on CentOS/RHEL (**requires sudo privileges**):\n```bash\nsudo yum install rpm-build mock gcc make\n```\n\n> **Note:** Installing system packages requires `sudo` privileges. The build process itself runs as your user account.\n\n### 3. Run Build Script\n\n```bash\ncd ~/.openclaw/workspace/skills/rpm-packager\nchmod +x scripts/build-rpm.sh\n./scripts/build-rpm.sh /path/to/source package-name 1.0.0 1\n```\n\n### 4. Verify Output\n\nBuild produces:\n- Binary RPM: `~/rpmbuild/RPMS/x86_64/package-name-1.0.0-1.el8.x86_64.rpm`\n- Source RPM: `~/rpmbuild/SRPMS/package-name-1.0.0-1.el8.src.rpm`\n\n### 5. Install & Test\n\n```bash\n# Install the RPM\nsudo rpm -ivh ~/rpmbuild/RPMS/x86_64/package-name-1.0.0-1.el8.x86_64.rpm\n\n# Or use yum/dnf for dependency resolution\nsudo yum localinstall ~/rpmbuild/RPMS/x86_64/package-name-1.0.0-1.el8.x86_64.rpm\n\n# Verify installation\nrpm -q package-name\n```\n\n## SPEC File Customization\n\nFor complex packages, customize the SPEC file:\n\n1. **Review template**: See [references/spec-template.md](references/spec-template.md)\n2. **Edit generated SPEC**: Modify `~/rpmbuild/SPECS/package-name.spec`\n3. **Rebuild**: `rpmbuild -ba ~/rpmbuild/SPECS/package-name.spec`\n\n### Common Customizations\n\n**Add dependencies:**\n```spec\nBuildRequires: python3-devel openssl-devel\nRequires: python3 openssl-libs\n```\n\n**Custom install paths:**\n```spec\n%install\nmkdir -p %{buildroot}%{_bindir}\nmkdir -p %{buildroot}%{_sysconfdir}/package-name\ninstall -m 755 myapp %{buildroot}%{_bindir}/\ninstall -m 644 config.conf %{buildroot}%{_sysconfdir}/package-name/\n```\n\n**Include documentation:**\n```spec\n%files\n%doc README.md LICENSE CHANGELOG.md\n%{_bindir}/myapp\n```\n\n## Build for Different CentOS Versions\n\nUse mock for clean builds targeting specific versions:\n\n```bash\n# CentOS 7\nmock -r centos-7-x86_64 package-name.spec\n\n# CentOS 8\nmock -r centos-8-x86_64 package-name.spec\n\n# CentOS 9\nmock -r centos-9-x86_64 package-name.spec\n```\n\n## Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `RPM_BUILDER_NAME` | `OpenClaw Builder` | Builder name in changelog |\n| `RPM_BUILD_DIR` | `~/rpmbuild` | Custom build directory |\n\n## Troubleshooting\n\n### Build fails with \"No such file or directory\"\n- Check `BuildRequires` for missing tools\n- Verify source tarball extracts correctly\n\n### RPM installs but command not found\n- Ensure `%files` section includes correct paths\n- Check executable permissions in `%install`\n\n### Dependency errors during install\n- Add missing `Requires` entries to SPEC file\n- Use `yum localinstall` instead of `rpm -i` for auto-dependency resolution\n\n## Output Locations\n\nAfter successful build:\n- **Binary RPMs**: `~/rpmbuild/RPMS/<arch>/`\n- **Source RPM**: `~/rpmbuild/SRPMS/`\n- **Build logs**: `~/rpmbuild/BUILDLOGS/`\n- **SPEC files**: `~/rpmbuild/SPECS/`\n\n## Security Notes\n\n- Build directory defaults to `~/rpmbuild` to avoid conflicts with system-wide builds\n- Builder identity is anonymized by default (uses `OpenClaw Builder`)\n- No personal information is embedded in generated RPMs unless explicitly configured\n","topics":["Source Code"],"tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":797,"installsAllTime":30,"installsCurrent":1,"stars":0,"versions":1},"createdAt":1772531568432,"updatedAt":1778994789599},"latestVersion":{"version":"1.0.0","createdAt":1772531568432,"changelog":"Initial release of rpm-packager.\n\n- Build RPM packages from source code for CentOS/RHEL systems.\n- Includes automated script for building packages with sample usage.\n- Guides for preparing source, installing prerequisites, and running the build process.\n- Instructions for customizing SPEC files and handling dependencies.\n- Supports builds for CentOS 7/8/9 using mock.\n- Documents output locations, environment variables, and security notes.","license":null},"metadata":null,"owner":{"handle":"yukariccccccc","userId":"s170f5je95fx8ssrthvcvg3zd1885b5x","displayName":"yukariccccccc","image":"https://avatars.githubusercontent.com/u/235014537?v=4"},"moderation":null}