diff --git a/msg/machine.scm b/msg/machine.scm deleted file mode 100644 index d65c1af..0000000 --- a/msg/machine.scm +++ /dev/null @@ -1,203 +0,0 @@ -(define-module (msg machine) - #: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'")) diff --git a/scripts/msg.in b/scripts/msg.in index 341c393..a7cb1ca 100644 --- a/scripts/msg.in +++ b/scripts/msg.in @@ -2,7 +2,7 @@ --no-auto-compile -e main -s !# -(use-modules (msg machine) +(use-modules (msg machine2) (msg shell) (ice-9 match))