Added
- New
exit_level=parameter in the[Ipmi]section (int,[-1..100]%, default=100). It is the fan level applied to all configured IPMI zones when the service terminates. The special value-1means "do not change the fan levels", so the zones stay at the last applied level. On X14 motherboards the level is applied and then manual fan control is released, so automatic BMC fan control is restored - see README chapter 1.5 and chapter 6 for the details of this platform difference. This parameter was added while fixing issue #118.
Changed
docker/Docker.mdwas renamed todocker/DOCKER.md, so all documentation files of the repository use the same upper-case naming. All references were updated, including the ones in the earlier entries of this changelog, but external links pointing to the old path (e.g. bookmarks) have to be updated manually.docker/DOCKER.mddocuments what happens to the fans when the container is stopped:docker stopsendsSIGTERM, so the configuredexit_level=is applied.- The section headings of this changelog use the Keep a Changelog categories consistently now (
Added,Changed,Deprecated,Removed,Fixed). The earlierNew,New/Added,FixandChangeheadings were renamed accordingly in all releases, the entries themselves are unchanged. The same categories are used in the DEB (debian/changelog) and RPM (smfc.spec) changelogs, where theNew:bullet prefix becameAdded:. - The fan mode is not changed at exit any more.
smfcis already running in FULL mode at that point, so the redundantset_fan_mode()call only cost afan_mode_delaylong sleep on every service stop.
Deprecated
- The
-necommand-line option. It is still accepted and still means "no fan level change at exit" (it is equivalent toexit_level=-1), but it logs a deprecation warning and it will be removed in a future release.
Fixed
- The documented safe shutdown did not happen on a normal service stop. Fan levels were restored through an
atexithandler only, and CPython does not runatexitcallbacks when the process is terminated by SIGTERM, which is the default kill signal of systemd. As a result nothing happened onsystemctl stoporsystemctl restart: the BMC was left in FULL mode at the last applied duty cycle with no component regulating it, which is exactly the state FULL mode is not safe in.smfcinstalls a SIGTERM handler now, so a normal service stop performs an ordinary interpreter shutdown and the configuredexit_level=is applied. If you prefer the previous behavior, setexit_level=-1. See issue #118. smfc-clientreported the wrong fan level for controllers that lose a shared IPMI zone arbitration. Both theFan controllerstable and the--verboseblock showed the level applied to the zone instead of the level the controller itself requested, so a losing controller contradicted its ownWindow:/Curve:lines (e.g. an NVME controller at 39.9C displayingLevel: 74 %while its curve maps that temperature to 35%). Each controller now reports its own request, and when the zone ended up at a different level that value is appended explicitly as(zone N applied: Z %). Controllers on non-shared zones and the winner of a shared zone are unchanged.- Documentation of
smfc-client --verbose:shared=yeswas described as meaning that another controller is currently driving the row's IPMI zone. It marks participation in zone arbitration and is reported for every controller on a shared zone, the current winner included.