Yamaha Hybrid Linux Updater 1.2.0

This native Linux updater checks existing S-YXG100 Hybrid, S-YXG2026 Hybrid and Mu2026 Hybrid installations. It needs Python 3.9 or later and the OpenSSL command-line tool. It does not need PowerShell or Wine to perform an update; Wine is still needed to run the Windows synth. macOS is not tested or supported by this updater.

Install the updater

Keep these three files together beside the synth folder or in a shared parent:

It searches its own folder and at most two child levels. A product archive's VST folder is supported. It does not install an absent synth. It refuses symbolic-link destinations and does not follow linked subfolders.

Close all audio hosts using the synths, open a terminal in the updater folder, then run:

sh ./Update-YamahaHybrids.sh

Release notes appear before a numbered Install or Cancel choice. The updater also asks you to confirm that audio hosts are closed. Linux can replace a loaded DLL without preventing an old host from continuing to use it, so closing hosts matters. The process check catches observed loaded synth files and active workers, but cannot guarantee detection of every bridge or a host started afterward. The updater never terminates hosts or changes the Wine prefix.

Commands and exit codes

sh ./Update-YamahaHybrids.sh --help
sh ./Update-YamahaHybrids.sh --check-only
sh ./Update-YamahaHybrids.sh --search-directory "/path/to/synth folders"
sh ./Update-YamahaHybrids.sh --install --non-interactive --hosts-closed

--check-only never installs. Redirected or unattended execution never prompts; installation requires --install --hosts-closed. Exit code 0 means success or cancellation, 10 means an update is available but not installed, and 2 means failure or no detected installation.

Verification and rollback

Only stable synth-family releases are selected. Research previews and the separate updater release are ignored. RSA/SHA-256 signature verification is mandatory, followed by the signed ZIP and individual file hashes. Invalid or missing signatures fail closed. File allowlists, archive entry and size limits, and HTTPS-only downloads restrict what a package can replace.

Updates preserve unrelated files, ROMs not listed in the signed manifest, user configuration, and existing file permissions. A partial replacement failure restores replaced files and removes newly introduced files automatically. The version marker is committed last. No gain, routing or sound-engine setting is changed by the updater itself.

Rollback ZIPs live below ${XDG_STATE_HOME:-$HOME/.local/state}/onj-research/yamaha-hybrid-updater/, in a product and installation-specific folder. One rollback ZIP is kept per installation and two small run logs are kept. ZIPs are not loose plug-ins. If automatic rollback fails, preserve the reported ZIP and log, keep hosts closed, and report the failure rather than retrying repeatedly. A power loss or forced process termination cannot run automatic rollback; the ZIP's rollback.json records original locations and whether each file existed.

There is no automatic elevation, package-manager installation, or third-party Python dependency. Signature verification uses the installed OpenSSL tool. Only public keys are included. Releases still contain Windows synths; the updater does not convert them into native Linux instruments.

Updating these scripts

Existing signed runtime packages continue to use their original Windows updater file list, preserving compatibility with older installations. For now, obtain newer Linux updater scripts from the separate updater release and replace the three files together. Do not add new files to an older updater's signed manifest locally or disable signature checks.

Falcosoft master-volume fades

If a song's closing fade is missing in Falcosoft MIDI Player's VST output, open Device settings, Mixer, and disable Use Sysex for Volume/Balance. Keep MIDI-file SysEx enabled and replay the song from the beginning. With the checkbox enabled, controlled Falcosoft 6.6 tests withheld FatPizz's original Yamaha master-volume messages from the plug-in. Disabling it restored their delivery and the fade. This is a host-output setting, not a requirement to disable SysEx for external MIDI equipment.

Test coverage and limits

Tested on Linux with Python 3.10 and OpenSSL 3.0, including real published signed packages for all three families. Tests cover unsafe paths, symbolic links, signature rejection, stable-family selection, package and file hashes, simulated replacement failure, rollback, permissions, bounded discovery, process checks, concurrent execution and unattended operation. Distribution-specific packaging, macOS and every possible Wine/bridge process layout remain unverified.

These updater files contain no Yamaha ROMs, binaries, tables or MIDI songs. The updater code uses the repository's MIT licence.