diff mbox series

[bug#71782,v5,3/4] gnu: torbrowser: Update to 13.5.3 [security fixes].

Message ID 20240905231807.5950-1-nandre@riseup.net
State New
Headers show
Series Update torbrowser and mullvadbrowser to v. 13.5.3. | expand

Commit Message

André Batista Sept. 5, 2024, 11:18 p.m. UTC
Fixes CVEs 2024-6600, 2024-6601, 2024-6602, 2024-6603, 2024-6604,
2024-7519, 2024-7521, 2024-7522, 2024-7524, 2024-7525, 2024-7526,
2024-7527, 2024-7529, 2024-7531, 2024-8381, 2024-8382, 2024-8383 and
2024-8384.

See the Mozilla Foundation Security advisories
<https://www.mozilla.org/en-US/security/advisories/mfsa2024-30/>,
<https://www.mozilla.org/en-US/security/advisories/mfsa2024-34/> and
<https://www.mozilla.org/en-US/security/advisories/mfsa2024-41/>
for details.

* gnu/packages/tor-browsers.scm (%torbrowser-build-date): Update to
20240903073000.
(%torbrowser-version): Update to 13.5.3.
(%torbrowser-firefox-version): Update to 115.15.0esr-13.5-1-build3.
(%torbrowser-locales): Change it to be a plain list of supported locales.
(firefox-locales): New variable.
(torbrowser-translation-base): Update to
daed2afc487d1b20efc17feb153156524c6f714b.
(torbrowser-translation-specific): Update to
6374e3b09c0894b8452fa1ba0b99c807722fc805.
(lld-as-ld-wrapper-16): New variable.
(make-torbrowser)[native-inputs]: Add lld-as-ld-wrapper-16. Use
llvm-16 and clang-16.
  [inputs]: Add firefox-locales.
  [arguments] <#:phases>:  Remove add-bridges.
    setenv, copy-firefox-locales: Update MOZ_CHROME_MULTILOCALE to the
     new %torbrowser-locales format.
    copy-basebrowser-locales, copy-torbrowser-locales: Likewise and adjust
     fluent file path.
    deploy-fonts: Adjust regex expression.
    autoconfig: Remove file-picker configuration workaround. See #71181.

Change-Id: Idf182607798d9111c30db63fe926b7f8cb3ce300
---
 gnu/packages/tor-browsers.scm | 141 +++++++++++++++-------------------
 1 file changed, 60 insertions(+), 81 deletions(-)

Comments

Ian Eure Sept. 6, 2024, 3:05 p.m. UTC | #1
Hi André,

This all looks good to me.  I built and ran both browsers and they 
seem to be working how I’d expect.

My only question is around the locale handling -- (gnu packages 
gnuzilla) has a setup for these which I was able to reuse for 
LibreWolf.  Is that possible for mullvad and torbrowser?  It would 
be nice to have a unified way of handling this, instead of each 
browser implementing its own strategy.

That work can follow the merge of this patch series, but I think 
it’s worth discussing.

Thanks,

  — Ian

André Batista <nandre@riseup.net> writes:

> Fixes CVEs 2024-6600, 2024-6601, 2024-6602, 2024-6603, 
> 2024-6604,
> 2024-7519, 2024-7521, 2024-7522, 2024-7524, 2024-7525, 
> 2024-7526,
> 2024-7527, 2024-7529, 2024-7531, 2024-8381, 2024-8382, 2024-8383 
> and
> 2024-8384.
>
> See the Mozilla Foundation Security advisories
> <https://www.mozilla.org/en-US/security/advisories/mfsa2024-30/>,
> <https://www.mozilla.org/en-US/security/advisories/mfsa2024-34/> 
> and
> <https://www.mozilla.org/en-US/security/advisories/mfsa2024-41/>
> for details.
>
> * gnu/packages/tor-browsers.scm (%torbrowser-build-date): Update 
> to
> 20240903073000.
> (%torbrowser-version): Update to 13.5.3.
> (%torbrowser-firefox-version): Update to 
> 115.15.0esr-13.5-1-build3.
> (%torbrowser-locales): Change it to be a plain list of supported 
> locales.
> (firefox-locales): New variable.
> (torbrowser-translation-base): Update to
> daed2afc487d1b20efc17feb153156524c6f714b.
> (torbrowser-translation-specific): Update to
> 6374e3b09c0894b8452fa1ba0b99c807722fc805.
> (lld-as-ld-wrapper-16): New variable.
> (make-torbrowser)[native-inputs]: Add lld-as-ld-wrapper-16. Use
> llvm-16 and clang-16.
>   [inputs]: Add firefox-locales.
>   [arguments] <#:phases>:  Remove add-bridges.
>     setenv, copy-firefox-locales: Update MOZ_CHROME_MULTILOCALE 
>     to the
>      new %torbrowser-locales format.
>     copy-basebrowser-locales, copy-torbrowser-locales: Likewise 
>     and adjust
>      fluent file path.
>     deploy-fonts: Adjust regex expression.
>     autoconfig: Remove file-picker configuration workaround. See 
>     #71181.
>
> Change-Id: Idf182607798d9111c30db63fe926b7f8cb3ce300
> ---
>  gnu/packages/tor-browsers.scm | 141 
>  +++++++++++++++-------------------
>  1 file changed, 60 insertions(+), 81 deletions(-)
>
> diff --git a/gnu/packages/tor-browsers.scm 
> b/gnu/packages/tor-browsers.scm
> index ba6bbaa873..180dae6317 100644
> --- a/gnu/packages/tor-browsers.scm
> +++ b/gnu/packages/tor-browsers.scm
> @@ -21,7 +21,7 @@
>  ;;; Copyright © 2021 Baptiste Strazzul <bstrazzull@hotmail.fr>
>  ;;; Copyright © 2022 SeerLite <seerlite@disroot.org>
>  ;;; Copyright © 2024 Aleksandr Vityazev <avityazew@gmail.com>
> -;;; Copyright © 2020, 2021 André Batista <nandre@riseup.net>
> +;;; Copyright © 2020, 2021, 2024 André Batista 
> <nandre@riseup.net>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -104,63 +104,48 @@ (define-syntax-rule (mozilla-locales 
> (hash-string changeset locale) ...)
>    #~(list (cons #$locale #$(mozilla-locale locale changeset 
>    hash-string))
>            ...))
>  
> -;; See tor-browser-build/rbm.conf for the list.
> -;; See browser/locales/l10n-changesets.json for the changeset.
> -;; See update-mozilla-locales in gnuzilla.scm to automate 
> updating changeset.
> -(define %torbrowser-locales
> -  (mozilla-locales
> -   ;;                      sha256 
> changeset    locale
> - 
> ;;---------------------------------------------------------------------------
> -   ("1218mldjxybhgzdi0myzkwjr2fgnysl71pl847kr7wyn1j8wk3a5" 
> "c25d00080479" "ar")
> -   ("11c96jhfzd3h46qhblhvn2acsn895ykynarai8r5pf0655nfjs0j" 
> "2de60e3d6d0c" "ca")
> -   ("0yhycgb3s3kydbzy6f2q7f7g2lp975spr092prf9xp8ha62ghby7" 
> "609edd15f9a9" "cs")
> -   ("1kzx94n36c5vv954j7w65djvb37c178zazy25b35l71q2rvhmlhj" 
> "2197a99c9a08" "da")
> -   ("13h7hk11bbd0yq8gqdv7ndbizkgwlm3ybz225l3x2b5cnyjxyg14" 
> "b7a533e5edc9" "de")
> -   ("13ay27vdrqfv2ysyi7c2jmz50lps7rff9rmnws1z7jkj0a5chwrn" 
> "20baf15379d8" "el")
> -   ("0mdr5b6pqxjmg9c8064x3hpf53h6w9j8ghl32655sx9jh4v3ykza" 
> "beff1baac7c5" "es-ES")
> -   ("1pnyg09j6r15w8m62lwj89x6rz4br877z60p8s1hlrb9hj2s3vdx" 
> "ebe0b60b0b36" "fa")
> -   ("067r505626cvlrsalnndf2ykz3nnkiy0b8yaxzf1rracpzmp0hni" 
> "d5ae6a933d71" "fi")
> -   ("0026zzjv2bqc8sg06yvyd0mhny6mwwvhpvzjrhv2fi5v4wkxapdj" 
> "496c2eb73b82" "fr")
> -   ("1dxcp26y8siap4k54zsw7mqa7k0l4f1505rdf4hnnxrzf9a643g5" 
> "2fcccb5b19b3" "ga-IE")
> -   ("14v6xnlyj65hzaz2rmzxcl4skjgm48426jgr9mwkwiqis587lp4a" 
> "c53cea027f8f" "he")
> -   ("04fdw2gzb64fb51bvs0bwsidzlvkdahmcy76vdg3gfcxslnlpi3y" 
> "5a76dd3b5d5c" "hu")
> -   ("0bpyxpclfy74bcsjrs1ajh2am4zv6j6j9q4gc4vz8pgvzy9354zp" 
> "6e6de17dcac4" "id")
> -   ("131ph8n235kr6nj1pszk0m00nh6kl360r4qvx4hjm8s22mw0k8qd" 
> "536265635dfe" "is")
> -   ("03fbp4vgkwyimfmbm4n8blx1m16yhms2wm8j4wlx2h3cpxp5r71k" 
> "91951e37e2b8" "it")
> -   ("0ncm531d7ih7phcn9d83zwq0dfphvmzg3gmhqmrrkkbydi1g3pbb" 
> "895dcf8bb524" "ja")
> -   ("1x3110v730ak522zfm8j3r3v1x5lq3ig82kcgyxkc49xywajy0ni" 
> "d0819a64fc40" "ka")
> -   ("14rc9mr4ngxdzwpjagzhz47jazgp1a6vwb0vbwj31yxv9iwkrgzi" 
> "6ef881aff44b" "ko")
> -   ("1gl85z550amhbaxp39zdj6yyvashj9xd4ampfhm9jdpbf6n5j2l8" 
> "afcbc29a15e5" "lt")
> -   ("1hz5g3iprfkbd88ncppyksbhlws73lhs75nf62hangw8l73wdn69" 
> "84f3d6c7e2da" "mk")
> -   ("14aq37ngnav5m2kcb4wavxwhp28ad4jzdkzc7i64h0qvvxq5n3hf" 
> "c9ec27a5db3d" "ms")
> -   ("0h7dlnawm5mbcx4qdlz5c7n4axz2dpa677v13ljdgm2b5w76msmq" 
> "5c1480ccc040" "my")
> -   ("1b12azc1n8j1i2l20v66r74q79zqjvc5sf9pd8rmj3xd0fkxzdp2" 
> "fc1896a0a24d" "nb-NO")
> -   ("1fh4dhlb6hynlpb2997gssv9v8zk5b7qrw0sclggczb5pcpjk6wc" 
> "7e6da4f01bdb" "nl")
> -   ("1w8x3jjrd28f6g6ywwxldizpiipfkr63dzqd74kjpg24s2lqzp80" 
> "e86a451a9cb5" "pl")
> -   ("1v3v4n82sn7a4h2d9n653fmgc31mikacf59lvdj6gbwvzpjb5yfa" 
> "94c3dbb67a5d" "pt-BR")
> -   ("061a4z0lffgks3wlr6yh5z7x9arcn804mjwvffcmibs106vzamyq" 
> "470b13b5805b" "ro")
> -   ("1fxgh7nfxpg2zknvfff8igq9q1vm5n4q033v7lm2c0xn3dbl8m28" 
> "402b2ecbf04d" "ru")
> -   ("1i119g6dnhzxmpaz5r2jr9yzm1v24v2q6m3z6bfz2yihj0w7m133" 
> "f637484e72b6" "sq")
> -   ("1nllh3ax323sxwhj7xvwvbfnh4179332pcmpfyybw1vaid3nr39k" 
> "bb2d5d96d69e" "sv-SE")
> -   ("136m68fd0641k3qqmsw6zp016cvvd0sipsyv6rx2b9nli56agz57" 
> "0e6c56bf2ac9" "th")
> -   ("0q8p8bwq8an65yfdwzm4dhl6km68r83bv5i17kay2gak8msxxhsb" 
> "91e611ae3f19" "tr")
> -   ("1f2g7rnxpr2gjzngfsv19g11vk9zqpyrv01pz07mw2z3ffbkxf0j" 
> "99d5ffa0b81e" "uk")
> -   ("1rizwsfgr7vxm31bin3i7bwhcqa67wcylak3xa387dvgf1y9057i" 
> "5fd44724e22d" "vi")
> -   ("02ifa94jfii5f166rwdvv8si3bazm4bcf4qhi59c8f1hxbavb52h" 
> "081aeb1aa308" "zh-CN")
> -   ("0qx9sh56pqc2x5qrh386cp1fi1gidhcmxxpvqkg9nh2jbizahznr" 
> "9015a180602e" "zh-TW")))
> -
>  ;; We copy the official build id, which is defined at
>  ;; tor-browser-build/rbm.conf (browser_release_date).
> -(define %torbrowser-build-date "20240510190000")
> +(define %torbrowser-build-date "20240903073000")
>  
>  ;; To find the last version, look at 
>  https://www.torproject.org/download/.
> -(define %torbrowser-version "13.0.16")
> +(define %torbrowser-version "13.5.3")
>  
>  ;; To find the last Firefox version, browse
>  ;; 
>  https://archive.torproject.org/tor-package-archive/torbrowser/<%torbrowser-version>
>  ;; There should be only one archive that starts with
>  ;; "src-firefox-tor-browser-".
> -(define %torbrowser-firefox-version 
> "115.12.0esr-13.0-1-build1")
> +(define %torbrowser-firefox-version 
> "115.15.0esr-13.5-1-build3")
> +
> +;; See tor-browser-build/rbm.conf for the list.
> +(define %torbrowser-locales (list "ar" "ca" "cs" "da" "de" "el" 
> "es-ES" "fa" "fi" "fr"
> +                                  "ga-IE" "he" "hu" "id" "is" 
> "it" "ja" "ka" "ko" "lt"
> +                                  "mk" "ms" "my" "nb-NO" "nl" 
> "pl" "pt-BR" "ro" "ru"
> +                                  "sq" "sv-SE" "th" "tr" "uk" 
> "vi" "zh-CN" "zh-TW"))
> +
> +;; See browser/locales/l10n-changesets.json for the commit.
> +(define firefox-locales
> +  (let ((commit "d8d587117c7b9dcc6a4fbc38407ed2c831bb008f")
> +        (revision "0"))
> +    (package
> +      (name "firefox-locales")
> +      (version (git-version "0.0.0" revision commit))
> +      (source
> +        (origin
> +          (method git-fetch)
> +          (uri (git-reference
> +                (url 
> "https://github.com/mozilla-l10n/firefox-l10n")
> +                (commit commit)))
> +          (file-name (git-file-name name version))
> +          (sha256
> +           (base32
> + 
> "0a2ly29lli02jflqw78zjk7bp7h18fz935cc9csavi0cpdiixjv1"))))
> +      (build-system copy-build-system)
> +      (home-page 
> "https://github.com/mozilla-l10n/firefox-l10n")
> +      (synopsis "Firefox Locales")
> +      (description "This package contains localized messages 
> for all
> +Firefox locales.")
> +      (license license:mpl2.0))))
>  
>  ;; See tor-browser-build/projects/translation/config.
>  (define torbrowser-translation-base
> @@ -168,11 +153,11 @@ (define torbrowser-translation-base
>      (method git-fetch)
>      (uri (git-reference
>            (url 
>            "https://gitlab.torproject.org/tpo/translation.git")
> -          (commit "f28525699864f4e3d764c354130bd898ce5b20aa")))
> +          (commit "daed2afc487d1b20efc17feb153156524c6f714b")))
>      (file-name "translation-base-browser")
>      (sha256
>       (base32
> - 
> "1vf6nl7fdmlmg2gskf3w1xlsgcm0pxi54z2daz5nwr6q9gyi0lkf"))))
> + 
> "0psmmgw9dnjwdhjbqkd69q5q7sdwyjcwagh93ffrjk0v7ybc79dq"))))
>  
>  ;; See tor-browser-build/projects/translation/config.
>  (define torbrowser-translation-specific
> @@ -180,11 +165,11 @@ (define torbrowser-translation-specific
>      (method git-fetch)
>      (uri (git-reference
>            (url 
>            "https://gitlab.torproject.org/tpo/translation.git")
> -          (commit "b5d79336411e5a59c4861341ef9aa7353e0bcad9")))
> +          (commit "6374e3b09c0894b8452fa1ba0b99c807722fc805")))
>      (file-name "translation-tor-browser")
>      (sha256
>       (base32
> - 
> "0ahz69pxhgik7ynmdkbnx7v5l2v392i6dswjz057g4hwnd7d34fb"))))
> + 
> "1wd9iwcj2h70bp017pcdhgfiw2bs8zi68kljmpnk69pssd6cn8l3"))))
>  
>  (define torbrowser-assets
>    ;; This is a prebuilt Torbrowser from which we take the 
>    assets we need.
> @@ -200,7 +185,7 @@ (define torbrowser-assets
>           version "/tor-browser-linux-x86_64-" version 
>           ".tar.xz"))
>         (sha256
>          (base32
> - 
> "1kffam66bsaahzx212hw9lb03jwfr24hivzg067iyzilsldpc9c1"))))
> + 
> "0laz6yrm310iidddnas2w1s5wad183n9axjkgrf5cm5paj615343"))))
>      (arguments
>       (list
>        #:install-plan
> @@ -215,6 +200,10 @@ (define torbrowser-assets
>  Browser.")
>      (license license:silofl1.1)))
>  
> +;;; A LLD wrapper that can be used as a (near) drop-in 
> replacement to GNU ld.
> +(define lld-as-ld-wrapper-16
> +  (make-lld-wrapper lld-16 #:lld-as-ld? #t))
> +
>  (define* (make-torbrowser #:key
>                            moz-app-name
>                            moz-app-remotingname
> @@ -238,10 +227,11 @@ (define* (make-torbrowser #:key
>           ".tar.xz"))
>         (sha256
>          (base32
> - 
> "1b70zyjyai6kk4y1kkl8jvrs56gg7z31kkad6bmdpd8jw4n71grx"))))
> + 
> "13b9ni6anv279drhbb5m95nnmgslrp6frsm0y4028nfqiprs7vj5"))))
>      (build-system mozilla-build-system)
>      (inputs
>       (list 
>       go-gitlab-torproject-org-tpo-anti-censorship-pluggable-transports-lyrebird
> +           firefox-locales
>             tor-client
>             alsa-lib
>             bash-minimal                 ;for wrap-program
> @@ -293,8 +283,9 @@ (define* (make-torbrowser #:key
>        rust
>        `(,rust "cargo")
>        rust-cbindgen
> -      llvm-15
> -      clang-15
> +      lld-as-ld-wrapper-16  ; for cargo rustc
> +      llvm-16
> +      clang-16
>        perl
>        node-lts
>        python-wrapper
> @@ -541,7 +532,7 @@ (define (runpaths-of-input label)
>                (setenv "MOZBUILD_STATE_PATH"
>                        (in-vicinity (getcwd) ".mozbuild"))
>                (setenv "MOZ_CHROME_MULTILOCALE"
> -                      (string-join (map car #$locales)))
> +                      (string-join (list #$@locales)))
>                ;; Make build reproducible.
>                (setenv "MOZ_BUILD_DATE" #$build-date)))
>            (add-before 'configure 'mozconfig
> @@ -555,14 +546,14 @@ (define (runpaths-of-input label)
>            ;; See tor-browser-build/projects/firefox/build.
>            (add-before 'configure 'copy-firefox-locales
>              (lambda _
> -              (let ((l10ncentral ".mozbuild/l10n-central"))
> +              (let ((l10ncentral ".mozbuild/l10n-central")
> +                    (ff-locales #$(this-package-input 
> "firefox-locales")))
>                  (mkdir-p l10ncentral)
>                  (for-each
>                   (lambda (lang)
> -                   (copy-recursively (cdr lang)
> -                                     (in-vicinity l10ncentral
> -                                                  (car lang))))
> -                 #$locales))))
> +                   (copy-recursively (string-append ff-locales 
> "/" lang)
> +                                     (in-vicinity l10ncentral 
> lang)))
> +                 (list #$@locales)))))
>            (add-after 'copy-firefox-locales 
>            'copy-basebrowser-locales
>              (lambda _
>                (let ((l10ncentral ".mozbuild/l10n-central"))
> @@ -577,7 +568,7 @@ (define (runpaths-of-input label)
>                       #f (string-join
>                           '("mv"
>                             "translation-base-browser/~a/base-browser.ftl"
> -                           "~a/~a/browser/browser/"))
> +                           "~a/~a/toolkit/toolkit/global/"))
>                       lang l10ncentral lang))
>                     (system
>                      (format
> @@ -586,7 +577,7 @@ (define (runpaths-of-input label)
>                             "translation-base-browser/~a/*"
>                             "~a/~a/browser/chrome/browser/"))
>                       lang l10ncentral lang)))
> -                 (map car #$locales)))))
> +                 (list #$@locales)))))
>            (add-after 'copy-basebrowser-locales 
>            'copy-torbrowser-locales
>              (lambda _
>                (let ((l10ncentral ".mozbuild/l10n-central"))
> @@ -601,7 +592,7 @@ (define (runpaths-of-input label)
>                       #f (string-join
>                           '("mv"
>                             "translation-tor-browser/~a/tor-browser.ftl"
> -                           "~a/~a/browser/browser/"))
> +                           "~a/~a/toolkit/toolkit/global/"))
>                       lang l10ncentral lang))
>                     (system
>                      (format
> @@ -623,7 +614,7 @@ (define (runpaths-of-input label)
>                       (format port "  locale/~a/ 
>                       (chrome/locale/~a/*)~%"
>                               lang lang)
>                       (close port)))
> -                 (map car #$locales)))))
> +                 (list #$@locales)))))
>            (replace 'configure
>              (lambda _
>                (invoke "./mach" "configure")))
> @@ -632,14 +623,6 @@ (define (runpaths-of-input label)
>                (substitute*
>                    "toolkit/locales/en-US/toolkit/about/aboutAddons.ftl"
>                  (("addons.mozilla.org") "gnuzilla.gnu.org"))))
> -          (add-before 'build 'add-bridges ;see deploy.sh
> -            (lambda _
> -              (let ((port (open-file
> - 
> "browser/app/profile/000-tor-browser.js" "a")))
> -                (display
> -                 "#include 
> ../../../tools/torbrowser/bridges.js" port)
> -                (newline port)
> -                (close port))))
>            (replace 'build
>              (lambda* (#:key (make-flags '()) (parallel-build? 
>              #t)
>                        #:allow-other-keys)
> @@ -739,7 +722,7 @@ (define (runpaths-of-input label)
>                  (copy-recursively (in-vicinity #$assets 
>                  "fontconfig")
>                                    (in-vicinity lib 
>                                    "fontconfig"))
>                  (substitute* (in-vicinity lib 
>                  "fontconfig/fonts.conf")
> -                  (("<dir>fonts</dir>")
> +                  (("<dir prefix=\"cwd\">fonts</dir>")
>                     (format #f "<dir>~a</dir>" (in-vicinity lib 
>                     "fonts"))))
>                  (delete-file-recursively (in-vicinity lib 
>                  "fonts"))
>                  (copy-recursively (in-vicinity #$assets 
>                  "fonts")
> @@ -805,11 +788,7 @@ (define (runpaths-of-input label)
>                              "https://gnuzilla.gnu.org/mozzarella")
>                      (format #t "pref(~s, ~s);~%"
>                              "lightweightThemes.getMoreURL"
> - 
> "https://gnuzilla.gnu.org/mozzarella")
> -                    ;; FIXME: 
> https://github.com/NixOS/nixpkgs/issues/307095
> -                    (format #t "pref(~s, ~a);~%"
> - 
> "widget.use-xdg-desktop-portal.file-picker"
> -                            "1"))))))
> + 
> "https://gnuzilla.gnu.org/mozzarella"))))))
>            (add-after 'autoconfig 'autoconfig-tor
>              (lambda* (#:key inputs #:allow-other-keys)
>                (let ((lib (in-vicinity #$output 
>                "lib/torbrowser"))
André Batista Sept. 7, 2024, 3:36 p.m. UTC | #2
Hi Ian,

sex 06 set 2024 às 08:05:28 (1725620728), ian@retrospec.tv enviou:
> 
> This all looks good to me.  I built and ran both browsers and they seem to
> be working how I’d expect.

Great, thanks!

> My only question is around the locale handling -- (gnu packages gnuzilla)
> has a setup for these which I was able to reuse for LibreWolf.  Is that
> possible for mullvad and torbrowser?  It would be nice to have a unified way
> of handling this, instead of each browser implementing its own strategy.
> 

I'm not sure I understand why you think this to be desirable, could you
elaborate?

I'm also not sure if this is possible (without incuring in glitches) and
in my opinion this is not desirable for both torbrowser and mullvad
because:

I. Both these browsers have modified pristine firefox in a number of
non-trivial ways. Eg.: if you go to about:preferences you will see that
there are various user settings which are specific to this browsers or
even when you first launch torbrowser the connection settings page is
unknown to firefox. I believe that's the reason why these browsers do
not support 'all-mozilla-locales', but just a subset which has been
worked upon by the torproject.

II. In order to avoid guix users having a different fingerprint, we try
to be as close as possible to what upstream does. I'm not sure if locale
version could be somehow infered from the network, but I guess using the
same version is the safest bet;

III. Currently on guix master, these browsers are using code copied from
gnuzilla.scm, but with a subset of locales and different changesets
that are based on torproject settings. However, torproject has moved
from mercurial to the unified github firefox locales[1] which has
immensily simplified the work required to update the changesets (now
actually commits) and all locales supported on those browsers now have
only one commit, instead of various changesets on single locale repos;

IV. Moreover, I believe mozilla itself is on the way of deprecating
mercurial l10n-central in favor of firefox-locales git repo, since
this is where all work has been happening[2], while l10n-central has
stopped at 2024-07-10[2]. So probably in a not so distant future
gnuzilla will have to move on to that as well.

So I stand by the changes proposed on this patch series, at least as
things stand.

Thanks!

1. https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/55ad6ca216c086fb297af456ed0606ab88c1acdc
2. https://github.com/mozilla-l10n/firefox-l10n
3. https://hg.mozilla.org/l10n-central/
Ian Eure Sept. 8, 2024, 3:54 a.m. UTC | #3
Hi André,

André Batista <nandre@riseup.net> writes:

> Hi Ian,
>
> sex 06 set 2024 às 08:05:28 (1725620728), ian@retrospec.tv 
> enviou:
>> 
>> This all looks good to me.  I built and ran both browsers and 
>> they seem to
>> be working how I’d expect.
>
> Great, thanks!
>
>> My only question is around the locale handling -- (gnu packages 
>> gnuzilla)
>> has a setup for these which I was able to reuse for LibreWolf. 
>> Is that
>> possible for mullvad and torbrowser?  It would be nice to have 
>> a unified way
>> of handling this, instead of each browser implementing its own 
>> strategy.
>> 
>
> I'm not sure I understand why you think this to be desirable, 
> could you
> elaborate?
>

There’s a lot of duplication between the Firefox-derived browsers 
in Guix, and I think it would be good to reduce it where it makes 
sense.  Because the locales are a separate package used as an 
input, this seems like a part of them which could be handled in a 
uniform way, to the benefit of all (assuming they use the same 
locale data).


> I'm also not sure if this is possible (without incuring in 
> glitches) and
> in my opinion this is not desirable for both torbrowser and 
> mullvad
> because:
>
> I. Both these browsers have modified pristine firefox in a 
> number of
> non-trivial ways. Eg.: if you go to about:preferences you will 
> see that
> there are various user settings which are specific to this 
> browsers or
> even when you first launch torbrowser the connection settings 
> page is
> unknown to firefox. I believe that's the reason why these 
> browsers do
> not support 'all-mozilla-locales', but just a subset which has 
> been
> worked upon by the torproject.
>

I see, now that I read the patch more closely, it looks like the 
upstream locale data wasn’t being used, despite reusing the 
`mozilla-locale' code from Gnuzilla.

> II. In order to avoid guix users having a different fingerprint, 
> we try
> to be as close as possible to what upstream does. I'm not sure 
> if locale
> version could be somehow infered from the network, but I guess 
> using the
> same version is the safest bet;
>
> III. Currently on guix master, these browsers are using code 
> copied from
> gnuzilla.scm, but with a subset of locales and different 
> changesets
> that are based on torproject settings. However, torproject has 
> moved
> from mercurial to the unified github firefox locales[1] which 
> has
> immensily simplified the work required to update the changesets 
> (now
> actually commits) and all locales supported on those browsers 
> now have
> only one commit, instead of various changesets on single locale 
> repos;
>

This makes sense to me with the additonal context.


> IV. Moreover, I believe mozilla itself is on the way of 
> deprecating
> mercurial l10n-central in favor of firefox-locales git repo, 
> since
> this is where all work has been happening[2], while l10n-central 
> has
> stopped at 2024-07-10[2]. So probably in a not so distant future
> gnuzilla will have to move on to that as well.
>

I wasn’t aware of this, but that’s great news, as it’ll make 
reproducible builds much easier.  Thank you for letting me know.


> So I stand by the changes proposed on this patch series, at 
> least as
> things stand.
>

Makes sense.  I’m still in favor of merging them.  Thank you for 
taking the time to explain.

Thanks,

  — Ian
Ludovic Courtès Sept. 30, 2024, 8:32 p.m. UTC | #4
Hello,

Ian Eure <ian@retrospec.tv> skribis:

> This all looks good to me.  I built and ran both browsers and they
> seem to be working how I’d expect.

Based on your feedback I applied v5 of this patch series.  Thanks to the
two of you!

BTW, one of you might want to consider applying for commit rights to
speed up the process of applying patches in your scope.  Mark H Weaver
does have commit rights but he tends to pay less attention to email.

Thanks,
Ludo’.
diff mbox series

Patch

diff --git a/gnu/packages/tor-browsers.scm b/gnu/packages/tor-browsers.scm
index ba6bbaa873..180dae6317 100644
--- a/gnu/packages/tor-browsers.scm
+++ b/gnu/packages/tor-browsers.scm
@@ -21,7 +21,7 @@ 
 ;;; Copyright © 2021 Baptiste Strazzul <bstrazzull@hotmail.fr>
 ;;; Copyright © 2022 SeerLite <seerlite@disroot.org>
 ;;; Copyright © 2024 Aleksandr Vityazev <avityazew@gmail.com>
-;;; Copyright © 2020, 2021 André Batista <nandre@riseup.net>
+;;; Copyright © 2020, 2021, 2024 André Batista <nandre@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -104,63 +104,48 @@  (define-syntax-rule (mozilla-locales (hash-string changeset locale) ...)
   #~(list (cons #$locale #$(mozilla-locale locale changeset hash-string))
           ...))
 
-;; See tor-browser-build/rbm.conf for the list.
-;; See browser/locales/l10n-changesets.json for the changeset.
-;; See update-mozilla-locales in gnuzilla.scm to automate updating changeset.
-(define %torbrowser-locales
-  (mozilla-locales
-   ;;                      sha256                            changeset    locale
-   ;;---------------------------------------------------------------------------
-   ("1218mldjxybhgzdi0myzkwjr2fgnysl71pl847kr7wyn1j8wk3a5" "c25d00080479" "ar")
-   ("11c96jhfzd3h46qhblhvn2acsn895ykynarai8r5pf0655nfjs0j" "2de60e3d6d0c" "ca")
-   ("0yhycgb3s3kydbzy6f2q7f7g2lp975spr092prf9xp8ha62ghby7" "609edd15f9a9" "cs")
-   ("1kzx94n36c5vv954j7w65djvb37c178zazy25b35l71q2rvhmlhj" "2197a99c9a08" "da")
-   ("13h7hk11bbd0yq8gqdv7ndbizkgwlm3ybz225l3x2b5cnyjxyg14" "b7a533e5edc9" "de")
-   ("13ay27vdrqfv2ysyi7c2jmz50lps7rff9rmnws1z7jkj0a5chwrn" "20baf15379d8" "el")
-   ("0mdr5b6pqxjmg9c8064x3hpf53h6w9j8ghl32655sx9jh4v3ykza" "beff1baac7c5" "es-ES")
-   ("1pnyg09j6r15w8m62lwj89x6rz4br877z60p8s1hlrb9hj2s3vdx" "ebe0b60b0b36" "fa")
-   ("067r505626cvlrsalnndf2ykz3nnkiy0b8yaxzf1rracpzmp0hni" "d5ae6a933d71" "fi")
-   ("0026zzjv2bqc8sg06yvyd0mhny6mwwvhpvzjrhv2fi5v4wkxapdj" "496c2eb73b82" "fr")
-   ("1dxcp26y8siap4k54zsw7mqa7k0l4f1505rdf4hnnxrzf9a643g5" "2fcccb5b19b3" "ga-IE")
-   ("14v6xnlyj65hzaz2rmzxcl4skjgm48426jgr9mwkwiqis587lp4a" "c53cea027f8f" "he")
-   ("04fdw2gzb64fb51bvs0bwsidzlvkdahmcy76vdg3gfcxslnlpi3y" "5a76dd3b5d5c" "hu")
-   ("0bpyxpclfy74bcsjrs1ajh2am4zv6j6j9q4gc4vz8pgvzy9354zp" "6e6de17dcac4" "id")
-   ("131ph8n235kr6nj1pszk0m00nh6kl360r4qvx4hjm8s22mw0k8qd" "536265635dfe" "is")
-   ("03fbp4vgkwyimfmbm4n8blx1m16yhms2wm8j4wlx2h3cpxp5r71k" "91951e37e2b8" "it")
-   ("0ncm531d7ih7phcn9d83zwq0dfphvmzg3gmhqmrrkkbydi1g3pbb" "895dcf8bb524" "ja")
-   ("1x3110v730ak522zfm8j3r3v1x5lq3ig82kcgyxkc49xywajy0ni" "d0819a64fc40" "ka")
-   ("14rc9mr4ngxdzwpjagzhz47jazgp1a6vwb0vbwj31yxv9iwkrgzi" "6ef881aff44b" "ko")
-   ("1gl85z550amhbaxp39zdj6yyvashj9xd4ampfhm9jdpbf6n5j2l8" "afcbc29a15e5" "lt")
-   ("1hz5g3iprfkbd88ncppyksbhlws73lhs75nf62hangw8l73wdn69" "84f3d6c7e2da" "mk")
-   ("14aq37ngnav5m2kcb4wavxwhp28ad4jzdkzc7i64h0qvvxq5n3hf" "c9ec27a5db3d" "ms")
-   ("0h7dlnawm5mbcx4qdlz5c7n4axz2dpa677v13ljdgm2b5w76msmq" "5c1480ccc040" "my")
-   ("1b12azc1n8j1i2l20v66r74q79zqjvc5sf9pd8rmj3xd0fkxzdp2" "fc1896a0a24d" "nb-NO")
-   ("1fh4dhlb6hynlpb2997gssv9v8zk5b7qrw0sclggczb5pcpjk6wc" "7e6da4f01bdb" "nl")
-   ("1w8x3jjrd28f6g6ywwxldizpiipfkr63dzqd74kjpg24s2lqzp80" "e86a451a9cb5" "pl")
-   ("1v3v4n82sn7a4h2d9n653fmgc31mikacf59lvdj6gbwvzpjb5yfa" "94c3dbb67a5d" "pt-BR")
-   ("061a4z0lffgks3wlr6yh5z7x9arcn804mjwvffcmibs106vzamyq" "470b13b5805b" "ro")
-   ("1fxgh7nfxpg2zknvfff8igq9q1vm5n4q033v7lm2c0xn3dbl8m28" "402b2ecbf04d" "ru")
-   ("1i119g6dnhzxmpaz5r2jr9yzm1v24v2q6m3z6bfz2yihj0w7m133" "f637484e72b6" "sq")
-   ("1nllh3ax323sxwhj7xvwvbfnh4179332pcmpfyybw1vaid3nr39k" "bb2d5d96d69e" "sv-SE")
-   ("136m68fd0641k3qqmsw6zp016cvvd0sipsyv6rx2b9nli56agz57" "0e6c56bf2ac9" "th")
-   ("0q8p8bwq8an65yfdwzm4dhl6km68r83bv5i17kay2gak8msxxhsb" "91e611ae3f19" "tr")
-   ("1f2g7rnxpr2gjzngfsv19g11vk9zqpyrv01pz07mw2z3ffbkxf0j" "99d5ffa0b81e" "uk")
-   ("1rizwsfgr7vxm31bin3i7bwhcqa67wcylak3xa387dvgf1y9057i" "5fd44724e22d" "vi")
-   ("02ifa94jfii5f166rwdvv8si3bazm4bcf4qhi59c8f1hxbavb52h" "081aeb1aa308" "zh-CN")
-   ("0qx9sh56pqc2x5qrh386cp1fi1gidhcmxxpvqkg9nh2jbizahznr" "9015a180602e" "zh-TW")))
-
 ;; We copy the official build id, which is defined at
 ;; tor-browser-build/rbm.conf (browser_release_date).
-(define %torbrowser-build-date "20240510190000")
+(define %torbrowser-build-date "20240903073000")
 
 ;; To find the last version, look at https://www.torproject.org/download/.
-(define %torbrowser-version "13.0.16")
+(define %torbrowser-version "13.5.3")
 
 ;; To find the last Firefox version, browse
 ;; https://archive.torproject.org/tor-package-archive/torbrowser/<%torbrowser-version>
 ;; There should be only one archive that starts with
 ;; "src-firefox-tor-browser-".
-(define %torbrowser-firefox-version "115.12.0esr-13.0-1-build1")
+(define %torbrowser-firefox-version "115.15.0esr-13.5-1-build3")
+
+;; See tor-browser-build/rbm.conf for the list.
+(define %torbrowser-locales (list "ar" "ca" "cs" "da" "de" "el" "es-ES" "fa" "fi" "fr"
+                                  "ga-IE" "he" "hu" "id" "is" "it" "ja" "ka" "ko" "lt"
+                                  "mk" "ms" "my" "nb-NO" "nl" "pl" "pt-BR" "ro" "ru"
+                                  "sq" "sv-SE" "th" "tr" "uk" "vi" "zh-CN" "zh-TW"))
+
+;; See browser/locales/l10n-changesets.json for the commit.
+(define firefox-locales
+  (let ((commit "d8d587117c7b9dcc6a4fbc38407ed2c831bb008f")
+        (revision "0"))
+    (package
+      (name "firefox-locales")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                (url "https://github.com/mozilla-l10n/firefox-l10n")
+                (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32
+            "0a2ly29lli02jflqw78zjk7bp7h18fz935cc9csavi0cpdiixjv1"))))
+      (build-system copy-build-system)
+      (home-page "https://github.com/mozilla-l10n/firefox-l10n")
+      (synopsis "Firefox Locales")
+      (description "This package contains localized messages for all
+Firefox locales.")
+      (license license:mpl2.0))))
 
 ;; See tor-browser-build/projects/translation/config.
 (define torbrowser-translation-base
@@ -168,11 +153,11 @@  (define torbrowser-translation-base
     (method git-fetch)
     (uri (git-reference
           (url "https://gitlab.torproject.org/tpo/translation.git")
-          (commit "f28525699864f4e3d764c354130bd898ce5b20aa")))
+          (commit "daed2afc487d1b20efc17feb153156524c6f714b")))
     (file-name "translation-base-browser")
     (sha256
      (base32
-      "1vf6nl7fdmlmg2gskf3w1xlsgcm0pxi54z2daz5nwr6q9gyi0lkf"))))
+      "0psmmgw9dnjwdhjbqkd69q5q7sdwyjcwagh93ffrjk0v7ybc79dq"))))
 
 ;; See tor-browser-build/projects/translation/config.
 (define torbrowser-translation-specific
@@ -180,11 +165,11 @@  (define torbrowser-translation-specific
     (method git-fetch)
     (uri (git-reference
           (url "https://gitlab.torproject.org/tpo/translation.git")
-          (commit "b5d79336411e5a59c4861341ef9aa7353e0bcad9")))
+          (commit "6374e3b09c0894b8452fa1ba0b99c807722fc805")))
     (file-name "translation-tor-browser")
     (sha256
      (base32
-      "0ahz69pxhgik7ynmdkbnx7v5l2v392i6dswjz057g4hwnd7d34fb"))))
+      "1wd9iwcj2h70bp017pcdhgfiw2bs8zi68kljmpnk69pssd6cn8l3"))))
 
 (define torbrowser-assets
   ;; This is a prebuilt Torbrowser from which we take the assets we need.
@@ -200,7 +185,7 @@  (define torbrowser-assets
          version "/tor-browser-linux-x86_64-" version ".tar.xz"))
        (sha256
         (base32
-         "1kffam66bsaahzx212hw9lb03jwfr24hivzg067iyzilsldpc9c1"))))
+         "0laz6yrm310iidddnas2w1s5wad183n9axjkgrf5cm5paj615343"))))
     (arguments
      (list
       #:install-plan
@@ -215,6 +200,10 @@  (define torbrowser-assets
 Browser.")
     (license license:silofl1.1)))
 
+;;; A LLD wrapper that can be used as a (near) drop-in replacement to GNU ld.
+(define lld-as-ld-wrapper-16
+  (make-lld-wrapper lld-16 #:lld-as-ld? #t))
+
 (define* (make-torbrowser #:key
                           moz-app-name
                           moz-app-remotingname
@@ -238,10 +227,11 @@  (define* (make-torbrowser #:key
          ".tar.xz"))
        (sha256
         (base32
-         "1b70zyjyai6kk4y1kkl8jvrs56gg7z31kkad6bmdpd8jw4n71grx"))))
+         "13b9ni6anv279drhbb5m95nnmgslrp6frsm0y4028nfqiprs7vj5"))))
     (build-system mozilla-build-system)
     (inputs
      (list go-gitlab-torproject-org-tpo-anti-censorship-pluggable-transports-lyrebird
+           firefox-locales
            tor-client
            alsa-lib
            bash-minimal                 ;for wrap-program
@@ -293,8 +283,9 @@  (define* (make-torbrowser #:key
       rust
       `(,rust "cargo")
       rust-cbindgen
-      llvm-15
-      clang-15
+      lld-as-ld-wrapper-16  ; for cargo rustc
+      llvm-16
+      clang-16
       perl
       node-lts
       python-wrapper
@@ -541,7 +532,7 @@  (define (runpaths-of-input label)
               (setenv "MOZBUILD_STATE_PATH"
                       (in-vicinity (getcwd) ".mozbuild"))
               (setenv "MOZ_CHROME_MULTILOCALE"
-                      (string-join (map car #$locales)))
+                      (string-join (list #$@locales)))
               ;; Make build reproducible.
               (setenv "MOZ_BUILD_DATE" #$build-date)))
           (add-before 'configure 'mozconfig
@@ -555,14 +546,14 @@  (define (runpaths-of-input label)
           ;; See tor-browser-build/projects/firefox/build.
           (add-before 'configure 'copy-firefox-locales
             (lambda _
-              (let ((l10ncentral ".mozbuild/l10n-central"))
+              (let ((l10ncentral ".mozbuild/l10n-central")
+                    (ff-locales #$(this-package-input "firefox-locales")))
                 (mkdir-p l10ncentral)
                 (for-each
                  (lambda (lang)
-                   (copy-recursively (cdr lang)
-                                     (in-vicinity l10ncentral
-                                                  (car lang))))
-                 #$locales))))
+                   (copy-recursively (string-append ff-locales "/" lang)
+                                     (in-vicinity l10ncentral lang)))
+                 (list #$@locales)))))
           (add-after 'copy-firefox-locales 'copy-basebrowser-locales
             (lambda _
               (let ((l10ncentral ".mozbuild/l10n-central"))
@@ -577,7 +568,7 @@  (define (runpaths-of-input label)
                      #f (string-join
                          '("mv"
                            "translation-base-browser/~a/base-browser.ftl"
-                           "~a/~a/browser/browser/"))
+                           "~a/~a/toolkit/toolkit/global/"))
                      lang l10ncentral lang))
                    (system
                     (format
@@ -586,7 +577,7 @@  (define (runpaths-of-input label)
                            "translation-base-browser/~a/*"
                            "~a/~a/browser/chrome/browser/"))
                      lang l10ncentral lang)))
-                 (map car #$locales)))))
+                 (list #$@locales)))))
           (add-after 'copy-basebrowser-locales 'copy-torbrowser-locales
             (lambda _
               (let ((l10ncentral ".mozbuild/l10n-central"))
@@ -601,7 +592,7 @@  (define (runpaths-of-input label)
                      #f (string-join
                          '("mv"
                            "translation-tor-browser/~a/tor-browser.ftl"
-                           "~a/~a/browser/browser/"))
+                           "~a/~a/toolkit/toolkit/global/"))
                      lang l10ncentral lang))
                    (system
                     (format
@@ -623,7 +614,7 @@  (define (runpaths-of-input label)
                      (format port "  locale/~a/ (chrome/locale/~a/*)~%"
                              lang lang)
                      (close port)))
-                 (map car #$locales)))))
+                 (list #$@locales)))))
           (replace 'configure
             (lambda _
               (invoke "./mach" "configure")))
@@ -632,14 +623,6 @@  (define (runpaths-of-input label)
               (substitute*
                   "toolkit/locales/en-US/toolkit/about/aboutAddons.ftl"
                 (("addons.mozilla.org") "gnuzilla.gnu.org"))))
-          (add-before 'build 'add-bridges ;see deploy.sh
-            (lambda _
-              (let ((port (open-file
-                           "browser/app/profile/000-tor-browser.js" "a")))
-                (display
-                 "#include ../../../tools/torbrowser/bridges.js" port)
-                (newline port)
-                (close port))))
           (replace 'build
             (lambda* (#:key (make-flags '()) (parallel-build? #t)
                       #:allow-other-keys)
@@ -739,7 +722,7 @@  (define (runpaths-of-input label)
                 (copy-recursively (in-vicinity #$assets "fontconfig")
                                   (in-vicinity lib "fontconfig"))
                 (substitute* (in-vicinity lib "fontconfig/fonts.conf")
-                  (("<dir>fonts</dir>")
+                  (("<dir prefix=\"cwd\">fonts</dir>")
                    (format #f "<dir>~a</dir>" (in-vicinity lib "fonts"))))
                 (delete-file-recursively (in-vicinity lib "fonts"))
                 (copy-recursively (in-vicinity #$assets "fonts")
@@ -805,11 +788,7 @@  (define (runpaths-of-input label)
                             "https://gnuzilla.gnu.org/mozzarella")
                     (format #t "pref(~s, ~s);~%"
                             "lightweightThemes.getMoreURL"
-                            "https://gnuzilla.gnu.org/mozzarella")
-                    ;; FIXME: https://github.com/NixOS/nixpkgs/issues/307095
-                    (format #t "pref(~s, ~a);~%"
-                            "widget.use-xdg-desktop-portal.file-picker"
-                            "1"))))))
+                            "https://gnuzilla.gnu.org/mozzarella"))))))
           (add-after 'autoconfig 'autoconfig-tor
             (lambda* (#:key inputs #:allow-other-keys)
               (let ((lib (in-vicinity #$output "lib/torbrowser"))