Hash :
d26a91d5
Author :
Thomas de Grivel
Date :
2018-07-04T04:39:48
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
;;
;; adams - Remote system administration tools
;;
;; Copyright 2018 Thomas de Grivel <thomas@lowh.net>
;;
;; Permission to use, copy, modify, and distribute this software for any
;; purpose with or without fee is hereby granted, provided that the above
;; copyright notice and this permission notice appear in all copies.
;;
;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
;;
(in-package :adams)
(in-re-readtable)
(define-resource-class debian-pkg (pkg)
()
((probe-debian-pkg :properties (:versions))))
(define-syntax apt<8>-list (name release version arch tags)
#~|([^/\s]+)(?:/([^\s]*))?\s+([^\s]+)\s+([^\s]+)(?:\s+\[([^\]]+)\])?|
"Syntax for apt(8) list on Linux Debian"
(values name release version arch (cl-ppcre:split "," tags)))
(defmethod probe-debian-pkg ((pkg debian-pkg) (os os-linux-debian))
(let ((id (resource-id pkg))
(ensure :absent))
(multiple-value-bind #1=(release version arch tags)
(with-apt<8>-list (name . #1#)
(run "apt list | grep " id)
(declare (type string name))
(when (string= id name)
(when (find "installed" (the list tags))
(setf ensure :installed))
(return (values* #1#))))
(properties* (ensure . #1#)))))
(defmethod probe-host-packages ((host host) (os os-linux-debian))
(with-host host
(let ((packages))
(with-apt<8>-list (name release version arch tags)
(run "apt list | grep installed")
(let ((pkg (resource 'debian-pkg name)))
(add-probed-properties pkg (properties* name release version
arch tags))
(push pkg packages)))
(list :packages (nreverse packages)))))
#+nil
(clear-resources)
#+nil
(describe-probed (resource 'openbsd-pkg "emacs"))
#+nil
(probe-installed-packages)
#+nil
(map nil #'describe-probed (probe-installed-packages))
#+nil
(run "pkg_info -q | grep emacs-")