{"id":19608649,"url":"https://github.com/sel4/machine_queue","last_synced_at":"2025-06-19T08:10:03.964Z","repository":{"id":207275685,"uuid":"368401874","full_name":"seL4/machine_queue","owner":"seL4","description":"Machine Queue scripts for remote access to our CI system","archived":false,"fork":false,"pushed_at":"2025-06-11T23:20:33.000Z","size":382,"stargazers_count":4,"open_issues_count":3,"forks_count":3,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-06-19T08:09:56.818Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seL4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSES/BSD-2-Clause.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-05-18T04:37:44.000Z","updated_at":"2025-06-11T23:20:38.000Z","dependencies_parsed_at":"2024-01-30T05:22:04.001Z","dependency_job_id":"d6bda080-0c77-4380-a137-ec5f3268eca4","html_url":"https://github.com/seL4/machine_queue","commit_stats":null,"previous_names":["sel4/machine_queue"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/seL4/machine_queue","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seL4%2Fmachine_queue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seL4%2Fmachine_queue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seL4%2Fmachine_queue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seL4%2Fmachine_queue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seL4","download_url":"https://codeload.github.com/seL4/machine_queue/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seL4%2Fmachine_queue/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260713353,"owners_count":23050827,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T10:16:13.170Z","updated_at":"2025-06-19T08:09:58.935Z","avatar_url":"https://github.com/seL4.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\n     Copyright 2023 UNSW, Sydney\n\n     SPDX-License-Identifier: CC-BY-SA-4.0\n--\u003e\n\nMachine Queue\n===============\n\nThis project contains the scripts to allow remote access to the suite\nof machines maintained by the Trustworthy Systems group at UNSW,\nSydney for testing seL4 and systems built on seL4.\n\nClose collaborators and seL4 Foundation members can request access,\nand use these scripts to deploy their payloads onto our CI\ninfrastructure; they are also used by GitHub's\n[CI Actions](https://github.com/seL4/ci-actions) for seL4.\n\n\nSet Up\n========\n\nAfter you have a Trustworthy Systems account set up, clone this\nrepository, and create a symlink from `mq.sh` to somewhere in your\n`$PATH`.\n\nFor example, you can do:\n  ```\n  git clone git@github.com:seL4/machine_queue.git\n  H=$(pwd)/mq.sh\n  cd ~/bin\n  ln -s $H/mq.sh mq\n  ```\n\nThe mq scripts assume a standard POSIX system, that `/bin/sh` is\nPOSIX compliant, and that you can use `ssh` to reach\n`tftp.keg.cse.unsw.edu.au` without password.  To set up the latter,\nadd to your `~/.ssh/config`:\n ```\n Host tftp.keg.cse.unsw.edu.au\n     ProxyJump login.trustworthy.systems\n\t ControlMaster auto\n     ControlPersist 300\n     ControlPath /home/%u/.ssh/controlmaster/%h-%p-%r.sock\n     ServerAliveInterval 60\n     TCPKeepAlive yes\n ```\nor clauses with similar effect.  The script makes many `ssh`\nconnections in a row; without the control multiplexing this can get\npainfully slow.\n\n\nUsage\n======\n\n`mq` has many subcommands:\n * `run` --- run a payload on a system\n * `systems` --- list available systems\n * `sem` --- interact directly with locks\n * `system-tsv` --- list available systems as tab-separated values\n * `pool-tsv` --- list available pools of systems as tab-separated\n   values\n\n`mq run`\n--------\n`mq.sh run -r|-c` _\u003cstring\u003e_ `[-l ` _logfile_ `] -s` _system_ `[-w` _retry-time_ `] [-t `_retry-count_` ] [-n] [-a] [-d` _timeout_ `] [-e` _\u003cstring\u003e_`] [-k `_\u003cstring\u003e_`] [-L] -f `_file1_ `[-f `_file2_`]\n.. [-f` _filen_ `]`\n\n   Acquires a lock for the machine called _system_ (or a machine in\n   the pool called _system_), and, once locked, runs the specified job.\n\n   Output from the machine is collected and passed back to the\n   user both on stdout and into an optional logfile.\n\n   Jobs can be cancelled at any time with ^C, which will notify the server\n   (if the job is running) and remove the job from the queue.\n\n   Returns 0 on success, nonzero if something went wrong\n\nOptions:\n\n- `-r`          Reserves the device. Will not reboot or run an image\n- `-n`          No lock changes. Checks that you have the lock, and then runs an image. Will not unlock afterwards.\n- `-a`          Keep the machine alive after completion or error text\n detected. The console becomes read-write after the text has been found.\n- `-c` _TEXT_     Image is run until the specified regular completion\n text.\n- `-e` _TEXT_     Image is run until the specified error text is found.\n- `-d` _TIME_     Timeout (in seconds) to wait for the completion text (default -1 AKA no timeout)\n- `-k` _KEY_      Key for obtaining the lock\n- `-l` _FILE_     Optional location to write all the console output to\n- `-L`          This is a Linux image not seL4\n- `-s` _TEXT_     Specifies which machine this job is for\n- `-f` _FILE_ [+] Files to use as the job image.  Most systems need a\n    single image file; x86 currently expects two, the kernel and the root task.\n- `-w` _TIME_     Number of seconds to wait between each attempt to acquire the lock (default 8)\n- `-t` _RETRIES_  Number of retries to perform for acquiring the lock (default -1)\n\n\n`mq sem dumpall|-signal|-wait|-cancel|-info `_\u003csystem\u003e_` [-f] [-w `_retry-time_` ] [-t `_retry-count_` ] [-k `_LOCK_\\__KEY_` ] [-T` _timeout_`]`\n\n   Manually manipulate locks for machines. The lock for each system\n   can be acquired or released.\n\n   You can forcibly release a lock for a system that you do not\n   currently own by using the `-f` flag\n\n Options:\n\n- `-info` _SYSTEM_     Display lock information for the specified SYSTEM\n- `-mr-info` _SYSTEM_  Display lock information for the specified SYSTEM in machine-readable format\n- `-signal` _SYSTEM_   Release the lock for the specified SYSTEM\n- `-wait` _SYSTEM_     Acquire the lock for the specified SYSTEM\n- `-cancel` _SYSTEM_   Cancel `-wait` processes on the server that are waiting for specified SYSTEM and key\n- `-w` _TIME_          Number of seconds to wait between each attempt to acquire the lock (default 8)\n- `-t` _RETRIES_       Number of retries to perform for acquiring the\n lock (default -1, which means infinity)\n- `-f`               Forcefully releases a lock even if you are not the owner\n- `-k` _LOCK\\_KEY_      Set a key inside the lock\n- `-T` _timeout_       Allow lock to be reclaimed after _timeout_ seconds\n- `dumpall`            Prints all currently locked systems\n\n`mq systems [help|simple]`\n\nPrint list of available systems.  With `simple` just give their names\n\nTwo other commands are more for use in scripts:\n`mq system-tsv` and `mq pool-tsv` take no arguments, and write to stdout\nall the systems, and all the pools (respectively).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsel4%2Fmachine_queue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsel4%2Fmachine_queue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsel4%2Fmachine_queue/lists"}