From 36251114d8ac47daa764329419b40ab4dec4d6b0 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 5 Jul 2018 20:00:56 +0200 Subject: [PATCH] Use dhcp client / avahi after NM (#75) * Use dhcp client / avahi after NM * Store networkmanager * Add default connection * cleanup * cleanup lease * faster boot * Cleanup * Fix permission --- buildroot-external/configs/ova_defconfig | 2 ++ buildroot-external/configs/rpi0_w_defconfig | 2 ++ buildroot-external/configs/rpi2_defconfig | 2 ++ buildroot-external/configs/rpi3_64_defconfig | 2 ++ buildroot-external/configs/rpi3_defconfig | 2 ++ buildroot-external/configs/rpi_defconfig | 2 ++ .../etc/NetworkManager/NetworkManager.conf | 3 +++ .../system/avahi-daemon.service.d/nm.conf | 2 ++ .../var-lib-NetworkManager.mount | 1 + .../rootfs-overlay/etc/tmpfiles.d/nm.conf | 3 +++ ...tworkManager-system\\x2dconnections.mount" | 2 +- .../systemd/system/hassos-supervisor.service | 2 +- .../system/var-lib-NetworkManager.mount | 14 ++++++++++ .../lib/systemd/system/var-lib-docker.mount | 2 +- .../usr/share/system-connections/default | 11 ++++++++ buildroot-external/scripts/rootfs-layer.sh | 7 +++-- buildroot-patches/0008-Fix-dhcp-client.patch | 27 +++++++++++++++++++ buildroot/package/dhcp/dhcp.mk | 3 +-- 18 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/nm.conf create mode 120000 buildroot-external/rootfs-overlay/etc/systemd/system/hassos-bind.target.wants/var-lib-NetworkManager.mount create mode 100644 buildroot-external/rootfs-overlay/etc/tmpfiles.d/nm.conf create mode 100644 buildroot-external/rootfs-overlay/usr/lib/systemd/system/var-lib-NetworkManager.mount create mode 100644 buildroot-external/rootfs-overlay/usr/share/system-connections/default create mode 100644 buildroot-patches/0008-Fix-dhcp-client.patch diff --git a/buildroot-external/configs/ova_defconfig b/buildroot-external/configs/ova_defconfig index 89696c18a..1c08a6700 100644 --- a/buildroot-external/configs/ova_defconfig +++ b/buildroot-external/configs/ova_defconfig @@ -40,6 +40,8 @@ BR2_PACKAGE_AVAHI=y # BR2_PACKAGE_AVAHI_AUTOIPD is not set BR2_PACKAGE_AVAHI_DAEMON=y BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_CLIENT=y BR2_PACKAGE_DROPBEAR=y # BR2_PACKAGE_DROPBEAR_CLIENT is not set # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set diff --git a/buildroot-external/configs/rpi0_w_defconfig b/buildroot-external/configs/rpi0_w_defconfig index af10220b3..6b50c5cab 100644 --- a/buildroot-external/configs/rpi0_w_defconfig +++ b/buildroot-external/configs/rpi0_w_defconfig @@ -48,6 +48,8 @@ BR2_PACKAGE_AVAHI=y # BR2_PACKAGE_AVAHI_AUTOIPD is not set BR2_PACKAGE_AVAHI_DAEMON=y BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_CLIENT=y BR2_PACKAGE_DROPBEAR=y # BR2_PACKAGE_DROPBEAR_CLIENT is not set # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set diff --git a/buildroot-external/configs/rpi2_defconfig b/buildroot-external/configs/rpi2_defconfig index 5cad57467..8f0f87fe3 100644 --- a/buildroot-external/configs/rpi2_defconfig +++ b/buildroot-external/configs/rpi2_defconfig @@ -47,6 +47,8 @@ BR2_PACKAGE_AVAHI=y # BR2_PACKAGE_AVAHI_AUTOIPD is not set BR2_PACKAGE_AVAHI_DAEMON=y BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_CLIENT=y BR2_PACKAGE_DROPBEAR=y # BR2_PACKAGE_DROPBEAR_CLIENT is not set # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set diff --git a/buildroot-external/configs/rpi3_64_defconfig b/buildroot-external/configs/rpi3_64_defconfig index 3cc5f2e69..fc08efed7 100644 --- a/buildroot-external/configs/rpi3_64_defconfig +++ b/buildroot-external/configs/rpi3_64_defconfig @@ -48,6 +48,8 @@ BR2_PACKAGE_AVAHI=y # BR2_PACKAGE_AVAHI_AUTOIPD is not set BR2_PACKAGE_AVAHI_DAEMON=y BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_CLIENT=y BR2_PACKAGE_DROPBEAR=y # BR2_PACKAGE_DROPBEAR_CLIENT is not set # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set diff --git a/buildroot-external/configs/rpi3_defconfig b/buildroot-external/configs/rpi3_defconfig index b4de4194a..c6d3d95c2 100644 --- a/buildroot-external/configs/rpi3_defconfig +++ b/buildroot-external/configs/rpi3_defconfig @@ -48,6 +48,8 @@ BR2_PACKAGE_AVAHI=y # BR2_PACKAGE_AVAHI_AUTOIPD is not set BR2_PACKAGE_AVAHI_DAEMON=y BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_CLIENT=y BR2_PACKAGE_DROPBEAR=y # BR2_PACKAGE_DROPBEAR_CLIENT is not set # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set diff --git a/buildroot-external/configs/rpi_defconfig b/buildroot-external/configs/rpi_defconfig index bab699e35..d5c2d63c3 100644 --- a/buildroot-external/configs/rpi_defconfig +++ b/buildroot-external/configs/rpi_defconfig @@ -47,6 +47,8 @@ BR2_PACKAGE_AVAHI=y # BR2_PACKAGE_AVAHI_AUTOIPD is not set BR2_PACKAGE_AVAHI_DAEMON=y BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_CLIENT=y BR2_PACKAGE_DROPBEAR=y # BR2_PACKAGE_DROPBEAR_CLIENT is not set # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set diff --git a/buildroot-external/rootfs-overlay/etc/NetworkManager/NetworkManager.conf b/buildroot-external/rootfs-overlay/etc/NetworkManager/NetworkManager.conf index 7d62bd22d..3510d5475 100644 --- a/buildroot-external/rootfs-overlay/etc/NetworkManager/NetworkManager.conf +++ b/buildroot-external/rootfs-overlay/etc/NetworkManager/NetworkManager.conf @@ -6,3 +6,6 @@ rc-manager=file [keyfile] unmanaged-devices=type:bridge;type:tun;type:veth + +[logging] +backend=journal diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/nm.conf b/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/nm.conf new file mode 100644 index 000000000..31a36df3a --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/avahi-daemon.service.d/nm.conf @@ -0,0 +1,2 @@ +[Unit] +After=NetworkManager.service diff --git a/buildroot-external/rootfs-overlay/etc/systemd/system/hassos-bind.target.wants/var-lib-NetworkManager.mount b/buildroot-external/rootfs-overlay/etc/systemd/system/hassos-bind.target.wants/var-lib-NetworkManager.mount new file mode 120000 index 000000000..eea387e8c --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/systemd/system/hassos-bind.target.wants/var-lib-NetworkManager.mount @@ -0,0 +1 @@ +/usr/lib/systemd/system/var-lib-NetworkManager.mount \ No newline at end of file diff --git a/buildroot-external/rootfs-overlay/etc/tmpfiles.d/nm.conf b/buildroot-external/rootfs-overlay/etc/tmpfiles.d/nm.conf new file mode 100644 index 000000000..5089e77ff --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/tmpfiles.d/nm.conf @@ -0,0 +1,3 @@ +# Cleanup lease files +e /var/lib/NetworkManager/*.lease - - - 14d +C /mnt/overlay/etc/NetworkManager/system-connections - - - - /usr/share/system-connections diff --git "a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/etc-NetworkManager-system\\x2dconnections.mount" "b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/etc-NetworkManager-system\\x2dconnections.mount" index c312ebbb9..ea15e6132 100644 --- "a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/etc-NetworkManager-system\\x2dconnections.mount" +++ "b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/etc-NetworkManager-system\\x2dconnections.mount" @@ -1,7 +1,7 @@ [Unit] Description=NetworkManager persistent system connections Requires=mnt-overlay.mount -After=mnt-overlay.mount +After=mnt-overlay.mount systemd-tmpfiles-setup.service Before=NetworkManager.service hassos-config.service [Mount] diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/hassos-supervisor.service b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/hassos-supervisor.service index ac68fc988..195314d83 100644 --- a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/hassos-supervisor.service +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/hassos-supervisor.service @@ -1,7 +1,7 @@ [Unit] Description=HassOS supervisor Requires=docker.service -After=docker.service rauc.service dbus.socket +After=docker.service rauc.service dbus.socket NetworkManager.service RequiresMountsFor=/mnt/data StartLimitIntervalSec=60 StartLimitBurst=5 diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var-lib-NetworkManager.mount b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var-lib-NetworkManager.mount new file mode 100644 index 000000000..bc9012d2d --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var-lib-NetworkManager.mount @@ -0,0 +1,14 @@ +[Unit] +Description=NetworkManager persistent data +Requires=mnt-data.mount +After=mnt-data.mount +Before=NetworkManager.service + +[Mount] +What=/mnt/overlay/var/lib/NetworkManager +Where=/var/lib/NetworkManager +Type=none +Options=bind + +[Install] +WantedBy=hassos-bind.target diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var-lib-docker.mount b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var-lib-docker.mount index e2f76c401..2f262e904 100644 --- a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var-lib-docker.mount +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var-lib-docker.mount @@ -1,6 +1,6 @@ [Unit] Description=Docker persistent data -Requires=mnt-data.mount docker.service +Requires=mnt-data.mount After=mnt-data.mount Before=docker.service diff --git a/buildroot-external/rootfs-overlay/usr/share/system-connections/default b/buildroot-external/rootfs-overlay/usr/share/system-connections/default new file mode 100644 index 000000000..510318b1f --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/share/system-connections/default @@ -0,0 +1,11 @@ +[connection] +id=HassOS default +uuid=f62bf7c2-e565-49ff-bbfc-a4cf791e6add +type=802-3-ethernet + +[ipv4] +method=auto + +[ipv6] +addr-gen-mode=stable-privacy +method=auto diff --git a/buildroot-external/scripts/rootfs-layer.sh b/buildroot-external/scripts/rootfs-layer.sh index 55c669895..45f2918fc 100644 --- a/buildroot-external/scripts/rootfs-layer.sh +++ b/buildroot-external/scripts/rootfs-layer.sh @@ -2,10 +2,6 @@ function fix_rootfs() { - # Cleanup DHCP service, we don't need this with NetworkManager - rm -rf ${TARGET_DIR}/etc/systemd/system/multi-user.target.wants/dhcpcd.service - rm -rf ${TARGET_DIR}/usr/lib/systemd/system/dhcpcd.service - # Cleanup etc rm -rf ${TARGET_DIR}/etc/init.d rm -rf ${TARGET_DIR}/etc/network @@ -20,6 +16,9 @@ function fix_rootfs() { # Cleanup miscs rm -rf ${TARGET_DIR}/usr/lib/modules-load.d + # Fix: permission for system connection files + chmod 600 ${TARGET_DIR}/usr/share/system-connections/* + # Fix: tempfs with /srv sed -i "/srv/d" ${TARGET_DIR}/usr/lib/tmpfiles.d/home.conf diff --git a/buildroot-patches/0008-Fix-dhcp-client.patch b/buildroot-patches/0008-Fix-dhcp-client.patch new file mode 100644 index 000000000..b66173e23 --- /dev/null +++ b/buildroot-patches/0008-Fix-dhcp-client.patch @@ -0,0 +1,27 @@ +From 07169ea27b84230299685f84031f07f8af74dbb4 Mon Sep 17 00:00:00 2001 +From: Pascal Vizeli +Date: Wed, 4 Jul 2018 20:31:14 +0000 +Subject: [PATCH 1/1] Fix dhcp client + +Signed-off-by: Pascal Vizeli +--- + package/dhcp/dhcp.mk | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/package/dhcp/dhcp.mk b/package/dhcp/dhcp.mk +index a1285184d3..7ea7589a28 100644 +--- a/package/dhcp/dhcp.mk ++++ b/package/dhcp/dhcp.mk +@@ -75,8 +75,7 @@ endif + + ifeq ($(BR2_PACKAGE_DHCP_CLIENT),y) + define DHCP_INSTALL_CLIENT +- mkdir -p $(TARGET_DIR)/var/lib +- (cd $(TARGET_DIR)/var/lib; ln -snf /tmp dhcp) ++ mkdir -p $(TARGET_DIR)/var/lib/dhcp + $(INSTALL) -m 0755 -D $(DHCP_DIR)/client/dhclient \ + $(TARGET_DIR)/sbin/dhclient + $(INSTALL) -m 0644 -D package/dhcp/dhclient.conf \ +-- +2.17.1 + diff --git a/buildroot/package/dhcp/dhcp.mk b/buildroot/package/dhcp/dhcp.mk index a1285184d..7ea7589a2 100644 --- a/buildroot/package/dhcp/dhcp.mk +++ b/buildroot/package/dhcp/dhcp.mk @@ -75,8 +75,7 @@ endif ifeq ($(BR2_PACKAGE_DHCP_CLIENT),y) define DHCP_INSTALL_CLIENT - mkdir -p $(TARGET_DIR)/var/lib - (cd $(TARGET_DIR)/var/lib; ln -snf /tmp dhcp) + mkdir -p $(TARGET_DIR)/var/lib/dhcp $(INSTALL) -m 0755 -D $(DHCP_DIR)/client/dhclient \ $(TARGET_DIR)/sbin/dhclient $(INSTALL) -m 0644 -D package/dhcp/dhclient.conf \