Your packed firmware needs to be uploaded to your system (fussy does not provide this functionality). Once uploaded, you need to arrange to call the fussy-install script. Keep in mind that this script likely needs to be called as root (in order to allow it to properly set ownership and start/restart services).
To install a package into the default /opt/firmware/ location:
$ fussy-install /tmp/fussy-iHUyhV-pack/sample-setup.tar.gz.gpg
$ fussy-clean
this will update the /opt/firmware/current link to point to the unpacked version of the firmware and run the .pre-install and .post-install scripts with the final location of the firmware as their first argument.
If you install the same firmware twice, the firmware’s directory name will be altered to have a trailing integer suffix.
If the installation fails, then the previous current installation will be re-installed (i.e. will be linked, then have its pre and post-install scripts run.
fussy-install unpacks the firmware into a temporary directory, rsyncs it into the firmware target directory, runs the .pre-install script, if present, then “fixates” the version by linking current to the new version, and finally runs the .post-install script, if present.
$ fussy-install --help
Usage: fussy-install [options]
Options:
-h, --help show this help message and exit
-f FILE, --file=FILE The firmware archive to unpack, must be a .tar.gz.gpg
or a .tar.gz.asc
-k KEYRING, --keyring=KEYRING
GPG keyring to use for verification/decryption
(default /etc/fussy/keys)
-t TARGET, --target=TARGET
Directory into which to rsync the firmware (default
/opt/firmware)
$ fussy-clean --help
Usage: fussy-clean [options]
Options:
-h, --help show this help message and exit
-t TARGET, --target=TARGET
Directory into which to rsync the firmware (default
/opt/firmware)
Install a given firmware package onto the file system (commands fussy-install and fussy-clean)
Major TODO items:
Naive cleaning implementation
Removes all names in target which are not in protected, paths in protected must be full path names, as returned by glob. The target of the current link is protected.
Main entry-point for fussy-clean script
Steps taken:
- parses arguments
- launches clean()
Attempt to enable final_target as the current release
Steps taken:
- runs final_target/.pre-install final_target (iff .pre-install is present)
- (atomically) swaps the link current for a link that points to final_target
- runs final_target/.post-install final_target (iff .post-install is present)
- if a failure occurs before swap-link completes, deletes final_target
returns None raises Exceptions on lots of failure cases
Ensure that current is a link (not a directory)
Get the final path of the given link
raises IOError if link target does not exist, or the target is not a directory
returns normalized real target path of the link
Install given firmware <filename> into given target directory
Steps taken:
- unpack firmware (using fussy.install.install_bytes())
- enable firmware (using fussy.install.enable())
- if :func:enable fails, enable previous (or failsafe if there was no previous)
returns (error_code (0 is success), path name of the installed package)
Install the packaged bytes into a final target directory
Steps taken:
unpack firmware using fussy.unpack.unpack()
- rsync new_firmware into /opt/firmware (target)
- if CURRENT_LINK (current) is present in target, will hard-link shared files between the new firmware and current to reduce disk use (using rsync parameter –link-dest)
removes the temporary directory where unpacking was performed
returns full path to sub-directory of target where new firmware was installed
raises Errors on most failures, including disk-full, failed commands, missing executables, etc