aboutsummaryrefslogtreecommitdiff
path: root/src/package.lisp
blob: 69b50fbd41aafd308696813f69ef9a7762eb4b42 (plain)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
(in-package :cl-user)

(defpackage :consfigurator
  (:use #:cl #:anaphora #:alexandria #:cffi)
  (:local-nicknames (#:re #:cl-ppcre))
  (:shadowing-import-from #:uiop
                          #:strcat
                          #:string-prefix-p
                          #:string-suffix-p
                          #:split-string
                          #:first-char
                          #:last-char
                          #:run-program
                          #:read-file-string
                          #:copy-stream-to-stream
                          #:slurp-stream-string
                          #:subprocess-error
                          #:stripln
                          #:unix-namestring
                          #:parse-unix-namestring
                          #:pathname-directory-pathname
                          #:pathname-parent-directory-pathname
                          #:resolve-symlinks
                          #:with-temporary-file
                          #:ensure-directory-pathname
                          #:ensure-pathname
                          #:enough-pathname
                          #:pathname-equal
                          #:subpathp
                          #:relative-pathname-p
                          #:absolute-pathname-p
                          #:directory-pathname-p
                          #:getenv
                          #:subdirectories
                          #:directory-files
                          #:file-exists-p
			  #:directory-exists-p
                          #:rename-file-overwriting-target
                          #:with-current-directory
                          #:delete-empty-directory
			  #:delete-directory-tree
                          #:with-safe-io-syntax
                          #:slurp-stream-form
                          #:safe-read-file-form
                          #:safe-read-from-string
                          #:compile-file*
                          #:compile-file-pathname*)
  (:export ;; re-export from UIOP
           #:strcat
           #:string-prefix-p
           #:string-suffix-p
           #:split-string
           #:first-char
           #:last-char
           #:run-program
           #:read-file-string
           #:copy-stream-to-stream
           #:slurp-stream-string
           #:subprocess-error
           #:stripln
           #:unix-namestring
           #:parse-unix-namestring
           #:pathname-directory-pathname
           #:pathname-parent-directory-pathname
           #:resolve-symlinks
           #:with-temporary-file
           #:ensure-directory-pathname
           #:ensure-pathname
           #:enough-pathname
           #:pathname-equal
           #:subpathp
           #:relative-pathname-p
           #:absolute-pathname-p
           #:directory-pathname-p
           #:getenv
           #:subdirectories
           #:directory-files
           #:file-exists-p
	   #:directory-exists-p
           #:rename-file-overwriting-target
           #:with-current-directory
           #:delete-empty-directory
	   #:delete-directory-tree
           #:with-safe-io-syntax
           #:slurp-stream-form
           #:safe-read-file-form
           #:safe-read-from-string
           #:compile-file*
           #:compile-file-pathname*

           ;; libc.lisp
           #:uid_t
           #:gid_t

           #:CLONE_NEWCGROUP
           #:CLONE_NEWIPC
           #:CLONE_NEWNET
           #:CLONE_NEWNS
           #:CLONE_NEWPID
           #:CLONE_NEWTIME
           #:CLONE_NEWUSER
           #:CLONE_NEWUTS

           #:NS_GET_OWNER_UID

           ;; util.lisp
           #:multiple-value-mapcan
           #:lines
           #:unlines
           #:words
           #:unwords
           #:strip-prefix
           #:memstr=
           #:define-simple-error
           #:plist-to-long-options
           #:systemd-user-instance-args
	   #:with-local-temporary-directory
           #:pathname-file
           #:local-directory-contents
           #:ensure-trailing-slash
           #:drop-trailing-slash
           #:define-simple-print-object
           #:chroot-pathname
           #:in-chroot-pathname
           #:sh-escape
           #:defpackage-consfig
           #:lambda-ignoring-args
           #:parse-cidr
           #:random-alphanumeric
           #:valid-hostname-p
           #:prog-changes
           #:add-change
           #:return-changes
           #:sh-script-to-single-line

           #:*consfigurator-debug-level*
           #:with-indented-inform
           #:inform
           #:informat

           #:version<
           #:version>
           #:version<=
           #:version>=

           #:string-to-filename
           #:filename-to-string

           #:exit-code-to-retval
           #:posix-login-environment

           #:define-error-retval-cfun

           #:chroot
           #:unshare

           #:mapc-open-input-streams
           #:mapc-open-output-streams

           ;; connection.lisp
           #:establish-connection
           #:continue-connection
           #:preprocess-connection-args
           #:connection
           #:lisp-connection
           #:posix-connection
           #:connection-parent
           #:lisp-connection-p
           #:connection-run
           #:connection-read-file
           #:connection-read-and-remove-file
           #:connection-write-file
           #:connection-tear-down
           #:connection-connattr
           #:propagate-connattr

           #:run
           #:mrun
           #:with-remote-temporary-file
           #:mkstemp-cmd
           #:mktemp
           #:with-remote-current-directory
           #:run-failed
           #:run-failed-cmd
           #:run-failed-stdout
           #:run-failed-stderr
           #:run-failed-exit
           #:runlines
           #:remote-test
           #:remote-exists-p
           #:remote-file-stats
           #:remote-last-reboot
           #:remote-executable-find
           #:remote-mount-point-p
           #:delete-remote-trees
           #:empty-remote-directory
           #:read-remote-file
           #:write-remote-file
           #:get-connattr
           #:with-connattrs

           ;; property.lisp
           #:combine-propapp-types
           #:propapp-type
           #:propapp-args
           #:propapp-desc
           #:propapp-attrs
           #:check-propapp
           #:apply-propapp
           #:unapply-propapp
           #:ignoring-hostattrs
           #:defprop
           #:defpropspec
           #:defproplist
           #:inapplicable-property
           #:get-hostattrs
           #:get-hostattrs-car
           #:get-parent-hostattrs
           #:get-parent-hostattrs-car
           #:push-hostattr
           #:push-hostattrs
           #:pushnew-hostattr
           #:pushnew-hostattrs
           #:get-hostname
           #:get-short-hostname
           #:require-data
           #:failed-change
           #:aborted-change
           #:assert-remote-euid-root
           #:maybe-write-remote-file-string
           #:with-change-if-changes-file
           #:with-change-if-changes-files
           #:with-change-if-changes-file-content

           #:ptype
           #:plambda
           #:papply
           #:punapply

           ;; propspec.lisp
           #:in-consfig
           #:propspec-systems
           #:propspec-props
           #:make-propspec
           #:append-propspecs
           #:propapp

	   ;; combinator.lisp
           #:define-function-property-combinator
           #:define-choosing-property-combinator
           #:seqprops
           #:eseqprops
           #:eseqprops-until
           #:silent-seqprops
           #:unapply
           #:unapplied
           #:desc
           #:on-change
           #:on-apply-change
	   #:as
           #:with-flagfile
           #:with-unapply
           #:with-homedir

           ;; host.lisp
           #:host
           #:unpreprocessed-host
           #:defhost
           #:make-host
           #:make-child-host
           #:union-propspec-into-host
           #:replace-propspec-into-host
           #:hostattrs
           #:host-propspec
           #:preprocess-host
           #:ensure-host
           #:with-preserve-hostattrs
           #:has-hostattrs

           ;; deployment.lisp
           #:at-end
           #:consfigure
           #:defdeploy
           #:defdeploy-these
           #:deploy
           #:deploy*
           #:deploys
           #:deploys.
           #:deploy-these
           #:deploys-these.
           #:deploy-these*
           #:deploys-these
           #:hostdeploy
           #:hostdeploy*
           #:hostdeploy-these
           #:hostdeploy-these*
           #:localsudo
           #:localhd
           #:continue-deploy*
           #:evals

           ;; data.lisp
           #:data
           #:data-iden1
           #:data-iden2
           #:data-version
           #:data-mime
           #:string-data
           #:data-string
           #:file-data
           #:data-file
	   #:data-source-providing-p
           #:maybe-write-remote-file-data
           #:missing-data-source
           #:data-pathname
	   #:local-data-pathname
           #:remote-data-pathname
           #:get-remote-cached-prerequisite-data
           #:get-local-cached-prerequisite-data
	   #:get-highest-local-cached-prerequisite-data

           #:try-register-data-source
           #:register-data-source
           #:reset-data-sources
           #:get-data-stream
           #:with-data-stream
           #:get-data-string
           #:connection-upload
           #:connection-clear-data-cache
           #:upload-all-prerequisite-data
           #:wrapped-passphrase
           #:wrap-passphrase
           #:unwrap-passphrase
           #:get-data-protected-string
           #:*data-source-gnupghome*
           #:with-reset-data-sources
           #:missing-data

           ;; image.lisp
           #:eval-in-grandchild
           #:eval-in-reinvoked
           #:wrong-execution-context-for-image-dump
           #:image-dumped
           #:asdf-requirements-for-host-and-features
           #:request-asdf-requirements
           #:continue-deploy*-program))

(macrolet
    ((package (package &body options &aux (use (find :use options :key #'car)))
       `(defpackage ,package
          (:use #:cl #:anaphora #:alexandria #:consfigurator ,@(cdr use))
          ,@(remove use options))))

  (package :consfigurator.util.posix1e
           (:use #:cffi)
           (:export #:acl_type_t
                    #:acl_entry_t
                    #:ACL_USER
                    #:ACL_GROUP
                    #:ACL_TYPE_ACCESS
                    #:ACL_TYPE_DEFAULT
                    #:ACL_NEXT_ENTRY
                    #:ACL_FIRST_ENTRY

                    #:with-acl-free
                    #:acl-get-file
                    #:acl-set-file
                    #:acl-get-entry
                    #:acl-get-tag-type
                    #:acl-get-qualifier
                    #:acl-set-qualifier

                    #:CAP_CHOWN
                    #:CAP_DAC_OVERRIDE
                    #:CAP_DAC_READ_SEARCH
                    #:CAP_FOWNER
                    #:CAP_FSETID
                    #:CAP_KILL
                    #:CAP_SETGID
                    #:CAP_SETUID

                    #:CAP_SETPCAP
                    #:CAP_LINUX_IMMUTABLE
                    #:CAP_NET_BIND_SERVICE
                    #:CAP_NET_BROADCAST
                    #:CAP_NET_ADMIN
                    #:CAP_NET_RAW
                    #:CAP_IPC_LOCK
                    #:CAP_IPC_OWNER
                    #:CAP_SYS_MODULE
                    #:CAP_SYS_RAWIO
                    #:CAP_SYS_CHROOT
                    #:CAP_SYS_PTRACE
                    #:CAP_SYS_PACCT
                    #:CAP_SYS_ADMIN
                    #:CAP_SYS_BOOT
                    #:CAP_SYS_NICE
                    #:CAP_SYS_RESOURCE
                    #:CAP_SYS_TIME
                    #:CAP_SYS_TTY_CONFIG
                    #:CAP_MKNOD
                    #:CAP_LEASE
                    #:CAP_AUDIT_WRITE
                    #:CAP_AUDIT_CONTROL
                    #:CAP_SETFCAP
                    #:CAP_MAC_OVERRIDE
                    #:CAP_MAC_ADMIN
                    #:CAP_SYSLOG
                    #:CAP_WAKE_ALARM
                    #:CAP_BLOCK_SUSPEND
                    #:CAP_AUDIT_READ
                    #:CAP_PERFMON
                    #:CAP_BPF
                    #:CAP_CHECKPOINT_RESTORE

                    #:posix-capability-p))

  (package :consfigurator.property.cmd
           (:export #:single))

  (package :consfigurator.property.file
           (:local-nicknames (#:re #:cl-ppcre))
           (:export #:map-remote-file-lines
                    #:has-content
                    #:exists-with-content
                    #:contains-lines
                    #:lacks-lines
                    #:lacks-lines-matching
                    #:has-mode
                    #:has-ownership
                    #:does-not-exist
                    #:directory-does-not-exist
                    #:data-uploaded
                    #:host-data-uploaded
                    #:secret-uploaded
                    #:host-secret-uploaded
                    #:data-cache-purged
                    #:contains-conf-equals
                    #:contains-conf-space
                    #:contains-conf-tab
                    #:contains-conf-shell
                    #:contains-ini-settings
                    #:regex-replaced-lines
                    #:directory-exists
                    #:containing-directory-exists
                    #:symlinked
                    #:is-copy-of
                    #:update-unix-table))

  (package :consfigurator.property.etc-default
           (:local-nicknames (#:file  #:consfigurator.property.file))
           (:export #:contains))

  (package :consfigurator.property.os
           (:shadow #:typecase #:etypecase)
           (:export #:unixlike
                    #:linux
                    #:debianlike
                    #:debian
                    #:debian-stable
                    #:debian-testing
                    #:debian-unstable
                    #:debian-experimental
                    #:debian-suite
                    #:debian-architecture
                    #:debian-architecture-string

                    #:typecase
                    #:host-typecase
                    #:etypecase
                    #:host-etypecase

                    #:debian-suite-case
                    #:host-debian-suite-case
                    #:debian-suite-ecase
                    #:host-debian-suite-ecase

                    #:required
                    #:supports-arch-p))

  (package :consfigurator.property.container
           (:export #:contained
                    #:contained-p
                    #:when-contained))

  (package :consfigurator.property.periodic
           (:local-nicknames (#:file  #:consfigurator.property.file))
           (:export #:at-most))

  (package :consfigurator.property.mount
           (:local-nicknames (#:os    #:consfigurator.property.os)
                             (#:cmd   #:consfigurator.property.cmd)
                             (#:file  #:consfigurator.property.file))
           (:export #:mounted
                    #:unmounted-below
                    #:unmounted-below-and-removed
                    #:all-mounts
                    #:+linux-basic-vfs+
                    #:+linux-efivars-vfs+
                    #:assert-devtmpfs-udev-/dev))

  (package :consfigurator.property.service
           (:local-nicknames (#:os    #:consfigurator.property.os)
                             (#:file  #:consfigurator.property.file))
           (:export #:no-services
                    #:no-services-p
                    #:running
                    #:restarted
                    #:reloaded
                    #:without-starting-services))

  (package :consfigurator.property.apt
           (:local-nicknames (#:re         #:cl-ppcre)
                             (#:cmd        #:consfigurator.property.cmd)
                             (#:file       #:consfigurator.property.file)
                             (#:os         #:consfigurator.property.os)
                             (#:service    #:consfigurator.property.service))
           (:export #:installed
                    #:installed-minimally
                    #:backports-installed
                    #:backports-installed-minimally
                    #:removed
                    #:reconfigured
                    #:service-installed-running
                    #:all-configured
                    #:updated
                    #:upgraded
                    #:autoremoved
                    #:periodic-updates
                    #:unattended-upgrades
                    #:mirrors
                    #:uses-parent-mirrors
                    #:proxy
                    #:uses-parent-proxy
                    #:uses-local-cacher
                    #:get-mirrors
                    #:standard-sources.list
                    #:additional-sources
                    #:cache-cleaned
                    #:trusts-key
                    #:all-installed-p
                    #:none-installed-p
                    #:suites-available-pinned
                    #:pinned
                    #:no-pdiffs))

  (package :consfigurator.property.package
           (:local-nicknames (#:apt #:consfigurator.property.apt))
           (:export #:+consfigurator-system-dependencies+
                    #:package-manager-not-found
                    #:installed))

  (package :consfigurator.connection.sbcl
           (:local-nicknames (#:os      #:consfigurator.property.os)
                             (#:package #:consfigurator.property.package)))

  (package :consfigurator.property.user
           (:local-nicknames (#:file  #:consfigurator.property.file)
                             (#:os    #:consfigurator.property.os))
           (:export #:has-account
                    #:has-account-with-uid
                    #:group-exists
                    #:has-groups
                    #:has-desktop-groups
	            #:has-login-shell
                    #:has-enabled-password
                    #:has-locked-password
	            #:passwd-field
                    #:user-info))

  (package :consfigurator.util.linux-namespace
           (:use #:consfigurator.util.posix1e #:cffi)
           (:local-nicknames (#:user #:consfigurator.property.user))
           (:export #:get-ids-offset
                    #:reduce-id-maps
                    #:shift-ids
                    #:setgroups-p
                    #:get-userns-owner))

  (package :consfigurator.property.chroot
           (:local-nicknames (#:service   #:consfigurator.property.service)
                             (#:apt       #:consfigurator.property.apt)
                             (#:os        #:consfigurator.property.os)
                             (#:package   #:consfigurator.property.package)
                             (#:container #:consfigurator.property.container)
                             (#:mount     #:consfigurator.property.mount)
                             (#:file      #:consfigurator.property.file))
           (:shadow #:deploys #:deploys. #:deploys-these #:deploys-these.)
           (:export #:deploys
                    #:deploys.
                    #:deploys-these
                    #:deploys-these.
                    #:os-bootstrapped-for
                    #:os-bootstrapped-for.
                    #:os-bootstrapped
                    #:os-bootstrapped.))

  (package :consfigurator.property.disk
           (:local-nicknames (#:re      #:cl-ppcre)
                             (#:chroot  #:consfigurator.property.chroot)
                             (#:cmd     #:consfigurator.property.cmd)
                             (#:file    #:consfigurator.property.file)
                             (#:os      #:consfigurator.property.os)
                             (#:apt     #:consfigurator.property.apt))
           (:export #:volume
                    #:volume-label
                    #:volume-contents
                    #:volume-size
                    #:volume-bootloaders
                    #:subvolumes-of-type
                    #:all-subvolumes
                    #:copy-volume-and-contents
                    #:require-volumes-data
                    #:opened-volume
                    #:device-file

                    #:physical-disk
                    #:disk-image
                    #:image-file
                    #:raw-disk-image
                    #:opened-raw-disk-image
                    #:partitioned-volume
                    #:opened-partitioned-volume
                    #:partition
                    #:opened-partition

                    #:lvm-volume-group
                    #:lvm-logical-volume
                    #:activated-lvm-logical-volume
                    #:lvm-physical-volume
                    #:opened-lvm-physical-volume

                    #:filesystem
                    #:mount-point
                    #:mount-options
                    #:mounted-filesystem
                    #:ext4-filesystem
                    #:mounted-ext4-filesystem
                    #:fat32-filesystem
                    #:mounted-fat32-filesystem

                    #:luks-container
                    #:opened-luks-container
                    #:crypttab-options
                    #:crypttab-keyfile
                    #:linux-swap

                    #:opened-volumes
                    #:opened-volume-parents
                    #:with-opened-volumes

                    #:has-volumes
                    #:raw-image-built-for
                    #:debian-live-iso-built
                    #:debian-live-iso-built.
                    #:host-volumes-created
                    #:host-logical-volumes-exist

                    #:volumes))

  (package :consfigurator.property.fstab
           (:use #:consfigurator.property.disk)
           (:local-nicknames (#:os    #:consfigurator.property.os)
                             (#:file  #:consfigurator.property.file)
                             (#:disk  #:consfigurator.property.disk))
           (:export #:volume-to-entry
                    #:has-entries
                    #:has-entries-for-volumes
                    #:has-entries-for-opened-volumes))

  (package :consfigurator.property.crypttab
           (:use #:consfigurator.property.disk)
           (:local-nicknames (#:re    #:cl-ppcre)
                             (#:os    #:consfigurator.property.os)
                             (#:file  #:consfigurator.property.file)
                             (#:disk  #:consfigurator.property.disk))
           (:export #:volume-to-entry
                    #:has-entries-for-opened-volumes))

  (package :consfigurator.property.gnupg
           (:local-nicknames (#:re        #:cl-ppcre))
           (:export #:public-key-imported
                    #:secret-key-imported))

  (package :consfigurator.property.git
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file)
                             (#:apt       #:consfigurator.property.apt))
           (:export #:installed
                    #:snapshot-extracted
                    #:cloned
                    #:pulled
                    #:repo-configured))

  (package :consfigurator.property.sshd
           (:local-nicknames (#:re        #:cl-ppcre)
                             (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file)
                             (#:apt       #:consfigurator.property.apt)
                             (#:service   #:consfigurator.property.service))
           (:export #:installed
                    #:configured
                    #:no-passwords
                    #:host-public-keys
                    #:has-host-public-key
                    #:has-host-key))

  (package :consfigurator.property.ssh
           (:local-nicknames (#:file      #:consfigurator.property.file)
                             (#:sshd      #:consfigurator.property.sshd))
           (:export #:authorized-keys
                    #:has-user-key
                    #:known-host
                    #:system-known-host
                    #:parent-is-system-known-host))

  (package :consfigurator.property.locale
           (:local-nicknames (#:re        #:cl-ppcre)
                             (#:os        #:consfigurator.property.os)
                             (#:apt       #:consfigurator.property.apt)
                             (#:cmd       #:consfigurator.property.cmd)
                             (#:file      #:consfigurator.property.file))
           (:export #:available
                    #:selected-for))

  (package :consfigurator.property.reboot
           (:local-nicknames (#:container #:consfigurator.property.container))
           (:shadow #:at-end)
           (:export #:at-end))

  (package :consfigurator.property.installer
           (:use #:consfigurator.property.disk #:cffi)
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:cmd       #:consfigurator.property.cmd)
                             (#:file      #:consfigurator.property.file)
                             (#:chroot    #:consfigurator.property.chroot)
                             (#:mount     #:consfigurator.property.mount)
                             (#:fstab     #:consfigurator.property.fstab)
                             (#:reboot    #:consfigurator.property.reboot)
                             (#:crypttab  #:consfigurator.property.crypttab)
                             (#:disk      #:consfigurator.property.disk))
           (:export #:install-bootloader-propspec
                    #:install-bootloader-binaries-propspec
                    #:chroot-installed-to-volumes-for
                    #:bootloader-binaries-installed
                    #:bootloaders-installed
                    #:cleanly-installed-once
                    #:with-cleanly-installed-once))

  (package :consfigurator.property.grub
           (:use #:consfigurator.property.disk
                 #:consfigurator.property.installer)
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file)
                             (#:apt       #:consfigurator.property.apt)
                             (#:container #:consfigurator.property.container))
           (:export #:grub
                    #:grub-installed))

  (package :consfigurator.property.u-boot
           (:use #:consfigurator.property.disk
                 #:consfigurator.property.installer)
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:apt       #:consfigurator.property.apt)
                             (#:container #:consfigurator.property.container))
           (:export #:install-rockchip
                    #:installed-rockchip))

  (package :consfigurator.property.hostname
           (:local-nicknames (#:cmd       #:consfigurator.property.cmd)
                             (#:container #:consfigurator.property.container)
                             (#:file      #:consfigurator.property.file))
           (:export #:is
                    #:configured
                    #:mailname-configured
                    #:search-configured))

  (package :consfigurator.property.network
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file))
           (:export #:aliases
                    #:ipv4
                    #:ipv6
                    #:clean-/etc/network/interfaces
                    #:static
                    #:preserve-static-once))

  (package :consfigurator.property.libvirt
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:cmd       #:consfigurator.property.cmd)
                             (#:service   #:consfigurator.property.service)
                             (#:file      #:consfigurator.property.file)
                             (#:chroot    #:consfigurator.property.chroot)
                             (#:apt       #:consfigurator.property.apt))
           (:export #:installed
                    #:default-network-started
                    #:default-network-autostarted
                    #:defined-for
                    #:started
                    #:destroyed
                    #:when-started
                    #:kvm-boots-chroot-for
                    #:kvm-boots-chroot-for.
                    #:kvm-boots-chroot
                    #:kvm-boots-chroot.
                    #:virsh-get-columns))

  (package :consfigurator.property.ccache
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file)
                             (#:apt       #:consfigurator.property.apt))
           (:export #:installed
                    #:has-limits
                    #:cache-for-group))

  (package :consfigurator.property.schroot
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file)
                             (#:apt       #:consfigurator.property.apt))
           (:export #:installed
                    #:uses-overlays
                    #:overlays-in-tmpfs))

  (package :consfigurator.property.sbuild
           (:local-nicknames (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file)
                             (#:chroot    #:consfigurator.property.chroot)
                             (#:user      #:consfigurator.property.user)
                             (#:apt       #:consfigurator.property.apt)
                             (#:ccache    #:consfigurator.property.ccache)
                             (#:schroot   #:consfigurator.property.schroot)
                             (#:periodic  #:consfigurator.property.periodic))
           (:export #:installed
                    #:usable-by
                    #:built
                    #:built.
                    #:standard-debian-schroot))

  (package :consfigurator.property.postfix
           (:local-nicknames (#:cmd       #:consfigurator.property.cmd)
                             (#:service   #:consfigurator.property.service)
                             (#:apt       #:consfigurator.property.apt)
                             (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file)
                             (#:user      #:consfigurator.property.user))
           (:export #:installed
                    #:reloaded
                    #:main-configured
                    #:mapped-file
                    #:daemon-socket-directory))

  (package :consfigurator.property.cron
           (:local-nicknames (#:re        #:cl-ppcre)
                             (#:service   #:consfigurator.property.service)
                             (#:apt       #:consfigurator.property.apt)
                             (#:os        #:consfigurator.property.os)
                             (#:file      #:consfigurator.property.file))
           (:export #:system-job
                    #:nice-system-job
                    #:runs-consfigurator
                    #:user-crontab-installed))

  (package :consfigurator.property.lets-encrypt
           (:local-nicknames (#:apt       #:consfigurator.property.apt)
                             (#:os        #:consfigurator.property.os))
           (:export #:installed
                    #:agree-tos
                    #:certificate-obtained
                    #:certificate-obtained-standalone
                    #:fullchain-for
                    #:chain-for
                    #:certificate-for
                    #:privkey-for))

  (package :consfigurator.property.apache
           (:local-nicknames
            (#:service             #:consfigurator.property.service)
            (#:apt                 #:consfigurator.property.apt)
            (#:os                  #:consfigurator.property.os)
            (#:file                #:consfigurator.property.file)
            (#:network             #:consfigurator.property.network)
            (#:lets-encrypt        #:consfigurator.property.lets-encrypt))
           (:export #:installed
                    #:reloaded
                    #:mod-enabled
                    #:conf-enabled
                    #:conf-available
                    #:site-enabled
                    #:site-available
                    #:https-vhost))

  (package :consfigurator.property.systemd
           (:local-nicknames (#:service #:consfigurator.property.service))
           (:export #:daemon-reloaded
                    #:started
                    #:stopped
                    #:reloaded
                    #:restarted
                    #:enabled
                    #:disabled
                    #:masked
                    #:lingering-enabled))

  (package :consfigurator.property.firewalld
           (:local-nicknames (#:cmd         #:consfigurator.property.cmd)
                             (#:file        #:consfigurator.property.file)
                             (#:apt         #:consfigurator.property.apt)
                             (#:os          #:consfigurator.property.os)
                             (#:service     #:consfigurator.property.service))
           (:export #:installed
                    #:knows-service
                    #:has-policy
                    #:has-zone-xml
                    #:has-zone
                    #:zone-has-target
                    #:default-route-zoned-once
                    #:zone-has-interface
                    #:zone-has-source
                    #:zone-has-service
                    #:zone-has-masquerade
                    #:zone-has-rich-rule
                    #:has-direct-rule
                    #:has-default-zone))

  (package :consfigurator.property.timezone
           (:local-nicknames (#:file         #:consfigurator.property.file)
                             (#:apt          #:consfigurator.property.apt)
                             (#:os           #:consfigurator.property.os))
           (:export #:configured
                    #:configured-from-parent))

  (package :consfigurator.property.swap
           (:local-nicknames (#:cmd          #:consfigurator.property.cmd)
                             (#:fstab        #:consfigurator.property.fstab)
                             (#:os           #:consfigurator.property.os))
           (:export #:has-swap-file))

  (package :consfigurator.property.lxc
           (:use #:consfigurator.util.linux-namespace #:cffi)
           (:local-nicknames (#:file        #:consfigurator.property.file)
                             (#:apt         #:consfigurator.property.apt)
                             (#:os          #:consfigurator.property.os)
                             (#:service     #:consfigurator.property.service)
                             (#:chroot      #:consfigurator.property.chroot)
                             (#:user        #:consfigurator.property.user)
                             (#:systemd     #:consfigurator.property.systemd))
           (:export #:installed
                    #:user-container-started
                    #:when-user-container-running
                    #:user-containers-autostart
                    #:usernet-veth-usable-by
                    #:user-container-for
                    #:user-container-for.
                    #:user-container
                    #:user-container.

                    #:lxc-ls))

  (package :consfigurator.property.postgres
           (:local-nicknames (#:apt         #:consfigurator.property.apt)
                             (#:os          #:consfigurator.property.os)
                             (#:cmd         #:consfigurator.property.cmd))
           (:export #:installed
                    #:superuser-is
                    #:has-role
                    #:has-database
                    #:database-has-owner
                    #:has-group
                    #:user-can-login))

  (package :consfigurator.connection.local
           (:export #:local-connection))

  (package :consfigurator.connection.shell-wrap
           (:export #:shell-wrap-connection #:connection-shell-wrap))

  (package :consfigurator.connection.fork
           (:use #:consfigurator.connection.local)
           (:export #:fork-connection
                    #:post-fork
                    #:init-hooks-connection))

  (package :consfigurator.connection.rehome
           (:use #:consfigurator.connection.fork)
           (:export #:rehome-connection
                    #:rehome-datadir))

  (package :consfigurator.connection.as
           (:use #:consfigurator.connection.fork #:cffi))

  (package :consfigurator.connection.ssh
           (:use #:consfigurator.connection.shell-wrap))

  (package :consfigurator.connection.sudo
           (:use #:consfigurator.connection.shell-wrap))

  (package :consfigurator.connection.su
           (:use #:consfigurator.connection.shell-wrap))

  (package :consfigurator.connection.chroot
           (:use #:consfigurator.connection.fork
                 #:consfigurator.connection.rehome
                 #:consfigurator.connection.shell-wrap
	         #:cffi)
           (:local-nicknames (#:disk      #:consfigurator.property.disk)
                             (#:mount     #:consfigurator.property.mount)))

  (package :consfigurator.connection.setuid
           (:use #:consfigurator.connection.fork
                 #:consfigurator.connection.rehome
	         #:cffi)
           (:local-nicknames (#:re   #:cl-ppcre)
		             (#:user #:consfigurator.property.user)))

  (package :consfigurator.connection.linux-namespace
           (:use #:consfigurator.util.linux-namespace
                 #:consfigurator.connection.fork
                 #:consfigurator.connection.shell-wrap)
           (:local-nicknames (#:user #:consfigurator.property.user)
                             (#:lxc  #:consfigurator.property.lxc)))

  (package :consfigurator.data.util
           (:export #:literal-data-pathname #:gpg-file-as-string #:gpg))

  (package :consfigurator.data.asdf)

  (package :consfigurator.data.pgp
           (:use  #:consfigurator.data.util)
           (:export #:list-data #:get-data #:set-data #:set-data-from-file))

  (package :consfigurator.data.git-snapshot)

  (package :consfigurator.data.gpgpubkeys)

  (package :consfigurator.data.ssh-askpass
           (:local-nicknames (#:re   #:cl-ppcre)))

  (package :consfigurator.data.local-file)

  (package :consfigurator.data.pass
           (:use  #:consfigurator.data.util))

  (package :consfigurator.data.files-tree
           (:use  #:consfigurator.data.util)))