Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setup NixOS Hypervisor #629

Merged
merged 15 commits into from
Dec 22, 2023
Merged

Setup NixOS Hypervisor #629

merged 15 commits into from
Dec 22, 2023

Conversation

mvgijssel
Copy link
Member

@mvgijssel mvgijssel commented Dec 21, 2023

closes #628

TODO

@mvgijssel mvgijssel changed the title Disable bluetooth tracking Setup NixOS Hypervisor Dec 21, 2023
@mvgijssel
Copy link
Member Author

mvgijssel commented Dec 21, 2023

Trying to install NixOS:

  • First USB didn't boot to the NixOS installer - installed by Etcher
  • Second USB did boot to NixOS to kernel panic immediately after - installed by Etcher
  • Third USB boot to NixOS installer without a problem - installed using sudo dd if=/Users/maarten/Downloads/nixos-minimal-23.11.2130.d65bceaee0fb-x86_64-linux.iso of=/dev/rdisk4 bs=4M

@mvgijssel
Copy link
Member Author

mvgijssel commented Dec 21, 2023

Import the zpool:

zpool import
# find the proper pool name
zpool import -f new_data
zpool status
zpool upgrade
zpool update new_data

@mvgijssel
Copy link
Member Author

mvgijssel commented Dec 21, 2023

Installing kubevirt from https://kubevirt.io/quickstart_cloud/

export VERSION=$(curl -s https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)
echo $VERSION
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/kubevirt-operator.yaml
kubectl create -f https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/kubevirt-cr.yaml
kubectl get all -n kubevirt # poll until ready
export VERSION=$(basename $(curl -s -w %{redirect_url} https://github.com/kubevirt/containerized-data-importer/releases/latest))
kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-operator.yaml
kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-cr.yaml
kubectl get cdi cdi -n cdi # poll until done
kubectl get all -n cdi # poll until done

From kubevirt/containerized-data-importer#3005

kubectl patch --type merge -p '{"spec": {"claimPropertySets": [{"accessModes": ["ReadWriteOnce"]}]}}' StorageProfile local-path

Setup HAOS using (https://charlottemach.com/2020/11/03/windows-kubevirt-k3s.html)

cat <<EOF > dv_haos.yml
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
  name: "haos"
spec:
  storage:
    resources:
      requests:
        storage: 40Gi
  source:
    http:
      url: "https://github.com/home-assistant/operating-system/releases/download/11.2/haos_ova-11.2.qcow2.xz"
EOF

kubectl create -f dv_haos.yml

cat <<EOF > nad_haos.yml
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: bridge-network
spec:
  config: '{
    "cniVersion": "1.0.0",
    "name": "bridge-network",
    "type": "bridge",
    "bridge": "br0"
}'
EOF

kubectl create -f nad_haos.yml

cat <<EOF > vm_haos.yml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  creationTimestamp: 2018-07-04T15:03:08Z
  generation: 1
  labels:
    kubevirt.io/os: linux
  name: haos
spec:
  running: true
  template:
    metadata:
      creationTimestamp: null
      labels:
        kubevirt.io/domain: haos
    spec:
      domain:
        cpu:
          cores: 2
        devices:
          disks:
            - disk:
                bus: virtio
              name: disk0
          interfaces:
            - name: default
               masquerade: {}
            - name: bridge-network
              bridge: {}
        machine:
          type: q35
        resources:
          requests:
            memory: 4096M
      networks:
        - name: bridge-network
          multus:
            networkName: bridge-network
        - name: default
           pod: {} # Stock pod network
      volumes:
        - name: disk0
          persistentVolumeClaim:
            claimName: haos
EOF

kubectl create -f vm_haos.yml

kubectl get pods # wait for the importer process to complete
kubectl proxy --address=0.0.0.0 --accept-hosts='^*$' --port 8080 # port forward 8080 to localhost
virtctl console haos

@mvgijssel
Copy link
Member Author

mvgijssel commented Dec 22, 2023

k3s has cni in non-default location, so we need to symlink directories for multus to work:

/var/lib/rancher/k3s/agent/etc/cni/net.d -> /etc/cni/net.d
/var/lib/rancher/k3s/data/current/bin -> /opt/cni/bin

do this using article https://www.reddit.com/r/NixOS/comments/ckg1sr/how_can_i_turn_a_path_to_stateful/

systemd.tmpfiles.rules = [ "d /var/lib/foobar 0750 wwwrun wwwrun - -" "d /var/cache/foobar 0750 wwwrun wwwrun - -" ];

Just need to know how to specify a symlink

@mvgijssel
Copy link
Member Author

mvgijssel commented Dec 22, 2023

Installing multus

kubectl create -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/master/deployments/multus-daemonset.yml
kubectl get pods --all-namespaces | grep -i multus
ls -la /etc/cni/net.d # check for multus here
ls -la /opt/cni/bin # check for multus here
kubectl get net-attach-def --all-namespaces
journalctl -u k3s

@mvgijssel
Copy link
Member Author

PIVOT: install docker and boot the legacy setup using docker compose. That way we can slowly figure out how to run HAOS with Kubevirt and can migrate all components one by one without downtime.

@mvgijssel
Copy link
Member Author

@mvgijssel
Copy link
Member Author

Make sure to update the NixOS firewall settings to enable Homekit bridge to work.

@mvgijssel
Copy link
Member Author

Can use the following from macOS:

NIX_SSHOPTS="-o ForwardAgent=yes" nixos-rebuild switch -I nixos-config=configuration.nix --target-host [email protected] --build-host [email protected] --fast --use-remote-sudo

@mvgijssel mvgijssel enabled auto-merge (squash) December 22, 2023 22:06
@mvgijssel mvgijssel merged commit 59f71f1 into master Dec 22, 2023
3 checks passed
@mvgijssel mvgijssel deleted the mg/628/setup-nixos-hypervisor branch December 22, 2023 22:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Setup NixOS hypervisor
1 participant