Make emmc-available/unavailable-postprocessing services
NOT remain active after execution

Tested: root@dddhe33-nfd01:~# systemctl start emmc-available.target
root@dddhe33-nfd01:~# systemctl status emmc-available-postprocessing
○ emmc-available-postprocessing.service - eMMC Available Postprocessing
     Loaded: loaded (/usr/lib/systemd/system/emmc-available-postprocessing.service; enabled; preset: enabled)
     Active: inactive (dead) since Tue 2025-11-25 14:04:14 PST; 12s ago
   Duration: 12h 46min 40.522s
 Invocation: 1e1314458d404c3998db7a0fb78368ea
    Process: 17131 ExecStart=/usr/bin/emmc-true-hitless-enable.sh (code=exited, status=0/SUCCESS)
   Main PID: 17131 (code=exited, status=0/SUCCESS)
        CPU: 1.770s

Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-override.conf to rsyslog.service.d...
Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-override.conf to xyz.openbmc_project.fansensor.s…ce.d...
Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-override.conf to xyz.openbmc_project.psusensor.s…ce.d...
Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-services-restart.service...
Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-services-restart.sh...
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Creating completion flag file...
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: eMMC available postprocessing completed successfully
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com systemd[1]: emmc-available-postprocessing.service: Deactivated successfully.
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com systemd[1]: Finished eMMC Available Postprocessing.
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com systemd[1]: emmc-available-postprocessing.service: Consumed 1.770s CPU time.
Hint: Some lines were ellipsized, use -l to show in full.
root@dddhe33-nfd01:~# systemctl status emmc-available-postprocessing
○ emmc-available-postprocessing.service - eMMC Available Postprocessing
     Loaded: loaded (/usr/lib/systemd/system/emmc-available-postprocessing.service; enabled; preset: enabled)
     Active: inactive (dead) since Tue 2025-11-25 14:04:14 PST; 18s ago
   Duration: 12h 46min 40.522s
 Invocation: 1e1314458d404c3998db7a0fb78368ea
    Process: 17131 ExecStart=/usr/bin/emmc-true-hitless-enable.sh (code=exited, status=0/SUCCESS)
   Main PID: 17131 (code=exited, status=0/SUCCESS)
        CPU: 1.770s

Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-override.conf to rsyslog.service.d...
Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-override.conf to xyz.openbmc_project.fansensor.s…ce.d...
Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-override.conf to xyz.openbmc_project.psusensor.s…ce.d...
Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-services-restart.service...
Nov 25 14:04:07 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Copying emmc-services-restart.sh...
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: Creating completion flag file...
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com emmc-true-hitless-enable.sh[17131]: eMMC available postprocessing completed successfully
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com systemd[1]: emmc-available-postprocessing.service: Deactivated successfully.
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com systemd[1]: Finished eMMC Available Postprocessing.
Nov 25 14:04:14 dddhe33-nfd01.prod.google.com systemd[1]: emmc-available-postprocessing.service: Consumed 1.770s CPU time.
Hint: Some lines were ellipsized, use -l to show in full.
root@dddhe33-nfd01:~# systemctl status emmc-unavailable.target
○ emmc-unavailable.target - eMMC Unavailable Target
     Loaded: loaded (/usr/lib/systemd/system/emmc-unavailable.target; static)
     Active: inactive (dead) since Tue 2025-11-25 14:04:05 PST; 1min 0s ago
 Invocation: 4c74ebf673f54f5f8d518ac7c6c67e14

Nov 25 14:03:38 dddhe33-nfd01.prod.google.com systemd[1]: Reached target eMMC Unavailable Target.
Nov 25 14:04:05 dddhe33-nfd01.prod.google.com systemd[1]: Stopped target eMMC Unavailable Target.
root@dddhe33-nfd01:~# systemctl status emmc-unavailable-postprocessing
○ emmc-unavailable-postprocessing.service - eMMC Unavailable Postprocessing
     Loaded: loaded (/usr/lib/systemd/system/emmc-unavailable-postprocessing.service; enabled; preset: enabled)
     Active: inactive (dead) since Tue 2025-11-25 14:03:38 PST; 1min 38s ago
   Duration: 8min 37.946s
 Invocation: c331fab83c3f472a927ef3504a60aa29
   Main PID: 16996 (code=exited, status=0/SUCCESS)
        CPU: 50ms

Nov 25 14:03:38 dddhe33-nfd01.prod.google.com systemd[1]: Starting eMMC Unavailable Postprocessing...
Nov 25 14:03:38 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[16996]: Creating completion flag file...
Nov 25 14:03:38 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[16996]: eMMC unavailable postprocessing completed successfully
Nov 25 14:03:38 dddhe33-nfd01.prod.google.com systemd[1]: emmc-unavailable-postprocessing.service: Deactivated successfully.
Nov 25 14:03:38 dddhe33-nfd01.prod.google.com systemd[1]: Finished eMMC Unavailable Postprocessing.
root@dddhe33-nfd01:~# systemctl start emmc-unavailable.target
root@dddhe33-nfd01:~# systemctl status emmc-unavailable-postprocessing
○ emmc-unavailable-postprocessing.service - eMMC Unavailable Postprocessing
     Loaded: loaded (/usr/lib/systemd/system/emmc-unavailable-postprocessing.service; enabled; preset: enabled)
     Active: inactive (dead) since Tue 2025-11-25 14:05:49 PST; 27s ago
   Duration: 8min 37.946s
 Invocation: f3b4660162514802adde6a4eee3e5509
    Process: 17792 ExecStart=/usr/bin/emmc-true-hitless-disable.sh (code=exited, status=0/SUCCESS)
   Main PID: 17792 (code=exited, status=0/SUCCESS)
        CPU: 360ms

Nov 25 14:05:41 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[17792]: Removing override conf: /run/systemd/system/rsyslog.service.…de.conf
Nov 25 14:05:41 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[17792]: Removing empty directory: /run/systemd/system/rsyslog.service.d
Nov 25 14:05:41 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[17792]: Removing override conf: /run/systemd/system/xyz.openbmc_proj…de.conf
Nov 25 14:05:41 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[17792]: Removing empty directory: /run/systemd/system/xyz.openbmc_pr…rvice.d
Nov 25 14:05:41 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[17792]: Removing override conf: /run/systemd/system/xyz.openbmc_proj…de.conf
Nov 25 14:05:41 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[17792]: Removing empty directory: /run/systemd/system/xyz.openbmc_pr…rvice.d
Nov 25 14:05:49 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[17792]: Creating completion flag file...
Nov 25 14:05:49 dddhe33-nfd01.prod.google.com emmc-true-hitless-disable.sh[17792]: eMMC unavailable postprocessing completed successfully
Nov 25 14:05:49 dddhe33-nfd01.prod.google.com systemd[1]: emmc-unavailable-postprocessing.service: Deactivated successfully.
Nov 25 14:05:49 dddhe33-nfd01.prod.google.com systemd[1]: Finished eMMC Unavailable Postprocessing.
Hint: Some lines were ellipsized, use -l to show in full.


tlBMC True Hitless Metrics:

It can work as usual with emmc-(un)available-postprocessing status =
SERVICE_STATUS_INACTIVE. But we can check its lastExecutionTime.


"Name": "TlbmcMetrics",
  "TrueHitlessMetrics": {
    "activationState": {
      "activated": true,
      "imageChecksumValid": true
    },
    "emmcAvailabilityTargets": {
      "availableTargetStatus": {
        "status": "SERVICE_STATUS_ACTIVE",
        "timeToActiveSeconds": 961
      },
      "unavailableTargetStatus": {
        "status": "SERVICE_STATUS_INACTIVE",
        "timeToActiveSeconds": 905
      }
    },
    "intermediateState": {
      "intermediateServiceStatuses": [
        {
          "lastExecutionTime": "2025-11-25T22:32:57Z",
          "name": "true_hitless_initialize_service",
          "status": "SERVICE_STATUS_ACTIVE"
        },
        {
          "lastExecutionTime": "2025-11-25T22:49:34Z",
          "name": "emmc_available_postprocessing_service",
          "postprocessingComplete": true,
          "status": "SERVICE_STATUS_INACTIVE"
        },
        {
          "lastExecutionTime": "2025-11-25T22:48:38Z",
          "name": "emmc_unavailable_postprocessing_service",
          "postprocessingComplete": true,
          "status": "SERVICE_STATUS_INACTIVE"
        }
      ]
    },
    "lastUpdatedTimestamp": "2025-11-25T22:49:40Z",
    "managedServices": {
      "serviceStates": [
        {
          "binaryRunningOnEmmc": true,
          "blockOverrideApplied": false,
          "coredumpCount": 0,
          "emmcOverrideApplied": true,
          "name": "authz_server.service",
          "restartCount": 0,
          "status": "SERVICE_STATUS_ACTIVE"
        },
        {
          "binaryRunningOnEmmc": true,
          "blockOverrideApplied": false,
          "coredumpCount": 0,
          "emmcOverrideApplied": true,
          "name": "bmcweb.service",
          "restartCount": 0,
          "status": "SERVICE_STATUS_ACTIVE"
        },
        {
          "binaryRunningOnEmmc": true,
          "blockOverrideApplied": false,
          "coredumpCount": 0,
          "emmcOverrideApplied": true,
          "name": "dioritehssd.service",
          "restartCount": 0,
          "status": "SERVICE_STATUS_ACTIVE"
        },
        {
          "binaryRunningOnEmmc": true,
          "blockOverrideApplied": false,
          "coredumpCount": 0,
          "emmcOverrideApplied": true,
          "name": "earlyoom.service",
          "restartCount": 0,
          "status": "SERVICE_STATUS_ACTIVE"
        },
        {
          "binaryRunningOnEmmc": true,
          "blockOverrideApplied": false,
          "coredumpCount": 0,
          "emmcOverrideApplied": true,
          "name": "phosphor-pid-control.service",
          "restartCount": 0,
          "status": "SERVICE_STATUS_ACTIVE"
        },
        {
          "binaryRunningOnEmmc": true,
          "blockOverrideApplied": false,
          "coredumpCount": 0,
          "emmcOverrideApplied": true,
          "name": "rsyslog.service",
          "restartCount": 0,
          "status": "SERVICE_STATUS_ACTIVE"
        },
        {
          "binaryRunningOnEmmc": true,
          "blockOverrideApplied": false,
          "coredumpCount": 0,
          "emmcOverrideApplied": true,
          "name": "xyz.openbmc_project.fansensor.service",
          "restartCount": 0,
          "status": "SERVICE_STATUS_ACTIVE"
        },
        {
          "binaryRunningOnEmmc": true,
          "blockOverrideApplied": false,
          "coredumpCount": 0,
          "emmcOverrideApplied": true,
          "name": "xyz.openbmc_project.psusensor.service",
          "restartCount": 0,
          "status": "SERVICE_STATUS_ACTIVE"
        }
      ]
    },
    "versionState": {
      "compatible": true,
      "gbmcVersion": "25.45.11.0",
      "trueHitlessVersion": "25.48.0.0"
    }
  }
}

Fusion-Link:http://fusion2/ci/kokoro/prod%3Agbmc%2Ffirmware-build%2Ffirmware%2Fredacted_gbmc_platforms_release_branch/activity/831c0109-1672-48ae-92de-58aee42fd28a
Google-Bug-Id: 452052340
Platforms-Affected: EMR
Change-Id: Icd82b9ce3e9f417243120f0b743fc596a0101e22
Signed-off-by: Baicheng Zong <baichengz@google.com>
2 files changed
tree: 307636ab8d6b3e39d7f5d8237d49cefc0ea9a21b
  1. classes/
  2. conf/
  3. dynamic-layers/
  4. recipes-bsp/
  5. recipes-connectivity/
  6. recipes-core/
  7. recipes-devtools/
  8. recipes-extended/
  9. recipes-google/
  10. recipes-kernel/
  11. recipes-phosphor/
  12. recipes-support/
  13. recipes-tpm1/
  14. recipes-tpm2/
  15. LICENSE
  16. README.md
README.md

meta-gbmc-staging

This repository contains additions to the openbmc/meta-google layer that are not yet ready for OpenBMC inclusion.

How to use this layer

  1. Clone openbmc/openbmc from GitHub.
  2. Clone this layer from GitHub into a subdirectory of openbmc.