1 [[!meta title="System administrators"]]
9 The Tails system administrators set up and maintain the infrastructure
10 that supports the development and operations of Tails. We aim at
11 making the life of Tails contributors easier, and to improve the quality of
14 <a id="principles"></a>
18 ## Infrastructure as code
20 We want to treat system administration like a (free) software
23 * We want to enable people to participate without needing an account
25 * We want to review the changes that are applied to our systems.
26 * We want to be able to easily reproduce our systems via
28 * We want to share knowledge with other people.
30 This is why we try to publish as much as possible of our systems
31 configuration, and to manage our whole infrastructure with
32 configuration management tools. That is, without needing to log
37 We use Free Software, as defined by the [Debian Free Software
38 Guidelines](https://www.debian.org/social_contract#guidelines).
39 The firmware our systems might need are the only exception to
42 ## Relationships with upstream
44 The [[principles used by the broader Tails
45 project|contribute/relationship_with_upstream]] also apply for
46 system administration.
52 The main tools used to manage the Tails infrastructure are:
54 * [Debian](https://www.debian.org/) GNU/Linux; in the vast majority of
55 cases, we run the current stable release
56 * [Puppet](http://projects.puppetlabs.com/projects/puppet),
57 a configuration management system
58 * [Git](http://git-scm.com/) to host and deploy configuration,
59 including our [[Puppet modules|contribute/git#puppet]]
61 <a id="communication"></a>
65 A few people have write access to the puppetmasters, and can log into
67 They read the <tails-sysadmins@boum.org> encrypted mailing-list.
69 We use Redmine tickets for public discussion and tasks management:
71 * [tasks requiring *Sysadmin*
72 work](https://labs.riseup.net/code/projects/tails/issues?query_id=113)
73 * [tasks belonging to the *Infrastructure*
74 category](https://labs.riseup.net/code/projects/tails/issues?query_id=140)
82 * purpose: host Tails-specific Debian packages
83 * [[documentation|contribute/APT repository]]
84 * access: anyone can read, Tails core developers can write
85 * tools: [[!debpts reprepro]]
86 * configuration: `tails::reprepro` class in [[!tails_gitweb_repo puppet-tails]]
90 * purpose: handle the Tails Bitcoin wallet
91 * access: Tails core developers only
92 * tools: [[!debpts bitcoind]]
93 * configuration: `bitcoind` class in [[!tails_gitweb_repo puppet-bitcoind]]
97 * purpose: seed the new ISO image when preparing a release
98 * [[documentation|contribute/release_process]]
99 * access: anyone can read, Tails core developers can write
100 * tools: [[!debpts transmission-daemon]]
101 * configuration: done by hand ([[!tails_ticket 6926]])
103 ## Debian package builder
105 * purpose: build Tails-specific Debian packages
106 * [[documentation|contribute/Debian_package_builder]]
107 * access: Tails core developers only
108 * tools: [[!debpts debomatic desc="Deb-o-Matic"]]
109 * configuration: hard-coded in the manifest ([[!tails_ticket 6920]])
113 * purpose: host Git repositories used by the puppetmaster and other
114 services; mostly useless for humans
115 * access: Tails core developers only
116 * tools: [[!debpts gitolite]]
117 * configuration: `tails::gitolite` class in [[!tails_gitweb_repo
122 * purpose: continuous integration, e.g. build Tails ISO images from
123 source and run test suites
124 * access: only Tails core developers can see the Jenkins web interface
125 ([[!tails_ticket 6270]]); anyone can [[download the built
126 products|contribute/how/testing]]
127 * tools: [[!debpts jenkins desc="Jenkins"]], [[!debpts jenkins-job-builder]]
130 * `jenkins` class in [[!tails_gitweb_repo puppet-jenkins]]
131 * `tails::jenkins::master` class in [[!tails_gitweb_repo puppet-tails]]
132 * a few Jenkins plugins installed with `jenkins::plugin`
133 * YAML jobs configuration lives in a dedicated Git repository;
134 jenkins-job-builder uses it to configure Jenkins
136 * `tails::builder` class in [[!tails_gitweb_repo puppet-tails]]
137 * some configuration in the manifest ([[!tails_ticket 7106]])
139 * some configuration in the manifest ([[!tails_ticket 7107]])
143 * purpose: provide content to the public rsync server, from which all
144 HTTP mirrors in turn pull
145 * access: read-only for those who need it, read-write for Tails core
147 * tools: [[!debpts rsync]]
148 * configuration: `tails::rsync` in [[!tails_gitweb_repo puppet-tails]]
152 * purpose: provide a Tor bridge that Tails contributors can easily use
154 * access: anyone who gets it from
155 [BridgeDB](https://bridges.torproject.org/)
156 * tools: [[!debpts tor]], [[!debpts obfsproxy]]
158 - `tails::apt::repository::torproject` in
159 [[!tails_gitweb_repo puppet-tails]]
160 - `tor::daemon::relay` in [[!tails_gitweb_repo puppet-tor]]
164 * purpose: serve web content for any other service that need it
165 * access: depending on the service
166 * tools: [[!debpts nginx]]
168 - `nginx` class in [[!tails_gitweb_repo puppet-nginx]]
169 - hard-coded manifest snippets and files on the puppetmaster
170 ([[!tails_ticket 6938]])
174 * purpose: forward bug reports sent with WhisperBack to <tails-bugs@boum.org>
175 * access: public; WhisperBack (and hence, any bug reporter) uses it
176 * tools: [[!debpts postfix desc="Postfix"]]
177 * configuration: `tails::whisperback::relay` in [[!tails_gitweb_repo puppet-tails]]