| commit | 83a3bfe79dcd3da706cfbf4964a1ebeda1c6355c | [log] [tgz] |
|---|---|---|
| author | Manojkiran Eda <manojkiran.eda@gmail.com> | Thu Jul 27 05:30:37 2023 +0530 |
| committer | Manojkiran Eda <manojkiran.eda@gmail.com> | Tue Aug 01 12:15:17 2023 +0530 |
| tree | ee3db6fee23a0c594a20227888d6e6077947a89b | |
| parent | 714a20b5f28f97fcbb2881b72049b11f6b64aead [diff] |
use fs.copyfile instead of deprecated copy copy arg in configure_file API is deprecated since meson version 0.64.0. As we moved to meson version 1.1.1 we can leverage the filesystem module copyfile() to achive the same result. Tested: 1. With this change made sure that ninja install copied the service file into the systemd unit directory on fedora. ``` [manojeda@fedora build]$ ninja install [0/1] Installing files. Installation failed due to insufficient permissions. Attempt to use /usr/bin/sudo to gain elevated privileges? [y/n] y [sudo] password for manojeda: Installing xyz.openbmc_project.Time.Manager.service to /usr/lib/systemd/system Installing phosphor-time-manager to /usr/local/bin [manojeda@fedora build]$ cat /usr/lib/systemd/system/xyz.openbmc_project.Time.Manager.service [Unit] Description=Phosphor Time Manager daemon Wants=mapper-wait@-xyz-openbmc_project-time-sync_method.service After=mapper-wait@-xyz-openbmc_project-time-sync_method.service [Service] Restart=always ExecStart=/usr/bin/phosphor-time-manager Type=dbus BusName=xyz.openbmc_project.Time.Manager [Install] WantedBy=multi-user.target ``` Change-Id: Ie95cd19e2f025ff6b564293fdb1b62a8898a8a40 Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com>
phosphor-time-manager is the time manager service that implements D-Bus interface xyz/openbmc_project/Time/EpochTime.interface.yaml. The user can get or set the BMC's time via this interface.
phosphor-time-manager is configured by setting -D flags that correspond to options in phosphor-time-manager/meson_options.txt. The option names become C++ preprocessor symbols that control which code is compiled into the program.
Compile phosphor-time-manager with default options:
meson setup builddir ninja -C builddir
Compile phosphor-time-manager with some configurable options:
meson setup builddir -Dbuildtype=minsize -Dtests=disabled ninja -C builddir
Generate test coverage report:
meson setup builddir -Db_coverage=true -Dtests=enabled ninja coverage -C builddir test
The service xyz.openbmc_project.Time.Manager provides an object on D-Bus:
where each object implements interface xyz.openbmc_project.Time.EpochTime.
The user can directly get or set the property Elapsed of the objects to get or set the time. For example on an authenticated session:
To get BMC's time:
### With busctl on BMC
busctl get-property xyz.openbmc_project.Time.Manager \
/xyz/openbmc_project/time/bmc xyz.openbmc_project.Time.EpochTime Elapsed
### With REST API on remote host
curl -b cjar -k https://${BMC_IP}/xyz/openbmc_project/time/bmc
To set BMC's time:
### With busctl on BMC
busctl set-property xyz.openbmc_project.Time.Manager \
/xyz/openbmc_project/time/bmc xyz.openbmc_project.Time.EpochTime \
Elapsed t <value-in-microseconds>
### With REST API on remote host
curl -b cjar -k -H "Content-Type: application/json" -X PUT \
-d '{"data": 1487304700000000}' \
https://${BMC_IP}/xyz/openbmc_project/time/bmc/attr/Elapsed
Getting BMC time is always allowed, but setting the time may not be allowed depending on the below two settings in the settings manager.
A summary of which cases the time can be set on BMC or HOST:
| Mode | Set BMC Time |
|---|---|
| NTP | Fail to set |
| MANUAL | OK |
To set an NTP server:
### With busctl on BMC
busctl set-property xyz.openbmc_project.Network \
/xyz/openbmc_project/network/eth0 \
xyz.openbmc_project.Network.EthernetInterface NTPServers \
as 1 "<ntp_server>"
### With REST API on remote host
curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT -d \
'{"data": ["<ntp_server>"] }' \
https://${BMC_IP}/xyz/openbmc_project/network/eth0/attr/NTPServers
To go into NTP mode
### With busctl on BMC
busctl set-property xyz.openbmc_project.Settings \
/xyz/openbmc_project/time/sync_method xyz.openbmc_project.Time.Synchronization \
TimeSyncMethod s "xyz.openbmc_project.Time.Synchronization.Method.NTP"
### With REST API on remote host
curl -c cjar -b cjar -k -H "Content-Type: application/json" -X PUT -d \
'{"data": "xyz.openbmc_project.Time.Synchronization.Method.NTP" }' \
https://${BMC_IP}/xyz/openbmc_project/time/sync_method/attr/TimeSyncMethod
Starting from OpenBMC 2.6 (with systemd v239), systemd's timedated introduces a new beahvior that it checks the NTP services' status during setting time, instead of checking the NTP setting:
In OpenBMC 2.4 (with systemd v236), the above will always succeed.
This results in openbmc/openbmc#3459, and the related test cases are updated to cooperate with this behavior change.