Установка мессенджера MAX в Calculate Linux:
Создание ebuild MAX с актуальной версией:
Добавление нестабильных версий пакета:
#
echo "net-im/max ~amd64" >> /etc/portage/package.accept_keywords/custom
Создание директории ebuild MAX:
#
mkdir -p /var/calculate/repos/custom/net-im/max
Скрипт создает ebuild MAX с сохранением старых версий на 30 дней:
#
tee /usr/local/bin/generate-max-ebuild.sh <<'EOF'
#!/bin/bash
set -e
REPO="/var/calculate/repos/custom/net-im/max"
mkdir -p "$REPO"
# Получаем версию и URL
PKG_INFO=$(curl -sL "https://download.max.ru/linux/deb/dists/stable/main/binary-amd64/Packages" | awk '
/^Package: max$/ { in_max=1 }
in_max && /^Version: / { ver=$2 }
in_max && /^Filename: / { fn=$2; exit }
END { if(ver && fn) print ver "|" fn }
')
if [[ -z "$PKG_INFO" ]]; then
echo "ERROR: Failed to fetch package info"
exit 1
fi
VERSION="${PKG_INFO%|*}"
FILENAME="${PKG_INFO#*|}"
DEB_URL="https://download.max.ru/linux/deb/${FILENAME}"
echo "Latest version: ${VERSION}"
echo "DEB URL: ${DEB_URL}"
# Удаляем только ebuild'ы старше 30 дней (сохраняем последние версии для отката)
echo "Cleaning old ebuilds (older than 30 days)..."
cd "$REPO"
find . -name "max-*.ebuild" -mtime +30 -delete 2>/dev/null || true
# Проверяем, не существует ли уже ebuild с этой версией
if [[ -f "max-${VERSION}.ebuild" ]]; then
echo "Ebuild max-${VERSION} already exists. No update needed."
exit 0
fi
# Создаём новый ebuild
cat > "max-${VERSION}.ebuild" <<EOEBUILD
# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit unpacker xdg desktop
DESCRIPTION="Russian messenger and digital platform"
HOMEPAGE="https://max.ru"
SRC_URI="${DEB_URL} -> max-\${PV}.deb"
LICENSE="MAX-EULA"
SLOT="0"
KEYWORDS="~amd64"
RESTRICT="strip mirror"
DEPEND="
x11-libs/gtk+:3
x11-libs/libnotify
dev-libs/nss
x11-libs/libXtst
app-accessibility/at-spi2-core
app-crypt/libsecret
x11-libs/libXScrnSaver
x11-misc/xdg-utils
sys-apps/util-linux
"
RDEPEND="\${DEPEND}"
BDEPEND=""
QA_PRESTRIPPED="
/opt/max/bin/max
/opt/max/bin/crashpad_handler
/opt/max/lib64/*
/opt/max/lib/*
"
S="\${WORKDIR}"
src_unpack() {
unpack_deb max-\${PV}.deb
}
src_install() {
mkdir -p "\${D}"/opt/max || die "mkdir /opt/max failed"
if [[ -d usr/share/max ]]; then
pushd usr/share/max >/dev/null || die
tar cf - . | (cd "\${D}"/opt/max && tar xf -) || die "tar copy failed"
popd >/dev/null || die
else
die "usr/share/max not found in deb"
fi
fperms +x /opt/max/bin/max
fperms +x /opt/max/bin/crashpad_handler
dosym ../../opt/max/bin/max /usr/bin/max
if [[ -f usr/share/applications/max.desktop ]]; then
sed -e 's|Exec=.*|Exec=/opt/max/bin/max|' \\
-e 's|Icon=.*|Icon=max|' \\
usr/share/applications/max.desktop > "\${T}"/max.desktop || die "sed failed"
domenu "\${T}"/max.desktop
fi
if [[ -d usr/share/icons ]]; then
insinto /usr/share
doins -r usr/share/icons
fi
if [[ -d usr/share/pixmaps ]]; then
insinto /usr/share
doins -r usr/share/pixmaps
fi
}
pkg_postinst() {
xdg_desktop_database_update
xdg_icon_cache_update
}
pkg_postrm() {
xdg_desktop_database_update
xdg_icon_cache_update
}
EOEBUILD
# Пересоздаём Manifest
rm -f Manifest
ebuild "max-${VERSION}.ebuild" manifest
echo ""
echo "=== Done ==="
echo "Created: max-${VERSION}.ebuild"
echo ""
echo "Available versions:"
ls -1 max-*.ebuild 2>/dev/null | sed 's/max-//;s/.ebuild//' | while read v; do
echo " =net-im/max-${v}"
done
echo ""
echo "Install latest: emerge -av =net-im/max-${VERSION}"
echo "Or update: emerge -u net-im/max"
EOF
chmod +x /usr/local/bin/generate-max-ebuild.sh
Создать/обновить ebuild:
#
generate-max-ebuild.sh
Установить последнюю версию:
#
emerge -av net-im/max