From patchwork Mon Nov 2 00:22:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marius Bakke X-Patchwork-Id: 24948 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id E87DE27BBF3; Mon, 2 Nov 2020 00:23:28 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 6386A27BBF2 for ; Mon, 2 Nov 2020 00:23:28 +0000 (GMT) Received: from localhost ([::1]:33800 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kZNd9-0000I2-Km for patchwork@mira.cbaines.net; Sun, 01 Nov 2020 19:23:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36184) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kZNcl-0008Fs-K4 for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:55728) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kZNcl-00030B-Ab for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kZNcl-0004nK-7V for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:03 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#44335] [PATCH v2 1/3] gnu: ungoogled-chromium: Add search path for installed extensions. Resent-From: Marius Bakke Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 02 Nov 2020 00:23:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 44335 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 44335@debbugs.gnu.org Received: via spool by 44335-submit@debbugs.gnu.org id=B44335.160427657118364 (code B ref 44335); Mon, 02 Nov 2020 00:23:03 +0000 Received: (at 44335) by debbugs.gnu.org; 2 Nov 2020 00:22:51 +0000 Received: from localhost ([127.0.0.1]:39031 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kZNcU-0004lt-Vt for submit@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:51 -0500 Received: from eggs.gnu.org ([209.51.188.92]:36024) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kZNcM-0004lD-56 for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:42 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35373) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kZNcG-0002y8-Uh for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:32 -0500 Received: from host-37-191-236-253.lynet.no ([37.191.236.253]:46726 helo=localhost) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1kZNcG-00076k-Ct for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:32 -0500 From: Marius Bakke Date: Mon, 2 Nov 2020 01:22:26 +0100 Message-Id: <20201102002228.5971-2-marius@gnu.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201102002228.5971-1-marius@gnu.org> References: <20201102002228.5971-1-marius@gnu.org> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/packages/patches/ungoogled-chromium-search-path.patch: New file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/chromium.scm (%guix-patches): New variable. (ungoogled-chromium-snippet): Apply %GUIX-PATCHES. (ungoogled-chromium)[arguments]: Don't hard-code extensions directory. [native-search-paths]: New field. --- gnu/local.mk | 1 + gnu/packages/chromium.scm | 18 ++++++------ .../ungoogled-chromium-search-path.patch | 28 +++++++++++++++++++ 3 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 gnu/packages/patches/ungoogled-chromium-search-path.patch diff --git a/gnu/local.mk b/gnu/local.mk index d4d04c01b8..51550e80cb 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1642,6 +1642,7 @@ dist_patch_DATA = \ %D%/packages/patches/u-boot-riscv64-fix-extlinux.patch \ %D%/packages/patches/ucx-tcp-iface-ioctl.patch \ %D%/packages/patches/udiskie-no-appindicator.patch \ + %D%/packages/patches/ungoogled-chromium-search-path.patch \ %D%/packages/patches/ungoogled-chromium-system-nspr.patch \ %D%/packages/patches/unison-fix-ocaml-4.08.patch \ %D%/packages/patches/unknown-horizons-python-3.8-distro.patch \ diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm index f32a779805..06c57acd28 100644 --- a/gnu/packages/chromium.scm +++ b/gnu/packages/chromium.scm @@ -334,6 +334,10 @@ (base32 "18p9a7qffmy8m03nqva7maalgil13lj2mn0s56v3crbs4wk4lalj")))) +(define %guix-patches + (list (local-file (search-patch "ungoogled-chromium-system-nspr.patch")) + (local-file (search-patch "ungoogled-chromium-search-path.patch")))) + ;; This is a source 'snippet' that does the following: ;; *) Applies various patches for unbundling purposes and libstdc++ compatibility. ;; *) Runs the ungoogled patch-, domain substitution-, and scrubbing scripts. @@ -356,9 +360,7 @@ (invoke "patch" "-p1" "--force" "--input" patch "--no-backup-if-mismatch")) (append '#+%debian-patches '#+%arch-patches - '#+(list (local-file - (search-patch - "ungoogled-chromium-system-nspr.patch"))))) + '#+%guix-patches)) (with-directory-excursion #+%ungoogled-origin (format #t "Ungooglifying...~%") @@ -571,11 +573,6 @@ (find-files (string-append "third_party/webrtc/modules" "/audio_coding/codecs/opus"))) - (substitute* "chrome/common/chrome_paths.cc" - (("/usr/share/chromium/extensions") - ;; TODO: Add ~/.guix-profile. - "/run/current-system/profile/share/chromium/extensions")) - ;; Many files try to include ICU headers from "third_party/icu/...". ;; Remove the "third_party/" prefix to use system headers instead. (substitute* (find-files "chrome" "\\.cc$") @@ -840,6 +837,11 @@ ("udev" ,eudev) ("valgrind" ,valgrind) ("vulkan-headers" ,vulkan-headers))) + (native-search-paths + (list (search-path-specification + (variable "CHROMIUM_EXTENSION_DIRECTORY") + (separator #f) ;single entry + (files '("share/chromium/extensions"))))) ;; Building Chromium takes ... a very long time. On a single core, a busy ;; mid-end x86 system may need more than 24 hours to complete the build. diff --git a/gnu/packages/patches/ungoogled-chromium-search-path.patch b/gnu/packages/patches/ungoogled-chromium-search-path.patch new file mode 100644 index 0000000000..5ef9c56b52 --- /dev/null +++ b/gnu/packages/patches/ungoogled-chromium-search-path.patch @@ -0,0 +1,28 @@ +Look for system-installed extensions in CHROMIUM_EXTENSION_DIRECTORY instead +of the hard-coded /usr/share/chromium/extensions. + +--- a/chrome/common/chrome_paths.cc ++++ b/chrome/common/chrome_paths.cc +@@ -4,6 +4,7 @@ + + #include "chrome/common/chrome_paths.h" + ++#include "base/environment.h" + #include "base/files/file_util.h" + #include "base/logging.h" + #include "base/native_library.h" +@@ -511,7 +512,13 @@ + #endif + #if defined(OS_LINUX) || defined(OS_CHROMEOS) + case chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS: { +- cur = base::FilePath(kFilepathSinglePrefExtensions); ++ std::unique_ptr environment(base::Environment::Create()); ++ std::string extension_dir; ++ if (environment->GetVar("CHROMIUM_EXTENSION_DIRECTORY", &extension_dir)) { ++ cur = base::FilePath(extension_dir); ++ } else { ++ cur = base::FilePath(kFilepathSinglePrefExtensions); ++ } + break; + } + #endif From patchwork Mon Nov 2 00:22:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Marius Bakke X-Patchwork-Id: 24946 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 92EAD27BBF2; Mon, 2 Nov 2020 00:23:21 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id F0C7327BBF5 for ; Mon, 2 Nov 2020 00:23:14 +0000 (GMT) Received: from localhost ([::1]:60946 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kZNcw-0008GZ-2N for patchwork@mira.cbaines.net; Sun, 01 Nov 2020 19:23:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36192) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kZNcl-0008G2-W4 for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:04 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:55729) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kZNcl-00030H-Mp for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kZNcl-0004nS-Jr for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:03 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#44335] [PATCH v2 2/3] Add (gnu build chromium-extension). Resent-From: Marius Bakke Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 02 Nov 2020 00:23:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 44335 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 44335@debbugs.gnu.org Received: via spool by 44335-submit@debbugs.gnu.org id=B44335.160427657318373 (code B ref 44335); Mon, 02 Nov 2020 00:23:03 +0000 Received: (at 44335) by debbugs.gnu.org; 2 Nov 2020 00:22:53 +0000 Received: from localhost ([127.0.0.1]:39035 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kZNcZ-0004m9-GL for submit@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:53 -0500 Received: from eggs.gnu.org ([209.51.188.92]:36034) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kZNcO-0004lG-61 for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:45 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35374) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kZNcI-0002yE-Vt for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:34 -0500 Received: from host-37-191-236-253.lynet.no ([37.191.236.253]:46728 helo=localhost) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1kZNcI-00077X-E5 for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:34 -0500 From: Marius Bakke Date: Mon, 2 Nov 2020 01:22:27 +0100 Message-Id: <20201102002228.5971-3-marius@gnu.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201102002228.5971-1-marius@gnu.org> References: <20201102002228.5971-1-marius@gnu.org> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/build/chromium-extension.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Adjust accordingly. --- gnu/build/chromium-extension.scm | 192 +++++++++++++++++++++++++++++++ gnu/local.mk | 1 + 2 files changed, 193 insertions(+) create mode 100644 gnu/build/chromium-extension.scm diff --git a/gnu/build/chromium-extension.scm b/gnu/build/chromium-extension.scm new file mode 100644 index 0000000000..35f49d788c --- /dev/null +++ b/gnu/build/chromium-extension.scm @@ -0,0 +1,192 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2020 Marius Bakke +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu build chromium-extension) + #:use-module (gcrypt base16) + #:use-module ((gcrypt hash) #:prefix hash:) + #:use-module (ice-9 iconv) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (gnu packages base) + #:use-module (gnu packages check) + #:use-module (gnu packages chromium) + #:use-module (gnu packages gnupg) + #:use-module (gnu packages tls) + #:use-module (gnu packages xorg) + #:use-module (guix build-system trivial) + #:export (make-chromium-extension)) + +;;; Commentary: +;;; +;;; Tools to deal with Chromium extensions. +;;; +;;; Code: + +(define (make-signing-key seed) + "Return a derivation for a deterministic PKCS #8 private key using SEED." + + (define sha256sum + (bytevector->base16-string (hash:sha256 (string->bytevector seed "UTF-8")))) + + ;; certtool.c wants a 56 byte seed for a 2048 bit key. + (define size 2048) + (define normalized-seed (string-take sha256sum 56)) + + (computed-file (string-append seed "-signing-key.pem") + #~(system* #$(file-append gnutls "/bin/certtool") + "--generate-privkey" + "--key-type=rsa" + "--pkcs8" + ;; Use the provable FIPS-PUB186-4 algorithm for + ;; deterministic results. + "--provable" + "--password=" + "--no-text" + (string-append "--bits=" #$(number->string size)) + (string-append "--seed=" #$normalized-seed) + "--outfile" #$output) + #:local-build? #t)) + +(define* (make-crx package+output signing-key) + "Create a signed \".crx\" file from the unpacked Chromium extension residing +in PACKAGE+OUTPUT, a (list package output) pair. The extension will be signed +with SIGNING-KEY." + (with-imported-modules '((guix build utils)) + (computed-file + "chromium-extension.crx" + #~(begin + ;; This is not great. We pull Xorg and Chromium just to Zip and + ;; sign an extension. This should be implemented with something + ;; lighter. (TODO: where is the documentation..?) + (use-modules (guix build utils)) + (let ((chromium #$(file-append ungoogled-chromium "/bin/chromium")) + (xvfb #$(file-append xorg-server "/bin/Xvfb")) + (packdir "/tmp/extension")) + (mkdir-p (dirname packdir)) + (copy-recursively (ungexp (car package+output) (cadr package+output)) + packdir) + (system (string-append xvfb " :1 &")) + (setenv "DISPLAY" ":1") + (sleep 2) ;give Xorg some time to initialize... + ;; Chromium stores the current time in the .crx Zip archive. + ;; Sidestep that by using "faketime" for determinism. + ;; FIXME (core-updates): faketime is missing an absolute reference + ;; to 'date', hence the need to set PATH. + (setenv "PATH" #$(file-append coreutils "/bin")) + (invoke #$(file-append libfaketime "/bin/faketime") + "2000-01-01 00:00:00" + chromium + "--user-data-dir=/tmp/signing-profile" + (string-append "--pack-extension=" packdir) + (string-append "--pack-extension-key=" #$signing-key)) + (copy-file (string-append packdir ".crx") #$output))) + #:local-build? #t))) + +(define* (crx->chromium-json crx version) + "Return a derivation that creates a Chromium JSON settings file for the +unpacked extension residing in output PACKAGE-OUTPUT of PACKAGE." + (computed-file "extension.json" + #~(call-with-output-file #$output + (lambda (port) + ;; Documentation for the JSON format can be found in + ;; extensions/common/extension.h and + ;; chrome/browser/extensions/external_provider_impl.cc. + (format port " +{ + \"external_crx\": \"~a\", + \"external_version\": \"~a\" +} +" + #$crx #$version))) + #:local-build? #t)) + + +(define (signing-key->public-der key) + "Return a derivation for a file containing the public key of KEY in DER +format." + (computed-file "der" + #~(system* #$(file-append gnutls "/bin/certtool") + "--load-privkey" #$key + "--pubkey-info" + "--outfile" #$output + "--outder") + #:local-build? #t)) + +(define (chromium-json->profile-object json signing-key) + "Return a derivation that installs JSON to the directory searched by +Chromium, using a file name (aka extension ID) derived from SIGNING-KEY." + (define der (signing-key->public-der signing-key)) + + (with-extensions (list guile-gcrypt) + (with-imported-modules '((guix build utils)) + (computed-file + "chromium-extension.json" + #~(begin + (use-modules (guix build utils) + (gcrypt base16) + (gcrypt hash)) + (define (base16-string->chromium-base16 str) + ;; Translate STR, a hexadecimal string, to a Chromium-style + ;; representation using the letters a-p (where a=0, p=15). + (define s1 "0123456789abcdef") + (define s2 "abcdefghijklmnop") + (let loop ((chars (string->list str)) + (converted '())) + (if (null? chars) + (list->string (reverse converted)) + (loop (cdr chars) (cons (string-ref + s2 (string-index s1 (car chars))) + converted))))) + + (let* ((checksum (bytevector->base16-string (file-sha256 #$der))) + (file-name (base16-string->chromium-base16 + (string-take checksum 32))) + (extension-directory (string-append #$output + "/share/chromium/extensions"))) + (mkdir-p extension-directory) + (symlink #$json (string-append extension-directory "/" + file-name ".json")))) + #:local-build? #t)))) + +(define* (make-chromium-extension p #:optional (output "out")) + "Create a Chromium extension from package P and return a package that, +when installed, will make the extension contained in P available as a +Chromium browser extension. OUTPUT specifies which output of P to use." + (let* ((pname (package-name p)) + (version (package-version p)) + (signing-key (make-signing-key pname))) + (package + (inherit p) + (name (string-append pname "-chromium")) + (build-system trivial-build-system) + (native-inputs '()) + (inputs + `(("extension" ,(chromium-json->profile-object + (crx->chromium-json (make-crx (list p output) + signing-key) + version) + signing-key)))) + (propagated-inputs '()) + (outputs '("out")) + (arguments + '(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + (copy-recursively (assoc-ref %build-inputs "extension") + (assoc-ref %outputs "out")))))))) diff --git a/gnu/local.mk b/gnu/local.mk index 51550e80cb..e847f8c16a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -657,6 +657,7 @@ GNU_SYSTEM_MODULES = \ %D%/build/accounts.scm \ %D%/build/activation.scm \ %D%/build/bootloader.scm \ + %D%/build/chromium-extension.scm \ %D%/build/cross-toolchain.scm \ %D%/build/image.scm \ %D%/build/file-systems.scm \ From patchwork Mon Nov 2 00:22:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Marius Bakke X-Patchwork-Id: 24945 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 45DD127BBF2; Mon, 2 Nov 2020 00:23:21 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id A858F27BBF6 for ; Mon, 2 Nov 2020 00:23:15 +0000 (GMT) Received: from localhost ([::1]:32776 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kZNcw-0008Ip-SB for patchwork@mira.cbaines.net; Sun, 01 Nov 2020 19:23:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36194) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kZNcm-0008G8-Bu for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:04 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:55730) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kZNcm-00030M-2s for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:04 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kZNcm-0004nZ-0C for guix-patches@gnu.org; Sun, 01 Nov 2020 19:23:04 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#44335] [PATCH v2 3/3] gnu: Add ublock-origin-chromium. Resent-From: Marius Bakke Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 02 Nov 2020 00:23:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 44335 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 44335@debbugs.gnu.org Received: via spool by 44335-submit@debbugs.gnu.org id=B44335.160427657318380 (code B ref 44335); Mon, 02 Nov 2020 00:23:03 +0000 Received: (at 44335) by debbugs.gnu.org; 2 Nov 2020 00:22:53 +0000 Received: from localhost ([127.0.0.1]:39037 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kZNcb-0004mI-8D for submit@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:53 -0500 Received: from eggs.gnu.org ([209.51.188.92]:36036) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kZNcQ-0004lJ-9m for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:46 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:35375) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kZNcL-0002yI-2i for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:37 -0500 Received: from host-37-191-236-253.lynet.no ([37.191.236.253]:46730 helo=localhost) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1kZNcK-00078N-Eo for 44335@debbugs.gnu.org; Sun, 01 Nov 2020 19:22:36 -0500 From: Marius Bakke Date: Mon, 2 Nov 2020 01:22:28 +0100 Message-Id: <20201102002228.5971-4-marius@gnu.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201102002228.5971-1-marius@gnu.org> References: <20201102002228.5971-1-marius@gnu.org> MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/packages/browser-extensions.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. --- gnu/local.mk | 1 + gnu/packages/browser-extensions.scm | 100 ++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 gnu/packages/browser-extensions.scm diff --git a/gnu/local.mk b/gnu/local.mk index e847f8c16a..c14612cdef 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -111,6 +111,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/boost.scm \ %D%/packages/bootloaders.scm \ %D%/packages/bootstrap.scm \ + %D%/packages/browser-extensions.scm \ %D%/packages/build-tools.scm \ %D%/packages/busybox.scm \ %D%/packages/c.scm \ diff --git a/gnu/packages/browser-extensions.scm b/gnu/packages/browser-extensions.scm new file mode 100644 index 0000000000..064a916e73 --- /dev/null +++ b/gnu/packages/browser-extensions.scm @@ -0,0 +1,100 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2020 Marius Bakke +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages browser-extensions) + #:use-module (guix packages) + #:use-module (guix git-download) + #:use-module (guix build-system gnu) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu build chromium-extension) + #:use-module (gnu packages compression) + #:use-module (gnu packages python)) + +(define uassets + (let ((commit "95d609786680bf4cf267b1dff3f429af88040da1")) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/uBlockOrigin/uAssets.git") + (commit commit))) + (file-name (git-file-name "uAssets" (string-take commit 9))) + (sha256 + (base32 + "070v2g0hyxvqv77b6z404hdlggl0sq2bfhsfl4a84k93p9pwwlrq"))))) + +(define ublock-origin + (package + (name "ublock-origin") + (version "1.30.8") + (home-page "https://github.com/gorhill/uBlock") + (source (origin + (method git-fetch) + (uri (git-reference (url home-page) (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1y4dq4p4j4qrw6gfdcbpyigqjinqq3jm8r5x9h5ariiv9s8856w7")))) + (build-system gnu-build-system) + (outputs '("xpi" "firefox" "chromium")) + (arguments + '(#:tests? #f ;no tests + #:allowed-references () + #:phases + (modify-phases (map (lambda (phase) + (assq phase %standard-phases)) + '(set-paths unpack patch-source-shebangs)) + (add-after 'unpack 'link-uassets + (lambda* (#:key native-inputs inputs #:allow-other-keys) + (symlink (string-append (assoc-ref (or native-inputs inputs) + "uassets")) + "../uAssets") + #t)) + (add-after 'unpack 'make-files-writable + (lambda _ + ;; The build system copies some files and later tries + ;; modifying them. + (for-each make-file-writable (find-files ".")) + #true)) + (add-after 'patch-source-shebangs 'build-xpi + (lambda _ + (invoke "./tools/make-firefox.sh" "all"))) + (add-after 'build-xpi 'build-chromium + (lambda _ + (invoke "./tools/make-chromium.sh"))) + (add-after 'build-chromium 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((firefox (assoc-ref outputs "firefox")) + (xpi (assoc-ref outputs "xpi")) + (chromium (assoc-ref outputs "chromium"))) + (install-file "dist/build/uBlock0.firefox.xpi" + (string-append xpi "/lib/mozilla/extensions")) + (copy-recursively "dist/build/uBlock0.firefox" firefox) + (copy-recursively "dist/build/uBlock0.chromium" chromium) + #true)))))) + (native-inputs + `(("python" ,python-wrapper) + ("uassets" ,uassets) + ("zip" ,zip))) + (synopsis "Block unwanted content from web sites") + (description + "uBlock Origin is a @dfn{wide spectrum blocker} for IceCat and +ungoogled-chromium.") + (license license:gpl3+))) + +(define-public ublock-origin/chromium + (make-chromium-extension ublock-origin "chromium"))