# dcos **Repository Path**: mirrors_mesos/dcos ## Basic Information - **Project Name**: dcos - **Description**: DC/OS Build and Release tools - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-09 - **Last Updated**: 2026-05-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DC/OS - The Datacenter Operating System The easiest way to run microservices, big data, and containers in production. # What is DC/OS? Like traditional operating systems, DC/OS is system software that manages computer hardware and software resources and provides common services for computer programs. Unlike traditional operating systems, DC/OS spans multiple machines within a network, aggregating their resources to maximize utilization by distributed applications. To learn more, see the [DC/OS Overview](https://dcos.io/docs/latest/overview/). # How Do I...? - Learn More - - Find the Docs - - Install - - Get Started - - Get Help - - Join the Discussion - - Report an Issue - - Contribute - # What's In This Repo? DC/OS itself is composed of many individual components precisely configured to work together in concert. This repo contains the release and package building tools necessary to produce installers for various on-premises and cloud platforms. | Directory | Contents | | --------- | -------- | | *docker* | Locally defined docker containers packages are built in | *docs* | Documentation | *dcos_installer* | Backend for Web, SSH, and some bits of the Advanced installer. Code is being cleaned up | *gen* | Python library for rendering yaml config files for various platforms into packages, with utilities to do things like make "late binding" config set by CloudFormation | *gen/build_deploy* | Code to take a build and transform it into a particular platform deployment tool (Bash / command line, AWS, Azure, etc.) | *packages* | Packages which make up DC/OS (Mesos, Marathon, AdminRouter, etc). These packages are built by pkgpanda, and combined into a "bootstrap" tarball for deployment. | *pkgpanda* | DC/OS baseline/host package management system. Tools for building, deploying, upgrading, and bundling packages together which live on the root filesystem of a machine / underneath Mesos. | *pytest* | Misc. tests. Should be moved to live next to the appropriate code | *release* | Release tools for DC/OS. (Building releases, building installers for releases, promoting between channels) | *ssh* | AsyncIO based parallel ssh library used by the installer | *test_util* | various scripts, utilities to help with integration testing All code in this repository is Python 3 # Doing a local build ## Dependencies 1. Linux distribution: - Docker doesn't have all the features needed on OS X or Windows - `tar` needs to be GNU tar for the set of flags used 1. [tox](https://tox.readthedocs.org/en/latest/) 1. git 1.8.5+ 1. Docker - [Install Instructions for various distributions](https://docs.docker.com/engine/installation/). Docker needs to be configured so your user can run docker containers. The command `docker run alpine /bin/echo 'Hello, World!'` when run at a new terminal as your user should just print `"Hello, World!"`. If it says something like "Unable to find image 'alpine:latest' locally" then re-run and the message should go away. 1. Python 3.5 - Arch Linux: `sudo pacman -S python` - Fedora 23 Workstation: Already installed by default / no steps - Ubuntu 16.04 LTS: - [pyenv-installer](https://github.com/yyuu/pyenv-installer) - Python dependencies: `sudo apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils liblzma-dev` - Install Python 3.5.2: `pyenv install 3.5.2` - Create DC/OS virtualenv: `pyenv virtualenv 3.5.2 dcos` - Activate environment: `pyenv activate dcos` 1. Over 10GB of free disk space 1. _Optional_ pxz (speeds up package and bootstrap compression) - ArchLinux: [pxz-git in the AUR](https://aur.archlinux.org/packages/pxz-git). The pxz package corrupts tarballs fairly frequently. - Fedora 23: `sudo dnf install pxz` ## Running local code quality tests ``` tox ``` [Tox](https://tox.readthedocs.io/en/latest/) is used to run the codebase unit tests, as well as coding standard checks. The config is in `tox.ini`. ## Running a DC/OS Build ``` ./build_local.sh ``` That will run a simple local build, and output the resulting DC/OS installers to $HOME/dcos-artifacts. You can run the created `dcos_generate_config.sh like so: NOTE: Building a release from scratch the first time on a modern dev machine (4 cores / 8 hyper threads, SSD, reasonable interent bandwidth) takes about 1 hour. ``` $ $HOME/dcos-artifacts/testing/`whoami`/dcos_generate_config.sh ``` ## What's happening under the covers If you look inside of the bash script `build_local.sh` there are the commands with descriptions of each. The general flow is to: 1. Check the environment is reasonable 2. Write a `release` tool configuration if one doesn't exist 3. Setup a python virtualenv where we can install the DC/OS python tools to in order to run them 4. Install the DC/OS python tools to the virtualenv 5. Build the release using the `release` tool These steps can all be done by hand and customized / tweaked like standard python projects. You can hand create a virtualenvironment, and then do an editable pip install (`pip install -e`) to have a "live" working environment (as you change code you can run the tool and see the results). ## Release Tool Configuration This release tool always loads the config in `dcos-release.config.yaml` in the current directory. The config is [YAML](http://yaml.org/). Inside it has two main sections. `storage` which contains a dictionary of different storage providers which the built artifacts should be sent to, and `options` which sets general DC/OS build configuration options. Config values can either be specified directly, or you may use $ prefixed environment variables (the env variable must set the whole value). ### Storage Providers All the available storage providers are in [release/storage](./release/storage/). The configuration is a dictionary of a reference name for the storage provider (local, aws, my_azure), to the configuration. Each storage provider (ex: aws.py) is an available kind prefix. The dictionary `factories` defines the suffix for a particular kind. For instance `kind: aws_s3` would map to the S3StorageProvider. The configuration options for a storage provider are the storage provider's constructor parameters. Sample config storage that will save to my home directory (/home/cmaloney): ```yaml storage: local: kind: local_path path: /home/cmaloney/dcos-artifacts ``` Sample config that will store to a local archive path as wll as AWS S3. Environment variables AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY would need to be set to use the config (And something like a CI system could provide them so they don't have to be committed to a code repository). ```yaml storage: aws: kind: aws_s3 bucket: downloads.dcos.io object_prefix: dcos download_url: https://downloads.dcos.io/dcos/ access_key_id: $AWS_ACCESS_KEY_ID secret_access_key: $AWS_SECRET_ACCESS_KEY region_name: us-west-2 local: kind: local_path path: /mnt/big_artifact_store/dcos/ ``` # Status Check Before a pull request can be merged into master, the following checks are required: - teamcity/create-release-pr: in [the CI system](https://teamcity.mesosphere.io/project.html?projectId=DcosIo_Dcos&tab=projectOverview), [build_teamcity](https://github.com/dcos/dcos/blob/master/build_teamcity) is triggered and developers should use [build_local.sh](https://github.com/dcos/dcos/blob/master/build_local.sh) (see above) - teamcity/code-quality: simply run `tox` in the top-level dir to run all syntax checks as well as pytest (unit-tests). See [tox.ini](https://github.com/dcos/dcos/blob/master/tox.ini) for more details - integration-test/*: runs [integration_test.py](https://github.com/dcos/dcos/blob/master/test_util/integration_test.py) in the network of a DC/OS cluster - /vagrant-bash: Tests the on-prem bash provider by using [dcos-vagrant](https://github.com/dcos/dcos-vagrant). Invoke this test through [run-all](https://github.com/dcos/dcos/blob/master/test_util/run-all) - /deploy-vpc-cli: runs [ccm-deploy-test](https://github.com/dcos/dcos/blob/master/test_util/test_installer_ccm.py) with USE_INSTALLER_API=false. A Virtual Private Cloud of centos nodes is spun up by CCM (Mesosphere's Cloud Cluster Manager) and the installer (dcos_generate_config.sh) is used via the CLI options to deploy DC/OS. Finally, the same integration_test.py is run - /deploy-vpc-api: the same as /deploy-vpc-cli (see above) except uses USE_INSTALLER_API=true, which causes the installer to be started with the `--web` option and then controlled entirely by the HTTP API # TODO Lots of docs are still being written. If you have immediate questions please ask the [DC/OS Community](https://dcos.io/community/). Someone else probably has exactly the same question. - Add getting started on common distros / dependencies - Add overview of what is in here, how it works - Add general theory of stuff that goes in here. - PR (guidelines, testing) - How to make different sorts of common changes