From b49c106ef00438b1c59876dad90d00e8d6e7b627 Mon Sep 17 00:00:00 2001 From: Flavio Leitner Date: Thu, 9 Jan 2014 01:04:33 -0200 Subject: [PATCH] fedora package: fix systemd ordering and deps. There is a chicken and egg issue where common OVS configuration uses a controller which is only accessible via the network. So starting OVS before network.target would break those configurations. However, the network doesn't come up after boot because OVS isn't started until after the network scripts tries to configure the ovs. This is partially fixed by commits: commit: 602453000e28ec1076c0482ce13c284765a84409 rhel: Automatically start openvswitch service before bringing an ovs interfa commit: 3214851c31538e8690e31f95702f8927a8c0838b rhel: Add OVSREQUIRES to automatically bring up OpenFlow interface dependencies But still there is the dependency issue between network.target and openvswitch which this patch fixes it. It provides two systemd service units. One to run at any time (openvswitch-nonetwork.service) which runs 'ovs-ctl start' and the other one (openvswith.service) to run after network.target which works as a frontend to the admin. The openvswitch-nonetwork.service is used internally by the 'ifup-ovs/ifdown-ovs' scripts when adding or removing ports to the bridge or when the openvswitch.service is enabled by the admin. Signed-off-by: Flavio Leitner Signed-off-by: Gurucharan Shetty --- rhel/automake.mk | 4 +++- rhel/etc_sysconfig_network-scripts_ifdown-ovs | 11 ++++++++- rhel/etc_sysconfig_network-scripts_ifup-ovs | 11 ++++++++- rhel/openvswitch-fedora.spec.in | 5 +++- ...stemd_system_openvswitch-nonetwork.service | 13 +++++++++++ ...usr_lib_systemd_system_openvswitch.service | 7 +++--- ...vswitch_scripts_systemd_sysconfig.template | 23 +++++++++++++++++++ 7 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 rhel/usr_lib_systemd_system_openvswitch-nonetwork.service create mode 100644 rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template diff --git a/rhel/automake.mk b/rhel/automake.mk index 2911e719e..9cd9a415e 100644 --- a/rhel/automake.mk +++ b/rhel/automake.mk @@ -22,7 +22,9 @@ EXTRA_DIST += \ rhel/openvswitch-fedora.spec \ rhel/openvswitch-fedora.spec.in \ rhel/usr_share_openvswitch_scripts_sysconfig.template \ - rhel/usr_lib_systemd_system_openvswitch.service + rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template \ + rhel/usr_lib_systemd_system_openvswitch.service \ + rhel/usr_lib_systemd_system_openvswitch-nonetwork.service update_rhel_spec = \ ($(ro_shell) && sed -e 's,[@]VERSION[@],$(VERSION),g') \ diff --git a/rhel/etc_sysconfig_network-scripts_ifdown-ovs b/rhel/etc_sysconfig_network-scripts_ifdown-ovs index 8e768c8a3..daa578659 100755 --- a/rhel/etc_sysconfig_network-scripts_ifdown-ovs +++ b/rhel/etc_sysconfig_network-scripts_ifdown-ovs @@ -34,7 +34,16 @@ if [ ! -x ${OTHERSCRIPT} ]; then OTHERSCRIPT="/etc/sysconfig/network-scripts/ifdown-eth" fi -[ -f /var/lock/subsys/openvswitch ] || /sbin/service openvswitch start +SERVICE_UNIT=/usr/lib/systemd/system/openvswitch-nonetwork.service +if [ -f $SERVICE_UNIT ] && [ -x /usr/bin/systemctl ]; then + if ! systemctl --quiet is-active openvswitch-nonetwork.service; then + systemctl start openvswitch-nonetwork.service + fi +else + if [ ! -f /var/lock/subsys/openvswitch ]; then + /sbin/service openvswitch start + fi +fi case "$TYPE" in OVSBridge) diff --git a/rhel/etc_sysconfig_network-scripts_ifup-ovs b/rhel/etc_sysconfig_network-scripts_ifup-ovs index 017346d4c..3f31c3048 100755 --- a/rhel/etc_sysconfig_network-scripts_ifup-ovs +++ b/rhel/etc_sysconfig_network-scripts_ifup-ovs @@ -60,7 +60,16 @@ fi fi done -[ -f /var/lock/subsys/openvswitch ] || /sbin/service openvswitch start +SERVICE_UNIT=/usr/lib/systemd/system/openvswitch-nonetwork.service +if [ -f $SERVICE_UNIT ] && [ -x /usr/bin/systemctl ]; then + if ! systemctl --quiet is-active openvswitch-nonetwork.service; then + systemctl start openvswitch-nonetwork.service + fi +else + if [ ! -f /var/lock/subsys/openvswitch ]; then + /sbin/service openvswitch start + fi +fi case "$TYPE" in OVSBridge) diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in index 5cec1ff5f..19fa154c0 100644 --- a/rhel/openvswitch-fedora.spec.in +++ b/rhel/openvswitch-fedora.spec.in @@ -45,6 +45,8 @@ install -d -m 755 $RPM_BUILD_ROOT/etc install -d -m 755 $RPM_BUILD_ROOT/etc/openvswitch install -p -D -m 0644 rhel/usr_lib_systemd_system_openvswitch.service \ $RPM_BUILD_ROOT%{_unitdir}/openvswitch.service +install -p -D -m 0644 rhel/usr_lib_systemd_system_openvswitch-nonetwork.service \ + $RPM_BUILD_ROOT%{_unitdir}/openvswitch-nonetwork.service install -m 755 rhel/etc_init.d_openvswitch \ $RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/openvswitch.init install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig @@ -60,7 +62,7 @@ install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifdown-ovs \ $RPM_BUILD_ROOT/etc/sysconfig/network-scripts/ifdown-ovs install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifup-ovs \ $RPM_BUILD_ROOT/etc/sysconfig/network-scripts/ifup-ovs -install -p -D -m 0644 rhel/usr_share_openvswitch_scripts_sysconfig.template \ +install -p -D -m 0644 rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template \ $RPM_BUILD_ROOT/etc/sysconfig/openvswitch install -d -m 755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts @@ -104,6 +106,7 @@ systemctl start openvswitch.service %config /etc/sysconfig/openvswitch %config /etc/logrotate.d/openvswitch %{_unitdir}/openvswitch.service +%{_unitdir}/openvswitch-nonetwork.service %{_datadir}/openvswitch/scripts/openvswitch.init %{_sysconfdir}/sysconfig/network-scripts/ifup-ovs %{_sysconfdir}/sysconfig/network-scripts/ifdown-ovs diff --git a/rhel/usr_lib_systemd_system_openvswitch-nonetwork.service b/rhel/usr_lib_systemd_system_openvswitch-nonetwork.service new file mode 100644 index 000000000..870b25e89 --- /dev/null +++ b/rhel/usr_lib_systemd_system_openvswitch-nonetwork.service @@ -0,0 +1,13 @@ +[Unit] +Description=Open vSwitch Internal Unit +After=syslog.target +PartOf=openvswitch.service +Wants=openvswitch.service + +[Service] +Type=oneshot +RemainAfterExit=yes +EnvironmentFile=-/etc/sysconfig/openvswitch +ExecStart=/usr/share/openvswitch/scripts/ovs-ctl start \ + --system-id=random $OPTIONS +ExecStop=/usr/share/openvswitch/scripts/ovs-ctl stop diff --git a/rhel/usr_lib_systemd_system_openvswitch.service b/rhel/usr_lib_systemd_system_openvswitch.service index f39d7e611..f0bc16fe8 100644 --- a/rhel/usr_lib_systemd_system_openvswitch.service +++ b/rhel/usr_lib_systemd_system_openvswitch.service @@ -1,11 +1,12 @@ [Unit] Description=Open vSwitch -After=syslog.target network.target +After=syslog.target network.target openvswitch-nonetwork.service +Requires=openvswitch-nonetwork.service [Service] Type=oneshot -ExecStart=/usr/share/openvswitch/scripts/openvswitch.init start -ExecStop=/usr/share/openvswitch/scripts/openvswitch.init stop +ExecStart=/bin/true +ExecStop=/bin/true RemainAfterExit=yes [Install] diff --git a/rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template b/rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template new file mode 100644 index 000000000..3050a0703 --- /dev/null +++ b/rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template @@ -0,0 +1,23 @@ +### Configuration options for openvswitch +# +# Enable core files: +# --force-corefiles=yes +# +# Set "nice" priority at which to run ovsdb-server: +# --ovsdb-server-priority=-10 +# +# Set "nice" priority at which to run ovsdb-vswitchd: +# --ovs-vswitchd-priority=-10 +# +# Pass or not --mlockall option to ovs-vswitchd. +# This option should be set to "yes" or "no". The default is "yes". +# Enabling this option can avoid networking interruptions due to +# system memory pressure in extraordinary situations, such as multiple +# concurrent VM import operations. +# --mlockall=yes +# +# Use valgrind: +# --ovs-vswitchd-wrapper=valgrind +# --ovsdb-server-wrapper=valgrind +# +OPTIONS="" -- 2.20.1