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

feat: add finch-daemon #1181

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "finch-core"]
path = deps/finch-core
url = https://github.com/runfinch/finch-core.git
url = https://github.com/pendo324/finch-core.git
coderbirju marked this conversation as resolved.
Show resolved Hide resolved
8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ GITCOMMIT ?= $(shell git rev-parse HEAD)$(shell test -z "$(git status --porcelai
LDFLAGS = "-w -X $(PACKAGE)/pkg/version.Version=$(VERSION) -X $(PACKAGE)/pkg/version.GitCommit=$(GITCOMMIT)"
MIN_MACOS_VERSION ?= 11.0

FINCH_DAEMON_LOCATION_ROOT ?= $(FINCH_OS_IMAGE_LOCATION_ROOT)/finch-daemon
FINCH_DAEMON_LOCATION ?= $(FINCH_DAEMON_LOCATION_ROOT)/finch-daemon

GOOS ?= $(shell $(GO) env GOOS)
ifeq ($(GOOS),windows)
BINARYNAME := $(addsuffix .exe, $(BINARYNAME))
Expand Down Expand Up @@ -61,7 +64,7 @@ endif

FINCH_CORE_DIR := $(CURDIR)/deps/finch-core

remote-all: arch-test finch install.finch-core-dependencies finch.yaml networks.yaml config.yaml
remote-all: arch-test finch install.finch-core-dependencies finch.yaml networks.yaml config.yaml $(OUTDIR)/finch-daemon/finch@.service
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need separate targets for networks.yaml, config.yaml, $(OUTDIR)/finch-daemon/finch@.service?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think anything that writes a file should probably have its own rule so that its not re-created unless the file is deleted


ifeq ($(BUILD_OS), Windows_NT)
include Makefile.windows
Expand Down Expand Up @@ -146,6 +149,9 @@ finch-all:
.PHONY: release
release: check-licenses all download-licenses

$(OUTDIR)/finch-daemon/finch@.service:
cp finch@.service $(OUTDIR)/finch-daemon/finch@.service

.PHONY: coverage
coverage:
go test $(shell go list ./... | grep -v e2e | grep -v benchmark | grep -v mocks) -coverprofile=test-coverage.out
Expand Down
22 changes: 21 additions & 1 deletion Makefile.darwin
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,40 @@ FINCH_OS_IMAGE_LOCATION_ROOT ?= $(DEST)
FINCH_IMAGE_LOCATION := $(FINCH_OS_IMAGE_LOCATION_ROOT)/os/$(FINCH_OS_BASENAME)
FINCH_IMAGE_DIGEST := "sha512:$(FINCH_OS_DIGEST)"

# check if finch-daemon socket is in a default path
SHOULD_ADD_DAEMON_MOUNT = $(shell if [[ $(FINCH_DAEMON_LOCATION_ROOT) = ^\/Users\/.* ]]; then echo "0"; else echo "1"; fi)
Shubhranshu153 marked this conversation as resolved.
Show resolved Hide resolved

.PHONY: finch.yaml
finch.yaml: $(OS_OUTDIR)/finch.yaml

# only add the finch-daemon mount when its not in a default path
# this scenario is common in dev, where the typical path is /Users/...
ifeq ($(SHOULD_ADD_DAEMON_MOUNT),0)
finch.yaml: add-daemon-mount
endif

$(OS_OUTDIR)/finch.yaml: $(OS_OUTDIR) finch.yaml.d/common.yaml finch.yaml.d/mac.yaml
# merge the appropriate YAMLs into a temporary finch.yaml file on the current working directory
cd finch.yaml.d && yq eval-all '. as $$item ireduce ({}; . *+ $$item)' mac.yaml common.yaml > ../finch.yaml.temp
cd finch.yaml.d && yq eval-all '. as $$item ireduce ({}; . *+ $$item)' common.yaml mac.yaml > ./../finch.yaml.temp

# using -i.bak is very intentional, it allows the following commands to succeed for both GNU / BSD sed
# this sed command uses the alternative separator of "|" because the image location uses "/"
sed -i.bak -e "s|<finch_image_location>|$(FINCH_IMAGE_LOCATION)|g" finch.yaml.temp
sed -i.bak -e "s/<finch_image_arch>/$(LIMA_ARCH)/g" finch.yaml.temp
sed -i.bak -e "s/<finch_image_digest>/$(FINCH_IMAGE_DIGEST)/g" finch.yaml.temp
sed -i.bak -e "s|<finch_daemon_root>|$(FINCH_DAEMON_LOCATION_ROOT)|g" finch.yaml.temp
sed -i.bak -e "s|<finch_daemon_location>|$(FINCH_DAEMON_LOCATION)|g" finch.yaml.temp

# Replacement was successful, so cleanup .bak
@rm finch.yaml.temp.bak

mv finch.yaml.temp $@

.PHONY: add-daemon-mount
add-daemon-mount:
cd finch.yaml.d && yq eval-all '. as $$item ireduce ({}; . *+ $$item)' $(OS_OUTDIR)/finch.yaml finch-daemon-mount.yaml > ./../finch.yaml.temp
sed -i.bak -e "s|<finch_daemon_root>|$(FINCH_DAEMON_LOCATION_ROOT)|g" finch.yaml.temp
# Replacement was successful, so cleanup .bak
@rm finch.yaml.temp.bak

mv finch.yaml.temp $(OS_OUTDIR)/finch.yaml
7 changes: 6 additions & 1 deletion finch.yaml.d/common.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,13 @@ provision:
printf '[Unit]\nDescription=Delete hanging data on boot\nDefaultDependencies=no\nBefore=basic.target\n\n[Service]\nType=oneshot\nExecStart=/bin/bash -c "sudo rm -rf /var/lib/cni/networks/bridge/**; sudo rm -rf /var/lib/cni/results/bridge-finch-*"\n\n[Install]\nWantedBy=basic.target\n' | sudo tee /usr/local/lib/systemd/system/finch-cleanup-on-boot.service
sudo systemctl enable --now finch-cleanup-on-boot.service

sudo systemctl restart containerd.service
# Set a default ulimit for number of files in containerd
sudo mkdir -p /usr/local/lib/systemd/system/containerd.service.d/
printf '[Service]\nLimitNOFILE=1048576\n' | sudo tee /usr/local/lib/systemd/system/containerd.service.d/finch.conf
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this needed?

pendo324 marked this conversation as resolved.
Show resolved Hide resolved

sudo systemctl daemon-reload

sudo systemctl restart containerd.service
env:
# Containerd namespace is used by the lima cidata script
# 40-install-containerd.sh. Specifically this variable is defining the
Expand Down
3 changes: 3 additions & 0 deletions finch.yaml.d/finch-daemon-mount.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
mounts:
- location: "<finch_daemon_root>"
writable: true
16 changes: 14 additions & 2 deletions finch.yaml.d/mac.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ provision:
- mode: boot
script: |
modprobe virtiofs
# port this to common.yaml after windows socket forwarding is added
- mode: user
script: |
sudo cp <finch_daemon_location> /usr/local/bin/finch-daemon
sudo cp <finch_daemon_root>/finch@.service /usr/local/lib/systemd/system/finch@.service

sudo systemctl daemon-reload
sudo systemctl enable --now finch@${UID}
mounts:
- location: "~"
mountPoint: null
Expand All @@ -22,9 +30,9 @@ mounts:
cache: "fscache"
- location: "/tmp/lima"
writable: true
- location: "/var/folders"
- location: "/private"
writable: true
- location: "/private/var/folders"
- location: "/var/folders"
writable: true

ssh:
Expand All @@ -44,3 +52,7 @@ hostResolver:
hosts:
host.finch.internal: host.lima.internal
host.docker.internal: host.lima.internal

portForwards:
- guestSocket: "/run/finch.sock"
hostSocket: "{{.Dir}}/sock/finch.sock"
17 changes: 17 additions & 0 deletions finch@.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[Unit]
Description=Finch daemon %I
Documentation=https://runfinch.com https://github.com/runfinch/finch-daemon
After=network.target local-fs.target containerd.service

[Service]
ExecStart=/usr/local/bin/finch-daemon --socket-owner %i
ExecStartPost=-rm -rf /var/run/docker.sock
ExecStartPost=ln -s /run/finch.sock /var/run/docker.sock
Shubhranshu153 marked this conversation as resolved.
Show resolved Hide resolved

Type=notify
Delegate=yes
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
Loading