(use-modules (fruix system freebsd) (ice-9 format) (ice-9 pretty-print) (srfi srfi-1) (srfi srfi-13) (rnrs io ports)) (define workdir (or (getenv "WORKDIR") (error "WORKDIR environment variable is required"))) (define os-file (or (getenv "OS_FILE") (error "OS_FILE environment variable is required"))) (define metadata-file (string-append workdir "/phase7-operating-system-metadata.txt")) (primitive-load os-file) (validate-operating-system phase7-operating-system) (let* ((spec (operating-system-closure-spec phase7-operating-system)) (generated-files (assoc-ref spec 'generated-files)) (base-packages (assoc-ref spec 'base-packages))) (call-with-output-file metadata-file (lambda (port) (format port "host_name=~a~%" (assoc-ref spec 'host-name)) (format port "kernel_package=~a~%" (assoc-ref spec 'kernel-package)) (format port "bootloader_package=~a~%" (assoc-ref spec 'bootloader-package)) (format port "base_package_count=~a~%" (assoc-ref spec 'base-package-count)) (format port "base_packages=~a~%" (string-join base-packages ",")) (format port "user_count=~a~%" (assoc-ref spec 'user-count)) (format port "users=~a~%" (string-join (assoc-ref spec 'users) ",")) (format port "group_count=~a~%" (assoc-ref spec 'group-count)) (format port "groups=~a~%" (string-join (assoc-ref spec 'groups) ",")) (format port "file_system_count=~a~%" (assoc-ref spec 'file-system-count)) (format port "services=~a~%" (string-join (map symbol->string (assoc-ref spec 'services)) ",")) (format port "generated_files=~a~%" (string-join generated-files ",")) (format port "init_mode=~a~%" (assoc-ref spec 'init-mode)) (format port "ready_marker=~a~%" (assoc-ref spec 'ready-marker)) (format port "spec_pretty=~a~%" (string-map (lambda (ch) (if (char=? ch #\newline) #\space ch)) (with-output-to-string (lambda () (pretty-print spec))))))) (when (getenv "METADATA_OUT") (copy-file metadata-file (getenv "METADATA_OUT"))) (format #t "PASS phase7-operating-system-model~%") (format #t "Metadata file: ~a~%" metadata-file) (when (getenv "METADATA_OUT") (format #t "Copied metadata to: ~a~%" (getenv "METADATA_OUT"))) (display "--- metadata ---\n") (display (call-with-input-file metadata-file get-string-all)))