<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://techblog.rudder.io/feed_style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <tabi:metadata xmlns:tabi="https://github.com/welpo/tabi">
        <tabi:base_url>https:&#x2F;&#x2F;techblog.rudder.io</tabi:base_url>
        <tabi:separator>
            •
        </tabi:separator>
        <tabi:about_feeds>This is a web feed, also known as an Atom feed. Subscribe by copying the URL from the address bar into your newsreader. Visit About Feeds to learn more and get started. It&#x27;s free.</tabi:about_feeds>
        <tabi:visit_the_site>Visit website</tabi:visit_the_site>
        <tabi:recent_posts>Recent posts</tabi:recent_posts>
        <tabi:last_updated_on>Updated on $DATE</tabi:last_updated_on>
        <tabi:default_theme></tabi:default_theme>
        <tabi:post_listing_date>date</tabi:post_listing_date>
        <tabi:current_section>patch-management</tabi:current_section>
    </tabi:metadata><link rel="extra-stylesheet" href="https://techblog.rudder.io/skins/rudder.css?h=c9deabdaf6426ebfe471" /><title>RudderTechBlog - patch-management</title>
        <subtitle>Rudder technical blog</subtitle>
    <link href="https://techblog.rudder.io/tags/patch-management/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://techblog.rudder.io/tags/patch-management/" rel="alternate" type="text/html"/>
    <generator uri="https://www.getzola.org/">Zola</generator><updated>2025-05-22T00:00:00+00:00</updated><id>https://techblog.rudder.io/tags/patch-management/atom.xml</id><entry xml:lang="en">
        <title>Rudder x Pulp: Own your repositories and include them in your patch management strategy</title>
        <published>2025-05-22T00:00:00+00:00</published>
        <updated>2025-05-22T00:00:00+00:00</updated>
        <author>
            <name>Robinson Maigné</name>
        </author>
        <link rel="alternate" href="https://techblog.rudder.io/blog/rudder-pulp-integration/" type="text/html"/>
        <id>https://techblog.rudder.io/blog/rudder-pulp-integration/</id>
        
            <content type="html">&lt;h2 id=&quot;what-you-will-find-in-this-article&quot;&gt;What you will find in this article&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Why managing your own software repositories is relevant?&lt;&#x2F;li&gt;
&lt;li&gt;What is Pulp and how to install it easily?&lt;&#x2F;li&gt;
&lt;li&gt;How to create your first Pulp repositories and how to distribute them?&lt;&#x2F;li&gt;
&lt;li&gt;How to configure Rudder to integrate the management of Pulp repository files?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;why-manage-your-own-software-repositories&quot;&gt;Why manage your own software repositories&lt;&#x2F;h2&gt;
&lt;p&gt;Managing your own software repositories has many upsides: control, customization, security as it enables you to implement your own security measures, dependency management, etc.&lt;&#x2F;p&gt;
&lt;p&gt;In particular, it is recommended as soon as one wants to control what packages are installed on an infrastructure. It is a key feature in patch management processes.
For instance, a standard patching strategy would involve updating development machines first and foremost. After confirming that the patch did not break anything, the pre-production machines would be updated. Only then can the patch be applied to production machines.
This process can take several weeks. Thus, when it’s time to upgrade production machines, the frozen repositories enable patching them similarly to the development machines. Otherwise, it wouldn’t be as relevant to test the first patch on development machines.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-is-pulp-and-how-does-it-supplement-rudder&quot;&gt;What is Pulp, and how does it supplement Rudder&lt;&#x2F;h2&gt;
&lt;p&gt;For those who have never heard of Pulp, it can be summarized as “Pulp is an open source project that makes it easy for developers to fetch, upload, organize and distribute Software Packages on-prem or in the cloud.” (source: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pulpproject.org&#x2F;&quot;&gt;official documentation&lt;&#x2F;a&gt;.)&lt;&#x2F;p&gt;
&lt;p&gt;Basically, it is a free software you can use to manage your own repositories in an optimized manner. Thus, it’s a good solution to supplement Rudder’s patch management solution. Rudder is also efficient at managing repository files.&lt;&#x2F;p&gt;
&lt;p&gt;Let’s draw a diagram of the two solutions complementing each other:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;techblog.rudder.io&#x2F;blog&#x2F;rudder-pulp-integration&#x2F;img&#x2F;diagram.svg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-to-install-pulp&quot;&gt;How to install Pulp&lt;&#x2F;h2&gt;
&lt;p&gt;For this lab, I recommend following the straightforward procedure to install Pulp in a Single container. The full procedure is accessible &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pulpproject.org&#x2F;pulp-oci-images&#x2F;docs&#x2F;admin&#x2F;tutorials&#x2F;quickstart&#x2F;#single-container&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;First, install &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;docker.io&quot;&gt;docker.io&lt;&#x2F;a&gt; and pull Pulp image:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo apt update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo apt install -y docker.io&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo docker pull pulp&#x2F;pulp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; mkdir -p pulp&#x2F;settings&#x2F;certs pulp&#x2F;pulp_storage pulp&#x2F;pgsql pulp&#x2F;containers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; cd pulp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; echo &amp;quot;CONTENT_ORIGIN=&amp;#39;http:&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;hostname&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;:8080&amp;#39;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; settings&#x2F;settings.py&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo docker run --detach&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;         --publish 8080:80&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;         --name pulp&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;         --volume &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;pwd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;&#x2F;settings&amp;quot;:&#x2F;etc&#x2F;pulp&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;         --volume &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;pwd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;&#x2F;pulp\_storage&amp;quot;:&#x2F;var&#x2F;lib&#x2F;pulp&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;         --volume &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;pwd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;&#x2F;pgsql&amp;quot;:&#x2F;var&#x2F;lib&#x2F;pgsql&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;         --volume &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-function z-builtin&quot;&gt;pwd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;&#x2F;containers&amp;quot;:&#x2F;var&#x2F;lib&#x2F;containers&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;         --device &#x2F;dev&#x2F;fuse&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-character z-escape&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-string&quot;&gt;         pulp&#x2F;pulp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; sudo docker exec -it pulp bash -c &amp;#39;pulpcore-manager reset-admin-password&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can choose admin as username and password.&lt;&#x2F;p&gt;
&lt;p&gt;You will also need to install pulp CLI:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; sudo apt install -y python3-pip python3-venv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; python3 -m venv pulp_env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; source pulp_env&#x2F;bin&#x2F;activate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pip install pulp-cli pulp-cli-deb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp config create --username admin --base-url http:&#x2F;&#x2F;localhost:8080 --password admin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Check the CLI is working:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb remote list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;create-your-first-own-software-repository&quot;&gt;Create your first own software repository&lt;&#x2F;h2&gt;
&lt;p&gt;For those unfamiliar with Pulp concepts such as &lt;em&gt;remote, repository, publication&lt;&#x2F;em&gt; and &lt;em&gt;distribution,&lt;&#x2F;em&gt; please check this &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pulpproject.org&#x2F;pulpcore&#x2F;docs&#x2F;user&#x2F;learn&#x2F;concepts&#x2F;&quot;&gt;documentation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;For this article, we arbitrarily chose to create a software repository for VS Code.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt; NAME=&amp;#39;visual-studio-code-stable-amd64&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; REMOTE_OPTIONS=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;--url&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;https:&#x2F;&#x2F;packages.microsoft.com&#x2F;repos&#x2F;code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;--distribution&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;stable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;--component&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-source&quot;&gt;--architecture&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;amd64&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-punctuation&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb remote create --name=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-variable z-source&quot;&gt;${NAME} ${REMOTE_OPTIONS&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;@&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-variable&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb repository create --name=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-variable&quot;&gt;${NAME}&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; --remote=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-variable&quot;&gt;${NAME}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb repository sync --name=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-variable&quot;&gt;${NAME}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb publication create --repository=&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-variable&quot;&gt;${NAME}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, we need to create a distribution for our development machines. You will need your publication’s &lt;code&gt;pulp_href&lt;&#x2F;code&gt; from the output of the last command.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb distribution create --name=dev-vscode --base-path=dev-vscode --publication=&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;publication_pulp_href&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If your patch management strategy includes pre-prod and prod machines, you will need to create distributions for those:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb distribution create --name=preprod-vscode --base-path=preprod-vscode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb distribution create --name=prod-vscode --base-path=prod-vscode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For now, those distributions point towards no publication.&lt;&#x2F;p&gt;
&lt;p&gt;After patching your development machines, you will want to patch preprod machines with the same patches. Then, you will need to update the preprod distribution:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb distribution update –name=preprod-vscode publication=&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt;publication_pulp_hre&lt;&#x2F;span&gt;&lt;span class=&quot;z-source&quot;&gt;f&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;configure-rudder-to-create-software-repository-files-and-configure-them-to-point-towards-pulp-distributions&quot;&gt;Configure Rudder to create software repository files and configure them to point towards Pulp distributions&lt;&#x2F;h2&gt;
&lt;p&gt;The following is made for Linux distributions having the apt package manager.&lt;&#x2F;p&gt;
&lt;p&gt;Please find the attached &lt;a href=&quot;https:&#x2F;&#x2F;techblog.rudder.io&#x2F;blog&#x2F;rudder-pulp-integration&#x2F;technique-pulp.yml&quot;&gt;&lt;code&gt;technique-pulp.yml&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; file. It is a Rudder technique in the YAML format.&lt;br &#x2F;&gt;
In Rudder, create a new technique, click on &lt;em&gt;YAML editor&lt;&#x2F;em&gt; button (1), copy the file’s content in the YAML editor (2). Then, &lt;em&gt;Save&lt;&#x2F;em&gt; the technique (3).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;techblog.rudder.io&#x2F;blog&#x2F;rudder-pulp-integration&#x2F;img&#x2F;technique.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This will create a technique that takes five parameters, whose role will be to configure a file and its permissions in the &lt;code&gt;&#x2F;etc&#x2F;apt&#x2F;sources.list.d&#x2F;&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt;
&lt;p&gt;Now, let’s instantiate this technique in creating the associated directive.&lt;br &#x2F;&gt;
Go the Directive menu (1), find &lt;em&gt;Configure pulp repo file&lt;&#x2F;em&gt; (2) (3)&lt;br &#x2F;&gt;
in the drop-down menu and click on &lt;em&gt;Create.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Then go to the &lt;em&gt;Parameters&lt;&#x2F;em&gt; tab (4):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;techblog.rudder.io&#x2F;blog&#x2F;rudder-pulp-integration&#x2F;img&#x2F;directive.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can fill the parameters according to your own customised repositories.&lt;&#x2F;p&gt;
&lt;p&gt;With the example given, it will be:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Repository name: vs-code&lt;&#x2F;em&gt; (5)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Repository distribution: stable&lt;&#x2F;em&gt; (7)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Repository component: main&lt;&#x2F;em&gt; (8)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Repository architecture:&lt;&#x2F;em&gt; &lt;em&gt;amd64&lt;&#x2F;em&gt; (9)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;&quot;&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;For the &lt;em&gt;Repository url&lt;&#x2F;em&gt; field (6), you will find it in the field &lt;code&gt;base_url&lt;&#x2F;code&gt; in the output when you created the pulp distribution.&lt;&#x2F;p&gt;
&lt;p&gt;You can also find it with the command:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name z-function&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; pulp deb distribution list --base-path dev-vscode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Once you successfully filled the parameters, you can select in the &lt;em&gt;Target rules&lt;&#x2F;em&gt; tab the adequate rule to apply the configuration on development machines.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;to-go-further&quot;&gt;&lt;strong&gt;To go further&lt;&#x2F;strong&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;If you wish to use Pulp for a production environment, we advise you to use the &lt;em&gt;pulp&#x2F;pulp:https&lt;&#x2F;em&gt; image and install it on multiple containers to be able to scale up (see &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pulpproject.org&#x2F;pulp-oci-images&#x2F;docs&#x2F;admin&#x2F;tutorials&#x2F;quickstart&#x2F;#podman-or-docker-compose&quot;&gt;Quickstart - Pulp Project&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;You will also find How-to guides to configure your own &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pulpproject.org&#x2F;pulp-oci-images&#x2F;docs&#x2F;admin&#x2F;guides&#x2F;configure-certificates&#x2F;&quot;&gt;SSL certificate&lt;&#x2F;a&gt; or your &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;pulpproject.org&#x2F;pulp-oci-images&#x2F;docs&#x2F;admin&#x2F;guides&#x2F;configure-database-encryption&#x2F;&quot;&gt;DB encryption&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        <summary type="html">Integrate Rudder with Pulp for a complete patch management strategy</summary>
        </entry>
</feed>
