An overview of the Debian and RPM source package formats
This is a brief and jaundiced overview of the format of Debian and RPMsource packages, what the Debian and RPM package systems theoreticallyuse to generate the compiled binary packages that people actuallyinstall. As usual, this applies to all distributions that use the Debian .deb package format or the Red Hat .rpm package format, althoughspecific details vary. Also, I'm going to simplify to the common case.
A source RPM contains a specfile, a source tarball, and some number ofpatches. The specfile describes
Why I like modules to be in the Python standard library
Even when there may be perfectly good third party modules for something,I really want there to be a module for itin Python's standard library. Part of the reason is obviously how Ifind third party modules to be awkward , butanother part of it is what I call the selection problem.
The selection problem is the problem of picking a thirdparty module (sometimes even finding it, although pypi helps with that) and figuring out if it'sany good. Simply figuring out the quality of a
A confession: I find third party modules awkward in Python
One of my weaknesses is that with rare exceptions, I pretty much neveruse third party Python modules even when they'd make my life easier.I will sometimes use third party modules that are single files, butmulti-file modules are generally too annoying (especially if theyrequire compiling something).
The problem with third party modules is that installing and managingthem is usually too much work, especially if they are large. Youbasically have four choices:
- hope that all of the operating systems that you want to
Why you want a recursive-forwarding caching nameserver
One of the things that I mentioned I wanted in a caching nameserver was the ability to forward queriesto other nameservers as both recursive and non-recursive queries. Acommentator asked, effectively, why you needed to forward recursivequeries. As it turns out I did not have a handy answer for this atthe time, because I couldn't remember off the top of my head where I'dneeded it. Well, I think I've come up with the answer.
Why you need this is zone
One aspect of getting used to modern version control
I've spent a very long time using RCS as a sysadmin. In that time,certain things about how it works have just gotten ingrained in myhindbrain, to the level where I don't think about them consciously;they just are. Now that we're slowly moving away from RCS and to modernversion control systems, I sometimes wind up running into bits ofthis that are no longer true, where I have to let how stuff works inmodern version control gradually soak into my mind until old
Keyword expansion: why RCS rewrites files when you commit them
Given my previous entry , you mightwonder why RCS does such a crazy thing as deleting and recreate fileswhen you just make a commit (in RCS terms, a checkin) when modernversion control systems don't do this. The answer turns out to be prettysimple: keyword expansion. Specifically, that RCS supports keywordexpansion and modern version control systems don't.
RCS has a feature where you can embed magic keywords in your sourcecode that are automatically expanded to various pieces of informationwhen RCS checks out
A simple thing that every package management system should have
Here's something that I was reminded about recently, most directly dueto doing some work on a Solaris machine (although the general issue has come up before ).
Every single package management should provide a way to save the nameand version information for all packages and patches (if you use them)that are installed on a system, and also a way of easily setting upanother system with exactly that set of packages and patches. Thisshould be done through straightforward command line tools; it shouldcertainly not require
Go's network package and IPv6 (and my ideal version thereof)
As the result of making a couple of chainsaw passes at really fixing my issues from yesterday , I've now got abetter idea of what Go's network package is doing with IPv6 and what Ithink I want it to do.
Go's net package has a very Plan 9(and Research Unix) approach to networking APIs, where it makes noparticular attemtp to expose some version of the standard socketsAPI but instead goes its own, higher level way. As part of this ithas three
Go, IPv6, and single binding machines
The current libraries for the Go language and their built in tests strongly believe that you can talk to IPv4addresses through IPv6 sockets, which is not necessarily the case . This is a known issue ( see also ), and is morethan somewhat inconvenient on a machine with dual binding turnedoff , such as my workstation, as Go willnot install from source unless all its tests pass.
(Since Debian has apparently changed their minds about dual binding , this maynot affect very many people. I maintain that
My new view of DomainKeys
Now that I actually understand how DKIM works ,I have a much better view of it than I used to and as a result it's much more attractive and likely to be implementedhere some day.
The way I choose to look at it is that for us, it is essentially alightweight anti-tampering feature. We can sign outgoing messages totransparently add some basic integrity protection for our users' mail,and verify inbound DKIM signatures for a basic integrity check. Thismakes using it a lot like our