diff --git a/vk-messenger/.stapler/update-check b/vk-messenger/.stapler/update-check new file mode 100755 index 0000000..efb050a --- /dev/null +++ b/vk-messenger/.stapler/update-check @@ -0,0 +1,6 @@ +#!/bin/bash +set -euo pipefail + +package_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "${package_dir}/.." && pwd)" +exec "${repo_root}/tools/package_updates.sh" check "$(basename "$package_dir")" diff --git a/vk-messenger/LICENSE b/vk-messenger/LICENSE new file mode 100644 index 0000000..3f88d47 --- /dev/null +++ b/vk-messenger/LICENSE @@ -0,0 +1,19 @@ +Сведения о лицензии пакета vk-messenger + +Лицензия: Custom (проприетарная). +Исходный продукт: https://vk.me/app +Официальный deb/rpm-артефакт: https://vk.me/app (объектное хранилище VK) + +Нюансы пакета: +- Пакет перепаковывает официальный Linux-артефакт VK Messenger, распространяемый + напрямую с vk.me — отдельного публичного репозитория или GitHub-релиза + у продукта нет, поэтому используется прямая ссылка на объектное хранилище VK. +- Приложение собрано на Electron/Chromium; лицензии этих компонентов + устанавливаются рядом с остальными лицензиями пакета. +- Для полноценной работы требуется учетная запись VK ID. +- Использование мессенджера, учетной записи и сетевых функций регулируется + условиями VK. +- Пакет помечен как несвободный через `nonfree=1`. + +Официальные условия: +https://vk.com/terms diff --git a/vk-messenger/Staplerfile b/vk-messenger/Staplerfile new file mode 100644 index 0000000..5039f33 --- /dev/null +++ b/vk-messenger/Staplerfile @@ -0,0 +1,102 @@ +name='vk-messenger' +version='6.0.57' +release=1 +summary='VK Messenger client' +summary_ru='Официальный клиент VK Messenger' +group='Networking/Instant messaging' +desc='VK Messenger is the official VK instant messaging client, distributed as an Electron desktop application directly from vk.me.' +desc_ru='VK Messenger — официальный клиент мессенджера VK, распространяемый в виде Electron-приложения напрямую с vk.me.' +homepage='https://vk.me/app' +maintainer='VK Support ' + +architectures=('amd64') + +license=('Custom') +nonfree=1 +nonfree_msg='VK Messenger является проприетарным приложением VK. Использование мессенджера, учетной записи VK ID и сетевых функций регулируется условиями VK.' +nonfree_url='https://vk.com/terms' + +provides=() +replaces=('vk-messenger') +conflicts=() + +auto_reqprov_method="dirty" +auto_req=0 +auto_prov=0 + +deps=() +deps_debian=('libc6' 'libglib2.0-0t64 | libglib2.0-0' 'libgtk-3-0t64 | libgtk-3-0' 'libnotify4' 'libnss3' 'libxss1' 'libxtst6' 'xdg-utils' 'libatspi2.0-0' 'libuuid1' 'libsecret-1-0' 'libasound2t64 | libasound2 | pulseaudio' 'libgbm1' 'libdrm2' 'pulseaudio | pulseaudio-utils | pipewire-pulse') +deps_ubuntu=("${deps_debian[@]}") +deps_fedora=('glibc' 'glib2' 'gtk3' 'libnotify' 'nss' 'libXScrnSaver' 'libXtst' 'xdg-utils' 'at-spi2-core' 'libuuid' 'libsecret' 'alsa-lib' 'mesa-libgbm' 'libdrm' 'pulseaudio-utils') +deps_arch=('glibc' 'glib2' 'gtk3' 'libnotify' 'nss' 'libxss' 'libxtst' 'xdg-utils' 'at-spi2-core' 'libutil-linux' 'libsecret' 'alsa-lib' 'libgbm' 'libdrm' 'libpulse') +deps_opensuse=('glibc' 'libglib-2_0-0' 'gtk3' 'libnotify4' 'mozilla-nss' 'libXss1' 'libXtst6' 'xdg-utils' 'at-spi2-core' 'libuuid1' 'libsecret-1-0' 'libasound2' 'libgbm1' 'libdrm2' 'pulseaudio-utils') +deps_altlinux=('glibc' 'glib2' 'libgtk+3' 'libnotify' 'libnss' 'libXScrnSaver' 'libXtst' 'xdg-utils' 'libat-spi2-core' 'libuuid' 'libsecret' 'libalsa' 'libgbm' 'libdrm' 'pulseaudio-utils') + +opt_deps=() +opt_deps_debian=('libayatana-appindicator3-1 | libappindicator3-1') +opt_deps_ubuntu=("${opt_deps_debian[@]}") +opt_deps_fedora=('libappindicator-gtk3') +opt_deps_arch=('libappindicator-gtk3') +opt_deps_opensuse=('libappindicator3-1') +opt_deps_altlinux=('libappindicator-gtk3') + +build_deps=('binutils') + +sources=( + "https://upload.object2.vk-apps.com/vk-me-desktop-dev-5837a06d-5f28-484a-ac22-045903cb1b1a/latest/vk-messenger.deb?~archive=false&~name=vk-messenger.deb" + 'local:///LICENSE' +) + +checksums=( + 'sha256:cb4fa7a8fb3c6af5c432696e4653751393c9c5c655b6bf0e2d944ff7483ec784' + 'sha256:ab672f11775fc2a579a2001bef3c8b75d78159a67e004dd55339befe98f9e232' +) + +scripts=( + ['postinstall']='postinstall.sh' + ['postremove']='postremove.sh' +) + +package() { + cd "${srcdir}" + + mkdir -p "${srcdir}/extracted" + ar x vk-messenger.deb + tar -xf data.tar.* -C "${srcdir}/extracted" + + # Upstream's own installer uses the literal (Cyrillic, spaced) product name + # as the /opt directory, not a clean slug — find it rather than hardcode it. + opt_src="$(find "${srcdir}/extracted/opt" -mindepth 1 -maxdepth 1 -type d | head -1)" + [[ -n "$opt_src" ]] || { echo "не найден каталог /opt/* внутри vk-messenger.deb" >&2; exit 1; } + + install -dm755 "${pkgdir}/opt/vk-messenger" + cp -a "${opt_src}/." "${pkgdir}/opt/vk-messenger/" + chmod 0755 "${pkgdir}/opt/vk-messenger/chrome-sandbox" + + install -dm755 "${pkgdir}/usr/bin" + ln -sfn /opt/vk-messenger/vk-messenger "${pkgdir}/usr/bin/vk-messenger" + + install -Dm644 "${srcdir}/extracted/usr/share/applications/vk-messenger.desktop" \ + "${pkgdir}/usr/share/applications/vk-messenger.desktop" + + for icon in "${srcdir}"/extracted/usr/share/icons/hicolor/*/apps/vk-messenger.*; do + size="$(basename "$(dirname "$(dirname "$icon")")")" + install -Dm644 "$icon" \ + "${pkgdir}/usr/share/icons/hicolor/${size}/apps/$(basename "$icon")" + done + + install-license "${srcdir}/LICENSE" "vk-messenger/LICENSE.nivora" + install -Dm644 "${opt_src}/LICENSE.electron.txt" \ + "${pkgdir}/usr/share/licenses/vk-messenger/LICENSE.electron.txt" + install -Dm644 "${opt_src}/LICENSES.chromium.html" \ + "${pkgdir}/usr/share/licenses/vk-messenger/LICENSES.chromium.html" +} + +files() { + files-find-binary + files-find-desktop + files-find-license + files-find \ + "/opt/vk-messenger/**/*" \ + "/usr/share/icons/hicolor/*/apps/vk-messenger.*" +} diff --git a/vk-messenger/postinstall.sh b/vk-messenger/postinstall.sh new file mode 100755 index 0000000..0d13ce1 --- /dev/null +++ b/vk-messenger/postinstall.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +set -euo pipefail + +optional_refresh() { + local label=$1 + shift + if ! "$@"; then + echo "Предупреждение: не удалось обновить ${label}." >&2 + fi +} + +sandbox=/opt/vk-messenger/chrome-sandbox +if [[ ! -f "$sandbox" ]]; then + echo "Ошибка: не найден Electron sandbox: ${sandbox}" >&2 + exit 1 +fi +if [[ -L /proc/self/ns/user ]] && command -v unshare >/dev/null 2>&1 \ + && unshare --user true 2>/dev/null; then + chmod 0755 "$sandbox" +else + chmod 4755 "$sandbox" +fi + +if command -v update-desktop-database >/dev/null 2>&1; then + optional_refresh "desktop-базу" update-desktop-database -q /usr/share/applications +fi + +if command -v gtk-update-icon-cache >/dev/null 2>&1; then + optional_refresh "кэш иконок" gtk-update-icon-cache -f -q /usr/share/icons/hicolor +fi + +if command -v kbuildsycoca6 >/dev/null 2>&1; then + optional_refresh "кэш KDE" kbuildsycoca6 --noincremental +elif command -v kbuildsycoca5 >/dev/null 2>&1; then + optional_refresh "кэш KDE" kbuildsycoca5 --noincremental +fi diff --git a/vk-messenger/postremove.sh b/vk-messenger/postremove.sh new file mode 100755 index 0000000..8d4bf97 --- /dev/null +++ b/vk-messenger/postremove.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -euo pipefail + +optional_refresh() { + local label=$1 + shift + if ! "$@"; then + echo "Предупреждение: не удалось обновить ${label}." >&2 + fi +} + +if command -v update-desktop-database >/dev/null 2>&1; then + optional_refresh "desktop-базу" update-desktop-database -q /usr/share/applications +fi + +if command -v gtk-update-icon-cache >/dev/null 2>&1; then + optional_refresh "кэш иконок" gtk-update-icon-cache -f -q /usr/share/icons/hicolor +fi + +if command -v kbuildsycoca6 >/dev/null 2>&1; then + optional_refresh "кэш KDE" kbuildsycoca6 --noincremental +elif command -v kbuildsycoca5 >/dev/null 2>&1; then + optional_refresh "кэш KDE" kbuildsycoca5 --noincremental +fi diff --git a/vk-messenger/stapler-repo.toml b/vk-messenger/stapler-repo.toml new file mode 100644 index 0000000..9c222ce --- /dev/null +++ b/vk-messenger/stapler-repo.toml @@ -0,0 +1 @@ +include = "../stapler-repo.toml"