<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Stefano Rivera (Posts about repository)</title><link>https://stefanorivera.com/</link><description></description><atom:link href="https://stefanorivera.com/categories/repository.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2025 &lt;a href="mailto:stefano@rivera.za.net"&gt;Stefano Rivera&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-SA"
     class="cc-license-button"
     src="/assets/img/cc-by-sa-4.0.svg"&gt;&lt;/a&gt;</copyright><lastBuildDate>Mon, 10 Nov 2025 10:14:01 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>My first (real) debian repo</title><link>https://stefanorivera.com/posts/2008/04/03/my-first-real-debian-repo/</link><dc:creator>Stefano Rivera</dc:creator><description>&lt;p&gt;Up to now, whenever I've needed a backport or debian recompile, I've done it locally. But finally last night, instead of studying for this morning's exam, I decided to do it properly.&lt;/p&gt;
&lt;p&gt;The tool for producing a debian archive tree is &lt;a href="https://salsa.debian.org/debian/reprepro"&gt;reprepro&lt;/a&gt;. There are a &lt;a href="http://www.debian-administration.org/articles/286"&gt;few&lt;/a&gt; &lt;a href="http://my.opera.com/atomo64/blog/howto-create-and-maintain-a-repository-using-reprepro-and-debabaretools?prevpoll=1"&gt;howtos&lt;/a&gt; out there for it, but none of them quite covered everything I needed. So this is &lt;em&gt;mine&lt;/em&gt;. But we'll get to that later, first we need to have some packages to put up.&lt;/p&gt;
&lt;p&gt;For building packages, I decided to do it properly and use &lt;a href="http://www.netfort.gr.jp/~dancer/software/pbuilder-doc/pbuilder-doc.html"&gt;pbuilder&lt;/a&gt;. Just install it:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;# aptitude install pbuilder cdebootstrap devscripts
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Make the following changes to &lt;code&gt;/etc/pbuilderrc&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;MIRRORSITE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nl"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;ftp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;debian&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;debian&lt;/span&gt;
&lt;span class="n"&gt;DEBEMAIL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="ss"&gt;"Your Name &amp;lt;you@example.com&amp;gt;"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The first, to point to your local mirror, and the second to credit you in the packages.&lt;/p&gt;
&lt;p&gt;Then, as root:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="c1"&gt;# pbuilder create --distribution etch --debootstrapopts --variant=buildd&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now, we can build a package, lets build the &lt;a href="http://packages.debian.org/lenny/hello"&gt;hello&lt;/a&gt; package:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;/tmp/packaging&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/tmp/packaging
$&lt;span class="w"&gt; &lt;/span&gt;gpg&lt;span class="w"&gt; &lt;/span&gt;--recv-key&lt;span class="w"&gt; &lt;/span&gt;3EF23CD6
$&lt;span class="w"&gt; &lt;/span&gt;dget&lt;span class="w"&gt; &lt;/span&gt;-x&lt;span class="w"&gt; &lt;/span&gt;http://ftp.uk.debian.org/debian/pool/main/h/hello/hello_2.2-2.dsc
dpkg-source:&lt;span class="w"&gt; &lt;/span&gt;extracting&lt;span class="w"&gt; &lt;/span&gt;hello&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;hello-2.2
dpkg-source:&lt;span class="w"&gt; &lt;/span&gt;unpacking&lt;span class="w"&gt; &lt;/span&gt;hello_2.2.orig.tar.gz
dpkg-source:&lt;span class="w"&gt; &lt;/span&gt;applying&lt;span class="w"&gt; &lt;/span&gt;./hello_2.2-2.diff.gz
$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;hello-2.2/
$&lt;span class="w"&gt; &lt;/span&gt;debchange&lt;span class="w"&gt; &lt;/span&gt;-n
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;dget and debchange are neat little utilities from &lt;code&gt;devscripts&lt;/code&gt;. You can configure them to know your name, e-mail address, etc. If you work with debian packages a lot, you'll get to know them well. Future versions of debchange support &lt;code&gt;--bpo&lt;/code&gt; for backports, but we use &lt;code&gt;-n&lt;/code&gt; which means new package. You should edit the version number in the top line to be a backport version, i.e.:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;bpo&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sr&lt;/span&gt;&lt;span class="mf"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;etch&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;backports&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;urgency&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;low&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rebuild&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;etch&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;backports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Your Name &amp;lt;you@example.com&amp;gt;  Wed,  2 Apr 2008 22:24:30 +0100&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now, let's build it. We are only doing a backport, but if you were making any changes, you'd do them before the next stage, and list them in the changelog you just edited:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;..
$&lt;span class="w"&gt; &lt;/span&gt;dpkg-source&lt;span class="w"&gt; &lt;/span&gt;-sa&lt;span class="w"&gt; &lt;/span&gt;-b&lt;span class="w"&gt; &lt;/span&gt;hello-2.2-2~bpo/
$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;pbuilder&lt;span class="w"&gt; &lt;/span&gt;build&lt;span class="w"&gt; &lt;/span&gt;hello_2.2-2~bpo-sr.1.dsc
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Assuming no errors, the built package will be sitting in &lt;code&gt;/var/cache/pbuilder/result/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now, for the repository:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;~/public_html/backports
$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~/public_html/backports
$&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;conf
$&lt;span class="w"&gt; &lt;/span&gt;cat&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;conf/distributions&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;&amp;lt; EOF&lt;/span&gt;
&lt;span class="s"&gt;Origin: Your Name&lt;/span&gt;
&lt;span class="s"&gt;Label: Your Name's Backports&lt;/span&gt;
&lt;span class="s"&gt;Suite: stable-backports&lt;/span&gt;
&lt;span class="s"&gt;Codename: etch-backports&lt;/span&gt;
&lt;span class="s"&gt;Version: 4.0&lt;/span&gt;
&lt;span class="s"&gt;Architectures: i386 all source&lt;/span&gt;
&lt;span class="s"&gt;Components: main&lt;/span&gt;
&lt;span class="s"&gt;Description: Your Name's repository of etch backports.&lt;/span&gt;
&lt;span class="s"&gt;SignWith: ABCDABCD&lt;/span&gt;
&lt;span class="s"&gt;NotAutomatic: yes&lt;/span&gt;
&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This file defines your repository. The codename will be the distribution you list in your &lt;code&gt;sources.list&lt;/code&gt;. The version should match it. The architectures are the architectures you are going to carry - "all" refers to non-architecture-specific packages, and source to source packages. I added amd64 to mine. SignWith is the ID of the GPG key you are going to use with this repo. I created a new DSA key for the job. NotAutomatic is a good setting for a backports repo, it means that packages won't be installed from here unless explicitly requested (via &lt;code&gt;package=version&lt;/code&gt; or &lt;code&gt;-d etch-backports&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Let's start by importing our source package:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/tmp/packaging
$&lt;span class="w"&gt; &lt;/span&gt;debsign&lt;span class="w"&gt; &lt;/span&gt;-kABCDABCD&lt;span class="w"&gt; &lt;/span&gt;hello_2.2-2~bpo-sr.1.dsc
$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~/public_html/backports
$&lt;span class="w"&gt; &lt;/span&gt;reprepro&lt;span class="w"&gt; &lt;/span&gt;-P&lt;span class="w"&gt; &lt;/span&gt;optional&lt;span class="w"&gt; &lt;/span&gt;-S&lt;span class="w"&gt; &lt;/span&gt;devel&lt;span class="w"&gt; &lt;/span&gt;--ask-passphrase&lt;span class="w"&gt; &lt;/span&gt;-Vb&lt;span class="w"&gt; &lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;includedsc&lt;span class="w"&gt; &lt;/span&gt;etch-backports&lt;span class="w"&gt; &lt;/span&gt;/tmp/packaging/hello_2.2-2~bpo-sr.1.dsc
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(There is currently a &lt;a href="http://bugs.debian.org/473609"&gt;known bug&lt;/a&gt; in reprepro's command-line handling. &lt;code&gt;-S&lt;/code&gt; and &lt;code&gt;-P&lt;/code&gt; are swapped.)&lt;/p&gt;
&lt;p&gt;Now, let's import our binary package:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;reprepro&lt;span class="w"&gt; &lt;/span&gt;--ask-passphrase&lt;span class="w"&gt; &lt;/span&gt;-Vb&lt;span class="w"&gt; &lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;includedeb&lt;span class="w"&gt; &lt;/span&gt;etch-backports&lt;span class="w"&gt; &lt;/span&gt;/var/cache/pbuilder/result/hello_2.2-2~bpo-sr.1_i386.deb
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Reprepro can be automated with it's &lt;code&gt;processincoming&lt;/code&gt; command, but that's beyond the scope of this howto.&lt;/p&gt;
&lt;p&gt;Test your new repository, add it to your &lt;code&gt;/etc/apt/sources.list&lt;/code&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="k"&gt;deb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;http://example.com/~you/backports&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kp"&gt;etch-backports&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kp"&gt;main&lt;/span&gt;

&lt;span class="c"&gt;# aptitude update&lt;/span&gt;
&lt;span class="c"&gt;# aptitude install hello=2.2-2~bpo-sr.1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Enjoy. My backports repository can be found &lt;a href="http://mirrors.tumbleweed.org.za/sr-backports/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><category>backport</category><category>debian</category><category>howto</category><category>repository</category><category>technical</category><guid>http://tumbleweed.org.za/2008/04/02/my-first-real-debian-repo</guid><pubDate>Wed, 02 Apr 2008 22:01:02 GMT</pubDate></item></channel></rss>