From debbugs-submit-bounces@debbugs.gnu.org Wed Aug 24 12:12:13 2022 Received: (at submit) by debbugs.gnu.org; 24 Aug 2022 16:12:13 +0000 Received: from localhost ([127.0.0.1]:47907 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oQszE-0001a8-8P for submit@debbugs.gnu.org; Wed, 24 Aug 2022 12:12:13 -0400 Received: from lists.gnu.org ([209.51.188.17]:49132) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oQszB-0001a0-KQ for submit@debbugs.gnu.org; Wed, 24 Aug 2022 12:12:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQszB-0005L6-B8 for guix-patches@gnu.org; Wed, 24 Aug 2022 12:12:09 -0400 Received: from outbound.soverin.net ([2a10:de80:1:4091:b9e9:2215:0:1]:52669) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQsz4-0006Gs-Ph for guix-patches@gnu.org; Wed, 24 Aug 2022 12:12:09 -0400 Received: from smtp.freedom.nl (c04smtp-lb01.int.sover.in [10.10.4.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by outbound.soverin.net (Postfix) with ESMTPS id 4MCWM05DfczLt for ; Wed, 24 Aug 2022 16:11:56 +0000 (UTC) Received: from smtp.freedom.nl (smtp.freedom.nl [10.10.4.107]) by freedom.nl DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=adriaan.se; s=soverin; t=1661357516; bh=O1gKkVlgdeyJAl/99MSAByvKpkgsfLtpGbOpPGRCGG4=; h=From:To:Cc:Subject:Date:From; b=YU2uZ0Y1A2ApaieGVV8HNwq0cS/AO7C5ohTblFU59Sa66XjnQCz5ELWgxXdPJkiDL SE67aTlQKem/owJ6gLrRIOkYHybfH8WBPHSipTJBz7CqV0zeVLwuTakdajvo9Mw7iM 2UaaASX/Dsd0JlTxTV639wp42JFbXxP+gGJ5dEts1afRKErUI/ChDUV3cQh9k+Bo4d TB10d6i5oXXORK0mqOrW1iRwpBaejAjQ+agFJ7RkLuDAkEZkUCbTmprp46bc3w8lJn rx89L7VnJN+T/FDuHCzkA2wuGWuOuWrchMbo+j8R1YFvL3H+ZbMET5ft+Uwof5qA6z waQ1oQCEBG0zA== From: Arjan Adriaanse To: guix-patches@gnu.org Subject: [PATCH] gnu: debops: Update to 3.0.2. Date: Wed, 24 Aug 2022 18:11:49 +0200 Message-Id: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Received-SPF: none client-ip=2a10:de80:1:4091:b9e9:2215:0:1; envelope-from=arjan@adriaan.se; helo=outbound.soverin.net X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_HELO_TEMPERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: submit Cc: Arjan Adriaanse X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) * gnu/packages/admin.scm (debops): Update to 3.0.2. --- gnu/local.mk | 2 - gnu/packages/admin.scm | 110 +++---- ...constants-for-external-program-names.patch | 276 ------------------ ...ps-debops-defaults-fall-back-to-less.patch | 45 --- 4 files changed, 36 insertions(+), 397 deletions(-) delete mode 100644 gnu/packages/patches/debops-constants-for-external-program-names.patch delete mode 100644 gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch diff --git a/gnu/local.mk b/gnu/local.mk index 26dfb6afe2..d98178e8b6 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1000,8 +1000,6 @@ dist_patch_DATA = \ %D%/packages/patches/dbus-c++-gcc-compat.patch \ %D%/packages/patches/dbus-c++-threading-mutex.patch \ %D%/packages/patches/dbxfs-remove-sentry-sdk.patch \ - %D%/packages/patches/debops-constants-for-external-program-names.patch \ - %D%/packages/patches/debops-debops-defaults-fall-back-to-less.patch \ %D%/packages/patches/dee-vapi.patch \ %D%/packages/patches/desmume-gcc6-fixes.patch \ %D%/packages/patches/desmume-gcc7-fixes.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index a4c5189222..edce512673 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -51,6 +51,7 @@ ;;; Copyright © 2021 Artyom V. Poptsov ;;; Copyright © 2022 Wamm K. D. ;;; Copyright © 2022 Roman Riabenko +;;; Copyright © 2022 Arjan Adriaanse ;;; ;;; This file is part of GNU Guix. ;;; @@ -147,6 +148,7 @@ (define-module (gnu packages admin) #:use-module (gnu packages polkit) #:use-module (gnu packages popt) #:use-module (gnu packages python) + #:use-module (gnu packages python-build) #:use-module (gnu packages python-crypto) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) @@ -2841,84 +2843,44 @@ (define-public ansible (define-public debops (package (name "debops") - (version "1.1.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/debops/debops") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "052b2dykdn35pdpn9s4prawl6nl6yzih8nyf54hpvhpisvjrm1v5")) - (patches - (search-patches "debops-constants-for-external-program-names.patch" - "debops-debops-defaults-fall-back-to-less.patch")))) + (version "3.0.2") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/debops/debops") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "05m9i17hyiz4mm3d1h9zi7j4gid69j08p2yg7zqpaxmby2sbnncf")))) (build-system python-build-system) - (native-inputs - (list git)) - (inputs - (list ansible - encfs - fuse - util-linux ;; for umount - findutils - gnupg - which)) - (propagated-inputs - (list python-future python-distro)) + (native-inputs (list git)) + (propagated-inputs (list python-distro + python-future + python-jinja2 + python-pyyaml + python-pyxdg + python-toml + python-dotenv + ansible + python-netaddr + python-passlib + python-ldap + python-dnspython + python-pyopenssl)) (arguments - `(#:tests? #f - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'nuke-debops-update - (lambda _ - (chmod "bin/debops-update" #o755) ; FIXME work-around git-fetch issue - (with-output-to-file "bin/debops-update" - (lambda () - (format #t "#!/bin/sh -echo 'debops is installed via guix. guix-update is useless in this case. -Please use `guix package -u debops` instead.'"))) - #t)) - ;; patch shebangs only in actuall scripts, not in files included in - ;; roles (which are to be delivered to the targte systems) - (delete `patch-generated-file-shebangs) - (replace 'patch-source-shebangs - (lambda _ - (for-each patch-shebang - (find-files "bin" - (lambda (file stat) - ;; Filter out symlinks. - (eq? 'regular (stat:type stat))) - #:stat lstat)))) - (add-after 'unpack 'fix-paths - (lambda _ - (define (substitute-program-names file) - ;; e.g. ANSIBLE_PLAYBOOK = '/gnu/store/…/bin/ansible-playbook' - (for-each - (lambda (name) - (let ((varname (string-upcase - (string-map - (lambda (c) (if (char=? c #\-) #\_ c)) - name)))) - (substitute* file - (((string-append "^(" varname " = )'.*'") line prefix) - (string-append prefix "'" (which name) "'"))))) - '("ansible-playbook" "encfs" "find" "fusermount" - "umount" "gpg" "ansible" "which"))) - (for-each substitute-program-names - '("bin/debops" - "bin/debops-padlock" - "bin/debops-task" - "debops/__init__.py" - "debops/cmds/__init__.py")) - #t))))) + `(#:phases (modify-phases %standard-phases + ;; Patching shebangs breaks scripts that are meant to be + ;; deployed to other systems and there are no scripts that + ;; do need patching. + (delete 'patch-source-shebangs) + (delete 'patch-generated-file-shebangs)))) (home-page "https://www.debops.org/") (synopsis "Collection of general-purpose Ansible roles") - (description "The Ansible roles provided by that can be used to manage -Debian or Ubuntu hosts. In addition, a default set of Ansible playbooks can -be used to apply the provided roles in a controlled way, using Ansible -inventory groups. + (description + "The Ansible roles provided by that can be used to manage Debian or +Ubuntu hosts. In addition, a default set of Ansible playbooks can be used to +apply the provided roles in a controlled way, using Ansible inventory groups. The roles are written with a high customization in mind, which can be done using Ansible inventory. This way the role and playbook code can be shared diff --git a/gnu/packages/patches/debops-constants-for-external-program-names.patch b/gnu/packages/patches/debops-constants-for-external-program-names.patch deleted file mode 100644 index b3b34ed323..0000000000 --- a/gnu/packages/patches/debops-constants-for-external-program-names.patch +++ /dev/null @@ -1,276 +0,0 @@ -From 78d5cddafebb28e2e54efeb781495b5607ddb356 Mon Sep 17 00:00:00 2001 -From: Hartmut Goebel -Date: Thu, 8 Aug 2019 15:19:48 +0200 -Subject: [PATCH] Scripts: Use constants for external program names. - -This makes it much, much easier to replace the program -with one using an absolute path. This is necessary for -e.g. Guix to keep references to these external programs. ---- - bin/debops | 10 +++++++--- - bin/debops-padlock | 21 +++++++++++++++------ - bin/debops-task | 7 +++++-- - bin/debops-update | 18 +++++++++++------- - debops/__init__.py | 17 ++++++++++++----- - debops/cmds/__init__.py | 6 +++++- - 6 files changed, 55 insertions(+), 24 deletions(-) - -diff --git a/bin/debops b/bin/debops -index 2b7ad3f88..caaeb892f 100755 ---- a/bin/debops -+++ b/bin/debops -@@ -59,6 +59,10 @@ ConfigFileHeader = """\ - # You can manipulate the contents of this file via `.debops.cfg`. - """ - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+ANSIBLE_PLAYBOOK = 'ansible-playbook' -+ - - def write_config(filename, config): - cfgparser = configparser.ConfigParser() -@@ -131,7 +135,7 @@ def gen_ansible_cfg(filename, config, project_root, playbooks_path, - os.path.join(playbooks_path, "roles"), - "/etc/ansible/roles"))) - -- ansible_version_out = subprocess.check_output(["ansible-playbook", -+ ansible_version_out = subprocess.check_output([ANSIBLE_PLAYBOOK, - "--version"]).decode() - - # Get first line and split by spaces to get second 'word'. -@@ -197,7 +201,7 @@ def main(cmd_args): - playbooks_path = '/nonexistent' - - # Make sure required commands are present -- require_commands('ansible-playbook') -+ require_commands(ANSIBLE_PLAYBOOK) - - # Check if user specified a potential playbook name as the first - # argument. If yes, use it as the playbook name and remove it from -@@ -256,7 +260,7 @@ def main(cmd_args): - print("Running Ansible playbooks:") - for element in play_list: - print(element) -- return subprocess.call(['ansible-playbook'] + play_list + arg_list) -+ return subprocess.call([ANSIBLE_PLAYBOOK] + play_list + arg_list) - finally: - if revert_unlock: - padlock_lock(encfs_encrypted) -diff --git a/bin/debops-padlock b/bin/debops-padlock -index bfdfb8e06..2a97716cd 100755 ---- a/bin/debops-padlock -+++ b/bin/debops-padlock -@@ -67,6 +67,14 @@ devrandom = os.environ.get('DEVRANDOM', "/dev/urandom") - - SCRIPT_FILENAME = 'padlock-script' - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+ENCFS = 'encfs' -+FIND = 'find' -+FUSERMOUNT = 'fusermount' -+UMOUNT = 'umount' -+GPG = 'gpg' -+ - # ---- DebOps environment setup ---- - - -@@ -80,9 +88,9 @@ def main(subcommand_func, **kwargs): - # Make sure required commands are present - # OS X compatibility - if sys.platform == 'darwin': -- require_commands('encfs', 'find', 'umount', 'gpg') -+ require_commands(ENCFS, FIND, UMOUNT, GPG) - else: -- require_commands('encfs', 'find', 'fusermount', 'gpg') -+ require_commands(ENCFS, FIND, FUSERMOUNT, GPG) - - inventory_path = find_inventorypath(project_root, required=False) - # If inventory hasn't been found automatically, assume it's the default -@@ -121,7 +129,7 @@ def init(encfs_decrypted, encfs_encrypted, recipients): - # Generate a random password and encrypt it with GPG keys of recipients. - print("Generating a random", ENCFS_KEYFILE_LENGTH, "char password") - pwd = gen_pwd() -- gpg = subprocess.Popen(['gpg', '--encrypt', '--armor', -+ gpg = subprocess.Popen([GPG, '--encrypt', '--armor', - '--output', encfs_keyfile] + recipients, - stdin=subprocess.PIPE) - gpg.communicate(pwd.encode('utf-8')) -@@ -133,9 +141,10 @@ def init(encfs_decrypted, encfs_encrypted, recipients): - # NB2: We can not use padlock_unlock here, because the config file - # does not yet exist. - encfs = subprocess.Popen([ -- 'encfs', encfs_encrypted, encfs_decrypted, -+ ENCFS, encfs_encrypted, encfs_decrypted, - '--extpass', -- 'gpg --decrypt --no-mdc-warning --output - '+shquote(encfs_keyfile)], -+ GPG + ' --decrypt --no-mdc-warning --output - ' -+ + shquote(encfs_keyfile)], - stdin=subprocess.PIPE) - encfs.communicate(('p\n'+pwd).encode('utf-8')) - -@@ -154,7 +163,7 @@ def init(encfs_decrypted, encfs_encrypted, recipients): - - # Protect the EncFS configuration file by also encrypting it with - # the GPG keys of recipients. -- subprocess.call(['gpg', '--encrypt', '--armor', -+ subprocess.call([GPG, '--encrypt', '--armor', - '--output', encfs_configfile+'.asc'] - + recipients + [encfs_configfile]) - os.remove(encfs_configfile) -diff --git a/bin/debops-task b/bin/debops-task -index 223e5f834..dc31ad4e6 100755 ---- a/bin/debops-task -+++ b/bin/debops-task -@@ -49,11 +49,14 @@ project_root = find_debops_project(required=True) - # todo: need to decide on semantics! - # config = read_config(project_root) - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+ANSIBLE = 'ansible' - - # ---- Main script ---- - - # Make sure required commands are present --require_commands('ansible') -+require_commands(ANSIBLE) - - ansible_inventory = find_inventorypath(project_root) - -@@ -71,5 +74,5 @@ if INSECURE: - os.environ['ANSIBLE_HOST_KEY_CHECKING'] = 'False' - - # Run ansible with custom environment --cmd = ['ansible'] + module + sys.argv[1:] -+cmd = [ANSIBLE] + module + sys.argv[1:] - subprocess.call(cmd) -diff --git a/bin/debops-update b/bin/debops-update -index 88c5e2c82..cc7e57cb0 100755 ---- a/bin/debops-update -+++ b/bin/debops-update -@@ -90,6 +90,10 @@ GALAXY_REQUIREMENTS = "galaxy/requirements.txt" - # Default Ansible Galaxy user account name - GALAXY_ACCOUNT = "debops" - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+GIT = 'git' -+ - - # ---- Functions ---- - -@@ -137,7 +141,7 @@ def clone_git_repository(repo_uri, branch, destination, dry_run=False): - if dry_run: - print("Cloning '%s' to %s..." % (repo_uri, destination)) - else: -- subprocess.call(['git', 'clone', '--quiet', '--branch', branch, -+ subprocess.call([GIT, 'clone', '--quiet', '--branch', branch, - repo_uri, destination]) - - -@@ -152,22 +156,22 @@ def update_git_repository(path, dry_run=False, remote_uri=False): - os.chdir(path) - - if dry_run: -- subprocess.call(['git', 'fetch']) -- subprocess.call(['git', 'diff', 'HEAD', 'origin', '--stat']) -+ subprocess.call([GIT, 'fetch']) -+ subprocess.call([GIT, 'diff', 'HEAD', 'origin', '--stat']) - else: - # Get the current sha of the head branch - current_sha = subprocess.check_output( -- ['git', 'rev-parse', 'HEAD']).strip() -+ [GIT, 'rev-parse', 'HEAD']).strip() - - # Fetch it silently and store the new sha -- subprocess.call(['git', 'fetch', '--quiet']) -+ subprocess.call([GIT, 'fetch', '--quiet']) - fetch_sha = subprocess.check_output( -- ['git', 'rev-parse', 'FETCH_HEAD']).strip() -+ [GIT, 'rev-parse', 'FETCH_HEAD']).strip() - - if current_sha != fetch_sha: - print() - print('--') -- subprocess.call(['git', 'merge', fetch_sha]) -+ subprocess.call([GIT, 'merge', fetch_sha]) - - if remote_uri: - compare_uri = (remote_uri + '/compare/' + current_sha[:7] -diff --git a/debops/__init__.py b/debops/__init__.py -index 1c2cedcb0..da8430e41 100644 ---- a/debops/__init__.py -+++ b/debops/__init__.py -@@ -93,6 +93,13 @@ ENCFS_KEYFILE = ".encfs6.keyfile" - # Length of the random EncFS password stored in encrypted keyfile - ENCFS_KEYFILE_LENGTH = 256 - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+ENCFS = 'encfs' -+FUSERMOUNT = 'fusermount' -+UMOUNT = 'umount' -+GPG = 'gpg' -+ - - # ---- Functions ---- - -@@ -180,9 +187,9 @@ def padlock_lock(encrypted_path): - return False - # OS X compatibility - if sys.platform == 'darwin': -- subprocess.call(['umount', decrypted_path]) -+ subprocess.call([UMOUNT, decrypted_path]) - else: -- subprocess.call(['fusermount', '-u', decrypted_path]) -+ subprocess.call([FUSERMOUNT, '-u', decrypted_path]) - return True - - -@@ -237,14 +244,14 @@ def padlock_unlock(encrypted_path): - # Start encfs. It will wait for input on the `configfile` named - # pipe. - encfs = subprocess.Popen([ -- 'encfs', encrypted_path, decrypted_path, -+ ENCFS, encrypted_path, decrypted_path, - '--extpass', -- 'gpg --decrypt --no-mdc-warning --output - %s' % shquote(keyfile)]) -+ GPG + ' --decrypt --no-mdc-warning --output - %s' % shquote(keyfile)]) - # now decrypt the config and write it into the named pipe - with open(configfile, 'w') as fh: - # NB: gpg must write to stdout to avoid it is asking whether - # the file should be overwritten -- subprocess.Popen(['gpg', -+ subprocess.Popen([GPG, - '--decrypt', '--no-mdc-warning', '--output', '-', - crypted_configfile], stdout=fh).wait() - encfs.wait() -diff --git a/debops/cmds/__init__.py b/debops/cmds/__init__.py -index b221fa191..9fabf43a5 100644 ---- a/debops/cmds/__init__.py -+++ b/debops/cmds/__init__.py -@@ -55,6 +55,10 @@ SCRIPT_NAME = os.path.basename(sys.argv[0]) - # command line) - INSECURE = bool(os.environ.get('INSECURE', False)) - -+# External programms used. List here for easy substitution for -+# hard-coded paths. -+WHICH = 'which' -+ - - def error_msg(message, severity="Error"): - """ -@@ -70,7 +74,7 @@ def require_commands(*cmd_names): - Check if required commands exist. - """ - def command_exists(cmd_name): -- which = "where" if platform.system() == "Windows" else "which" -+ which = "where" if platform.system() == "Windows" else WHICH - return not subprocess.call([which, cmd_name], - stdout=DEVNULL, stderr=subprocess.STDOUT) - --- -2.21.0 - diff --git a/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch b/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch deleted file mode 100644 index bbb6b7c08e..0000000000 --- a/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 5059daf8bd59a83f520c14731173ea76ce8b8661 Mon Sep 17 00:00:00 2001 -From: Hartmut Goebel -Date: Sun, 8 Sep 2019 13:09:15 +0200 -Subject: [PATCH] [debops-defaults] If `view` is not available, try less, etc. - ---- - bin/debops-defaults | 21 +++++++++++++++------ - 1 file changed, 15 insertions(+), 6 deletions(-) - -diff --git a/bin/debops-defaults b/bin/debops-defaults -index 9dd87fe0a..3e3db4c41 100755 ---- a/bin/debops-defaults -+++ b/bin/debops-defaults -@@ -96,13 +96,22 @@ def main(role_list): - config = read_config(project_root) - playbooks_path = find_playbookpath(config, project_root, required=True) - -- # Make sure required commands are present -- require_commands('view') -- -- if sys.stdout.isatty(): -+ # Check if one of the output commands is present -+ sys.stdout = io.BytesIO() # suppress error message, if any -+ for cmd_args in (('view', '+set ft=yaml', '-'), -+ ('less', '-'), -+ ('more', '-')): -+ try: -+ require_commands(cmd_args[0]) -+ break -+ except SystemExit: -+ # this command was not found -+ cmd_args = None -+ sys.stdout = sys.__stdout__ -+ -+ if cmd_args and sys.stdout.isatty(): - # if script is run as standalone, redirect to view -- view = subprocess.Popen(['view', '+set ft=yaml', '-'], -- stdin=subprocess.PIPE) -+ view = subprocess.Popen(cmd_args, stdin=subprocess.PIPE) - try: - aggregate_defaults(playbooks_path, role_list, view.stdin) - except IOError as e: --- -2.21.0 - base-commit: d769cf81d83d75400e5ed0394b839d8ddb770384 -- 2.37.0