#!/bin/bash # Telegram Desktop update script for Porteus # Version: 2026-10-17 # # Copyright 2023-2030, Blaze, Dankov, Russia # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. export LC_ALL=C set -euo pipefail PRGNAM=${PRGNAM:-telegram} SRCDIR=Telegram BUILD=${BUILD:-1} OUTPUT=${OUTPUT:-/tmp} TMPDIR=/tmp/portch PKG="$TMPDIR/package-$PRGNAM" PKGINFO="$PKG/var/lib/pkgtools/packages" ARCH=$(uname -m) BOLD=$'\033[1m' CYAN=$'\033[96m' GREEN=$'\033[92m' YELLOW=$'\033[93m' RED=$'\033[91m' RESET=$'\033[0m' cleanup() { rm -rf "$TMPDIR" 2>/dev/null || true; } trap cleanup EXIT INT TERM HUP if [ "$(id -u)" -ne 0 ]; then printf "\n${RED}Root required.${RESET}\n" exit 1 fi printf "\nFetching latest release info...\n" VERSION=$( wget -qO- "https://api.github.com/repos/telegramdesktop/tdesktop/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/' || true ) if [ -z "$VERSION" ]; then printf "${RED}Failed to determine version.${RESET}\n" exit 1 fi SOURCE="https://github.com/telegramdesktop/tdesktop/releases/download/v${VERSION}/td-setup-linux-x64-${VERSION}.tar.xz" TICON="https://slackbuilds.org/slackbuilds/15.0/network/telegram/telegram.png" MYVER="" if [ -f "/opt/telegram/Telegram" ]; then PKG_FILE=$(ls /var/lib/pkgtools/packages/${PRGNAM}-* 2>/dev/null | head -n 1 || true) if [ -n "$PKG_FILE" ]; then MYVER=$(basename "$PKG_FILE" | cut -d'-' -f2) fi fi if [ -n "$MYVER" ]; then printf "[${GREEN}OK${RESET}] Installed version: ${YELLOW}%s${RESET}\n" "${MYVER}" if [ "$MYVER" = "$VERSION" ]; then printf "Already latest: ${GREEN}%s${RESET}\n" "$VERSION" exit 0 fi else printf "[${CYAN}INFO${RESET}] Telegram is not installed.\n" fi printf "Current: ${YELLOW}%s${RESET} | Available: ${GREEN}%s${RESET}\n" "${MYVER:-None}" "$VERSION" printf "Build ${PRGNAM} ${GREEN}${VERSION}${RESET} xzm module? [y/N]: " IFS= read -r -n 1 -s reply || true printf "\n" if [[ ! ${reply:-} =~ ^[Yy]$ ]]; then printf "Cancelled.\n" exit 0 fi rm -rf "$TMPDIR" mkdir -p "$PKG/usr/bin" "$PKG/opt/$PRGNAM" "$PKG/usr/share/applications" "$PKG/usr/share/pixmaps" cd "$TMPDIR" || exit 1 printf "\nDownloading ${CYAN}${BOLD}td-setup-linux-x64-%s.tar.xz${RESET}\n" "$VERSION" if ! wget -q --show-progress "$SOURCE" -O "tsetup-${VERSION}.tar.xz"; then printf "${RED}Download failed.${RESET}\n" exit 1 fi printf "\nExtracting archive...\n" if ! tar xf "tsetup-${VERSION}.tar.xz"; then printf "${RED}Extraction failed.${RESET}\n" exit 1 fi if [ ! -d "$SRCDIR" ]; then printf "${RED}Directory %s not found after extraction. Archive format may have changed.${RESET}\n" "$SRCDIR" exit 1 fi cd "$SRCDIR" || exit 1 chown -R root:root . find -L . \ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; cp -a * "$PKG/opt/$PRGNAM/" find "$PKG" -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true ln -sf /opt/$PRGNAM/Telegram "$PKG/usr/bin/" cat > "$PKG/usr/share/applications/$PRGNAM.desktop" << EOM [Desktop Entry] Name=Telegram GenericName=Internet Comment=Telegram Desktop Chat Client Comment[ru]=Telegram чат клиент для ПК Icon=telegram Exec=Telegram -- %u TryExec=Telegram Terminal=false Type=Application Categories=Network; EOM printf "\nDownloading icon...\n" wget -q -P "$PKG/usr/share/pixmaps" "$TICON" cd "$PKG" || exit 1 printf "\n${CYAN}Writing package metadata...${RESET}\n" mkdir -p "$PKGINFO" { printf "PACKAGE NAME: %s-%s-%s\n" "$PRGNAM" "$VERSION" "$ARCH" printf "PACKAGE DESCRIPTION:\n" printf "telegram: Telegram Desktop messaging app.\n" printf "telegram: Cloud-based mobile and desktop messaging app with a focus on security and speed.\n" printf "telegram: https://telegram.org/\n" printf "FILE LIST:\n" find . | grep -v '^\./var' | sed 's|^\./||' | sort } > "$PKGINFO/${PRGNAM}-${VERSION}-${ARCH}" printf "\n${CYAN}Building XZM module...${RESET}\n" MODULE="$OUTPUT/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.xzm" if ! dir2xzm "$PKG" "$MODULE"; then printf "\n${RED}[FAIL] Module build failed.${RESET}\n" exit 1 fi if [ -f "$MODULE" ]; then SIZE=$(du -h "$MODULE" | cut -f1) printf "\n${GREEN}[OK] Module created:${RESET} ${BOLD}%s${RESET}\n" "$MODULE" printf "${BOLD}Size:${RESET} ${CYAN}%s${RESET}\n" "$SIZE" printf "${BOLD}Copy it to /porteus/modules to survive reboot.${RESET}\n\n" else printf "\n${RED}[FAIL] Module was not created.${RESET}\n" exit 1 fi