• Continuous Delivery of Python Applications using Travis CI and packagecloud

    This post will go through the steps needed to implement an automated software pipeline for Python packages. On every tagged commit pushed to Github, Travis CI will automatically build this project and push it to packagecloud.

  • HOWTO: Build debian packages for simple shell scripts

    This post goes over the creation of a debian package containing shell scripts using dh_make and debuild. Starting from structuring the packaging directory to building the final debian package, this tutorial covers the process of creating a debian package with just a few simple steps.

  • Announcing package promotion: easily move packages between repositories

    We’re excited to announce that we’ve added support for package promotion, which allows repository owners and collaborators to easily move packages between repositories! This feature can be used via the package promote API or via the package_cloud command line tool.

  • Debugging SSL in Java using mitmproxy

    In this post we’ll go over setting up the popular mitmproxy tool on an external host and configuring your Java programs to proxy traffic through it, allowing you to debug misbehaving HTTP clients and libraries.

  • Announcing official support for zypper

    Summary We’re excited to announce that we’ve added official support for zypper, the package manager that is widely used on openSUSE and SUSE Enterprise Linux Server (SLES)! Get your openSUSE and SUSE Enterprise Linux Repository for free! Sign up! Uploading packages To upload a package for openSUSE or SLES you can either upload via our...

  • APT 1.2.10 backport for Ubuntu Trusty (14.04) and Ubuntu Precise (12.04)

    Summary We’re excited to announce that we’ve backported APT 1.2.10 to Ubuntu Trusty (14.04) and Ubuntu Precise (12.04)! This version of APT includes a new feature called Acquire-by-hash which completely eliminates the “Hash sum mismatch” errors. You can read more about this APT feature on our blog. Get your own atomic APT repository in seconds!...

  • Illustrated Guide to Monitoring and Tuning the Linux Networking Stack: Receiving Data

    This blog post expands on our previous blog post Monitoring and Tuning the Linux Networking Stack: Receiving Data with a series of diagrams aimed to help readers form a more clear picture of how the Linux network stack works. Free Deb, RPM, RubyGem, Python, & Maven repositories. Sign up! There are no shortcuts when...

  • Infrastructure as code might be literally impossible part 2

    These are the the slides from Joe Damato’s keynote at Automacon 2016, titled “Infrastructure as code might be literally impossible part 2”. This talk covers: package managers, ssl, linux, scary stories, and more! Slides

  • Fixing APT Hash Sum Mismatch: Consistent APT Repositories

    The APT repository metadata format is inherently racy. This bug makes it impossible to guarantee that: Frequently updated APT repositories will remain consistent for users Mirrors of APT repositories will be consistent A new feature has been added to APT 1.2.0 and newer to prevent this race condition. Support for this feature has been...

  • SBT SNAPSHOT Deploys and fatjar Support

    You can now deploy your Scala packages directly from SBT to your packagecloud repositories (including SNAPSHOT versions)! Also, we’ve released support for deployment JARs, also known as “fatjars” or “uberjars” to the packagecloud CLI! Read on to find out how to take advantage of these new features.

  • IPv6 access for all APT, YUM, Maven, PyPI, and RubyGem repositories

    IPv6 APT, YUM, PyPI, RubyGem and Maven package repositories We are pleased to announce that IPv6 support for packagecloud has now entered public beta! The changes have been rolled out site-wide. The website, all package repositories, and all API endpoints are now accessible with both IPv4 and IPv6. No changes are necessary for our users;...

  • Announcing Maven repository support

    packagecloud now fully supports public and private maven2 repositories! Deploy releases and SNAPSHOTs right from your favorite build tool: Maven, Gradle, or Leiningen!

  • Monitorama 2016: All of Your Networking Monitoring is (probably) wrong

    These are the slides from Joe Damato’s talk at Monitorama 2016 titled “All Your Networking Monitoring is (probably) Wrong”. This talk covers: parts of the Linux kernel, networking, and some tips and tricks for understanding and gathering network monitoring statistics.

  • Monitoring and Tuning the Linux Networking Stack: Receiving Data

    This blog post explains how computers running the Linux kernel receive packets, as well as how to monitor and tune each component of the networking stack as packets flow from the network toward userland programs. UPDATE Take a look at the Illustrated Guide to Monitoring and Tuning the Linux Networking Stack: Receiving Data, which...

  • Announcing README support for packagecloud repositories

    You can now add a README to all your packagecloud repositories! Use the embedded markdown editor on your repository homepage (or settings page) to share important information about your packages with users.

  • Free Fastly CDN support for all package repositories and more

    All repositories on packagecloud are now backed by the Fastly CDN for super fast download speeds! In addition, we’ve completely redesigned search to make it faster and easier to use, added an indexing badge to repository pages, and dramatically improved the performance of our RPM indexers.

  • Philly ETE 2016: Infrastructure as code might be literally impossible

    This is the video and the slides from Joe Damato’s talk at Philly ETE 2016, titled “Infrastructure as code might be literally impossible”. This talk covers: package managers, puppet, chef, scary stories, and more!

  • The Definitive Guide to Linux System Calls

    This blog post explains how Linux programs call functions in the Linux kernel. It will outline several different methods of making systems calls, how to handcraft your own assembly to make system calls (examples included), kernel entry points into system calls, kernel exit points from system calls, glibc wrappers, bugs, and much, much more....

  • Pushing packages to packagecloud

    This blog post details all ways you can push packages to packagecloud using different languages and platforms.

  • APT Hash sum mismatch

    NOTE we recently blogged about another more serious cause for APT’s Hash sum mismatch bug and we’ve backported APT 1.2.10 to Ubuntu 12.04 (Precise) and Ubuntu 14.04 (Trusty) which includes bug fixes for the bug mentioned in this post and many exciting new features. APT repository can be provided uncompressed or compressed in a...

  • March Outages post-mortem

    We had a few brief outages in the past couple of weeks, this post-mortem aims to detail what happened, how we responded, and what was done to prevent similar incidents in the future.

  • How does ltrace work?

    This blog post explains how ltrace works, internally. This is a great companion post to our previous blog post which describes strace internals.

  • How to extract and disassemble a Linux kernel image (vmlinuz)

    This blog post explains how to extract and disassemble a Linux kernel image. It will cover the extract-vmlinux script, how to use objdump, and how to use /boot/System.map to locate functions and other symbols. Store Deb, RPM, RubyGem, and Python packages, free. Sign up! Extracting the Linux kernel image (vmlinuz) First, you’ll need to...

  • How does strace work?

    This blog post explains how strace works, internally. We’ll examine the ptrace system call, which strace relies on, at the API layer and internally to understand how exactly strace can get information about the system calls being made in a running process. ptrace ptrace is a system call which a program can use to:...

  • Announcing Repository Install and Package Download Statistics

    We just launched the API and graphs for Repository Install and Package Downloads statistics! Pagination and Metadata Pagination is handled similarly to the Package and Versions API, using the Link: response header. Metadata about the returned collection, such as Start-Date, End-Date, Total, and Per-Page, is also available in the response headers. NOTE: The default...

  • Acceptance Testing Using Capybara and PhantomJS

    Running acceptance tests against a full web stack, like PhantomJS, can decrease overall testing time by reducing the number dependencies (i.e. Xvfb) needed by your CI server. This post will go over how we package and distribute PhantomJS and how to write acceptance tests to catch JavaScript errors before they hit production. Benefits of...

  • Python PyPI repository internals

    This blog post dives in to the Python PyPI repository metadata format. We’ll cover the different metadata files that make up a PyPI repository, what the files mean, and show how a user can inspect metadata themselves. What is a Python PyPI repository? A Python PyPI repository is a collection of Python packages and...

  • Client updates roundup

    We’ve made a few changes and improvements to our client libraries. This short post aims to provide a quick summary. Look forward to these roundups as we continue to add features and improve our integrations. Latest Versions As of writing, these are the latest versions that support the features listed below. NOTE: the major...

  • Announcing PyPI repository support

    packagecloud now supports Python packages! You can upload Python source distributions, eggs, and wheels to public and private packagecloud repositories using our CLI or our API. You should update to the latest packagecloud CLI, version 0.2.28 (or newer) from RubyGems to upload python packages. Once you’ve uploaded your packages, you can add the repository...

  • RubyGem Index Internals

    This post briefly goes over the contents of a gem package, the RubyGem Gem::Specification, Gem::Indexer and Gem::Server classes, a breakdown of the different RubyGem index files (specs.4.8, prerelease_specs.4.8, and latest_specs.4.8) and how they are used when determining dependencies and installing gem packages onto a system. What’s in a gem? A gem is just a...

  • strace cheat sheet

    strace traces system calls and signals and is an invaluable tool for gathering context when debugging. This cheat sheet will show a few useful ways of using strace, how to filter the output, and summarize some of the more useful commands line arguments that strace accepts. strace PTRACE_TRACEME EPERM (Operation not permitted) You should...

  • Outage postmortem (2015-11-05)

    Incident summary This past Thursday (November 5, 2015), our primary database server had elevated error rates and was taken offline. It was determined that the cause of elevated error rates on that machine were due to some of the RAM on the machine going bad. The packagecloud website was taken down for approximately 35 minutes,...

  • Introducing the packagecloud ansible role

    We’ve just released a packagecloud ansible role for installing packagecloud.io repositories! Usage Here is an example using this role to install a public and private repository on all of our hosts. Note: This role only supports Debian and RedHat ansible os families. -- hosts: all roles: - { role: capotej.packagecloud, repository: capotej/apt-cacher-ng, os: ubuntu,...

  • Use alien to convert Deb to RPM (and RPM to Deb)

    Alien is a command line tool that allows you to convert Debian packages to RPM packages, and vice versa. This blog post will illustrate how to convert a Debian package to an RPM and similarly, how to convert an RPM package to a Debian package. Installing Alien Installation on Debian systems alien can usually...