This is the root of the DuckCorp Admin Team materials used to install, configure and manage services.
DuckCorp is commited to Free Software, thus all materials are published under the GPL v3 License (see details of the license in the
All sensitive materials are encrypted, read the
Dealing with Secrets chapter to know more about this.
Configuration Management & Deployment
We use Ansible to help us automate as much as possible; you'll find more about it in the
Still, many things are handled manually, this is WIP.
Our TLS certificates are managed using mkcert. The
mkcert.conf file holds the DuckCorp-specific configuration, and
services contains the specific service names not in
/etc/services. The keys configuration and resulting certificates are stored in the
With this layout,
mkcert can be run in-place (at the top-level of this repository), automagically finding its configuration and work directories.
scripts directory are the following scripts:
adm_check_*: this series of scripts check various resources hosted by DuckCorp against the outside world to see if there is any misconfiguration or if the hosting became obsolete (without the user telling us, which happen very often…)
adm_publish_tlsa: compute TLSA DNS RR for DNSSEC-enabled DNS zones based on the available TLS certificates
check_certs_expiration: warn when certificates are nearly expired (or already expired)
They are meant to be run in-place from the top of this repository. The
lib subdirectory contains code factorized between the scripts.
The admin-oriented documentation can be found alongside the other materials, but for some topics we might write a dedicated explanation and store it in the
For Admin Team Members
You need to set the ANSIBLE_VAULT_PASSWORD_FILE environment variable with the path to the password file.
First, clone [the repository](ssh://vcs-git.duckcorp.org/srv/vcs/git/duckcorp/duckcorp-infra.git). You should probably have a look at the
Requirements in the underlying directories too.
- Always create a merge commit : $ git config --local merge.ff false
- Allow fast-forward merges when using pull : $ git config --local pull.ff only
- All commits must be GPG signed : $ git config --local commit.gpgSign true
Dealing with Secrets
We use Ansible Vault to hide some parameters like service credentials, user personal information or emails to avoid SPAM.
To make it easy git attributes are defined to make diff-ing and merging easy.
Your configuration needs to be enhanced to tel git how to handle these files. This is very easy, look at this URL for more info:
When merging a branch, use
--verify-signatures switch. If this fails, then DO NOT MERGE!!!
When adding submodule, please use the HTTPs URL to allow contributors to clone. Also use
--name to set the submodule name or the path is taken by default. Then, you can ask git to automatically rewrite the URL to the right form with this command:
git config --global url.ssh://vcs-git.duckcorp.org/srv/vcs/git/.insteadOf https://vcs-git.duckcorp.org/
For External Contributor
You're welcome to contribute ideas, report problems, send patches… using our Ticket Tracker (in the
duckcorp-infra @ master
|ansible||1a13ada2||23 days||Marc Dequènes||add Elwing L2TP config|
|doc||02d7c212||3 months||Marc Dequènes||Elwing: switch to new ISP|
|pki||01ba944e||4 months||Marc Dequènes||mail: add smtp.duckcorp.org to mta/Toushirou ce...|
|scripts||0e7c665f||6 months||Marc Dequènes||scripts: fix LDAP init improve Ansible output ...|
|.gitignore||209 Bytes||43a99ed7||9 months||Marc Dequènes (Duck)||ensute Ansible retry files are not included by ...|
|.gitmodules||2.25 KB||5cab3616||4 months||Marc Dequènes||monitoring: dc-monitoring role has moved in its...|
|COPYING||34.3 KB||5d76f2d8||about 1 year||Marc Dequènes||First public version|
|README.md||3.85 KB||6f55d8c4||5 months||Marc Dequènes||document a better way to access DC's VCS as a c...|
|mkcert.conf||154 Bytes||5d76f2d8||about 1 year||Marc Dequènes||First public version|
|services||347 Bytes||e9b7d9a0||6 months||Marc Dequènes||removed obsolete im_gateway service #2|
Also available in: Atom