OreSat Updater

Ryan Medick

Apr 22, 2021

CONTENTS

1 Glossary of Terms Used 3

2 OreSat Linux Updater Daemon5 2.1 Daemon...... 5

3 Update Maker 9 3.1 Update Maker...... 9

4 Files 11 4.1 Update Archive...... 11 4.2 Status Archive...... 13

5 Internals 15 5.1 OreSat Linux Updater’s Internal...... 15

6 Indices and tables 23

Index 25

i ii OreSat Linux Updater

Warning: This is still a work in progress.

CONTENTS 1 OreSat Linux Updater

2 CONTENTS CHAPTER ONE

GLOSSARY OF TERMS USED

D-Bus Inter-process communication system provided by systemd. See https://www.freedesktop.org/wiki/Software/ dbus/ Daemon Long running, background process on Linux. The low level for install and removing packages on Linux. APT is build ontop of it. OreSat PSAS’s open source CubeSat. See https://www.oresat.org/ OreSat Linux Manager (OLM) The front end daemon for all OreSat Linux boards. It converts CANopen message into DBus messages and vice versa. See https://github.com/oresat/oresat-linux-manager OreSat Linux Updater The common daemon found on all OreSat Linux boards, that handles updating the board with update archives. Status Archive A tar file with two status files produced by the OreSat Linux updater. One with a JSON list of the update archive in OreSat Linux updater’s cache and the other will be a copy of dpkg status file. The Update Maker will uses these to make future update archives. Update Archive A tar file used by the OreSat Linux updater daemon to update the board it is running on. It will contain package files and bash script. These will be made the the Updater Maker.

3 OreSat Linux Updater

4 Chapter 1. Glossary of Terms Used CHAPTER TWO

ORESAT LINUX UPDATER DAEMON

A common daemon on all Linux boards that allows board to updated over D-Bus using update files.

2.1 Daemon

A backend service for updating the Linux board using deb packages and bash scripts. It is mostly a D-Bus server with a update file cache, that can run update files from the Update Maker. Basics: • Giving the daemon update file will not trigger an update, only when the Update D-Bus method is called will an update start. • The daemon can also generate status file that can be used to make future updates and to know what is install on the board. • If a update fails the update file cache will be clear as it is assume all future updates require older updates. To start the daemon, if the Debian package is installed.

$ sudo systemctl start oresat-linux-updaterd

2.1.1 State Machine

If the board is powerred off when the Updater is updating, it will try resume the update next time the daemon is started.

class oresat_linux_updater.dbus_server.State(value) The states oresat linux updaer daemon can be in. STANDBY = 0 Waiting for commands.

5 OreSat Linux Updater

UPDATE = 1 Updating. UPDATE_FAILED = 2 Update failed, cache was cleared STATUS_FILE = 3 Making the status tar file.

2.1.2 D-Bus API class oresat_linux_updater.dbus_server.DBusServer(work_dir: str, cache_dir: str, log- ger: logging.Logger) The D-Bus Server wrapper ontop oresat linux updater that handles all threading. Note: all D-Bus Methods, Properties, and Signals follow Pascal case naming. Parameters • work_dir (str) – Archivepath to working directory. • cache_dir (str) – Archivepath to update archive cache directory. • logger (logging.Logger) – The logger object to use. StatusArchive D-Bus Signal with a str that will sent the absolute path to the updater status file after the MakeStatusArchive D-Bus Method is called. Type str UpdateResult D-Bus Signal with a Result value that will be sent after an update has finished or failed. Type uint8 AddUpdateArchive(update_archive: str) → bool D-Bus Method that copies an update archive into the update archive cache. Parameters update_archive (str) – The absolute path to update archive for the updater to store. Returns True if a file was added or False on failure. Return type bool property AvailableUpdateArchives D-Bus Property for the number of update archives in cache. Readonly. Type uint32 property InstructionCommand D-Bus Property for current instruction command. Will be an empty str if not updating. Readonly. Type str property InstructionIndex D-Bus Property for current index in the instructions. Wil be 0 if not updating. Readonly. Type uint8 property ListUpdates D-Bus Property for get the list of update filename in the cache. Readonly. Type str

6 Chapter 2. OreSat Linux Updater Daemon OreSat Linux Updater

MakeStatusArchive() → str D-Bus Method to make status tar file with a copy of the dpkg status file and a file with the list of update archives in cache. Returns Filepath to new file or empty str. Return type str property StatusName D-Bus Property for the curent status as a State name. Readonly. Type str property StatusValue D-Bus Property for the curent status as a State value. Readonly. Type uint8 property TotalInstructions D-Bus Property for the number intruction in the current update. Will be 0 if not updating. Readonly. Type uint8 Update() → bool D-Bus Method to load the oldest update archive in cache and runs update. Returns True if a the updater will start to update or False on failure. Return type bool property UpdateArchive D-Bus Property for the current update archive. Will be a empty str if the daemon is not currently updating. Readonly. Type str

2.1. Daemon 7 OreSat Linux Updater

8 Chapter 2. OreSat Linux Updater Daemon CHAPTER THREE

UPDATE MAKER

A shell interface for making update files.

3.1 Update Maker

TDB

9 OreSat Linux Updater

10 Chapter 3. Update Maker CHAPTER FOUR

FILES

File used by or created by the OreSat Linux updater dameon or Update Maker.

4.1 Update Archive

An update archive is tar file that will be used by the OreSat Linux Updater daemon to update the Linux board the daemon is running on. The update maker will be used to generate these files.

4.1.1 Compression

Update files are a tar file compressed with xz. xz is used as it offers a great compression ratio and the extra compression time doesn’t matter, since the update archive will be generated on a ground station server.

4.1.2 Tar Name

The file name will follow filename standards for oresat-linux-manager (OLM) with the keyword set to “update”. See https://oresat-linux.readthedocs.io/en/latest/standards/file-transfer.html for more info on OLM file name standards. Example, a update to the GPS board: gps_update_1612392143.tar.xz

The date field in the filename will be used to determine the next file to used as the oldest file is always run first.

4.1.3 Tar Contents

The update archive will always include a instructions.txt file. It can also include deb files (debian package files), bash script, and/or files to be used by bash scripts as needed. Example contents of a update archive: instructions.txt package1.deb package2.deb package3.deb bash_script1.sh bash_script2.sh bash_script3.sh bash_script2_external_file

11 OreSat Linux Updater

4.1.4 instructions.txt

instruction.txt contatins a JSON string with with a list of instruction dictionaries with type and items fields. The instructions will be run in order. class oresat_linux_updater.instruction.InstructionType(value) All the valid instruction types for the instructions.txt file. BASH_SCRIPT = 0 Run a bash scripts. SUPPORT_FILE = 1 One or more support files that will by used by a bash script. DPKG_INSTALL = 2 Install one or more packages with dpkg. DPKG_REMOVE = 3 Remove one or more packages with dpkg. DPKG_PURGE = 4 Purge one or more packages with dpkg. Example instructions.txt:

[ { "type":"DPKG_INSTALL", "items":["package1.deb"] }, { "type":"BASH_SCIPT", "items":["bash_script1.sh"] }, { "type":"BASH_SCIPT", "items":["bash_script2.sh"] }, { "type":"DPKG_INSTALL", "items":["package2.deb","package3.deb"] }, { "type":"DPKG_REMOVE", "items":["package4"] }, { "type":"BASH_SCIPT", "items":["bash_script3.sh"] } { "type":"DPKG_PURGE", "items":["package5","package6"] }, { "type":"SUPPORT_FILE", "items":["bash_script2_external_file"] } ]

12 Chapter 4. Files OreSat Linux Updater

4.2 Status Archive

A status archive is a .tar.xz archive file that contains two files; a olu-status txt file and dpkg-status txt file. The oresat_linux_updater daemon will make this if the MakeStatusFile dbus method is called. After every update, a OLU status file should be made and sent to the ground station, so future update can be made. The OLU status tar files will be around 100KiB.

4.2.1 OLU Status txt File

This file will contain a JSON list of update archive files that are in the cache and are available to be installed.

Note: If the cache is empty the status txt file will contain “null”.

Example OLU status file:

[ "gps_update_1612392143.tar.xz", "gps_update_1612381721.tar.xz" ]

4.2.2 DPKG Status txt File

A copy of the dpkg status file (/var/lib/dpkg/status) that will be used by the update maker to make future updates to the board. Example dpkg status file:

Package: adduser Status: install ok installed Priority: important Section: admin Installed-Size: 849 Maintainer: Debian Adduser Developers Architecture: all Multi-Arch: foreign Version: 3.118 Depends: passwd, debconf (>= 0.5)| debconf-2.0 Suggests: liblocale-gettext-perl, perl Conffiles: /etc/deluser.conf 773fb95e98a27947de4a95abb3d3f2a2 Description: add and remove users and groups This package includes the'adduser' and 'deluser' commands for creating and removing users. . -'adduser' creates new users and groups and adds existing users to existing groups; -'deluser' removes users and groups and removes users froma given group. . Adding users with 'adduser' is much easier than adding them manually. Adduser will choose appropriate UID and GID values, create a home directory, copy skeletal user configuration, and automate setting initial values for the user's password, real name and so on. (continues on next page)

4.2. Status Archive 13 OreSat Linux Updater

(continued from previous page) . Deluser can back up and remove users' home directories and mail spool or all the files they own on the system. . A custom script can be executed after each of the commands.

Package: Status: install ok installed Priority: required Section: admin Installed-Size: 3509 Maintainer: APT Development Team Architecture: armhf Version: 1.8.2.2 Replaces: apt-transport-https (<< 1.5~alpha4~), apt-utils (<< 1.3~exp2~) Provides: apt-transport-https (= 1.8.2.2) Depends: adduser, gpgv| gpgv2| gpgv1, debian-archive-keyring, libapt-pkg5.0(>= 1.7.

˓→0~alpha3~), libc6 (>= 2.15), libgcc1 (>=1:3.5), libgnutls30 (>= 3.6.6),

˓→libseccomp2 (>= 1.0.1), libstdc++6(>= 5.2) Recommends: ca-certificates Suggests: apt-doc, | synaptic| wajig, dpkg-dev (>= 1.17.2), gnupg| gnupg2

˓→| gnupg1, powermgmt-base Breaks: apt-transport-https (<< 1.5~alpha4~), apt-utils (<< 1.3~exp2~), aptitude (<<

˓→0.8.10) Conffiles: /etc/apt/apt.conf.d/01autoremove 76120d358bc9037bb6358e737b3050b5 /etc/cron.daily/apt-compat 49e9b2cfa17849700d4db735d04244f3 /etc/kernel/postinst.d/apt-auto-removal4ad976a68f045517cf4696cec7b8aa3a /etc/logrotate.d/apt 179f2ed4f85cbaca12fa3d69c2a4a1c3 Description: commandline package manager This package provides commandline tools for searching and managing as well as querying information about packages as a low-level access to all features of the libapt-pkg library. . These include: * apt-get for retrieval of packages and information about them from authenticated sources and for installation, upgrade and removal of packages together with their dependencies * apt-cache for querying available information about installed as well as installable packages * apt-cdrom to use removable media as a source for packages * apt-config as an interface to the configuration settings * apt-key as an interface to manage authentication keys

14 Chapter 4. Files CHAPTER FIVE

INTERNALS

The internals of the OreSat Linux updater daemon and Updater Maker.

5.1 OreSat Linux Updater’s Internal

5.1.1 Instruction

class oresat_linux_updater.instruction.InstructionType(value) Bases: enum.IntEnum All the valid instruction types for the instructions.txt file. BASH_SCRIPT = 0 Run a bash scripts. SUPPORT_FILE = 1 One or more support files that will by used by a bash script. DPKG_INSTALL = 2 Install one or more packages with dpkg. DPKG_REMOVE = 3 Remove one or more packages with dpkg. DPKG_PURGE = 4 Purge one or more packages with dpkg. oresat_linux_updater.instruction.INSTRUCTIONS_WITH_FILES = [, , ] The list of instructions that require files. class oresat_linux_updater.instruction.InstructionError Bases: Exception Invalid instruction. class oresat_linux_updater.instruction.Instruction(i_type: ore- sat_linux_updater.instruction.InstructionType, i_items: list) Instruction for the OreSat Linux updater. Parameters • i_type (InstructionType) – The type of instruction. • i_items (list) – A list of str for the instruction. If it is a InstructionType. BASH_SCRIPT the list must be only have 1 item.

15 OreSat Linux Updater

property bash_command The equivalent bash command for the instruction. Type str property items The items for the instruction. Type list run(log: logging.Logger) Run the instruction. All stdout message will be logged with info level and all stderr messages will be logged with error level. Parameters log (logging.Logger) – The logger to use to output stdin, stdout, stderr. Raises InstructionError – Invalid instruction. property type The instruction type. Type str oresat_linux_updater.instruction.run_bash_command(command: str, log: log- ging.Logger) → bool Run a bash command. All stdout message will be logged with info level and all stderr messages will be logged with error level. Parameters • command (str) – The bash command string to run. • log (logging.Logger) – The logger to use to output stdin, stdout, stderr. Raises InstructionError – Invalid instruction.

5.1.2 Update Archive oresat_linux_updater.update_archive.INST_FILE = 'instructions.txt' The instructions file that is always in a OreSat Linux update archive. It defines the order instructions are ran in and how it is ran. class oresat_linux_updater.update_archive.UpdateArchiveError Bases: Exception An error occurred when creating or extracting a update archive. oresat_linux_updater.update_archive.read_instructions_file(inst_file: str, work_dir: str) → str Open the instructions file. Parameters • update_archive (str) – Path to the update archive. • work_dir (str) – The directory to open the tarfile in. Raises UpdateArchiveError – Invalid update instruction JSON or Returns A list of Instructions. Return type list

16 Chapter 5. Internals OreSat Linux Updater oresat_linux_updater.update_archive.write_instructions_file(inst_list: list, path_dir) → str Makes the instructions file from a instructions list. Parameters • inst_list (list) – A list of Instructions objects. • path_dir (str) – The directory to make the tar in. Raises ValueError – Invalid inst_list. Returns Absolute path to the new instructions file. Return type str oresat_linux_updater.update_archive.extract_update_archive(update_archive: str, work_dir: str) → str Open the update archive file. Parameters • update_archive (str) – Path to the update archive. • work_dir (str) – The directory to open the tarfile in. Raises UpdateArchiveError – Invalid update archive. Returns The contents of the instructions file. Return type str oresat_linux_updater.update_archive.create_update_archive(board: str, inst_list: dict, work_dir: str, con- sume_files=True) → str Makes the tar from a list of instructions. This will consume all files if a valid update archive is made. Parameters • board (str) – The board the update is for. • inst_list (list) – A list of instruction dictionaries. • work_dir (str) – The directory to make the tar in. • consume (bool) – A flag if the file should be consumed. Raises InstructionError – Invalid inst_list. Returns Absolute path to the new update archive. Return type str

5.1.3 OLM File class oresat_linux_updater.olm_file.OLMFile(load=None, board=None, keyword=None, ext='.txt') A class that follows the OreSat Linux Manager file format. Can be used in list to sort a list of files following the oresat-linux-manager (OLM) filename standards. When used in a sorted list, the list will be order newest to oldest, so list.pop() can be used to get the oldest file in the list. Parameters

5.1. OreSat Linux Updater’s Internal 17 OreSat Linux Updater

• load (str) – Path to the file. Used to make a OLMFile object from an existing file. Cannot be used in tandem with keyword. • board (str) – The board name for the new file. Optional, can be used for new OLMFile object. If not set and keyword is set, the hostname will be used. • keyword (str) – The keyword for the new file. Used to make new OLMFile object. Must be set unless board is set. • ext (str) – The file extension. Optional, can be used for new OLMFile object. If not set “.txt” will be used. Raises • ValueError – If load and keyword are both set. • FileNotFoundError – If load is set to an invalid filepath. property board The board the file is for or from. Type str property date The Unix time the file was made. Type int property extension The file extension. Type str property keyword The keyword for the file, this is used by OLM to figure out what todo with the file. Type str property name The full name for the file. Type str

5.1.4 Updater class oresat_linux_updater.updater.Result(value) Bases: enum.IntEnum The integer value Updater’s update() will return NOTHING = 0 Nothing for the updater to do. The cache was empty or there was nothing to resume. SUCCESS = 1 The update successfully install. FAILED_NON_CRIT = 2 The update failed during the inital non critical section. Either the was an error using the file cache, when opening tarfile, or reading the instructions file. FAILED_CRIT = 3 The update failed during the critical section. The updater fail while following the instructions.

18 Chapter 5. Internals OreSat Linux Updater class oresat_linux_updater.updater.UpdaterError Bases: Exception An error occurred in Updater class. class oresat_linux_updater.updater.Updater(work_dir: str, cache_dir: str, logger: log- ging.Logger) The OreSat Linux updater. Allows OreSat Linux boards to be update thru update archives. While this could be replaced with a couple of functions. Having a object with properties, allow for easy to get status info while updating. All properties are readonly. All functions and properties are thread safe. Parameters • work_dir (str) – Directory to use a the working dir. Should be a abslute path. • cache_dir (str) – Directory to store update archives in. Should be a abslute path. • logger (logging.Logger) – The logger object to use. add_update_archive(update_archive: str) → bool Copies update archive into the update archive cache. Parameters update_archive (str) – The absolute path to update archive for the updater to copy. Returns True if a file was added or False on failure. Return type bool property available_update_archives The number of update archives in cache. Readonly. Type int clear_cache_dir() Clears the working directory. property instruction_command The current bash command being running. Will be an empty str if the not currently updating. Readonly. Type str property instruction_index The index of the instruction currently running. Will be 0 if the not currently updating. Readonly. Type int property is_updating Flag if the updater is updating or not. Type bool property list_updates Get a JSON list of filename in cache. Readonly. Type str property total_instructions The total number of instructions in the update running. Will be 0 if the not currently updating. Readonly. Type int

5.1. OreSat Linux Updater’s Internal 19 OreSat Linux Updater

update() → int Run a update. If there are file aleady in the working directory, it will try to find and resume the update, otherwise it will get the oldest archive from the update archive cache and run it. If the update fails, the cache will be cleared, as it is asume all newer updates require the failed updated to be run successfully first. Raises UpdaterError – If called when already updating. Returns A Result value. Return type int property update_archive Current update archive while updating. Will be a empty str if the daemon is not currently updating. Readonly. Type str

5.1.5 Updater D-Bus Server class oresat_linux_updater.dbus_server.State(value) Bases: enum.IntEnum The states oresat linux updaer daemon can be in. STANDBY = 0 Waiting for commands. UPDATE = 1 Updating. UPDATE_FAILED = 2 Update failed, cache was cleared STATUS_FILE = 3 Making the status tar file. class oresat_linux_updater.dbus_server.DBusServer(work_dir: str, cache_dir: str, log- ger: logging.Logger) The D-Bus Server wrapper ontop oresat linux updater that handles all threading. Note: all D-Bus Methods, Properties, and Signals follow Pascal case naming. Parameters • work_dir (str) – Archivepath to working directory. • cache_dir (str) – Archivepath to update archive cache directory. • logger (logging.Logger) – The logger object to use. StatusArchive D-Bus Signal with a str that will sent the absolute path to the updater status file after the MakeStatusArchive D-Bus Method is called. Type str UpdateResult D-Bus Signal with a Result value that will be sent after an update has finished or failed. Type uint8

20 Chapter 5. Internals OreSat Linux Updater

AddUpdateArchive(update_archive: str) → bool D-Bus Method that copies an update archive into the update archive cache. Parameters update_archive (str) – The absolute path to update archive for the updater to store. Returns True if a file was added or False on failure. Return type bool property AvailableUpdateArchives D-Bus Property for the number of update archives in cache. Readonly. Type uint32 property InstructionCommand D-Bus Property for current instruction command. Will be an empty str if not updating. Readonly. Type str property InstructionIndex D-Bus Property for current index in the instructions. Wil be 0 if not updating. Readonly. Type uint8 property ListUpdates D-Bus Property for get the list of update filename in the cache. Readonly. Type str MakeStatusArchive() → str D-Bus Method to make status tar file with a copy of the dpkg status file and a file with the list of update archives in cache. Returns Filepath to new file or empty str. Return type str property StatusName D-Bus Property for the curent status as a State name. Readonly. Type str property StatusValue D-Bus Property for the curent status as a State value. Readonly. Type uint8 property TotalInstructions D-Bus Property for the number intruction in the current update. Will be 0 if not updating. Readonly. Type uint8 Update() → bool D-Bus Method to load the oldest update archive in cache and runs update. Returns True if a the updater will start to update or False on failure. Return type bool property UpdateArchive D-Bus Property for the current update archive. Will be a empty str if the daemon is not currently updating. Readonly. Type str

5.1. OreSat Linux Updater’s Internal 21 OreSat Linux Updater

_working_loop() The main loop to contol the Linux Updater asynchronously. Will be in its own thread. quit() Stop the D-Bus server. run() Start the D-Bus server.

5.1.6 Main

22 Chapter 5. Internals CHAPTER SIX

INDICES AND TABLES

• genindex • search

23 OreSat Linux Updater

24 Chapter 6. Indices and tables INDEX

Symbols dpkg, 3 _working_loop() (ore- DPKG_INSTALL (ore- sat_linux_updater.dbus_server.DBusServer sat_linux_updater.instruction.InstructionType method), 21 attribute), 15 DPKG_PURGE (oresat_linux_updater.instruction.InstructionType A attribute), 15 DPKG_REMOVE add_update_archive() (ore- (oresat_linux_updater.instruction.InstructionType sat_linux_updater.updater.Updater method), attribute), 15 19 AddUpdateArchive() (ore- E sat_linux_updater.dbus_server.DBusServer extension() (oresat_linux_updater.olm_file.OLMFile method), 20 property), 18 available_update_archives() (ore- extract_update_archive() (in module ore- sat_linux_updater.updater.Updater property), sat_linux_updater.update_archive), 17 19 AvailableUpdateArchives() (ore- F sat_linux_updater.dbus_server.DBusServer FAILED_CRIT (oresat_linux_updater.updater.Result at- property), 21 tribute), 18 FAILED_NON_CRIT (ore- B sat_linux_updater.updater.Result attribute), bash_command() (ore- 18 sat_linux_updater.instruction.Instruction property), 15 I BASH_SCRIPT (oresat_linux_updater.instruction.InstructionTypeINST_FILE (in module ore- attribute), 15 sat_linux_updater.update_archive), 16 board() (oresat_linux_updater.olm_file.OLMFile prop- Instruction (class in ore- erty), 18 sat_linux_updater.instruction), 15 instruction_command() (ore- C sat_linux_updater.updater.Updater property), clear_cache_dir() (ore- 19 sat_linux_updater.updater.Updater method), instruction_index() (ore- 19 sat_linux_updater.updater.Updater property), create_update_archive() (in module ore- 19 sat_linux_updater.update_archive), 17 InstructionCommand() (ore- sat_linux_updater.dbus_server.DBusServer D property), 21 D-Bus, 3 InstructionError (class in ore- Daemon, 3 sat_linux_updater.instruction), 15 date() (oresat_linux_updater.olm_file.OLMFile prop- InstructionIndex() (ore- erty), 18 sat_linux_updater.dbus_server.DBusServer DBusServer (class in ore- property), 21 sat_linux_updater.dbus_server), 20

25 OreSat Linux Updater

INSTRUCTIONS_WITH_FILES (in module ore- S sat_linux_updater.instruction), 15 STANDBY (oresat_linux_updater.dbus_server.State at- InstructionType (class in ore- tribute), 20 sat_linux_updater.instruction), 15 State (class in oresat_linux_updater.dbus_server), 20 is_updating() (ore- Status Archive, 3 sat_linux_updater.updater.Updater property), STATUS_FILE (oresat_linux_updater.dbus_server.State 19 attribute), 20 items() (oresat_linux_updater.instruction.Instruction StatusArchive (ore- property), 16 sat_linux_updater.dbus_server.DBusServer attribute), 20 K StatusName() (ore- keyword() (oresat_linux_updater.olm_file.OLMFile sat_linux_updater.dbus_server.DBusServer property), 18 property), 21 StatusValue() (ore- L sat_linux_updater.dbus_server.DBusServer list_updates() (ore- property), 21 sat_linux_updater.updater.Updater property), SUCCESS (oresat_linux_updater.updater.Result at- 19 tribute), 18 ListUpdates() (ore- SUPPORT_FILE (ore- sat_linux_updater.dbus_server.DBusServer sat_linux_updater.instruction.InstructionType property), 21 attribute), 15 M T MakeStatusArchive() (ore- total_instructions() (ore- sat_linux_updater.dbus_server.DBusServer sat_linux_updater.updater.Updater property), method), 21 19 TotalInstructions() (ore- N sat_linux_updater.dbus_server.DBusServer name() (oresat_linux_updater.olm_file.OLMFile prop- property), 21 type() erty), 18 (oresat_linux_updater.instruction.Instruction NOTHING (oresat_linux_updater.updater.Result at- property), 16 tribute), 18 U O UPDATE (oresat_linux_updater.dbus_server.State at- tribute), 20 OLMFile (class in oresat_linux_updater.olm_file), 17 Update Archive, 3 OreSat, 3 Update() (oresat_linux_updater.dbus_server.DBusServer OreSat Linux Manager (OLM), 3 method), 21 OreSat Linux Updater, 3 update() (oresat_linux_updater.updater.Updater Q method), 19 update_archive() (ore- quit() (oresat_linux_updater.dbus_server.DBusServer sat_linux_updater.updater.Updater property), method), 22 20 UPDATE_FAILED (ore- R sat_linux_updater.dbus_server.State attribute), read_instructions_file() (in module ore- 20 sat_linux_updater.update_archive), 16 UpdateArchive() (ore- Result (class in oresat_linux_updater.updater), 18 sat_linux_updater.dbus_server.DBusServer run() (oresat_linux_updater.dbus_server.DBusServer property), 21 method), 22 UpdateArchiveError (class in ore- run() (oresat_linux_updater.instruction.Instruction sat_linux_updater.update_archive), 16 method), 16 Updater (class in oresat_linux_updater.updater), 19 run_bash_command() (in module ore- UpdaterError (class in ore- sat_linux_updater.instruction), 16 sat_linux_updater.updater), 18

26 Index OreSat Linux Updater

UpdateResult (ore- sat_linux_updater.dbus_server.DBusServer attribute), 20 W write_instructions_file() (in module ore- sat_linux_updater.update_archive), 16

Index 27