<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Managing the Bazaar PPA — Bazaar v2.2.4 documentation</title> <link rel="stylesheet" href="_static/default.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', VERSION: '2.2.4', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <link rel="shortcut icon" href="_static/bzr.ico"/> <link rel="top" title="Bazaar v2.2.4 documentation" href="index.html" /> <link rel="next" title="Bazaar Windows EC2 Server" href="ec2.html" /> <link rel="prev" title="Releasing Bazaar" href="releasing.html" /> <link rel="stylesheet" href="_static/bzr-doc.css" type="text/css" /> </head> <body> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="ec2.html" title="Bazaar Windows EC2 Server" accesskey="N">next</a></li> <li class="right" > <a href="releasing.html" title="Releasing Bazaar" accesskey="P">previous</a> |</li> <li><a href="http://bazaar.canonical.com/"> <img src="_static/bzr icon 16.png" /> Home</a> | </li> <a href="http://doc.bazaar.canonical.com/en/">Documentation</a> | </li> <li><a href="index.html">Developer Document Catalog (2.2.4)</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="managing-the-bazaar-ppa"> <h1>Managing the Bazaar PPA<a class="headerlink" href="#managing-the-bazaar-ppa" title="Permalink to this headline">¶</a></h1> <p>See also: <a class="reference external" href="index.html">Bazaar Developer Document Catalog</a>.</p> <div class="section" id="background"> <h2>Background<a class="headerlink" href="#background" title="Permalink to this headline">¶</a></h2> <p>We build Ubuntu <tt class="docutils literal"><span class="pre">.deb</span></tt> packages for Bazaar as an important part of the release process. These packages are hosted in a few <a class="reference external" href="https://help.launchpad.net/PPAQuickStart">Personal Package Archives (PPA)</a> on Launchpad.</p> <blockquote> <div></div></blockquote> <p>As of June 2010, there are three PPAs:</p> <dl class="docutils"> <dt><<a class="reference external" href="https://launchpad.net/~bzr/+archive">https://launchpad.net/~bzr/+archive</a>></dt> <dd>Final released versions and updates.</dd> <dt><<a class="reference external" href="https://launchpad.net/~bzr-beta-ppa/+archive">https://launchpad.net/~bzr-beta-ppa/+archive</a>></dt> <dd>Beta releases.</dd> <dt><<a class="reference external" href="https://launchpad.net/~bzr-nightly-ppa/+archive">https://launchpad.net/~bzr-nightly-ppa/+archive</a>></dt> <dd>Automatic nightly builds from trunk.</dd> </dl> <p>We build packages for every supported Ubuntu release <<a class="reference external" href="https://wiki.ubuntu.com/Releases">https://wiki.ubuntu.com/Releases</a>>. Packages need no longer be updated when the release passes end-of-life because all users should have upgraded by then.</p> <p>We build a distinct package for each distrorelease. If you upload a release-specific version, you should add a suffix to the package version, e.g. <tt class="docutils literal"><span class="pre">bzr.1.3-1~bazaar1~dapper1</span></tt>.</p> <p>Dapper uses the <tt class="docutils literal"><span class="pre">python-support</span></tt> framework and later distributions use <tt class="docutils literal"><span class="pre">python-central</span></tt>. This has little effect on everyday packaging but does mean that some of the control files are quite different.</p> <p>Every package is first uploaded into the beta ppa. For final release versions it is also copied to the main PPA.</p> <p>The packaging information is kept in branches of bzr on Launchpad, named like <<a class="reference external" href="https://code.launchpad.net/~bzr/bzr/packaging-hardy">https://code.launchpad.net/~bzr/bzr/packaging-hardy</a>>. or <lp:~bzr/bzr/packaging-hardy>. These branches are intended to be used with the <tt class="docutils literal"><span class="pre">bzr-builddeb</span></tt> plugin.</p> </div> <div class="section" id="preconditions"> <h2>Preconditions<a class="headerlink" href="#preconditions" title="Permalink to this headline">¶</a></h2> <ul> <li><p class="first">You must have a Launchpad account and be a member of the teams that own these PPAs (<tt class="docutils literal"><span class="pre">~bzr</span></tt>, <tt class="docutils literal"><span class="pre">~bzr-beta-ppa</span></tt>).</p> </li> <li><p class="first">You must have a GPG key registered to your Launchpad account.</p> </li> <li><p class="first">Configure <tt class="docutils literal"><span class="pre">dput</span></tt> to upload to our PPA with this section in your <tt class="docutils literal"><span class="pre">~/.dput.cf</span></tt>:</p> <div class="highlight-python"><div class="highlight"><pre><span class="p">[</span><span class="n">bzr</span><span class="o">-</span><span class="n">beta</span><span class="o">-</span><span class="n">ppa</span><span class="p">]</span> <span class="n">fqdn</span> <span class="o">=</span> <span class="n">ppa</span><span class="o">.</span><span class="n">launchpad</span><span class="o">.</span><span class="n">net</span> <span class="n">method</span> <span class="o">=</span> <span class="n">ftp</span> <span class="n">incoming</span> <span class="o">=</span> <span class="o">~</span><span class="n">bzr</span><span class="o">-</span><span class="n">beta</span><span class="o">-</span><span class="n">ppa</span><span class="o">/</span><span class="n">ubuntu</span> <span class="n">login</span> <span class="o">=</span> <span class="n">anonymous</span> <span class="n">allow_unsigned_uploads</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">[</span><span class="n">bzr</span><span class="o">-</span><span class="n">ppa</span><span class="p">]</span> <span class="n">fqdn</span> <span class="o">=</span> <span class="n">ppa</span><span class="o">.</span><span class="n">launchpad</span><span class="o">.</span><span class="n">net</span> <span class="n">method</span> <span class="o">=</span> <span class="n">ftp</span> <span class="n">incoming</span> <span class="o">=</span> <span class="o">~</span><span class="n">bzr</span><span class="o">/</span><span class="n">ubuntu</span> <span class="n">login</span> <span class="o">=</span> <span class="n">anonymous</span> <span class="n">allow_unsigned_uploads</span> <span class="o">=</span> <span class="mi">0</span> </pre></div> </div> <p>You may also want to add these lines to prevent inadvertently attempting to upload into Ubuntu or Debian, which will give a somewhat unclear error:</p> <div class="highlight-python"><div class="highlight"><pre><span class="p">[</span><span class="n">DEFAULT</span><span class="p">]</span> <span class="n">default_host_main</span> <span class="o">=</span> <span class="n">notspecified</span> </pre></div> </div> </li> <li><p class="first">Configure <tt class="docutils literal"><span class="pre">bzr-builddeb</span></tt> to sign the package, which is required for Launchpad to build it. Put this in <tt class="docutils literal"><span class="pre">~/.bazaar/builddeb.conf</span></tt></p> <div class="highlight-python"><div class="highlight"><pre><span class="p">[</span><span class="n">BUILDDEB</span><span class="p">]</span> <span class="n">builder</span> <span class="o">=</span> <span class="n">dpkg</span><span class="o">-</span><span class="n">buildpackage</span> <span class="o">-</span><span class="n">rfakeroot</span> <span class="n">source</span><span class="o">-</span><span class="n">builder</span><span class="o">=</span> <span class="n">dpkg</span><span class="o">-</span><span class="n">buildpackage</span> <span class="o">-</span><span class="n">rfakeroot</span> <span class="o">-</span><span class="n">S</span> <span class="o">-</span><span class="n">sa</span> </pre></div> </div> </li> <li><p class="first">You need a Ubuntu (or probably Debian) machine, and</p> <div class="highlight-python"><pre>sudo apt-get install build-essential devscripts dput quilt patch libcrypt-ssleay-perl debhelper cdbs python-docutils</pre> </div> <p>Please update this document if you encounter unmet dependencies or find a shorter way to express them.</p> </li> <li><p class="first">You will also want to have the <a class="reference external" href="http://launchpad.net/bzr-builddeb">bzr-builddeb</a> plugin installed, which depends on <a class="reference external" href="http://launchpad.net/bzrtools">bzrtools</a>.</p> </li> </ul> </div> <div class="section" id="packaging-bazaar"> <h2>Packaging Bazaar<a class="headerlink" href="#packaging-bazaar" title="Permalink to this headline">¶</a></h2> <div class="section" id="short-form"> <h3>Short form<a class="headerlink" href="#short-form" title="Permalink to this headline">¶</a></h3> <p>For people who have already set up everything they need, building the release packages is as simple as:</p> <div class="highlight-python"><pre>cd ~/dev/bzr/releases/packaging export VERSION="1.17~rc1-1~bazaar1" export PACKAGE="bzr" export UBUNTU_RELEASES="dapper hardy intrepid jaunty karmic" ~/dev/bzr/bzr.dev/tools/packaging/update-packaging-branches.sh ~/dev/bzr/bzr.dev/tools/packaging/update-changelogs.sh ~/dev/bzr/bzr.dev/tools/packaging/update-control.sh 1.16 1.17 1.18 ~/dev/bzr/bzr.dev/tools/packaging/build-packages.sh dput bzr-beta-ppa ${PACKAGE}_$VERSION*.changes</pre> </div> <p>Rinse and repeat for all the plugins by changing VERSION and PACKAGE.</p> </div> <div class="section" id="long-form"> <h3>Long Form<a class="headerlink" href="#long-form" title="Permalink to this headline">¶</a></h3> <ol class="arabic"> <li><p class="first">You will end up checking out a separate directory for each supported release. Such as <tt class="docutils literal"><span class="pre">~/dev/bzr/releases/packaging/hardy</span></tt>. In each of these branches, you will produce the package for the release.</p> <p>The scripts will also create the branches and produce packages for bzrtools and bzr-svn.</p> </li> <li><p class="first">Decide on the final version number. It should be of this form:</p> <div class="highlight-python"><pre>bzr-1.17~rc1-1~bazaar1~hardy1</pre> </div> <p><strong>Note:</strong> There are three hyphen-separated parts: the <em>package name</em>, the <em>upstream version</em>, and the <em>packaging version</em>.</p> <p><strong>Caution:</strong> Upstream betas or release candidates must insert a tilde to make them sort before the final release, like this: <tt class="docutils literal"><span class="pre">bzr-1.17~rc1-1~bazaar1~hardy1</span></tt>.</p> <p>Final releases will use a release string of the form: <tt class="docutils literal"><span class="pre">bzr-1.17-1~bazaar1~hardy1</span></tt></p> <p>Set this base of this up as a usable environment variable:</p> <div class="highlight-python"><pre>export VERSION="1.17~rc1-1~bazaar1"</pre> </div> </li> <li><p class="first">Export the distroreleases that you will be packaging for:</p> <div class="highlight-python"><pre>export UBUNTU_RELEASES="dapper hardy intrepid jaunty karmic"</pre> </div> </li> <li><p class="first">Export the program you are packaging:</p> <div class="highlight-python"><pre>export PACKAGE="bzr"</pre> </div> </li> <li><p class="first">Checkout (or update) the packaging branch for each supported release:</p> <div class="highlight-python"><pre>bzr co lp:~bzr/bzr/packaging-hardy</pre> </div> <p>There is a script available to help:</p> <div class="highlight-python"><div class="highlight"><pre><span class="n">tools</span><span class="o">/</span><span class="n">packaging</span><span class="o">/</span><span class="n">update</span><span class="o">-</span><span class="n">packaging</span><span class="o">-</span><span class="n">branches</span><span class="o">.</span><span class="n">sh</span> </pre></div> </div> </li> <li><p class="first">The <tt class="docutils literal"><span class="pre">bzr-builddeb</span></tt> step will download the original tarball if you do not already have it, putting it into a <tt class="docutils literal"><span class="pre">tarballs</span></tt> directory.</p> </li> <li><p class="first">For Bazaar plugins, change the <tt class="docutils literal"><span class="pre">debian/control</span></tt> file to express a dependency on the correct version of <tt class="docutils literal"><span class="pre">bzr</span></tt>.</p> <p>For bzrtools this is typically:</p> <div class="highlight-python"><pre>Build-Depends-Indep: bzr (>= 1.17~), rsync Depends: ${python:Depends}, bzr (>= 1.17~), bzr (<< 1.18~), patch</pre> </div> <p>There is a helper script which will update the control file and commit it for all of your <tt class="docutils literal"><span class="pre">$UBUNTU_RELEASES</span></tt>. It is available as:</p> <div class="highlight-python"><div class="highlight"><pre><span class="n">tools</span><span class="o">/</span><span class="n">packaging</span><span class="o">/</span><span class="n">update</span><span class="o">-</span><span class="n">control</span><span class="o">.</span><span class="n">sh</span> </pre></div> </div> <p>You must supply the versions as arguments as follows OLD_VERSION CURRENT_VERSION NEXT_VERSION, such as:</p> <div class="highlight-python"><pre>tools/packaging/update-control.sh 1.16 1.17 1.18</pre> </div> </li> <li><p class="first">Make a new <tt class="docutils literal"><span class="pre">debian/changelog</span></tt> entry for the new release, either by using <tt class="docutils literal"><span class="pre">dch</span></tt> or just editing the file:</p> <div class="highlight-python"><pre>dch -v '1.17~rc1-1~bazaar1~hardy1' -D hardy</pre> </div> <p>dch will default to the distro you’re working in and this isn’t checked against the version number (which is just our convention), so make sure to specify it.</p> <p>Make sure you have the correct email address for yourself (you may need export DEBEMAIL=`bzr whoami` if it isn’t already set), version number, and distribution. It should look something like this:</p> <div class="highlight-python"><pre>bzr (1.17~rc1-1~bazaar1~hardy1) hardy; urgency=low * New upstream release. -- John Sample <sample@example.com> Mon, 31 Mar 2008 12:36:27 +1100</pre> </div> <p>If you need to upload the package again to fix a problem, normally you should increment the last number in the version number, following the distro name. Make sure not to omit the initial <tt class="docutils literal"><span class="pre">-1</span></tt>, and make sure that the distro name in the version is consistent with the target name outside the parenthesis.</p> <p>You will also want to commit these changes into the packaging branch.</p> <p>There is a helper script which will build all the packages for all of your <tt class="docutils literal"><span class="pre">$UBUNTU_RELEASES</span></tt>. It is available as:</p> <div class="highlight-python"><div class="highlight"><pre><span class="n">tools</span><span class="o">/</span><span class="n">packaging</span><span class="o">/</span><span class="n">update</span><span class="o">-</span><span class="n">changelogs</span><span class="o">.</span><span class="n">sh</span> </pre></div> </div> </li> <li><p class="first">Build the source packages:</p> <div class="highlight-python"><pre>cd packaging-$DISTRO; bzr builddeb -S</pre> </div> <p>This will create a <tt class="docutils literal"><span class="pre">.changes</span></tt> file. If you didn’t configure builddeb to automatically sign them, you can use</p> <div class="highlight-python"><pre>debsign -m$UID *.changes</pre> </div> <p>where <tt class="docutils literal"><span class="pre">$UID</span></tt> is the gpg key you want to use to sign the changes.</p> <p>There is a helper script which will build the package for all of your <tt class="docutils literal"><span class="pre">$UBUNTU_RELEASES</span></tt>. It is available as:</p> <div class="highlight-python"><div class="highlight"><pre><span class="n">tools</span><span class="o">/</span><span class="n">packaging</span><span class="o">/</span><span class="n">build</span><span class="o">-</span><span class="n">packages</span><span class="o">.</span><span class="n">sh</span> </pre></div> </div> </li> <li><p class="first">Upload into the beta PPA for each release:</p> <div class="highlight-python"><pre>dput bzr-beta-ppa bzr*1.17-1*.changes</pre> </div> </li> <li><p class="first">For final release versions, also copy it into the <tt class="docutils literal"><span class="pre">~bzr</span></tt> PPA:</p> <div class="highlight-python"><pre>dput bzr-ppa ../bzr_1.17-1\~bazaar1\~hardy1\_source.changes</pre> </div> <p>Alternatively, you can use Launchpad’s “copy” feature to copy the packages between repositories.</p> </li> <li><p class="first">You should soon get an “upload accepted” mail from Launchpad, which means that your package is waiting to be built. You can then track its progress in <<a class="reference external" href="https://launchpad.net/~bzr-beta-ppa/+archive">https://launchpad.net/~bzr-beta-ppa/+archive</a>> and <<a class="reference external" href="https://launchpad.net/~bzr-beta-ppa/+archive/+builds">https://launchpad.net/~bzr-beta-ppa/+archive/+builds</a>>.</p> </li> </ol> </div> <div class="section" id="packaging-bzr-svn"> <h3>Packaging bzr-svn<a class="headerlink" href="#packaging-bzr-svn" title="Permalink to this headline">¶</a></h3> <p>bzr-svn uses a packaging branch that contains both the source (including any changes against upstream) and the <tt class="docutils literal"><span class="pre">debian/</span></tt> directory.</p> <p>To build bzr-svn:</p> <ol class="arabic"> <li><p class="first">Get a checkout of <tt class="docutils literal"><span class="pre">lp:~bzr/bzr-svn/hardy-ppa/</span></tt></p> </li> <li><p class="first">Merge from <tt class="docutils literal"><span class="pre">http://bzr.debian.org/pkg-bazaar/bzr-svn/unstable/</span></tt></p> <p>This should bring in both upstream and packaging changes for the new release, and it’s updated as part of the bzr-svn release process.</p> <p>It’s quite possible you will need to resolve some conflicts.</p> </li> <li><p class="first">Run <tt class="docutils literal"><span class="pre">dch</span> <span class="pre">-v</span> <span class="pre">0.4.15-1~bazaar1-hardy1</span> <span class="pre">-D</span> <span class="pre">hardy</span></tt> or similar</p> </li> <li><p class="first">Run <tt class="docutils literal"><span class="pre">bzr</span> <span class="pre">builddeb</span> <span class="pre">--source</span></tt></p> <p>bzr-builddeb will automatically check out the appropriate tag from the main branch of bzr-svn, build, and package it.</p> </li> <li><p class="first"><tt class="docutils literal"><span class="pre">dput</span> <span class="pre">bzr-beta-ppa</span> <span class="pre">../bzr-svn_0.4.15-1~bazaar1~hardy1_source.changes</span></tt></p> </li> </ol> </div> </div> <div class="section" id="monitoring-the-contents-of-ppas"> <h2>Monitoring the contents of PPAs<a class="headerlink" href="#monitoring-the-contents-of-ppas" title="Permalink to this headline">¶</a></h2> <p>If you add all the bzr PPAs to your <tt class="docutils literal"><span class="pre">sources.list</span></tt> then you can see a summary of current package versions with:</p> <div class="highlight-python"><pre>apt-cache madison bzr</pre> </div> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="index.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Managing the Bazaar PPA</a><ul> <li><a class="reference internal" href="#background">Background</a></li> <li><a class="reference internal" href="#preconditions">Preconditions</a></li> <li><a class="reference internal" href="#packaging-bazaar">Packaging Bazaar</a><ul> <li><a class="reference internal" href="#short-form">Short form</a></li> <li><a class="reference internal" href="#long-form">Long Form</a></li> <li><a class="reference internal" href="#packaging-bzr-svn">Packaging bzr-svn</a></li> </ul> </li> <li><a class="reference internal" href="#monitoring-the-contents-of-ppas">Monitoring the contents of PPAs</a></li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="releasing.html" title="previous chapter">Releasing Bazaar</a></p> <h4>Next topic</h4> <p class="topless"><a href="ec2.html" title="next chapter">Bazaar Windows EC2 Server</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="_sources/ppa.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="search.html" method="get"> <input type="text" name="q" size="18" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="ec2.html" title="Bazaar Windows EC2 Server" >next</a></li> <li class="right" > <a href="releasing.html" title="Releasing Bazaar" >previous</a> |</li> <li><a href="http://bazaar.canonical.com/"> <img src="_static/bzr icon 16.png" /> Home</a> | </li> <a href="http://doc.bazaar.canonical.com/en/">Documentation</a> | </li> <li><a href="index.html">Developer Document Catalog (2.2.4)</a> »</li> </ul> </div> <div class="footer"> © Copyright 2009, Canonical Ltd. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. </div> </body> </html>