diff mbox

systemd: add network unit file

Message ID 1402673735-14109-1-git-send-email-eric.le.bihan.dev@free.fr
State Accepted
Headers show

Commit Message

Eric Le Bihan June 13, 2014, 3:35 p.m. UTC
From: Ivan Sergeev <vsergeev@kumunetworks.com>

Add and enable a systemd unit file to bring up or down network with ifup /
ifdown, analogous to the skeleton/etc/init.d/S40network init script.

Signed-off-by: Ivan Sergeev <vsergeev@kumunetworks.com>
[eric.le.bihan.dev@free.fr:
  - rebase
  - install service only if systemd-networkd is not selected]
Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
---
 package/systemd/network.service |   21 +++++++++++++++++++++
 package/systemd/systemd.mk      |   12 ++++++++++++
 2 files changed, 33 insertions(+)
 create mode 100644 package/systemd/network.service

Comments

Thomas Petazzoni June 14, 2014, 4:42 p.m. UTC | #1
Dear Eric Le Bihan,

On Fri, 13 Jun 2014 17:35:35 +0200, Eric Le Bihan wrote:
> From: Ivan Sergeev <vsergeev@kumunetworks.com>
> 
> Add and enable a systemd unit file to bring up or down network with ifup /
> ifdown, analogous to the skeleton/etc/init.d/S40network init script.
> 
> Signed-off-by: Ivan Sergeev <vsergeev@kumunetworks.com>
> [eric.le.bihan.dev@free.fr:
>   - rebase
>   - install service only if systemd-networkd is not selected]
> Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> ---
>  package/systemd/network.service |   21 +++++++++++++++++++++
>  package/systemd/systemd.mk      |   12 ++++++++++++
>  2 files changed, 33 insertions(+)
>  create mode 100644 package/systemd/network.service

Applied, thanks. However, I have a comment/question, below.


> +define SYSTEMD_INSTALL_NETWORK_HOOK
> +	$(INSTALL) -D -m 644 package/systemd/network.service \
> +		$(TARGET_DIR)/etc/systemd/system/network.service
> +	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
> +	ln -fs ../network.service \
> +		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/network.service
> +endef
> +
>  SYSTEMD_POST_INSTALL_TARGET_HOOKS += \
>  	SYSTEMD_INSTALL_INIT_HOOK \
>  	SYSTEMD_INSTALL_TTY_HOOK \
>  	SYSTEMD_INSTALL_MACHINEID_HOOK \
>  	SYSTEMD_SANITIZE_PATH_IN_UNITS
>  
> +ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),)
> +SYSTEMD_POST_INSTALL_TARGET_HOOKS += SYSTEMD_INSTALL_NETWORK_HOOK
> +endif

I'm wondering why we're not using the <pkg>_INIT_SYSTEMD mechanism here.

Thomas
Yann E. MORIN June 14, 2014, 4:50 p.m. UTC | #2
Eric, All,

On 2014-06-13 17:35 +0200, Eric Le Bihan spake thusly:
> From: Ivan Sergeev <vsergeev@kumunetworks.com>
> 
> Add and enable a systemd unit file to bring up or down network with ifup /
> ifdown, analogous to the skeleton/etc/init.d/S40network init script.
[--SNIP--]
> diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk
> index 6de7887..f3874db 100644
> --- a/package/systemd/systemd.mk
> +++ b/package/systemd/systemd.mk
> @@ -145,12 +145,24 @@ define SYSTEMD_SANITIZE_PATH_IN_UNITS
>  		-exec $(SED) 's,$(HOST_DIR),,g' {} \;
>  endef
>  
> +define SYSTEMD_INSTALL_NETWORK_HOOK
> +	$(INSTALL) -D -m 644 package/systemd/network.service \
> +		$(TARGET_DIR)/etc/systemd/system/network.service
> +	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
> +	ln -fs ../network.service \
> +		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/network.service
> +endef
> +
>  SYSTEMD_POST_INSTALL_TARGET_HOOKS += \
>  	SYSTEMD_INSTALL_INIT_HOOK \
>  	SYSTEMD_INSTALL_TTY_HOOK \
>  	SYSTEMD_INSTALL_MACHINEID_HOOK \
>  	SYSTEMD_SANITIZE_PATH_IN_UNITS
>  
> +ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),)
> +SYSTEMD_POST_INSTALL_TARGET_HOOKS += SYSTEMD_INSTALL_NETWORK_HOOK
> +endif
> +

I thought we said the hook definitions should be part of the conditional
block?

    http://buildroot.net/downloads/manual/manual.html#writing-rules-mk

Regards,
Yann E. MORIN.
Eric Le Bihan June 16, 2014, 8:49 p.m. UTC | #3
Hi!
On Sat, Jun 14, 2014 at 06:42:06PM +0200, Thomas Petazzoni wrote:
> Dear Eric Le Bihan,
>
> On Fri, 13 Jun 2014 17:35:35 +0200, Eric Le Bihan wrote:
> > From: Ivan Sergeev <vsergeev@kumunetworks.com>
> >
> > Add and enable a systemd unit file to bring up or down network with ifup /
> > ifdown, analogous to the skeleton/etc/init.d/S40network init script.
> >
> > Signed-off-by: Ivan Sergeev <vsergeev@kumunetworks.com>
> > [eric.le.bihan.dev@free.fr:
> >   - rebase
> >   - install service only if systemd-networkd is not selected]
> > Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
> > ---
> >  package/systemd/network.service |   21 +++++++++++++++++++++
> >  package/systemd/systemd.mk      |   12 ++++++++++++
> >  2 files changed, 33 insertions(+)
> >  create mode 100644 package/systemd/network.service
>
> Applied, thanks. However, I have a comment/question, below.
>
>
> > +define SYSTEMD_INSTALL_NETWORK_HOOK
> > +	$(INSTALL) -D -m 644 package/systemd/network.service \
> > +		$(TARGET_DIR)/etc/systemd/system/network.service
> > +	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
> > +	ln -fs ../network.service \
> > +		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/network.service
> > +endef
> > +
> >  SYSTEMD_POST_INSTALL_TARGET_HOOKS += \
> >  	SYSTEMD_INSTALL_INIT_HOOK \
> >  	SYSTEMD_INSTALL_TTY_HOOK \
> >  	SYSTEMD_INSTALL_MACHINEID_HOOK \
> >  	SYSTEMD_SANITIZE_PATH_IN_UNITS
> >
> > +ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),)
> > +SYSTEMD_POST_INSTALL_TARGET_HOOKS += SYSTEMD_INSTALL_NETWORK_HOOK
> > +endif
>
> I'm wondering why we're not using the <pkg>_INIT_SYSTEMD mechanism here.
Good suggestion! I'll send a patch with the weird
"SYSTEMD_INSTALL_INIT_SYSTEMD" and the cosmetic fix suggested by Yann E.
Morin.

Best regards,
ELB
diff mbox

Patch

diff --git a/package/systemd/network.service b/package/systemd/network.service
new file mode 100644
index 0000000..0d77bb8
--- /dev/null
+++ b/package/systemd/network.service
@@ -0,0 +1,21 @@ 
+[Unit]
+Description=Network Connectivity
+Wants=network.target
+Before=network.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+
+# lo is brought up earlier, which will cause the upcoming "ifup -a" to fail
+# with exit code 1, due to an "ip: RTNETLINK answers: File exists" error during
+# its "ip addr add ..." command, subsequently causing this unit to fail even
+# though it is a benign error. Flushing the lo address with the command below
+# before ifup prevents this failure.
+ExecStart=/sbin/ip addr flush dev lo
+
+ExecStart=/sbin/ifup -a
+ExecStop=/sbin/ifdown -a
+
+[Install]
+WantedBy=multi-user.target
diff --git a/package/systemd/systemd.mk b/package/systemd/systemd.mk
index 6de7887..f3874db 100644
--- a/package/systemd/systemd.mk
+++ b/package/systemd/systemd.mk
@@ -145,12 +145,24 @@  define SYSTEMD_SANITIZE_PATH_IN_UNITS
 		-exec $(SED) 's,$(HOST_DIR),,g' {} \;
 endef
 
+define SYSTEMD_INSTALL_NETWORK_HOOK
+	$(INSTALL) -D -m 644 package/systemd/network.service \
+		$(TARGET_DIR)/etc/systemd/system/network.service
+	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
+	ln -fs ../network.service \
+		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/network.service
+endef
+
 SYSTEMD_POST_INSTALL_TARGET_HOOKS += \
 	SYSTEMD_INSTALL_INIT_HOOK \
 	SYSTEMD_INSTALL_TTY_HOOK \
 	SYSTEMD_INSTALL_MACHINEID_HOOK \
 	SYSTEMD_SANITIZE_PATH_IN_UNITS
 
+ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),)
+SYSTEMD_POST_INSTALL_TARGET_HOOKS += SYSTEMD_INSTALL_NETWORK_HOOK
+endif
+
 define SYSTEMD_USERS
 	systemd-journal -1 systemd-journal -1 * /var/log/journal - - Journal
 	systemd-journal-gateway -1 systemd-journal-gateway -1 * /var/log/journal - - Journal Gateway