From fc31d8302e229a6c5862c1c7722541a22abd104a Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Mon, 20 Mar 2017 23:15:26 +0000 Subject: [PATCH 01/11] Replace legacy rc.local with device-config service - device-config service will run only once on the first boot - This service installs platform drivers (what rc.local was doing), and also disables services that are not needed by that device based on the device's configuration (currently dhcp_relay and teamd) - rc.local use is discouraged in the modern era of system/service managers --- files/build_templates/dhcp_relay.service.j2 | 2 +- .../build_templates/sonic_debian_extension.j2 | 7 +++- .../platform/device-config.service | 13 ++++++ files/image_config/platform/device-config.sh | 41 +++++++++++++++++++ files/image_config/platform/rc.local | 39 ------------------ 5 files changed, 60 insertions(+), 42 deletions(-) create mode 100644 files/image_config/platform/device-config.service create mode 100755 files/image_config/platform/device-config.sh delete mode 100755 files/image_config/platform/rc.local diff --git a/files/build_templates/dhcp_relay.service.j2 b/files/build_templates/dhcp_relay.service.j2 index c0e993eec065..6085e27d762e 100644 --- a/files/build_templates/dhcp_relay.service.j2 +++ b/files/build_templates/dhcp_relay.service.j2 @@ -1,7 +1,7 @@ [Unit] Description=DHCP relay container Requires=docker.service -After=interfaces-config.service +After=device-config.service interfaces-config.service [Service] User={{ sonicadmin_user }} diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 77fcd1f38655..209a2805b908 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -125,6 +125,11 @@ sudo bash -c "echo enabled=false > $FILESYSTEM_ROOT/etc/sonic/updategraph.conf" # Copy SNMP configuration files sudo cp $IMAGE_CONFIGS/snmp/snmp.yml $FILESYSTEM_ROOT/etc/sonic/ +# Copy device-config script and service unit file, enable service +sudo cp $IMAGE_CONFIGS/platform/device-config.service $FILESYSTEM_ROOT/etc/systemd/system/ +sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable device-config.service +sudo cp $IMAGE_CONFIGS/platform/device-config.sh $FILESYSTEM_ROOT/usr/bin/ + # Copy sudoers configuration file sudo cp $IMAGE_CONFIGS/sudoers/sudoers $FILESYSTEM_ROOT/etc/ @@ -173,8 +178,6 @@ sudo dpkg --root=$FILESYSTEM_ROOT -P {{ debname }} sudo rm -f $FILESYSTEM_ROOT/usr/sbin/policy-rc.d -## copy platform rc.local -sudo cp $IMAGE_CONFIGS/platform/rc.local $FILESYSTEM_ROOT/etc/ {% if installer_images.strip() -%} {% for image in installer_images.strip().split(' ') -%} diff --git a/files/image_config/platform/device-config.service b/files/image_config/platform/device-config.service new file mode 100644 index 000000000000..3ad5e73fc992 --- /dev/null +++ b/files/image_config/platform/device-config.service @@ -0,0 +1,13 @@ +[Unit] +Description=Configure device on first boot +After=updategraph.service +ConditionPathExists=/host/platform/firsttime + +[Service] +Type=oneshot +ExecStartPre=/bin echo "First boot detected. Configuring device..." +ExecStart=/usr/bin/device-config.sh +ExecStartPost=/bin/rm -f /host/platform/firsttime + +[Install] +WantedBy=multi-user.target diff --git a/files/image_config/platform/device-config.sh b/files/image_config/platform/device-config.sh new file mode 100755 index 000000000000..40cd4a8a365a --- /dev/null +++ b/files/image_config/platform/device-config.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# +# device-config.sh +# +# Script to perform tasks which configure device upon first boot +# To be run on first boot by device-config.service +# + +# Install platform-dependent packages +echo "Installing platform-dependent packages..." + +PLATFORM=`/usr/bin/sonic-cfggen -v platform` + +if [ -n $PLATFORM ]; then + echo "SONiC platform: $PLATFORM" + + cp /usr/share/sonic/device/$platform/minigraph.xml /etc/sonic/ + + if [ -d /host/platform/$platform ]; then + dpkg -i /host/platform/$platform/*.deb + fi +else + echo "SONiC platform unknown. Could not install platform-dependent packages." +fi + +# Disable DHCP relay service if device does not require it +DEVICE_ROLE=`sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_devices[minigraph_hostname]['type']"` + +if [ $DEVICE_ROLE != "ToRRouter" ]; then + echo "Device does not require DHCP relay. Disabling DHCP relay service..." + systemctl disable dhcp_relay.service +fi + + +# Disable teamd service if device does not require it +NUM_PORTCHANNELS=`sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_portchannels.keys() | count"` +if [ $NUM_PORTCHANNELS -eq 0 ]; then + echo "Device does not require teamd. Disabling teamd service..." + systemctl disable teamd.service +fi + diff --git a/files/image_config/platform/rc.local b/files/image_config/platform/rc.local deleted file mode 100755 index eccba516e694..000000000000 --- a/files/image_config/platform/rc.local +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -e -# -# rc.local -# -# This script is executed at the end of each multiuser runlevel. -# Make sure that the script will "exit 0" on success or any other -# value on error. -# -# In order to enable or disable this script just change the execution -# bits. -# -# By default this script does nothing. - -. /host/machine.conf - -echo "install platform dependent packages at the first boot time" - -if [ -f /host/platform/firsttime ]; then - - if [ -n "$aboot_platform" ]; then - platform=$aboot_platform - elif [ -n "$onie_platform" ]; then - platform=$onie_platform - else - echo "Unknown sonic platform" - rm /host/platform/firsttime - exit 0 - fi - - cp /usr/share/sonic/device/$platform/minigraph.xml /etc/sonic/ - - if [ -d /host/platform/$platform ]; then - dpkg -i /host/platform/$platform/*.deb - fi - - rm /host/platform/firsttime -fi - -exit 0 From be8116feef3136cf43b07037b17de926fc73245e Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Tue, 21 Mar 2017 18:27:13 +0000 Subject: [PATCH 02/11] Fix typo --- files/image_config/platform/device-config.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/image_config/platform/device-config.service b/files/image_config/platform/device-config.service index 3ad5e73fc992..68d238e7d4a5 100644 --- a/files/image_config/platform/device-config.service +++ b/files/image_config/platform/device-config.service @@ -5,7 +5,7 @@ ConditionPathExists=/host/platform/firsttime [Service] Type=oneshot -ExecStartPre=/bin echo "First boot detected. Configuring device..." +ExecStartPre=/bin/echo "First boot detected. Configuring device..." ExecStart=/usr/bin/device-config.sh ExecStartPost=/bin/rm -f /host/platform/firsttime From 2296d8cdcc01cb8e7d13f5f1a0b4aaecb25e7e2d Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Tue, 21 Mar 2017 18:32:26 +0000 Subject: [PATCH 03/11] Don't use absolute path to call sonic-cfggen, as it has recently moved --- files/image_config/platform/device-config.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/image_config/platform/device-config.sh b/files/image_config/platform/device-config.sh index 40cd4a8a365a..77a523e6454e 100755 --- a/files/image_config/platform/device-config.sh +++ b/files/image_config/platform/device-config.sh @@ -9,7 +9,7 @@ # Install platform-dependent packages echo "Installing platform-dependent packages..." -PLATFORM=`/usr/bin/sonic-cfggen -v platform` +PLATFORM=`sonic-cfggen -v platform` if [ -n $PLATFORM ]; then echo "SONiC platform: $PLATFORM" From cfcacdb9569e36922e6d806588d9a5fa1376415f Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Tue, 21 Mar 2017 18:34:48 +0000 Subject: [PATCH 04/11] Modify service description --- files/image_config/platform/device-config.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/image_config/platform/device-config.service b/files/image_config/platform/device-config.service index 68d238e7d4a5..24879fc040ff 100644 --- a/files/image_config/platform/device-config.service +++ b/files/image_config/platform/device-config.service @@ -1,5 +1,5 @@ [Unit] -Description=Configure device on first boot +Description=First boot device configuration After=updategraph.service ConditionPathExists=/host/platform/firsttime From 4bd76f32717e0aaa3e629534a74646edc4fb7ed7 Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Tue, 21 Mar 2017 19:25:19 +0000 Subject: [PATCH 05/11] Service runs after updategraph service, so only copy default minigraph if we didn't download one --- files/image_config/platform/device-config.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/files/image_config/platform/device-config.sh b/files/image_config/platform/device-config.sh index 77a523e6454e..d73f507df046 100755 --- a/files/image_config/platform/device-config.sh +++ b/files/image_config/platform/device-config.sh @@ -6,18 +6,19 @@ # To be run on first boot by device-config.service # -# Install platform-dependent packages -echo "Installing platform-dependent packages..." - PLATFORM=`sonic-cfggen -v platform` if [ -n $PLATFORM ]; then echo "SONiC platform: $PLATFORM" - cp /usr/share/sonic/device/$platform/minigraph.xml /etc/sonic/ + if [ ! -f /etc/sonic/minigraph.xml ]; then + echo "Copying default minigraph for $PLATFORM to /etc/sonic/" + cp /usr/share/sonic/device/$PLATFORM/minigraph.xml /etc/sonic/ + fi - if [ -d /host/platform/$platform ]; then - dpkg -i /host/platform/$platform/*.deb + if [ -d /host/platform/$PLATFORM ]; then + echo "Installing platform-dependent packages for $PLATFORM..." + dpkg -i /host/platform/$PLATFORM/*.deb fi else echo "SONiC platform unknown. Could not install platform-dependent packages." @@ -34,6 +35,7 @@ fi # Disable teamd service if device does not require it NUM_PORTCHANNELS=`sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_portchannels.keys() | count"` + if [ $NUM_PORTCHANNELS -eq 0 ]; then echo "Device does not require teamd. Disabling teamd service..." systemctl disable teamd.service From ca2d1c290aacd4ef57c43bd3c7b0a46ae4806cc1 Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Wed, 22 Mar 2017 00:34:58 +0000 Subject: [PATCH 06/11] Break into two services, platform-init (which only runs on first boot) and device-config (which runs on every boot) --- .../build_templates/sonic_debian_extension.j2 | 5 +++ .../platform/device-config.service | 5 +-- files/image_config/platform/device-config.sh | 32 ++++++------------- .../platform/platform-init.service | 13 ++++++++ files/image_config/platform/platform-init.sh | 24 ++++++++++++++ .../updategraph/updategraph.service | 1 + 6 files changed, 54 insertions(+), 26 deletions(-) create mode 100644 files/image_config/platform/platform-init.service create mode 100755 files/image_config/platform/platform-init.sh diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 209a2805b908..b5f2e83d2000 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -125,6 +125,11 @@ sudo bash -c "echo enabled=false > $FILESYSTEM_ROOT/etc/sonic/updategraph.conf" # Copy SNMP configuration files sudo cp $IMAGE_CONFIGS/snmp/snmp.yml $FILESYSTEM_ROOT/etc/sonic/ +# Copy platform-init script and service unit file, enable service +sudo cp $IMAGE_CONFIGS/platform/platform-init.service $FILESYSTEM_ROOT/etc/systemd/system/ +sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable platform-init.service +sudo cp $IMAGE_CONFIGS/platform/platform-init.sh $FILESYSTEM_ROOT/usr/bin/ + # Copy device-config script and service unit file, enable service sudo cp $IMAGE_CONFIGS/platform/device-config.service $FILESYSTEM_ROOT/etc/systemd/system/ sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable device-config.service diff --git a/files/image_config/platform/device-config.service b/files/image_config/platform/device-config.service index 24879fc040ff..a3545befd808 100644 --- a/files/image_config/platform/device-config.service +++ b/files/image_config/platform/device-config.service @@ -1,13 +1,10 @@ [Unit] -Description=First boot device configuration +Description=Device-specific configuration After=updategraph.service -ConditionPathExists=/host/platform/firsttime [Service] Type=oneshot -ExecStartPre=/bin/echo "First boot detected. Configuring device..." ExecStart=/usr/bin/device-config.sh -ExecStartPost=/bin/rm -f /host/platform/firsttime [Install] WantedBy=multi-user.target diff --git a/files/image_config/platform/device-config.sh b/files/image_config/platform/device-config.sh index d73f507df046..e2c408699517 100755 --- a/files/image_config/platform/device-config.sh +++ b/files/image_config/platform/device-config.sh @@ -2,32 +2,17 @@ # # device-config.sh # -# Script to perform tasks which configure device upon first boot -# To be run on first boot by device-config.service +# Script to perform tasks which configure device based on its role, etc. +# To be run by device-config.service # -PLATFORM=`sonic-cfggen -v platform` - -if [ -n $PLATFORM ]; then - echo "SONiC platform: $PLATFORM" - - if [ ! -f /etc/sonic/minigraph.xml ]; then - echo "Copying default minigraph for $PLATFORM to /etc/sonic/" - cp /usr/share/sonic/device/$PLATFORM/minigraph.xml /etc/sonic/ - fi - - if [ -d /host/platform/$PLATFORM ]; then - echo "Installing platform-dependent packages for $PLATFORM..." - dpkg -i /host/platform/$PLATFORM/*.deb - fi -else - echo "SONiC platform unknown. Could not install platform-dependent packages." -fi - # Disable DHCP relay service if device does not require it DEVICE_ROLE=`sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_devices[minigraph_hostname]['type']"` -if [ $DEVICE_ROLE != "ToRRouter" ]; then +if [ $DEVICE_ROLE == "ToRRouter" ]; then + echo "Device requires DHCP relay. Enabling DHCP relay service..." + systemctl enable dhcp_relay.service +else echo "Device does not require DHCP relay. Disabling DHCP relay service..." systemctl disable dhcp_relay.service fi @@ -36,7 +21,10 @@ fi # Disable teamd service if device does not require it NUM_PORTCHANNELS=`sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_portchannels.keys() | count"` -if [ $NUM_PORTCHANNELS -eq 0 ]; then +if [ $NUM_PORTCHANNELS -gt 0 ]; then + echo "Device requires teamd. Enabling teamd service..." + systemctl enable teamd.service +else echo "Device does not require teamd. Disabling teamd service..." systemctl disable teamd.service fi diff --git a/files/image_config/platform/platform-init.service b/files/image_config/platform/platform-init.service new file mode 100644 index 000000000000..efe196eb0afd --- /dev/null +++ b/files/image_config/platform/platform-init.service @@ -0,0 +1,13 @@ +[Unit] +Description=First boot platform initialization +Before=updategraph.service +ConditionPathExists=/host/platform/firsttime + +[Service] +Type=oneshot +ExecStartPre=/bin/echo "First boot detected. Initializing platform..." +ExecStart=/usr/bin/platform-init.sh +ExecStartPost=/bin/rm -f /host/platform/firsttime + +[Install] +WantedBy=multi-user.target diff --git a/files/image_config/platform/platform-init.sh b/files/image_config/platform/platform-init.sh new file mode 100755 index 000000000000..1b5d0a10a66a --- /dev/null +++ b/files/image_config/platform/platform-init.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# +# platform-init.sh +# +# Script to perform tasks which configure platform upon first boot +# To be run by platform-initservice if it detects first boot +# + +PLATFORM=`sonic-cfggen -v platform` + +if [ -n $PLATFORM ]; then + echo "SONiC platform: $PLATFORM" + + echo "Copying default minigraph for $PLATFORM to /etc/sonic/" + cp /usr/share/sonic/device/$PLATFORM/minigraph.xml /etc/sonic/ + + if [ -d /host/platform/$PLATFORM ]; then + echo "Installing platform-dependent packages for $PLATFORM..." + dpkg -i /host/platform/$PLATFORM/*.deb + fi +else + echo "SONiC platform unknown. Could not install platform-dependent packages." +fi + diff --git a/files/image_config/updategraph/updategraph.service b/files/image_config/updategraph/updategraph.service index ba0b5dcb85e2..c8fc10c49b52 100644 --- a/files/image_config/updategraph/updategraph.service +++ b/files/image_config/updategraph/updategraph.service @@ -1,5 +1,6 @@ [Unit] Description=download minigraph from graph service +After=platform-init.service Before=ntp-config.service Before=rsyslog-config.service Before=interfaces-config.service From 48b22a189138355503401c628d90d858c1b4220b Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Wed, 22 Mar 2017 18:45:56 +0000 Subject: [PATCH 07/11] Separate 'After=' clause into two lines for readability --- files/build_templates/dhcp_relay.service.j2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/files/build_templates/dhcp_relay.service.j2 b/files/build_templates/dhcp_relay.service.j2 index 6085e27d762e..5f5dfe052c09 100644 --- a/files/build_templates/dhcp_relay.service.j2 +++ b/files/build_templates/dhcp_relay.service.j2 @@ -1,7 +1,8 @@ [Unit] Description=DHCP relay container Requires=docker.service -After=device-config.service interfaces-config.service +After=device-config.service +After=interfaces-config.service [Service] User={{ sonicadmin_user }} From 20bfd026e5444034e82e978e4bc5e9b5e7cf9ae3 Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Wed, 22 Mar 2017 18:47:16 +0000 Subject: [PATCH 08/11] teamd.service now starts after device-config.service --- files/build_templates/teamd.service.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/files/build_templates/teamd.service.j2 b/files/build_templates/teamd.service.j2 index e291a39b387d..eed8b50c6fb5 100644 --- a/files/build_templates/teamd.service.j2 +++ b/files/build_templates/teamd.service.j2 @@ -1,6 +1,7 @@ [Unit] Description=TEAMD container Requires=database.service +After=device-config.service After=database.service [Service] From ecc4729e9c10c2f440dc55224104c6060aa7f5f6 Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Wed, 22 Mar 2017 22:33:16 +0000 Subject: [PATCH 09/11] Rename device-config -> role-config --- files/build_templates/dhcp_relay.service.j2 | 2 +- files/build_templates/sonic_debian_extension.j2 | 8 ++++---- files/build_templates/teamd.service.j2 | 2 +- .../{device-config.service => role-config.service} | 4 ++-- .../platform/{device-config.sh => role-config.sh} | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) rename files/image_config/platform/{device-config.service => role-config.service} (54%) rename files/image_config/platform/{device-config.sh => role-config.sh} (91%) diff --git a/files/build_templates/dhcp_relay.service.j2 b/files/build_templates/dhcp_relay.service.j2 index 5f5dfe052c09..2898db8fecad 100644 --- a/files/build_templates/dhcp_relay.service.j2 +++ b/files/build_templates/dhcp_relay.service.j2 @@ -1,7 +1,7 @@ [Unit] Description=DHCP relay container Requires=docker.service -After=device-config.service +After=role-config.service After=interfaces-config.service [Service] diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index b5f2e83d2000..84a493e2ba3f 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -130,10 +130,10 @@ sudo cp $IMAGE_CONFIGS/platform/platform-init.service $FILESYSTEM_ROOT/etc/syst sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable platform-init.service sudo cp $IMAGE_CONFIGS/platform/platform-init.sh $FILESYSTEM_ROOT/usr/bin/ -# Copy device-config script and service unit file, enable service -sudo cp $IMAGE_CONFIGS/platform/device-config.service $FILESYSTEM_ROOT/etc/systemd/system/ -sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable device-config.service -sudo cp $IMAGE_CONFIGS/platform/device-config.sh $FILESYSTEM_ROOT/usr/bin/ +# Copy role-config script and service unit file, enable service +sudo cp $IMAGE_CONFIGS/platform/role-config.service $FILESYSTEM_ROOT/etc/systemd/system/ +sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable role-config.service +sudo cp $IMAGE_CONFIGS/platform/role-config.sh $FILESYSTEM_ROOT/usr/bin/ # Copy sudoers configuration file sudo cp $IMAGE_CONFIGS/sudoers/sudoers $FILESYSTEM_ROOT/etc/ diff --git a/files/build_templates/teamd.service.j2 b/files/build_templates/teamd.service.j2 index eed8b50c6fb5..4d06ca083ffa 100644 --- a/files/build_templates/teamd.service.j2 +++ b/files/build_templates/teamd.service.j2 @@ -1,7 +1,7 @@ [Unit] Description=TEAMD container Requires=database.service -After=device-config.service +After=role-config.service After=database.service [Service] diff --git a/files/image_config/platform/device-config.service b/files/image_config/platform/role-config.service similarity index 54% rename from files/image_config/platform/device-config.service rename to files/image_config/platform/role-config.service index a3545befd808..21b337b9ee0b 100644 --- a/files/image_config/platform/device-config.service +++ b/files/image_config/platform/role-config.service @@ -1,10 +1,10 @@ [Unit] -Description=Device-specific configuration +Description=Role-specific configuration After=updategraph.service [Service] Type=oneshot -ExecStart=/usr/bin/device-config.sh +ExecStart=/usr/bin/role-config.sh [Install] WantedBy=multi-user.target diff --git a/files/image_config/platform/device-config.sh b/files/image_config/platform/role-config.sh similarity index 91% rename from files/image_config/platform/device-config.sh rename to files/image_config/platform/role-config.sh index e2c408699517..63fdc1acc894 100755 --- a/files/image_config/platform/device-config.sh +++ b/files/image_config/platform/role-config.sh @@ -1,9 +1,9 @@ #!/bin/bash # -# device-config.sh +# role-config.sh # -# Script to perform tasks which configure device based on its role, etc. -# To be run by device-config.service +# Script to perform tasks which configure device based on its role as determined by its minigraph +# To be run by role-config.service # # Disable DHCP relay service if device does not require it From d4e52b8bdff699c76b1437e45af99228f119080b Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Wed, 22 Mar 2017 22:50:27 +0000 Subject: [PATCH 10/11] Revamp role-config - Move role-config service and script in to role/ directory - role-config now writes or deletes files to/from /etc/sonic/role/ directory - Services which are role-dependent use 'ConditionPathExists=' to determine whether or not to start --- files/build_templates/dhcp_relay.service.j2 | 1 + .../build_templates/sonic_debian_extension.j2 | 8 +++++--- files/build_templates/teamd.service.j2 | 1 + .../{platform => role}/role-config.service | 0 .../{platform => role}/role-config.sh | 18 ++++++++++-------- 5 files changed, 17 insertions(+), 11 deletions(-) rename files/image_config/{platform => role}/role-config.service (100%) rename files/image_config/{platform => role}/role-config.sh (51%) diff --git a/files/build_templates/dhcp_relay.service.j2 b/files/build_templates/dhcp_relay.service.j2 index 2898db8fecad..49b5be2ecf72 100644 --- a/files/build_templates/dhcp_relay.service.j2 +++ b/files/build_templates/dhcp_relay.service.j2 @@ -3,6 +3,7 @@ Description=DHCP relay container Requires=docker.service After=role-config.service After=interfaces-config.service +ConditionPathExists=/etc/sonic/role/dhcp_relay [Service] User={{ sonicadmin_user }} diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 84a493e2ba3f..340ef3a4ce6e 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -130,10 +130,12 @@ sudo cp $IMAGE_CONFIGS/platform/platform-init.service $FILESYSTEM_ROOT/etc/syst sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable platform-init.service sudo cp $IMAGE_CONFIGS/platform/platform-init.sh $FILESYSTEM_ROOT/usr/bin/ -# Copy role-config script and service unit file, enable service -sudo cp $IMAGE_CONFIGS/platform/role-config.service $FILESYSTEM_ROOT/etc/systemd/system/ +# Copy role-config script and service unit file, enable service and create dir to +# house files that will be used to conditionally start services based on device role +sudo cp $IMAGE_CONFIGS/role/role-config.service $FILESYSTEM_ROOT/etc/systemd/system/ sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable role-config.service -sudo cp $IMAGE_CONFIGS/platform/role-config.sh $FILESYSTEM_ROOT/usr/bin/ +sudo cp $IMAGE_CONFIGS/role/role-config.sh $FILESYSTEM_ROOT/usr/bin/ +sudo mkdir -p $FILESYSTEM_ROOT/etc/sonic/role/ # Copy sudoers configuration file sudo cp $IMAGE_CONFIGS/sudoers/sudoers $FILESYSTEM_ROOT/etc/ diff --git a/files/build_templates/teamd.service.j2 b/files/build_templates/teamd.service.j2 index 4d06ca083ffa..fb4b6745e480 100644 --- a/files/build_templates/teamd.service.j2 +++ b/files/build_templates/teamd.service.j2 @@ -3,6 +3,7 @@ Description=TEAMD container Requires=database.service After=role-config.service After=database.service +ConditionPathExists=/etc/sonic/role/teamd [Service] User={{ sonicadmin_user }} diff --git a/files/image_config/platform/role-config.service b/files/image_config/role/role-config.service similarity index 100% rename from files/image_config/platform/role-config.service rename to files/image_config/role/role-config.service diff --git a/files/image_config/platform/role-config.sh b/files/image_config/role/role-config.sh similarity index 51% rename from files/image_config/platform/role-config.sh rename to files/image_config/role/role-config.sh index 63fdc1acc894..371cff8be4a0 100755 --- a/files/image_config/platform/role-config.sh +++ b/files/image_config/role/role-config.sh @@ -7,25 +7,27 @@ # # Disable DHCP relay service if device does not require it +DHCP_RELAY_SERVICE_START_FILE=/etc/sonic/role/dhcp_relay DEVICE_ROLE=`sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_devices[minigraph_hostname]['type']"` if [ $DEVICE_ROLE == "ToRRouter" ]; then - echo "Device requires DHCP relay. Enabling DHCP relay service..." - systemctl enable dhcp_relay.service + echo "Device requires DHCP relay service. Ensuring start file exists..." + touch $DHCP_RELAY_SERVICE_START_FILE else - echo "Device does not require DHCP relay. Disabling DHCP relay service..." - systemctl disable dhcp_relay.service + echo "Device does not require DHCP relay service. Deleting start file..." + rm -f $DHCP_RELAY_SERVICE_START_FILE fi # Disable teamd service if device does not require it +TEAMD_SERVICE_START_FILE=/etc/sonic/role/teamd NUM_PORTCHANNELS=`sonic-cfggen -m /etc/sonic/minigraph.xml -v "minigraph_portchannels.keys() | count"` if [ $NUM_PORTCHANNELS -gt 0 ]; then - echo "Device requires teamd. Enabling teamd service..." - systemctl enable teamd.service + echo "Device requires teamd service. Ensuring start file exists..." + touch $TEAMD_SERVICE_START_FILE else - echo "Device does not require teamd. Disabling teamd service..." - systemctl disable teamd.service + echo "Device does not require teamd service. Deleting start file..." + rm -f $TEAMD_SERVICE_START_FILE fi From f510a65cc31e00d66ef991d82e5b92da92206d5d Mon Sep 17 00:00:00 2001 From: Joe LeVeque Date: Thu, 23 Mar 2017 00:46:54 +0000 Subject: [PATCH 11/11] Fix typo in comment --- files/image_config/platform/platform-init.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/image_config/platform/platform-init.sh b/files/image_config/platform/platform-init.sh index 1b5d0a10a66a..4bacaac6a778 100755 --- a/files/image_config/platform/platform-init.sh +++ b/files/image_config/platform/platform-init.sh @@ -3,7 +3,7 @@ # platform-init.sh # # Script to perform tasks which configure platform upon first boot -# To be run by platform-initservice if it detects first boot +# To be run by platform-init.service if it detects first boot # PLATFORM=`sonic-cfggen -v platform`