mirror of
https://github.com/containers/netavark.git
synced 2026-02-05 06:45:56 +01:00
On systems using nftables directly without firewalld, restarting the nftables.service would flush all of Netavark's rules, breaking container networking. This introduces a new "oneshot" command, `netavark firewall-reload`, which reads the container network state from /run/containers/netavark/ and re-applies all necessary firewall rules. To automate this, a new systemd service, `netavark-nftables-reload.service`, is added. This service is procedurally linked to `nftables.service` and triggers the reload command automatically whenever the main nftables service is started or reloaded. Fixes: #1258 Signed-off-by: Rishikpulhani <rishikpulhani@gmail.com>
166 lines
5.3 KiB
Makefile
166 lines
5.3 KiB
Makefile
# This Makefile is intended for developer convenience. For the most part
|
|
# all the targets here simply wrap calls to the `cargo` tool. Therefore,
|
|
# most targets must be marked 'PHONY' to prevent `make` getting in the way
|
|
#
|
|
#prog :=xnixperms
|
|
|
|
DESTDIR ?=
|
|
PREFIX ?= /usr/local
|
|
LIBEXECDIR ?= ${PREFIX}/libexec
|
|
LIBEXECPODMAN ?= ${LIBEXECDIR}/podman
|
|
SYSTEMDDIR ?= ${PREFIX}/lib/systemd/system
|
|
|
|
SELINUXOPT ?= $(shell test -x /usr/sbin/selinuxenabled && selinuxenabled && echo -Z)
|
|
# Get crate version by parsing the line that starts with version.
|
|
CRATE_VERSION ?= $(shell grep ^version Cargo.toml | awk '{print $$3}')
|
|
GIT_TAG ?= $(shell git describe --tags)
|
|
|
|
# Set this to any non-empty string to enable unoptimized
|
|
# build w/ debugging features.
|
|
debug ?=
|
|
|
|
# Set path to cargo executable, when running under CI make sure to add --locked so Cargo.lock is not modified
|
|
CARGO ?= cargo $(if $(CI),--locked,)
|
|
|
|
# All complication artifacts, including dependencies and intermediates
|
|
# will be stored here, for all architectures. Use a non-default name
|
|
# since the (default) 'target' is used/referenced ambiguously in many
|
|
# places in the tool-chain (including 'make' itself).
|
|
CARGO_TARGET_DIR ?= targets
|
|
export CARGO_TARGET_DIR # 'cargo' is sensitive to this env. var. value.
|
|
|
|
SOURCES = $(shell find src/ -type f) Cargo.toml Cargo.lock Makefile
|
|
|
|
ifdef debug
|
|
$(info debug is $(debug))
|
|
# These affect both $(CARGO_TARGET_DIR) layout and contents
|
|
# Ref: https://doc.rust-lang.org/cargo/guide/build-cache.html
|
|
release :=
|
|
profile :=debug
|
|
else
|
|
release :=--release
|
|
profile :=release
|
|
endif
|
|
|
|
.PHONY: all
|
|
all: build docs
|
|
|
|
bin:
|
|
mkdir -p $@
|
|
|
|
$(CARGO_TARGET_DIR):
|
|
mkdir -p $@
|
|
|
|
.PHONY: build
|
|
build: bin/netavark
|
|
|
|
bin/netavark: $(SOURCES) bin $(CARGO_TARGET_DIR)
|
|
$(CARGO) build $(release)
|
|
cp $(CARGO_TARGET_DIR)/$(profile)/netavark bin/netavark
|
|
cp $(CARGO_TARGET_DIR)/$(profile)/netavark-dhcp-proxy-client bin/netavark-dhcp-proxy-client
|
|
cp $(CARGO_TARGET_DIR)/$(profile)/netavark-connection-tester bin/netavark-connection-tester
|
|
|
|
|
|
.PHONY: examples
|
|
examples: bin $(CARGO_TARGET_DIR)
|
|
cargo build --examples $(release)
|
|
|
|
.PHONY: crate-publish
|
|
crate-publish:
|
|
@if [ "v$(CRATE_VERSION)" != "$(GIT_TAG)" ]; then\
|
|
echo "Git tag is not equivalent to the version set in Cargo.toml. Please checkout the correct tag";\
|
|
exit 1;\
|
|
fi
|
|
@echo "It is expected that you have already done 'cargo login' before running this command. If not command may fail later"
|
|
$(CARGO) publish --dry-run
|
|
$(CARGO) publish
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf bin
|
|
rm -rf vendor-tarball
|
|
if [ "$(CARGO_TARGET_DIR)" = "targets" ]; then rm -rf targets; fi
|
|
$(MAKE) -C docs clean
|
|
|
|
.PHONY: client
|
|
client: bin $(CARGO_TARGET_DIR)
|
|
$(CARGO) build --bin netavark-dhcp-proxy-client $(release)
|
|
|
|
|
|
.PHONY: docs
|
|
docs: ## build the docs on the host
|
|
$(MAKE) -C docs
|
|
|
|
NV_UNIT_FILES = contrib/systemd/system/netavark-dhcp-proxy.service \
|
|
contrib/systemd/system/netavark-firewalld-reload.service \
|
|
contrib/systemd/system/netavark-nftables-reload.service
|
|
|
|
%.service: %.service.in
|
|
sed -e 's;@@NETAVARK@@;$(LIBEXECPODMAN)/netavark;g' $< >$@.tmp.$$ \
|
|
&& mv -f $@.tmp.$$ $@
|
|
|
|
.PHONY: install
|
|
install: $(NV_UNIT_FILES)
|
|
install ${SELINUXOPT} -D -m0755 bin/netavark $(DESTDIR)$(LIBEXECPODMAN)/netavark
|
|
$(MAKE) -C docs install
|
|
install ${SELINUXOPT} -m 755 -d ${DESTDIR}${SYSTEMDDIR}
|
|
install ${SELINUXOPT} -m 644 contrib/systemd/system/netavark-dhcp-proxy.socket ${DESTDIR}${SYSTEMDDIR}/netavark-dhcp-proxy.socket
|
|
install ${SELINUXOPT} -m 644 contrib/systemd/system/netavark-dhcp-proxy.service ${DESTDIR}${SYSTEMDDIR}/netavark-dhcp-proxy.service
|
|
install ${SELINUXOPT} -m 644 contrib/systemd/system/netavark-firewalld-reload.service ${DESTDIR}${SYSTEMDDIR}/netavark-firewalld-reload.service
|
|
install ${SELINUXOPT} -m 644 contrib/systemd/system/netavark-nftables-reload.service ${DESTDIR}${SYSTEMDDIR}/netavark-nftables-reload.service
|
|
|
|
.PHONY: uninstall
|
|
uninstall:
|
|
$(MAKE) -C docs uninstall
|
|
rm -f $(DESTDIR)$(LIBEXECPODMAN)/netavark
|
|
rm -f $(PREFIX)/share/man/man1/netavark*.1
|
|
rm -f ${DESTDIR}${SYSTEMDDIR}/netavark-dhcp-proxy.service
|
|
rm -f ${DESTDIR}${SYSTEMDDIR}/netavark-dhcp-proxy.socket
|
|
rm -f ${DESTDIR}${SYSTEMDDIR}/netavark-firewalld-reload.service
|
|
|
|
.PHONY: test
|
|
test: unit integration
|
|
|
|
# Used by CI to compile the unit tests but not run them
|
|
.PHONY: build_unit
|
|
build_unit: $(CARGO_TARGET_DIR)
|
|
$(CARGO) test --no-run
|
|
|
|
.PHONY: unit
|
|
unit: $(CARGO_TARGET_DIR)
|
|
$(CARGO) test
|
|
|
|
.PHONY: integration
|
|
integration: $(CARGO_TARGET_DIR) examples
|
|
# needs to be run as root or with podman unshare --rootless-netns
|
|
bats test/
|
|
bats test-dhcp/
|
|
|
|
.PHONY: validate
|
|
validate: $(CARGO_TARGET_DIR)
|
|
$(CARGO) fmt --all -- --check
|
|
$(CARGO) clippy -p netavark -- -D warnings
|
|
$(MAKE) docs
|
|
|
|
.PHONY: vendor-tarball
|
|
vendor-tarball: build install.cargo-vendor-filterer
|
|
VERSION=$(shell bin/netavark --version | cut -f2 -d" ") && \
|
|
$(CARGO) vendor-filterer --format=tar.gz --prefix vendor/ && \
|
|
mkdir -p vendor-tarball && \
|
|
mv vendor.tar.gz vendor-tarball/netavark-v$$VERSION-vendor.tar.gz && \
|
|
gzip -c bin/netavark > vendor-tarball/netavark.gz && \
|
|
cd vendor-tarball && \
|
|
sha256sum netavark.gz netavark-v$$VERSION-vendor.tar.gz > sha256sum
|
|
|
|
.PHONY: install.cargo-vendor-filterer
|
|
install.cargo-vendor-filterer:
|
|
$(CARGO) install cargo-vendor-filterer
|
|
|
|
.PHONY: mock-rpm
|
|
mock-rpm:
|
|
rpkg local
|
|
|
|
.PHONY: help
|
|
help:
|
|
@echo "usage: make $(prog) [debug=1]"
|