From d0a137d56005de3cff1828072911bfeda0179d09 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 09:24:19 -0500 Subject: Add Makefile for build testing outside of Emacs. --- Makefile | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3b59df4 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +EMACS?= emacs + +ELCS= nspawn-tramp.elc + +.PHONY: all clean + +all: $(ELCS) + +clean: + rm -f $(ELCS) + +%.elc: %.el + $(EMACS) -Q --batch -f batch-byte-compile $< -- cgit v1.2.3 From c90c85f1e911d9d96157c7f15629ea43fc1a9369 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 10:42:54 -0500 Subject: Minor changes as suggested by Stefan Monnier. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Copyright assignment is current as of 2022 - Documentation for user/container to match GNU guidelines. - Reword “Privileges” section to be more natural. - Change ‘nspawn-tramp-machinectl-path’ to ’nspawn-tramp-machinectl-file-name’ to match GNU guidelines. --- nspawn-tramp.el | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/nspawn-tramp.el b/nspawn-tramp.el index e523340..2552d24 100644 --- a/nspawn-tramp.el +++ b/nspawn-tramp.el @@ -1,6 +1,6 @@ ;;; nspawn-tramp.el -- TRAMP integration for systemd-nspawn containers -*- lexical-binding: t; -*- -;; Copyright © 2021 Free Software Foundation, Inc. +;; Copyright © 2021-2022 Free Software Foundation, Inc. ;; Author: Brian Cully ;; Maintainer: Brian Cully @@ -39,16 +39,16 @@ ;; ;; Open a file on a running systemd-nspawn container: ;; -;; C-x C-f /nspawn:user@container:/path/to/file +;; C-x C-f /nspawn:USER@CONTAINER:/path/to/file ;; ;; Where: -;; ‘user’ is the user on the container to connect as (optional) -;; ‘container’ is the container to connect to +;; USER is the user on the container to connect as (optional) +;; CONTAINER is the container to connect to ;; ;; ## Privileges ;; ;; systemd-nspawn and its container utilities often require super user -;; access to run, and this package does not do privilege escalation in +;; access to run, and this package does not escalate privileges in ;; order to accomplish that. ;; ;; One way of working around this using TRAMP’s built-in multi-hop @@ -69,8 +69,8 @@ :link '(url-link :tag "Github" "https://github.com/bjc/nspawn-tramp") :link '(emacs-commentary-link :tag "Commentary" "nspawn-tramp")) -(defcustom nspawn-tramp-machinectl-path "machinectl" - "Path to machinectl executable." +(defcustom nspawn-tramp-machinectl-file-name "machinectl" + "File name of machinectl executable." :type 'string :group 'nspawn-tramp) @@ -83,7 +83,7 @@ This function is used by ‘tramp-set-completion-function’, please see its function help for a description of the format." (let* ((raw-list (shell-command-to-string - (concat nspawn-tramp-machinectl-path + (concat nspawn-tramp-machinectl-file-name " list -q"))) (lines (cdr (split-string raw-list "\n"))) (first-words (mapcar (lambda (line) (car (split-string line))) @@ -93,9 +93,9 @@ see its function help for a description of the format." (defun nspawn-tramp--add-method () - "Add TRAMP method handler for nspawn conainers." + "Add TRAMP method handler for nspawn containers." (push `(,nspawn-tramp-method - (tramp-login-program ,nspawn-tramp-machinectl-path) + (tramp-login-program ,nspawn-tramp-machinectl-file-name) (tramp-login-args (("shell") ("-q") ("--uid" "%u") -- cgit v1.2.3 From ebaa155c83662f0c51a47d01ea2ff5b11e17276f Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 10:57:02 -0500 Subject: Update README.org to point to add ELPA install instructions. --- README.org | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.org b/README.org index 0cc3454..0df5ea1 100644 --- a/README.org +++ b/README.org @@ -3,7 +3,9 @@ TRAMP system. * Installation -This package is not yet available on the various package sites +** ELPA +This package is available on [[https://elpa.gnu.org/packages/nspawn-tramp.html][GNU ELPA]] and can be installed with +=M-x package-install RET nspawn-tramp RET= from within Emacs itself. ** Direct download Download this repository to some location, then add the following to -- cgit v1.2.3 From b8380ee8a7c15ad4b96963d224969fc1a0337180 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 10:58:02 -0500 Subject: Update version to 1.0 in preparation for ELPA release. --- nspawn-tramp.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nspawn-tramp.el b/nspawn-tramp.el index 2552d24..e96f0aa 100644 --- a/nspawn-tramp.el +++ b/nspawn-tramp.el @@ -7,7 +7,7 @@ ;; URL: https://github.com/bjc/nspawn-tramp ;; Keywords: tramp, nspawn, machinectl, systemd, systemd-nspawn ;; Maintainer: Brian Cully -;; Version: 0.1 +;; Version: 1.0 ;; Package-Requires: ((emacs "23")) ;;; License: -- cgit v1.2.3 From 87a1d644268c387109ea7b2eaa07854659aad697 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 10:59:50 -0500 Subject: =?UTF-8?q?Remove=20redundant=20=E2=80=98Maintainer=E2=80=99=20tag?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nspawn-tramp.el | 1 - 1 file changed, 1 deletion(-) diff --git a/nspawn-tramp.el b/nspawn-tramp.el index e96f0aa..ee15bd0 100644 --- a/nspawn-tramp.el +++ b/nspawn-tramp.el @@ -6,7 +6,6 @@ ;; Maintainer: Brian Cully ;; URL: https://github.com/bjc/nspawn-tramp ;; Keywords: tramp, nspawn, machinectl, systemd, systemd-nspawn -;; Maintainer: Brian Cully ;; Version: 1.0 ;; Package-Requires: ((emacs "23")) -- cgit v1.2.3 From f10849740aba20afb295af80e99a0c91c620bfb9 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 15:19:47 -0500 Subject: =?UTF-8?q?Rename=20=E2=80=9CTRAMP=E2=80=9D=20to=20=E2=80=9CTramp?= =?UTF-8?q?=E2=80=9D,=20it=E2=80=99s=20proper=20spelling.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nspawn-tramp.el | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/nspawn-tramp.el b/nspawn-tramp.el index ee15bd0..33d239c 100644 --- a/nspawn-tramp.el +++ b/nspawn-tramp.el @@ -1,4 +1,4 @@ -;;; nspawn-tramp.el -- TRAMP integration for systemd-nspawn containers -*- lexical-binding: t; -*- +;;; nspawn-tramp.el -- Tramp integration for systemd-nspawn containers -*- lexical-binding: t; -*- ;; Copyright © 2021-2022 Free Software Foundation, Inc. @@ -27,7 +27,7 @@ ;;; Commentary: ;; -;; ‘nspawn-tramp’ allows TRAMP to work with containers provided by +;; ‘nspawn-tramp’ allows Tramp to work with containers provided by ;; systemd-nspawn. ;; ;; ## Usage @@ -50,7 +50,7 @@ ;; access to run, and this package does not escalate privileges in ;; order to accomplish that. ;; -;; One way of working around this using TRAMP’s built-in multi-hop +;; One way of working around this using Tramp’s built-in multi-hop ;; facilities with doas or sudo to raise your privileges. ;; ;; Another possibility is using polkit(8) to allow specific users @@ -62,7 +62,7 @@ (require 'tramp) (defgroup nspawn-tramp nil - "TRAMP integration for systemd-nspawn containers." + "Tramp integration for systemd-nspawn containers." :prefix "nspawn-tramp-" :group 'applications :link '(url-link :tag "Github" "https://github.com/bjc/nspawn-tramp") @@ -74,7 +74,7 @@ :group 'nspawn-tramp) (defconst nspawn-tramp-method "nspawn" - "TRAMP method name to use to connect to systemd-nspawn containers.") + "Tramp method name to use to connect to systemd-nspawn containers.") (defun nspawn-tramp--completion-function (&rest _args) "List systemd-nspawn containers available for connection. @@ -92,7 +92,7 @@ see its function help for a description of the format." (defun nspawn-tramp--add-method () - "Add TRAMP method handler for nspawn containers." + "Add Tramp method handler for nspawn containers." (push `(,nspawn-tramp-method (tramp-login-program ,nspawn-tramp-machinectl-file-name) (tramp-login-args (("shell") @@ -105,18 +105,18 @@ see its function help for a description of the format." tramp-methods)) (defun nspawn-tramp--remove-method () - "Remove TRAMP method handler for nspawn containers." + "Remove Tramp method handler for nspawn containers." (setf (alist-get nspawn-tramp-method tramp-methods nil t 'string=) nil)) (defun nspawn-tramp-unload-function () - "Remove TRAMP method handler and completion functions." + "Remove Tramp method handler and completion functions." (tramp-set-completion-function nspawn-tramp-method nil) (nspawn-tramp--remove-method) nil) ;;;###autoload (defun nspawn-tramp-setup () - "Initialize systemd-nspawn support for TRAMP." + "Initialize systemd-nspawn support for Tramp." (nspawn-tramp--add-method) (tramp-set-completion-function nspawn-tramp-method '((nspawn-tramp--completion-function "")))) -- cgit v1.2.3 From 3b31544b21ee313ca03a34ef398b2d89896a9846 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 16:08:34 -0500 Subject: =?UTF-8?q?Rename=20package=20to=20=E2=80=98tramp-nspawn=E2=80=99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.org | 12 +++--- nspawn-tramp.el | 125 -------------------------------------------------------- tramp-nspawn.el | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 131 deletions(-) delete mode 100644 nspawn-tramp.el create mode 100644 tramp-nspawn.el diff --git a/README.org b/README.org index 0df5ea1..ede42d4 100644 --- a/README.org +++ b/README.org @@ -1,24 +1,24 @@ * Introduction -=nspawn-tramp= adds support for =systemd-nspawn= containers with Emacs’ +=tramp-nspawn= adds support for =systemd-nspawn= containers with Emacs’ TRAMP system. * Installation ** ELPA This package is available on [[https://elpa.gnu.org/packages/nspawn-tramp.html][GNU ELPA]] and can be installed with -=M-x package-install RET nspawn-tramp RET= from within Emacs itself. +=M-x package-install RET tramp-nspawn RET= from within Emacs itself. ** Direct download Download this repository to some location, then add the following to your Emacs initialization: #+begin_src elisp - (add-to-list 'load-path "/path/to/nspawn-tramp") - (require 'nspawn-tramp) + (add-to-list 'load-path "/path/to/tramp-nspawn") + (require 'tramp-nspawn) #+end_src * Usage -Call ~nspawn-tramp-setup~ to add support: +Call ~tramp-nspawn-setup~ to add support: #+begin_src elisp - (add-hook 'after-init-hook 'nspawn-tramp-setup) + (add-hook 'after-init-hook 'tramp-nspawn-setup) #+end_src diff --git a/nspawn-tramp.el b/nspawn-tramp.el deleted file mode 100644 index 33d239c..0000000 --- a/nspawn-tramp.el +++ /dev/null @@ -1,125 +0,0 @@ -;;; nspawn-tramp.el -- Tramp integration for systemd-nspawn containers -*- lexical-binding: t; -*- - -;; Copyright © 2021-2022 Free Software Foundation, Inc. - -;; Author: Brian Cully -;; Maintainer: Brian Cully -;; URL: https://github.com/bjc/nspawn-tramp -;; Keywords: tramp, nspawn, machinectl, systemd, systemd-nspawn -;; Version: 1.0 -;; Package-Requires: ((emacs "23")) - -;;; License: - -;; This program 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. - -;; This program 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 this program. If not, see . - -;;; Commentary: - -;; -;; ‘nspawn-tramp’ allows Tramp to work with containers provided by -;; systemd-nspawn. -;; -;; ## Usage -;; -;; Call ‘nspawn-tramp-setup’ in your Emacs initialization. -;; -;; (add-hook 'after-init-hook 'nspawn-tramp-setup) -;; -;; Open a file on a running systemd-nspawn container: -;; -;; C-x C-f /nspawn:USER@CONTAINER:/path/to/file -;; -;; Where: -;; USER is the user on the container to connect as (optional) -;; CONTAINER is the container to connect to -;; -;; ## Privileges -;; -;; systemd-nspawn and its container utilities often require super user -;; access to run, and this package does not escalate privileges in -;; order to accomplish that. -;; -;; One way of working around this using Tramp’s built-in multi-hop -;; facilities with doas or sudo to raise your privileges. -;; -;; Another possibility is using polkit(8) to allow specific users -;; access to the requisite services (machinectl). -;; - -;;; Code: - -(require 'tramp) - -(defgroup nspawn-tramp nil - "Tramp integration for systemd-nspawn containers." - :prefix "nspawn-tramp-" - :group 'applications - :link '(url-link :tag "Github" "https://github.com/bjc/nspawn-tramp") - :link '(emacs-commentary-link :tag "Commentary" "nspawn-tramp")) - -(defcustom nspawn-tramp-machinectl-file-name "machinectl" - "File name of machinectl executable." - :type 'string - :group 'nspawn-tramp) - -(defconst nspawn-tramp-method "nspawn" - "Tramp method name to use to connect to systemd-nspawn containers.") - -(defun nspawn-tramp--completion-function (&rest _args) - "List systemd-nspawn containers available for connection. - -This function is used by ‘tramp-set-completion-function’, please -see its function help for a description of the format." - (let* ((raw-list (shell-command-to-string - (concat nspawn-tramp-machinectl-file-name - " list -q"))) - (lines (cdr (split-string raw-list "\n"))) - (first-words (mapcar (lambda (line) (car (split-string line))) - lines)) - (machines (seq-take-while (lambda (name) name) first-words))) - (mapcar (lambda (m) (list nil m)) machines))) - - -(defun nspawn-tramp--add-method () - "Add Tramp method handler for nspawn containers." - (push `(,nspawn-tramp-method - (tramp-login-program ,nspawn-tramp-machinectl-file-name) - (tramp-login-args (("shell") - ("-q") - ("--uid" "%u") - ("%h"))) - (tramp-remote-shell "/bin/sh") - (tramp-remote-shell-login ("-l")) - (tramp-remote-shell-args ("-i" "-c"))) - tramp-methods)) - -(defun nspawn-tramp--remove-method () - "Remove Tramp method handler for nspawn containers." - (setf (alist-get nspawn-tramp-method tramp-methods nil t 'string=) nil)) - -(defun nspawn-tramp-unload-function () - "Remove Tramp method handler and completion functions." - (tramp-set-completion-function nspawn-tramp-method nil) - (nspawn-tramp--remove-method) - nil) - -;;;###autoload -(defun nspawn-tramp-setup () - "Initialize systemd-nspawn support for Tramp." - (nspawn-tramp--add-method) - (tramp-set-completion-function nspawn-tramp-method - '((nspawn-tramp--completion-function "")))) - -(provide 'nspawn-tramp) -;;; nspawn-tramp.el ends here diff --git a/tramp-nspawn.el b/tramp-nspawn.el new file mode 100644 index 0000000..7f3b5ca --- /dev/null +++ b/tramp-nspawn.el @@ -0,0 +1,125 @@ +;;; tramp-nspawn.el -- Tramp integration for systemd-nspawn containers -*- lexical-binding: t; -*- + +;; Copyright © 2021-2022 Free Software Foundation, Inc. + +;; Author: Brian Cully +;; Maintainer: Brian Cully +;; URL: https://github.com/bjc/tramp-nspawn +;; Keywords: tramp, nspawn, machinectl, systemd, systemd-nspawn +;; Version: 1.0 +;; Package-Requires: ((emacs "23")) + +;;; License: + +;; This program 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. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; +;; ‘tramp-nspawn’ allows Tramp to work with containers provided by +;; systemd-nspawn. +;; +;; ## Usage +;; +;; Call ‘tramp-nspawn-setup’ in your Emacs initialization. +;; +;; (add-hook 'after-init-hook 'tramp-nspawn-setup) +;; +;; Open a file on a running systemd-nspawn container: +;; +;; C-x C-f /nspawn:USER@CONTAINER:/path/to/file +;; +;; Where: +;; USER is the user on the container to connect as (optional) +;; CONTAINER is the container to connect to +;; +;; ## Privileges +;; +;; systemd-nspawn and its container utilities often require super user +;; access to run, and this package does not escalate privileges in +;; order to accomplish that. +;; +;; One way of working around this using Tramp’s built-in multi-hop +;; facilities with doas or sudo to raise your privileges. +;; +;; Another possibility is using polkit(8) to allow specific users +;; access to the requisite services (machinectl). +;; + +;;; Code: + +(require 'tramp) + +(defgroup tramp-nspawn nil + "Tramp integration for systemd-nspawn containers." + :prefix "tramp-nspawn-" + :group 'applications + :link '(url-link :tag "Github" "https://github.com/bjc/tramp-nspawn") + :link '(emacs-commentary-link :tag "Commentary" "tramp-nspawn")) + +(defcustom tramp-nspawn-machinectl-file-name "machinectl" + "File name of machinectl executable." + :type 'string + :group 'tramp-nspawn) + +(defconst tramp-nspawn-method "nspawn" + "Tramp method name to use to connect to systemd-nspawn containers.") + +(defun tramp-nspawn--completion-function (&rest _args) + "List systemd-nspawn containers available for connection. + +This function is used by ‘tramp-set-completion-function’, please +see its function help for a description of the format." + (let* ((raw-list (shell-command-to-string + (concat tramp-nspawn-machinectl-file-name + " list -q"))) + (lines (cdr (split-string raw-list "\n"))) + (first-words (mapcar (lambda (line) (car (split-string line))) + lines)) + (machines (seq-take-while (lambda (name) name) first-words))) + (mapcar (lambda (m) (list nil m)) machines))) + + +(defun tramp-nspawn--add-method () + "Add Tramp method handler for nspawn containers." + (push `(,tramp-nspawn-method + (tramp-login-program ,tramp-nspawn-machinectl-file-name) + (tramp-login-args (("shell") + ("-q") + ("--uid" "%u") + ("%h"))) + (tramp-remote-shell "/bin/sh") + (tramp-remote-shell-login ("-l")) + (tramp-remote-shell-args ("-i" "-c"))) + tramp-methods)) + +(defun tramp-nspawn--remove-method () + "Remove Tramp method handler for nspawn containers." + (setf (alist-get tramp-nspawn-method tramp-methods nil t 'string=) nil)) + +(defun tramp-nspawn-unload-function () + "Remove Tramp method handler and completion functions." + (tramp-set-completion-function tramp-nspawn-method nil) + (tramp-nspawn--remove-method) + nil) + +;;;###autoload +(defun tramp-nspawn-setup () + "Initialize systemd-nspawn support for Tramp." + (tramp-nspawn--add-method) + (tramp-set-completion-function tramp-nspawn-method + '((tramp-nspawn--completion-function "")))) + +(provide 'tramp-nspawn) +;;; tramp-nspawn.el ends here -- cgit v1.2.3 From ae6d0d218b9d911257f2ecde325436f9e1a22473 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 16:13:04 -0500 Subject: Clarify wording on package commentary. Previous wording may have implied that this package would allow Tramp to isolate itself within nspawn containers, rather than allow acces into nspawn containers. --- tramp-nspawn.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tramp-nspawn.el b/tramp-nspawn.el index 7f3b5ca..0219643 100644 --- a/tramp-nspawn.el +++ b/tramp-nspawn.el @@ -27,7 +27,7 @@ ;;; Commentary: ;; -;; ‘tramp-nspawn’ allows Tramp to work with containers provided by +;; ‘tramp-nspawn’ allows Tramp access to environments provided by ;; systemd-nspawn. ;; ;; ## Usage -- cgit v1.2.3 From 6403f4f883fadb147a8c42d9123763913a90a850 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Sat, 19 Feb 2022 16:20:00 -0500 Subject: Rename tramp-nspawn-machinectl-file-name to -program. Seems to be more in line with what other packages are doing. --- tramp-nspawn.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tramp-nspawn.el b/tramp-nspawn.el index 0219643..286074a 100644 --- a/tramp-nspawn.el +++ b/tramp-nspawn.el @@ -68,8 +68,8 @@ :link '(url-link :tag "Github" "https://github.com/bjc/tramp-nspawn") :link '(emacs-commentary-link :tag "Commentary" "tramp-nspawn")) -(defcustom tramp-nspawn-machinectl-file-name "machinectl" - "File name of machinectl executable." +(defcustom tramp-nspawn-machinectl-program "machinectl" + "Name of the machinectl program." :type 'string :group 'tramp-nspawn) @@ -82,7 +82,7 @@ This function is used by ‘tramp-set-completion-function’, please see its function help for a description of the format." (let* ((raw-list (shell-command-to-string - (concat tramp-nspawn-machinectl-file-name + (concat tramp-nspawn-machinectl-program " list -q"))) (lines (cdr (split-string raw-list "\n"))) (first-words (mapcar (lambda (line) (car (split-string line))) @@ -94,7 +94,7 @@ see its function help for a description of the format." (defun tramp-nspawn--add-method () "Add Tramp method handler for nspawn containers." (push `(,tramp-nspawn-method - (tramp-login-program ,tramp-nspawn-machinectl-file-name) + (tramp-login-program ,tramp-nspawn-machinectl-program) (tramp-login-args (("shell") ("-q") ("--uid" "%u") -- cgit v1.2.3