testing
This commit is contained in:
parent
06026e78e5
commit
64c76be414
4 changed files with 5 additions and 210 deletions
|
@ -27,8 +27,7 @@ SUFFIXES = .scm .go
|
|||
SOURCES = msg/config.scm \
|
||||
msg/hconfig.scm \
|
||||
msg/shell.scm \
|
||||
msg/helpers.scm \
|
||||
msg/machine2.scm
|
||||
msg/helpers.scm
|
||||
|
||||
TESTS =
|
||||
|
||||
|
|
3
hall.scm
3
hall.scm
|
@ -22,8 +22,7 @@
|
|||
((scheme-file "config")
|
||||
(scheme-file "hconfig")
|
||||
(scheme-file "shell")
|
||||
(scheme-file "helpers")
|
||||
(scheme-file "machine2")))))
|
||||
(scheme-file "helpers")))))
|
||||
(tests ())
|
||||
(programs ((directory "scripts" ((in-file "msg")))))
|
||||
(documentation
|
||||
|
|
203
msg/machine2.scm
203
msg/machine2.scm
|
@ -1,203 +0,0 @@
|
|||
(define-module (msg machine2)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (ice-9 rdelim)
|
||||
#:use-module (ice-9 textual-ports)
|
||||
#:use-module (system foreign)
|
||||
#:use-module (msg helpers)
|
||||
#:use-module (msg config)
|
||||
#:export (machine))
|
||||
|
||||
|
||||
(define home-path (getenv "HOME"))
|
||||
(define arch (run-shell-command "uname -m"))
|
||||
|
||||
|
||||
(define cpu-conf #f)
|
||||
(define mem-conf #f)
|
||||
|
||||
(define* (load-config #:optional args)
|
||||
(define config-file (format #f "~a/.guix/qemu/config.scm" home-path))
|
||||
(define loaded-config (manage-config config-file))
|
||||
(if (not (null? loaded-config))
|
||||
(begin
|
||||
(set! cpu-conf (cdr (assoc 'cpu loaded-config)))
|
||||
(set! mem-conf (cdr (assoc 'mem loaded-config)))
|
||||
#t)
|
||||
#f))
|
||||
|
||||
|
||||
(define* (machine #:optional (args (command-line)))
|
||||
;;(define clean-args (cdr args))
|
||||
(match args
|
||||
(("-h")
|
||||
(help))
|
||||
(("init" rest ...)
|
||||
(init rest))
|
||||
(("reinit")
|
||||
(stop)
|
||||
(clear-install)
|
||||
(init))
|
||||
(("start" rest ...)
|
||||
(start rest))
|
||||
(("stop")
|
||||
(stop))
|
||||
(("rm")
|
||||
(stop)
|
||||
(clear-install))
|
||||
(_
|
||||
(display "Please enter a valid command or -h for help.\n"))))
|
||||
|
||||
|
||||
|
||||
|
||||
(define* (help)
|
||||
(display "\nHere are the available commands:\n\n")
|
||||
(display "start: Start the MSG envrionment.\n"))
|
||||
|
||||
(define* (clear-install)
|
||||
(let loop ()
|
||||
(display "This is a destructive command and will remove your entire Guix instance. Proceed? (y/n)\n")
|
||||
(define response (read-line))
|
||||
(cond
|
||||
((string=? response "y")
|
||||
(system "rm -r ~/.guix")
|
||||
)
|
||||
((string=? response "n")
|
||||
(display "Operation canceled.\n")
|
||||
(exit 0))
|
||||
(else
|
||||
(display "Please enter a valid response.\n")
|
||||
(loop)))))
|
||||
|
||||
(define* (start #:optional args)
|
||||
(define config (load-config))
|
||||
(if (not (directory-exists? (format #f "~a/.guix" home-path)))
|
||||
(begin
|
||||
(display "MSG not initialized. Please run `msg machine init` to continue. If you already tried to install and are receiving this message, try running `msg machine reinit`")
|
||||
(exit 0)))
|
||||
(cond
|
||||
((string=? arch "arm64")
|
||||
(system (format #f "/opt/homebrew/bin/qemu-system-aarch64 \
|
||||
-machine virt,highmem=on \
|
||||
-accel hvf \
|
||||
-cpu host \
|
||||
-smp ~a \
|
||||
-display none \
|
||||
-hda $HOME/.guix/qemu/guix-user.qcow2 \
|
||||
-m ~aG \
|
||||
-virtfs local,path=/Users,security_model=mapped,mount_tag=macos \
|
||||
-bios /opt/homebrew/opt/qemu/share/qemu/edk2-aarch64-code.fd \
|
||||
-device virtio-net,netdev=vmnic \
|
||||
-netdev user,id=vmnic,hostfwd=tcp:127.0.0.1:9001-:22 &" cpu-conf mem-conf)))
|
||||
((string=? arch "x86_64")
|
||||
(system (format #f "/usr/local/bin/qemu-system-x86_64 \
|
||||
-machine type=q35,accel=hvf \
|
||||
-smp ~a \
|
||||
-hda $HOME/.guix/qemu/guix-user.qcow2 \
|
||||
-m ~aG \
|
||||
-display none \
|
||||
-cpu Nehalem \
|
||||
-virtfs local,path=/Users,security_model=mapped,mount_tag=macos \
|
||||
-device virtio-net,netdev=vmnic \
|
||||
-netdev user,id=vmnic,hostfwd=tcp:127.0.0.1:9001-:22 &" cpu-conf mem-conf))))
|
||||
(display "MSG has been started")
|
||||
)
|
||||
|
||||
(define* (stop)
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa admin@127.0.0.1 -p 9001 'sudo shutdown'"))
|
||||
|
||||
|
||||
(define* (init #:optional args)
|
||||
|
||||
(if (not (directory-exists? (format #f "~a/.guix" home-path)))
|
||||
(begin
|
||||
;; Grab ssh cert for installer
|
||||
(system "mkdir -p $HOME/.guix/qemu $HOME/.guix/home $HOME/.guix/ssh-cert")
|
||||
(system "ssh-keygen -R \"[127.0.0.1]:9001\"")
|
||||
;; Download system image and and start vm
|
||||
(cond
|
||||
((string=? arch "arm64")
|
||||
(system "/opt/homebrew/bin/wget https://objectstorage.us-phoenix-1.oraclecloud.com/n/axfgkze2xif1/b/guix-system/o/msg-system-aarch64guix-installer.qcow2.tar.gz -O $HOME/.guix/qemu/guix.qcow2.tar.gz")
|
||||
(system "tar -xvzf $HOME/.guix/qemu/guix.qcow2.tar.gz -C $HOME/.guix/qemu/")
|
||||
(system "/opt/homebrew/bin/wget https://objectstorage.us-phoenix-1.oraclecloud.com/n/axfgkze2xif1/b/guix-system/o/msg-system-aarch64config.scm -O $HOME/.guix/home/config.scm")
|
||||
;; Get msg ssh-key
|
||||
(system "/opt/homebrew/bin/wget https://objectstorage.us-phoenix-1.oraclecloud.com/n/axfgkze2xif1/b/guix-system/o/msg_rsa -O $HOME/.guix/ssh-cert/msg_rsa")
|
||||
(system "chmod 400 ~/.guix/ssh-cert/msg_rsa ")
|
||||
(system "/opt/homebrew/bin/qemu-system-aarch64 \
|
||||
-machine virt,highmem=on \
|
||||
-accel hvf \
|
||||
-cpu host \
|
||||
-smp 4 \
|
||||
-display none \
|
||||
-hda $HOME/.guix/qemu/guix-user.qcow2 \
|
||||
-m 4G \
|
||||
-virtfs local,path=$HOME/.guix/home,security_model=mapped,mount_tag=macos \
|
||||
-bios /opt/homebrew/opt/qemu/share/qemu/edk2-aarch64-code.fd \
|
||||
-device virtio-net,netdev=vmnic \
|
||||
-netdev user,id=vmnic,hostfwd=tcp:127.0.0.1:9001-:22 &")
|
||||
(sleep 5)
|
||||
(update-uid)
|
||||
|
||||
(build-msg)
|
||||
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa root@127.0.0.1 -p 9001 'shutdown'")
|
||||
(system "ssh-keygen -R \"[127.0.0.1]:9001\"")
|
||||
(sleep 30)
|
||||
(system "rm ~/.guix/qemu/guix-user.qcow2")
|
||||
(system "mv ~/.guix/home/guix-user.qcow2 ~/.guix/qemu/")
|
||||
(start)
|
||||
(sleep 15)
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa admin@127.0.0.1 -p 9001 'sudo mkdir /Users /boot/efi'")
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa admin@127.0.0.1 -p 9001 'sudo mount /dev/vda1 /boot/efi'"))
|
||||
((string=? arch "x86_64")
|
||||
(system "/usr/local/bin/wget https://objectstorage.us-phoenix-1.oraclecloud.com/n/axfgkze2xif1/b/guix-system/o/msg-system-x86_64guix-installer.qcow2.tar.gz -O $HOME/.guix/qemu/guix.qcow2.tar.gz")
|
||||
(system "tar -xvzf $HOME/.guix/qemu/guix.qcow2.tar.gz -C $HOME/.guix/qemu/")
|
||||
(system "/usr/local/bin/wget https://objectstorage.us-phoenix-1.oraclecloud.com/n/axfgkze2xif1/b/guix-system/o/msg-system-x86_64config.scm -O $HOME/.guix/home/config.scm")
|
||||
;; Get msg ssh-key
|
||||
(system "/usr/local/bin/wget https://objectstorage.us-phoenix-1.oraclecloud.com/n/axfgkze2xif1/b/guix-system/o/msg_rsa -O $HOME/.guix/ssh-cert/msg_rsa")
|
||||
(system "chmod 400 ~/.guix/ssh-cert/msg_rsa ")
|
||||
(system "/usr/local/bin/qemu-system-x86_64 \
|
||||
-machine type=q35,accel=hvf \
|
||||
-smp 4 \
|
||||
-hda $HOME/.guix/qemu/guix-installer.qcow2 \
|
||||
-m 4G \
|
||||
-display none \
|
||||
-cpu Nehalem \
|
||||
-virtfs local,path=$HOME/.guix/home,security_model=mapped,mount_tag=macos \
|
||||
-device virtio-net,netdev=vmnic \
|
||||
-netdev user,id=vmnic,hostfwd=tcp:127.0.0.1:9001-:22 &")
|
||||
(sleep 5)
|
||||
(update-uid)
|
||||
|
||||
(build-msg)
|
||||
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa root@127.0.0.1 -p 9001 'shutdown'")
|
||||
(system "ssh-keygen -R \"[127.0.0.1]:9001\"")
|
||||
(sleep 30)
|
||||
(system "rm ~/.guix/qemu/guix-installer.qcow2")
|
||||
(system "mv ~/.guix/home/guix-user.qcow2 ~/.guix/qemu/")
|
||||
(start)
|
||||
(sleep 15)
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa admin@127.0.0.1 -p 9001 'sudo mkdir /Users'")))
|
||||
|
||||
|
||||
|
||||
(newline)
|
||||
(display "Reconfiguring MSG, this may take a few minutes...")
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa admin@127.0.0.1 -p 9001 'sudo guix system reconfigure --allow-downgrades /etc/config.scm'")
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa admin@127.0.0.1 -p 9001 'sudo shutdown'")
|
||||
(display "\nMSG is ready to be started. Run 'msg machine start' to begin.\n"))
|
||||
(display "MSG already initialized. Please run `msg machine reinit` if you would like to recreate it."))
|
||||
|
||||
|
||||
)
|
||||
|
||||
(define (build-msg)
|
||||
;; Build MSG
|
||||
(define* filename (run-shell-command "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa root@127.0.0.1 -p 9001 'guix system image -t qcow2 --save-provenance --image-size=100G /etc/config.scm'"))
|
||||
(system (format #f "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa root@127.0.0.1 -p 9001 'cp ~a /mnt/macos/guix-user.qcow2'" filename)))
|
||||
|
||||
(define (update-uid)
|
||||
;; Update UID for msg image
|
||||
(system "sed -i.bak \"s/\\$UID/$(id -u)/g\" ~/.guix/home/config.scm && rm ~/.guix/home/config.scm.bak")
|
||||
(system "ssh -o StrictHostKeyChecking=no -i $HOME/.guix/ssh-cert/msg_rsa root@127.0.0.1 -p 9001 'cp /mnt/macos/config.scm /etc/config.scm'"))
|
|
@ -2,7 +2,7 @@
|
|||
--no-auto-compile -e main -s
|
||||
!#
|
||||
|
||||
(use-modules (msg machine2)
|
||||
(use-modules ;;(msg machine2)
|
||||
(msg shell)
|
||||
(ice-9 match))
|
||||
|
||||
|
@ -10,8 +10,8 @@
|
|||
(define clean-args (cdr args))
|
||||
|
||||
(match clean-args
|
||||
(("machine" rest ...)
|
||||
(machine rest))
|
||||
;;(("machine" rest ...)
|
||||
;; (machine rest))
|
||||
(("shell" rest ...)
|
||||
(shell))
|
||||
(("-h")
|
||||
|
|
Loading…
Add table
Reference in a new issue