File rosagram-docker.spec of Package rosagram-docker

%global debug_package %{nil}
%define program rosagram
%define type docker
%define build_timestamp %(date +"%Y%m%d")

Name:       %{program}-%{type}
Version:    6.6.2
Release:    111.1
Summary:    Rosagram (Telegram fork) Docker builder for KDE Plasma 6
License:    GPL-3.0
Group:      Productivity/Networking/Instant Messenger
URL:        https://telegram.org/

# Source0 - SRPM источник
Source0:    rosagram-6.6.2-1.1.src.rpm
Source1:    %{name}.desktop
Source2:    rosagram-build.sh
Source3:    Dockerfile.rosagram
Source4:    rosagram-wrapper.sh
Source5:    rosagram.png

BuildArch:  x86_64
BuildRoot:  %{_tmppath}/%{name}-%{version}-build

# BuildRequires
BuildRequires: rpm-build
BuildRequires: desktop-file-utils
BuildRequires: cpio
BuildRequires: file

# Зависимости

Requires:   docker
Requires:   docker-compose
Requires:   bash
Requires:   unzip
Requires:   tar
Requires:   xz
Requires:   desktop-file-utils
Requires:   hicolor-icon-theme
Requires:   libX11-devel
Requires:   libxcb-devel
Requires:   libXtst-devel 
Requires:   libXi-devel 
Requires:   libXrandr-devel 
Requires:   libXfixes-devel
Requires:   libXcursor-devel 
Requires:   libXinerama-devel
Requires:   fontconfig
Requires:   freetype2-devel
Requires:   glib2-devel 
Requires:   gtk3
Requires:   libdbus-1-3
Requires:   wayland-devel
Requires:   pulseaudio-utils
Requires:   plasma6-workspace
Requires:   plasma6-integration-plugin
Requires:   kf6-kio
Requires:   kf6-kded
Requires:   libnotify
Requires:   dbus-1

%description
Rosagram - форк Telegram Desktop для KDE Plasma 6.
Собирается в Docker контейнере, работает от обычного пользователя.

%prep
# Распаковываем SRPM
%setup -q -c -T
rpm2cpio %{SOURCE0} | cpio -idmv 2>/dev/null || true

%build
# Пусто - сборка при первом запуске

%install
# Создаем структуру директорий
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_datadir}/applications
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/128x128/apps
mkdir -p %{buildroot}%{_sysconfdir}/%{name}
mkdir -p %{buildroot}%{_sharedstatedir}/%{name}
mkdir -p %{buildroot}%{_sharedstatedir}/%{name}/source
mkdir -p %{buildroot}%{_sharedstatedir}/%{name}/src
mkdir -p %{buildroot}%{_localstatedir}/log/%{name}
mkdir -p %{buildroot}/opt
mkdir -p %{buildroot}%{_docdir}/%{name}

# Копируем SRPM
install -m 0644 %{SOURCE0} %{buildroot}%{_sharedstatedir}/%{name}/source/

# Копируем исходники
if [ -d "%{_builddir}/%{name}-%{version}" ]; then
    cp -r %{_builddir}/%{name}-%{version}/* %{buildroot}%{_sharedstatedir}/%{name}/src/ 2>/dev/null || true
fi

# Копируем скрипт сборки
install -m 0755 %{SOURCE2} %{buildroot}%{_bindir}/rosagram-build

# Копируем Dockerfile
install -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/%{name}/Dockerfile.rosagram

# Копируем wrapper
cat > %{buildroot}%{_bindir}/rosagram << 'EOF'
#!/bin/bash
ROSAGRAM_DIR="/opt/rosagram"
LOG_DIR="/var/log/rosagram-docker"
LOG_FILE="$LOG_DIR/rosagram.log"

if [ "$EUID" -eq 0 ]; then
    echo "❌ Не запускайте Rosagram от root!"
    echo "Запустите как обычный пользователь: rosagram"
    exit 1
fi

if [ ! -d "$LOG_DIR" ]; then
    sudo mkdir -p "$LOG_DIR" 2>/dev/null || mkdir -p "$LOG_DIR"
fi

log() {
    echo "[$(date '+%%Y-%%m-%%d %%H:%%M:%%S')] $1"
}

if [ ! -f "$ROSAGRAM_DIR/Telegram/Telegram" ] && [ ! -f "$ROSAGRAM_DIR/rosagram" ]; then
    log "Первый запуск. Запускаю сборку..."
    /usr/bin/rosagram-build
fi

if [ -f "$ROSAGRAM_DIR/rosagram" ]; then
    BIN="$ROSAGRAM_DIR/rosagram"
elif [ -f "$ROSAGRAM_DIR/Telegram/Telegram" ]; then
    BIN="$ROSAGRAM_DIR/Telegram/Telegram"
else
    log "❌ Бинарник не найден!"
    exit 1
fi

chmod 755 "$BIN" 2>/dev/null || sudo chmod 755 "$BIN"
export QT_QPA_PLATFORM="wayland;xcb"
export XDG_CURRENT_DESKTOP="KDE"
exec "$BIN" "$@"
EOF
chmod 0755 %{buildroot}%{_bindir}/rosagram

# Копируем desktop файл
install -m 0644 %{SOURCE1} %{buildroot}%{_datadir}/applications/rosagram-docker.desktop

# Копируем иконку
install -m 0644 %{SOURCE5} %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/rosagram-docker.png

# Симлинк
ln -sf %{_bindir}/rosagram %{buildroot}%{_bindir}/rosagram-docker

# README
cat > %{buildroot}%{_docdir}/%{name}/README << 'EOF'
ROSAGRAM DOCKER
===============
Версия: 6.6.2-111.1

УСТАНОВКА:
  sudo rpm -ivh rosagram-docker-6.6.2-111.1.x86_64.rpm

ЗАПУСК:
  rosagram   # от обычного пользователя!
EOF

# Файл состояния
echo "not_installed" > %{buildroot}%{_sharedstatedir}/%{name}/status

%post
# Обновление кэшей
update-desktop-database &>/dev/null || :
gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
kbuildsycoca6 --noincremental &>/dev/null || :

# Права на директории
chmod 755 /opt/rosagram 2>/dev/null || true
chmod 755 /var/log/rosagram-docker 2>/dev/null || true
chmod 755 /var/lib/rosagram-docker 2>/dev/null || true

# Лог-файл
touch /var/log/rosagram-docker/rosagram.log 2>/dev/null || true
chmod 666 /var/log/rosagram-docker/rosagram.log 2>/dev/null || true

echo ""
echo "==========================================================="
echo " Rosagram Docker установлен!"
echo "==========================================================="
echo "Запуск: rosagram"

%preun
if [ $1 -eq 0 ]; then
    pkill -f rosagram 2>/dev/null || true
fi

%postun
update-desktop-database &>/dev/null || :
gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :

%files
%defattr(-,root,root)
%{_bindir}/rosagram
%{_bindir}/rosagram-docker
%{_bindir}/rosagram-build
%{_datadir}/applications/rosagram-docker.desktop

# Иконки
%dir %{_datadir}/icons/
%dir %{_datadir}/icons/hicolor/
%dir %{_datadir}/icons/hicolor/128x128/
%dir %{_datadir}/icons/hicolor/128x128/apps/
%{_datadir}/icons/hicolor/128x128/apps/rosagram-docker.png

# Конфиги
%dir %{_sysconfdir}/%{name}
%config(noreplace) %{_sysconfdir}/%{name}/Dockerfile.rosagram

# Данные
%dir %{_sharedstatedir}/%{name}
%dir %{_sharedstatedir}/%{name}/source
%{_sharedstatedir}/%{name}/source/rosagram-6.6.2-1.1.src.rpm
%dir %{_sharedstatedir}/%{name}/src
%{_sharedstatedir}/%{name}/src/
%{_sharedstatedir}/%{name}/status

# Логи
%dir %{_localstatedir}/log/%{name}
%ghost %{_localstatedir}/log/%{name}/rosagram.log
%ghost %{_localstatedir}/log/%{name}/build.log

# Документация
%dir %{_docdir}/%{name}
%doc %{_docdir}/%{name}/README

%changelog
* Tue Mar 17 2026 Alex S.Shubin <renard.corp@hotmail.com> 6.6.2-111.1
- ФИНАЛЬНАЯ ВЕРСИЯ: исправлены все макросы в скриптах
- Экранированы символы % в wrapper'е
- Fixed permissions for running as a regular user
- Added check for running as root
openSUSE Build Service is sponsored by