<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Debian on Myon&#39;s Blog</title>
    <link>https://df7cb.de/blog/tags/debian.html</link>
    <description>Recent content in Debian on Myon&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 18 Mar 2024 15:22:23 +0100</lastBuildDate>
    <atom:link href="https://df7cb.de/blog/tags/debian/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>vcswatch and git --filter</title>
      <link>https://df7cb.de/blog/posts/2024/vcswatch-git-filter.html</link>
      <pubDate>Mon, 18 Mar 2024 15:22:23 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2024/vcswatch-git-filter.html</guid>
      <description>&lt;p&gt;Debian is running a &amp;ldquo;&lt;a href=&#34;https://qa.debian.org/cgi-bin/vcswatch&#34;&gt;vcswatch&lt;/a&gt;&amp;rdquo;&#xA;service that keeps track of the status of all packaging repositories that have a&#xA;&lt;a href=&#34;https://www.debian.org/doc/manuals/developers-reference/best-pkging-practices.de.html#vcs&#34;&gt;&lt;tt&gt;Vcs-Git&lt;/tt&gt;&lt;/a&gt;&#xA;(and other VCSes) header set and shows which repos might need a package upload to push pending changes out.&lt;/p&gt;&#xA;&lt;p&gt;Naturally, this is a lot of data and the scratch partition on qa.debian.org&#xA;had to be expanded several times, up to 300 GB in the last iteration.&#xA;Attempts to reduce that size using shallow clones (&lt;tt&gt;git clone &amp;ndash;depth=50&lt;/tt&gt;)&#xA;did not result more than a few percent of space saved. Running &lt;tt&gt;git gc&lt;/tt&gt; on&#xA;all repos helps a bit, but is tedious and as Debian is growing, the repos are&#xA;still growing both in size and number. I ended up blocking all repos with&#xA;checkouts larger than a gigabyte, and still the only cure was expanding the&#xA;disk, or to lower the blocking threshold.&lt;/p&gt;&#xA;&lt;p&gt;Since we only need a tiny bit of info from the repositories, namely the content&#xA;of &lt;tt&gt;debian/changelog&lt;/tt&gt; and a few other files from &lt;tt&gt;debian/&lt;/tt&gt;, plus&#xA;the number of commits since the last tag on the packaging branch, it made sense&#xA;to try to get the info without fetching a full repo clone. The question if we&#xA;could grab that solely using the GitLab API at salsa.debian.org was never&#xA;really answered. But then, in &lt;a href=&#34;https://bugs.debian.org/1032623&#34;&gt;#1032623&lt;/a&gt;,&#xA;Gábor Németh suggested the use of&#xA;&lt;a href=&#34;https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---filterltfilter-specgt&#34;&gt;&lt;tt&gt;git clone &amp;ndash;filter blob:none&lt;/tt&gt;&lt;/a&gt;.&#xA;As things go, this sat unattended in the bug report for almost a year until the&#xA;next &amp;ldquo;disk full&amp;rdquo; event made me give it a try.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;tt&gt;blob:none&lt;/tt&gt; filter makes git clone omit all files, fetching only commit and&#xA;tree information. Any blob (file content) needed at git run time is&#xA;transparently fetched from the upstream repository, and stored locally. It&#xA;turned out to be a game-changer. The (largish) repositories I tried it on&#xA;shrank to 1/100 of the original size.&lt;/p&gt;&#xA;&lt;p&gt;Poking around I figured we could even do better by using &lt;tt&gt;tree:0&lt;/tt&gt; as&#xA;filter. This additionally omits all trees from the git clone, again only&#xA;fetching the information at run time when needed. Some of the larger repos I&#xA;tried it on shrank to &lt;em&gt;1/1000&lt;/em&gt; of their original size.&lt;/p&gt;&#xA;&lt;p&gt;I deployed the new option on qa.debian.org and scheduled all repositories to&#xA;fetch a new clone on the next scan:&lt;/p&gt;&#xA;&lt;img src=&#34;https://www.df7cb.de/blog/2024/df-month.png&#34;&gt;&#xA;&lt;p&gt;The initial dip from 100% to 95% is my first &amp;ldquo;what happens if we block repos&#xA;&amp;gt; 500 MB&amp;rdquo; attempt. Over the week after that, the git filter clones reduce the&#xA;overall disk consumption from almost 300 GB to 15 GB, a &lt;em&gt;1/20&lt;/em&gt;. Some&#xA;repos shrank from GBs to below a MB.&lt;/p&gt;&#xA;&lt;p&gt;Perhaps I should make all my git clones use one of the filters.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PostgreSQL Popularity Contest</title>
      <link>https://df7cb.de/blog/posts/2023/popcon-postgresql.html</link>
      <pubDate>Sat, 26 Aug 2023 23:49:40 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2023/popcon-postgresql.html</guid>
      <description>&lt;p&gt;Back in 2015, when PostgreSQL 9.5 alpha 1 was released, I had posted the&#xA;&lt;a href=&#34;https://www.df7cb.de/blog/2015/PostgreSQL_9.5_in_Debian.html&#34;&gt;PostgreSQL data from Debian&amp;rsquo;s popularity contest&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;8 years and 8 PostgreSQL releases later, the graph now looks like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://qa.debian.org/popcon-graph.php?packages=postgresql+postgresql-7.4+postgresql-8.0+postgresql-8.1+postgresql-8.2+postgresql-8.3+postgresql-8.4+postgresql-9.0+postgresql-9.1+postgresql-9.2+postgresql-9.3+postgresql-9.4+postgresql-9.5+postgresql-9.6+postgresql-10+postgresql-11+postgresql-12+postgresql-13+postgresql-14+postgresql-15+postgresql-16&amp;show_installed=on&amp;want_legend=on&amp;want_ticks=on&amp;from_date=&amp;to_date=&amp;hlght_date=&amp;date_fmt=%25Y-%25m&amp;beenhere=1&#34;&gt;&lt;img src=&#34;https://www.df7cb.de/blog/2023/popcon-postgresql.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Currently, the most popular PostgreSQL on Debian systems is still PostgreSQL 13 (shipped in Bullseye), followed by PostgreSQL 11 (Buster). At the time of writing,&#xA;PostgreSQL 9.6 (Stretch) and PostgreSQL 15 (Bookworm) share the third place, with 15 rising quickly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PostgreSQL and Undelete</title>
      <link>https://df7cb.de/blog/posts/2021/postgresql-undelete.html</link>
      <pubDate>Thu, 18 Nov 2021 11:21:51 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2021/postgresql-undelete.html</guid>
      <description>&lt;h2 id=&#34;pg_dirtyread&#34;&gt;pg_dirtyread&lt;/h2&gt;&#xA;&lt;p&gt;Earlier this week, I updated &lt;a href=&#34;https://github.com/df7cb/pg_dirtyread&#34;&gt;pg_dirtyread&lt;/a&gt;&#xA;to work with &lt;a href=&#34;https://www.postgresql.org/docs/14/index.html&#34;&gt;PostgreSQL 14&lt;/a&gt;.&#xA;pg_dirtyread is a PostgreSQL extension that allows reading &amp;ldquo;dead&amp;rdquo; rows from&#xA;tables, i.e. rows that have already been deleted, or updated. Of course that&#xA;works only if the table has not been cleaned-up yet by a VACUUM command or&#xA;autovacuum, which is PostgreSQL&amp;rsquo;s garbage collection machinery.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s an example of pg_dirtyread in action:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# create table foo (id int, t text);&#xA;CREATE TABLE&#xA;# insert into foo values (1, &amp;#39;Doc1&amp;#39;);&#xA;INSERT 0 1&#xA;# insert into foo values (2, &amp;#39;Doc2&amp;#39;);&#xA;INSERT 0 1&#xA;# insert into foo values (3, &amp;#39;Doc3&amp;#39;);&#xA;INSERT 0 1&#xA;&#xA;# select * from foo;&#xA; id │  t&#xA;────┼──────&#xA;  1 │ Doc1&#xA;  2 │ Doc2&#xA;  3 │ Doc3&#xA;(3 rows)&#xA;&#xA;# delete from foo where id &amp;lt; 3;&#xA;DELETE 2&#xA;&#xA;# select * from foo;&#xA; id │  t&#xA;────┼──────&#xA;  3 │ Doc3&#xA;(1 row)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Oops! The first two documents have disappeared.&lt;/p&gt;&#xA;&lt;p&gt;Now let&amp;rsquo;s use pg_dirtyread to look at the table:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# create extension pg_dirtyread;&#xA;CREATE EXTENSION&#xA;&#xA;# select * from pg_dirtyread(&amp;#39;foo&amp;#39;) t(id int, t text);&#xA; id │  t&#xA;────┼──────&#xA;  1 │ Doc1&#xA;  2 │ Doc2&#xA;  3 │ Doc3&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;All three documents are still there, but only one of them is visible.&lt;/p&gt;&#xA;&lt;p&gt;pg_dirtyread can also show PostgreSQL&amp;rsquo;s system colums with the row location and&#xA;visibility information. For the first two documents, xmax is set, which means&#xA;the row has been deleted:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# select * from pg_dirtyread(&amp;#39;foo&amp;#39;) t(ctid tid, xmin xid, xmax xid, id int, t text);&#xA; ctid  │ xmin │ xmax │ id │  t&#xA;───────┼──────┼──────┼────┼──────&#xA; (0,1) │ 1577 │ 1580 │  1 │ Doc1&#xA; (0,2) │ 1578 │ 1580 │  2 │ Doc2&#xA; (0,3) │ 1579 │    0 │  3 │ Doc3&#xA;(3 rows)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;undelete&#34;&gt;Undelete&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Caveat:&lt;/strong&gt; &lt;em&gt;I&amp;rsquo;m not promising any of the ideas quoted below will actually work in&#xA;practice. There are a few caveats and a good portion of intricate knowledge&#xA;about the PostgreSQL internals might be required to succeed properly. Consider&#xA;consulting your favorite PostgreSQL support channel for advice if you need to&#xA;recover data on any production system.&lt;/em&gt; &lt;strong&gt;Don&amp;rsquo;t try this at work.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I always had plans to extend pg_dirtyread to include some &amp;ldquo;undelete&amp;rdquo; command to&#xA;make deleted rows reappear, but never got around to trying that. But rows can already be&#xA;restored by using the output of pg_dirtyread itself:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# insert into foo select * from pg_dirtyread(&amp;#39;foo&amp;#39;) t(id int, t text) where id = 1;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is not a true &amp;ldquo;undelete&amp;rdquo;, though - it just inserts new rows from the data&#xA;read from the table.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pg_surgery&#34;&gt;pg_surgery&lt;/h2&gt;&#xA;&lt;p&gt;Enter &lt;a href=&#34;https://www.postgresql.org/docs/current/pgsurgery.html&#34;&gt;pg_surgery&lt;/a&gt;,&#xA;which is a new PostgreSQL extension supplied with PostgreSQL 14. It contains&#xA;two functions to &amp;ldquo;perform surgery on a damaged relation&amp;rdquo;. As a side-effect,&#xA;they can also make delete tuples reappear.&lt;/p&gt;&#xA;&lt;p&gt;As I discovered now, one of the functions, heap_force_freeze(), works nicely&#xA;with pg_dirtyread. It takes a list of ctids (row locations) that it marks&#xA;&amp;ldquo;frozen&amp;rdquo;, but at the same time as &amp;ldquo;not deleted&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s apply it to our test table, using the ctids that pg_dirtyread can read:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# create extension pg_surgery;&#xA;CREATE EXTENSION&#xA;&#xA;# select heap_force_freeze(&amp;#39;foo&amp;#39;, array_agg(ctid))&#xA;    from pg_dirtyread(&amp;#39;foo&amp;#39;) t(ctid tid, xmin xid, xmax xid, id int, t text) where id = 1;&#xA; heap_force_freeze&#xA;───────────────────&#xA;&#xA;(1 row)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et voilà, our deleted document is back:&lt;/p&gt;</description>
    </item>
    <item>
      <title>arm64 on apt.postgresql.org</title>
      <link>https://df7cb.de/blog/posts/2020/arm64-on-apt.postgresql.org.html</link>
      <pubDate>Mon, 04 May 2020 14:28:54 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2020/arm64-on-apt.postgresql.org.html</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://apt.postgresql.org/&#34;&gt;apt.postgresql.org&lt;/a&gt; repository has been extended&#xA;to cover the &lt;em&gt;arm64&lt;/em&gt; architecture.&lt;/p&gt;&#xA;&lt;p&gt;We had occasionally received user request to add &amp;ldquo;arm&amp;rdquo; in the past, but it was&#xA;never really clear which kind of &amp;ldquo;arm&amp;rdquo; made sense to target for PostgreSQL. In&#xA;terms of Debian architectures, there&amp;rsquo;s (at least) armel, armhf, and arm64.&#xA;Furthermore, Raspberry Pis are very popular (and indeed what most users seemed&#xA;to were asking about), but the raspbian &amp;ldquo;armhf&amp;rdquo; port is incompatible with the&#xA;Debian &amp;ldquo;armhf&amp;rdquo; port.&lt;/p&gt;&#xA;&lt;p&gt;Now that most hardware has moved to 64-bit, it was becoming clear that &amp;ldquo;arm64&amp;rdquo;&#xA;was the way to go. Amit Khandekar made it happen that&#xA;&lt;a href=&#34;https://intl.huaweicloud.com/en-us/&#34;&gt;HUAWEI Cloud Services&lt;/a&gt;&#xA;donated a arm64 build host with enough resources to build the arm64 packages&#xA;at the same speed as the existing amd64, i386, and ppc64el architectures.&#xA;A few days later, all the build jobs were done, including passing all&#xA;test-suites. Very few arm-specific issues were encountered which makes me&#xA;confident that arm64 is a solid architecture to run PostgreSQL on.&lt;/p&gt;&#xA;&lt;p&gt;We are targeting Debian buster (stable), bullseye (testing), and sid&#xA;(unstable), and Ubuntu bionic (18.04) and focal (20.04). To use the arm64&#xA;archive, just add the normal sources.list entry:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;deb https://apt.postgresql.org/pub/repos/apt buster-pgdg main&#xA;&lt;/pre&gt;&#xA;&lt;h2&gt;Ubuntu focal&lt;/h2&gt;&#xA;&lt;p&gt;At the same time, I&amp;rsquo;ve added the next Ubuntu LTS release to apt.postgresql.org:&#xA;focal (20.04). It ships amd64, arm64, and ppc64el binaries.&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;deb https://apt.postgresql.org/pub/repos/apt focal-pgdg main&#xA;&lt;/pre&gt;&#xA;&lt;h2&gt;Old PostgreSQL versions&lt;/h2&gt;&#xA;&lt;p&gt;Many PostgreSQL extensions are still supporting older server versions that are&#xA;EOL. For testing these extension, server packages need to be available. I&amp;rsquo;ve&#xA;built packages for PostgreSQL 9.2+ on all Debian distributions, and all Ubuntu&#xA;LTS distributions. 9.1 will follow shortly.&lt;/p&gt;&#xA;&lt;p&gt;This means people can move to newer base distributions in their .travis.yml,&#xA;.gitlab-ci.yml, and other CI files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing apt-archive.postgresql.org</title>
      <link>https://df7cb.de/blog/posts/2020/apt-archive.postgresql.org.html</link>
      <pubDate>Tue, 24 Mar 2020 12:08:48 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2020/apt-archive.postgresql.org.html</guid>
      <description>&lt;p&gt;Users had often asked where they could find older versions of packages from&#xA;&lt;a href=&#34;https://apt.postgresql.org/&#34;&gt;apt.postgresql.org&lt;/a&gt;. I had been&#xA;collecting these since about April 2013, and in July 2016, I made the packages&#xA;available via an ad-hoc URL on the repository master host, called &amp;ldquo;the morgue&amp;rdquo;.&#xA;There was little repository structure, all files belonging to a source package&#xA;were stuffed into a single directory, no matter what distribution they belonged&#xA;to. Besides this not being particularly accessible for users, the main problem&#xA;was the ever-increasing need for more disk space on the repository host. We are&#xA;now at 175 GB for the archive, of which 152 GB is for the morgue.&lt;/p&gt;&#xA;&lt;p&gt;Our friends from &lt;a href=&#34;https://yum.postgresql.org/&#34;&gt;yum.postgresql.org&lt;/a&gt;&#xA;have had a proper archive host (yum-archive.postgresql.org) for some time&#xA;already, so it was about time to follow suit and implement a proper archive&#xA;for apt.postgresql.org as well, usable from apt.&lt;/p&gt;&#xA;&lt;p&gt;So here it is:&#xA;&lt;b&gt;&lt;a href=&#34;https://apt-archive.postgresql.org/&#34;&gt;apt-archive.postgresql.org&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&#xA;&lt;p&gt;The archive covers all past and current Debian and Ubuntu distributions. The&#xA;apt sources.lists entries are similar to the main repository, just with &amp;ldquo;-archive&amp;rdquo;&#xA;appended to the host name and the&#xA;&lt;a href=&#34;https://apt-archive.postgresql.org/pub/repos/apt/dists/index.html&#34;&gt;distribution&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;deb https://apt-archive.postgresql.org/pub/repos/apt DIST-pgdg-archive main&#xA;deb-src https://apt-archive.postgresql.org/pub/repos/apt DIST-pgdg-archive main&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;The oldest PostgreSQL server versions covered there are 8.2.23, 8.3.23, 8.4.17,&#xA;9.0.13, 9.1.9, 9.2.4, 9.3beta1, and everything newer.&lt;/p&gt;&#xA;&lt;p&gt;Some example:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;$ apt-cache policy postgresql-12&#xA;postgresql-12:&#xA;  Installed: 12.2-2.pgdg+1+b1&#xA;  Candidate: 12.2-2.pgdg+1+b1&#xA;  Version table:&#xA; *** 12.2-2.pgdg+1+b1 900&#xA;        500 http://apt.postgresql.org/pub/repos/apt sid-pgdg/main amd64 Packages&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;        100 /var/lib/dpkg/status&#xA;     12.2-2.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12.2-1.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12.1-2.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12.1-1.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12.0-2.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12.0-1.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12~rc1-1.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12~beta4-1.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12~beta3-1.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12~beta2-1.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;     12~beta1-1.pgdg+1 500&#xA;        500 https://apt-archive.postgresql.org/pub/repos/apt sid-pgdg-archive/main amd64 Packages&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Because this is hosted on S3, browsing directories is only supported indirectly by&#xA;static index.html files, so if you want to look at some specific URL, append&#xA;&amp;ldquo;/index.html&amp;rdquo; to see it.&lt;/p&gt;&#xA;&lt;p&gt;The archive is powered by a&#xA;&lt;a href=&#34;https://git.postgresql.org/gitweb/?p=pgapt.git;a=tree;f=pgapt-db/sql&#34;&gt;PostgreSQL database&lt;/a&gt; and a&#xA;&lt;a href=&#34;https://git.postgresql.org/gitweb/?p=pgapt.git;a=tree;f=repo/bin&#34;&gt;bunch of python/shell scripts&lt;/a&gt;,&#xA;from which the apt index files are built.&lt;/p&gt;&#xA;&lt;h2&gt;Archiving old distributions&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m also using the opportunity to remove some long-retired distributions from the main&#xA;repository host. The following distributions have been moved over:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Debian etch (4.0)&lt;/li&gt;&#xA;&lt;li&gt;Debian lenny (5.0)&lt;/li&gt;&#xA;&lt;li&gt;Debian squeeze (6.0)&lt;/li&gt;&#xA;&lt;li&gt;Ubuntu lucid (10.04)&lt;/li&gt;&#xA;&lt;li&gt;Ubuntu saucy (13.10)&lt;/li&gt;&#xA;&lt;li&gt;Ubuntu utopic (14.10)&lt;/li&gt;&#xA;&lt;li&gt;Ubuntu wily (15.10)&lt;/li&gt;&#xA;&lt;li&gt;Ubuntu zesty (17.04)&lt;/li&gt;&#xA;&lt;li&gt;Ubuntu cosmic (18.10)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;They are available as &amp;ldquo;&lt;em&gt;DIST&lt;/em&gt;-pgdg&amp;rdquo; from the archive, e.g. squeeze:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;deb https://apt-archive.postgresql.org/pub/repos/apt squeeze-pgdg main&#xA;deb-src https://apt-archive.postgresql.org/pub/repos/apt squeeze-pgdg main&#xA;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Cool Unix Features: paste</title>
      <link>https://df7cb.de/blog/posts/2018/paste.html</link>
      <pubDate>Fri, 09 Mar 2018 10:06:21 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2018/paste.html</guid>
      <description>&lt;p&gt;&lt;em&gt;paste&lt;/em&gt; is one of those tools nobody uses [1]. It puts two file side by side,&#xA;line by line.&lt;/p&gt;&#xA;&lt;p&gt;One application for this came up today where some tool was called for several&#xA;files at once and would spit out one line by file, but unfortunately not&#xA;including the filename.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ paste &amp;lt;(ls *.rpm) &amp;lt;(ls *.rpm | xargs -r rpm -q --queryformat &#39;%{name} \n&#39; -p)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;[1] See &amp;ldquo;J&amp;rdquo; in &lt;a href=&#34;http://ifaq.wap.org/computers/abcsofunix.html&#34;&gt;The ABCs of Unix&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;[&lt;em&gt;PS: I meant to blog this in 2011, but apparently never committed the file&amp;hellip;&lt;/em&gt;]&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stepping down as DAM</title>
      <link>https://df7cb.de/blog/posts/2018/Stepping_down_as_DAM.html</link>
      <pubDate>Fri, 09 Mar 2018 09:58:06 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2018/Stepping_down_as_DAM.html</guid>
      <description>&lt;p&gt;After quite some time (years actually) of inactivity as&#xA;&lt;a href=&#34;https://www.debian.org/intro/organization#dam&#34;&gt;Debian Account Manager&lt;/a&gt;,&#xA;I finally decided to give back that Debian hat.&#xA;&lt;a href=&#34;https://lists.debian.org/debian-devel-announce/2018/03/msg00001.html&#34;&gt;I&amp;rsquo;m stepping down as DAM&lt;/a&gt;.&#xA;I will still be around for the occasional comment from the peanut gallery, or&#xA;to provide input if anyone actually cares to ask me about the old times.&lt;/p&gt;&#xA;&lt;p&gt;Thanks for the fish!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Salsa batch import</title>
      <link>https://df7cb.de/blog/posts/2017/Salsa_batch_import.html</link>
      <pubDate>Sun, 04 Feb 2018 09:21:05 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2017/Salsa_batch_import.html</guid>
      <description>&lt;p&gt;Now that &lt;a href=&#34;https://salsa.debian.org/&#34;&gt;Salsa&lt;/a&gt; is in&#xA;&lt;a href=&#34;http://blog.snow-crash.org/blog/salsa.debian.org-git.debian.org-replacement-going-into-beta/&#34;&gt;beta&lt;/a&gt;,&#xA;it&amp;rsquo;s time to import projects (= GitLab speak for &amp;ldquo;repository&amp;rdquo;). This is&#xA;probably best done automated. Head to&#xA;&lt;a href=&#34;https://salsa.debian.org/profile/personal_access_tokens&#34;&gt;Access Tokens&lt;/a&gt;&#xA;and generate a token with &amp;ldquo;api&amp;rdquo; scope, which you can then use with curl:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;$ cat salsa-import&#xA;#!/bin/sh&#xA;&#xA;set -eux&#xA;&#xA;PROJECT=&#34;${1%.git}&#34;&#xA;DESCRIPTION=&#34;$PROJECT packaging&#34;&#xA;ALIOTH_URL=&#34;https://anonscm.debian.org/git&#34;&#xA;ALIOTH_GROUP=&#34;collab-maint&#34;&#xA;SALSA_URL=&#34;https://salsa.debian.org/api/v4&#34;&#xA;SALSA_GROUP=&#34;debian&#34; # &#34;debian&#34; has id 2&#xA;SALSA_TOKEN=&#34;yourcryptictokenhere&#34;&#xA;&#xA;# map group name to namespace id (this is slow on large groups, see https://gitlab.com/gitlab-org/gitlab-ce/issues/42415)&#xA;SALSA_NAMESPACE=$(curl -s https://salsa.debian.org/api/v4/groups/$SALSA_GROUP | jq &#39;.id&#39;)&#xA;&#xA;# trigger import&#xA;curl -f &#34;$SALSA_URL/projects?private_token=$SALSA_TOKEN&#34; \&#xA;  --data &#34;path=$PROJECT&amp;namespace_id=$SALSA_NAMESPACE&amp;description=$DESCRIPTION&amp;import_url=$ALIOTH_URL/$ALIOTH_GROUP/$PROJECT&amp;visibility=public&#34;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;This will create the GitLab project in the chosen namespace, and import the repository from Alioth.&lt;/p&gt;&#xA;&lt;p&gt;Pro tip: To import a whole Alioth group to GitLab, run this on Alioth:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;for f in *.git; do sh salsa-import $f; done&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;(&lt;em&gt;Update 2018-02-04&lt;/em&gt;: Query namespace ID via the API)&lt;/p&gt;</description>
    </item>
    <item>
      <title>vcswatch is now looking for tags</title>
      <link>https://df7cb.de/blog/posts/2016/vcswatch_is_now_looking_for_tags.html</link>
      <pubDate>Sun, 29 May 2016 19:49:28 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2016/vcswatch_is_now_looking_for_tags.html</guid>
      <description>&lt;p&gt;About a week ago, I extended&#xA;&lt;em&gt;&lt;a href=&#34;https://qa.debian.org/cgi-bin/vcswatch&#34;&gt;vcswatch&lt;/a&gt;&lt;/em&gt;&#xA;to also look at tags in git repositories.&lt;/p&gt;&#xA;&lt;p&gt;Previously, it was solely paying attention to the version number in the top&#xA;paragraph in debian/changelog, and would alert if that version didn&amp;rsquo;t match the&#xA;package version in Debian unstable or experimental. The idea is that &lt;em&gt;&amp;ldquo;UNRELEASED&amp;rdquo;&lt;/em&gt;&#xA;versions will keep nagging the maintainer&#xA;(via &lt;a href=&#34;https://qa.debian.org/developer.php&#34;&gt;DDPO&lt;/a&gt;)&#xA;not to forget that some day this package needs an upload. This works for git,&#xA;svn, bzr, hg, cvs, mtn, and darcs repositories (in decreasing order of actual&#xA;usage numbers in Debian. I had actually tried to add arch support as well, but&#xA;that VCS is so weird that it wasn&amp;rsquo;t worth the trouble).&lt;/p&gt;&#xA;&lt;p&gt;There are several shortcomings in that simple approach:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some packages update debian/changelog only at release time, e.g. auto-generated from the git changelog using &lt;em&gt;git-dch&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Missing or misplaced release tags are not detected&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The new mechanism fixes this for git repositories by also looking at the output&#xA;of &lt;em&gt;git describe &amp;ndash;tags&lt;/em&gt;. If there are any commits since the last tag, and the&#xA;vcswatch status according to debian/changelog would otherwise be &lt;em&gt;&amp;ldquo;OK&amp;rdquo;&lt;/em&gt;, a new&#xA;status &lt;em&gt;&amp;ldquo;COMMITS&amp;rdquo;&lt;/em&gt; is set. DDPO will report e.g. &amp;ldquo;1.4-1+2&amp;rdquo;, to be read as &amp;ldquo;2&#xA;commits since the tag [debian/]1.4-1&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Of the 16644 packages using git in Debian, currently 7327 are &amp;ldquo;OK&amp;rdquo;, 2649 are in&#xA;the new &amp;ldquo;COMMITS&amp;rdquo; state, and 4227 are &amp;ldquo;NEW&amp;rdquo;. 723 are &amp;ldquo;OLD&amp;rdquo; and 79 are &amp;ldquo;UNREL&amp;rdquo;&#xA;which indicates that the package in Debian is ahead of the git repository. 1639&#xA;are in an ERROR state.&lt;/p&gt;&#xA;&lt;p&gt;So far the new mechanism works for git only, but other VCSes could be added as&#xA;well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>10 Years Debian Developer</title>
      <link>https://df7cb.de/blog/posts/2015/10_Years_Debian_Developer.html</link>
      <pubDate>Sat, 05 Sep 2015 23:43:30 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2015/10_Years_Debian_Developer.html</guid>
      <description>&lt;p&gt;I knew it was about this time of the year 10 years ago when my Debian account&#xA;was created, but I couldn&amp;rsquo;t remember the exact date until I looked it up&#xA;earlier this evening: today :). Rene Engelhard had been my advocate, and Marc&#xA;Brockschmidt my AM. Thanks guys!&lt;/p&gt;&#xA;&lt;p&gt;A lot of time has passed since then, and I&amp;rsquo;ve worked in various parts of the&#xA;project. I became an application manager almost immediately, and quickly got&#xA;into the NM front desk as well, revamping parts of the NM process which had&#xA;become pretty bureaucratic (I think we are now, 10 years later, back where we&#xA;should be, thanks to almost all of the paperwork being automated, thanks&#xA;Enrico!). I&amp;rsquo;ve processed 37 NMs, most of them between 2005 and 2008, later I&#xA;was only active as front desk and eventually Debian account manager. I&amp;rsquo;ve&#xA;recently picked up AMing again, which I still find quite refreshing as the AM&#xA;will always also learn new things.&lt;/p&gt;&#xA;&lt;p&gt;Quality Assurance was and is the other big field. Starting by doing QA uploads&#xA;of orphaned packages, I attended some QA meetings around Germany, and picked up&#xA;maintenance of the DDPO pages, which I still maintain. The link between QA and&#xA;NM is the MIA team where I was active for some years until they kindly kicked&#xA;me out because I was MIA there myself. I&amp;rsquo;m glad they are still using some of&#xA;the scripts I was writing to automate some things.&lt;/p&gt;&#xA;&lt;p&gt;My favorite MUA is mutt, of which I became co-maintainer in 2007, and later&#xA;maintainer. I&amp;rsquo;m still listed in the uploaders field, but admittedly I haven&amp;rsquo;t&#xA;really done anything there lately.&lt;/p&gt;&#xA;&lt;p&gt;Also in 2007 I started working at credativ, after having been a research&#xA;assistant at the university, which meant making my Debian work professional. Of&#xA;course it also meant more real work and less time for the hobby part, but I was&#xA;still very active around that time. Later in 2010 I was marrying, and we got&#xA;two kids, at which point family was of course much more important, so my Debian&#xA;involvement dropped to a minimum. (Mostly lurking on IRC ;)&lt;/p&gt;&#xA;&lt;p&gt;Being a PostgreSQL consultant at work, it was natural to start looking into the&#xA;packaging, so I started submitting patches to postgresql-common in 2011, and&#xA;became a co-maintainer in 2012. Since then, I&amp;rsquo;ve mostly been working on&#xA;PostgreSQL-related packages, of which far too many have my (co-)maintainer&#xA;stamp on them. To link the Debian and PostgreSQL worlds together, we started an&#xA;external repository (apt.postgresql.org) that contains packages for the&#xA;PostgreSQL major releases that Debian doesn&amp;rsquo;t ship. Most of my open source time&#xA;at the moment is spent on getting all PostgreSQL packages in shape for Debian&#xA;and this repository.&lt;/p&gt;&#xA;&lt;p&gt;According to minechangelogs, currently 844 changelog entries in Debian mention&#xA;my name, or were authored by me. Scrolling back yields memories of packages&#xA;that are long gone again from unstable, or I passed on to other maintainers.&#xA;There are way too many people in Debian that I enjoy(ed) working with to list&#xA;them here, and many of them are my friends. Debian is really the extended&#xA;family on the internet. My last DebConf before this year had been in Mar del&#xA;Plata - I had met some people at other conferences like FOSDEM, but meeting&#xA;(almost) everyone again in Heidelberg was very nice. I even remembered all&#xA;basic Mao rules :D.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PostgreSQL 9.5 in Debian</title>
      <link>https://df7cb.de/blog/posts/2015/PostgreSQL_9.5_in_Debian.html</link>
      <pubDate>Thu, 02 Jul 2015 20:41:07 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2015/PostgreSQL_9.5_in_Debian.html</guid>
      <description>&lt;p&gt;Today saw the release of PostgreSQL 9.5 Alpha 1. Packages for all supported&#xA;Debian and Ubuntu releases are available on &lt;a href=&#34;http://apt.postgresql.org/&#34;&gt;apt.postgresql.org&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;tt&gt;&#xA;deb http://apt.postgresql.org/pub/repos/apt/ &lt;i&gt;YOUR_RELEASE_HERE&lt;/i&gt;-pgdg main 9.5&#xA;&lt;/tt&gt;&#xA;&lt;p&gt;The package is also waiting in NEW to be accepted for Debian experimental.&lt;/p&gt;&#xA;&lt;p&gt;Being curious which PostgreSQL releases have been in use over time, I pulled some graphics&#xA;from &lt;a href=&#34;https://qa.debian.org/popcon-graph.php?packages=postgresql+postgresql-7.4+postgresql-8.0+postgresql-8.1+postgresql-8.2+postgresql-8.3+postgresql-8.4+postgresql-9.0+postgresql-9.1+postgresql-9.2+postgresql-9.3+postgresql-9.4+postgresql-9.5&amp;show_installed=on&amp;want_legend=on&amp;want_ticks=on&amp;from_date=&amp;to_date=&amp;hlght_date=&amp;date_fmt=%25Y-%25m&amp;beenhere=1&#34;&gt;Debian&amp;rsquo;s popularity contest data&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://qa.debian.org/popcon-graph.php?packages=postgresql+postgresql-7.4+postgresql-8.0+postgresql-8.1+postgresql-8.2+postgresql-8.3+postgresql-8.4+postgresql-9.0+postgresql-9.1+postgresql-9.2+postgresql-9.3+postgresql-9.4+postgresql-9.5&amp;show_installed=on&amp;want_legend=on&amp;want_ticks=on&amp;from_date=&amp;to_date=&amp;hlght_date=&amp;date_fmt=%25Y-%25m&amp;beenhere=1&#34;&gt;&lt;img src=&#34;https://www.df7cb.de/blog/2015/popcon-postgresql.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before we included the PostgreSQL major version in the package name,&#xA;&amp;ldquo;postgresql&amp;rdquo; contained the server, so that line represents the installation&#xA;count of the pre-7.4 releases at the left end of the graph.&lt;/p&gt;&#xA;&lt;p&gt;Interestingly, 7.4 reached its installation peak well past 8.1&amp;rsquo;s. Does anyone have an&#xA;idea why that happened?&lt;/p&gt;</description>
    </item>
    <item>
      <title>apt.postgresql.org statistics</title>
      <link>https://df7cb.de/blog/posts/2015/apt.postgresql.org_statistics.html</link>
      <pubDate>Wed, 04 Feb 2015 11:24:22 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2015/apt.postgresql.org_statistics.html</guid>
      <description>&lt;p&gt;At this year&amp;rsquo;s FOSDEM I gave a talk in the PostgreSQL devroom&#xA;about &lt;a href=&#34;https://www.df7cb.de/projects/talks/2015-FOSDEM/&#34;&gt;&#xA;Large Scale Quality Assurance in the PostgreSQL Ecosystem&lt;/a&gt;.&#xA;The talk included a graph about the growth of the&#xA;&lt;a href=&#34;https://apt.postgresql.org/&#34;&gt;apt.postgresql.org&lt;/a&gt;&#xA;repository that I want to share here as well:&lt;/p&gt;&#xA;&lt;img src=&#34;https://www.df7cb.de/blog/2015/apt-stats.png&#34;&gt;&#xA;&lt;p&gt;The yellow line at the very bottom is the number of different source package&#xA;names, currently 71. From that, a somewhat larger number of actual source&#xA;packages that include the &amp;ldquo;pgdgXX&amp;rdquo; version suffixes targeting the various&#xA;distributions we have is built (blue). The number of different binary package&#xA;names (green) is in about the same range. The dimension explosion then happens&#xA;for the actual number of binary packages (black, almost 8000) targeting all&#xA;distributions and architectures.&lt;/p&gt;&#xA;&lt;p&gt;The red line is the total size of the pool/ directory, currently a bit less&#xA;than 6GB.&lt;/p&gt;&#xA;&lt;p&gt;(The graphs sometimes decrease when packages in the -testing distributions are&#xA;promoted to the live distributions and the old live packages get removed.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>New urxvt in current directory</title>
      <link>https://df7cb.de/blog/posts/2014/New_urxvt_tab_in_current_directory.html</link>
      <pubDate>Wed, 09 Jul 2014 19:14:03 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2014/New_urxvt_tab_in_current_directory.html</guid>
      <description>&lt;p&gt;Following Enrico&amp;rsquo;s&#xA;&lt;a href=&#34;http://www.enricozini.org/2014/debian/terminal-emulators/&#34;&gt;terminal-emulators&lt;/a&gt;&#xA;comparison, I wanted to implement &amp;ldquo;start a new terminal tab in my current&#xA;working directory&amp;rdquo; for rxvt-unicode aka urxvt. As Enrico notes, this&#xA;functionality is something between &amp;ldquo;rather fragile&amp;rdquo; and non-existing, so I went&#xA;to implement it myself. Martin Pohlack had the&#xA;&lt;a href=&#34;http://permalink.gmane.org/gmane.comp.terminal-emulators.rxvt-unicode.general/1175&#34;&gt;&#xA;right hint&lt;/a&gt;, so here&amp;rsquo;s the patch:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;--- /usr/lib/urxvt/perl/tabbed&#x9;2014-05-03 21:37:37.000000000 +0200&#xA;--- ./tabbed&#x9;2014-07-09 18:50:26.000000000 +0200&#xA;@@ -97,6 +97,16 @@&#xA;       $term-&gt;resource (perl_ext_2 =&gt; $term-&gt;resource (&#34;perl_ext_2&#34;) . &#34;,-tabbed&#34;);&#xA;    };&#xA; &#xA;+   if (@{ $self-&gt;{tabs} }) {&#xA;+      # Get the working directory of the current tab and append a -cd to the command line&#xA;+      my $pid = $self-&gt;{cur}{pid};&#xA;+      my $pwd = readlink &#34;/proc/$pid/cwd&#34;;&#xA;+      #print &#34;pid $pid pwd $pwd\n&#34;;&#xA;+      if ($pwd) {&#xA;+         push @argv, &#34;-cd&#34;, $pwd;&#xA;+      }&#xA;+   }&#xA;+&#xA;    push @urxvt::TERM_EXT, urxvt::ext::tabbed::tab::;&#xA; &#xA;    my $term = new urxvt::term&#xA;@@ -312,6 +322,12 @@&#xA;    1&#xA; }&#xA; &#xA;+sub tab_child_start {&#xA;+   my ($self, $term, $pid) = @_;&#xA;+   $term-&gt;{pid} = $pid;&#xA;+   1;&#xA;+}&#xA;+&#xA; sub tab_start {&#xA;    my ($self, $tab) = @_;&#xA; &#xA;@@ -402,7 +418,7 @@&#xA; # simply proxies all interesting calls back to the tabbed class.&#xA; &#xA; {&#xA;-   for my $hook (qw(start destroy key_press property_notify)) {&#xA;+   for my $hook (qw(start destroy key_press property_notify child_start)) {&#xA;       eval qq{&#xA;          sub on_$hook {&#xA;             my \$parent = \$_[0]{term}{parent}&#xA;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Comparing Version Numbers in Shell</title>
      <link>https://df7cb.de/blog/posts/2014/Comparing_Version_Numbers_in_Shell.html</link>
      <pubDate>Wed, 25 Jun 2014 09:56:50 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2014/Comparing_Version_Numbers_in_Shell.html</guid>
      <description>&lt;p&gt;On RedHat/CentOS/rpm systems, there&amp;rsquo;s no &lt;i&gt;dpkg &amp;ndash;compare-versions&lt;/i&gt;&#xA;available - &lt;i&gt;sort -V&lt;/i&gt; can help to compare version numbers:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;version_lt () {&#xA;    newest=$( ( echo &amp;quot;$1&amp;quot;; echo &amp;quot;$2&amp;quot; ) | sort -V | tail -n1)&#xA;    [ &amp;quot;$1&amp;quot; != &amp;quot;$newest&amp;quot; ]&#xA;}&#xA;&#xA;$ version_lt 1.5 1.1 &amp;amp;&amp;amp; echo yes&#xA;$ version_lt 1.5 1.10 &amp;amp;&amp;amp; echo yes&#xA;yes&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>PostgreSQL 9.4 on Debian</title>
      <link>https://df7cb.de/blog/posts/2014/PostgreSQL_9.4_on_Debian.html</link>
      <pubDate>Fri, 16 May 2014 07:54:27 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2014/PostgreSQL_9.4_on_Debian.html</guid>
      <description>&lt;p&gt;Yesterday saw the first beta release of the new PostgreSQL version 9.4. Along&#xA;with the sources, we uploaded binary packages to Debian experimental and&#xA;apt.postgresql.org, so there&amp;rsquo;s now packages ready to be tested on Debian&#xA;wheezy, squeeze, testing/unstable, and Ubuntu trusty, saucy, precise, and&#xA;lucid.&lt;/p&gt;&#xA;&lt;p&gt;If you are using one of the release distributions of Debian or Ubuntu, add this&#xA;to your /etc/apt/sources.list.d/pgdg.list to have 9.4 available:&lt;/p&gt;&#xA;&lt;p&gt;deb &lt;a href=&#34;http://apt.postgresql.org/pub/repos/apt/&#34;&gt;http://apt.postgresql.org/pub/repos/apt/&lt;/a&gt; codename-pgdg main 9.4&lt;/p&gt;&#xA;&lt;p&gt;On Debian jessie and sid, install the packages from experimental.&lt;/p&gt;&#xA;&lt;p&gt;Happy testing!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trusty and Saucy on apt.postgresql.org</title>
      <link>https://df7cb.de/blog/posts/2014/Trusty_and_Saucy_on_apt.postgresql.org.html</link>
      <pubDate>Tue, 25 Feb 2014 09:32:01 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2014/Trusty_and_Saucy_on_apt.postgresql.org.html</guid>
      <description>&lt;p&gt;Over the past few weeks, new distributions have been added on&#xA;&lt;a href=&#34;http://apt.postgresql.org/&#34;&gt;apt.postgresql.org&lt;/a&gt;:&#xA;Ubuntu 13.10 codenamed &amp;ldquo;saucy&amp;rdquo; and the upcoming Ubuntu LTS release 14.04&#xA;codenamed &amp;ldquo;trusty&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Adding non-LTS releases for the benefit of developers using PostgreSQL on their&#xA;notebooks and desktop machines has been a frequently requested item since we&#xA;created the repository. I had some qualms about targeting a new Ubuntu release&#xA;every 6 months, but with having automated more and more parts of the repository&#xA;infrastructure, and the bootstrapping process now being painless, the&#xA;distributions are now available for use. Technically, trusty started as empty,&#xA;so it hasn&amp;rsquo;t all packages yet, but of course all the PostgreSQL server packages&#xA;are there, along with pgAdmin. Saucy started as a copy of precise (12.04) so it&#xA;has all packages. Not all packages have been rebuilt for saucy, but the precise&#xA;packages included (you can tell by the version number ending in .pgdg12.4+12 or&#xA;.pgdg13.10+1) will work, unless apt complains about dependency problems. I have&#xA;rebuilt the packages needing it I was aware about (most notably the&#xA;postgresql-plperl packages) - if you spot problems, please let us know on the&#xA;mailing list.&lt;/p&gt;&#xA;&lt;p&gt;Needless to say, last week&amp;rsquo;s PostgreSQL server updates are already included in&#xA;the repository.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ci.debian.net on DDPO</title>
      <link>https://df7cb.de/blog/posts/2014/ci.debian.net_on_DDPO.html</link>
      <pubDate>Wed, 12 Feb 2014 17:12:49 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2014/ci.debian.net_on_DDPO.html</guid>
      <description>&lt;p&gt;More and more packages are getting&#xA;&lt;a href=&#34;http://packages.qa.debian.org/a/autopkgtest.html&#34;&gt;autopkgtest&lt;/a&gt; aka&#xA;&lt;a href=&#34;http://dep.debian.net/deps/dep8/&#34;&gt;DEP-8&lt;/a&gt; testsuites these days.&#xA;Thanks to Antonio Terceiro, there is &lt;a href=&#34;http://ci.debian.net/&#34;&gt;ci.debian.net&amp;quot;&lt;/a&gt;&#xA;running the tests.&lt;/p&gt;&#xA;&lt;p&gt;Last weekend, I&amp;rsquo;ve added a &amp;ldquo;CI&amp;rdquo; column on &lt;a href=&#34;http://qa.debian.org/developer.php&#34;&gt;DDPO&lt;/a&gt;&#xA;that shows the current test results for your packages. Enjoy, and add tests to your packages!&lt;/p&gt;</description>
    </item>
    <item>
      <title>TF101 flickering and a loose cable</title>
      <link>https://df7cb.de/blog/posts/2013/TF101_flickering_and_a_loose_cable.html</link>
      <pubDate>Sun, 08 Dec 2013 20:36:44 +0100</pubDate>
      <guid>https://df7cb.de/blog/posts/2013/TF101_flickering_and_a_loose_cable.html</guid>
      <description>&lt;p&gt;My ASUS Transformer TF101 had suddenly started flickering in all sorts of funny&#xA;colors some weeks ago. As tapping it gently on the table in the right angle made&#xA;the problem go away temporarily, it was clear the problem was about a loose&#xA;cable, or some other hardware connection issue.&lt;/p&gt;&#xA;&lt;p&gt;As I needed to go on a business trip the other day, I didn&amp;rsquo;t look up the&#xA;warranty expiration day until later that week. Then, Murphy struck: the tablet&#xA;was now 2 years + 1 day old! Calling ASUS, some friendly guy there suggested I&#xA;still tried to get ASUS to accept it for warranty, because the tablet had been&#xA;with them last year for 5 days, so if they added that, it would still be within&#xA;the warranty period. I filled out the RMA form, but one hour later the reply was&#xA;they rejected it because it was out of warranty. Another guy on the phone then&#xA;said they would probably only do the adding if it had been with them for maybe&#xA;10 days, or actually really 30 days, or whatever.&lt;/p&gt;&#xA;&lt;p&gt;Some googling suggested that the loose cable theory was indeed worth a try, so I&#xA;took &lt;a&#xA;href=&#34;http://www.zdnet.com/photos/cracking-open-the-asus-eee-pad-transformer-tf101/6272908&#34;&gt;it&lt;/a&gt;&#xA;&lt;a href=&#34;http://www.youtube.com/watch?v=JG9gEYRALtU&#34;&gt;apart&lt;/a&gt;. Thanks to a&#xA;&lt;a href=&#34;http://forum.xda-developers.com/showthread.php?p=48273006&#34;&gt;forum&#xA;post&lt;/a&gt; I could then locate the display connector and fix it.&lt;/p&gt;&#xA;&lt;p&gt;Putting the case back together was actually harder than disassembling it because&#xA;some plastic bits got stuck, but now everything is back to normal.&lt;/p&gt;&#xA;&lt;img src=&#34;https://www.df7cb.de/blog/2013/tf101cable.jpg&#34;&gt;</description>
    </item>
    <item>
      <title>Jessie, the HP 6715b, and Wifi</title>
      <link>https://df7cb.de/blog/posts/2013/hp6715b-wifi.html</link>
      <pubDate>Sun, 15 Sep 2013 16:12:50 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2013/hp6715b-wifi.html</guid>
      <description>&lt;p&gt;If you are upgrading your HP/Compaq 6715b to Debian Jessie, and suddenly Wifi&#xA;stops working because the PCI device is gone, install the &amp;ldquo;rfkill&amp;rdquo; package:&lt;/p&gt;&#xA;&lt;pre&gt;&#xA;# lspci | tail -2&#xA;02:04.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 02)&#xA;10:00.0 Ethernet controller: Broadcom Corporation NetLink BCM5787M Gigabit Ethernet PCI Express (rev 02)&#xA;&#xA;# rfkill list 1&#xA;1: hp-wifi: Wireless LAN&#xA;&#x9;Soft blocked: yes&#xA;&#x9;Hard blocked: no&#xA;&#xA;# rfkill unblock wifi&#xA;&#xA;# rfkill list 1&#xA;1: hp-wifi: Wireless LAN&#xA;&#x9;Soft blocked: no&#xA;&#x9;Hard blocked: no&#xA;&#xA;# lspci | tail -2&#xA;10:00.0 Ethernet controller: Broadcom Corporation NetLink BCM5787M Gigabit Ethernet PCI Express (rev 02)&#xA;30:00.0 Network controller: Broadcom Corporation BCM4311 802.11a/b/g (rev 02)&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Reports on the internet say that the same could be done by going into the BIOS&#xA;and selecting &amp;ldquo;Reset to default&amp;rdquo; - this makes the Wifi LED active until about&#xA;udev is started on the next boot.&lt;/p&gt;&#xA;&lt;p&gt;To be done: figure out how to automate this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Version Numbers</title>
      <link>https://df7cb.de/blog/posts/2013/Version_Numbers.html</link>
      <pubDate>Wed, 31 Jul 2013 10:04:01 +0200</pubDate>
      <guid>https://df7cb.de/blog/posts/2013/Version_Numbers.html</guid>
      <description>&lt;p&gt;Following an idea by Ansgar Burchardt, I&amp;rsquo;ve done some digging on version numbers in Debian:&lt;/p&gt;&#xA;&lt;p&gt;&#xA;Most common version numbers:&#xA;&lt;pre&gt;&#xA;projectb=&gt; select version::text, count(*) from source group by 1 order by 2 desc;&#xA;  version   | count &#xA;------------+-------&#xA; 4:4.10.5-1 |   131&#xA; 1.0-1      |   120&#xA; 1.0.0-1    |    95&#xA; 1.1-1      |    95&#xA; 1.0.1-1    |    93&#xA; 1.2-1      |    88&#xA; 1.0-2      |    82&#xA; 0.2-1      |    80&#xA; 0.3-1      |    79&#xA; 0.5-1      |    77&#xA; 0.04-1     |    76&#xA; 1.1.1-1    |    76&#xA; 0.10-1     |    74&#xA; 1.4-1      |    72&#xA; 1.1-2      |    71&#xA; 0.1-1      |    70&#xA; 0.11-1     |    70&#xA;&lt;/pre&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&#xA;Version number with the most spellings: (considered equal by the dpkg&#xA;definition, implemented in the &#34;debversion&#34; type)&#xA;&lt;pre&gt;&#xA;projectb=&gt; select version::text, count(*) from source where version = &#39;1.02-1&#39; group by 1 order by 2 desc;&#xA;  version   | count &#xA;------------+-------&#xA; 1.2-1      |    88&#xA; 1.02-1     |    46&#xA; 1.002-1    |     4&#xA; 1.000002-1 |     1&#xA; 001.002-1  |     1&#xA; 1.00002-1  |     1&#xA;&lt;/pre&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&#xA;If we look at equivalent version numbers, the first table above looks entirely different:&#xA;&lt;pre&gt;&#xA;projectb=&gt; select version, count(*) from source group by 1 order by 2 desc limit 30;&#xA;  version   | count &#xA;------------+-------&#xA; 0.3-1      |   162&#xA; 1.0-1      |   160&#xA; 0.05-1     |   156&#xA; 0.04-1     |   154&#xA; 0.02-1     |   151&#xA; 1.02-1     |   141&#xA; 0.006-1    |   133&#xA; 1.001-1    |   131&#xA; 4:4.10.5-1 |   131&#xA; 0.7-1      |   127&#xA;&lt;/pre&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;(I&amp;rsquo;m also participating in the &amp;ldquo;longest version number&amp;rdquo; contest, I&amp;rsquo;ve just uploaded bind9 version&#xA;&lt;b&gt;1:9.8.4.dfsg.P1-6+nmu2+deb7u1~bpo60+1&lt;/b&gt; to backports.)&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
