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