103 lines
5.1 KiB
Scheme
103 lines
5.1 KiB
Scheme
(use-modules (fruix system freebsd)
|
|
(ice-9 format)
|
|
(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 store-dir
|
|
(or (getenv "STORE_DIR")
|
|
"/frx/store"))
|
|
(define guile-prefix
|
|
(or (getenv "GUILE_PREFIX")
|
|
"/tmp/guile-freebsd-validate-install"))
|
|
(define guile-extra-prefix
|
|
(or (getenv "GUILE_EXTRA_PREFIX")
|
|
"/tmp/guile-gnutls-freebsd-validate-install"))
|
|
(define shepherd-prefix
|
|
(or (getenv "SHEPHERD_PREFIX")
|
|
"/tmp/shepherd-freebsd-validate-install"))
|
|
(define metadata-file
|
|
(string-append workdir "/phase7-system-closure-metadata.txt"))
|
|
|
|
(primitive-load os-file)
|
|
(validate-operating-system phase7-operating-system)
|
|
|
|
(define (assert-exists path)
|
|
(unless (file-exists? path)
|
|
(error "required path missing" path)))
|
|
|
|
(let* ((closure-a (materialize-operating-system phase7-operating-system
|
|
#:store-dir store-dir
|
|
#:guile-prefix guile-prefix
|
|
#:guile-extra-prefix guile-extra-prefix
|
|
#:shepherd-prefix shepherd-prefix))
|
|
(closure-b (materialize-operating-system phase7-operating-system
|
|
#:store-dir store-dir
|
|
#:guile-prefix guile-prefix
|
|
#:guile-extra-prefix guile-extra-prefix
|
|
#:shepherd-prefix shepherd-prefix))
|
|
(closure-path (assoc-ref closure-a 'closure-path))
|
|
(closure-rebuild-path (assoc-ref closure-b 'closure-path))
|
|
(kernel-store (assoc-ref closure-a 'kernel-store))
|
|
(bootloader-store (assoc-ref closure-a 'bootloader-store))
|
|
(guile-store (assoc-ref closure-a 'guile-store))
|
|
(guile-extra-store (assoc-ref closure-a 'guile-extra-store))
|
|
(shepherd-store (assoc-ref closure-a 'shepherd-store))
|
|
(base-package-stores (assoc-ref closure-a 'base-package-stores))
|
|
(rc-script (string-append closure-path "/usr/local/etc/rc.d/fruix-shepherd"))
|
|
(shepherd-config (string-append closure-path "/shepherd/init.scm"))
|
|
(activation-script (string-append closure-path "/activate"))
|
|
(loader-conf (string-append closure-path "/boot/loader.conf"))
|
|
(profile-bin-sh (string-append closure-path "/profile/bin/sh"))
|
|
(profile-sbin-init (string-append closure-path "/profile/sbin/init"))
|
|
(profile-rc (string-append closure-path "/profile/etc/rc"))
|
|
(ready-marker (assoc-ref (operating-system-closure-spec phase7-operating-system)
|
|
'ready-marker))
|
|
(rc-script-target (readlink (string-append closure-path "/boot/loader")))
|
|
(kernel-link (readlink (string-append closure-path "/boot/kernel/kernel"))))
|
|
(for-each assert-exists
|
|
(list closure-path kernel-store bootloader-store guile-store
|
|
guile-extra-store shepherd-store rc-script shepherd-config
|
|
activation-script loader-conf profile-bin-sh profile-sbin-init
|
|
profile-rc (string-append closure-path "/parameters.scm")))
|
|
(unless (string=? closure-path closure-rebuild-path)
|
|
(error "closure path was not reproducible" closure-path closure-rebuild-path))
|
|
(call-with-output-file metadata-file
|
|
(lambda (port)
|
|
(format port "store_dir=~a~%" store-dir)
|
|
(format port "closure_path=~a~%" closure-path)
|
|
(format port "closure_rebuild_path=~a~%" closure-rebuild-path)
|
|
(format port "kernel_store=~a~%" kernel-store)
|
|
(format port "bootloader_store=~a~%" bootloader-store)
|
|
(format port "guile_store=~a~%" guile-store)
|
|
(format port "guile_extra_store=~a~%" guile-extra-store)
|
|
(format port "shepherd_store=~a~%" shepherd-store)
|
|
(format port "base_package_store_count=~a~%" (length base-package-stores))
|
|
(format port "base_package_stores=~a~%" (string-join base-package-stores ","))
|
|
(format port "rc_script=~a~%" rc-script)
|
|
(format port "shepherd_config=~a~%" shepherd-config)
|
|
(format port "activation_script=~a~%" activation-script)
|
|
(format port "loader_conf=~a~%" loader-conf)
|
|
(format port "boot_loader_target=~a~%" rc-script-target)
|
|
(format port "kernel_link_target=~a~%" kernel-link)
|
|
(format port "profile_bin_sh=~a~%" profile-bin-sh)
|
|
(format port "profile_sbin_init=~a~%" profile-sbin-init)
|
|
(format port "profile_rc=~a~%" profile-rc)
|
|
(format port "ready_marker=~a~%" ready-marker)
|
|
(format port "init_integration=freebsd-init+rc.d-shepherd~%")))
|
|
|
|
(when (getenv "METADATA_OUT")
|
|
(copy-file metadata-file (getenv "METADATA_OUT")))
|
|
|
|
(format #t "PASS phase7-system-closure~%")
|
|
(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)))
|