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