commit 17ca291dac7ec48ce8266b3726d1fdcc513e99f7 from: Alejandro Bernal Estrada date: Thu May 21 20:41:10 2026 UTC fix: corregir binutils, detección .deb y orden nftables commit - fb87d3c1aa3ed23158a3842443bdd594b71bff4c commit + 17ca291dac7ec48ce8266b3726d1fdcc513e99f7 blob - 66d62ee2b269048753d06a067f6f21688d4fbb04 blob + a466f61684c3bbf7e1b4ae76bd8d30e819eab059 --- richard/packages/mullvad.scm +++ richard/packages/mullvad.scm @@ -6,9 +6,8 @@ ;; ;; Para actualizar a una versión nueva: ;; 1. Cambia 'version' al nuevo tag (ej. "2026.2") -;; 2. Descarga el .deb y obtén el hash: -;; wget https://github.com/mullvad/mullvadvpn-app/releases/download/VERSION/MullvadVPN-VERSION_amd64.deb -;; sha256sum MullvadVPN-VERSION_amd64.deb | python3 ~/nix32.py $(cut -d' ' -f1) +;; 2. Obtén el hash nuevo: +;; guix download https://github.com/mullvad/mullvadvpn-app/releases/download/VERSION/MullvadVPN-VERSION_amd64.deb ;; 3. Reemplaza el (base32 "...") con el resultado (define-module (richard packages mullvad) @@ -17,10 +16,9 @@ #:use-module (guix build-system trivial) #:use-module (guix gexp) #:use-module ((guix licenses) #:prefix license:) - #:use-module (gnu packages base) ; glibc, tar + #:use-module (gnu packages base) ; glibc, tar, binutils #:use-module (gnu packages compression) ; xz #:use-module (gnu packages elf) ; patchelf - #:use-module (gnu packages commencement) ; binutils-final (ar) #:export (mullvad-vpn)) (define-public mullvad-vpn @@ -42,7 +40,7 @@ (build-system trivial-build-system) (native-inputs - (list tar xz patchelf binutils-final)) + (list tar xz patchelf binutils)) (inputs (list glibc)) @@ -59,20 +57,25 @@ (define lib-dir (string-append out "/lib/mullvad-vpn")) (define bin-dir (string-append out "/bin")) - ;; ── 1. Extraer data.tar.xz del .deb ───────────────────── + ;; ── 1. Extraer data.tar.* del .deb ────────────────────── ;; Un .deb es un archivo ar que contiene: - ;; control.tar.xz — metadatos del paquete - ;; data.tar.xz — los archivos reales + ;; control.tar.* — metadatos del paquete + ;; data.tar.* — los archivos reales (xz o zst) (mkdir-p tmp) (with-directory-excursion tmp - (invoke (string-append #$binutils-final "/bin/ar") + (invoke (string-append #$binutils "/bin/ar") "x" #$source) - ;; Extraer sin --strip-components: Mullvad instala en - ;; ./opt/Mullvad VPN/ (con espacio), no en /usr/ - (invoke (string-append #$tar "/bin/tar") - "xf" "data.tar.xz" - "--use-compress-program" - (string-append #$xz "/bin/xz"))) + ;; Detectar formato de compresión del data tarball + (let ((data-tar + (cond + ((file-exists? "data.tar.xz") "data.tar.xz") + ((file-exists? "data.tar.zst") "data.tar.zst") + ((file-exists? "data.tar.gz") "data.tar.gz") + (else (error "No se encontró data.tar.* en el .deb"))))) + ;; Extraer sin --strip-components: Mullvad instala en + ;; ./opt/Mullvad VPN/ (con espacio), no en /usr/ + (invoke (string-append #$tar "/bin/tar") + "xf" data-tar))) ;; ── 2. Copiar el bundle al store ────────────────────────── ;; Usamos copy-recursively para manejar el espacio en el path @@ -94,9 +97,13 @@ "--set-interpreter" interp "--set-rpath" lib-dir bin)))) - ;; Binarios principales del bundle de Mullvad + ;; Binarios del bundle — parchear todos los ELF que existan '("mullvad-daemon" - "mullvad"))) + "mullvad" + "mullvad-exclude" + "mullvad-setup" + "mullvad-openvpn" + "openvpn"))) ;; ── 4. Wrappers en bin/ ─────────────────────────────────── ;; Scripts delgados que invocan los binarios en lib-dir blob - d21451be09d990eafa9e0f5cbd67fce7b6e65282 blob + ee26c89a83ce6b6c140e1f70325afb83b3f1b8b8 --- richard/services/mullvad.scm +++ richard/services/mullvad.scm @@ -29,8 +29,9 @@ (shepherd-service (documentation "Mullvad VPN daemon — gestiona WireGuard y killswitch") (provision '(mullvad)) - ;; networking: espera a que la pila de red esté lista - (requirement '(networking)) + ;; networking: espera red; nftables: evita que mullvad arranque antes + ;; de que se cargue el ruleset base (su killswitch añade reglas encima) + (requirement '(networking nftables)) (start #~(make-forkexec-constructor ;; El daemon está en lib/mullvad-vpn/ dentro del store blob - 4ba4b2e0f87e19942ddfd11137c8880e24853d71 blob + f986c827ae7181987e5371ed6d3988a7c8bbf2e6 --- system/channels.scm +++ system/channels.scm @@ -22,7 +22,16 @@ "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5")))) ;; Canal personal: paquetes binarios (Mullvad VPN, Zen Browser, etc.) + ;; Para generar la introduction: + ;; 1. git config commit.gpgsign true + ;; 2. git commit -S (en el repo del canal) + ;; 3. git push && git rev-parse HEAD → sustituye COMMIT-HASH abajo (channel (name 'richard) (url "https://codeberg.org/Richard7987/guix-channel") - (branch "main"))) + (branch "main") + (introduction + (make-channel-introduction + "COMMIT-HASH" ; reemplazar con: git rev-parse HEAD (commit firmado) + (openpgp-fingerprint + "91CA 581F 7B78 01E8 8673 D228 DBD5 F61D 8A0A 14D7")))))