mirror of
https://github.com/f-droid/fdroidserver.git
synced 2025-09-13 22:42:29 +03:00
Build server docs (partial)
This commit is contained in:
parent
68f8ed2250
commit
2d91c30806
3 changed files with 155 additions and 20 deletions
|
@ -1,16 +0,0 @@
|
||||||
|
|
||||||
Integrating the build server setup into the main scripts is a work in progress. Some things may
|
|
||||||
not work properly yet. Talk to CiaranG if you're trying to use this and have problems.
|
|
||||||
|
|
||||||
Setting up a build server:
|
|
||||||
|
|
||||||
1. Install VirtualBox, vagrant and vagrant-snap
|
|
||||||
2. Create (or get - ask CiaranG, or wait until I replace this with a download link!) a standard
|
|
||||||
Debian Squeeze vagrant-compatible base box called 'debian6-32'
|
|
||||||
3. Run makebuildserver.sh. This will take a long time. The end result is a new base box called
|
|
||||||
'buildserver'.
|
|
||||||
|
|
||||||
You should now be able to use the --server option on build.py and builds will
|
|
||||||
take place in the clean, secure, isolated environment of a fresh virtual
|
|
||||||
machine for each app built.
|
|
||||||
|
|
|
@ -63,6 +63,11 @@ Copyright (C) 2011 Henrik Tunedal, Michael Haas, John Sullivan
|
||||||
<li><a href="#Disabled">6.13 Disabled</a>
|
<li><a href="#Disabled">6.13 Disabled</a>
|
||||||
<li><a href="#Requires-Root">6.14 Requires Root</a>
|
<li><a href="#Requires-Root">6.14 Requires Root</a>
|
||||||
</li></ul>
|
</li></ul>
|
||||||
|
<li><a name="toc_Build-Server" href="#Build-Server">7 Build Server</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#Build-Server">7.1 Rationale</a>
|
||||||
|
<li><a href="#Build-Server">7.2 Setting up a build server</a>
|
||||||
|
</li></ul>
|
||||||
<li><a name="toc_GNU-Free-Documentation-License" href="#GNU-Free-Documentation-License">Appendix A GNU Free Documentation License</a>
|
<li><a name="toc_GNU-Free-Documentation-License" href="#GNU-Free-Documentation-License">Appendix A GNU Free Documentation License</a>
|
||||||
<li><a name="toc_Index" href="#Index">Index</a>
|
<li><a name="toc_Index" href="#Index">Index</a>
|
||||||
</li></ul>
|
</li></ul>
|
||||||
|
@ -101,8 +106,9 @@ Free Documentation License".
|
||||||
<li><a accesskey="4" href="#Simple-Binary-Repository">Simple Binary Repository</a>
|
<li><a accesskey="4" href="#Simple-Binary-Repository">Simple Binary Repository</a>
|
||||||
<li><a accesskey="5" href="#Building-Applications">Building Applications</a>
|
<li><a accesskey="5" href="#Building-Applications">Building Applications</a>
|
||||||
<li><a accesskey="6" href="#Metadata">Metadata</a>
|
<li><a accesskey="6" href="#Metadata">Metadata</a>
|
||||||
<li><a accesskey="7" href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>
|
<li><a accesskey="7" href="#Build-Server">Build Server</a>
|
||||||
<li><a accesskey="8" href="#Index">Index</a>
|
<li><a accesskey="8" href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>
|
||||||
|
<li><a accesskey="9" href="#Index">Index</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="node">
|
<div class="node">
|
||||||
|
@ -339,7 +345,7 @@ where normally it would be completely ignored.
|
||||||
<div class="node">
|
<div class="node">
|
||||||
<a name="Metadata"></a>
|
<a name="Metadata"></a>
|
||||||
<p><hr>
|
<p><hr>
|
||||||
Next: <a rel="next" accesskey="n" href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>,
|
Next: <a rel="next" accesskey="n" href="#Build-Server">Build Server</a>,
|
||||||
Previous: <a rel="previous" accesskey="p" href="#Building-Applications">Building Applications</a>,
|
Previous: <a rel="previous" accesskey="p" href="#Building-Applications">Building Applications</a>,
|
||||||
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
||||||
|
|
||||||
|
@ -783,11 +789,83 @@ Set this optional field to "Yes" if the application requires root
|
||||||
privileges to be usable. This lets the client filter it out if the
|
privileges to be usable. This lets the client filter it out if the
|
||||||
user so desires.
|
user so desires.
|
||||||
|
|
||||||
|
<div class="node">
|
||||||
|
<a name="Build-Server"></a>
|
||||||
|
<p><hr>
|
||||||
|
Next: <a rel="next" accesskey="n" href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>,
|
||||||
|
Previous: <a rel="previous" accesskey="p" href="#Metadata">Metadata</a>,
|
||||||
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 class="chapter">7 Build Server</h2>
|
||||||
|
|
||||||
|
<p>The Build Server system isolates the builds for each package within a clean,
|
||||||
|
isolated and secure throwaway virtual machine environment.
|
||||||
|
|
||||||
|
<h3 class="section">7.1 Rationale</h3>
|
||||||
|
|
||||||
|
<p>Building applications in this manner on a large scale, especially with the
|
||||||
|
involvement of automated and/or unattended processes, could be considered
|
||||||
|
a dangerous pastime from a security perspective. This is even more the case
|
||||||
|
when the products of the build are also distributed widely and in a
|
||||||
|
semi-automated ("you have updates available") fashion.
|
||||||
|
|
||||||
|
<p>Assume that an upstream source repository is compromised. A small selection
|
||||||
|
of things that an attacker could do in such a situation:
|
||||||
|
|
||||||
|
<ol type=1 start=1>
|
||||||
|
<li>Use custom ant build steps to execute virtually anything as the user doing
|
||||||
|
the build.
|
||||||
|
<li>Access the keystore.
|
||||||
|
<li>Modify the built apk files or source tarballs for other applications in the
|
||||||
|
repository.
|
||||||
|
<li>Modify the metadata (which includes build scripts, which again, also includes
|
||||||
|
the ability to execute anything) for other applications in the repository.
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>Through complete isolation, the repurcussions are at least limited to the
|
||||||
|
application in question.
|
||||||
|
|
||||||
|
<p>Aside from security issues, there are some applications which have strange
|
||||||
|
requirements such as custom versions of the NDK. It would be impractical (or
|
||||||
|
at least extremely messy) to start modifying and restoring the SDK on a
|
||||||
|
multi-purpose system, but within the confines of a throwaway single-use
|
||||||
|
virtual machine, anything is possible.
|
||||||
|
|
||||||
|
<h3 class="section">7.2 Setting up a build server</h3>
|
||||||
|
|
||||||
|
<p>Integrating the build server setup into the main scripts is a work in progress.
|
||||||
|
Some things may not work properly yet. Talk to CiaranG if you're trying to use
|
||||||
|
this and have problems.
|
||||||
|
|
||||||
|
<p>In addition to the basic setup sets previously described, you will also need
|
||||||
|
a Vagrant-compatible Debian Squeeze base box called 'debian6-32'. You can
|
||||||
|
create one of these for yourself from standard Debian installation media, as
|
||||||
|
the specification for what's required to be Vagrant-compatible is very well
|
||||||
|
defined. This is the sensible and secure way to do it, since you know what's
|
||||||
|
in it. If you insist on taking a shortcut, ask CiaranG for his on the forum
|
||||||
|
or in IRC.
|
||||||
|
|
||||||
|
<p>With this base box installed, you can then do:
|
||||||
|
|
||||||
|
<pre class="example"> ./makebuildserver.sh
|
||||||
|
</pre>
|
||||||
|
<p>This will take a long time - most of it spent installing the necessary parts
|
||||||
|
of the Android SDK for all the various platforms. Luckily you only need to
|
||||||
|
do it occasionally.
|
||||||
|
|
||||||
|
<p>Once it's complete you'll have a new base box called 'buildserver' which is
|
||||||
|
what's used for the actual builds. You can then build packages as normal,
|
||||||
|
but with the addition of the <code>--server</code> flag to <code>build.py</code> to
|
||||||
|
instruct it to do all the hard work within the virtual machine, which is
|
||||||
|
reset to a completely clean state for every package built.
|
||||||
|
|
||||||
<div class="node">
|
<div class="node">
|
||||||
<a name="GNU-Free-Documentation-License"></a>
|
<a name="GNU-Free-Documentation-License"></a>
|
||||||
<p><hr>
|
<p><hr>
|
||||||
Next: <a rel="next" accesskey="n" href="#Index">Index</a>,
|
Next: <a rel="next" accesskey="n" href="#Index">Index</a>,
|
||||||
Previous: <a rel="previous" accesskey="p" href="#Metadata">Metadata</a>,
|
Previous: <a rel="previous" accesskey="p" href="#Build-Server">Build Server</a>,
|
||||||
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
Up: <a rel="up" accesskey="u" href="#Top">Top</a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -45,6 +45,7 @@ Free Documentation License".
|
||||||
* Simple Binary Repository::
|
* Simple Binary Repository::
|
||||||
* Building Applications::
|
* Building Applications::
|
||||||
* Metadata::
|
* Metadata::
|
||||||
|
* Build Server::
|
||||||
* GNU Free Documentation License::
|
* GNU Free Documentation License::
|
||||||
* Index::
|
* Index::
|
||||||
@end menu
|
@end menu
|
||||||
|
@ -673,6 +674,78 @@ Set this optional field to "Yes" if the application requires root
|
||||||
privileges to be usable. This lets the client filter it out if the
|
privileges to be usable. This lets the client filter it out if the
|
||||||
user so desires.
|
user so desires.
|
||||||
|
|
||||||
|
|
||||||
|
@node Build Server
|
||||||
|
@chapter Build Server
|
||||||
|
|
||||||
|
The Build Server system isolates the builds for each package within a clean,
|
||||||
|
isolated and secure throwaway virtual machine environment.
|
||||||
|
|
||||||
|
@section Rationale
|
||||||
|
|
||||||
|
Building applications in this manner on a large scale, especially with the
|
||||||
|
involvement of automated and/or unattended processes, could be considered
|
||||||
|
a dangerous pastime from a security perspective. This is even more the case
|
||||||
|
when the products of the build are also distributed widely and in a
|
||||||
|
semi-automated ("you have updates available") fashion.
|
||||||
|
|
||||||
|
Assume that an upstream source repository is compromised. A small selection
|
||||||
|
of things that an attacker could do in such a situation:
|
||||||
|
|
||||||
|
@enumerate
|
||||||
|
@item
|
||||||
|
Use custom ant build steps to execute virtually anything as the user doing
|
||||||
|
the build.
|
||||||
|
@item
|
||||||
|
Access the keystore.
|
||||||
|
@item
|
||||||
|
Modify the built apk files or source tarballs for other applications in the
|
||||||
|
repository.
|
||||||
|
@item
|
||||||
|
Modify the metadata (which includes build scripts, which again, also includes
|
||||||
|
the ability to execute anything) for other applications in the repository.
|
||||||
|
@end enumerate
|
||||||
|
|
||||||
|
Through complete isolation, the repurcussions are at least limited to the
|
||||||
|
application in question.
|
||||||
|
|
||||||
|
Aside from security issues, there are some applications which have strange
|
||||||
|
requirements such as custom versions of the NDK. It would be impractical (or
|
||||||
|
at least extremely messy) to start modifying and restoring the SDK on a
|
||||||
|
multi-purpose system, but within the confines of a throwaway single-use
|
||||||
|
virtual machine, anything is possible.
|
||||||
|
|
||||||
|
@section Setting up a build server
|
||||||
|
|
||||||
|
Integrating the build server setup into the main scripts is a work in progress.
|
||||||
|
Some things may not work properly yet. Talk to CiaranG if you're trying to use
|
||||||
|
this and have problems.
|
||||||
|
|
||||||
|
In addition to the basic setup sets previously described, you will also need
|
||||||
|
a Vagrant-compatible Debian Squeeze base box called 'debian6-32'. You can
|
||||||
|
create one of these for yourself from standard Debian installation media, as
|
||||||
|
the specification for what's required to be Vagrant-compatible is very well
|
||||||
|
defined. This is the sensible and secure way to do it, since you know what's
|
||||||
|
in it. If you insist on taking a shortcut, ask CiaranG for his on the forum
|
||||||
|
or in IRC.
|
||||||
|
|
||||||
|
With this base box installed, you can then do:
|
||||||
|
|
||||||
|
@example
|
||||||
|
./makebuildserver.sh
|
||||||
|
@end example
|
||||||
|
|
||||||
|
This will take a long time - most of it spent installing the necessary parts
|
||||||
|
of the Android SDK for all the various platforms. Luckily you only need to
|
||||||
|
do it occasionally.
|
||||||
|
|
||||||
|
Once it's complete you'll have a new base box called 'buildserver' which is
|
||||||
|
what's used for the actual builds. You can then build packages as normal,
|
||||||
|
but with the addition of the @code{--server} flag to @code{build.py} to
|
||||||
|
instruct it to do all the hard work within the virtual machine, which is
|
||||||
|
reset to a completely clean state for every package built.
|
||||||
|
|
||||||
|
|
||||||
@node GNU Free Documentation License
|
@node GNU Free Documentation License
|
||||||
@appendix GNU Free Documentation License
|
@appendix GNU Free Documentation License
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue