feat: create autonomous Nivora package repository

Maintain a validated cross-distribution package catalog.
Automate upstream updates, isolated builds, diagnostics, and direct publication.
Build the official GitHub Desktop sources for Linux with working OAuth.
This commit is contained in:
Александр
2026-07-25 00:49:32 +10:00
commit f405ae2bcf
168 changed files with 8483 additions and 0 deletions
+6
View File
@@ -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")"
+15
View File
@@ -0,0 +1,15 @@
Сведения о лицензии пакета Tailscale
Лицензия: BSD-3-Clause.
Исходный проект: https://github.com/tailscale/tailscale
Официальный сайт: https://tailscale.com
Нюансы пакета:
- Пакет перепаковывает официальный Linux tar.gz-архив Tailscale.
- Устанавливаются `tailscale`, `tailscaled`, systemd-сервис и стандартные файлы запуска.
- Код клиента Tailscale распространяется под BSD-3-Clause.
- Подключение к control plane Tailscale, учетные записи, ACL и коммерческие функции регулируются условиями сервиса Tailscale.
- При распространении измененных версий нужно сохранять уведомление об авторских правах и условия BSD-3-Clause.
Полный официальный текст BSD-3-Clause:
https://opensource.org/license/bsd-3-clause
+84
View File
@@ -0,0 +1,84 @@
name='tailscale'
version='1.98.9'
release=3
summary='Mesh VPN built on WireGuard'
summary_ru='Mesh VPN на базе WireGuard'
group='Networking/Other'
desc='Tailscale is a secure mesh VPN built on WireGuard and identity-based access that connects devices and services across networks.'
desc_ru='Tailscale — безопасный mesh VPN на базе WireGuard и identity-based access для соединения устройств и сервисов между сетями.'
homepage='https://tailscale.com'
maintainer='Tailscale Inc <info@tailscale.com>'
architectures=('amd64' 'arm64')
license=('BSD-3-Clause')
provides=()
replaces=('tailscale')
conflicts=()
backup=('/etc/default/tailscaled')
auto_reqprov_method="dirty"
auto_req=0
auto_prov=0
deps=()
deps_debian=('iptables' 'iproute2' 'ca-certificates')
deps_ubuntu=("${deps_debian[@]}")
deps_fedora=('iptables' 'iproute' 'ca-certificates')
deps_arch=('iptables' 'iproute2' 'ca-certificates')
deps_opensuse=('iptables' 'iproute2' 'ca-certificates')
deps_altlinux=('iptables' 'iproute2' 'ca-certificates')
sources=(
"https://pkgs.tailscale.com/stable/tailscale_${version}_amd64.tgz?~archive=false&~name=tailscale.tgz"
"local:///tailscale-purge-data"
'local:///LICENSE'
)
sources_arm64=(
"https://pkgs.tailscale.com/stable/tailscale_${version}_arm64.tgz?~archive=false&~name=tailscale.tgz"
"local:///tailscale-purge-data"
'local:///LICENSE'
)
checksums=(
'11be30ad301d48f84ff52fec34f8a2f78eb3e3dee1be4e9624d19fccc8df5540'
'fc0e166481e2f97c21dca773ad4bfe673842268935ce1628c14b96af98e70555'
'3c7a7d6d7f09890d5e682901acaeb12bda9542fc6450a709c9dc296a91e726a5'
)
checksums_arm64=(
'fa554ee808d7d07ee8e3ebbc0215ea087157e2a0abbf408e6e18ea7532554db6'
'fc0e166481e2f97c21dca773ad4bfe673842268935ce1628c14b96af98e70555'
'3c7a7d6d7f09890d5e682901acaeb12bda9542fc6450a709c9dc296a91e726a5'
)
scripts=(
['postinstall']='postinstall.sh'
['postremove']='postremove.sh'
)
package() {
cd "${srcdir}"
tar -xzf tailscale.tgz
src="$(find "${srcdir}" -maxdepth 1 -type d -name "tailscale_${version}_*" | head -1)"
install-binary "${src}/tailscale"
install-binary "${srcdir}/tailscale-purge-data"
install -Dm755 "${src}/tailscaled" "${pkgdir}/usr/sbin/tailscaled"
install-systemd "${src}/systemd/tailscaled.service"
install-config "${src}/systemd/tailscaled.defaults" "default/tailscaled"
install-license "${srcdir}/LICENSE" "tailscale/LICENSE.nivora"
}
files() {
files-find-binary
files-find-systemd
files-find-license
files-find \
"/usr/sbin/tailscaled" \
"/etc/default/tailscaled"
}
+26
View File
@@ -0,0 +1,26 @@
#!/bin/bash
set -euo pipefail
if command -v systemctl >/dev/null 2>&1 && [[ -d /run/systemd/system ]]; then
systemctl daemon-reload
systemctl enable --now tailscaled.service
fi
REAL_USER="${SUDO_USER:-}"
if [[ -z "$REAL_USER" ]] && [[ -n "${PKEXEC_UID:-}" ]]; then
REAL_USER=$(id -nu "$PKEXEC_UID")
fi
if [[ -z "$REAL_USER" ]] && command -v logname &>/dev/null; then
REAL_USER=$(logname 2>/dev/null) || REAL_USER=""
fi
if [[ -n "$REAL_USER" ]] && [[ "$REAL_USER" != "root" ]] && id "$REAL_USER" &>/dev/null && command -v tailscale &>/dev/null; then
for _ in 1 2 3 4 5; do
tailscale status --json &>/dev/null && break
sleep 1
done
if ! tailscale set --operator="$REAL_USER"; then
echo "Предупреждение: не удалось назначить Tailscale operator для $REAL_USER." >&2
fi
fi
+17
View File
@@ -0,0 +1,17 @@
#!/bin/bash
set -euo pipefail
unit=/usr/lib/systemd/system/tailscaled.service
# В postremove unit отсутствует только после полного удаления. При обновлении
# новая версия уже вернула его на место, независимо от формата пакета.
if [[ ! -e "$unit" ]] && command -v systemctl >/dev/null 2>&1 && [[ -d /run/systemd/system ]]; then
if systemctl is-active --quiet tailscaled.service; then
systemctl stop tailscaled.service
fi
if systemctl is-enabled --quiet tailscaled.service; then
systemctl disable tailscaled.service
fi
systemctl daemon-reload
fi
+1
View File
@@ -0,0 +1 @@
[inherit]
+34
View File
@@ -0,0 +1,34 @@
#!/bin/bash
set -euo pipefail
if [[ "${1:-}" != "--yes" || "$#" -ne 1 ]]; then
echo "Использование: sudo tailscale-purge-data --yes" >&2
echo "Команда выйдет из сети Tailscale и безвозвратно удалит локальное состояние." >&2
exit 2
fi
if [[ "${EUID}" -ne 0 ]]; then
echo "Ошибка: очистку данных Tailscale нужно запускать от root." >&2
exit 1
fi
if command -v tailscale >/dev/null 2>&1; then
if ! tailscale logout; then
echo "Предупреждение: Tailscale не подтвердил logout; локальные данные всё равно будут удалены." >&2
fi
fi
if command -v systemctl >/dev/null 2>&1 && [[ -d /run/systemd/system ]]; then
systemctl stop tailscaled.service
fi
rm -rf -- \
/var/lib/tailscale \
/var/cache/tailscale \
/var/run/tailscale \
/run/tailscale \
/etc/tailscale
rm -f -- /var/log/tailscaled.log /var/log/tailscale.log
echo "Локальные данные Tailscale удалены."