• 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. Create a package repository in less than 10 seconds, free. Sign up! Extracting the Linux kernel image (vmlinuz) First, you’ll...

  • 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...

  • Inspecting and extracting RPM package contents

    This post covers how to list files, show package information and extract the contents of an RPM package. There will be example commands presented for extracting RPM package files and showing information for packages that are both installed, and not-installed on a system. Extract files from an RPM (quick start) $ rpm2cpio ./packagecloud-test-1.1-1.x86_64.rpm |...

  • Inspecting and extracting Debian package contents

    This post covers how to list and extract the contents of a Debian package. There will be examples used to show how to list the contents of debian packages that are installed and not-installed on a system, as well as, how to extract the debian control information and program files. Related Post Inspecting and...

  • Package Managers and Puppet

    These are the slides from Joe Damato’s talk at PuppetConf 2015, titled “Package Managers and Puppet”. This talk covers: package managers, puppet, yum, apt, gpg, and more! Presentation

  • APT and YUM repository mirroring made easy

    Mirror your packagecloud.io APT and YUM repositories We’ve added a Mirroring tab to repository pages to make it super easy to mirror your YUM and APT repositories on packagecloud! Step by step directions and configuration data have been added so you don’t need to hunt down information from mailing lists or read perl source to...

  • Announcing Official Support for LinuxMint and Raspbian

    Support for LinuxMint and Raspbian LinuxMint and Raspbian are now officially supported by packagecloud! You can push and yank packages to both operating systems as you normally would. For example, to push file.deb to LinuxMint Rebecca: $ package_cloud push user/repo/linuxmint/rebecca file.deb Similarly, to push file.deb to Raspbian Wheezy: $ package_cloud push user/repo/raspbian/wheezy file.deb You can...

  • Infrastructure as code might be literally impossible

    UPDATE: 10/28/2015 Video of the talk is now available! This is the video and the slides from Joe Damato’s talk at Automacon 2015, titled “Infrastructure as code might be literally impossible”. This talk covers: package managers, puppet, chef, scary stories, and more! Video Slides

  • Announcing packagecloud Consulting Services

    We’re excited to announce packagecloud consulting services! We receive lots of email requests for help with packaging, build pipelines, automation, and software delivery. Check out our new services page for information on how we can help, initial rates, and get in touch with us! Deb and RPM packaging We’re experts at creating RPM and...

  • New Plans and Pricing!

    We’re excited to announce updated billing for packagecloud! These changes will allow most customers to upload a lot more packages while paying less money. Check out our new plans and billing FAQ on our pricing page. We’ll be following up with each customer via email to explain how the pricing changes will affect you....

  • APT repository internals

    Following up on our previous post about yum repository internals, this blog post will dive into the internals of APT repositories. Similarly, we’ll cover what each index file does and take a look at how a user can inspect and verify the metadata themselves. What is an APT repository? An APT repository is a...

  • yum repository internals

    This blog post will go into details on the internals of yum repositories by examining each of the index files created as part of yum repository’s metadata. We’ll cover what each index file means and take a look at how a user can inspect the metadata themselves. What is a yum repository? A yum...

  • Using dh-make to prepare debian packages

    This blog post will cover some basics about debian package names and version strings, and how to build debian packaging boilerplate using dh_make to streamline the creation of packages. Install the packaging essentials $ sudo apt-get install build-essential dh-make Understanding the package name and version Let’s assume we have an upstream source with the...

  • Announcing official support for Buildkite

    packagecloud is excited to officially announce support for Buildkite. Take a look at the updated docs with example configurations and information on how to push deb, rpm, and gem packages directly to packagecloud from your build process. The Continuous Integration tab on repository pages has also been updated to include Buildkite integration information. Buildkite...

  • Pruning packages using the API

    Since releasing the Packages & Versions API, several customers have used it prune packages in their repository, automatically yanking old packages as new ones are uploaded. This blog post will show an example of how to implement pruning yourself, using Ruby. Requirements To follow along, you’ll need a packagecloud.io account, an API Token, and...

  • Building RPM packages with rpmbuild

    This post will walk you through creating a RPM package from a simple hello world C program using rpmbuild. Setup On an RPM-based system, install the following programs: $ sudo yum install rpm-build Additionally, you can create an .rpmmacros file in your home directory, which rpmbuild can use for determining various settings. A helpful...

  • Announcing Web Delete

    We’re pleased to announce the ability to remove packages without relying on the CLI or constructing a request to the packagecloud API. Users can now delete packages directly from the web by visiting the repository page and clicking on the delete button associated with the package. How to delete a package from the web Step...

  • Building debian packages with debuild

    This post will walk you through creating a debian package from a simple hello world C program using debuild. Setup On a debian-based system, install the following programs: $ sudo apt-get install devscripts build-essential lintian Create an APT repository in less than 10 seconds, free. Sign up! The debuild tool debuild is a convenient...

  • Announcing Web Upload

    We’re excited to announce our web upload feature to the public. Users will now be able to upload packages directly to their public and private repositories from the web. How to upload a package from the web Step 1 - Select a repository and find the “Add a package” button. Step 2 - Choose a...

  • HOWTO: Set up a private gem server

    This post covers how to run a simple gem server to host your ruby gems. If you require the ability to push packages and host them, you can use something like the Gem in a Box Project. packagecloud.io is a hosted solution which allows you to push, host and manage gems in a secure...

  • Building Debian and Ubuntu packages with pbuilder

    pbuilder is a tool for building Debian and Ubuntu packages. You can use pbuilder to build packages for many different versions of Debian and Ubuntu. The main advantage of using pbuilder to build Debian and Ubuntu packages instead of debuild is that pbuilder builds Deb packages in a cleanroom environment. pbuilder does this by...

  • Building RPM packages with mock

    mock is a tool for building RPM packages. You can use mock to build packages for many different versions of CentOS/Red Hat and Fedora. The main advantage of using mock to build RPMs instead of rpmbuild is that mock builds RPMs in a cleanroom environment. mock does this by creating a chroot and performing...