<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>PPA on Launchpad Blog</title>
    <link>https://blog.launchpad.net/categories/ppa/</link>
    <description>News and updates from the Launchpad team</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 22 Nov 2023 14:00:43 +0000</lastBuildDate>
    <atom:link href="https://blog.launchpad.net/feed/categories/ppa/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Self-service riscv64 builds</title>
      <link>https://blog.launchpad.net/ppa/self-service-riscv64-builds/</link>
      <pubDate>Wed, 22 Nov 2023 14:00:43 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4397</guid>
      <description>&lt;p&gt;Launchpad has supported building for riscv64 for a while, since it was a requirement to get Ubuntu&amp;rsquo;s riscv64 port going.  We don&amp;rsquo;t actually have riscv64 hardware in our datacentre, since we&amp;rsquo;d need server-class hardware with the hypervisor extension and that&amp;rsquo;s still in its infancy; instead, we do full-system emulation of riscv64 on beefy amd64 hardware using &lt;code&gt;qemu&lt;/code&gt;.  This has worked well enough for a while, although it isn&amp;rsquo;t exactly fast.&lt;/p&gt;
&lt;p&gt;The biggest problem with our setup wasn&amp;rsquo;t so much performance, though; it was that we were just using a bunch of manually-provisioned virtual machines, and they weren&amp;rsquo;t being reset to a clean state between builds.  As a result, it would have been possible for a malicious build to compromise future builds on the same builder: it would only need a chroot or container escape.  This violated our standard security model for builders, in which each build runs in an isolated ephemeral VM, and each VM is destroyed and restarted from a clean image at the end of every build.  As a result, we had to limit the set of people who were allowed to have riscv64 builds on Launchpad, and we had to restrict things like snap recipes to only use very tightly-pinned parts from elsewhere on the internet (pinning is often a good idea anyway, but at an infrastructural level it isn&amp;rsquo;t something we need to require on other architectures).&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve wanted to bring this onto the same footing as our other architectures for some time.  In Canonical&amp;rsquo;s most recent product development cycle, we worked with the OpenStack team to get &lt;a href=&#34;https://bugs.launchpad.net/bugs/2023211&#34;&gt;riscv64 emulation support into nova&lt;/a&gt;, and installed a backport of this on our newest internal cloud region.  This almost took care of the problem.  However, Launchpad builder images start out as &lt;a href=&#34;https://cloud-images.ubuntu.com/&#34;&gt;standard Ubuntu cloud images&lt;/a&gt;, which on riscv64 are only available from Ubuntu 22.04 LTS onwards; in testing 22.04-based VMs on other relatively slow architectures we already knew that we were seeing some mysterious hangs in snap recipe builds.  Figuring this out blocked us for some time, and involved some pretty intensive debugging of the &amp;ldquo;&lt;code&gt;strace&lt;/code&gt; absolutely everything in sight and see if anything sensible falls out&amp;rdquo; variety.  We eventually narrowed this down to a LXD bug and were at least able to provide a &lt;a href=&#34;https://github.com/canonical/lxd/pull/12530&#34;&gt;workaround&lt;/a&gt;, at which point bringing up new builders was easy.&lt;/p&gt;
&lt;p&gt;As a result, you can now enable riscv64 builds for yourself in your PPAs or snap recipes.  Visit the PPA and follow the &amp;ldquo;Change details&amp;rdquo; link, or visit the snap recipe and follow the &amp;ldquo;Edit snap package&amp;rdquo; link; you&amp;rsquo;ll see a list of checkboxes under &amp;ldquo;Processors&amp;rdquo;, and you can enable or disable any that aren&amp;rsquo;t greyed out, including riscv64.  This now means that all Ubuntu architectures are fully virtualized and unrestricted in Launchpad, making it easier for developers to experiment.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>New domain names for PPAs</title>
      <link>https://blog.launchpad.net/ppa/new-domain-names-for-ppas/</link>
      <pubDate>Wed, 16 Feb 2022 18:08:27 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4375</guid>
      <description>&lt;p&gt;Since they were introduced in 2007, Launchpad&amp;rsquo;s Personal Package Archives (PPAs) have always been hosted on ppa.launchpad.net.  This has generally worked well, but one significant snag became clear later on: it was difficult to add &lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1473091&#34;&gt;HTTPS support for PPAs&lt;/a&gt; due to the way that cookies work on the web.&lt;/p&gt;
&lt;p&gt;Launchpad uses a cookie for your login session, which is of course security-critical, and because we use multiple domain names for the main web application (bugs.launchpad.net, code.launchpad.net, and so on), the session cookie domain has to be set to allow subdomains of launchpad.net.  We set the &amp;ldquo;Secure&amp;rdquo; flag on session cookies to ensure that browsers only ever send them over HTTPS, as well as the &amp;ldquo;HttpOnly&amp;rdquo; flag to prevent direct access to it from JavaScript; but there are still ways in which arbitrary JS on an HTTPS subdomain of launchpad.net might be able to exfiltrate or abuse users&amp;rsquo; session cookies.  As a result, we can never allow any HTTPS subdomain of launchpad.net to publish completely user-generated HTML that we don&amp;rsquo;t process first.&lt;/p&gt;
&lt;p&gt;We don&amp;rsquo;t currently know of a way to get ppa.launchpad.net to serve arbitrary HTML as &lt;code&gt;Content-Type: text/html&lt;/code&gt;, but this is quite a brittle protection as there are certainly ways (used for things like installer uploads) to upload arbitrary files to ppa.launchpad.net under a user-controlled directory structure, and we don&amp;rsquo;t want the webapp&amp;rsquo;s security to depend on nobody figuring out how to convince a browser to interpret any of that as arbitrary HTML.  The librarian is already on a separate launchpadlibrarian.net domain name for a similar reason.&lt;/p&gt;
&lt;p&gt;To resolve this dilemma, we&amp;rsquo;ve added a new ppa.launchpadcontent.net domain name which supports both HTTP and HTTPS (and similarly private-ppa.launchpadcontent.net for private PPAs, which as before is HTTPS-only).  &lt;code&gt;add-apt-repository&lt;/code&gt; in Ubuntu 22.04 will &lt;a href=&#34;https://bugs.launchpad.net/ubuntu/+source/software-properties/+bug/1959015&#34;&gt;use the new domain name by default&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The old names will carry on working indefinitely - we know they&amp;rsquo;re embedded in lots of configuration and scripts, and we have no inclination to break all of those - but we recommend moving to the new names where possible.  ppa.launchpad.net will remain HTTP-only.&lt;/p&gt;
&lt;p&gt;Some systems may need to be updated to support the new domain name, particularly things like HTTP(S) proxy configuration files and &lt;code&gt;no_proxy&lt;/code&gt; environment variables.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PPAs for ppc64el</title>
      <link>https://blog.launchpad.net/ppa/ppas-for-ppc64el/</link>
      <pubDate>Tue, 27 Oct 2015 17:33:13 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4204</guid>
      <description>&lt;p&gt;Personal package archives on Launchpad only build for the amd64 and i386 architectures by default, which meets most people&amp;rsquo;s needs.  Anyone with an e-mail address can have a PPA, so they have to be securely virtualised, but that&amp;rsquo;s been feasible on x86 for a long time.  Dealing with the other architectures that Ubuntu supports (currently arm64, armhf, powerpc, and ppc64el) in a robust and scalable way has been harder.  Until recently, all of those architectures were handled either by running one builder per machine on bare metal, or in some cases by running builders on a small number of manually-maintained persistent virtual machines per physical machine.  Neither of those approaches scales to the level required to support PPAs, and we need to make sure that any malicious code run by a given build is strictly confined to that build.  (We support virtualised armhf PPAs, but only by using &lt;code&gt;qemu-user-static&lt;/code&gt; in an amd64 virtual machine, which is very fragile and there are many builds that it simply can&amp;rsquo;t handle at all.)&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve been working with our sysadmins for several months to extend &lt;a href=&#34;https://insights.ubuntu.com/2014/10/30/scalingstack-2x-performance-in-launchpads-build-farm-with-openstack/&#34;&gt;ScalingStack&lt;/a&gt; to non-x86 architectures, and at the start of Ubuntu&amp;rsquo;s 16.04 development cycle we were finally able to switch all ppc64el builds over to this system.  Rather than four builders, we now have 30, each of which is reset to a clean virtual machine instance between each build.  Since that&amp;rsquo;s more than enough to support Ubuntu&amp;rsquo;s needs, we&amp;rsquo;ve now &amp;ldquo;unrestricted&amp;rdquo; the architecture so that it can be used for PPAs as well, and PPA owners can enable it at will.  To do this, visit the main web page for your PPA (which will look something like &amp;ldquo;https://launchpad.net/~&amp;lt;person-name&amp;gt;/+archive/ubuntu/&amp;lt;ppa-name&amp;gt;&amp;rdquo;) and follow the &amp;ldquo;Change details&amp;rdquo; link; you&amp;rsquo;ll see a list of checkboxes under &amp;ldquo;Processors&amp;rdquo;, and you can enable or disable any that aren&amp;rsquo;t greyed out.  This also means that you can disable amd64 or i386 builds for your PPA if you want to.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re working to extend this to all the existing Ubuntu architectures at the moment.  arm64 is up and running but we&amp;rsquo;re still making sure it&amp;rsquo;s sufficiently robust; armhf will run on arm64 guests, and just needs a kernel patch to set its &lt;code&gt;uname&lt;/code&gt; correctly; and powerpc builds will run in different guests on the same POWER8 compute nodes as ppc64el once we have suitable cloud images available.  We&amp;rsquo;ll post further announcements when further architectures are unrestricted.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Launchpad news, April-June 2015</title>
      <link>https://blog.launchpad.net/general/launchpad-news-april-june-2015/</link>
      <pubDate>Thu, 09 Jul 2015 01:07:23 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4173</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been a while since we posted much regularly on this team blog, not least because for a while Launchpad was running more or less in maintenance mode.  That&amp;rsquo;s no longer the case and we&amp;rsquo;re back to the point where we can do feature development work again, as exemplified by our recent addition of &lt;a href=&#34;http://blog.launchpad.net/general/git-code-hosting-beta&#34;&gt;Git code hosting support&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lots of other things have been happening in the Launchpad world lately, though, and the half-way point in the year seems like a good time to start talking about them.  I&amp;rsquo;m going to try to do this a bit more regularly, aiming for about once a month when we also update our internal stakeholders.  This post covers roughly the last three months.&lt;/p&gt;
&lt;h2 id=&#34;git&#34;&gt;Git&lt;/h2&gt;
&lt;p&gt;Of course, you don&amp;rsquo;t get to release a major new feature and then have everything be perfect.  In fact, we&amp;rsquo;d released it pretty much as soon as we had a &lt;a href=&#34;https://en.wikipedia.org/wiki/Minimum_viable_product&#34;&gt;minimum viable product&lt;/a&gt;, so we knew there was plenty more to do.&lt;/p&gt;
&lt;p&gt;Now that the basics work reasonably well, we&amp;rsquo;ve been focusing on tying off loose ends, and on getting to the point where Launchpad itself can be self-hosted in Git: this is partly because most of the things we need to do for that are relevant to many other projects considering a migration, partly because that ensures that any problems with it will affect Launchpad developers directly, and partly because this will allow us to trim a very large amount of database cruft associated with the representation of Launchpad&amp;rsquo;s own branches.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a brief changelog since our initial public announcement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leaving the &amp;ldquo;Target reference path&amp;rdquo; field empty when proposing a Git-based merge proposal no longer crashes (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1451068&#34;&gt;#1451068&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Git-based merge proposals can be deleted&lt;/li&gt;
&lt;li&gt;Pushing to private repositories no longer hangs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1451107&#34;&gt;#1451107&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The backend now stores reflogs so that we can help users recover from mistakes&lt;/li&gt;
&lt;li&gt;Pushing a new default repository for a project now sets the repository owner to the project owner rather than to the person performing the push&lt;/li&gt;
&lt;li&gt;The project +sharing view now handles Git repositories&lt;/li&gt;
&lt;li&gt;Branches of a project default repository are now shown on the project&amp;rsquo;s code page, although we expect to be making significant further improvements in this area soon&lt;/li&gt;
&lt;li&gt;Individual Git commits under &amp;ldquo;Recent Commits&amp;rdquo; now link directly to a full view of the corresponding commit&lt;/li&gt;
&lt;li&gt;Merge proposal listings now cover Git (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1453020&#34;&gt;#1453020&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Branches in private repositories now show a privacy banner (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1457553&#34;&gt;#1457553&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Repositories can now be deleted (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456583&#34;&gt;#1456583&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Private repositories are now browseable and show a privacy banner in the browsing interface&lt;/li&gt;
&lt;li&gt;The URLs for Git-based merge proposals have moved to be directly under the source repository rather than under the source branch, so that historical MPs can still be accessed after deleting the branch (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456589&#34;&gt;#1456589&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Launchpad now sends mail for Git-based merge proposals&lt;/li&gt;
&lt;li&gt;There are various new Git repository listing views, chiefly for projects, packages, and people&lt;/li&gt;
&lt;li&gt;Repositories now have a complete edit form allowing you to rename them, move them between targets, and set their default branch (&amp;ldquo;HEAD&amp;rdquo;) (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456625&#34;&gt;#1456625&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;ve exported a few more bits and pieces on the webservice API to support Git merge robots&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;ve brought various bits of automation for Git-based merge proposals up to par with their Bazaar equivalents: when a Git branch is updated, Launchpad now automatically updates the preview diffs for any MPs where that is the source branch, and detects whether any MPs where that is the target branch can now be marked as Merged&lt;/li&gt;
&lt;li&gt;The Code settings view for projects now allows you to set the project&amp;rsquo;s default Git repository and to choose whether the default revision system for the project is Bazaar or Git&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;ve started on support for webhooks, and hope to be able to tell you more about this soon. Git-to-Git repository mirroring and native Git recipes are also frequent requests that we know are important to people, and we hope to get to those soon.&lt;/p&gt;
&lt;h2 id=&#34;other-code-review-changes&#34;&gt;Other code review changes&lt;/h2&gt;
&lt;p&gt;Many of the changes needed for Git touched on our code review infrastructure, but we&amp;rsquo;ve been making some other improvements there too.  Launchpad has supported &amp;ldquo;inline comments&amp;rdquo; on merge proposals for a year or so now, allowing you to comment on parts of a diff without having to manually quote it; but the feature hadn&amp;rsquo;t been quite finished and lots of people had nits to pick with it.  We&amp;rsquo;ve made a couple of improvements here lately:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preview diffs in merge proposals now have keyboard navigation to move between files, diff hunks, and inline comments&lt;/li&gt;
&lt;li&gt;Links to diffs now include a per-file diffstat under an expander triangle&lt;/li&gt;
&lt;li&gt;The mails sent when a reviewer adds inline comments now only include relevant parts of the diff context rather than the entire diff, making them much easier to read and making it harder to miss comments (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1334577&#34;&gt;#1334577&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We threw in a couple of bonus features here as well.  You can now see side-by-side diffs for merge proposals as well as unified diffs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/917502&#34;&gt;#917502&lt;/a&gt;): there&amp;rsquo;s a link at the top of each preview diff allowing you to switch it to side-by-side mode (we may add a user preference for this later).  And resubmitting a merge proposal now automatically preserves the commit message (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/676769&#34;&gt;#676769&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&#34;package-build-infrastructure&#34;&gt;Package build infrastructure&lt;/h2&gt;
&lt;p&gt;When we first added support for building debug symbol packages (ddebs) in Ubuntu, we handled the build and publication side of things with a temporary hack involving a custom hack to our &lt;code&gt;sbuild&lt;/code&gt; fork that stashed the ddebs on the builder for a while, and a job that periodically fetched them to &lt;a href=&#34;http://ddebs.ubuntu.com/&#34;&gt;ddebs.ubuntu.com&lt;/a&gt;. As is the way of temporary hacks, it proceeded to stay that way for eight and a half years. It mostly worked, but was rather fragile, contributed to tying us to an old &lt;code&gt;sbuild&lt;/code&gt;, wasn&amp;rsquo;t very extensible to PPAs, and couldn&amp;rsquo;t work with virtualised builders where all the builder&amp;rsquo;s state is reset before every build.&lt;/p&gt;
&lt;p&gt;A couple of years ago we put together the Launchpad changes required to store ddebs straightforwardly in Launchpad instead, but weren&amp;rsquo;t able to deploy this at the time due to needing better librarian infrastructure. We finally got all this cleared out in April and deployed the new ddeb publishing mechanism. The main user-visible effect of this is that &lt;a href=&#34;http://ddebs.ubuntu.com/&#34;&gt;ddebs.ubuntu.com&lt;/a&gt; isn&amp;rsquo;t liable to lose packages any more, and ddebs are also available from Launchpad build pages.&lt;/p&gt;
&lt;p&gt;Having done this, we were able to &lt;a href=&#34;https://lists.ubuntu.com/archives/ubuntu-devel-announce/2015-June/001137.html&#34;&gt;upgrade&lt;/a&gt; from our 2004-era fork of &lt;code&gt;sbuild&lt;/code&gt; to a modern version, which fixed a number of long-standing bugs.&lt;/p&gt;
&lt;p&gt;All architectures are now optional for PPAs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1244868&#34;&gt;#1244868&lt;/a&gt;), so, for example, a PPA that only needs to support &lt;code&gt;armhf&lt;/code&gt; can save builder cycles by disabling &lt;code&gt;amd64&lt;/code&gt; and &lt;code&gt;i386&lt;/code&gt;. At the moment this can only be done by Launchpad administrators, so &lt;a href=&#34;https://answers.launchpad.net/launchpad/+addquestion&#34;&gt;ask a question on Launchpad&lt;/a&gt; if you think this would be worth doing for any of your PPAs.&lt;/p&gt;
&lt;p&gt;We rewrote the way that we install build-dependencies for &lt;a href=&#34;https://help.launchpad.net/Packaging/SourceBuilds/Recipes&#34;&gt;source package recipes&lt;/a&gt;. This allows recipes to handle the &amp;ldquo;:native&amp;rdquo; qualifier in build-dependencies which is used in some places as part of supporting cross-building.&lt;/p&gt;
&lt;p&gt;The next step in this modernisation programme will be to move all builds into &lt;a href=&#34;https://insights.ubuntu.com/2014/10/30/scalingstack-2x-performance-in-launchpads-build-farm-with-openstack/&#34;&gt;ScalingStack&lt;/a&gt; and decommission the corresponding bare-metal builders, which we&amp;rsquo;ll be starting soon and working on an architecture-by-architecture basis as that cloud gains support for them. In the short term, this will give us better build capacity on the migrated architectures; in the longer term, it will let us support PPA builds on more architectures, and erase the cumbersome distinction between &amp;ldquo;non-virtualised&amp;rdquo; and &amp;ldquo;virtualised&amp;rdquo; builders. More news on this as it happens.&lt;/p&gt;
&lt;h2 id=&#34;performance&#34;&gt;Performance&lt;/h2&gt;
&lt;p&gt;We upgraded to significantly more modern database servers earlier this year, which meant that a lot of hitherto difficult timeout problems suddenly either disappeared or became tractable. There are still some bad queries and a few mysterious problems, but as a general trend our timeout rates are very significantly down from where they were six months ago. We have some more general plans in this area, and will continue to spot-fix bad pages as they show up and as time permits.&lt;/p&gt;
&lt;h2 id=&#34;epilogue&#34;&gt;Epilogue&lt;/h2&gt;
&lt;p&gt;We have lots more to do across the whole application, but still have a rather limited number of developers. If any of this kind of thing sounds interesting and you&amp;rsquo;d like to help, &lt;a href=&#34;https://dev.launchpad.net/&#34;&gt;you can&lt;/a&gt;!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Setting up commercial projects quickly</title>
      <link>https://blog.launchpad.net/cool-new-stuff/setting-up-commercial-projects-quickly/</link>
      <pubDate>Wed, 18 Apr 2012 12:38:45 +0000</pubDate>
      <dc:creator>Curtis Hovey</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=3317</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/2967373590_3422330020.jpg&#34;&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/04/2967373590_3422330020-300x200.jpg&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Setting up a commercial project in Launchpad has gotten easier. You can now quickly register a proprietary project and enable private bugs. You can create private teams and private personal package archives, AKA private PPA or P3A without the assistance of a Launchpad admin.&lt;/p&gt;
&lt;p&gt;When you select the Other/Proprietary license while registering a project, or changing the project&amp;rsquo;s details,&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/04/proprietary-license.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;it is given a complimentary 30-day commercial subscription.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/04/commercial-subscription.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;The delay between the moment when a commercial project was registered and when the commercial subscription was purchased and then applied to the project caused a lot of confusion. During this delay, proprietary data could be disclosed. We chose to award the project with a short term commercial subscription which enabled the project to be properly configured while the 12-month commercial subscription was being purchased and applied to the project.&lt;/p&gt;
&lt;h3 id=&#34;any-project-with-a-commercial-subscription-can-enable&#34;&gt;Any project with a commercial subscription can enable&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;Default private bugs&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;Once enabled by configuring the project&#39;s bug tracker, all new reported bugs are private. You can choose to make the report public.&lt;/dd&gt;
&lt;dd&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/private-bugs.png&#34;&gt;&lt;img title=&#34;Default private bugs&#34; src=&#34;https://blog.launchpad.net/images/posts/2012/04/private-bugs.png&#34; alt=&#34;Default private bugs&#34; width=&#34;421&#34; height=&#34;62&#34; /&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Default private branches&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;You can request a Launchpad admin to configure private branches for your teams. (You will be able to do this yourself in the near future when projects gain proprietary branches.)&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&#34;as-the-maintainer-of-a-project-with-a-commercial-subscription-you-can-register&#34;&gt;As the maintainer of a project with a commercial subscription, you can register&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;Private teams&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;When you register a team, you can choose to set the team visibility to private. The team&#39;s members and data is hidden from non-members.&lt;/dd&gt;
&lt;dd&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/private-team.png&#34;&gt;&lt;img title=&#34;Private team&#34; src=&#34;https://blog.launchpad.net/images/posts/2012/04/private-team.png&#34; alt=&#34;&#34; width=&#34;568&#34; height=&#34;132&#34; /&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Private mailing lists&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;When you create a mailing list for a private team, the archive is also private. Only team members may see the messages in the archive.&lt;/dd&gt;
&lt;dd&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/private-mailing-list.png&#34;&gt;&lt;img title=&#34;Private mailing-list archive&#34; src=&#34;https://blog.launchpad.net/images/posts/2012/04/private-mailing-list.png&#34; alt=&#34;&#34; width=&#34;589&#34; height=&#34;142&#34; /&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Private PPAs&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;When you create a PPA for your public team, you may choose to make it private; private teams can only have private PPAs. You can subscribe users to your archive so that they may install packages without revealing all your team&#39;s members and data to the subscriber.&lt;/dd&gt;
&lt;dd&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/private-ppa.png&#34;&gt;&lt;img title=&#34;Private Personal Package Archive&#34; src=&#34;https://blog.launchpad.net/images/posts/2012/04/private-ppa.png&#34; alt=&#34;&#34; width=&#34;621&#34; height=&#34;120&#34; /&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;A secondary benefit of this change is that you can now try Launchpad&amp;rsquo;s commercial features before purchasing a 12-month commercial subscription. The features will be disabled at the end of 30-days. Your test data will remain private to ensure your data is not disclosed.&lt;/p&gt;
&lt;p&gt;Any open source project may also have a commercial subscription to enable commercial features. You can &lt;a href=&#34;http://shop.canonical.com/product_info.php?products_id=230&#34;&gt;purchase a commercial subscription at the Canonical store.&lt;/a&gt; Commercial subscriptions cost US$250/year/project + applicable V.A.T.&lt;/p&gt;
&lt;p&gt;(Photo by &lt;a href=&#34;http://www.flickr.com/photos/fwp-dawson/&#34;&gt;Fred Dawson&lt;/a&gt; on flickr, creative commons license)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Adding a PPA to Ubuntu — the GUI way</title>
      <link>https://blog.launchpad.net/ppa/adding-a-ppa-to-ubuntu-the-gui-way/</link>
      <pubDate>Thu, 21 Apr 2011 15:11:29 +0000</pubDate>
      <dc:creator>Matthew Revell</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=2224</guid>
      <description>&lt;p&gt;On Monday I posted a &lt;a href=&#34;http://blog.launchpad.net/ppa/how-to-add-a-ppa-to-ubuntu&#34;&gt;video showing how to add a PPA to Ubuntu using a terminal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And here&amp;rsquo;s a &lt;a href=&#34;http://youtu.be/QMxAtDlEHlo?hd=1&#34;&gt;video showing how to do it using Ubuntu&amp;rsquo;s Software Centre&lt;/a&gt;.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
			&lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/QMxAtDlEHlo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
		&lt;/div&gt;

</description>
    </item>
    
    <item>
      <title>How to add a PPA to Ubuntu</title>
      <link>https://blog.launchpad.net/ppa/how-to-add-a-ppa-to-ubuntu/</link>
      <pubDate>Mon, 18 Apr 2011 22:34:16 +0000</pubDate>
      <dc:creator>Matthew Revell</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=2172</guid>
      <description>&lt;p&gt;I noticed over the weekend that the search term bringing most visitors to this blog was &amp;ldquo;how to add a PPA to Ubuntu&amp;rdquo; and variants.&lt;/p&gt;
&lt;p&gt;So, &lt;a href=&#34;http://youtu.be/yPpM0-GSJMs?hd=1&#34;&gt;here&amp;rsquo;s a screencast showing you how&lt;/a&gt;.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
			&lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/yPpM0-GSJMs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;p&gt;For more, see &lt;a href=&#34;https://help.launchpad.net/Packaging/PPA/InstallingSoftware&#34;&gt;our help guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; here&amp;rsquo;s a &lt;a href=&#34;http://blog.launchpad.net/ppa/adding-a-ppa-to-ubuntu-the-gui-way&#34;&gt;video showing how to do it with the Ubuntu Software Centre&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Source package recipes</title>
      <link>https://blog.launchpad.net/cool-new-stuff/source-package-recipes/</link>
      <pubDate>Wed, 06 Apr 2011 16:28:55 +0000</pubDate>
      <dc:creator>Matthew Revell</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=2049</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/dearbarbie/1507731045/sizes/m/in/photostream/&#34;&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2011/04/pint-of-beer.jpg&#34; alt=&#34;A pint of ale&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a quick pub quiz:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How do you make packages for Ubuntu?&lt;/p&gt;
&lt;p&gt;You can choose from the following answers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;learn Debian packaging through hours of study and practice&lt;/li&gt;
&lt;li&gt;borrow existing packaging from elsewhere, throw a couple of Bazaar branches together and let Launchpad handle the rest&lt;/li&gt;
&lt;li&gt;Uruguay in both 1930 and 1950.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you selected either of the first answers you&amp;rsquo;d be right.&lt;/p&gt;
&lt;p&gt;Okay, so, if you want to do it for real — i.e. become an Ubuntu MOTU or otherwise create Debian-style packages from scratch — then you still need to go through the hard work.&lt;/p&gt;
&lt;p&gt;However, for everyone else who really just needs to get something out there and working for, say, a group of beta testers, we now have Launchpad&amp;rsquo;s source package recipes.&lt;/p&gt;
&lt;h3 id=&#34;how-it-works-in-three-steps&#34;&gt;How it works, in three steps&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s almost ridiculously easy to set up a source package build:&lt;/p&gt;
&lt;div&gt;
  &lt;ol&gt;
    &lt;li&gt;Choose a branch in Launchpad, whether hosted directly or imported.&lt;/li&gt;
    &lt;li&gt;Write a short recipe that tells Launchpad which other branches to pull in, for example to provide packaging or make the code buildable.&lt;/li&gt;
    &lt;li&gt;Paste your recipe into Launchpad.&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;And that&amp;rsquo;s it. Within a few minutes you can set up a daily build direct from your trunk or any other buildable branch in Launchpad.&lt;/p&gt;
&lt;p&gt;Watch how it works in our screencast:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
			&lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/_bG-SXNX9Ww?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;h3 id=&#34;an-example&#34;&gt;An example&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://www.flickr.com/photos/philip-rosie/96410102/&#34;&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2011/04/alvin.jpg&#34; alt=&#34;Alvin Hall&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say you&amp;rsquo;re the developer of a home finance application called Alvin. You track your project&amp;rsquo;s code using Git and host it on your own server. For the past couple of years Alvin has been packaged in the Ubuntu universe and your trunk has also been imported from Git to a Bazaar branch in Launchpad at &lt;em&gt;lp:alvin&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Just as you&amp;rsquo;re approaching Alvin&amp;rsquo;s next release, you want to get some wider testing. In the past, you&amp;rsquo;ve published a nightly tarball and provided instructions on manual installation. That&amp;rsquo;s given you a handful of dedicated beta testers but you&amp;rsquo;re worried that you&amp;rsquo;re asking too much of people.&lt;/p&gt;
&lt;p&gt;With Launchpad&amp;rsquo;s source package recipes, you write a short &lt;em&gt;recipe&lt;/em&gt; that pulls in your trunk branch, adds the packaging from Alvin&amp;rsquo;s existing Ubuntu package and then builds an installable Ubuntu package in the PPA of your choice:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# bzr-builder format 0.3 deb-version 2.0beta+{revno}
lp:alvin
nest-part packaging lp:ubuntu/alvin debian debian
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Paste the recipe into Launchpad and with a couple of clicks you have a daily build of your trunk, that&amp;rsquo;s published as an Ubuntu package in your PPA.&lt;/p&gt;
&lt;p&gt;Now you can ask people to test the latest Alvin code by doing no more than adding your PPA to their system. Launchpad will build a new version of the package on each day it spots a change in your trunk (or the Ubuntu packaging). For your beta testers, any changes will show up just like any other Ubuntu update.&lt;/p&gt;
&lt;p&gt;Simple as that!&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a quick recap of how it works: you can take any buildable branch — whether hosted in directly Launchpad or imported from Git, Subversion, CVS or Bazaar hosted elsewhere — merge or nest other branches, add packaging and then leave it to Launchpad to create a daily build that it publishes in your chosen PPA.&lt;/p&gt;
&lt;h3 id=&#34;seeing-it-in-action&#34;&gt;Seeing it in action&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2011/04/daily-builds-list.png&#34; alt=&#34;List of daily builds in Launchpad&#34;&gt;&lt;/p&gt;
&lt;p&gt;During the beta, people added a whole range of source package recipes, with a &lt;a href=&#34;https://code.launchpad.net/+daily-builds&#34;&gt;list of more than 350 daily builds&lt;/a&gt; as I write this.&lt;/p&gt;
&lt;p&gt;Daily builds on Launchpad right now include &lt;a href=&#34;https://launchpad.net/project-neon&#34;&gt;Project Neon&lt;/a&gt;, who have around &lt;a href=&#34;https://code.launchpad.net/~neon/+recipes&#34;&gt;sixty recipes providing daily builds of KDE and Amarok&lt;/a&gt;. There are also daily builds of the &lt;a href=&#34;https://code.launchpad.net/~scribus/+recipe/scribus-daily&#34;&gt;Scribus DTP app&lt;/a&gt;, &lt;a href=&#34;https://code.launchpad.net/~audacity-team/+recipe/daily&#34;&gt;Audacity&lt;/a&gt; and the scriptable screen reader &lt;a href=&#34;https://code.launchpad.net/~dusek/+recipe/gnome-orca-daily&#34;&gt;Gnome Orca&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;try-it-out&#34;&gt;Try it out&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s easy to get your own source package recipes and daily builds up and running.&lt;/p&gt;
&lt;p&gt;Start at our &lt;a href=&#34;https://help.launchpad.net/Packaging/SourceBuilds/GettingStarted&#34;&gt;Getting Started guide&lt;/a&gt; and &lt;a href=&#34;http://www.youtube.com/watch?v=_bG-SXNX9Ww&#34;&gt;screencast&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll leave the last word to &lt;a href=&#34;https://launchpad.net/~kazade&#34;&gt;Luke Benstead&lt;/a&gt;, who has been using source package recipes while developing a set of game libraries:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;ve been using LP to develop some small open source game libraries. Because there are quite a few of them, packaging them all is a pain, so the package builds have worked out pretty well for them.&lt;/p&gt;
&lt;p&gt;Now I get nightly builds delivered to a PPA, so I know that if I fix a bug it&amp;rsquo;s reflected to all my machines. And my recipes are only a single line so they&amp;rsquo;ve been really easy to use. I&amp;rsquo;m not really sure how they could be easier.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;small&gt;Images:&lt;br&gt;
&lt;a href=&#34;http://www.flickr.com/photos/dearbarbie/1507731045/sizes/m/in/photostream/&#34;&gt;Beer photo by dearbarbie&lt;/a&gt;. CC-BY-SA.&lt;br&gt;
&lt;a href=&#34;http://www.flickr.com/photos/philip-rosie/96410102/&#34;&gt;Alvin Hall photo by Phil Guest&lt;/a&gt;. CC-BY-SA.&lt;br&gt;
&lt;/small&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>&#34;Failed to fetch&#34; errors for PPAs ...</title>
      <link>https://blog.launchpad.net/ppa/failed-to-fetch-errors-for-ppas/</link>
      <pubDate>Fri, 18 Feb 2011 04:55:19 +0000</pubDate>
      <dc:creator>Martin Pool</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=1972</guid>
      <description>&lt;p&gt;You may start getting &amp;ldquo;Failed to fetch&amp;rdquo; error messages when updating your software sources (e.g. through &amp;ldquo;&lt;code&gt;apt-get update&lt;/code&gt;&amp;rdquo; or &amp;ldquo;&lt;em&gt;Reload package information&lt;/em&gt;&amp;rdquo; in Synaptic), which may be due to a bug we&amp;rsquo;ve just cleaned up in Launchpad&amp;rsquo;s PPAs.&lt;/p&gt;
&lt;p&gt;The error looks like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  W: Failed to fetch http://ppa.launchpad.net/chromium-daily/ppa/ubuntu/dists/maverick/Release
  Unable to find expected entry  restricted/binary-i386/Packages in Meta-index file (malformed Release file?)

  E: Some index files failed to download, they have been ignored, or old ones used instead.
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;fixing-the-cause-of-the-error&#34;&gt;Fixing the cause of the error&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s how to fix it. In your terminal, type:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; sudo gedit /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the editor, look for PPA sources — these are URLs that feature the &lt;tt&gt;ppa.launchpad.net&lt;/tt&gt; domain.  In this example, someone has set up the &lt;tt&gt;~ubuntu-x-swat/x-updates&lt;/tt&gt; PPA incorrectly:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu maverick main
 deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu maverick restricted
 deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu maverick universe
 deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu maverick multiverse
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;All of these refer to different components within the same PPA. PPAs only have the first component, so you should delete lines for PPAs that don&amp;rsquo;t end in &amp;ldquo;main&amp;rdquo;. Watch out for lines that wrap, as with the &amp;ldquo;restricted&amp;rdquo;, &amp;ldquo;universe&amp;rdquo; and &amp;ldquo;multiverse&amp;rdquo; examples above.&lt;/p&gt;
&lt;p&gt;You may also need to check source lists under the &lt;tt&gt;/etc/apt/sources.list.d&lt;/tt&gt; directory.&lt;/p&gt;
&lt;p&gt;Note: you should leave your standard Ubuntu sources, and any non-PPA sources, just as they are.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re not sure how to do this, pop into &lt;tt&gt;#launchpad&lt;/tt&gt; on &lt;a href=&#34;https://help.ubuntu.com/community/InternetRelayChat&#34;&gt;freenode&lt;/a&gt; and one of the Launchpad community will help.&lt;/p&gt;
&lt;h3 id=&#34;why-this-has-happened&#34;&gt;Why this has happened&lt;/h3&gt;
&lt;p&gt;The Debian-style archives used by Ubuntu are often divided into different components. With Ubuntu, you&amp;rsquo;ve probably heard of at least &amp;ldquo;main&amp;rdquo; and &amp;ldquo;universe&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;PPAs don&amp;rsquo;t use these components. However, a bug in Launchpad meant that, until December, PPAs were published with a number of different components.  All of these components were empty and there was no way to publish anything to them.&lt;/p&gt;
&lt;p&gt;Today, we started to remove these empty components from PPAs. The only impact we anticipate is that anyone whose sources.list referenced these components in a PPA will now see an error when performing an &lt;tt&gt;apt-get update&lt;/tt&gt; or similar.&lt;/p&gt;
&lt;p&gt;No packages are being deleted and anyone with a correctly defined sources.list will be able to carry on just as before.&lt;/p&gt;
&lt;p&gt;(&lt;a href=&#34;https://lists.launchpad.net/launchpad-users/msg06219.html&#34;&gt;Originally from Julian&lt;/a&gt;.)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Tracking PPA download statistics</title>
      <link>https://blog.launchpad.net/cool-new-stuff/tracking-ppa-download-statistics/</link>
      <pubDate>Tue, 11 Jan 2011 13:11:55 +0000</pubDate>
      <dc:creator>Julian Edwards</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=1889</guid>
      <description>&lt;p&gt;An &lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/139855&#34;&gt;long-requested feature&lt;/a&gt; in Launchpad is to let people see who&amp;rsquo;s using a PPA.  Finally, we&amp;rsquo;ve implemented this!&lt;/p&gt;
&lt;p&gt;Initially, the stats are only available on &lt;a href=&#34;https://help.launchpad.net/API&#34;&gt;Launchpad&amp;rsquo;s webservice API.&lt;/a&gt; but we aim to &lt;a href=&#34;https://bugs.launchpad.net/bugs/688141&#34;&gt;show something useful in the web UI&lt;/a&gt; at some point.&lt;/p&gt;
&lt;p&gt;If you are already familiar with the webservice API, then you can use the following &lt;a href=&#34;https://edge.launchpad.net/+apidoc/devel.html#binary_package_publishing_history&#34;&gt;binary_package_publishing_history&lt;/a&gt; object methods to retrieve the information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;getDailyDownloadTotals&lt;/li&gt;
&lt;li&gt;getDownloadCount&lt;/li&gt;
&lt;li&gt;getDownloadCounts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;http://launchpad.net/~fta&#34;&gt;Fabien Tassin&lt;/a&gt; is already using the stats to see how many people are using his daily build PPAs, and wrote an interesting &lt;a href=&#34;http://ftagada.wordpress.com/2011/01/05/ppa-stats-initial-impressions/&#34;&gt;blog post&lt;/a&gt; about it.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
