{"id":38499246,"url":"https://github.com/rdkcentral/dobby","last_synced_at":"2026-03-13T09:02:38.618Z","repository":{"id":37819362,"uuid":"272479466","full_name":"rdkcentral/Dobby","owner":"rdkcentral","description":"The Dobby component is a wrapper around the opensource crun/runc containerization tool for managing and running containers.","archived":false,"fork":false,"pushed_at":"2026-02-10T16:16:41.000Z","size":13594,"stargazers_count":17,"open_issues_count":13,"forks_count":52,"subscribers_count":8,"default_branch":"develop","last_synced_at":"2026-02-10T20:37:50.443Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rdkcentral.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","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,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-06-15T15:44:49.000Z","updated_at":"2026-02-10T16:15:43.000Z","dependencies_parsed_at":"2023-09-27T00:58:27.935Z","dependency_job_id":"727969b4-fd3d-4466-a946-82aecd77a904","html_url":"https://github.com/rdkcentral/Dobby","commit_stats":null,"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"purl":"pkg:github/rdkcentral/Dobby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2FDobby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2FDobby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2FDobby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2FDobby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rdkcentral","download_url":"https://codeload.github.com/rdkcentral/Dobby/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rdkcentral%2FDobby/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30463567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T06:34:02.089Z","status":"ssl_error","status_checked_at":"2026-03-13T06:33:49.182Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":"2026-01-17T05:57:52.051Z","updated_at":"2026-03-13T09:02:38.604Z","avatar_url":"https://github.com/rdkcentral.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dobby\n![GitHub release (with filter)](https://img.shields.io/github/v/release/rdkcentral/Dobby)![GitHub](https://img.shields.io/github/license/rdkcentral/Dobby)![Github](https://img.shields.io/github/issues-pr-raw/rdkcentral/Dobby)![Github](https://img.shields.io/github/issues/rdkcentral/Dobby)\n  \n\nDobby “Docker based Thingy” is a tool for managing and running OCI containers using [crun](https://github.com/containers/crun)\n\n# Getting Started\n## Requirements\nDobby has the following dependencies\n\n* CMake (\u003e3.7)\n* crun (\u003e=0.13)\n* jsoncpp\n* yajl 2 (for libocispec)\n* ctemplate (if using `LEGACY_COMPONENTS`)\n* libsystemd\n* libnl (if using Networking plugin)\n* libnl-route (if using Networking plugin)\n* libdbus\n* boost (1.61)\n\n## Build\nDobby is a CMake project and can be built with the standard CMake workflow. To build, run the following commands.\n\n```\ncd /location/of/dobby/repo\nmkdir build \u0026\u0026 cd build\n\ncmake -DCMAKE_BUILD_TYPE=Debug ../\n\nmake -j$(numproc)\nsudo make install\n```\n\nDuring the CMake configure stage, CMake will also configure the `libocispec` submodule. This is used to generate the necessary C headers for parsing and manipulating OCI bundle specifications.\n\nIf the schema files in the `bundle/runtime-schemas` directory are changed, then you will need to re-run CMake again to regenerate the headers.\n\nWhen building for the development VM, use the following CMake command:\n```\ncmake -DCMAKE_BUILD_TYPE=Debug -DRDK_PLATFORM=DEV_VM -DCMAKE_INSTALL_PREFIX:PATH=/usr ../\n```\n\n### CMake Configuration Settings\n| Option                      | Valid Options                                        | Description                                                                                                                                                                                                                                                         |\n| :-------------------------- | :--------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `-DCMAKE_BUILD_TYPE`        | Debug/Release                                        | Build the Debug or Release version                                                                                                                                                                                                                                  |\n| `-DENABLE_DOBBYTOOL`        | ON/OFF                                               | Include DobbyTool in the build. For Debug builds, defaults to ON. For Release builds, defaults to OFF.                                                                                                                                                              |\n| `-DPLUGIN_PATH`             | Valid UNIX path                                      | Specify a different location to load RDK plugins from. Defaults to `/usr/lib/plugins/dobby` if not set                                                                                                                                                              |\n| `-DRDK_PLATFORM`            | `GENERIC`\u003cbr/\u003e `DEV_VM`                              | Specify which platform Dobby is running on. Defaults to `GENERIC` if none specified. DEV_VM changes some settings suitable for                                                                                                                                      |\n| `-DSETTINGS_FILE`           | Valid UNIX path                                      | Path to the settings JSON file to use for Dobby (will be installed to /etc/dobby.json)                                                                                                                                                                              |\n| `-DSETTINGS_APPEND`         | Valid UNIX path                                      | Settings to append to the base settings file as defined in `-DSETTINGS_FILE`                                                                                                                                                                                        |\n| `-DLEGACY_COMPONENTS`       | ON/OFF                                               | Enable or disable legacy components (legacy plugins, Dobby specs, ...). Defaults to OFF                                                                                                                                                                             |\n| `-DENABLE_LTO`              | ON/OFF                                               | Enable Link Time Optimisation (https://gcc.gnu.org/onlinedocs/gccint/LTO-Overview.html). Requires GCC \u003e4,5 although versions \u003e6 are strongly recommended. Defaults to `OFF`                                                                                         |\n| `-DENABLE_PERFETTO_TRACING` | ON/OFF                                               | Option to enable or disable Perfetto tracing. Can not be enabled for release builds. Requires Perfetto SDK to be installed, and Legacy Components enabled                                                                                                           |\n| `-DDOBBY_SERVICE`           | Reverse domain name string                           | Specify the Dobby dbus service name. Defaults to `org.rdk.dobby` if none specified.                                                                                                                                                                                 |\n| `-DDDOBBY_OBJECT`           | Valid UNIX path                                      | Specify the Dobby dbus object path. Defaults to `/org/rdk/dobby` if none specified.                                                                                                                                                                                 |\n| `-DUSE_STARTCONTAINER_HOOK` | ON/OFF                                               | Whether to use the startcontainer OCI hook or not. Defaults to OFF.                                                                                                                                                                                                 |\n| `-DUSE_SYSTEMD`             | ON/OFF                                               | Build with systemd support (recommended). When disabled, uses libdbus API instead of sd-bus. Defaults to ON.                                                                                                                                                        |\n| `-DEXTERNAL_PLUGIN_SCHEMA`  | Valid file path(s)                                   | Path(s) to external json schema definitions for extra rdk plugins. Paths should be seperated by `;`.                                                                                                                                                                |\n| `-DENABLE_OPT_SETTINGS`     | ON/OFF                                               | Enable searching for dobby.json settings in /opt/ directory. Defaults to OFF.                                                                                                                                                                                       |\n| `-DDOBBY_HIBERNATE_MEMCR_IMPL` | ON/OFF                                            | Hibernate container using [memcr](https://github.com/LibertyGlobal/memcr) service. Defaults to OFF.                                                                                                                                                                 |\n| `-DDOBBY_HIBERNATE_MEMCR_PARAMS_ENABLED` | ON/OFF                                  | Enable support for hibernate parameters in [memcr](https://github.com/LibertyGlobal/memcr) service. Defaults to OFF.                                                                                                                                                |\n\n#### Enable/Disable Plugins\nIn addition to all the above, each RDK plugin has a setting for enabling it for builds. The `Logging`, `Networking`, `IPC`, `Storage` and `Minidump` plugins are enabled by default.\n\nUse `-DPLUGIN_[PLUGINNAME]=[ON|OFF]` to enable or disable plugins for your build.\n\n# Development\nIf you with to develop Dobby further, detailed instructions on setting up a development environment can be found in the `develop` directory in this repo, including a Vagrant VM with all the necessary dependencies pre-installed.\n\n# Documentation\n* A high level overview of Dobby can be found at RDKCentral [here](https://wiki.rdkcentral.com/display/ASP/Dobby)\n* Code documentation can be generated with Doxygen by running `doxygen ./Doxyfile`\n* Doxygen documentation is hosted here: https://rdkcentral.github.io/Dobby/\n\n# Usage\n## DobbyDaemon\nThis is the main component of Dobby. This daemon is responsible for managing, controlling and creating containers. The daemon runs in the background and communicates over dbus. It connects on a few dbus addresses - one for admin, one for debugging and the other for Dobby commands.\n\nDobbyDaemon can be started as a systemd service at system boot (the systemd service file can be found at `daemon/process/dobby.service`) or run manually on the command line by running:\n\n```\nDobbyDaemon --nofork\n```\n\nAdditional `-v` flags can be passed to the daemon to increase it's log verbosity for troubleshooting as needed\n\n```\nUsage: DobbyDaemon \u003coption(s)\u003e\n  Daemon that starts / stops / manages containers.\n\n  -h, --help                    Print this help and exit\n  -v, --verbose                 Increase the log level\n  -V, --version                 Display this program's version number\n\n  -f, --settings-file=PATH      Path to a JSON dobby settings file [/etc/dobby.json]\n  -a, --dbus-address=ADDRESS    The dbus address to put the admin service on [system bus]\n  -p, --priority=PRIORITY       Sets the SCHED_RR priority of the daemon [RR,12]\n  -n, --nofork                  Do not fork and daemonise the process\n  -k, --noconsole               Disable console output\n  -g, --syslog                  Send all initial logging to syslog rather than the console\n  -j, --journald                Enables logging to journald\n\n  Besides the above options the daemon checks for the follow environment variables\n\n  AI_WORKSPACE_PATH=\u003cPATH\u003e      The path to tmpfs dir to use as workspace\n  AI_PERSISTENT_PATH=\u003cPATH\u003e     The path to dir that is persistent across boots\n  AI_PLATFORM_IDENT=\u003cIDENT\u003e     The 4 characters than make up the STB platform id\n```\n\n## DobbyBundleGenerator\nThis is a command-line wrapper around the `DobbyBundleGen` library, and allows Dobby spec JSON files to be converted to extended OCI bundles (aka Bundle*'s) with RDK plugin sections. It does not require the DobbyDaemon to be running, so can be run on or off-box.\n\n```\nUsage: DobbyBundleGenerator \u003coption(s)\u003e\n  Tool to convert Dobby JSON spec to OCI bundle without needing a running Dobby Daemon\n\n  -h, --help                    Print this help and exit\n  -v, --verbose                 Increase the log level\n\n  -s, --settings=PATH           Path to Dobby Settings file for STB\n  -i, --inputpath=PATH          Path to Dobby JSON Spec for container\n  -o, --outputDirectory=PATH    Where to save the generated OCI bundle\n```\n\n## DobbyTool\nThis is a simple command line tool that is used for debugging purporses. It connects to the Dobby daemon over dbus and allows for debugging and testing containers.\n\n```\nvagrant@dobby-vagrant:~$ DobbyTool help\nquit              quit\nhelp              help [command]\nshutdown          shutdown\nstart             start [options...] \u003cid\u003e \u003cbundlepath\u003e [command]\nstop              stop \u003cid\u003e [options...]\npause             pause \u003cid\u003e\nresume            resume \u003cid\u003e\nhibernate         hibernate [options...] \u003cid\u003e\nwakeup            wakeup \u003cid\u003e\nmount             mount \u003cid\u003e \u003csource\u003e \u003cdestination\u003e \u003cmountFlags\u003e \u003cmountData\u003e\nunmount           unmount \u003cid\u003e \u003csource\u003e\nexec              exec [options...] \u003cid\u003e \u003ccommand\u003e\nlist              list\ninfo              info \u003cid\u003e\nwait              wait \u003cid\u003e \u003cstate\u003e\nset-log-level     set-log-level \u003clevel\u003e\nset-dbus          set-dbus \u003cprivate\u003e|\u003cpublic\u003e \u003caddress\u003e\n```\nFor more information about a command, run `DobbyTool help [command]`. For example:\n```\n$ DobbyTool help start\nstart             start [options...] \u003cid\u003e \u003cspecfile/bundlepath\u003e [command]\n\nStarts a container using the given spec file or bundle path. Can optionally specify the command to run inside the container. Any arguments after command are treated as arguments to the command.\n```\n\n## DobbyPluginLauncher\nThis is designed to be run from the OCI runtime to execute Dobby RDK plugins. It loads plugins from the `/usr/lib/plugins/dobby` directory (configurable at build-time), and runs the appropriate methods based on the specified hook and plugin data.\n\n```\nUsage: DobbyPluginLauncher \u003coption(s)\u003e\n  Tool to run Dobby plugins loaded from /usr/lib/plugins/dobby\n\n  -H, --help                    Print this help and exit\n  -v, --verbose                 Increase the log level\n\n  -h, --hook                    Specify the hook to run\n  -c, --config=PATH             Path to container OCI config\n```\n\nTo use Dobby RDK plugins in a container launched via `DobbyDaemon`, the OCI bundle config should have `ociVersion` set to `1.0.2-dobby` and an `rdkPlugins` object with plugins present. `DobbyDaemon` will set up Dobby and OCI hooks to execute the plugins' hookpoints with `DobbyPluginLauncher`.\n\nAn example of the `rdkPlugins` object's syntax with the `networking` plugin:\n\n```javascript\n{\n   \"rdkPlugins\":{\n      \"networking\":{        // plugin name\n         \"required\":true,   // whether to throw an error if the plugin is missing, or just flag a warning and carry on\n         \"data\":{           // data to be passed to the plugin - can contain any valid JSON, depending on the plugin\n            \"type\":\"nat\"    // each plugin has its own accepted data structure\n         }\n      }\n   }\n}\n```\n\n## DobbyInit\nThis tool is a simple 'init' process for containers. Instead of relying on runc to manage the lifecycle of processes within the container, DobbyInit is responsible for reaping adopted child processes and forwarding signals to child processes.\nThe motivation for this tool is described here: https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem. It is installed in `/usr/libexec`.\n\n```\nUsage: DobbyInit \u003cprocess-to-run\u003e \u003carg1\u003e \u003carg2\u003e ... \u003cargN\u003e\n```\n\n---\n# Copyright and license\n\nIf not stated otherwise in this file or this component's LICENSE file the following copyright and licenses apply:\n\nCopyright 2020 Sky UK\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n\n## Note\nDobby makes use of the [libocispec](https://github.com/containers/libocispec) library to parse and generate OCI configurations from JSON schemas. This is a code-generator and used only at build-time. `libocispec` is GPLv3 licensed but includes a specific exception for this purpose.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdkcentral%2Fdobby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frdkcentral%2Fdobby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frdkcentral%2Fdobby/lists"}