<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Planet Debian</title>
	<link>http://planet.debian.org/</link>
	<language>en</language>
	<description>Planet Debian - http://planet.debian.org/</description>


<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/debian" /><feedburner:info uri="debian" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
	<title>Julian Andres Klode: Memory allocators</title>
	<guid>http://juliank.wordpress.com/?p=625</guid>
	<link>http://juliank.wordpress.com/2012/05/31/memory-allocators/</link>
     <description>  &lt;p&gt;In the past days, I looked at various memory allocators in a quest to improve performance in my multi-threaded test cases of a reference counting language runtime / object allocator (a fun project).&lt;/p&gt;
&lt;p&gt;It turns out the glibc’s memory allocator is relatively slow, especially if you do loops that create one element and destroy one element at the same time (for example, map() on a list you no longer use after you passed it to map). To fix this problem, I considered various options.&lt;/p&gt;
&lt;p&gt;The first option was to add a thread-local cache around malloc(). So whenever we want to free() an object, we place it on  a thread-local list instead, and if a malloc() request for an object of that size comes in, we reuse the old object. &lt;/p&gt;
&lt;p&gt;This fixes the problem with the lists, but experiments shown another problem with the glibc allocator: Allocating many objects without releasing others (let’s say appending an element to a functional list). I started testing with tcmalloc instead, and noticed that it was several times faster (reducing run time from 6.75 seconds to 1.33 seconds (5 times faster)). As I do not want to depend on a C++ code base, I decided to write a simple allocator that allocates blocks of memory via mmap(), splits those into objects, and puts the objects on a local free list. That allocator performed faster than tcmalloc(), but was also just a simple test case, and not really useable, due to potential fragmentation problems (and because the code was statically linked in, causing thread-local storage to be considerably faster, as it does not need to call a function on every TLS access, but can rather go through a segment register).&lt;/p&gt;
&lt;p&gt;I then discovered jemalloc, and tried testing with this. It turned out that jemalloc was even faster than tcmalloc in all test cases, and also required about the same amount of memory as tcmalloc (and slightly more than the custom test code, as that combined reference counting with memory allocator metadata and thus had less meta data overhead). Using jemalloc, the list building test performs in 0.9X seconds now (instead of tcmalloc’s 1.33 or glibc’s 6.75 seconds), requires 0 major page faults (tcmalloc has 2), and uses 5361472 kb memory (tcmalloc uses 5290240, glibc requires 7866608).&lt;/p&gt;
&lt;p&gt;Given that jemalloc is written in C, I can only recommend it to everyone in need of a scalable memory allocator. Depending on your workload, it might require less memory than tcmalloc (at least that’s the case at Facebook) and is most likely faster than tcmalloc. It also provides tcmalloc-compatible profiling facilities (as Facebook needed them). Furthermore, jemalloc is also the memory allocator used by FreeBSD, and is used by Mozilla projects, and on several Facebook projects, and should thus be relatively stable and useable.&lt;/p&gt;
&lt;p&gt;All tests were run with 4 threads, on a dual-core laptop with hyper-threading, using (e)glibc 2.13, tcmalloc 2.0, and jemalloc 3.0. The tests may not be representative of real world performance, and do not account for fragmentation.&lt;/p&gt;
&lt;p&gt;Should I try replacing Python’s custom caching of malloc() calls with simply calling jemalloc, and run a few Python benchmarks? Anyone interested in that?&lt;/p&gt;
&lt;br /&gt;Filed under: &lt;a href="http://juliank.wordpress.com/category/general/"&gt;General&lt;/a&gt;  &lt;a href="http://feeds.wordpress.com/1.0/gocomments/juliank.wordpress.com/625/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/juliank.wordpress.com/625/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/juliank.wordpress.com/625/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/juliank.wordpress.com/625/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gofacebook/juliank.wordpress.com/625/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/facebook/juliank.wordpress.com/625/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gotwitter/juliank.wordpress.com/625/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/twitter/juliank.wordpress.com/625/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/juliank.wordpress.com/625/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/juliank.wordpress.com/625/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/juliank.wordpress.com/625/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/juliank.wordpress.com/625/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/juliank.wordpress.com/625/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/juliank.wordpress.com/625/" alt="" border="0" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=juliank.wordpress.com&amp;amp;blog=2363947&amp;amp;post=625&amp;amp;subd=juliank&amp;amp;ref=&amp;amp;feed=1" alt="" height="1" border="0" width="1" /&gt; </description> 
	<pubDate>Thu, 31 May 2012 09:43:00 +0000</pubDate>

</item> 
<item>
	<title>Richard Hartmann: Potpourri II</title>
	<guid>http://richardhartmann.de/blog/posts/2012/05/31-potpourri-ii/</guid>
	<link>http://richardhartmann.de/blog/posts/2012/05/31-potpourri-ii/</link>
     <description>  &lt;p&gt;Traffic jams suck; but they do give you a chance to think and
blog. Truckers hams are telling me that four trucks are totalled
and need to be removed by the THW. As the trucker next to me just
broke out his gas grill and several people are joining him in a
spontaneous BBQ, I don't expect to be moving any time soon.&lt;/p&gt;
&lt;h1&gt;Kicking things along&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://joeyh.name/blog/entry/kickstarter_for_git-annex_assistant/"&gt;
This&lt;/a&gt; is &lt;a href="http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own"&gt;
coming along nicely&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;RAID 4&lt;/h1&gt;
&lt;p&gt;Unless you are forced to support legacy systems or playing
RAIDemon and gotta try them all, there is no valid use case for
RAID 4. So &lt;a href="http://wp.colliertech.org/cj/?p=1208"&gt;doing
so&lt;/a&gt; is a patently bad idea. RAID 5 is always the better option
as you are not relying on a single disk which contains the
checksums, but use striping to distribute them. RAID 4 has a chance
of 1/n that a failed disk will force &lt;em&gt;all&lt;/em&gt; remaining disks
to read &lt;em&gt;all&lt;/em&gt; respective sectors and then the controller/CPU
to XOR everything. There is a reason why RAID 3 was replaced with
RAID 4; just as there's a reason why RAID 4 was replaced by RAID
5.&lt;/p&gt;
&lt;p&gt;Don't use RAID 4. Seriously.&lt;/p&gt;
&lt;h1&gt;Tom Tom vs OSM&lt;/h1&gt;
&lt;p&gt;In case you have been following the news in the GPS circles, you
will have noticed that TomTom pretty gave up on innovating and
resigned themselves to dying a slow death. Well that and to start a
&lt;a href="https://www.tomtom.com/en_gb/licensing/newsletter/201205/didyouknow/"&gt;
nice amount of FUD&lt;/a&gt;. While they have been &lt;a href="http://www.systemed.net/blog/index.php?post=23"&gt;rebuked&lt;/a&gt; pretty
thoroughly already, I wanted to add my own POV.&lt;/p&gt;
&lt;p&gt;There is a kernel of truth in what TomTom said inasmuch they
state that pedestrian paths are better than car paths. Of course,
while they got the &lt;em&gt;relative&lt;/em&gt; quality right, they are wrong
about the &lt;em&gt;absolute&lt;/em&gt; quality of the data. They claim
pedestrian is OK and motorized is bad. In my experience, maps for
motorized traffic are good while pedestrian tracks are
mind-boggingly great.&lt;/p&gt;
&lt;p&gt;These days, most people (and probably all who read this) will be
at least somewhat familiar with the quality of OSM in the random
cities they visit over the year. The common verdict is usually
"very nice".&lt;/p&gt;
&lt;p&gt;But that's not where OSM shines. It's in the lesser-known places
where you don't expect too many tech-minded people to come along
where it starts to &lt;em&gt;really&lt;/em&gt; impress me. While I found a few
stubs on a dead-end street in &lt;a href="https://en.wikipedia.org/wiki/Akureyri"&gt;Akureyri&lt;/a&gt; which were
not mapped, every foot trail I ever walked along in Iceland has
been mapped. ski-doo tracks on Svalbard? Check. Backyard in
Novosibirsk? Check, as well. And we are talking "packed earth track
in between garages opening up into a 'playground' where a man and a
pregnant women are passing a bottle back and forth while smoking
and watching over their two kids who play next to a middle-aged man
who is lying on the ground wasted, using a rock as a pillow all the
while an extremely blingy Mercedes with two muscle-packed thugs is
cruising by, all in the time it took us to walk through". Mapped.
Horse tracks and hiking trails in Mongolia? Yep. &lt;a href="https://en.wikipedia.org/wiki/Hutong"&gt;Hutongs&lt;/a&gt; in Beijing
including alleys so narrow you have to walk single file? Of
course.&lt;/p&gt;
&lt;p&gt;Richard Fairhurst is right that the plural of anecdote is not
data, but OSM is &lt;em&gt;good&lt;/em&gt;. TomTom is afraid for a reason.&lt;/p&gt;
&lt;p&gt;As an aside, I find the picture used in TomTom's newsletter
extremely funny; I am sure they didn't intend this, but hey.&lt;/p&gt;
&lt;h1&gt;Windows&lt;/h1&gt;
&lt;p&gt;100-300 MiB for any random driver installation package is par
for the course. Be it GFX, audio, or network card. If you plug in a
different USB mouse, Windows 7 will take several seconds while
"setting up" a standard USB HID device. And hitting ctrl-alt-del in
the login screen or while logged in does not give you a quick way
to shut down or reboot the machine. As I am breaking out the
Windows installation every month to install updates and every six
months to actually use this does not affect me a lot. Still, it's
amazing that so many people are putting up with this.&lt;/p&gt;
&lt;h1&gt;UEFI&lt;/h1&gt;
&lt;p&gt;It's nice to see that Matthew Garrett is still &lt;a href="http://mjg59.dreamwidth.org/12368.html"&gt;going strong&lt;/a&gt;. I am not
sure if this is the best way, but it seems to be a workable
solution while in between a rock and a hard place. Not sure about
the requirements of GPLv3 with regards to the keys Fedora will use
to sign GRUB 2 with. From what I remember without rereading the
license, as long as Fedora is not selling a system on which you can
not disable secure boot they should be in the clear. IANAL, IIRC,
etc.&lt;/p&gt;
&lt;h1&gt;Wrapping up&lt;/h1&gt;
&lt;p&gt;And I have not moved a single meter, other than making way to a
police motorbike, in over an hour. Pity I don't have anything to
BBQ with me; smells delicious over there.&lt;/p&gt; </description> 
	<pubDate>Thu, 31 May 2012 09:25:34 +0000</pubDate>

</item> 
<item>
	<title>Marc 'Zugschlus' Haber: atop in unstable</title>
	<guid>http://blog.zugschlus.de/archives/942-guid.html</guid>
	<link>http://blog.zugschlus.de/archives/942-atop-in-unstable.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/zugschlus.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;
Eight days ago, I uploaded atop 1.26-1 to DELAYED/8, listing me as new maintainer. This means that the package has in
the mean time appeared in unstable, and I hope that it’ll swiftly migrate to testing.
&lt;/p&gt; </description> 
	<pubDate>Thu, 31 May 2012 07:13:06 +0000</pubDate>
  <author>mh+blog-zugschlus-de@zugschlus.de (Marc 'Zugschlus' Haber)</author>  
</item> 
<item>
	<title>Matthew Garrett: Implementing UEFI Secure Boot in Fedora</title>
	<guid>http://mjg59.dreamwidth.org/12368.html</guid>
	<link>http://mjg59.dreamwidth.org/12368.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/mjg59.png" width="69" height="85" alt="" align="right" style="float: right;"&gt;  (Brief disclaimer - while I work for Red Hat, I'm only going to be talking about Fedora here. Anything written below represents only my opinions and my work on Fedora, not Red Hat's opinions or future plans)&lt;br /&gt;&lt;br /&gt;Fedora 17 was released this week. It's both useful and free, and serves as a welcome addition to any family gathering. Do give it a go. But it's also noteworthy for another reason - it's the last Fedora release in the pre-UEFI secure boot era. Fedora 18 will be released at around the same time as Windows 8, and as previously discussed all Windows 8 hardware will be shipping with secure boot enabled by default. While Microsoft have modified their original position and all x86 Windows machines will be required to have a firmware option to disable this or to permit users to enrol their own keys, it's not really an option to force all our users to play with hard to find firmware settings before they can run Fedora. We've been working on a plan for dealing with this. It's not ideal, but of all the approaches we've examined we feel that this one offers the best balance between letting users install Fedora while still permitting user freedom.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Getting the machine booted&lt;/h2&gt;&lt;br /&gt;Most hardware you'll be able to buy towards the end of the year will be Windows 8 certified. That means that it'll be carrying a set of secure boot keys, and if it comes with Windows 8 pre-installed then secure boot will be enabled by default. This set of keys isn't absolutely fixed and will probably vary between manufacturers, but anything with a Windows logo will carry the Microsoft key[1].&lt;br /&gt;&lt;br /&gt;We explored the possibility of producing a Fedora key and encouraging hardware vendors to incorporate it, but turned it down for a couple of reasons. First, while we had a surprisingly positive response from the vendors, there was no realistic chance that we could get all of them to carry it. That would mean going back to the bad old days of scouring compatibility lists before buying hardware, and that's fundamentally user-hostile. Secondly, it would put Fedora in a privileged position. As one of the larger distributions, we have more opportunity to talk to hardware manufacturers than most distributions do. Systems with a Fedora key would boot Fedora fine, but would they boot Mandriva? Arch? Mint? Mepis? Adopting a distribution-specific key and encouraging hardware companies to adopt it would have been hostile to other distributions. We want to compete on merit, not because we have better links to OEMs.&lt;br /&gt;&lt;br /&gt;An alternative was producing some sort of overall Linux key. It turns out that this is also difficult, since it would mean finding an entity who was willing to take responsibility for managing signing or key distribution. That means having the ability to keep the root key absolutely secure and perform adequate validation of people asking for signing. That's expensive. Like millions of dollars expensive. It would also take a lot of time to set up, and that's not really time we had. And, finally, nobody was jumping at the opportunity to volunteer. So no generic Linux key.&lt;br /&gt;&lt;br /&gt;The last option wasn't hugely attractive, but is probably the least worst. Microsoft will be offering signing services through their &lt;a href="http://sysdev.microsoft.com"&gt;sysdev portal&lt;/a&gt;. It's not entirely free (there's a one-off $99 fee to gain access), but it's cheaper than any realistic alternative would have been. It ensures compatibility with as wide a range of hardware as possible and it avoids Fedora having any special privileges over other Linux distributions. If there are better options then we haven't found them. So, in all probability, this is the approach we'll take. Our first stage bootloader will be signed with a Microsoft key.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Bootloaders&lt;/h2&gt;&lt;br /&gt;We've decided to take a multi-layer approach to our signing for a fairly simple reason. Signing through the Microsoft signing service is a manual process, and that's a pain. We don't want to have bootloader updates delayed because someone needs to find a copy of Internet Explorer and a smartcard and build packages by hand. Instead we're writing a very simple bootloader[2]. This will do nothing other than load a real bootloader (grub 2), validate that it's signed with a Fedora signing key and then execute it. Using the Fedora signing key there means that we can build grub updates in our existing build infrastructure and sign them ourselves. The first stage bootloader should change very rarely, and we don't envisage updating it more than once per release cycle. It shouldn't be much of a burden on release management.&lt;br /&gt;&lt;br /&gt;What about grub? We've already switched Fedora 18 over to using grub 2 by default on EFI systems, but it still needs some work before it's ready for secure boot. The first thing is that we'll be disabling the module loading. Right now you can load arbitrary code into grub 2 at runtime, and that defeats the point of secure boot. So that'll be disabled. Next we'll be adding support for verifying that the kernel it's about to boot is signed with a trusted key. And finally we'll be sanitising the kernel command line to avoid certain bits of functionality that would permit an attacker to cause even a signed kernel to launch arbitrary code. These restrictions will all vanish if secure boot is disabled.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Kernel&lt;/h2&gt;&lt;br /&gt;Secure boot is built on the idea that all code that can touch the hardware directly is trusted, and any untrusted code must go through the trusted code. This can be circumvented if users can execute arbitrary code in the kernel. So, we'll be moving to requiring signed kernel modules and locking down certain aspects of kernel functionality. The most obvious example is that it won't be possible to access PCI regions directly from userspace, which means all graphics cards will need kernel drivers. Userspace modesetting will be a thing of the past. Again, disabling secure boot will disable these restrictions.&lt;br /&gt;&lt;br /&gt;Signed modules are obviously troubling from a user perspective. We'll be signing all the drivers that we ship, but what about out of tree drivers? We don't have a good answer for that yet. As before, we don't want any kind of solution that works for us but doesn't work for other distributions. Fedora-only or Ubuntu-only drivers are the last thing anyone wants, and this really needs to be handled in a cross-distribution way.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Wait signed what&lt;/h2&gt;&lt;br /&gt;Secure boot is designed to protect against malware code running before the operating system. This isn't a hypothetical threat. Pre-boot malware exists in the wild, and some of it is &lt;a href="http://blog.webroot.com/2011/09/13/mebromi-the-first-bios-rootkit-in-the-wild/"&gt;nastier than you expect&lt;/a&gt;. So obviously bootloaders need to be signed, since otherwise you'd just replace the signed bootloader with an unsigned one that installed malware and booted your OS.&lt;br /&gt;&lt;br /&gt;But what about the kernel? The kernel is just code. If I take a signed Linux bootloader and then use it to boot something that looks like an unsigned Linux kernel, I've instead potentially just booted a piece of malware. And if that malware can attack Windows then the signed Linux bootloader is no longer just a signed Linux bootloader, it's a signed Windows malware launcher and that's the kind of thing that results in that bootloader being added to the list of blacklisted binaries and suddenly your signed Linux bootloader isn't even a signed Linux bootloader. So kernels need to be signed.&lt;br /&gt;&lt;br /&gt;And modules? Again, modules are just code. It's a little trickier, but if your signed kernel loads an unsigned module then that unsigned module can set up a fake UEFI environment and chain into a compromised OS bootloader. Now the attacker just has to include a signed kernel and a minimal initramfs that loads their malware module. It'd slow down boot by a couple of seconds, but other than that it'd be undetectable. X? If you can access the registers on a GPU then you can get the GPU to DMA over the kernel and execute arbitrary code. Trickier again, but still achievable - and if you've locked down every other avenue of attack, it's even attractive.&lt;br /&gt;&lt;br /&gt;If we produce signed code that can be used to attack other operating systems then those other operating systems are justified in blacklisting us. That doesn't seem like a good outcome. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Customisation&lt;/h2&gt;&lt;br /&gt;A lot of our users want to build their own kernels. Some even want to build their own distributions. Signing our bootloader and kernel is an impediment to that. We'll be providing all the tools we use for signing our binaries, but for obvious reasons we can't hand out our keys. There's three approaches here. The first is for a user to generate their own key and enrol it in their system firmware. We'll trust anything that's signed with a key that's present in the firmware. The second is to rebuild the shim loader with their own key installed and then pay $99 and sign that with Microsoft. That means that they'll be able to give copies to anyone else and let them install it without any fiddling. The third is to just disable secure boot entirely, at which point the machine should return to granting the same set of freedoms as it currently does.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;But I don't trust Microsoft&lt;/h2&gt;&lt;br /&gt;A system in custom mode should allow you to delete all existing keys and replace them with your own. After that it's just a matter of re-signing the Fedora bootloader (like I said, we'll be providing tools and documentation for that) and you'll have a computer that will boot Fedora but which will refuse to boot any Microsoft code. It may be a little more awkward for desktops because you may have to handle the Microsoft-signed UEFI drivers on your graphics and network cards, but this is also solvable. I'm looking at ways to implement a tool to allow you to automatically whitelist the installed drivers. Barring firmware backdoors, it's possible to configure secure boot such that your computer will only run software you trust. Freedom means being allowed to run the software you want to run, but it also means being able to choose the software you don't want to run.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;You've sold out&lt;/h2&gt;&lt;br /&gt;We've been working on this for months. This isn't an attractive solution, but it is a workable one. We came to the conclusion that every other approach was unworkable. The cause of free software isn't furthered by making it difficult or impossible for unskilled users to run Linux, and while this approach does have its downsides it does also avoid us ending up where we were in the 90s. Users will retain the freedom to run modified software and we wouldn't have accepted any solution that made that impossible.&lt;br /&gt;&lt;br /&gt;But is this a compromise? Of course. There's already inequalities between Fedora and users - trademarks prevent the distribution of the Fedora artwork with modified distributions, and much of the Fedora infrastructure is licensed such that some people have more power than others. This adds to that inequality. It's not the ideal outcome for anyone, and I'm genuinely sorry that we weren't able to come up with a solution that was better. This isn't as bad as I feared it would be, but nor is it as good as I hoped it would be.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;What about ARM&lt;/h2&gt;&lt;br /&gt;Microsoft's certification requirements for ARM machines forbid vendors from offering the ability to disable secure boot or enrol user keys. While we could support secure boot in the same way as we plan to on x86, it would prevent users from running modified software unless they paid money for a signing key. We don't find that acceptable and so have no plans to support it.&lt;br /&gt;&lt;br /&gt;Thankfully this shouldn't be anywhere near as much of a problem as it would be in the x86 world. Microsoft have far less influence over the ARM market, and the only machines affected by this will be the ones explicitly designed to support Windows. If you want to run Linux on ARM then there'll be no shortage of hardware available to you.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Is this all set in stone?&lt;/h2&gt;&lt;br /&gt;No. We've spent some time thinking about all of this and are happy that we can implement it in the Fedora 18 timescale, but there's always the possibility that we've missed something or that a new idea will come up. If we can increase user freedom without making awful compromises somewhere else then we'll do it.&lt;br /&gt;&lt;br /&gt;[1] In fact, chances are that &lt;em&gt;everything&lt;/em&gt; will carry the Microsoft key. Secure boot requires that UEFI drivers also be signed. The signing format only permits a single signature per binary. For compatibility, approximately all add-on hardware shipped will be signed with Microsoft's key, and that means that all system vendors have to recognise Microsoft's key in order to permit that hardware to run on their systems.&lt;br /&gt;[2] Current source is &lt;a href="https://github.com/mjg59/shim"&gt;here&lt;/a&gt;. It relies on a port of the UEFI crypto library and OpenSSL that I have building with some handholding, and which I'll upload as soon as possible.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=mjg59&amp;amp;ditemid=12368" alt="comment count unavailable" height="12" style="vertical-align: middle;" width="30" /&gt; comments </description> 
	<pubDate>Thu, 31 May 2012 05:41:15 +0000</pubDate>

</item> 
<item>
	<title>Paul Tagliamonte: my sbuilder setup (sb)</title>
	<guid>http://blog.pault.ag/post/24094551910</guid>
	<link>http://blog.pault.ag/post/24094551910</link>
     <description>  &lt;img src="http://planet.debian.org/heads/paultag.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;I’ve expanded a bit on my idea (that is, the sbuilder wrapper to help aid with
managing more then one sbuild chroot), and it got out of hand very quickly.&lt;/p&gt;

&lt;p&gt;It’s gone from one small shell script to a set of 8, and growing. Quickly.&lt;/p&gt;

&lt;p&gt;Until I spin these off into their own repo, they’ll be in my &lt;a href="https://github.com/paultag/dot-bin" target="_blank"&gt;dot-bin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before getting too far, please relize this is only how I’m using sbuild. There
are many other (more) sane configurations that you can (and should) use.&lt;/p&gt;

&lt;p&gt;This was not made to be useful for anyone other then me :)&lt;/p&gt;

&lt;p&gt;I’ve added the ability to use unionfs-fuse, set up a way to login interactively
and a script to create new chroots without having them register as a global
schroot.&lt;/p&gt;

&lt;p&gt;Firstly, forgive me for my sins. This is all a huge hack, but it’s use isn’t
the &lt;em&gt;worst&lt;/em&gt; thing in the world.&lt;/p&gt;

&lt;p&gt;As of the time of this writing, I now have a gcc and clang chroot for each
of stable, testing and unstable.&lt;/p&gt;

&lt;p&gt;Now — the big question — how do you use this. Rather, this is more of a how do
I use sbuilder :)&lt;/p&gt;

&lt;p&gt;Firstly, I’ve created a file for each schroot set that I’m using. Here’s
my &lt;code&gt;/etc/schroot/chroot.d/sid&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[sid]
type=directory
description=Debian sid/amd64 autobuilder
directory=/var/sbuild/sid
groups=root,sbuild
root-groups=root,sbuild
script-config=sbuild/config
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It’s very similar to the one that sbuilder-createchroot creates.&lt;/p&gt;

&lt;p&gt;If you’re just looking for aufs / unionfs support, keep in mind schroot has
some great support. check &lt;code&gt;man 5 schroot.conf&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Next, create a &lt;code&gt;dist.d&lt;/code&gt; directory in &lt;code&gt;/var/sbuild&lt;/code&gt; — such as
&lt;code&gt;/var/sbuild/sid.d&lt;/code&gt;. In the future, this might get automagically created by the
&lt;code&gt;sb-create&lt;/code&gt; script. For now, it just expects that exists.&lt;/p&gt;

&lt;p&gt;The arguments for all the sb* commands is always in the order of variant, dist.&lt;/p&gt;

&lt;p&gt;variant defaults to “generic”, which I’ve set as an alias to the generic chroot,
and the dist defaults to “sid”. At some point, I’ll change the default to
be the last UNRELEASED entry in the changelog.&lt;/p&gt;

&lt;p&gt;So, to create a new chroot to become your clang chroot, you may choose to
invoke it as &lt;code&gt;sb-create clang&lt;/code&gt;, or more explicitly &lt;code&gt;sb-create clang sid&lt;/code&gt;.
To create a new chroot to become your stable / gcc chroot, you may create it
with &lt;code&gt;sb-create gcc stable&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After you have a chroot, you can start to use the &lt;code&gt;sb&lt;/code&gt; or &lt;code&gt;sbo&lt;/code&gt; scripts.
&lt;code&gt;sbo&lt;/code&gt; is just a wrapper around the &lt;code&gt;sb&lt;/code&gt; script that sets an envvar to tell
the &lt;code&gt;sb-prehook&lt;/code&gt; and &lt;code&gt;sb-posthook&lt;/code&gt; to set up the unionfs overlay.&lt;/p&gt;

&lt;p&gt;The unionfs overlay routine replaces the dist symbolic link (such as
&lt;code&gt;/var/sbuild/testing&lt;/code&gt;) with a folder, and mounts the real chroot (such as
&lt;code&gt;/var/sbuild/testing.d/testing-gcc&lt;/code&gt;) under the unionfs divert point (which is
something like &lt;code&gt;/var/sbuild/testing.overlay.d/testing-gcc&lt;/code&gt;). This lets us make
sure the chroot is never affected by a routine build, even if it’s designed to
trash a chroot (unless, of course, it uses any number of ways to get outside the
chroot and trash the pristine directory — this is to prevent mistakes, not
malicious scripts).&lt;/p&gt;

&lt;p&gt;By the way, for those interested, there’s a small issue with what I’m describing
it’s very subtle. Basically, there’s a few assumptions made by how schroot
operates, and handles “sessions”. Since it’ll keep stuff mounted if the session
is still active, it makes purging all this a real … pain.&lt;/p&gt;

&lt;p&gt;The magic behind the scripts is in the &lt;code&gt;sb-endsessions&lt;/code&gt; routine — which will
properly end all the schroot sessions for that dist, and since we have our own
high-level locking system, we shouldn’t have a situation where this kills off
another build.&lt;/p&gt;

&lt;p&gt;The code (which might have issues) looks like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SESSIONS=`schroot --all-sessions -l | grep "^session:$DIST-"`
for session in $SESSIONS; do
    echo "W: Ending session $session"
    schroot -e -c $session
done
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By backing of schroot’s mounts, we can do our mounting / removing without
worrying about klobbering schroot.&lt;/p&gt;

&lt;p&gt;Now, there’s also the case of wanting to interactively log into a chroot.
For that, there’s &lt;code&gt;sb-login&lt;/code&gt; and &lt;code&gt;sb-maint&lt;/code&gt;, both take the usual variant / dist
arguments. &lt;code&gt;sb-login&lt;/code&gt; logs in as the current user, and &lt;code&gt;sb-maint&lt;/code&gt; logs in as
the root user.&lt;/p&gt;

&lt;p&gt;Eventually, I’ll be adding some scripts to upgrade all the build chroots for a
dist at once.&lt;/p&gt; </description> 
	<pubDate>Thu, 31 May 2012 00:00:27 +0000</pubDate>

</item> 
<item>
	<title>Jaldhar Vyas: Dovecot 2.1.7 Uploaded to Unstable</title>
	<guid>http://www.braincells.com/debian/index.cgi/search/item=280</guid>
	<link>http://www.braincells.com/debian/index.cgi/search/item=280</link>
     <description>  &lt;img src="http://planet.debian.org/heads/jaldhar.png" width="104" height="102" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;This is the latest upstream version and will, barring any unforseen circumstances, be the version in wheezy, the upcoming stable release of Debian &lt;span class="caps"&gt;GNU&lt;/span&gt;/Linux.  In order to ensure it is the high quality our users have come to expect from Debian stable, I need your help.&lt;/p&gt;

&lt;p&gt;First and foremost, please test the hell out of it.  Upgrades during a stable release are in general not allowed unless the problem is security related so we need to shake all the bugs out now.  I am particularly interested in knowing if there are any issues with upgrades from squeeze.&lt;/p&gt;

&lt;p&gt;I waved my hands ineffectually at the &lt;a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?ordering=normal;archive=0;src=dovecot;dist=unstable;repeatmerged=0"&gt;bug list&lt;/a&gt; but it needs more attention.  Could some kind person go through them and let me know which ones are no longer valid, need further attention etc.?&lt;/p&gt;

&lt;p&gt;I attempted to add hardening flags but lintian still complains a lot.  I think the warnings are probably false positives but I'm not a 100% sure so I would appreciate some advice from those who know more about such things.&lt;/p&gt;

&lt;p&gt;Those are the issues that come to mind at the moment but feel free to &lt;a href="mailto:jaldhar-dovecot@debian.org"&gt;let me know&lt;/a&gt; if there's something I've missed.&lt;/p&gt; </description> 
	<pubDate>Wed, 30 May 2012 22:27:53 +0000</pubDate>

</item> 
<item>
	<title>Lior Kaplan: Debian packaging for beginners @ FOSDEM – the video</title>
	<guid>http://liorkaplan.wordpress.com/?p=430</guid>
	<link>http://liorkaplan.wordpress.com/2012/05/30/debian-packaging-for-beginners-fosdem-the-video/</link>
     <description>  &lt;p&gt;I recently got a question by email about &lt;a href="http://liorkaplan.wordpress.com/2012/02/09/debian-packaging-for-beginners-fosdem/"&gt;the lecture I presented at FOSDEM&lt;/a&gt;, and by that mail I discovered that the video of the lecture was uploaded to YouTube (&lt;a href="http://www.youtube.com/watch?v=LVeHlhJXa7E"&gt;FOSDEM 2012 – Debian packaging for beginners&lt;/a&gt;). While I thank the person who did the upload, he/she did not keep the right license for the video which is CC-BY-SA 3.0 (as &lt;a href="http://video.fosdem.org/2012/README"&gt;noted&lt;/a&gt; at FOSDEM archive). You can also grab the &lt;a href="http://video.fosdem.org/2012/crossdistro/Debian_packaging_for_beginners.webm"&gt;webm file&lt;/a&gt; directly.&lt;/p&gt;
&lt;span style="text-align: center; display: block;"&gt;&lt;a href="http://liorkaplan.wordpress.com/2012/05/30/debian-packaging-for-beginners-fosdem-the-video/"&gt;&lt;img src="http://img.youtube.com/vi/LVeHlhJXa7E/2.jpg" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;p&gt;Well, the next task will be to listen to myself in order to improve for FOSDEM 2013… See you there.&lt;/p&gt;
&lt;br /&gt;Filed under: &lt;a href="http://liorkaplan.wordpress.com/category/debian-gnulinux/"&gt;Debian GNU/Linux&lt;/a&gt;, &lt;a href="http://liorkaplan.wordpress.com/category/fosdem/"&gt;FOSDEM&lt;/a&gt;  &lt;a href="http://feeds.wordpress.com/1.0/gocomments/liorkaplan.wordpress.com/430/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/liorkaplan.wordpress.com/430/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/liorkaplan.wordpress.com/430/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/liorkaplan.wordpress.com/430/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gofacebook/liorkaplan.wordpress.com/430/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/facebook/liorkaplan.wordpress.com/430/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gotwitter/liorkaplan.wordpress.com/430/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/twitter/liorkaplan.wordpress.com/430/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/liorkaplan.wordpress.com/430/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/liorkaplan.wordpress.com/430/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/liorkaplan.wordpress.com/430/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/liorkaplan.wordpress.com/430/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/liorkaplan.wordpress.com/430/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/liorkaplan.wordpress.com/430/" alt="" border="0" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=liorkaplan.wordpress.com&amp;amp;blog=1397551&amp;amp;post=430&amp;amp;subd=liorkaplan&amp;amp;ref=&amp;amp;feed=1" alt="" height="1" border="0" width="1" /&gt; </description> 
	<pubDate>Wed, 30 May 2012 20:20:40 +0000</pubDate>

</item> 
<item>
	<title>Thomas Goirand: New release of MLMMJ (version 1.2.18.0) uploaded in Debian</title>
	<guid>http://thomas.goirand.fr/blog/?p=17</guid>
	<link>http://thomas.goirand.fr/blog/?p=17</link>
     <description>  &lt;img src="http://planet.debian.org/heads/zigo.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;MLMMJ stands for Mailing List Manager Made Joyful. To me, it’s the best mailing list manager available. Not only its written in C (no slow interpreted language here…), but also it is easy and very convenient to setup. No hack is needed to make it run on a multi-domain environment, and no need to run a special subdomain for your lists (yes, I’m thinking about you, silly Mailman…). If you didn’t know, MLMMJ is used to handle relatively high traffic lists: all mailing lists for Gentoo are using MLMMJ for example.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mlmmj.org/archive/mlmmj/2012-05/2132.html" title="MLMMJ release announcement"&gt;MLMMJ 1.2.18.0 has just been release upstream&lt;/a&gt;, few days ago (on the 29 of may). It’s with a great pleasure that I packaged (and uploaded to SID) the latest version, and wrote the changelog, where I wrote that 6 Debian specific patches (out of 8) could be removed! One of the funny changes are the renaming of the “mlmmj-recieve” into “mlmmj-receive” as it always should have been (with a symlink to keep backward compatibility), and the removal of the .sh extension to the mlmmj-make-ml (which was patched in Debian to be kept policy compliant: that’s one of the removed patches…).&lt;/p&gt;
&lt;p&gt;Even if I did a few quick functional tests before uploading, I’d be happy to get some feedback before Wheezy is out, so please test and eventually bug-report!&lt;/p&gt; </description> 
	<pubDate>Wed, 30 May 2012 19:59:22 +0000</pubDate>

</item> 
<item>
	<title>Sorina Sandu: Initial commit</title>
	<guid>tag:blogger.com,1999:blog-5249482770358902661.post-5258903788645918274</guid>
	<link>http://home-sorina.blogspot.com/2012/05/initial-commit.html</link>
     <description>  Hello!&lt;br /&gt;&lt;br /&gt;I'm Sorina and this summer I will be working on Debian Installer network setup during Google Summer of Code. I am a second year bachelor's student at Politehnica University of Bucharest, I am studying Computer Science. I very much enjoy what I am doing even if sometimes I feel that the amount of stuff I want/have to learn/do/work on is infinite and I don't really know where to start.&lt;br /&gt;&lt;br /&gt;I am at the beginning of the project, I believe now I am accustomed to the way things work and I am waiting forward to finishing the exam period so that I could really start working.&lt;br /&gt;&lt;br /&gt;The hardest part for me in what I've done so far is testing what I am doing. It took me a while to figure out at least a part of how the installer functions and to solve the problems that occurred while building. Luckily, there is documentation and internet and even more important, I had help and support from my mentors.&lt;br /&gt;&lt;br /&gt;So far I have only written two patches for netcfg, for bugs #610752 and #636211. For the first one I had a version for a while now, but I was unable to test it (unfortunately, it's likely that you will hear this a lot in the future). The idea was to make the link detection timeout preseedable and for this I have added two new templates, asking the user to provide a value for that matter.&lt;br /&gt;&lt;br /&gt;The second one involved a missing "Go Back" button. This seemed to be the result of not &lt;span style="background-color: white;"&gt;letting debconf know that the program is capable of handling the user pressing a back button. That could be solved using deb_capb.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As I said before, testing was my main problem. Eventually, I built the image, wrote it to an USB and rebooted my laptop. This served its purpose, since I had access to anything I needed such as the wireless interface and physical access to the network cable. Running it through a virtual machine did not help much in this case, because I was unable to provide those.&lt;br /&gt;&lt;br /&gt;Another thing I considered to be hard was blog posting, but now that I have just finished my first post it seems that I overreacted.&lt;br /&gt;&lt;br /&gt;That's all for now, have a nice day!&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/5249482770358902661-5258903788645918274?l=home-sorina.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt; </description> 
	<pubDate>Wed, 30 May 2012 14:57:36 +0000</pubDate>
  <author>noreply@blogger.com (Sorina)</author>  
</item> 
<item>
	<title>Michal &amp;#268;iha&amp;#345;: Four counferences in Prague this October</title>
	<guid>http://blog.cihar.com/archives/2012/05/30/four-counferences-prague-october/?utm_source=rss2</guid>
	<link>http://blog.cihar.com/archives/2012/05/30/four-counferences-prague-october/?utm_source=rss2</link>
     <description>  &lt;img src="http://planet.debian.org/heads/nijel.png" width="64" height="67" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;I'm participating on organizing this year's &lt;a href="http://conference.opensuse.org/"&gt;openSUSE conference&lt;/a&gt; and as we've finally finalized place and time and CFP is open, it's time to share some information.&lt;/p&gt;
&lt;p&gt;This will be special - there is not a single conference, but four of them are sharing same space and the motto - &lt;a href="http://bootstrapping-awesome.org/"&gt;Bootstrapping awesome!!!&lt;/a&gt;. The 4th &lt;a href="http://conference.opensuse.org/"&gt;openSUSE conference&lt;/a&gt;  will be held together with &lt;a href="http://www.linuxdays.cz/"&gt;LinuxDays&lt;/a&gt;, Czech conference following tradition of canceled LinuxExpo, what should be the biggest free software event in Czech republic. In addition there will be also 12th SUSE Labs conference (so you can meet quite a lot of kernel hackers and other strange guys) and first &lt;a href="http://miniconf.gentoo.org/"&gt;Gentoo mini summit&lt;/a&gt; (the website is empty so far).&lt;/p&gt;
&lt;p&gt;All that will happen on weekend from 20th October to 21st October, the SUSE conferences will then continue for 22nd and 23rd October.&lt;/p&gt;
&lt;p&gt;I believe it will be great mixture of conferences and I hope to meet lot of people there.&lt;/p&gt;

&lt;p style="font-size: smaller;"&gt;
Filed under: 


&lt;a href="http://blog.cihar.com/archives/english/"&gt;English&lt;/a&gt;

&lt;a href="http://blog.cihar.com/archives/gentoo/"&gt;Gentoo&lt;/a&gt;

&lt;a href="http://blog.cihar.com/archives/suse/"&gt;Suse&lt;/a&gt;

|

&lt;a href="http://blog.cihar.com/archives/2012/05/30/four-counferences-prague-october/#comments"&gt;0 comments&lt;/a&gt;
|
&lt;a href="https://flattr.com/submit/auto?user_id=nijel&amp;amp;url=http://blog.cihar.com/archives/2012/05/30/four-counferences-prague-october/&amp;amp;title=Michal Čihař: Four counferences in Prague this October&amp;amp;description=I'm participating on organizing this year's openSUSE conference and as we've finally finalized place and time and CFP is open, it's time to share some information.&amp;amp;language=en_GB&amp;amp;tags=blog,english,suse,gentoo&amp;amp;category=text"&gt;Flattr this!&lt;/a&gt;
&lt;/p&gt; </description> 
	<pubDate>Wed, 30 May 2012 11:00:00 +0000</pubDate>
  <author>michal@cihar.com (Michal Čihař)</author>  
</item> 
<item>
	<title>Lucas Nussbaum: Debian archive rebuilds on Amazon Web Services</title>
	<guid>http://www.lucas-nussbaum.net/blog/?p=718</guid>
	<link>http://www.lucas-nussbaum.net/blog/?p=718</link>
     <description>  &lt;img src="http://planet.debian.org/heads/lucas.png" width="70" height="88" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;I like to think that archive rebuilds play an important role in Debian Quality Assurance and Release Management efforts. By trying to rebuild every Debian package from source, one can identify packages that do not build anymore due to changes in other packages (compilers, interpreters, libraries, …). It is also a good way to stress-test all packages that are involved in building other packages.&lt;/p&gt;
&lt;p&gt;Since 2007, I had been running Debian archive rebuilds on the &lt;a href="https://www.grid5000.fr/"&gt;Grid’5000 testbed&lt;/a&gt;, a research infrastructure for performing experiments on distributed systems – HPC/Grid/Cloud/P2P. I filed more than 6000 release-critical bugs in the process.&lt;/p&gt;
&lt;p&gt;Late last year, Amazon kindly offered us a grant to allow us to run such QA tests on Amazon Web Services. With &lt;a href="http://www.loria.fr/~badia/"&gt;Sébastien Badia&lt;/a&gt;, we ported the rebuild infrastructure to AWS (&lt;a href="http://anonscm.debian.org/gitweb/?p=collab-qa/cloud-scripts.git;a=summary"&gt;scripts&lt;/a&gt;), and several rebuilds have already been carried out on AWS.&lt;/p&gt;
&lt;p&gt;On the technical level, 50 to 100 EC2 spot instances are started, and then controlled from a &lt;i&gt;master&lt;/i&gt; instance using SSH. On build instances, a classic sbuild setup is used. Logs are retrieved to the master node after rebuilds, and build instances are simply shut down when there are no more tasks to process. Several tasks are processed simultaneously on each instance, and when they fail, they are retried again with no other concurrent build on the same instance, to eliminate random failures caused by load or timing issues. All the scripts are designed to support other kind of QA tests, not just rebuilds.&lt;/p&gt;
&lt;p&gt;Moving to Amazon Web Services will facilitate sharing the human workload of doing those tests. It is now possible for developers interested in custom tests to do them themselves (hint hint).&lt;/p&gt; </description> 
	<pubDate>Wed, 30 May 2012 06:52:30 +0000</pubDate>

</item> 
<item>
	<title>Raphael Geissert: ldebdiff: what local change did I make to a package?</title>
	<guid>tag:blogger.com,1999:blog-3939164541028317159.post-2416127825029067613</guid>
	<link>http://rgeissert.blogspot.com/2012/05/ldebdiff-what-local-change-did-i-make.html</link>
     <description>  When fixing or modifying a package I at times change the installed files directly. However, once the changes are okay and it is time to prepare a diff, having to keep track and manually diff'ing the installed files is time consuming.&lt;br /&gt;&lt;br /&gt;That's when &lt;a href="http://anonscm.debian.org/gitweb/?p=users/atomo64-guest/misc-devscripts.git;a=blob;f=ldebdiff;hb=HEAD"&gt;ldebdiff&lt;/a&gt; does its thing: it runs diff against the original files of a given package and the ones installed on a system.&lt;br /&gt;For example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ ldebdiff acpi-fakekey&lt;br /&gt;--- unpacked/etc/init.d/acpi-fakekey    2012-04-05 05:14:21.000000000 -0500&lt;br /&gt;+++ /etc/init.d/acpi-fakekey    2012-04-12 12:10:55.000000000 -0500&lt;br /&gt;@@ -4,8 +4,8 @@&lt;br /&gt; &lt;br /&gt; ### BEGIN INIT INFO&lt;br /&gt; # Provides:          acpi-fakekey&lt;br /&gt;-# Required-Start:    $local_fs $remote_fs&lt;br /&gt;-# Required-Stop:     $local_fs $remote_fs&lt;br /&gt;+# Required-Start:    $remote_fs&lt;br /&gt;+# Required-Stop:     $remote_fs&lt;br /&gt; # Default-Start:     2 3 4 5&lt;br /&gt; # Default-Stop:      &lt;br /&gt; # Short-Description: Start acpi_fakekey daemon&lt;br /&gt;&lt;/pre&gt;&lt;small&gt;($remote_fs implies $local_fs)&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/3939164541028317159-2416127825029067613?l=rgeissert.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt; </description> 
	<pubDate>Wed, 30 May 2012 04:03:55 +0000</pubDate>
  <author>noreply@blogger.com (Raphael Geissert)</author>  
</item> 
<item>
	<title>Bartosz Fe&amp;#324;ski: dibbler 0.8.2</title>
	<guid>http://fenski.pl/?p=325</guid>
	<link>http://fenski.pl/2012/05/dibbler-0-8-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=dibbler-0-8-2</link>
     <description>  &lt;img src="http://planet.debian.org/heads/fenio.png" width="94" height="100" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;To whom it may concern.&lt;/p&gt;
&lt;p&gt;I’ve just uploaded new upstream version of dibbler (portable DHCPv6 client/server) to unstable.&lt;br /&gt;
The resolvconf patch needed some changes to apply on that version so whoever actually uses dibbler, please test it ASAP so we could address any issues.&lt;/p&gt;
&lt;p&gt;This version amongst other things fixes nasty Debian bug &lt;a href="http://bugs.debian.org/659476"&gt;#659476&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Wed, 30 May 2012 03:40:17 +0000</pubDate>

</item> 
<item>
	<title>Christian Perrier: 2012 update 24 for Debian Installer localization</title>
	<guid>http://www.perrier.eu.org/weblog/bubulle/planet-debian/di-l10n-update-2012-24</guid>
	<link>http://www.perrier.eu.org/weblog/2012/05/30#di-l10n-update-2012-24</link>
     <description>  &lt;img src="http://planet.debian.org/heads/bubulle.png" width="69" height="100" alt="" align="right" style="float: right;"&gt;  &lt;ul&gt;
&lt;li&gt;The "Save the baltic languages" week..:-)
&lt;/li&gt;&lt;li&gt;Latvian translations completed for level 1. Latvian won't be deactivated!
&lt;/li&gt;&lt;li&gt;Also progress in levels 2 and 3 for Latvian
&lt;/li&gt;&lt;li&gt;Lithuanian progress for level 1. Language won't be deactivated!
&lt;/li&gt;&lt;li&gt;Estonian was already safe..:-)
&lt;/li&gt;&lt;/ul&gt;
Status for D-I level 1 (core D-I files):
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;51&lt;/b&gt; languages 100%: ar ast be bg bn bs ca cs da de el eo es et eu fa fi fr gu he hi id it ja kk km kn ko lo &lt;b&gt;lv&lt;/b&gt; mr nb nl pa pl pt pt_BR ru si sk sl sr sv te th tr ug uk vi zh_CN zh_TW
&lt;/li&gt;&lt;li&gt;1 languages 99%: ta
&lt;/li&gt;&lt;li&gt;2 languages 97%: ga hu
&lt;/li&gt;&lt;li&gt;&lt;b&gt;5&lt;/b&gt; languages 95%: dz is &lt;b&gt;lt&lt;/b&gt; mk ro
&lt;/li&gt;&lt;li&gt;1 language 92%: ml
&lt;/li&gt;&lt;li&gt;others are 90% or below
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
Status for D-I level 2 (packages that have localized material that may
appear during default installs, such as iso-codes, tasksel, etc.):
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;31 languages 100%: ast be bg ca cs da de eo es fa fr gu he id is it ja kk km mr nl pl pt ru si sk sl sv tr uk zh_CN
&lt;/li&gt;&lt;li&gt;&lt;b&gt;8&lt;/b&gt; languages 99%: eu fi hr &lt;b&gt;lv&lt;/b&gt; nb th vi zh_TW
&lt;/li&gt;&lt;li&gt;3 languages 98%: dz pt_BR ro
&lt;/li&gt;&lt;li&gt;1 language 97%: ta
&lt;/li&gt;&lt;li&gt;1 language 96%: ug
&lt;/li&gt;&lt;li&gt;3 languages 94%: ar el gl
&lt;/li&gt;&lt;li&gt;1 language 92%: sr
&lt;/li&gt;&lt;li&gt;5 languages 92%: bn bs hu ko ne
&lt;/li&gt;&lt;li&gt;others are 90% or below
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
Status for D-I level 3 (packages that have localized material that may
appear during non-default installs, such as win32-loader)
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;38 languages 100%:  ast be bg bs ca cs da de el eo es fa fi fr ga gl he hr id is it ja kk km nb nl pl pt ru sk sl sr sv th tr vi zh_CN zh_TW
&lt;/li&gt;&lt;li&gt;3 languages 98%:  hu ug uk
&lt;/li&gt;&lt;li&gt;&lt;b&gt;1&lt;/b&gt; language 95%: &lt;b&gt;lv&lt;/b&gt;
&lt;/li&gt;&lt;li&gt;others are 90% or below
&lt;/li&gt;&lt;/ul&gt;
Full 100% completeness (hall of fame) for 26 languages:
Asturian, Belarusian, Bulgarian, Catalan, Czech, Danish, German,
Esperanto, Spanish, Persian, French,
Hebrew, Indonesian, Italian, Japanese, Kazakh, Khmer, Dutch, Polish, Portuguese, Russian,
Slovak, Slovenian, Swedish, Turkish, Simplified Chinese </description> 
	<pubDate>Wed, 30 May 2012 02:46:00 +0000</pubDate>

</item> 
<item>
	<title>Christian Perrier: 12 languages to be deactivated in Debian Installer</title>
	<guid>http://www.perrier.eu.org/weblog/bubulle/planet-debian/di-deactivation-status-6</guid>
	<link>http://www.perrier.eu.org/weblog/2012/05/30#di-deactivation-status-6</link>
     <description>  &lt;img src="http://planet.debian.org/heads/bubulle.png" width="69" height="100" alt="" align="right" style="float: right;"&gt;  &lt;ul&gt;
&lt;li&gt;Latvian is now completed.
&lt;/li&gt;&lt;li&gt;Lithuanian is now completed.
&lt;/li&gt;&lt;li&gt;I got an offer for Welsh
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
At this very moment, it means that I would deactivate 14 languages:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;Amharic (5f17u in sublevel 2)
&lt;/li&gt;&lt;li&gt;Welsh (39f82u, 32f47u)
&lt;/li&gt;&lt;li&gt;Galician (7f10u, 6f9u)
&lt;/li&gt;&lt;li&gt;Croatian (16f19u, 6f9u)
&lt;/li&gt;&lt;li&gt;Georgian (17f47u, 10f21u)
&lt;/li&gt;&lt;li&gt;Kurdish (12f25u, 6f22u)
&lt;/li&gt;&lt;li&gt;Malayalam (5u in sublevel 2 only!)
&lt;/li&gt;&lt;li&gt;Nepali (16f54u, 10f21u)
&lt;/li&gt;&lt;li&gt;Norwegian Nynorsk (13f34u, 13f23u)
&lt;/li&gt;&lt;li&gt;Albanian (19f50u, 13f23u)
&lt;/li&gt;&lt;li&gt;Tamil (2f1u, 1f)
&lt;/li&gt;&lt;li&gt;Tagalog (18f54u, 24f39u)
&lt;/li&gt;&lt;/ul&gt; </description> 
	<pubDate>Wed, 30 May 2012 02:43:00 +0000</pubDate>

</item> 
<item>
	<title>Paul Tagliamonte: Goofing off with sbuild "variants"</title>
	<guid>http://blog.pault.ag/post/24040381626</guid>
	<link>http://blog.pault.ag/post/24040381626</link>
     <description>  &lt;img src="http://planet.debian.org/heads/paultag.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;I’ve recently found myself in need of more then one sbuild chroot, each one set up slightly differently then the next. For a while, providing different behavior with &lt;code&gt;unstable&lt;/code&gt; and &lt;code&gt;sid&lt;/code&gt; was all well and good, but I figure, like any good computer scientist, I should solve the general problem.&lt;/p&gt;

&lt;p&gt;As a result, I’ve written an sbuild wrapper to help maintain sanity. It uses a series of symbolic links to hide everything out of the way, and some bash hackery.&lt;/p&gt;

&lt;p&gt;Basically, I’ve set up a &lt;code&gt;/var/sbuild&lt;/code&gt; directory, full of a few different files. For each distribution, there is one folder, one symbolic link and up to two other files. There’s the dist.d file (such as &lt;code&gt;/var/sbuild/sid.d&lt;/code&gt;) that contains all the “variants”, dist symbolic link (such as &lt;code&gt;/var/sbuild/sid&lt;/code&gt;) which points to the currently active chroot, and up to two lock files.&lt;/p&gt;

&lt;p&gt;The script will default to sid-default (that is to say, exactly, &lt;code&gt;/var/sbuild/sid.d/sid-default&lt;/code&gt; - which is a symbolc link to the “default” chroot), but may take two arguments, in the order of variant, then dist.&lt;/p&gt;

&lt;p&gt;Currently, I have two chroots, one for gcc, and one for clang (set up like Sylvestre used for &lt;a href="http://clang.debian.net/" target="_blank"&gt;cland.d.n&lt;/a&gt;) — but I may add some more with different setups.&lt;/p&gt;

&lt;p&gt;Currently the behavior is to have the second wait kindly if you kick off two sbuilds at once, and fail out a third.&lt;/p&gt;

&lt;p&gt;There are a bunch of bugs, and I’m not sure that this will work very well, but it’s working.&lt;/p&gt;

&lt;p&gt;The next step is to combine this with unionfs overlays to help protect accidentally trashing the chroots.&lt;/p&gt;

&lt;p&gt;You can find the script on my &lt;a href="https://github.com/paultag/dot-bin/blob/master/sb" target="_blank"&gt;GitHub&lt;/a&gt;, pasted below.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/bash

DIST="sid"
VARIANT="default"
SBUILD=/var/sbuild

if [ "x$1" != "x" ]; then
    VARIANT=$1
fi
if [ "x$2" != "x" ]; then
    DIST=$2
fi

if [ -e $SBUILD/$DIST.lock ]; then
    PID=`cat $SBUILD/$DIST.lock`
    echo "W: We *must* wait for the finish of PID $PID"
    echo "W: Blocking execution until this file is removed."
    if [ -e $SBUILD/$DIST.wait ]; then
        echo "E: Someone else is waiting. Bombing out."
        exit 2
    fi
    echo $$ &amp;gt; $SBUILD/$DIST.wait
    while [ -e $SBUILD/$DIST.lock ]; do
        sleep 1
    done
    echo "I: Dropping out of lock. Purging wait."
    rm $SBUILD/$DIST.wait
fi

echo "I: Aquiring lock"
echo $$ &amp;gt; $SBUILD/$DIST.lock

CURRENT=$(basename `ls -xl $SBUILD/$DIST | awk '{print $11}'`)

# We set up the name like:
#   dist-variant
# such as "sid-clang" is cool.
#echo "I: We're currently $CURRENT."

if [ "x$CURRENT" == "x$DIST-$VARIANT" ]; then
    echo "I: This matches the desired setup. No action."
else
    if [ -e $SBUILD/$DIST.d/$DIST-$VARIANT ]; then
        echo "I: Re-setting $DIST symlink."
        rm $SBUILD/$DIST
        ln -s $SBUILD/$DIST.d/$DIST-$VARIANT $SBUILD/$DIST
    else
        echo "E: No such dist! Looking in $SBUILD/$DIST.d/$DIST-$VARIANT."
        exit 1
    fi
fi

echo "I: "
echo "I: Dist:    $DIST"
echo "I: Variant: $VARIANT"
echo "I: "
# echo "I: Before we go farther, we're updating."
# sbuild-update -d $DIST --upgrade

sbuild -d $DIST

echo "I: Releasing lock"
rm $SBUILD/$DIST.lock
&lt;/code&gt;&lt;/pre&gt; </description> 
	<pubDate>Wed, 30 May 2012 02:41:00 +0000</pubDate>

</item> 
<item>
	<title>Paul Tagliamonte: My first foray into non-compliant Debian packages</title>
	<guid>http://blog.pault.ag/post/24031431219</guid>
	<link>http://blog.pault.ag/post/24031431219</link>
     <description>  &lt;img src="http://planet.debian.org/heads/paultag.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;I’ve decided to start putting together packages to rebuild the bare bones install I use for most of my systems, since rebuilding everything by hand is starting to get annoying. I call it &lt;a href="https://github.com/paultag/hairycandy" target="_blank"&gt;hairy candy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Because my setup relies on some &lt;em&gt;chem&lt;/em&gt; interesting &lt;em&gt;chem&lt;/em&gt; hacks, none of this is fit — in any way — for the archive.&lt;/p&gt;

&lt;p&gt;If the vim team was to catch wind of what I was doing, they’d be none too happy :)&lt;/p&gt;

&lt;p&gt;While these packages work great for me, I can’t stress enough how badly they can break something.&lt;/p&gt;

&lt;p&gt;Using &lt;a href="http://upsilon.cc/~zack/blog/posts/2009/04/howto:_uploading_to_people.d.o_using_dput/" target="_blank"&gt;Zack’s guide&lt;/a&gt;, I was able to get an &lt;a href="http://archive.pault.ag/" target="_blank"&gt;archive&lt;/a&gt; up and running, no problem. Taking his advice, I even got signing working. Simple.&lt;/p&gt;

&lt;p&gt;mini-dinstall rocks — a nice alternative to a PPA, for sure. At least, for one arch :)&lt;/p&gt;

&lt;p&gt;Now, the one spin I took on Zack’s work was to add a “landing” page — a listing of what’s in the archive.&lt;/p&gt;

&lt;p&gt;I did this using a bit of Python &amp;amp; Jinja2. The script follows.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python
# Copyright (c) Paul Tagliamonte, under the terms of the Expat license.

from jinja2 import Template
import sys

def parse_packages(fd):
    ret = []
    cur = {}
    key = None
    for line in fd.readlines():
    if line.strip() == "":
        ret.append(cur)
        cur = {}
        continue

    if line[0] == " ":
        cur[key] += "\n" + line.strip()
    else:
        key, val = line.split(":", 1)
        cur[key] = val.strip()
    return ret

pkgs = parse_packages(open(sys.argv[1], 'r'))
context = {
    "pkgs": pkgs
}

t = Template(open(sys.argv[2], 'r').read())
print t.render(**context)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Invocation looks something like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;render.py $ARCHIVE/debian/wicked/Packages $DATA/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I kick this script off in the singing script, since mini-dinstall doesn’t have a exit hook.&lt;/p&gt;

&lt;p&gt;Works great, thanks everyone!&lt;/p&gt; </description> 
	<pubDate>Wed, 30 May 2012 00:40:00 +0000</pubDate>

</item> 
<item>
	<title>Daniel Kahn Gillmor: KVM, Windows XP, and Stop Error Code 0x0000007B</title>
	<guid>http://debian-administration.org/users/dkg/weblog/86</guid>
	<link>http://debian-administration.org/users/dkg/weblog/86</link>
     <description>  &lt;img src="http://planet.debian.org/heads/dkg.png" width="65" height="89" alt="" align="right" style="float: right;"&gt;  i dislike having to run Windows as much as the next free software developer, but like many sysadmins, i am occasionally asked to maintain some legacy systems. &lt;p&gt; A nice way to keep these systems available (while not having to physically maintain them) is to put them in a virtual sandbox using a tool like kvm. While kvm makes it relatively straightforward to install WinXP from a CD (as long as you have the proper licensing key), it is more challenging to transition a pre-existing hardware windows XP installation into a virtual instance, due to Windows only wanting to boot to ide chipsets that it remembers being installed to. &lt;/p&gt;&lt;p&gt; In particular, booting a disk image pulled from a soon-to-be-discarded physical disk can produce a Blue Screen of Death (BSOD) with the message: &lt;/p&gt;&lt;pre&gt;Stop error code 0x0000007B
&lt;/pre&gt; or &lt;pre&gt;(INACCESSABLE_BOOT_DEVICE)
&lt;/pre&gt;&lt;p&gt; This seems like it's roughly the equivalent (in a standard debian GNU/Linux environment) of specifying &lt;tt&gt;MODULES=dep&lt;/tt&gt; in &lt;tt&gt;/etc/initramfs-tools/initramfs.conf&lt;/tt&gt;, and then trying to swap out all the hardware. &lt;/p&gt;&lt;p&gt; At first blush, Microsoft's knowledge base &lt;a href="http://support.microsoft.com/kb/316401" rel="nofollow"&gt;suggests doing an in-place upgrade or full repartition and reinstall&lt;/a&gt;, which are both fairly drastic measures -- you might as well just start from scratch, which is exactly what you &lt;em&gt;don't&lt;/em&gt; want to have to do for a nursed-along legacy system which no one who originally set it up is even with the organization any more. &lt;/p&gt;&lt;p&gt; Fortunately, a bit more digging in the Knowledge Base turned up &lt;a href="http://support.microsoft.com/kb/314082" rel="nofollow"&gt;an unsupported set of steps&lt;/a&gt; that appears to be the equivalent of setting &lt;tt&gt;MODULES=most&lt;/tt&gt; (at least for the IDE chipsets). Running this on the old hardware before imaging the disk worked for me, though i did need to re-validate Windows XP after the reboot by typing in the long magic code again. i guess they're keying it to the hardware, which clearly changed in this instance. &lt;/p&gt;&lt;p&gt; Such silliness to spend time working around, really, when i'd rather be spending my time working on free software. :/&lt;/p&gt; </description> 
	<pubDate>Tue, 29 May 2012 22:57:34 +0000</pubDate>

</item> 
<item>
	<title>Jon Dowland: Debian Day</title>
	<guid>http://jmtd.net/log/debian_day/</guid>
	<link>http://jmtd.net/log/debian_day/</link>
     <description>  &lt;img src="http://planet.debian.org/heads/jmtd.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;After a relatively long period of flux, I've managed to settle into a routine
where I've got all the time I can dedicate to open source stuff bunched
together: every Tuesday night. I've started calling it "Debian Day", although
Debian won't get all that time exclusively.&lt;/p&gt;

&lt;p&gt;One evening a week doesn't sound like much, but that's unfortunately a
realistic amount given my other commitments. Still, having a firm idea of how
much resource I have makes planning what I can and can't do much easier. It
also means I need to be quite selective about what I spend my time on.&lt;/p&gt;

&lt;p&gt;This also impacts the type of interactions I can use.  I can respond to email,
bugs, etc., but I cannot effectively interact with folks on IRC, for example:
the period between windows is too large for it to work effectively. Therefore,
I can't work reliably with any team or area of Debian that &lt;em&gt;relies&lt;/em&gt; on IRC to
get things done.&lt;/p&gt;

&lt;p&gt;Tonight, then.  I have recently been ripping some CDs, a task for which I use
&lt;a href="http://sourceforge.net/projects/grip/"&gt;grip&lt;/a&gt;, despite it long since having
been dropped by Debian. It still works very well, whereas &lt;a href="http://live.gnome.org/SoundJuicer"&gt;Sound
Juicer&lt;/a&gt;, which still pops up whenever I
insert an audio CD, &lt;a href="http://bugs.debian.org/644512"&gt;does not&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I've been interested in helping out with Debian GNOME packaging for a while,
and it seems the issue has been fixed upstream, but after asking around in
&lt;code&gt;#debian-gnome&lt;/code&gt;, the root cause is that the newer musicbrainz API packages have
not been uploaded to Debian. (&lt;a href="http://bugs.debian.org/631610"&gt;the existing package uses the old
API&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Two separate people appear to have been working on a new Music Brainz package,
but neither filed an ITP bug. I've spent the largest chunk of my Debian time
just trying to figure out what has been going on, sadly, but at least there's
the likelyhood this will be fixed for wheezy.&lt;/p&gt;

&lt;p&gt;There's also the &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=656587"&gt;tail end of a musicbrainz-2.1
transition&lt;/a&gt; finishing
up.&lt;/p&gt;

&lt;p&gt;Another thing I considered this evening was the future of &lt;a href="http://jmtd.net/log/../software/debgtd/"&gt;debgtd&lt;/a&gt;
in Debian stable. On reflection, and after sitting on the fence &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=596751"&gt;for several
months&lt;/a&gt;, I've decided
I don't have the time to fix it up enough to have it ready for wheezy, so with
regret I've filed a removal bug.  With any luck, at some point in the wheezy
cycle I'll manage to put more time towards this, because I think it addresses a
genuine need and could be useful to people.&lt;/p&gt;

&lt;p&gt;Finally, whenever I sit down and look at Debian stuff to finish up, I have a
strong temptation to fix some issues belonging to the &lt;a href="http://jmtd.net/log/./games_team/"&gt;games team&lt;/a&gt;. In
particular, Gustavo Panizzo has put a lot of work into &lt;a href="http://mentors.debian.net/package/vavoom"&gt;vavoom
packages&lt;/a&gt;, but sadly &lt;a href="http://wiki.debian.org/Games/Sponsors/Queue"&gt;his requests
for sponsorship are falling on deaf
ears&lt;/a&gt;. There's also &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=609352"&gt;Johey Shmit's
work on packaging
zdoom&lt;/a&gt; which needs
some attention to finish removing some embedded libraries. I have to keep
reminding myself I left the team for a reason, to focus on something else, and
finding that something else should be the priority.&lt;/p&gt;

&lt;p&gt;So all in all not the most uplifting evening: I'm starting to think I simply
couldn't work effectively with the Debian GNOME team without being able to
dedicate more time to use IRC effectively; I spent more time that could be
necessary figuring out a bunch of other folks have potentially wasted each
other's time by working on packages and not filing ITPs; and I've removed one
of my own packages from the distribution altogether.&lt;/p&gt;

&lt;p&gt;It's not all doom and gloom, though: last week &lt;a href="http://packages.debian.org/sid/lhasa"&gt;I packaged Simon Howard's
lhasa&lt;/a&gt;, a library and tool for
decompressing LHA files, as used by various old DOS games. (See? I just can't
escape that stuff…) I also managed to 'resolve' two bup bugs, &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=664185"&gt;one
RC&lt;/a&gt;. I also finished
transitioning from &lt;a href="http://jmtd.net/log/../about/7032F238.txt"&gt;my old PGP key&lt;/a&gt; to
&lt;a href="http://jmtd.net/log/../about/06aaaaaa.txt"&gt;my new one&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Tue, 29 May 2012 22:18:54 +0000</pubDate>

</item> 
<item>
	<title>Bartosz Fe&amp;#324;ski: burp 1.3.6</title>
	<guid>http://fenski.pl/?p=323</guid>
	<link>http://fenski.pl/2012/05/burp-1-3-6/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=burp-1-3-6</link>
     <description>  &lt;img src="http://planet.debian.org/heads/fenio.png" width="94" height="100" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;Enjoy burp 1.3.6 in unstable! &lt;img src="http://fenski.pl/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /&gt; &lt;/p&gt; </description> 
	<pubDate>Tue, 29 May 2012 20:13:43 +0000</pubDate>

</item> 
<item>
	<title>Steve Kemp: A heady mixture of photography and programming</title>
	<guid>http://blog.steve.org.uk/a_heady_mixture_of_photography_and_programming.html</guid>
	<link>http://blog.steve.org.uk/a_heady_mixture_of_photography_and_programming.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/skx.png" width="76" height="105" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;The past few weeks have consisted of a heady mixture of taking interesting pictures of cute people, and writing code.&lt;/p&gt;
&lt;p&gt;I spent a while &lt;a href="http://outflux.net/teach-seccomp/"&gt;getting to grips with seccomp filters&lt;/a&gt;, using the facilities present in recent GNU/Linux Kernels to filter system calls binaries are allowed to make.&lt;/p&gt;
&lt;p&gt;My initial test was to patch &lt;a href="http://www.gnu.org/software/less/"&gt;GNU Less&lt;/a&gt; to only allow it to open, read, and close files.  The side-effect of this was that the built in shell-escape was closed, thus allowing me to test it.&lt;/p&gt;
&lt;p&gt;After that I toyed around with &lt;a href="https://aoeex.com/index.php?id=7"&gt;interfacing with spidermonkey|seamonkey&lt;/a&gt;.  In this regard I was less succesful, but I did manage to write code in C that would invoke javascript functions loaded dynamically.  Similarly I could call from my (loaded) javascript code into functions defined in C.&lt;/p&gt;
&lt;p&gt;I don't have a use for a Javascript to/from C bridge, but I'm sure that time will come.&lt;/p&gt;
&lt;p&gt;Photography has been a constant distraction, I took &lt;a href="http://edinburgh-portraits.com/events/edinburgh-marathon-2012/"&gt;some
fun shots of the Edinburgh Marathon&lt;/a&gt;, and then distracted myself with
a volunteer to take an &lt;a href="http://linkti.me/i/7L.jpg"&gt;abstract
fishnet photograph&lt;/a&gt;.  We went on to do some more fun shots begin
careful to stay on the safe side of the NSFW limit.  I think this is &lt;a href="http://linkti.me/i/7M.jpg"&gt;borderline NSFW&lt;/a&gt;, but we were both clear exactly what we wanted and we got it perfectly there.&lt;/p&gt;
&lt;p&gt;Next week will be quieter, but providing we don't have another mini-heatwave in Edinburgh I'll be cheerful regardless.&lt;/p&gt;
&lt;p&gt;ObQuote: One, two, Freddy's coming for you. - A Nightmare on Elm Street (original)&lt;/p&gt; </description> 
	<pubDate>Tue, 29 May 2012 15:06:59 +0000</pubDate>

</item> 
<item>
	<title>Niels Thykier: Lintian 2.5.7 and 2.5.8</title>
	<guid>http://nthykier.wordpress.com/?p=145</guid>
	<link>http://nthykier.wordpress.com/2012/05/29/lintian-2-5-7-and-2-5-8/</link>
     <description>  &lt;p&gt;The new version of Lintian (2.5.8) can pretty much be summed up as:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Its like 2.5.7, only with less false positives and no FTBFS.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Especially people annoyed by the hardening flags will hopefully find that 2.5.8 greatly reduces the number of false positives.  I believe this is best demonstrated with an example:&lt;/p&gt;
&lt;pre&gt;$ lintian --print-version &amp;amp;&amp;amp; lintian -q -C binaries amarok_2.5.0-1_i386.deb | wc -l 
2.5.7
94
[...]
$ lintian --print-version &amp;amp;&amp;amp; lintian -q -C binaries amarok_2.5.0-1_i386.deb | wc -l
2.5.8
4&lt;/pre&gt;
&lt;p&gt;However, nothing comes for free.  We dropped hardening-no-stackprotector from the default profile (and demoted it to an “I” tag).  For hardening-no-fortify-functions we made a “false positive -&amp;gt; false negative” trade-off by ignoring binaries if their only unprotected function is memcpy.  For more information, please refer to #&lt;a href="http://bugs.debian.org/673112" title="lintian: hardening-no-stackprotector check has many false positives"&gt;673112&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;hardening-no-stackprotector is still available and can be used via the debian/extra-hardening profile (or via the –tags argument).  For the 2.5.7 behaviour of hardening-no-fortify-functions, you have to use hardening-check directly.&lt;/p&gt;
&lt;p&gt;But 2.5.7 had other changes besides the myriad of false-positives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Around 19 redundant tags were removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A consequence of this is that we no longer warn if you use things like “dpkg –assert-working-epoch” or your postinst creates a “usr/doc transition symlink”.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The last of the Lintian’s (perl) modules have been put under the Lintian name space.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With all the Lintian modules under the Lintian namespace, we can install them in the standard perl @INC path.  Admittedly, I am not certain we are ready to commit to the current API in these modules, which is one of the reasons why they are still installed in /usr/share/lintian.  But in a couple of releases things may look differently. &lt;img src="http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lazy loading of data files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lintain 2.5.7 ships over 50 data files of various kinds (usually white- or blacklists of some kind).  Before 2.5.7, all data files with a few exceptions would be loaded eagerly (i.e. as soon as the check was run for the first time).  A few data files had been special cased with “manual laziness”.&lt;/p&gt;
&lt;p&gt;In 2.5.7, Lintian::Data was updated to lazily load the data.  So depending on the packages being checked, Lintian may now load fewer data files.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create proper data files for tables embedded within checks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While this is not something exclusive to 2.5.7, we have separated quite a few checks from their data tables by now.  My personal favorites are the table of known &lt;a href="http://anonscm.debian.org/gitweb/?p=lintian/lintian.git;a=commitdiff;h=ecf482ce3cd58e27e2ffeac3a50425f37e2766ec;hp=448999860fd440c2997d6eaf7803914870c92f1a" title="scripts: Move %interpreters to a data file"&gt;interpreters&lt;/a&gt; and (from 2.5.8) the table of known &lt;a href="http://anonscm.debian.org/gitweb/?p=lintian/lintian.git;a=commitdiff;h=0a558beac49c5f876e9d9f4881fde309ad6fad60;hp=fbadadda101eaabf75060c63905f04ccf4bb0676" title=" c/scripts: Add data file for versioned interpreters"&gt;versioned interpreters&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for Vendor specific data files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am certainly biased here.  But this is probably the most awesome feature in Lintian 2.5.7.  It is now possible for vendors to extend or simply “shadow” the core Lintian data files.  Allow me to demonstrate how this can be used:&lt;/p&gt;
&lt;pre&gt;$ lintian --tags build-depends-on-obsolete-package a2ps_4.14-1.1.dsc 
E: a2ps source: build-depends-on-obsolete-package build-depends: dpatch
$ cat ~/.lintian/profiles/local/main.profile 
Profile: local/main
Extends: debian/main
$ cat  ~/.lintian/vendors/local/main/data/fields/obsolete-packages 
@include-parent
@delete dpatch
bison
$ lintian --profile local/main --tags build-depends-on-obsolete-package a2ps_4.14-1.1.dsc
E: a2ps source: build-depends-on-obsolete-package build-depends: bison
$&lt;/pre&gt;
&lt;p&gt;It is a toy example, but I believe it is a good demonstration of the feature.&lt;/p&gt;
&lt;p&gt;The full documentation of Vendor specific data files can be found in the Lintian User manual (in lintian/2.5.7 or newer).  It will also be on lintian.debian.org when we find time to update lintian there.  &lt;img src="http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;br /&gt;  &lt;a href="http://feeds.wordpress.com/1.0/gocomments/nthykier.wordpress.com/145/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/comments/nthykier.wordpress.com/145/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godelicious/nthykier.wordpress.com/145/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/delicious/nthykier.wordpress.com/145/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gofacebook/nthykier.wordpress.com/145/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/facebook/nthykier.wordpress.com/145/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gotwitter/nthykier.wordpress.com/145/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/twitter/nthykier.wordpress.com/145/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/gostumble/nthykier.wordpress.com/145/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/stumble/nthykier.wordpress.com/145/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/godigg/nthykier.wordpress.com/145/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/digg/nthykier.wordpress.com/145/" alt="" border="0" /&gt;&lt;/a&gt; &lt;a href="http://feeds.wordpress.com/1.0/goreddit/nthykier.wordpress.com/145/" rel="nofollow"&gt;&lt;img src="http://feeds.wordpress.com/1.0/reddit/nthykier.wordpress.com/145/" alt="" border="0" /&gt;&lt;/a&gt; &lt;img src="http://stats.wordpress.com/b.gif?host=nthykier.wordpress.com&amp;amp;blog=21789318&amp;amp;post=145&amp;amp;subd=nthykier&amp;amp;ref=&amp;amp;feed=1" alt="" height="1" border="0" width="1" /&gt; </description> 
	<pubDate>Tue, 29 May 2012 12:52:49 +0000</pubDate>

</item> 
<item>
	<title>Michal &amp;#268;iha&amp;#345;: Android support in Gammu</title>
	<guid>http://blog.cihar.com/archives/2012/05/29/android-support-gammu/?utm_source=rss2</guid>
	<link>http://blog.cihar.com/archives/2012/05/29/android-support-gammu/?utm_source=rss2</link>
     <description>  &lt;img src="http://planet.debian.org/heads/nijel.png" width="64" height="67" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;Android support in &lt;a href="http://wammu.eu/gammu/"&gt;Gammu&lt;/a&gt; is one of frequently requested features. I don't have neither time to motivation to do that, so unless somebody else will step up, it won't be done.&lt;/p&gt;
&lt;p&gt;Recently, I got offer from &lt;a href="http://www.fjsoft.at/en/"&gt;MyPhoneExplorer&lt;/a&gt; author to share it's
applet for communicating with Android phones. It basically provides
protocol similar to Sony-Ericsson phones Gammu already supports, just
over TCP/IP. So all what would have to be done is glue layer for using
TCP/IP and possibly some minor adjustments to Sony-Ericsson code. Both
of these should be quite easy tasks and I'm willing to guide you
through this process.&lt;/p&gt;
&lt;p&gt;In case anybody would be interested in this challenge, just let me
know :-).&lt;/p&gt;

&lt;p style="font-size: smaller;"&gt;
Filed under: 


&lt;a href="http://blog.cihar.com/archives/english/"&gt;English&lt;/a&gt;

&lt;a href="http://blog.cihar.com/archives/gammu/"&gt;Gammu&lt;/a&gt;

|

&lt;a href="http://blog.cihar.com/archives/2012/05/29/android-support-gammu/#comments"&gt;0 comments&lt;/a&gt;
|
&lt;a href="https://flattr.com/submit/auto?user_id=nijel&amp;amp;url=http://blog.cihar.com/archives/2012/05/29/android-support-gammu/&amp;amp;title=Michal Čihař: Android support in Gammu&amp;amp;description=Android support in Gammu is one of frequently requested features. I don't have neither time to motivation to do that, so unless somebody else will step up, it won't be done.&amp;amp;language=en_GB&amp;amp;tags=blog,english,gammu&amp;amp;category=text"&gt;Flattr this!&lt;/a&gt;
&lt;/p&gt; </description> 
	<pubDate>Tue, 29 May 2012 10:00:00 +0000</pubDate>
  <author>michal@cihar.com (Michal Čihař)</author>  
</item> 
<item>
	<title>Martin-&amp;#201;ric Racine: OpenWRT: accepting Router Adverts from the ISP in White Russian?</title>
	<guid>tag:blogger.com,1999:blog-20663524.post-939126476154963346</guid>
	<link>http://q-funk.blogspot.com/2012/05/openwrt-accepting-router-adverts-from.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/qfunk.png" width="57" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;As we are getting closer to the &lt;strong&gt;World IPv6 Day&lt;/strong&gt;, I thought that I'd see if I can upgrade my WRT54GL's OpenWRT (White Russian) installation to accept Router Adverts from the ISP to acquire an IPv6 address (rather than via a 4-to-6 tunnel broker, which seems to be the most documented case), and to propagate its IPv6 address space to my local network via my WRT45GL's &lt;tt&gt;radvd&lt;/tt&gt;. Unfortunately, most of the instructions out there concern newer OpenWRT releases to which I cannot upgrade to because their software base takes up significantly more space than White Russian does. Still, I figure that someone in the community must have already succeeded at configuring their WRT54GL for this and might be able to help. Anyone? :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/20663524-939126476154963346?l=q-funk.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt; </description> 
	<pubDate>Tue, 29 May 2012 07:05:56 +0000</pubDate>
  <author>noreply@blogger.com (Martin-Éric)</author>  
</item> 
<item>
	<title>C.J. Adams-Collier: Ohai!  It looks like I’m back online!</title>
	<guid>http://wp.colliertech.org/cj/?p=1208</guid>
	<link>http://wp.colliertech.org/cj/?p=1208</link>
     <description>  &lt;img src="http://planet.debian.org/heads/cj.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;I’m working on my disk array today. The plan is to take the data off of a 6-disk RAID-6 and put it onto three 4-disk RAID-4s.&lt;/p&gt;
&lt;p&gt;&lt;a alt="image" href="http://wp.colliertech.org/cj/wp-content/uploads/2012/05/wpid-IMG_20120528_1133403.jpg"&gt;&lt;img src="http://wp.colliertech.org/cj/wp-content/uploads/2012/05/wpid-IMG_20120528_1133402.jpg" alt="image" class="alignnone" title="IMG_20120528_113340.jpg" /&gt;&lt;/a&gt;&lt;/p&gt; </description> 
	<pubDate>Tue, 29 May 2012 02:30:29 +0000</pubDate>

</item> 
<item>
	<title>Jonathan McDowell: Go go gadget multiarch</title>
	<guid>http://www.earth.li/~noodles/blog/2012/05/go-go-gadget-multiarch.html</guid>
	<link>http://www.earth.li/~noodles/blog/2012/05/go-go-gadget-multiarch.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/noodles.png" width="110" height="118" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;&lt;a href="http://wiki.debian.org/Multiarch"&gt;Multiarch&lt;/a&gt; has been coming RSN for an extremely lengthy meaning of the word "soon". I remember watching Tollef give a presentation about it at &lt;a href="http://debconf4.debconf.org/"&gt;DebConf4&lt;/a&gt; and I'm pretty sure it's been talked about at every DebConf since then as well. Deemed the "correct" answer to the issue of running i386 binaries on x86_64 machines, or old ARM ABI programs on more modern hardware, it's always seemed to be at least another Debian release away.&lt;/p&gt;

&lt;p&gt;Not so anymore. Through foolishness I ended up buying a Brother &lt;a href="http://www.earth.li/~noodles/blog/www.brother-usa.com/printer/modeldetail.aspx?PRODUCTID=HL3040CN"&gt;HL3040CN&lt;/a&gt; when I first moved to the US. It was a cheap networked laser printer and it touted Linux support. Quality wise it's been fine. I don't use it a lot, but unlike an inkjet I don't have to worry about not using it for a month and then needing to print something in a hurry and having to clean print heads etc. Where it falls down is that I failed to check that "Linux support" involved source. No. Instead it involves an i386 binary (at least packaged as a .deb, but in a horrible fashion). Up until now I've mostly been printing from my laptop, so all the drivers are installed there. I've got some guests this week and they needed to print their boarding passes, so I decided it was time to make the house server act as a print server too. It's an AMD64 box and before now I haven't had any need to run i386 code on it, so when I installed the driver deb it failed to work. Normally I'd just install &lt;code&gt;ia32-libs&lt;/code&gt;, but this time I decided to try multiarch. So I did:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# dpkg --add-architecture i386
# apt-get update
# apt-get install libc6:i386
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and magically I was now able to run the printer driver binary. I know there's a lot more work still to be done (I need to check if I can ditch &lt;code&gt;ia32-libs&lt;/code&gt; on my laptop which runs a few more i386 only apps), but this is pretty cool - thanks to all those involved in making it happen!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I tried to install all the multiarch bits required for &lt;a href="http://www.skype.com"&gt;Skype&lt;/a&gt; on my laptop but hit an issue with &lt;code&gt;libqtgui4:i386&lt;/code&gt; which ends up pulling in &lt;code&gt;liblcms1:i386&lt;/code&gt; which isn't yet multiarch enabled. There was already a bug, &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637732"&gt;#637732&lt;/a&gt; filed by vorlon, and mhy did the appropriate NMU a week ago, so it should hopefully hit testing in the next week. Thanks guys.&lt;/p&gt; </description> 
	<pubDate>Mon, 28 May 2012 19:58:58 +0000</pubDate>

</item> 
<item>
	<title>Vincent Bernat: Integration of NetSNMP into an event loop</title>
	<guid>http://www.luffy.cx/en/blog/2012-snmp-event-loop.html</guid>
	<link>http://vincent.bernat.im/en/blog/2012-snmp-event-loop.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/bernat.png" width="67" height="82" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;&lt;em&gt;NetSNMP&lt;/em&gt; comes with its own &lt;a href="http://en.wikipedia.org/wiki/Event_loop" title="Event loop on Wikipedia"&gt;event loop&lt;/a&gt; based on the &lt;code&gt;select()&lt;/code&gt;
system call. While you can build your program around it, you may
prefer to use an existing event loop, either a custom one or something
like &lt;a href="http://libevent.org/" title="libevent – an event notification library"&gt;libevent&lt;/a&gt;, &lt;a href="http://software.schmorp.de/pkg/libev.html" title="libev – a full-featured and high-performance event loop"&gt;libev&lt;/a&gt; or &lt;a href="http://twistedmatrix.com" title="an event-driven networking engine written in Python"&gt;Twisted&lt;/a&gt;.&lt;/p&gt;
&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#own-custom-event-loop"&gt;Own custom event loop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#third-party-event-loop"&gt;Third-party event loop&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#libevent"&gt;libevent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#twisted-reactor"&gt;Twisted reactor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#miscellaneous"&gt;Miscellaneous&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#lack-of-asynchronicity"&gt;Lack of asynchronicity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#limitation-of-file-descriptor-sets"&gt;Limitation of file descriptor sets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#threads"&gt;Threads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h1 id="own-custom-event-loop"&gt;Own custom event loop&lt;/h1&gt;
&lt;p&gt;Let’s start with the easiest case: you have written your own event
loop. This means you make a call to &lt;code&gt;select()&lt;/code&gt;, &lt;code&gt;poll()&lt;/code&gt;, &lt;code&gt;epoll()&lt;/code&gt;,
&lt;code&gt;kqueue()&lt;/code&gt; or something similar. All those functions take a set of
file descriptors and wait for any of them to become available in a
specified time frame.&lt;/p&gt;
&lt;p&gt;Here is a typical use of &lt;code&gt;select()&lt;/code&gt; (adapted from &lt;a href="http://www.nongnu.org/quagga/" title="Quagga Routing Software Suite"&gt;Quagga&lt;/a&gt;)&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;readfd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;readfd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;writefd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;writefd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;exceptfd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;exceptfd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;timer_wait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;thread_timer_wait&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;select&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FD_SETSIZE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;readfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;writefd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;exceptfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="n"&gt;timer_wait&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;errno&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;&lt;span class="caps"&gt;EINTR&lt;/span&gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* signal received - process it */&lt;/span&gt;
    &lt;span class="n"&gt;zlog_warn&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"select() error: %s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
               &lt;span class="n"&gt;safe_strerror&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;errno&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;&lt;span class="caps"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cm"&gt;/* Timeout handling */&lt;/span&gt;
    &lt;span class="n"&gt;thread_timer_process&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;thread_process_fd&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;readfd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;thread_process_fd&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;writefd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;thread_process_fd (fds)&lt;/code&gt; function iterates on each file descriptor
&lt;code&gt;fd&lt;/code&gt; and executes the appropriate action if &lt;code&gt;FD_ISSET (fds, fd)&lt;/code&gt; is true.&lt;/p&gt;
&lt;p&gt;Integrating &lt;em&gt;NetSNMP&lt;/em&gt; into such an event loop is easy: &lt;em&gt;NetSNMP&lt;/em&gt;
provides the &lt;code&gt;snmp_select_info()&lt;/code&gt; function which alters a set of file
descriptors to insert its own.  Here is the new code:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#if defined HAVE_SNMP&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;timeval&lt;/span&gt; &lt;span class="n"&gt;snmp_timer_wait&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;snmpblock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;fdsetsize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="cm"&gt;/* ... */&lt;/span&gt;

&lt;span class="cp"&gt;#if defined HAVE_SNMP&lt;/span&gt;
&lt;span class="n"&gt;fdsetsize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FD_SETSIZE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;snmpblock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timer_wait&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;snmpblock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;memcpy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;snmp_timer_wait&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timer_wait&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;timeval&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;snmp_select_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdsetsize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;readfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                 &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;snmp_timer_wait&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;snmpblock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpblock&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;timer_wait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;snmp_timer_wait&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;select&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FD_SETSIZE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;readfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;writefd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;exceptfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="n"&gt;timer_wait&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cp"&gt;#if defined HAVE_SNMP&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;snmp_read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;readfd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;snmp_timeout&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;run_alarms&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;netsnmp_check_outstanding_agent_requests&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="cp"&gt;#endif&lt;/span&gt;

&lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;snmp_select_info()&lt;/code&gt; may modify the provided set of file descriptors
(and therefore, its size). It may also modify the provided timer in
case it needs to schedule an action before the original timeout.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;snmpblock&lt;/code&gt; is a tricky variable. While &lt;code&gt;select()&lt;/code&gt; can be called with
a timeout set to &lt;code&gt;NULL&lt;/code&gt;, this is not the case of &lt;code&gt;snmp_select_info()&lt;/code&gt;:
you have to pass a valid pointer. &lt;code&gt;snmpblock&lt;/code&gt; is set to 0 if the
provided timeout must be considered or to 1
otherwise. &lt;code&gt;snmp_select_info()&lt;/code&gt; will set &lt;code&gt;snmpblock&lt;/code&gt; to 0 &lt;em&gt;if and only
if&lt;/em&gt; it alters the timeout.&lt;/p&gt;
&lt;p&gt;Here are a two examples of integration. Both are for a subagent but
the code for a manager is the same:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vincentbernat/quagga/blob/201abe248e0736e74e7333fd33a954b7cac91a9a/lib/thread.c#L1039-L1166"&gt;Quagga&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vincentbernat/keepalived/blob/bfb75bc7291646040f6cc5ec677c6e4292c2b0e4/lib/scheduler.c#L501-L701"&gt;Keepalived&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="third-party-event-loop"&gt;Third-party event loop&lt;/h1&gt;
&lt;p&gt;With a third party event loop, you don’t have access to the &lt;code&gt;select()&lt;/code&gt;
system call anymore. Therefore, you cannot alter it with
&lt;code&gt;snmp_select_info()&lt;/code&gt;. Instead, at each iteration of the loop, a list
of &lt;span class="caps"&gt;SNMP&lt;/span&gt; related file descriptors is kept up-to-date with the help of
&lt;code&gt;snmp_select_info()&lt;/code&gt;: new ones are added and old ones are removed.&lt;/p&gt;
&lt;h2 id="libevent"&gt;libevent&lt;/h2&gt;
&lt;p&gt;Let’s assume that &lt;code&gt;snmp_fds&lt;/code&gt; is the list of current &lt;span class="caps"&gt;SNMP&lt;/span&gt; related
events&lt;sup id="fnref:base"&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#fn:base" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;. A function &lt;code&gt;levent_snmp_update()&lt;/code&gt; calls
&lt;code&gt;snmp_select_info()&lt;/code&gt; to update this list. Here is a partial
implementation (error handling removed and some declarations omitted,
look at the
&lt;a href="https://github.com/vincentbernat/lldpd/blob/5fd6695c090ddecb77e8324b6d6fb8b8fe43860a/src/event.c#L51-L188"&gt;complete version&lt;/a&gt;
from &lt;a href="https://github.com/vincentbernat/lldpd/wiki" title="lldpd — a 802.1ab implementation"&gt;lldpd&lt;/a&gt;):&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
&lt;span class="nf"&gt;levent_snmp_update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;maxfd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;FD_ZERO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;snmp_select_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;maxfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="cm"&gt;/* We need to untrack any event whose &lt;span class="caps"&gt;FD&lt;/span&gt; is not in `fdset`&lt;/span&gt;
&lt;span class="cm"&gt;       anymore */&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpfd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TAILQ_FIRST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmp_fds&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
         &lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
         &lt;span class="n"&gt;snmpfd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;snmpfd_next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;snmpfd_next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TAILQ_NEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_get_fd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;maxfd&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;FD_ISSET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_get_fd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;event_free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;TAILQ_REMOVE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmp_fds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;
            &lt;span class="n"&gt;FD_CLR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_get_fd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cm"&gt;/* Invariant: &lt;span class="caps"&gt;FD&lt;/span&gt; in `fdset` are not in list of &lt;span class="caps"&gt;FD&lt;/span&gt; */&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;maxfd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FD_ISSET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event_new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;EV_READ&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;EV_PERSIST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;levent_snmp_read&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="nb"&gt;&lt;span class="caps"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;event_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;&lt;span class="caps"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;TAILQ_INSERT_TAIL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmp_fds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;snmpfd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cm"&gt;/* If needed, handle timeout */&lt;/span&gt;
    &lt;span class="n"&gt;evtimer_add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snmp_timeout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="nb"&gt;&lt;span class="caps"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;span class="o"&gt;:&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then, replace the main loop (usually, a call to
&lt;code&gt;event_base_dispatch()&lt;/code&gt;) with this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_base_got_break&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
        &lt;span class="n"&gt;event_base_got_exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;netsnmp_check_outstanding_agent_requests&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;levent_snmp_update&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event_base_loop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EVLOOP_ONCE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Here is how are defined the two callbacks:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
&lt;span class="nf"&gt;levent_snmp_read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evutil_socket_t&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;short&lt;/span&gt; &lt;span class="n"&gt;what&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;FD_ZERO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;FD_SET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;snmp_read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;levent_snmp_update&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
&lt;span class="nf"&gt;levent_snmp_timeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;evutil_socket_t&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;short&lt;/span&gt; &lt;span class="n"&gt;what&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;snmp_timeout&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;run_alarms&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;levent_snmp_update&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id="twisted-reactor"&gt;Twisted reactor&lt;/h2&gt;
&lt;p&gt;As a second example, here is how to integrate &lt;em&gt;NetSNMP&lt;/em&gt; into
&lt;a href="http://twistedmatrix.com" title="an event-driven networking engine written in Python"&gt;Twisted&lt;/a&gt; reactor. &lt;em&gt;Twisted&lt;/em&gt; is an event-driven network programming
framework written in Python. It does not come with support for
&lt;span class="caps"&gt;SNMP&lt;/span&gt;&lt;sup id="fnref:twistedsnmp"&gt;&lt;a href="http://vincent.bernat.im/en/blog/atom.xml#fn:twistedsnmp" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt;. Because of the language mismatch, the integration
of &lt;em&gt;NetSNMP&lt;/em&gt; in &lt;em&gt;Twisted&lt;/em&gt; needs to be done using a C extension or the
&lt;code&gt;ctypes&lt;/code&gt; module.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Twisted&lt;/em&gt; event loop is called a reactor. Like for &lt;em&gt;libevent&lt;/em&gt;, events
need to be registered. It is possible to register file descriptor-like
objects using a class implementing a handful of methods. Here is the
implementation of such a class (adapted from &lt;em&gt;PyNetSNMP&lt;/em&gt;, a subproject
of &lt;a href="http://www.zenoss.com/" title="Open-source application, server, and network management platform"&gt;Zenoss&lt;/a&gt; using the &lt;code&gt;ctypes&lt;/code&gt; module):&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SnmpReader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="s"&gt;"Respond to input events"&lt;/span&gt;
    &lt;span class="n"&gt;implements&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IReadDescriptor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;doRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;netsnmp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;snmp_read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fileno&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Like for &lt;em&gt;libevent&lt;/em&gt;, we have a function to update the list of &lt;span class="caps"&gt;SNMP&lt;/span&gt;
related events (stored as a mapping between file descriptors and
&lt;code&gt;SnmpReader&lt;/code&gt; instances):&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Timer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;callLater&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
&lt;span class="n"&gt;timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Timer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;fdMap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;updateReactor&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="s"&gt;"Add/remove event handlers for &lt;span class="caps"&gt;SNMP&lt;/span&gt; file descriptors and timers"&lt;/span&gt;

    &lt;span class="n"&gt;fds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;netsnmp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;snmp_select_info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;fdMap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SnmpReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;fdMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;
            &lt;span class="n"&gt;reactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;addReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fdMap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;need&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;doomed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;need&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;doomed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;reactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;removeReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fdMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;fdMap&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;callLater&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;callLater&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cancel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;callLater&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;callLater&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reactor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;callLater&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;checkTimeouts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Contrary to &lt;em&gt;libevent&lt;/em&gt;, we cannot alter the main loop to call
&lt;code&gt;updateReactor()&lt;/code&gt; at each iteration. Therefore, it &lt;em&gt;must&lt;/em&gt; be called
after each &lt;span class="caps"&gt;SNMP&lt;/span&gt; related function.&lt;/p&gt;
&lt;p&gt;For another example, have a look at
&lt;a href="https://github.com/vincentbernat/QCss-3/blob/ceb6520305fc7307891173b7bc211f06bcc85ed1/qcss3/collector/snmp.c#L75-L174"&gt;my equivalent implementation as a C extension&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id="miscellaneous"&gt;Miscellaneous&lt;/h1&gt;
&lt;h2 id="lack-of-asynchronicity"&gt;Lack of asynchronicity&lt;/h2&gt;
&lt;p&gt;Integrating &lt;em&gt;NetSNMP&lt;/em&gt; into an event-based program is not risk-free. I
have written a fairly comprehensive article on the
&lt;a href="http://vincent.bernat.im/en/blog/2012-fixing-async-agentx.html" title="Asynchronicity &amp;amp; Net-SNMP AgentX protocol"&gt;lack of asynchronicity in &lt;em&gt;NetSNMP&lt;/em&gt; AgentX protocol implementation&lt;/a&gt;. I
urge you to read it if you want to integrate a &lt;span class="caps"&gt;SNMP&lt;/span&gt; subagent into an
existing program.&lt;/p&gt;
&lt;p&gt;On the &lt;em&gt;manager side&lt;/em&gt;, you will get similar drawbacks when using
SNMPv3. To retrieve or manipulate management information using SNMPv3,
it is necessary to know the identifier of the remote &lt;span class="caps"&gt;SNMP&lt;/span&gt; protocol
engine. This identifier can be configured directly on each manager but
it is usually discovered by querying
&lt;code&gt;SNMP-FRAMEWORK-MIB::‌snmpEngineID&lt;/code&gt;, as described in &lt;a href="http://tools.ietf.org/html/rfc5343" title="RFC 5343: SNMP Context EngineID Discovery"&gt;&lt;span class="caps"&gt;RFC&lt;/span&gt; 5343&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, this discovery is done &lt;strong&gt;synchronously&lt;/strong&gt; by
&lt;em&gt;NetSNMP&lt;/em&gt;. There is a &lt;a href="https://sourceforge.net/tracker/?func=detail&amp;amp;aid=3446148&amp;amp;group_id=12694&amp;amp;atid=112694" title="snmp_async_send() blocks during SNMPv3 probe"&gt;bug report&lt;/a&gt; for this issue but it
seems difficult to fix. I have not been able to come up with a proper
patch but I have described a &lt;a href="http://www.mail-archive.com/net-snmp-coders@lists.sourceforge.net/msg18746.html" title="Workaround for snmp_async_send() and SNMPv3"&gt;workaround&lt;/a&gt; around
&lt;code&gt;snmp_sess_async_send()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There is no such problem with SNMPv2.&lt;/p&gt;
&lt;h2 id="limitation-of-file-descriptor-sets"&gt;Limitation of file descriptor sets&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;snmp_select_info()&lt;/code&gt; and &lt;code&gt;snmp_read()&lt;/code&gt; uses the &lt;code&gt;fd_set&lt;/code&gt; type to
handle a set of file descriptors. This type should be manipulated with
&lt;code&gt;FD_CLR()&lt;/code&gt;, &lt;code&gt;FD_ISSET()&lt;/code&gt;, &lt;code&gt;FD_SET()&lt;/code&gt; and &lt;code&gt;FD_ZERO()&lt;/code&gt;. Those may be
defined as functions but they usually are macros. Moreover, no file
descriptor greater than &lt;code&gt;FD_SETSIZE&lt;/code&gt; (which is usually set to 1024)
can be handled with the &lt;code&gt;fd_set&lt;/code&gt; type. This means that if you have a
file descriptor greater than 1024, you won’t be able to use
&lt;code&gt;snmp_select_info()&lt;/code&gt; with it.&lt;/p&gt;
&lt;p&gt;Starting from &lt;em&gt;NetSNMP&lt;/em&gt; 5.5, you can use &lt;code&gt;snmp_select_info2()&lt;/code&gt; and
&lt;code&gt;snmp_read2()&lt;/code&gt; instead of &lt;code&gt;snmp_select_info()&lt;/code&gt; and &lt;code&gt;snmp_read()&lt;/code&gt;. They
use the &lt;code&gt;netsnmp_large_fd_set&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you want to keep compatibility with &lt;em&gt;NetSNMP&lt;/em&gt; 5.4, here is another
twist. The &lt;code&gt;fd_set&lt;/code&gt; type is usually a fixed-size array of long
integers. &lt;code&gt;FD_CLR()&lt;/code&gt;, &lt;code&gt;FD_ISSET()&lt;/code&gt; and &lt;code&gt;FD_SET()&lt;/code&gt; are
size-independant. The size only matters for &lt;code&gt;FD_ZERO()&lt;/code&gt; which is not
used by either &lt;code&gt;snmp_select_info()&lt;/code&gt; or &lt;code&gt;snmp_read()&lt;/code&gt;. You can
therefore allocate a larger &lt;code&gt;fd_set&lt;/code&gt;. A common way is to compile your
program with &lt;code&gt;-D__FD_SETSIZE=4096&lt;/code&gt;. You can still use &lt;code&gt;FD_ZERO()&lt;/code&gt;
yourself. However, this is not portable (&lt;span class="caps"&gt;GNU&lt;/span&gt; C Library only). Another
way is to allocate your own array of long integers and cast it to
&lt;code&gt;fd_set&lt;/code&gt;. You’ll have to redefine &lt;code&gt;FD_ZERO()&lt;/code&gt;:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;fds_bits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;my_fdset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cp"&gt;#undef FD_ZERO&lt;/span&gt;
&lt;span class="cp"&gt;#define FD_ZERO(fdset) memset((fdset), 0, sizeof(my_fdset))&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="cm"&gt;/* ... */&lt;/span&gt;
   &lt;span class="n"&gt;my_fdset&lt;/span&gt; &lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="n"&gt;FD_ZERO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="cm"&gt;/* ... */&lt;/span&gt;
   &lt;span class="n"&gt;rc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;snmp_select_info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd_set&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;fdset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id="threads"&gt;Threads&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;NetSNMP&lt;/em&gt; provides two &lt;span class="caps"&gt;API&lt;/span&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the traditional session &lt;span class="caps"&gt;API&lt;/span&gt; which is not thread-safe and&lt;/li&gt;
&lt;li&gt;the single session &lt;span class="caps"&gt;API&lt;/span&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the above examples, I have used the traditional session &lt;span class="caps"&gt;API&lt;/span&gt;. If you
are using threads, you need to ensure that &lt;em&gt;all&lt;/em&gt; &lt;span class="caps"&gt;SNMP&lt;/span&gt; operations are
done in a single thread. Otherwise, you need to adapt the examples to
use the single session &lt;span class="caps"&gt;API&lt;/span&gt;. &lt;code&gt;snmp_select_info()&lt;/code&gt; is part of the
traditional session &lt;span class="caps"&gt;API&lt;/span&gt;. You should replace it with
&lt;code&gt;snmp_sess_select_info()&lt;/code&gt; and keep a list of &lt;span class="caps"&gt;SNMP&lt;/span&gt; sessions.&lt;/p&gt;
&lt;p&gt;This &lt;span class="caps"&gt;API&lt;/span&gt; is not available for the agent side of &lt;em&gt;NetSNMP&lt;/em&gt;.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id="fn:base"&gt;
&lt;p&gt;The event list is global but some code could be added to bind
     a different list for each base in case you use different
     bases. This is not needed in the case of &lt;em&gt;lldpd&lt;/em&gt; which uses
     only one event base. &lt;a href="http://vincent.bernat.im/en/blog/atom.xml#fnref:base" rev="footnote" title="Jump back to footnote 1 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:twistedsnmp"&gt;
&lt;p&gt;&lt;a href="http://twistedsnmp.sourceforge.net/" title="Set of SNMP protocol implementations for Python's Twisted Matrix networking framework"&gt;TwistedSNMP&lt;/a&gt; is an &lt;span class="caps"&gt;SNMP&lt;/span&gt; protocol implementation
            for &lt;em&gt;Twisted&lt;/em&gt; based on &lt;em&gt;PySNMP&lt;/em&gt; but is not maintained
            anymore. &lt;a href="http://pysnmp.sourceforge.net/" title="Cross-platform, pure-Python SNMP engine implementation"&gt;PySNMP&lt;/a&gt; comes with examples on how to
            integrate with &lt;em&gt;Twisted&lt;/em&gt;. &lt;a href="http://vincent.bernat.im/en/blog/atom.xml#fnref:twistedsnmp" rev="footnote" title="Jump back to footnote 2 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt; </description> 
	<pubDate>Mon, 28 May 2012 18:54:50 +0000</pubDate>

</item> 
<item>
	<title>Thibaut Girka: Multiarch Cross-toolchains</title>
	<guid>http://gsoc.sitedethib.com/posts/Multiarch_Cross-toolchains/</guid>
	<link>http://gsoc.sitedethib.com/posts/Multiarch_Cross-toolchains/</link>
     <description>  &lt;p&gt;Hi!
I have been selected to work on &lt;a href="http://wiki.debian.org/SummerOfCode2012/Projects#Multiarch_Cross-Toolchains"&gt;multiarch cross-toolchains&lt;/a&gt; as part of the &lt;a href="http://socghop.appspot.com/"&gt;Google summer of Code&lt;/a&gt;.
Although coding officially started last week, I have been busy with exams and other uni stuff at the time.&lt;/p&gt;

&lt;p&gt;Anyway, let's talk about the project itself, that is, &lt;a href="http://wiki.debian.org/SummerOfCode2012/Projects#Multiarch_Cross-Toolchains"&gt;multiarch cross-toolchains&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;What is multiarch?&lt;/h2&gt;

&lt;p&gt;In order to understand what the project is about, one need to know what multiarch is.
I'll quickly describe it, and I invite anyone interested to &lt;a href="https://wiki.ubuntu.com/MultiarchSpec"&gt;read the spec&lt;/a&gt; (really, it's interesting, and not that long).
Basically, multiarch lets you install binary packages for multiple architectures on one system,
and let package managers resolve dependencies as one would expect.&lt;/p&gt;

&lt;p&gt;This works by identifying four sets of packages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Packages that don't need to be aware of multi-arch. Such packages can only be installed for one architecture at a time, and can only be used to resolve dependencies of packages having the same architecture.&lt;/p&gt;

&lt;p&gt;Those packages are “Multi-Arch: none” or “multiarch-unaware” packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Packages that can be installed for multiple architectures at a time, and can only be used to resolve dependencies of packages having the same architecture.&lt;/p&gt;

&lt;p&gt;Those packages are “Multi-Arch: same” packages. They typically are libs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Packages that can only be installed for one architecture at a time but can satisfy dependencies of any package regardless of its architecture.&lt;/p&gt;

&lt;p&gt;Those packages are “Multi-Arch: foreign” packages.
 They typically are tools working with architecture-independent interfaces. (for instance, gpg, zenity or tar).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Packages that can only be installed for one architecture at a time but can satisfy any dependency annotated with “:any”, regardless of the architecture.&lt;/p&gt;

&lt;p&gt;Those packages are “Multi-Arch: allowed” packages.
 They are packages providing both arch-dependent and arch-independent interfaces.
 They are typically things like python, which can be used to interpret arch-indep files, but providing arch-dependent interfaces for C extensions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway, multiarch is an amazing thing that may be of use in various cases, such as running i386-only software on an amd64 system,
running armel software on an armhf system, running i386 software on an armhf system using &lt;a href="http://packages.debian.org/sid/qemu-user-static"&gt;qemu-user-static&lt;/a&gt; and &lt;a href="http://packages.debian.org/sid/binfmt-support"&gt;binfmt&lt;/a&gt;,
cross-grading (switching, for instance, from i386 to amd64 on a running system), and, in our case, easing cross-compilation.&lt;/p&gt;

&lt;h2&gt;State of cross-toolchains in Debian&lt;/h2&gt;

&lt;p&gt;There aren't really cross-toolchains available in Debian (although some &lt;a href="http://wiki.debian.org/BuildingCrossCompilers"&gt;can be built&lt;/a&gt; from source packages),
but they are available in &lt;a href="http://www.emdebian.org/crosstools.html"&gt;emdebian's repositories&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, those packages predate multiarch, and don't make use of it.
Instead, they depend on special packages converted using &lt;a href="http://packages.debian.org/sid/dpkg-cross"&gt;dpkg-cross&lt;/a&gt;.
Such packages are merely arch: all versions of foreign packages,
with files moved to arch-qualified paths to prevent conflicts with “normal” packages.&lt;/p&gt;

&lt;p&gt;Such packages thus have to be generated from real packages, either manually or using some sort of automation.
In addition, this additional step brings several issues,
like keeping in sync converted packages with real packages from the archive.&lt;/p&gt;

&lt;p&gt;With multiarch, such packages are rendered useless, and may in fact bring additional problems,
since “converted” and multiarch packages may share the same files, and thus may not be co-installable.&lt;/p&gt;

&lt;h2&gt;Switching from dpkg-cross to cross-arch deps&lt;/h2&gt;

&lt;p&gt;Cross-toolchains packages currently depend on a few packages converted using dpkg-cross
(ex: libc6-$ARCH-cross and libc6-dev-$ARCH-cross for some packages).
They need to depend on the “real” package with the right arch (ex: libc6:$ARCH, libc6-dev:$ARCH).&lt;/p&gt;

&lt;p&gt;The obvious way to do so is by annotating the dependency with a specific arch qualifier (ex: “Depends: libc6:armhf”).
This is, however, &lt;a href="https://wiki.ubuntu.com/MultiarchSpec#Extended_semantics_of_per-architecture_package_relationships"&gt;not covered by the multiarch spec&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note that some “lib*-$ARCH-cross” packages will remain (for instance, libgcc1-armhf-cross).
Indeed, those packages are different from the packages mentioned above in that
they are of the architecture of the build system and actually part of the toolchain itself.&lt;/p&gt;

&lt;p&gt;Likewise, cross-toolchains may build-depend on foreign packages (ex: libc6-dev).
Thus, specific arch qualifiers must be handled in the “Build-Depends” source package field too.&lt;/p&gt;

&lt;p&gt;Changing dpkg and apt to support that should be fairly straightforward.
In fact, I already have a few patches, but I need to refresh them, maybe clean them up a little,
and push them a little harder to get them accepted!&lt;/p&gt; </description> 
	<pubDate>Mon, 28 May 2012 14:24:18 +0000</pubDate>

</item> 
<item>
	<title>Pietro Abate: managing puppet manifest with gitolite</title>
	<guid>http://mancoosi.org/421 at http://mancoosi.org/~abate</guid>
	<link>http://mancoosi.org/~abate/managing-puppet-manifest-gitolite</link>
     <description>  &lt;p&gt;Managing the puppet manifest using a vcs is &lt;a href="http://projects.puppetlabs.com/projects/1/wiki/Puppet_Version_Control"&gt;a best practice&lt;/a&gt; and there is a lot of material on the web. The easier way to do it, is to use &lt;strong&gt;git&lt;/strong&gt; directly in the  directory &lt;em&gt;/etc/puppet&lt;/em&gt; and use a simple synchronization strategy with an external repo, either to publish your work, or simply to keep a backup somewhere.&lt;/p&gt;

&lt;p&gt;Things are a bit more complicated when you would like to co-administer the machine with multiple people. Setting up user accounts, permission and everything can be a pain in the neck. Moreover working from your desktop is always more comfortable then logging in as root on a remote system and make changes there ...&lt;/p&gt;

&lt;p&gt;The solution I've chosen to make my life a bit easier is to use &lt;a href="https://github.com/sitaramc/gitolite/wiki/"&gt;gitolite&lt;/a&gt;, that is a simple git gateway that works using ssh public keys for authentication and does not require the creating of local users on the server machine. Gitolite is available in debian and installing it is super easy : &lt;span class="geshifilter"&gt;&lt;code class="text geshifilter-text"&gt;apt-get install gitolite&lt;/code&gt;&lt;/span&gt; .&lt;/p&gt;

&lt;p&gt;If you use puppet already you might be tempted to use puppet to manage your gitolite installation. This is all good, but I don't advice you to use modules like this one &lt;a href="http://forge.puppetlabs.com/gwmngilfen/gitolite/1.0.0"&gt;http://forge.puppetlabs.com/gwmngilfen/gitolite/1.0.0&lt;/a&gt; as it's going to install gitolite from source and on debian it's not necessary ... For my purposes, I didn't find necessary to manage gitolite with puppet as all the default config options where good enough for me.&lt;/p&gt;

&lt;p&gt;Once your debian package is installed, in order to initialize your repo, you just need to pass to gitolite the admin public key, that is your .ssh/id_rsa.pub key and then run this command:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;div style="font-family: monospace;" class="text geshifilter-text"&gt;sudo -H -u gitolite gl-setup /tmp/youruser.pub&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This will create the admin and testing repo in &lt;em&gt;/var/lib/gitolite/repositories&lt;/em&gt; and setup few other things. At this point you are ready to test you gitolite installation by cloning the admin repo :&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;div style="font-family: monospace;" class="text geshifilter-text"&gt;git clone gitolite@example.org:gitolite-admin.git&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Gitolite is engineered to use only the gitolite use to manage all your repositories. To add more repositories and users you should have a look at the &lt;a href="http://sitaramc.github.com/gitolite/qi.html"&gt;documentation&lt;/a&gt; and then editing the file &lt;em&gt;conf/gitolite.conf&lt;/em&gt; to add your new puppet repository.&lt;/p&gt;

&lt;p&gt;At this point, you can go two ways. If you use git to manage your puppet directory, you can just make a copy of it somewhere and then add gitolite as a &lt;em&gt;remote&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;div style="font-family: monospace;" class="text geshifilter-text"&gt;git remote add origin gitolite@example.org:puppet.git&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;If you didn't use git before, you can just copy the manifest in your new git repository, make a first commit and push it on the server.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;div style="font-family: monospace;" class="text geshifilter-text"&gt;git push origin master&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Every authorized users can now use git to clone your puppet repository, hack, commit, push ...&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;div style="font-family: monospace;" class="text geshifilter-text"&gt;git clone gitolite@example.org:puppet&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;One last step is to add a small &lt;em&gt;post-receive&lt;/em&gt; hook on the server to synchronize your gitolite repository with the puppet directory in &lt;span class="geshifilter"&gt;&lt;code class="text geshifilter-text"&gt;/etc&lt;/code&gt;&lt;/span&gt; : This will sync your main puppet directory and trigger changes on the nodes for the next puppetd run. First I created a small shell script in &lt;em&gt;/usr/local/bin/puppet-post-receive-hook.sh&lt;/em&gt; :&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;div style="font-family: monospace;" class="bash geshifilter-bash"&gt;&lt;span style="color: #666666; font-style: italic;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #7a0874; font-weight: bold;"&gt;umask&lt;/span&gt; 0022&lt;br /&gt;
&lt;span style="color: #7a0874; font-weight: bold;"&gt;cd&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;etc&lt;span style="color: #000000; font-weight: bold;"&gt;/&lt;/span&gt;puppet&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;git pull&lt;/span&gt; &lt;span style="color: #660033;"&gt;-q&lt;/span&gt; origin master&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This script presuppose that your git repo in /etc/puppet has the gitolite repo as origin ... Then I added a simple hook in the gitolite git repo that calls this script using sudo :&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="geshifilter"&gt;&lt;div style="font-family: monospace;" class="text geshifilter-text"&gt;sudo /usr/local/bin/puppet-post-receive-hook.sh&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;And since you are at it you should also add a &lt;a href="http://projects.puppetlabs.com/projects/1/wiki/Puppet_Version_Control"&gt;pre-commit hook to check the manifest syntax&lt;/a&gt;. This will save you a lot of useless commits.&lt;/p&gt;

&lt;p&gt;If you use a &lt;a href="http://sts.ono.at/blog/2010/12/22/synchronize-puppet-with-git/"&gt;more complicated puppet setup&lt;/a&gt; using environments (I'm not there yet, and I don't think my setup will evolve in that direction in the near future), you can use &lt;a href="https://github.com/pdxcat/puppet-sync"&gt;puppet-sync&lt;/a&gt; that seems a neat script to do the job.&lt;/p&gt;

&lt;p&gt;For the moment this setup works pretty well. I'm tempted to explore &lt;a href="http://puppetlabs.com/mcollective/introduction/"&gt;mcollective&lt;/a&gt; to trigger puppet runs on my nodes, but I'm there yet...&lt;/p&gt; </description> 
	<pubDate>Mon, 28 May 2012 10:18:35 +0000</pubDate>

</item> 
<item>
	<title>Bastian Blank: Installing Wheezy on Thinkpad X130e</title>
	<guid>http://bblank.thinkmo.de/blog/archive/2012/05/27/installing-wheezy-on-thinkpad-x130e</guid>
	<link>http://bblank.thinkmo.de/blog/archive/2012/05/27/installing-wheezy-on-thinkpad-x130e</link>
     <description>  &lt;p&gt;I installed a Lenovo Thinkpad X130e with Wheezy.&lt;/p&gt;
&lt;div id="uefi" class="section"&gt;
&lt;h3&gt;UEFI&lt;/h3&gt;
&lt;p&gt;The X130e does not want to boot via BIOS emulation.
The Wheezy D-I installs only BIOS Grub.
It does not provide the selection to use EFI at all.
So the initial installation was BIOS only and EFI refused to boot it without an error.
BIOS emulation simply don't want to work on the X130e.&lt;/p&gt;
&lt;p&gt;Partman does not align partitions in GPT.
For some reasons the partitions created by partman are not aligned in the partition table at all.
This is bad for performance.
Also it makes it impossible to create an EFI partition on it that is recognizable by Grub.&lt;/p&gt;
&lt;p&gt;EFI Grub needs the EFI partition.
This partition needs to be properly aligned and formatted with FAT16.
It must be mounted on /boot/efi.
Grub gets installed on this with the following commands:&lt;/p&gt;
&lt;pre class="literal-block"&gt;apt-get install grub-efi-amd64
grub-install --bootloader-id=GRUB --removable
&lt;/pre&gt;
&lt;/div&gt;
&lt;div id="grub" class="section"&gt;
&lt;h3&gt;Grub&lt;/h3&gt;
&lt;p&gt;Grub fails to load EFI console stuff.
Grub needs extra modules to allow the kernel to write on the console.
Otherwise the kernel just hangs without output.
This can be done via /boot/grub/custom.cfg to load them:&lt;/p&gt;
&lt;pre class="literal-block"&gt;insmod efi_gop
insmod efi_uga
&lt;/pre&gt;
&lt;/div&gt;
&lt;div id="radeon" class="section"&gt;
&lt;h3&gt;Radeon&lt;/h3&gt;
&lt;p&gt;The Radeon card needs a firmware.
It just produces random output.
To get a usable output, Radeon modeset must be disabled on the kernel command line:&lt;/p&gt;
&lt;pre class="literal-block"&gt;radeon.modeset=0
&lt;/pre&gt;
&lt;p&gt;Now the firmware can be installed:&lt;/p&gt;
&lt;pre class="literal-block"&gt;apt-get install firmware-linux
&lt;/pre&gt;
&lt;/div&gt;
&lt;div id="wireless-card" class="section"&gt;
&lt;h3&gt;Wireless card&lt;/h3&gt;
&lt;p&gt;The Broadcom wireless card needs a firmware:&lt;/p&gt;
&lt;pre class="literal-block"&gt;apt-get install firmware-brcm80211
&lt;/pre&gt;
&lt;/div&gt; </description> 
	<pubDate>Sun, 27 May 2012 20:55:00 +0000</pubDate>

</item> 
<item>
	<title>Colin Watson: OpenSSH 6.0p1</title>
	<guid>http://www.chiark.greenend.org.uk/ucgi/~cjwatson/blosxom/2012/05/27#2012-05-27-openssh-6.0p1</guid>
	<link>http://www.chiark.greenend.org.uk/ucgi/~cjwatson/blosxom/2012/05/27#2012-05-27-openssh-6.0p1</link>
     <description>  &lt;img src="http://planet.debian.org/heads/cjwatson.png" width="70" height="82" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;OpenSSH 6.0p1 was &lt;a href="http://www.openssh.com/txt/release-6.0"&gt;released&lt;/a&gt; a little while back; this weekend I belatedly got round to uploading packages of it to Debian unstable and Ubuntu quantal.&lt;/p&gt;

&lt;p&gt;I was a bit delayed by needing to put together an &lt;a href="https://bugzilla.mindrot.org/show_bug.cgi?id=2011"&gt;improvement to privsep sandbox selection&lt;/a&gt; that particularly matters in the context of distributions.  One of the experts on seccomp_filter has commented favourably on it, but I haven't yet had a comment from upstream themselves, so I may need to refine this depending on what they say.&lt;/p&gt;

&lt;p&gt;(This is a good example of how it matters that software is often not built on the system that it's going to run on, and in particular that the kernel version is rather likely to be different.  Where possible it's always best to detect kernel capabilities at run-time rather than at build-time.)&lt;/p&gt;

&lt;p&gt;I didn't make it very clear in the changelog, but using the new seccomp_filter sandbox currently requires &lt;code&gt;UsePrivilegeSeparation sandbox&lt;/code&gt; in sshd_config as well as a capable kernel.  I won't change the default here in advance of upstream, who still consider privsep sandboxing experimental.&lt;/p&gt; </description> 
	<pubDate>Sun, 27 May 2012 19:14:00 +0000</pubDate>

</item> 
<item>
	<title>Gregor Herrmann: RC bugs 2012/21</title>
	<guid>http://info.comodo.priv.at/blog/archives/2012/05/#e2012-05-27T21_04_55.txt</guid>
	<link>http://info.comodo.priv.at/blog/archives/2012/05/#e2012-05-27T21_04_55.txt</link>
     <description>  &lt;img src="http://planet.debian.org/heads/gregoa.png" width="69" height="85" alt="" align="right" style="float: right;"&gt;  new week, new report about my work on RC bugs. again, mostly &lt;tt&gt;gcc
4.7&lt;/tt&gt; related, &amp;amp; again, mostly using patches prepared by others.
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667111"&gt;&lt;del&gt;#667111&lt;/del&gt;&lt;/a&gt; – bcov: "bcov: ftbfs with GCC-4.7"&lt;br /&gt;add patch from Cyril Brulebois, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667308"&gt;&lt;del&gt;#667308&lt;/del&gt;&lt;/a&gt; – oggvideotools: "oggvideotools: ftbfs with GCC-4.7"&lt;br /&gt;add patch from Paul Tagliamonte, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667322"&gt;&lt;del&gt;#667322&lt;/del&gt;&lt;/a&gt; – pianobooster: "pianobooster: ftbfs with GCC-4.7"&lt;br /&gt;add patch to fix Windows linker flags, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667329"&gt;&lt;del&gt;#667329&lt;/del&gt;&lt;/a&gt; – powertop: "powertop: ftbfs with GCC-4.7"&lt;br /&gt;add patch from Cyril Brulebois, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667361"&gt;&lt;del&gt;#667361&lt;/del&gt;&lt;/a&gt; – rtorrent: "rtorrent: ftbfs with GCC-4.7"&lt;br /&gt;add patch from Cyril Brulebois, upload to DELAYED/2, later fixed in maintainer upload&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667362"&gt;&lt;del&gt;#667362&lt;/del&gt;&lt;/a&gt; – rubberband: "rubberband: ftbfs with GCC-4.7"&lt;br /&gt;add patch from Cyril Brulebois, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667364"&gt;&lt;del&gt;#667364&lt;/del&gt;&lt;/a&gt; – rutilt: "rutilt: ftbfs with GCC-4.7"&lt;br /&gt;add patch from Cyril Brulebois, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667388"&gt;&lt;del&gt;#667388&lt;/del&gt;&lt;/a&gt; – tagcoll2: "tagcoll2: ftbfs with GCC-4.7"&lt;br /&gt;manual close&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667403"&gt;&lt;del&gt;#667403&lt;/del&gt;&lt;/a&gt; – uisp: "uisp: ftbfs with GCC-4.7"&lt;br /&gt;add compiler flag, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667419"&gt;&lt;del&gt;#667419&lt;/del&gt;&lt;/a&gt; – xdiskusage: "xdiskusage: ftbfs with GCC-4.7"&lt;br /&gt;add patch from Cyril Brulebois, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667866"&gt;&lt;del&gt;#667866&lt;/del&gt;&lt;/a&gt; – src:cenon.app: "cenon.app: FTBFS with GCC-4.7"&lt;br /&gt;add patch from Yavor Doganov, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667873"&gt;&lt;del&gt;#667873&lt;/del&gt;&lt;/a&gt; – src:gridlock.app: "gridlock.app: FTBFS with GCC-4.7"&lt;br /&gt;apply patch from Yavor Doganov, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/667874"&gt;&lt;del&gt;#667874&lt;/del&gt;&lt;/a&gt; – src:gworkspace: "gworkspace: FTBFS with GCC-4.7"&lt;br /&gt;add patch from Yavor Doganov, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/672003"&gt;&lt;del&gt;#672003&lt;/del&gt;&lt;/a&gt; – src:dibbler: "dibbler: FTBFS: ClntIfaceIface.cpp:34:49: error: 'unlink' was not declared in this scope"&lt;br /&gt;add patch from Paul Tagliamonte, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/672025"&gt;&lt;del&gt;#672025&lt;/del&gt;&lt;/a&gt; – src:mmpong: "mmpong: FTBFS: client.cpp:276:71: error: 'usleep' was not declared in this scope"&lt;br /&gt;add patch from Cyril Roelandt, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/672042"&gt;&lt;del&gt;#672042&lt;/del&gt;&lt;/a&gt; – src:l2tp-ipsec-vpn-daemon: "l2tp-ipsec-vpn-daemon: FTBFS: src/VpnClientConnection.cpp:167:60: error: '::chown' has not been declared"&lt;br /&gt;add patch from Paul Tagliamonte, upload to DELAYED/2&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/672089"&gt;&lt;del&gt;#672089&lt;/del&gt;&lt;/a&gt; – src:icewm: "icewm: FTBFS: Xlib.h:1694:1: error: 'deprecated' was not declared in this scope"&lt;br /&gt;add patch from Ubuntu / Andreas Moog, upload to DELAYED/2, then included in maintainer upload&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/673286"&gt;#673286&lt;/a&gt; – gem: "gem: FTBFS with gcc-4.7"&lt;br /&gt;send debdiff to the BTS, later NMUd by a fellow DD&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/674301"&gt;&lt;del&gt;#674301&lt;/del&gt;&lt;/a&gt; – src:libplack-middleware-reverseproxy-perl: "libplack-middleware-reverseproxy-perl: FTBFS: tests failed"&lt;br /&gt;upload new upstream release (pkg-perl)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/674304"&gt;&lt;del&gt;#674304&lt;/del&gt;&lt;/a&gt; – src:clusterssh: "clusterssh: FTBFS: tests failed"&lt;br /&gt;add missing build dependency&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bugs.debian.org/674395"&gt;&lt;del&gt;#674395&lt;/del&gt;&lt;/a&gt; – src:libdbd-mysql-perl: "libdbd-mysql-perl: FTBFS: ld: cannot find -lssl"&lt;br /&gt;manual close (pkg-perl)&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Sun, 27 May 2012 19:04:55 +0000</pubDate>

</item> 
<item>
	<title>Petter Reinholdtsen: Debian Edu interview: Ralf Gesellensetter</title>
	<guid>http://people.skolelinux.org/pere/blog/Debian_Edu_interview__Ralf_Gesellensetter.html</guid>
	<link>http://people.skolelinux.org/pere/blog/Debian_Edu_interview__Ralf_Gesellensetter.html</link>
     <description>  &lt;p&gt;In 2003, a German teacher showed up on the
&lt;a href="http://www.skolelinux.org/"&gt;Debian Edu and Skolelinux&lt;/a&gt;
mailing list with interesting problems and reports proving he setting
up Linux for a (for us at the time) lot of pupils.  His name was Ralf
Gesellensetter, and he has been an important tester and contributor
since then, helping to make sure the
&lt;a href="http://www.debian.org/News/2012/20120311.html"&gt;Debian Edu
Squeeze&lt;/a&gt; release became as good as it is..&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who are you, and how do you spend your days?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am a teacher from Germany, and my subjects are Geography,
Mathematics, and Computer Science ("Informatik"). During the past 12
years (since 2000), I have been working for a comprehensive (and soon,
also inclusive) school leading to all kind of general levels, such as
O- or A-level ("Abitur").  For quite as long, I've been taking care of
our computer network.&lt;/p&gt;

&lt;p&gt;Now, in my early 40s, I enjoy the privilege of spending a lot of my
spare time together with my wife, our son (3 years) and our daughter
(4 months).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How did you get in contact with the Skolelinux/Debian Edu
project?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We had tried different Linux based school servers, when members of
my local Linux User Group (LUG OWL) detected Skolelinux. I remember
very well, being part of a party celebrating the Linux New Media Award
("Best Newcomer Distribution", also nominated: Ubuntu) that was given
to Skolelinux at Linux World Exposition in Frankfurt, 2005 (IIRC). Few
months later, I had the chance to join a developer meeting in Ulsrud
(Oslo) and to hand out the award to Knut Yrvin and others.  For more
than 7 years, Skolelinux is part of our schools infrastructure, namely
our main server (tjener), one LTSP (today without thin clients), and
approximately 50 work stations. Most of these have the option to boot a
locally installed Skolelinux image.  As a consequence, I joined quite
a few events dealing with free software or Linux, and met many Debian
(Edu) developers. All of them seemed quite nice and competent to me,
one more reason to stick to Skolelinux.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you see as the advantages of Skolelinux/Debian
Edu?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Debian driven, you are given all the advantages of a community
project including well maintained updates. Once, you are familiar with
the network layout, you can easily roll out an entire educational
computer infrastructure, from just one installation media. As only
free software (FOSS) is used, that supports even elderly hardware,
up-sizing your IT equipment is only limited by space (i.e. available
labs).  Especially if you run a LTSP thin client server, your
administration costs tend towards zero.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you see as the disadvantages of Skolelinux/Debian
Edu?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While Debian's stability has loads of advantages for servers, this
might be different in some cases for clients: Schools with unlimited
budget might buy new hardware with components that are not yet
supported by Debian stable, or wish to use more recent versions of
office packages or desktop environments.  These schools have the
option to run Debian testing or other distributions - if they have the
capacity to do so.  Another issue is that Debian release cycles
include a wide range of changes; therefor a high percentage of human
power seems to be absorbed by just keeping the features of Skolelinux
within the new setting of the version to come. During this process,
the cogs of Debian Edu are getting more and more professional,
i.e. harder to understand for novices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which free software do you use daily?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LibreOffice, Wikipedia, Openstreetmap, Iceweasel (Mozilla Firefox),
KMail, Gimp, Inkscape - and of course the Linux Kernel (not only on
PC, Laptop, Mobile, but also our SAT receiver)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which strategy do you believe is the right one to use to
get schools to use free software?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;ol&gt;

&lt;li&gt;Support computer science as regular subject in schools to make
people really "own" their hardware, to make them understand the
difference between proprietary software products, and free software
developing.&lt;/li&gt;

&lt;li&gt;Make budget baskets corresponding: In Germany's public schools
there are more or less fixed budgets for IT equipment (including
licenses), so schools won't benefit from any savings here. This
privilege is left to private schools which have consequently a large
share among German Skolelinux schools.&lt;/li&gt;

&lt;li&gt;Get free software in the seminars where would-be teachers are
trained. In many cases, teachers' software customs are respected by
decision makers rather than the expertise of any IT experts.&lt;/li&gt;

&lt;li&gt;Don't limit ourself to free software run natively. Everybody uses
free software or free licenses (for instance Wikipedia), and this
general concept should get expanded to free educational content to be
shared world wide (school books e.g.).&lt;/li&gt;

&lt;li&gt;Make clear where ever you can that the market share of free (libre)
office suites is much above 20 p.c. today, and that you pupils don't
need to know the "ribbon menu" in order to get employed.&lt;/li&gt;

&lt;li&gt;Talk about the difference between freeware and free software.&lt;/li&gt;

&lt;li&gt;Spread free software, or even collections of portable free apps
for USB pen drives. Endorse students to get a legal copy of
Libreoffice rather than accepting them to use illegal serials.  And
keep sending documents in ODF formats.&lt;/li&gt;

&lt;/ol&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Sun, 27 May 2012 15:15:00 +0000</pubDate>

</item> 
<item>
	<title>Andrew Pollock: [life] Dear World, Sarah's Twitter account is okay</title>
	<guid>http://blog.andrew.net.au/2012/05/27#sarah_twitter</guid>
	<link>http://blog.andrew.net.au/2012/05/27#sarah_twitter</link>
     <description>  &lt;img src="http://planet.debian.org/heads/apollock.png" width="88" height="126" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;
I've received two separate emails now about a spammy looking tweet from
&lt;a href="http://twitter.com/#!/skpollock"&gt;Sarah's Twitter account&lt;/a&gt;, so I
thought I'd attempt to head off any more.
&lt;/p&gt;
&lt;p&gt;
Yes, it appears her account got hacked (weak password), but surprisingly the
password didn't get changed. Sarah has changed her password to a stronger
one and deleted the offending tweet. All is right with the world.
&lt;/p&gt; </description> 
	<pubDate>Sun, 27 May 2012 13:57:00 +0000</pubDate>

</item> 
<item>
	<title>Ingo Juergensmann: DaviCal and Addressbook Sync</title>
	<guid>http://blog.windfluechter.net/1453 at http://blog.windfluechter.net</guid>
	<link>http://blog.windfluechter.net/content/blog/2012/05/27/1453-davical-and-addressbook-sync</link>
     <description>  &lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;p&gt;After exchanging my rusted Nokia N97 against an iPhone I was in need to setup calendar and addressbook syncing again. Addressbook syncing wasn't possible with N97 anyways, or I haven't found out how to do it. Previously I synced my N97 by using iSync, but iSync doesn't sync anymore with iPhone, although iPhone now syncs with iTunes. Weird? Yes. But that's how it works. The iPhone syncs now via WLAN instead of Bluetooth, which is an improvement, but I don't really want to fire up iTunes everytime I want to sync my calendar or addressbook. And using iCloud is really not an option as well, because of privacy concerns. I'm a big fan of selfhosting and already have a running DaviCal instance running on my server. &lt;a href="http://wiki.davical.org"&gt;DaviCal&lt;/a&gt; is a great piece of software from Debian maintainer &lt;a href="http://andrew.mcmillan.net.nz/taxonomy/term/25/0"&gt;Andrew McMillan&lt;/a&gt;, who is doing a &lt;a href="http://andrew.mcmillan.net.nz/node/182"&gt;survey on Davical&lt;/a&gt;, so there's, of course, a &lt;a href="http://packages.debian.org/sid/davical"&gt;Debian package&lt;/a&gt; for it.&lt;/p&gt;
&lt;p&gt;Anyway, one problem with OSX and addressbook sync via carddav is that it is not working out of the box with Addressbook.app on OSX, although the &lt;a href="http://wiki.davical.org/w/CardDAV"&gt;documentation in the DaviCal wiki&lt;/a&gt; is quite useful. When you try to enter a new account in Addressbook.app the sync will not work. The solution can be found on the &lt;a href="http://hochglanz.dyndns.org/?p=232"&gt;private blog of Harald Nikolisin&lt;/a&gt;, which is in German. He writes (German, English translation follows)&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Mac OS X Adressbuch anschliessen&lt;br /&gt; Oh ja – wenn man mittels &lt;strong&gt;SSL&lt;/strong&gt; drauzugreift, dann gibts Probleme.&lt;br /&gt; Im der Applikation &lt;em&gt;Adressbuch&lt;/em&gt; kann man zwar ein CardDAV Account  anlegen bei dem man die Authorisierungsdaten und den kompletten  Serverpfad (s.o.) eingeben kann, man läuft aber immer auf eine  Fehlermeldung hinaus.&lt;br /&gt; Die Lösung ist, zweimal “Create” anzuklicken um den fehlerhaften Account anzulegen.&lt;/p&gt;
&lt;p&gt;Dann editiert man manuell folgende Datei:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;~/Library/Application Support/AddressBook/Sources/UNIQUE-ID/Configuration.plist&lt;/code&gt;&lt;br /&gt; Dort trägt man unter &lt;em&gt;Server String&lt;/em&gt; die komplette URL ein.&lt;br /&gt;&lt;code&gt;https://SERVERNAME/davical/caldav.php/USERNAME/contacts&lt;/code&gt;&lt;br /&gt; Am besten modifiziert man noch das Feld &lt;em&gt;HaveWriteAccess&lt;/em&gt; auf den Wert auf “1″&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;English translation:&lt;/strong&gt; 

Connecting Mac OS X addressbook
Oh, yes - there are problems when accessing via &lt;strong&gt;SSL&lt;/strong&gt;.
In &lt;em&gt;Addressbook.app&lt;/em&gt; you can add a CardDAV account where you can define authentication and 
server path, but you'll always get an error message.
The solution is to click twice on "Create" in order to create the faulty entry.

Then you can edit the following file:

~/Library/Application Support/AddressBook/Sources/UNIQUE-ID/Configuration.plist

There you enter your complete URL under Server String.
https://SERVERNAME/davical/caldav.php/USERNAME/contacts 
It's best to modify the field &lt;em&gt;HaveWriteAccess&lt;/em&gt; to the value "1"
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;After following this advice my Addressbook.app did successfully stored the contacts into DaviCals CardDAV from where I can sync with my iPhone. Maybe Andrew want to include this to the DaviCal wiki, maybe I'll do this myself by registering in the Wiki for that purpose...&lt;/p&gt;
&lt;p&gt;Oh, and I forgot: Using the &lt;a href="https://github.com/graviox/Roundcube-CardDAV"&gt;Roundcube plugin from graviox&lt;/a&gt; is working nice as well with DaviCals CardDAV!&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"&gt;&lt;div class="field-label"&gt;Kategorie: &lt;/div&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="http://blog.windfluechter.net/category/categories/debian"&gt;Debian&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-3 field-type-taxonomy-term-reference field-label-above"&gt;&lt;div class="field-label"&gt;Tags: &lt;/div&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="http://blog.windfluechter.net/taxonomy/term/12"&gt;Debian&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="http://blog.windfluechter.net/taxonomy/term/115"&gt;Software&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="http://blog.windfluechter.net/taxonomy/term/200"&gt;OSX&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="http://blog.windfluechter.net/taxonomy/term/198"&gt;Mac&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="http://blog.windfluechter.net/category/268/tags"&gt;IOS&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-field-socialshareprivacy field-type-ssp-placeholder field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;div id="field_socialshareprivacy-1453" class="ssp_wrapper"&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; </description> 
	<pubDate>Sun, 27 May 2012 12:31:37 +0000</pubDate>

</item> 
<item>
	<title>Lars Wirzenius: Obnam 0.29 (backup software)</title>
	<guid>http://blog.liw.fi/posts/obnam-0.29/</guid>
	<link>http://blog.liw.fi/posts/obnam-0.29/</link>
     <description>  &lt;img src="http://planet.debian.org/heads/lars.png" width="85" height="100" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;I've just pushed out &lt;a href="http://liw.fi/obnam/"&gt;Obnam&lt;/a&gt; 0.29, my backup program.
&lt;a href="http://liw.fi/obnam/NEWS/"&gt;NEWS&lt;/a&gt; snippet below.&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;RELEASE CANDIDATE&lt;/strong&gt; for 1.0, since there are no known bugs
that would block a 1.0 release. I'm not entirely happy with Obnam's
performance over sftp with small files, but it's not something I am
prepared to let block 1.0. I am going to try a few things to improve
things, but I want this release out first.&lt;/p&gt;

&lt;p&gt;Please test and report any problems via this mailing list or as bugs
on the website or via IRC. I am on IRC only intermittently until 1.0
is released, so e-mail and bug reports are best options.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"obnam backup" now writes performance statistics at the end of a backup run.
Search the log for "Backup performance statistics" (INFO level).&lt;/li&gt;
&lt;li&gt;"obnam verify" now continues past the first error. Thanks to Rafał Gwiazda
for requesting this.&lt;/li&gt;
&lt;li&gt;Add an &lt;code&gt;obnam-viewprof&lt;/code&gt; utility to translate Python profiling output
into human readable text form.&lt;/li&gt;
&lt;li&gt;Bug fix: If a file's extended attributes have changed in any way, the change
is now backed up.&lt;/li&gt;
&lt;li&gt;"obnam fsck" is now a bit faster.&lt;/li&gt;
&lt;li&gt;The shared directories in the repository are now locked only during updates,
allowing more efficient concurrent backups between several computers.&lt;/li&gt;
&lt;li&gt;Obnam now gives a better error message when a backup root is not a
directory. Thanks to Edward Allcutt for reporting the error
(&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=654211"&gt;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=654211&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;The output format of "obnam ls" has changed. It now has one line per
file, and includes the full pathname of the file, rather mimicking the
output of "ls -lAR". Thanks to Edward Allcutt for the suggestion
(&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=655095"&gt;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=655095&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;A few optimizations to sftp speed. Small files are still slow.&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Sun, 27 May 2012 10:51:05 +0000</pubDate>

</item> 
<item>
	<title>Lars Wirzenius: Larch 1.20120527 (Python B-tree library)</title>
	<guid>http://blog.liw.fi/posts/larch-1.20120527/</guid>
	<link>http://blog.liw.fi/posts/larch-1.20120527/</link>
     <description>  &lt;img src="http://planet.debian.org/heads/lars.png" width="85" height="100" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;It has been a long time since I announced a version of
&lt;a href="http://liw.fi/larch/"&gt;Larch&lt;/a&gt; on my blog: about 14 months.
A fair bit has happened since then: see the &lt;a href="http://liw.fi/larch/NEWS/"&gt;NEWS&lt;/a&gt;
file for details. Below is the snippet for today's release.&lt;/p&gt;

&lt;p&gt;This is an implementation of particular kind of B-tree, based on research by
Ohad Rodeh. See "B-trees, Shadowing, and Clones" (copied here with permission
of author) for details on the data structure. This is the same data structure
that btrfs uses. Note that my implementation is independent from the btrfs
one, and might differ from what the paper describes.&lt;/p&gt;

&lt;p&gt;The distinctive feature of this B-tree is that a node is never modified
(sort-of). Instead, all updates are done by copy-on-write. Among other things,
this makes it easy to clone a tree, and modify only the clone, while other
processes access the original tree. This is utterly wonderful for my
backup application, and that's the reason I wrote larch in the first place.&lt;/p&gt;

&lt;p&gt;See the &lt;a href="http://liw.fi/larch/"&gt;home page&lt;/a&gt; and
&lt;a href="http://liw.fi/larch/README/"&gt;README&lt;/a&gt; for more information;
the &lt;a href="http://blog.liw.fi/englishfeed/code.liw.fi/larch/docs/"&gt;API docs&lt;/a&gt; may be amusingly sparse.&lt;/p&gt;

&lt;h2&gt;Version 1.20120527, released 2012-05-27&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;New version scheme. Thank you, Joey Hess.&lt;/li&gt;
&lt;li&gt;The on-disk data structures and file formats are now declared frozen.
An automatic test has been added to verify that things do not break.&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Sun, 27 May 2012 10:04:12 +0000</pubDate>

</item> 
<item>
	<title>Andrew Cater: Raspberry Pi - its's here in volume</title>
	<guid>tag:blogger.com,1999:blog-8085113335874848981.post-5124888376082618626</guid>
	<link>http://flosslinuxblog.blogspot.com/2012/05/raspberry-pi-itss-here-in-volume.html</link>
     <description>  The Raspberry Pi's are now shipping in volume and are gradually spreading. The site at raspberrypi.org has links to a map showing the spread worldwide. This post is being edited from a Pi on my desk and using Midori as a lightweight browser.&lt;br /&gt;&lt;br /&gt;After all the hype: it works, it runs Debian Squeeze well and can update from Debian apt repositories. Graphics drivers are non-free but I'd hope there would be a way to work together with the development team to get them put into the non-free repositories.&lt;br /&gt;&lt;br /&gt;Blogger doesn't like the browser and suggests an update to Google Chrome but that's life, I suppose :(&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/8085113335874848981-5124888376082618626?l=flosslinuxblog.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt; </description> 
	<pubDate>Sun, 27 May 2012 09:19:16 +0000</pubDate>
  <author>noreply@blogger.com (Andrew Cater)</author>  
</item> 
<item>
	<title>Bartosz Fe&amp;#324;ski: cowbuilder with sid under Ubuntu/Mint</title>
	<guid>http://fenski.pl/?p=308</guid>
	<link>http://fenski.pl/2012/05/cowbuilder-with-sid-under-ubuntumint/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=cowbuilder-with-sid-under-ubuntumint</link>
     <description>  &lt;img src="http://planet.debian.org/heads/fenio.png" width="94" height="100" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;Just for reference cause I had to figured it out again after upgrade from Mint Lisa to Mint Maya (which in Mint world means reinstalling whole system).&lt;/p&gt;
&lt;p&gt;This is the way to create cowbuilder environment with Debian Sid/unstable under Linux Mint Maya or any Ubuntu based system:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
sudo sed -ie 's/MIRRORSITE.*/MIRRORSITE=http://ftp.debian.org/debian/g' /etc/pbuilderrc&lt;br /&gt;
sudo apt-get install debian-archive-keyring&lt;br /&gt;
sudo cowbuilder --create --distribution sid --debootstrapopts --keyring=/usr/share/keyrings/debian-archive-keyring.gpg&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt; </description> 
	<pubDate>Sun, 27 May 2012 07:12:39 +0000</pubDate>

</item> 
<item>
	<title>Moray Allan: DebConf9.0.1</title>
	<guid>http://morayallan.livejournal.com/12009.html</guid>
	<link>http://morayallan.livejournal.com/12009.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/moray.png" width="73" height="93" alt="" align="right" style="float: right;"&gt;  &lt;img src="http://www.morayallan.com/temp/dsc_56904.jpg" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid;" title="Caceres 2012-05-04" height="416" width="800" alt="[Caceres 2012-05-04]" /&gt; </description> 
	<pubDate>Sat, 26 May 2012 19:31:52 +0000</pubDate>

</item> 
<item>
	<title>Vincent Sanders: Each morning sees some task begun, each evening sees it close; Something attempted, something done, has earned a night's repose.</title>
	<guid>tag:blogger.com,1999:blog-3711269760993993197.post-3990989179018299072</guid>
	<link>http://vincentsanders.blogspot.com/2012/05/each-morning-sees-some-task-begun-each.html</link>
     <description>  Thursday saw all the Collabora employees at Cambridge office go out and socialise at the &lt;a href="http://www.cambridgebeerfestival.com/viewnode.php?id=3"&gt;beer festival&lt;/a&gt;. They seemed to have selected a wonderful day for it, the sun was shining and it was warm and blue sky day.&lt;br /&gt;&lt;br /&gt;Alas, I had to attend some customer conference calls and work on some time sensitive research so I could not go to the ball as it were. At about eight my brain had run out of steam so I decided to call it a day and go and meetup with people at the festival for an hour or two.&lt;br /&gt;&lt;br /&gt;&lt;div style="clear: both; text-align: center;" class="separator"&gt;&lt;a style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" href="http://4.bp.blogspot.com/-eyKrpgNmTHI/T8CXNiefWXI/AAAAAAAAAIs/gWQj9TbUyBk/s1600/beer-festival-queue.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/-eyKrpgNmTHI/T8CXNiefWXI/AAAAAAAAAIs/gWQj9TbUyBk/s320/beer-festival-queue.jpg" height="137" border="0" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The queue when I arrived dissuaded me from that notion. I asked one of the stewards and they indicated it would take at least an hour from where the queue finished.&lt;br /&gt;&lt;br /&gt;So I decided to wend my way home along the bank of the Cam. I proceeded slowly along and to my utter surprise bumped into Ben Hutchings and his Solarflare work colleagues having their own soiree. I was immediately invited to sit and converse. Pretty quickly I was inveigled into accepting a glass of wine by John Aspden from his floating bar (AKA houseboat).&lt;br /&gt;&lt;br /&gt;From here on my evening was a pleasant one of amusing new people, easy conversation and a definite pondering if the host would be discovering the delights of Cam swimming as he became progressively inebriated!&lt;br /&gt;&lt;br /&gt;So although I missed the festival I did manage to have an enjoyable time. A big thanks to the solarflare guys and especially John who was the consummate host and provided me with far too much alcohol.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/3711269760993993197-3990989179018299072?l=vincentsanders.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt; </description> 
	<pubDate>Sat, 26 May 2012 18:20:30 +0000</pubDate>
  <author>noreply@blogger.com (Vincent Sanders)</author>  
</item> 
<item>
	<title>Petter Reinholdtsen: The cost of ODF and OOXML</title>
	<guid>http://people.skolelinux.org/pere/blog/The_cost_of_ODF_and_OOXML.html</guid>
	<link>http://people.skolelinux.org/pere/blog/The_cost_of_ODF_and_OOXML.html</link>
     <description>  &lt;p&gt;I just come across a blog post from Glyn Moody reporting the
claimed cost from Microsoft on requiring ODF to be used by the UK
government.  I just sent him an email to let him know that his
assumption are most likely wrong.  Sharing it here in case some of my
blog readers have seem the same numbers float around in the UK.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt; &lt;p&gt;Hi.  I just noted your
&lt;a href="http://blogs.computerworlduk.com/open-enterprise/2012/04/does-microsoft-office-lock-in-cost-the-uk-government-500-million/index.htm"&gt;http://blogs.computerworlduk.com/open-enterprise/2012/04/does-microsoft-office-lock-in-cost-the-uk-government-500-million/index.htm&lt;/a&gt;
comment:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;"They're all in Danish, not unreasonably, but even
with the help of Google Translate I can't find any figures about the
savings of "moving to a flexible two standard" as claimed by the
Microsoft email. But I assume it is backed up somewhere, so let's take
it, and the £500 million figure for the UK, on trust."
&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I can tell you that the Danish reports are inflated.  I believe it is
the same reports that were used in the Norwegian debate around 2007,
and Gisle Hannemyr (a well known IT commentator in Norway) had a look
at the content.  In short, the reason it is claimed that using ODF
will be so costly, is based on the assumption that this mean every
existing document need to be converted from one of the MS Office
formats to ODF, transferred to the receiver, and converted back from
ODF to one of the MS Office formats, and that the conversion will cost
10 minutes of work time for both the sender and the receiver.  In
reality the sender would have a tool capable of saving to ODF, and the
receiver would have a tool capable of reading it, and the time spent
would at most be a few seconds for saving and loading, not 20 minutes
of wasted effort.&lt;/p&gt;

&lt;p&gt;Microsoft claimed all these costs were saved by allowing people to
transfer the original files from MS Office instead of spending 10
minutes converting to ODF. :)&lt;/p&gt;

&lt;p&gt;See
&lt;a href="http://hannemyr.com/no/ms12_vl02.php"&gt;http://hannemyr.com/no/ms12_vl02.php&lt;/a&gt;
and
&lt;a href="http://hannemyr.com/no/ms12.php"&gt;http://hannemyr.com/no/ms12.php&lt;/a&gt;
for background information.  Norwegian only, sorry. :)&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Sat, 26 May 2012 16:00:00 +0000</pubDate>

</item> 
<item>
	<title>Tanguy Ortolo: Fun with spammers</title>
	<guid>http://tanguy.ortolo.eu/blog/article55/fun-spammers</guid>
	<link>http://tanguy.ortolo.eu/blog/article55/fun-spammers</link>
     <description>  &lt;img src="http://planet.debian.org/heads/tanguy.png" width="71" height="62" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;Email spam is a plague, but sometimes there is at least on category of
spammers it is easy to have fun with: naive manual spammers. People that try to
do more or less legal business, using Internet in an illegitimate way, for
instance (this is a real example, including the spammer's address: spamming
bots, please use it ;-) !):&lt;/p&gt;

&lt;pre class="email"&gt;From: Emma Perroni &lt;a href="mailto:emmaperroni@gmail.com?subject=You suck, spammer"&gt;&amp;lt;emmaperroni@gmail.com&amp;gt;&lt;/a&gt;
Subject: Hello

Hello,

Do you have a Facebook page? If you do, I can offer you to add fans by
hunders/thouthands in a single day using an original (and confidential)
technique. We can also add subscribers to Twitter, Youtube or Google+1.

Prices: 10€ for 100 fans, -20% for more than 1000 fans ordered.

Regards&lt;/pre&gt;&lt;h2&gt;Reporting&lt;/h2&gt;

&lt;p&gt;Well, in that case it may or may not be a scam, but even if it is not a
criminal activity such as selling fake drugs, it is not a very honest business.
Anyway, that lady is using her Google account to send her crap, so neutralizing
her is quite easy:&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;checking that it really comes from Google Mail, using DKIM or SPF;&lt;/li&gt;
    &lt;li&gt;writing to Google, reporting that spam (and, in that specific case, the
    abuse they are offering to commit on Google +1);&lt;/li&gt;
    &lt;li&gt;optional, do not do that with scammers: replying to the spammer explaining that this is spamming, that
    you reported it and that she can expect to loose her Google account and
    everything on it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That should work with any good email provider, that is, any provider that
listens to complaints at &amp;lt;abuse@&amp;gt; and takes action on them. For what I
have seen, Google and Yahoo! are, but fossils such as traditional national
telephonists are not. If the message headers allow you to identify it, you can
also report the abuse to the spammer's network operator if it is a good one
(this is rarely the case).&lt;/p&gt;

&lt;h2&gt;Consequences&lt;/h2&gt;

&lt;p&gt;With a bit of luck, that can seriously damage the business of the spammer,
and if he was really careless (e.g. storing important documents on the same
Google account with no local backup), cause serious trouble in his personal
stuff. If you replied to the spammer, you can get fun answers such as (these
are taken from real examples I got):&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Ha ha ha, why not calling the FBI? &lt;em&gt;That's it, laugh while you can,
        do you think your provider does not care? Too bad, he does, so
        you may change of mood when you see the effects loosing one's online
        account.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;We are doing legal business, you will stop your harrassment or we will
        file a complain. &lt;em&gt;Yes, please do so if you dare, but may I remember
        you that you are the one at fault here? (in fact, such a reaction is
        a very good sign, since it shows that the spammer is actually afraid,
        probably for his business)&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Why did you do that? I promise, I shall not do it again, please… &lt;em&gt;Too
        late, lamer, you should have thought of that before sending your
        crap…&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;This is too complicated to be done for each spam of course, but it is worth
doing for spam messages that are not catch by one's antispam. And the rules for
email marketing are well known: only write to people that explicitly allowed
you to do so, full stop, so there is no reason to show any mercy for a
spammer.&lt;/p&gt; </description> 
	<pubDate>Sat, 26 May 2012 12:56:00 +0000</pubDate>

</item> 
<item>
	<title>Craig Small: JFFNMS 0.9.3</title>
	<guid>http://enc.com.au/?p=691</guid>
	<link>http://enc.com.au/2012/05/jffnms-0-9-3/</link>
     <description>  &lt;p&gt;&lt;span class="bm_keywordlink"&gt;&lt;a href="http://www.jffnms.org/"&gt;jffnms&lt;/a&gt;&lt;/span&gt; version 0.9.3 has been released today.  This is a vast improvement over the 0.9.x releases and anyone using that train is strongly recommended to upgrade.So what changed? What didn’t change!  A nice summary would be fixing a lot of things that were broken or needed some tweaking. A really, really big thanks to Marek for all the testing and bug reports and also patient “just run this and tell me what it says” tests he did too.  If something wasn’t right before and works now, it is quite likely it is working because Marek told me how it broke.&lt;/p&gt;

&lt;p&gt;A brief overview of what has changed:
&lt;/p&gt;&lt;ul&gt;
    &lt;li&gt;&lt;a title="Trivial File Transfer Protocol" href="http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol" target="_blank" rel="wikipedia" class="zem_slink"&gt;TFTP&lt;/a&gt; transfers work again&lt;/li&gt;
    &lt;li&gt;A lot of the wierd polling effects due to caching fixed&lt;/li&gt;
    &lt;li&gt;Lots of the selects in sub-tables now work&lt;/li&gt;
    &lt;li&gt;The PHP string-to-float brokeness in SLAs worked-around&lt;/li&gt;
    &lt;li&gt;Even more &lt;a title="Simple Network Management Protocol" href="http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol" target="_blank" rel="wikipedia" class="zem_slink"&gt;SNMP&lt;/a&gt; library cruft removed or escaped&lt;/li&gt;
    &lt;li&gt;HostMIB apps match properly&lt;/li&gt;
    &lt;li&gt;Interface autodiscovery delete and update fields back working&lt;/li&gt;
&lt;/ul&gt;
You can download the file off sourceforge at&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sourceforge.net/projects/jffnms/files/JFFNMS%20Releases/" title="https://sourceforge.net/projects/jffnms/files/JFFNMS%20Releases/"&gt;https://sourceforge.net/projects/jffnms/files/JFFNMS%20Releases/&lt;/a&gt;
&lt;/p&gt;&lt;h6 style="font-size: 1em;" class="zemanta-related-title"&gt;Related articles&lt;/h6&gt;
&lt;ul class="zemanta-article-ul"&gt;
    &lt;li class="zemanta-article-ul-li"&gt;&lt;a href="http://enc.com.au/2012/04/php-floats-and-locales/" target="_blank"&gt;PHP floats and locales&lt;/a&gt; (enc.com.au)&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a href="http://www.zemanta.com/?px" class="zemanta-pixie-a" title="Enhanced by Zemanta"&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Sat, 26 May 2012 06:44:26 +0000</pubDate>

</item> 
<item>
	<title>Joey Hess: the rocket</title>
	<guid>http://joeyh.name/blog/entry/the_rocket/</guid>
	<link>http://joeyh.name/blog/entry/the_rocket/</link>
     <description>  &lt;img src="http://planet.debian.org/heads/joeyh2.png" width="84" height="75" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;The best thing about rockets is when they go up successfully,
and don't come back down.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own"&gt;&lt;img src="http://joeyh.name/blog/./pics/kickstarter/rocket.png" alt="graph" height="290" class="img" width="157" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own"&gt;My git-annex Kickstarter&lt;/a&gt;
reached escape velocity 24 hours after launch, and is now past 200% funded.&lt;/p&gt;

&lt;p&gt;This is great news, because it gives me more time to spend hacking on
git-annex, and will let me add more features and polish it better. I
had set the goal at a minimal amount because I'd have hated not to get funded
at all if this hadn't taken off. But the current funding is much more
comfortable, and the further up it goes, the more scope the project can have.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own"&gt;&lt;img src="http://joeyh.name/blog/./pics/kickstarter/screenshot.png" alt="screenshot" height="502" class="img" width="540" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the point shown above, the project had started to be highlighted as
popular, based largely on kind and generous readers of this blog and
git-annex users who chipped in. For a while, I personally knew around 1/3rd
of contributors.&lt;/p&gt;

&lt;p&gt;That was enough to get it noticed by Kickstarter staff, which in turn
has led to more growth. I love the juxtaposition of geeky tech project
with other stuff here.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own"&gt;&lt;img src="http://joeyh.name/blog/./pics/kickstarter/staff_pick.png" alt="screenshot" height="390" class="img" width="653" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have 17 days remaining until the Kickstarter is finished.
I really had worried it might take that long to get funded.
As it is, I can't wait to see where the rocket's trajectory takes
it in that time!&lt;/p&gt; </description> 
	<pubDate>Sat, 26 May 2012 03:29:40 +0000</pubDate>

</item> 
<item>
	<title>Charles Plessy: Cloud-init uploaded to Debian.</title>
	<guid>http://charles.plessy.org/Debian/debi%C3%A2neries/cloud-init/</guid>
	<link>http://charles.plessy.org/Debian/debi%C3%A2neries/cloud-init/</link>
     <description>  &lt;img src="http://planet.debian.org/heads/plessy.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;Each instance (virtual machine) started from the same image is configured
identically.  The same account and the same procedure will be used to
connect to it.  If the machine image is public and if the instance is open
to the Internet, which is common when using commercial providers such as
&lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon&lt;/a&gt;, an attacker could connect randomly to known IPs from the cloud,
and eventually access to an instance before its owner.&lt;/p&gt;

&lt;p&gt;To individualise the connection to each instance, one can pass informations
at startup, called &lt;a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html"&gt;instance metadata&lt;/a&gt;, which will
be available to this instance only at a fixed HTTP URL.  If the owner
provides a &lt;a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/generating-a-keypair.html"&gt;public SSH key&lt;/a&gt;, this can be used to ensure
that only the owner of the private key can connect.&lt;/p&gt;

&lt;p&gt;After the next update of &lt;a href="http://packages.debian.org/network%2Dconsole"&gt;network-console&lt;/a&gt;, this method of connection will be available for the &lt;a href="http://charles.plessy.org/Debian/planet/../debiâneries/installeur-debian-dans-un-nuage/"&gt;Debian Installer&lt;/a&gt;.  Likewise for the Debian images produced, by installing the &lt;a href="http://packages.debian.org/cloud%2Dinit"&gt;cloud-init&lt;/a&gt; packages, that I uploaded to the &lt;a href="http://wiki.debian.org/DebianExperimental"&gt;experimental&lt;/a&gt; section of our archive. This package is far from ready.  It lacks init scripts, it is not translated, and to be honest, I have not tested it.  But to have it in Debian makes me benefit from the &lt;a href="http://packages.qa.debian.org/cloud%2Dinit"&gt;package&lt;/a&gt; and &lt;a href="http://bugs.debian.org/cloud-init"&gt;bugs&lt;/a&gt; tracking systems.  Do not hesitate to report some, or better, to participate to the maintenance of this package.&lt;/p&gt;

&lt;p&gt;Cloud-init has many other interesting functionalities.  I would like to thank Scott Moser, the upstream developer and maintainer of the Ubuntu package, for his cooperation during the creation of the Debian package, as I made large modifications, in particular the removal of the part managing the &lt;code&gt;menu.lst&lt;/code&gt; for pv-grub, which will have &lt;a href="http://bugs.debian.org/672104"&gt;its own package&lt;/a&gt; or will be transferred somewhere else.&lt;/p&gt; </description> 
	<pubDate>Sat, 26 May 2012 02:12:45 +0000</pubDate>

</item> 
<item>
	<title>Alexander Reichle-Schmehl: Release Critical Bug report for Week 21</title>
	<guid>http://www.schmehl.info/Debian/rc-stats/7.0-wheezy/2012-21</guid>
	<link>http://www.schmehl.info/Debian/rc-stats/7.0-wheezy/2012-21</link>
     <description>  &lt;img src="http://planet.debian.org/heads/tolimar.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  The &lt;a href="http://udd.debian.org/bugs.cgi"&gt;bug webinterface of the
Ultimate Debian Database&lt;/a&gt;
currently knows about the following release critical bugs:&lt;p&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;&lt;th&gt;In Total:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=any&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;1534&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Affecting Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;1095&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Wheezy only:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_not_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;238&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Remaining to be fixed in Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;&lt;b&gt;857&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Of these &lt;b&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;857&lt;/a&gt;&lt;/b&gt; bugs, the following tags are set:&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Pending in Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=only&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;82&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Patched in Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=only&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;175&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Duplicates in Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=only&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;62&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Can be fixed in a security Update:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=only&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;27&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Contrib or non-free in Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=only&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;11&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Claimed in Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=only&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;2&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Delayed in Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=only&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;18&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;Otherwise fixed in Wheezy:&lt;/th&gt;&lt;td&gt;&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=&amp;amp;pending=&amp;amp;security=&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=&amp;amp;done=only&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;86&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Ignoring all the above (multiple tags possible) &lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy_and_sid&amp;amp;patch=ign&amp;amp;pending=ign&amp;amp;security=ign&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=ign&amp;amp;deferred=ign&amp;amp;notmain=ign&amp;amp;notwheezy=&amp;amp;base=&amp;amp;standard=&amp;amp;merged=ign&amp;amp;done=ign&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;&lt;b&gt;500&lt;/b&gt;&lt;/a&gt;
bugs need to be fixed by Debian Contributors to get Debian 7.0 &lt;q&gt;Wheezy&lt;/q&gt; released.&lt;/p&gt;

&lt;p&gt;However, with the view of the Release Managers, 
&lt;a href="http://udd.debian.org/bugs.cgi?release=wheezy&amp;amp;patch=&amp;amp;pending=&amp;amp;security=ign&amp;amp;wontfix=&amp;amp;upstream=&amp;amp;unreproducible=&amp;amp;forwarded=&amp;amp;claimed=&amp;amp;deferred=&amp;amp;notmain=ign&amp;amp;notwheezy=ign&amp;amp;base=&amp;amp;standard=&amp;amp;merged=ign&amp;amp;done=&amp;amp;outdatedwheezy=&amp;amp;outdatedsid=&amp;amp;needmig=&amp;amp;newerubuntu=&amp;amp;fnewer=&amp;amp;fnewerval=7&amp;amp;rc=1&amp;amp;sortby=source&amp;amp;sorto=asc&amp;amp;cpopcon=1&amp;amp;cseverity=1&amp;amp;ctags=1"&gt;&lt;b&gt;975&lt;/b&gt;&lt;/a&gt;
need to be dealt with for the release to happen.&lt;/p&gt;

&lt;p&gt;Please see &lt;q&gt;&lt;a href="http://wiki.debian.org/ProjectNews/RC-Stats"&gt;Interpreting the
release critical bug statistics&lt;/a&gt;&lt;/q&gt; for an explanation of the different numbers.&lt;/p&gt; </description> 
	<pubDate>Fri, 25 May 2012 13:17:27 +0000</pubDate>
  <author>alexander@schmehl.info (Alexander Reichle-Schmehl)</author>  
</item> 
<item>
	<title>Johannes Schauer: setting up mailman, postfix, lighttpd</title>
	<guid>http://blog.mister-muffin.de/feed/8rRzT2Y2JRb3fQUa7cBfC47Csbg=</guid>
	<link>http://blog.mister-muffin.de/2012/05/25/setting-up-mailman,-postfix,-lighttpd</link>
     <description>  &lt;img src="http://planet.debian.org/heads/josch.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;I was worried about having to learn hundreds of configuration options to
properly set up mailman, postfix and lighttpd on Debian Squeeze. Turned out,
that except for lighttpd it all works out of the box.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt-get install postfix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When asked by debconf, I specified lists.mister-muffin.de as the fully
qualified domain name.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt-get install mailman
newlist mailman
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;newlist&lt;/code&gt; command reminds me that I have to add its output to
&lt;code&gt;/etc/aliases&lt;/code&gt;. After doing so, I have to run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;newaliases
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From now on, I can add any mailinglist by running &lt;code&gt;newlist&lt;/code&gt;, editing
&lt;code&gt;/etc/aliases&lt;/code&gt; and running &lt;code&gt;newaliases&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mailinglists can also be added through the mailman webinterface but one still
has to put the according entries into &lt;code&gt;/etc/aliases&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Following is a working lighttpd configuration that works out of the box with
the default settings of mailman on Debian squeeze.&lt;/p&gt;
&lt;p&gt;This was the only part that caused me some headaches.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server.modules += ("mod_alias", "mod_cgi", "mod_accesslog")

$HTTP["host"] == "lists.mister-muffin.de" { accesslog.filename =
    accesslog.filename = "/var/log/lighttpd/lists-access-log"

    alias.url += (
        "/cgi-bin/mailman/private/" =&amp;gt; "/var/lib/mailman/archives/private/",
        "/cgi-bin/mailman/public/" =&amp;gt; "/var/lib/mailman/archives/public/",
        "/pipermail/" =&amp;gt; "/var/lib/mailman/archives/public/",
        "/cgi-bin/mailman/"=&amp;gt; "/var/lib/mailman/cgi-bin/",
        "/images/mailman/" =&amp;gt; "/usr/share/images/mailman/",
    )

    cgi.assign = (
        "/admin" =&amp;gt; "",
        "/admindb" =&amp;gt; "",
        "/confirm" =&amp;gt; "",
        "/create" =&amp;gt; "",
        "/edithtml" =&amp;gt; "",
        "/listinfo" =&amp;gt; "",
        "/options" =&amp;gt; "",
        "/private" =&amp;gt; "",
        "/rmlist" =&amp;gt; "",
        "/roster" =&amp;gt; "",
        "/subscribe" =&amp;gt; "")
}

server.document-root        = "/var/www"
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
index-file.names            = ( "index.html" )
server.dir-listing          = "disable"
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As a bonus, I wanted to import my existing email exchange with my GSoC mentors
into the mailinglist. First I was planning on manually sending the email
messages to the list, but a much easier option is to just import them in mbox
format.&lt;/p&gt;
&lt;p&gt;To extract all email messages, I first wrote the following python snippet:&lt;/p&gt;
&lt;div class="pygments_murphy"&gt;&lt;pre&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;mailbox&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;itertools&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mailbox&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mbox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'~/out'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;itertools&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mailbox&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mbox&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'~/sent'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;mailbox&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Maildir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'~/Mail/Web/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;"wookey"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'to'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;      &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="s"&gt;"wookey"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'cc'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;      &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="s"&gt;"wookey"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'from'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;      &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="s"&gt;"abate"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'to'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;      &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="s"&gt;"abate"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'cc'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;      &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="s"&gt;"abate"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'from'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;br /&gt;      &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'subject'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;'['&lt;/span&gt;&lt;br /&gt;      &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'subject'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"multistrap"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;        &lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;It iterates through messages in my mbox and maildir mailboxes, filters them for
emails by wookey or pietro, strips away some messages I found to not be
relevant and then saves the filtered result into the mbox mailbox &lt;code&gt;~/out&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It is important to specify &lt;code&gt;factory=None&lt;/code&gt; for the Maildir parser, because it
otherwise defaults to &lt;code&gt;rfc822.Message&lt;/code&gt; instead of &lt;code&gt;MaildirMessage&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Also do not forget to call &lt;code&gt;box.close()&lt;/code&gt;. I initially forgot to do so and ended
up with missing messages in &lt;code&gt;~/out&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I then copy the archive in its place:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scp out lists.mister-muffin.de:/var/lib/mailman/archives/private/debian-bootstrap.mbox/debian-bootstrap.mbox
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Another thing that initially caused me trouble, was that the mbox didnt have
the correct permissions due to the scp. Fixing them:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chown -R list:www-data /var/lib/mailman/archives/private/
chmod 664 /var/lib/mailman/archives/private/debian-bootstrap.mbox/debian-bootstrap.mbox
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And update the mailman archive like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo -u list /usr/lib/mailman/bin/arch debian-bootstrap /var/lib/mailman/archives/private/debian-bootstrap.mbox/debian-bootstrap.mbox
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Initially I was running the above command as root which screws up permissions
as well.&lt;/p&gt; </description> 
	<pubDate>Fri, 25 May 2012 07:42:00 +0000</pubDate>

</item> 
<item>
	<title>Matthew Garrett: Fedora 17 and Mac support</title>
	<guid>http://mjg59.dreamwidth.org/12037.html</guid>
	<link>http://mjg59.dreamwidth.org/12037.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/mjg59.png" width="69" height="85" alt="" align="right" style="float: right;"&gt;  Fedora 17 will be shipping next week. It's got a bunch of &lt;a href="http://fedoraproject.org/wiki/Releases/17/FeatureList"&gt;new features&lt;/a&gt;, none of which I contributed to in the slightest. What I did work on was improving our support for installation on x86 Apple hardware. There's still a few shortcomings in this so it's not an announced or supported feature, but it's sufficient progress that it's worth writing about.&lt;br /&gt;&lt;br /&gt;There's a few ways that Apple platforms differs from normal PC hardware. The first is that Apples are very much intended to be EFI first and BIOS second, while that's still not really true for commodity PC hardware. Apple launched Boot Camp shortly after they started shipping x86 Macs (and shortly after I'd &lt;a href="http://mjg59.livejournal.com/58934.html"&gt;got Ubuntu running&lt;/a&gt; on one for the first time[1]) but the focus of Boot Camp has always been to be good enough to boot Windows and not much else[2]. The other is the integration with the boot environment. You can boot Linux easily enough by setting the standard EFI boot variables, but if you ever boot back into OS X it's easy to trigger deletion of those. There's then no straightforward way of resetting them, and you're left having to recover your installation.&lt;br /&gt;&lt;br /&gt;The other difficult bit has been actually starting the installer at all. If you're happy to use BIOS emulation than this can be done without too much misery, but you're then left with dealing with Apple's custom synchronised GPT/MBR. More modern Macs will boot via the standard EFI mechanisms, but there's a range of problems that can be caused that way. Fedora 17 is the first Linux distribution to ship install media that will EFI boot a Mac when either written to optical media or a USB stick[3]. Put the install media in your system and then either select it in the OS X Startup Disk preferences menu and reboot, or reboot and hold down the alt key. In the latter case there'll be a nice Fedora logo. Click on it and it'll boot.&lt;br /&gt;&lt;br /&gt;The biggest difference between Apple hardware and anyone else is that we'd normally put the bootloader in a FAT partition that's shared with any other installed operating systems. That does actually work on Apples, but then you run into the earlier point I mentioned. The Apple startup picker that you get by holding down the alt key doesn't pay any attention to the standard EFI boot variables, so it won't show a FAT partition merely because it's got an EFI bootloader on it. The same is true of the OS X Startup Disk preferences. The best way to get a drive to appear in the menu is to make it look like an OS X drive.&lt;br /&gt;&lt;br /&gt;This was problematic in a few ways, due to the requirement for an OS X drive to be HFS+. The first was that we didn't have any support for that in our installer, so work had to be done there. The second was that the state of HFS+ was woefully poor in Linux[4]. Linux will refuse to write to an HFS+ filesystem if it hasn't been cleanly unmounted or fscked, and since we can't rely on everyone always shutting their machine down cleanly that means a working fsck.hfsplus. In theory we were shipping one of those. In practice, it reliably segfaulted on 64-bit systems[5]. So I had to package the latest version of Apple's code, and doing that involved dealing with the fact that Apple now use &lt;a href="http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html"&gt;blocks&lt;/a&gt; almost as much as Grub 2 uses nested functions, and that meant using Clang and that meant dealing with a bug where Clang segfaulted if it had been built with gcc 4.7[6], but finally once all of those yaks had been shaven we could trust our filesystem.&lt;br /&gt;&lt;br /&gt;Of course, more problems existed. You can't just drop a bootloader onto an HFS+ partition and expect it to work. You need to write its inode value into the superblock. Trivial, except that if you do this from userspace then the kernel kindly overwrites your update when you unmount the disk and it updates the superblock. That required a mechanism for updating that data via the kernel, which meant &lt;a href="https://lkml.org/lkml/2012/2/6/346"&gt;adding an ioctl&lt;/a&gt;. This would have been fine, except the OS X Startup Disk preference looks for a bootloader in a location other than where Fedora installs it. Changing our bootloader install path wasn't a great option, so the easiest thing to do was just to link them together. Except HFS+ doesn't really support hardlinks. When you hardlink something the original file gets moved into a magic directory in the filesystem root and the links are special files that refer to it. And it turns out that it's not actually the inode that the firmware wants when finding the bootloader, it's the catalogue ID, and these aren't the same when hardlinks are involved. So, &lt;a href="https://lkml.org/lkml/2012/4/13/208"&gt;another kernel patch&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All that was left for the boot partition then was adding an icon and a drive label. We already had code for generating the icon, and the drive label &lt;a href="http://www.submitcad.com/a/netpbm/converter/ppm/ppmtoapplevol.c"&gt;wasn't that difficult&lt;/a&gt;. Hurrah!&lt;br /&gt;&lt;br /&gt;Ok, so we can construct a filesystem that (a) appears in the bootpicker, and (b) appears in the OS X Startup Disk preferences. We can even put a bootloader on it. This led to the next problem. The bootloader started without any trouble. But the bootloader couldn't read any files off the boot partition, including its configuration. This should have been obvious with hindsight - the problem was simply that grub legacy[7] doesn't support HFS+. Writing an HFS+ driver seemed like an excessive amount of work, especially since the firmware already supported reading HFS+, so instead I wrote a simple grub filesystem driver that &lt;a href="https://github.com/vathpela/grub-fedora/blob/master/stage2/fsys_uefi.c"&gt;uses the UEFI interfaces&lt;/a&gt; to read files.&lt;br /&gt;&lt;br /&gt;A working bootloader! One more problem there. grub looks in its startup directory to find its configuration file. We have two "copies" of grub hardlinked to each other, each looking in a different directory for configuration. Hardlinking the config files together worked fine, except that most tools that update config files have this irritating habit of writing to a temporary file and moving that over the original, thus breaking the hardlink. Easily solved by using a symlink instead, except that the UEFI filesystem semantics don't really support symlinks because UEFI only really envisaged using FAT. If you use Apple's UEFI HFS+ driver to open a symlink, you get a short file containing the target path of the symlink. Rather less than ideal, and &lt;a href="https://github.com/vathpela/grub-fedora/commit/80fb290102a8d667687766ec52b25402b746ee5c"&gt;a rather gross hack&lt;/a&gt; to cope with it.&lt;br /&gt;&lt;br /&gt;All set now, other than a bug in some older Mac firmware where &lt;a href="http://pkgs.fedoraproject.org/gitweb/?p=grub.git;a=commitdiff;h=bd636ca1cc61cb811082f9ecd170c5bdf29da313"&gt;read would return BUFFER_TOO_SMALL without returning the real buffersize&lt;/a&gt; and the odd way that &lt;a href="https://github.com/vathpela/grub-fedora/commit/b554bd598d4630d423d436d3774dcb90b127052f"&gt;Apple treat CDs&lt;/a&gt;. Oh, and a bug in Apple's Broadcom wifi driver that could &lt;a href="http://mjg59.dreamwidth.org/11235.html"&gt;overwrite the kernel&lt;/a&gt;, and &lt;a href="https://github.com/vathpela/grub-fedora/commit/245bb42f42f749df5148cda2127ebb991d53a82e"&gt;case-sensitivity&lt;/a&gt;, something that obviously isn't something you often hit on UEFI when all you usually see is FAT.&lt;br /&gt;&lt;br /&gt;Kernel-side, we had a couple of things. Obviously there the bugs I'd &lt;a href="http://mjg59.livejournal.com/132477.html"&gt;mentioned in the past&lt;/a&gt;, but those had already been dealt with. New issues included the fact that we were frequently picking the wrong framebuffer address, especially on machines with multiple GPUs. &lt;a href="https://lkml.org/lkml/2012/3/23/260"&gt;Fixed now&lt;/a&gt;, along with another issue where we'd sometimes get confused by models with &lt;a href="http://www.spinics.net/lists/linux-fbdev/msg06092.html"&gt;different GPU configurations&lt;/a&gt;. And at that point, most of the implementation work was done.&lt;br /&gt;&lt;br /&gt;Of course, there was also the work of integrating this into the tools that we use to generate our install media, and I'd like to thank Will Woods, Brian Lane and Dennis Gilmore for the work they put into that, along with anyone I've forgotten. Tom Calloway handled getting the device label graphics generated right before deadline. A cast of thousands helped with testing.&lt;br /&gt;&lt;br /&gt;So why did I mention shortcomings? First, this only works on machines with 64-bit firmware. Early 64-bit Apples still had 32-bit firmware. In theory we can support that case - in practice it's a moderate amount of writing, including some mildly awkward kernel code. But anything later than mid-2007 should have 64-bit firmware, so it's not a massive concern. Second, we seem to have fairly significant trouble with Radeon hardware on a lot of Macs. We &lt;a href="http://comments.gmane.org/gmane.comp.video.dri.devel/68696"&gt;fixed one bug&lt;/a&gt; there, but something's still going wrong in setup and you'll frequently end up with a black screen. And thirdly, I'm sure there's some other machines that still don't work for (as yet) undetermined reasons.&lt;br /&gt;&lt;br /&gt;With luck we'll get these things dealt with by Fedora 18. But even with these flaws, Fedora 17 will work fine on a lot of Apple hardware, and testing it is as simple as downloading and booting a live image. Bugs go in &lt;a href="http://bugzilla.redhat.com"&gt;the usual place&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[1] Note my charming belief that the Ubuntu installer would fully support this hardware via EFI in the near future. 6 years ago. It still doesn't.&lt;br /&gt;[2] This can be fairly easily seen from little things like the name "Windows" being hardcoded into every UI that sees a Boot Camp drive.&lt;br /&gt;[3] I cover this in more depth &lt;a href="http://mjg59.dreamwidth.org/11285.html"&gt;here&lt;/a&gt;&lt;br /&gt;[4] To be fair, it mostly still is - there's plenty of work to be done there.&lt;br /&gt;[5] Approximately nobody had noticed this, which is all kinds of unreassuring.&lt;br /&gt;[6] Thanks to Kalev Lember for &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=791365"&gt;dealing with that&lt;/a&gt;&lt;br /&gt;[7] Still the EFI bootloader in Fedora 17. We've already swapped Fedora 18 over to grub 2.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dreamwidth.org/tools/commentcount?user=mjg59&amp;amp;ditemid=12037" alt="comment count unavailable" height="12" style="vertical-align: middle;" width="30" /&gt; comments </description> 
	<pubDate>Fri, 25 May 2012 03:42:53 +0000</pubDate>

</item> 
<item>
	<title>Paul Tagliamonte: playing with non-lintian lintian checks</title>
	<guid>http://blog.pault.ag/post/23702762096</guid>
	<link>http://blog.pault.ag/post/23702762096</link>
     <description>  &lt;img src="http://planet.debian.org/heads/paultag.png" width="65" height="85" alt="" align="right" style="float: right;"&gt;  &lt;p&gt;Crazy title, I know.&lt;/p&gt;

&lt;p&gt;Over the past $WHILE, I’ve found myself checking for the same things. Some of these are fit for inclusion into lintian it’s self — others, not so much.&lt;/p&gt;

&lt;p&gt;Here’s a rundown on what my lintian wrapper (tragically also called “lintian” and just higher up on my $PATH. I know it’s a hack.)&lt;/p&gt;

&lt;p&gt;Since I only use lintian on .changes files - it pre-processes for some information that is stuffed in the changes.&lt;/p&gt;

&lt;p&gt;The first step is to get all the bugs that the package closes. It then takes these bugs, and queries the BTS to see what package they’re filed against. If the bug is filed against a &lt;em&gt;different&lt;/em&gt; bug then the package’s source, it’ll emit a warning. It has a greylist for stuff like “WNPP”. This will fail if something’s filed against it’s binary package rather then it’s source :)&lt;/p&gt;

&lt;p&gt;Next, the wrapper will get “other” info from the changes. It checks if the suite is in the blacklist (“UNRELEASED”, and “testing”, (stable for me as well, since I don’t usually deal with SRUs often)).&lt;/p&gt;

&lt;p&gt;It’ll also check for the changed-by and maintainer, ensuring they’re the same. This will fail for co-maint’d packages.&lt;/p&gt;

&lt;p&gt;If you’ve not guessed by now, this system relies on false-positives :)&lt;/p&gt;

&lt;p&gt;Nextly, if there are .debs in the Files, it’ll go through and check the control of each. It’ll print out a stanza with the short-description inside a template, to see if the description “works”.&lt;/p&gt;

&lt;p&gt;After that, it’ll attempt to make HTTP requests to the Homepage (and eventually URLs in the description and VCS-Browse)&lt;/p&gt;

&lt;p&gt;If the package has “python” in the source name anywhere, or in any of it’s binary packages, it’ll trigger &lt;a href="http://jwilk.net/software/lintian4python" target="_blank"&gt;jwilk’s lintian4python&lt;/a&gt; over the source as well.&lt;/p&gt;

&lt;p&gt;After this, it passes through to regular lintian.&lt;/p&gt;

&lt;p&gt;Oh, and it colorizes all the output :)&lt;/p&gt;

&lt;p&gt;Here is a (mostly lint-free) package:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://i.imgur.com/sBMXA.png" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;As you can see, it’s very (&lt;em&gt;very&lt;/em&gt;) verbose, but i’d rather cross stuff off a checklist then worry about something being off.&lt;/p&gt;

&lt;p&gt;Anyway, it’s a work in progress. Not even a serious one, at that. It’s a bunch of hacks put together, so I can’t really endorse anyone else using this stuff. If you feel crazy enough to do so, all the tools are found on my &lt;a href="https://github.com/paultag/dot-bin" target="_blank"&gt;dot-bin repo on GitHub&lt;/a&gt;&lt;/p&gt; </description> 
	<pubDate>Fri, 25 May 2012 00:25:03 +0000</pubDate>

</item> 
<item>
	<title>Vincent Sanders: Interrupt Service Routines</title>
	<guid>tag:blogger.com,1999:blog-3711269760993993197.post-8957151266842533451</guid>
	<link>http://vincentsanders.blogspot.com/2012/05/interrupt-service-routines.html</link>
     <description>  Something a little low level for this post. I have been asked recently how to "test" for the maximum duration of an Interrupt Service Routine (ISR) in Linux&lt;br /&gt;&lt;br /&gt;To do this I probably ought to explain what the heck an ISR is!&lt;br /&gt;&lt;br /&gt;A CPU executes one instruction after another and runs your programs. However early in the history of the electronic computer it soon became apparent that sometimes there were events happening, generally caused by a hardware peripheral, that required some other code to be executed without having to wait for the running program to check for the event.&lt;br /&gt;&lt;br /&gt;This could have been solved by having a second processor to look after those exceptional events but that would have been expensive, difficult to synchronize and the designers took the view that there was a perfectly good processor already sat there just running some users program. This Interruption in the code flow became known as, well, an Interrupt (and the other approach as polling).&lt;br /&gt;&lt;br /&gt;The hardware for supporting interrupts started out very simply, the processor would complete execution of the current instruction and when the Program Counter (PC) was about to be incremented if an Interrupt ReQest (IRQ) was pending the PC would be stored somewhere (often a "special" IRQ stack or register) and then execution started at some fixed address.&lt;br /&gt;&lt;br /&gt;The interrupting event would be dealt with by some code and execution returned to the original program without it ever knowing the CPU just wandered off to do something else. The code that deals with the interrupt is known as the Interrupt Service Routine (ISR).&lt;br /&gt;&lt;br /&gt;Now I have glossed over a lot of issues here (sufficient to say there are a huge number of details in which to hide the devil) but the model is good enough for my purpose. A modern CPU has a extraordinarily complex system of IRQ controllers to deal with numerous peripherals requesting the CPU stop what its doing and look after something else.&lt;br /&gt;&lt;br /&gt;This system of controllers will ultimately cause program execution to be delivered to an ISR for that device. If we were living in the old single thread of execution world we could measure how long execution remains within an ISR, perhaps by using a physical I/O line as a semaphore and an external oscilloscope to monitor the line.&lt;br /&gt;&lt;br /&gt;You may well ask "Why measure this?" well historically while the ISR was running nothing else could interrupt it executing which meant even if there was an event that was more important it would not get the CPU until the first ISR was complete. This was known as IRQ latency which was undesirable if you were doing something that required an IRQ to be serviced in a timely manner (like playing audio)&lt;br /&gt;&lt;br /&gt;This is no longer how things are done while the top half runs with IRQ disabled many are threaded interrupt handlers and are preemptable (I.e. can be interrupted themselves) which leads to the first issue with measuring ISR time in that the ISR may be executed in multiple chunks if something more important interrupts. Indeed it may appear an ISR has taken many times longer one time than another because the CPU has been off servicing multiple other IRQ.&lt;br /&gt;&lt;br /&gt;Then we have the issue that Linux kernel drivers often do as little as possible within their ISR, often only as much as is required to clear the physical interrupt line. Processing is then continued in a "bottom half" handler  this leads to ISR which take practically no time to execute but processing is still being caused elsewhere in the system.&lt;br /&gt;&lt;br /&gt;The next issue is the world is not uniprocessor any more, how many processors does a machine have these days? even a small ARM SoC can often have two or even four cores. This makes our timing harder because  it is now possible to be servicing multiple interrupts from a single peripheral on separate cores at the same time!&lt;br /&gt;&lt;br /&gt;In summary measuring ISR execution time is not terribly enlightening and almost certainly not what you are interested in. The actual question is much more likely that you really want to be examining something that the ISR time was an historical proxy for like IRQ latency or system overheads in locking.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/3711269760993993197-8957151266842533451?l=vincentsanders.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt; </description> 
	<pubDate>Thu, 24 May 2012 22:44:21 +0000</pubDate>
  <author>noreply@blogger.com (Vincent Sanders)</author>  
</item> 
<item>
	<title>Mark Brown: Anne Brown (1946-2012)</title>
	<guid>http://www.sirena.org.uk/log/?p=547</guid>
	<link>http://www.sirena.org.uk/log/2012/05/22/anne-brown-1946-2012/</link>
     <description>  &lt;p&gt;&lt;a href="http://announce.jpress.co.uk/16893450"&gt;BROWN Anne&lt;/a&gt; After a long illness bravely fought, Anne Margaret (née Wilson), wife of Fred and mother to Mark, enthusiastic Scottish country dancer. Service to be held at Borders Crematorium, on Friday, May 25, 2012, at 11 am. Donations, if desired, to &lt;a href="http://www.mariecurie.org.uk/"&gt;Marie Curie Cancer Support&lt;/a&gt;. Family flowers only.&lt;/p&gt; </description> 
	<pubDate>Thu, 24 May 2012 22:13:37 +0000</pubDate>

</item> 
<item>
	<title>Junichi Uekawa: A few weeks ago, my sony VAIO type P that I have been using for the past 2 years have died.</title>
	<guid>http://www.netfort.gr.jp/~dancer/diary/daily/2012-May-25.html.en#2012-May-25-07:07:17</guid>
	<link>http://www.netfort.gr.jp/~dancer/diary/daily/2012-May-25.html.en#2012-May-25-07:07:17</link>
     <description>  &lt;img src="http://planet.debian.org/heads/dancer.png" width="75" height="97" alt="" align="right" style="float: right;"&gt;  A few weeks ago, my sony VAIO type P that I have been using for the past 2 years have died.
	  I've now got my MacBook Air and back to being productive again. One thing is that I probably lost your mail since I recovered from my home directory backup from 5 May.
	  Not that I read mail all that often, but your mail will certainly be lost if you've sent me a mail in the meanwhile.
        &lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Thu, 24 May 2012 22:07:17 +0000</pubDate>

</item> 
<item>
	<title>Mark Brown: regulator updates in 3.4</title>
	<guid>http://www.sirena.org.uk/log/?p=495</guid>
	<link>http://www.sirena.org.uk/log/2012/05/24/regulator-updates-in-3-4/</link>
     <description>  &lt;p&gt;This has been a fairly quiet release from a regulator point of view, the only real framework features added were devm support and a convenience helper for setting up fixed voltage regulators. Much more coming next time, though! The most noticeable thing in the changelog is that Axel Lin continued his relentless and generally awesome stream of fixes and cleanups.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Managed (devm) versions of regulator_get() and regulator_bulk_get() simplifying error handling and resource management for drivers.&lt;/li&gt;
&lt;li&gt;Added a convenience interface for setting up fixed voltage regulators.&lt;/li&gt;
&lt;li&gt;Device tree support for TWL4030.&lt;/li&gt;
&lt;li&gt;New drivers for Freescale i.MX Anatop, Samsung S5M8767, TI TPS62360 and TPS65271 regulators.&lt;/li&gt;
&lt;li&gt;Removed BQ24022 in favour of the more generic gpio-regulator driver.&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Thu, 24 May 2012 18:08:44 +0000</pubDate>

</item> 
<item>
	<title>Mark Brown: regmap updates in 3.4</title>
	<guid>http://www.sirena.org.uk/log/?p=485</guid>
	<link>http://www.sirena.org.uk/log/2012/05/24/regmap-updates-in-3-4/</link>
     <description>  &lt;p&gt;Things are really quieting down with the regmap API, while we’re still seeing a trickle of new features coming in they’re getting much smaller than they were.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for padding between the register and the value when interacting with the device. This is required by some devices with high speed control interfaces in order to give the device time to get the values ready.&lt;/li&gt;
&lt;li&gt;Support for applying register updates to the device when restoring the register state. This is intended to be used to apply updates supplied by manufacturers for tuning the performance of the device (many of which are to undocumented registers which aren’t otherwise covered). For want of a better term this feature is known as a patch.&lt;/li&gt;
&lt;li&gt;Support for two bit address, six bit value registers contributed by Wolfram Sang.&lt;/li&gt;
&lt;li&gt;Support for multi-register operations on cached registers contributed by Laxman Dewangan.&lt;/li&gt;
&lt;li&gt;Some additional diagnostics available via debugfs for the cache state.&lt;/li&gt;
&lt;li&gt;Support for syncing only part of the register cache, useful for devices with power domains or sub devices which can be reset independently.&lt;/li&gt;
&lt;li&gt;Stubs and parameter query functions intended to make it easier for other subsystems to build infrastructure on top of the regmap API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;plus the general bug fixes and tweaks you’d expect.&lt;/p&gt; </description> 
	<pubDate>Thu, 24 May 2012 18:07:16 +0000</pubDate>

</item> 
<item>
	<title>Sylvestre Ledru: llvm &amp; clang 3.1 in Debian unstable + GSoC</title>
	<guid>http://sylvestre.ledru.info/blog/xmlsrv/800@http://sylvestre.ledru.info/blog</guid>
	<link>http://sylvestre.ledru.info/blog/sylvestre/2012/05/24/llvm_aamp_clang_3_1_in_debian_unstable_g</link>
     <description>  &lt;p&gt;Released a few days ago, I am happy to announce that LLVM and clang 3.1 are already available in the Debian archive in Unstable. RC versions were already available for the last few weeks in Debian experimental. They are very likely to be part of wheezy.&lt;br /&gt;
We will soon try a new rebuild of the Debian archive with the version 3.1. &lt;/p&gt;
	&lt;p&gt;Talking about clang, a couple of months ago, I proposed a GSoC project to extend the Debian infrastructure in order to use clang instead gcc to build Debian packages. The goal is not to replace gcc but it is more about building packages with a new compiler.&lt;/p&gt;
	&lt;p&gt;With Paul Tagliamonte as co-mentor, Alexander Pashaliyski is going to work during the summer on this subject. &lt;/p&gt;
	&lt;p&gt;The final deliverables should be:&lt;/p&gt;
	&lt;ul&gt;
	&lt;li&gt;Build services modified to be able to use clang instead of gcc/g++&lt;/li&gt;
	&lt;li&gt;Integration into the Debian infrastructure (buildd.d.o, and similar services)&lt;/li&gt;
	&lt;li&gt;An easy way to switch of compiler between gcc/g++ and clang&lt;/li&gt;
	&lt;li&gt;A way to build a package with a different compiler (gcc, clang, intel compiler, etc)&lt;/li&gt;
	&lt;li&gt;Time permitting, a fully clang-built Debian installation&lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;For now, Alexander is working on an installation of the wanna-build and buildd services in order to have a dedicated testing environment.&lt;/p&gt; </description> 
	<pubDate>Thu, 24 May 2012 16:13:37 +0000</pubDate>

</item> 
<item>
	<title>Richard Hartmann: Public service announcement</title>
	<guid>http://richardhartmann.de/blog/posts/2012/05/24-public_service_announcement/</guid>
	<link>http://richardhartmann.de/blog/posts/2012/05/24-public_service_announcement/</link>
     <description>  &lt;p&gt;This will be a repost for anyone subscribed to &lt;a href="http://planet.debian.org/"&gt;Planet Debian&lt;/a&gt;, sorry.&lt;/p&gt;
&lt;p&gt;In case you have not heard about &lt;a href="http://git-annex.branchable.com/"&gt;git-annex&lt;/a&gt; yet and you care
about syncing, tracking, and managing your private or public files,
go click the link; it's OK, I will wait. The use cases sound
intriguing, don't they? But unless you are comfortable with a shell
and git, don't bother using it; pain is inevitable.&lt;/p&gt;
&lt;p&gt;joeyh &lt;a href="http://joeyh.name/blog/entry/kickstarter_for_git-annex_assistant/"&gt;
announced&lt;/a&gt; a &lt;a href="http://www.kickstarter.com/projects/joeyh/git-annex-assistant-like-dropbox-but-with-your-own"&gt;
kickstarter project&lt;/a&gt; to make git-annex more user friendly,
support automated adding and syncing of files, and a web front-end.
Notwithstanding the cut that kickstarter and amazon payments will
take and the inherent questions that are being raised by paying for
FLOSS, this is a &lt;em&gt;very&lt;/em&gt; worthwhile endeavour to support.&lt;/p&gt;
&lt;p&gt;PS: Yes, this feels a tad circle-jerky inasmuch joeyh's post
links to my blog; I would have linked to his post anyway, though.
If anything, this made me think twice about posting this here.&lt;/p&gt;
&lt;p&gt;PPS: Yes, I will continue writing my Trans-Siberian series even
though I am home already. Air China decided to keep me in China
longer than planned, real life is busy, and, truth be told, Diablo
3 came out. The second Mongolian post is half-way finished, at
least.&lt;/p&gt; </description> 
	<pubDate>Thu, 24 May 2012 15:06:32 +0000</pubDate>

</item> 
<item>
	<title>Vincent Sanders: Linux kernel presentation</title>
	<guid>tag:blogger.com,1999:blog-3711269760993993197.post-5650865315724101176</guid>
	<link>http://vincentsanders.blogspot.com/2012/05/linux-kernel-presentation.html</link>
     <description>  Recently I was asked to present a short introduction to the Linux kernel for our project managers. I put together a short slide deck for the presentation which I have decided to share.&lt;br /&gt;&lt;div style="clear: both; text-align: center;" class="separator"&gt;&lt;a style="margin-left: 1em; margin-right: 1em;" href="http://people.collabora.com/~vince/linux-kernel-what-who-how.pdf"&gt;&lt;img src="http://1.bp.blogspot.com/-GFMSrxw84v8/T74PWVuWcdI/AAAAAAAAAIg/vxTbhlkxAhw/s1600/titlepage.png" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;I feel its important to note that I had a lot more to say about each section and the slides were more an aid for my memory to cover the important points. Of special note would be the diagram showing the "hierarchy" of contributors, this is of course nowhere near as well stratified as portrayed.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/3711269760993993197-5650865315724101176?l=vincentsanders.blogspot.com" alt="" height="1" width="1" /&gt;&lt;/div&gt; </description> 
	<pubDate>Thu, 24 May 2012 10:41:37 +0000</pubDate>
  <author>noreply@blogger.com (Vincent Sanders)</author>  
</item> 
<item>
	<title>Ingo Juergensmann: About Gallery3 in Debian and MySQL</title>
	<guid>http://blog.windfluechter.net/1452 at http://blog.windfluechter.net</guid>
	<link>http://blog.windfluechter.net/content/blog/2012/05/24/1452-about-gallery3-in-debian-and-mysql</link>
     <description>  &lt;div class="field field-name-body field-type-text-with-summary field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;p&gt;Years ago, when I started using a cheap Kodak DX3600 digital camera to make some digital photos, I used Gallery from Menalto to collect these pictures within a gallery. Gallery (version 1) was using plain text files to keep its information about galleries and photos and as the number of photos I put into the gallery the more it got slower and slower. Then Gallery2 was released which used a database, either MySQL or PostgreSQL, and was a huge improvement in speed. My main galleries do have about 10-20.000 pictures each. But Gallery2 is aged nowadays and the next logical step would be to migrate to Gallery3. But what a mess!&lt;/p&gt;
&lt;p&gt;Gallery3 has some drawbacks: &lt;/p&gt;
&lt;ol&gt;&lt;li&gt;there is currently no gallery3 package in Debian, although it's been released upstream for some time now. &lt;/li&gt;
&lt;li&gt;there is actually a bug open (&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=511715"&gt;&lt;/a&gt;&lt;a href="http://search.twitter.com/search?q=%23/511715"&gt;#511715&lt;/a&gt;), stating that there are some license issues with Gallery3 and some SWF files&lt;/li&gt;
&lt;li&gt;it's been said that Gallery3 doesn't support per picture permissions anymore, only permission per album is now possible, which is giving me headache as I changed permissions of some personal pictures in the past for privacy reasons and which would either lead to completely unavailable albums to the public or the need of splitting album into a public and a private section, which breaks the timely order of the pictures&lt;/li&gt;
&lt;li&gt;whereas G2 supported both MySQL and PostgreSQL as database backends, G3 only supports MySQL. That's a real pitty because I prefer PostgreSQL because of its stability and easiness over MySQL. It already happened several times that MySQL databases were gone after a kernel crash or something. Even mysql.user table was gone more than once, whereas PostgreSQL never ever has shown such behaviour to me. It just works. &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I'm really upset about the last point! Why is there such a strong believe in MySQL. In my eyes, MySQL is utter crap. It's more like MS Access than a real thing when talking DBMS/SQL. And my impression is that, after Oracle bought MySQL, Oracle did a good job to scare their customers off. PostgreSQL on the other hand gained a good momentum in usage since the Oracle/MySQL deal. So, it's a total mystery to me how a big software package with dozens of developers can decide not to support PostgreSQL or even drop the support of PostgreSQL for a new release! It's driving me nuts, again and again. &lt;/p&gt;
&lt;p&gt;Other big software packages like Drupal are doing the right thing: while PostgreSQL support in drupal6 was weak and buggy because of all these awful MySQLisms around, Drupal now uses a database abstraction layer in drupal7 to allow even sqlite or Oracle to be used as underlying database. That's the way to go, but it's totally awkward to drop PostgreSQL support as Gallery3 did.&lt;/p&gt;
&lt;p&gt;So, is there a way out of my dilemma? Will gallery3 be a package within Debian soon (no offense to Michael Schultheiss, I think he's doing a great job and needs assistance from upstream in this case)? Is there any good replacement for Gallery3 that can deal with tenthousends of images and dozens of users and supports PostgreSQL and has some kind of import tool from gallery2?&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"&gt;&lt;div class="field-label"&gt;Kategorie: &lt;/div&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="http://blog.windfluechter.net/category/categories/debian"&gt;Debian&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-taxonomy-vocabulary-3 field-type-taxonomy-term-reference field-label-above"&gt;&lt;div class="field-label"&gt;Tags: &lt;/div&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;a href="http://blog.windfluechter.net/taxonomy/term/12"&gt;Debian&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="http://blog.windfluechter.net/category/267/tags"&gt;Bugs&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="http://blog.windfluechter.net/taxonomy/term/120"&gt;MySQL&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item odd"&gt;&lt;a href="http://blog.windfluechter.net/taxonomy/term/82"&gt;PostgreSQL&lt;/a&gt;&lt;/div&gt;&lt;div class="field-item even"&gt;&lt;a href="http://blog.windfluechter.net/taxonomy/term/115"&gt;Software&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="field field-name-field-socialshareprivacy field-type-ssp-placeholder field-label-hidden"&gt;&lt;div class="field-items"&gt;&lt;div class="field-item even"&gt;&lt;div id="field_socialshareprivacy-1452" class="ssp_wrapper"&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; </description> 
	<pubDate>Thu, 24 May 2012 05:49:40 +0000</pubDate>

</item> 
<item>
	<title>Gintautas Miliauskas: HP LaserJet 1018 on Ubuntu</title>
	<guid>tag:blogger.com,1999:blog-9890172.post-3464958388237589431</guid>
	<link>http://blog.miliauskas.lt/2012/05/hp-laserjet-1018-on-ubuntu.html</link>
     <description>  &lt;img src="http://planet.debian.org/heads/gintautas.png" width="65" height="91" alt="" align="right" style="float: right;"&gt;  An offtopic post for an issue that I just ran into for the n-th time: after upgrading to Ubuntu Precise, my HP LaserJet 1018 stopped working &lt;i&gt;again&lt;/i&gt;, the issue being that the printer firmware was not being uploaded to the printer properly. For posterity, (one) way to fix this is to uninstall the printer-driver-foo2zjs package, remove the printer itself from the list of printers, and then use HP utilities to set up the printer:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;sudo apt-get remove printer-driver-foo2zjs&lt;br /&gt;
sudo apt-get install hplip-gui&lt;br /&gt;
sudo hp-setup&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
You may need to turn the printer off and on after the procedure to trigger the firmware uploader.&lt;div class="blogger-post-footer"&gt;&lt;img src="https://blogger.googleusercontent.com/tracker/9890172-3464958388237589431?l=blog.miliauskas.lt" alt="" height="1" width="1" /&gt;&lt;/div&gt; </description> 
	<pubDate>Wed, 23 May 2012 18:39:37 +0000</pubDate>
  <author>noreply@blogger.com (Gintautas Miliauskas)</author>  
</item> 
</channel>
</rss>

