File xmrig.spec of Package xmrig

Name:           xmrig
Version:        6.24.0
Release:        1%{?dist}
Summary:        High performance, open source CPU miner for Monero
License:        GPLv3+
URL:            https://github.com/xmrig/xmrig
Source0:        https://github.com/xmrig/xmrig/releases/download/v%{version}/xmrig-%{version}-linux-static-x64.tar.gz
Source1:        README.md
Source2:        LICENSE

BuildArch:      x86_64

BuildRequires:  tar
BuildRequires:  gzip

# Runtime зависимости
Requires:       systemd
Requires(post): shadow

%description
XMRig is a high performance, open source CPU miner for Monero (XMR) and other
cryptonight-based cryptocurrencies. Static binary version for Linux x64.

%prep
%setup -q -n xmrig-%{version}

%build
echo "Using pre-built static binary"

%install
# Создаем директории
install -d -m 0755 %{buildroot}%{_bindir}
install -d -m 0755 %{buildroot}%{_sysconfdir}/xmrig
install -d -m 0755 %{buildroot}%{_datadir}/doc/xmrig
install -d -m 0755 %{buildroot}%{_unitdir}
install -d -m 0755 %{buildroot}%{_sharedstatedir}/xmrig

# Копируем бинарник
install -m 0755 xmrig %{buildroot}%{_bindir}/xmrig

# Копируем конфигурационный файл
if [ -f config.json ]; then
    install -m 0644 config.json %{buildroot}%{_sysconfdir}/xmrig/config.json.example
fi

# Копируем документацию из локальных файлов
install -m 0644 %{SOURCE1} %{buildroot}%{_datadir}/doc/xmrig/
install -m 0644 %{SOURCE2} %{buildroot}%{_datadir}/doc/xmrig/

# Создаем systemd юнит
cat > %{buildroot}%{_unitdir}/xmrig.service << 'EOF'
[Unit]
Description=XMRig CPU Miner
After=network.target
Wants=network-online.target
StartLimitIntervalSec=0

[Service]
Type=simple
User=xmrig
Group=xmrig
ExecStart=/usr/bin/xmrig --config=/etc/xmrig/config.json
Restart=always
RestartSec=10
Nice=10
IOSchedulingClass=idle
CPUSchedulingPolicy=idle
# Security hardening
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/xmrig

[Install]
WantedBy=multi-user.target
EOF

# Создаем конфигурационный файл по умолчанию
cat > %{buildroot}%{_sysconfdir}/xmrig/config.json << 'EOF'
{
    "autosave": true,
    "cpu": {
        "enabled": true,
        "max-threads-hint": 75
    },
    "opencl": false,
    "cuda": false,
    "pools": [
        {
            "coin": "monero",
            "url": "pool.supportxmr.com:443",
            "user": "YOUR_WALLET_ADDRESS",
            "pass": "x",
            "tls": true,
            "keepalive": true,
            "nicehash": false
        }
    ]
}
EOF

chmod 0640 %{buildroot}%{_sysconfdir}/xmrig/config.json

# Устанавливаем правильные владельцев в buildroot (символические ID)
chown 0:0 %{buildroot}%{_sysconfdir}/xmrig/config.json
chown 0:0 %{buildroot}%{_sysconfdir}/xmrig/config.json.example

%pre
getent group xmrig >/dev/null 2>&1 || groupadd -r xmrig
getent passwd xmrig >/dev/null 2>&1 || \
    useradd -r -g xmrig -d /var/lib/xmrig -s /sbin/nologin \
    -c "XMRig Miner" xmrig

%post
# Создаем директорию для данных
mkdir -p /var/lib/xmrig
chown xmrig:xmrig /var/lib/xmrig
chmod 750 /var/lib/xmrig

# Настраиваем права доступа на конфигурационные файлы
if [ -f /etc/xmrig/config.json ]; then
    chown root:xmrig /etc/xmrig/config.json 2>/dev/null || true
    chmod 0640 /etc/xmrig/config.json 2>/dev/null || true
fi

if [ -f /etc/xmrig/config.json.example ]; then
    chown root:xmrig /etc/xmrig/config.json.example 2>/dev/null || true
    chmod 0640 /etc/xmrig/config.json.example 2>/dev/null || true
fi

# Обновляем systemd
systemctl daemon-reload >/dev/null 2>&1 || :

%preun
if [ "$1" = "0" ]; then
    # Удаление пакета
    systemctl stop xmrig.service >/dev/null 2>&1 || :
    systemctl disable xmrig.service >/dev/null 2>&1 || :
fi

%postun
if [ "$1" = "0" ]; then
    # Удаление пакета - очищаем директории
    rm -rf /var/lib/xmrig 2>/dev/null || :
    systemctl daemon-reload >/dev/null 2>&1 || :
fi

%files
%defattr(-,root,root,-)
%{_bindir}/xmrig
%{_unitdir}/xmrig.service
%config(noreplace) %{_sysconfdir}/xmrig/config.json
%config(noreplace) %{_sysconfdir}/xmrig/config.json.example
%doc %{_datadir}/doc/xmrig/*
%dir %{_sysconfdir}/xmrig
%dir %attr(0750, xmrig, xmrig) %{_sharedstatedir}/xmrig

%changelog
* Wed Dec 10 2025 Your Name <your.email@example.com> - 6.24.0-1
- Fixed user/group creation issues in build environment
- Added %defattr for consistent file permissions
- Fixed directory ownership issues
- Moved user creation to %pre section
openSUSE Build Service is sponsored by