2009-11-05 – Package workflow
As 3.0 format packages are now allowed into the archive, I am thinking about what I would like the workflow to look like and hoping one of them fits me.
For new upstream releases, I am imaginging something like:
-
New upstream version is released.
-
git fetch
+ merge into upstream branch. -
Import tarballs, preferably in their original format (bz2/gzip), using
pristine-tar
. -
Merge upstream to debian branch. Do necessary fixups and adjustments. At this point, the upstream..debian branch delta is what I want to apply to the upstream release. The reason I need to apply this delta is so I get all generated files into the package that’s built and uploaded.
-
The source package has two functions at this point: Be a starting point for further hacking; and be the source that buildds use to build the binary Debian packages.
For the former, I need the git repository itself. It is increasingly my preferred form of modification and so I consider it part of the source.
For the latter, it might be easiest just to ship the
orig.tar.{gz,bz2}
and the upstream..debian delta. This does require the upstream..debian delta not to change any generated files, which I think is a fair requirement.
I’m not actually sure which source format can give me this. I think
maybe the 3.0 (git)
format can, but I haven’t played around with it
enough to see. I also don’t know if any tools actually support this
workflow.
2009-11-02 – Distributing entropy
Back at the Debian barbeque party at the end of August, I got myself
an EntropyKey from the kind folks at Simtec. It has
been working so well that I haven’t really had a big need to blog
about it. Plug it in and watch
/proc/sys/kernel/random/entropy_avail
never empty.
However, Collabora, where I am a sysadmin also got one. We are using a few virtual machines rather than physical machines as we want the security domains, but don’t have any extreme performance needs. Like most VMs they have been starved from entropy. One problem presents itself: how do we get the entropy from the host system where the key is plugged in to the virtual machines?
Kindly enough the ekeyd
package also includes ekeyd-egd-linux
which speaks EGD, the TCP protocol the Entropy Gathering Daemon
defined a long time ago. ekeyd
itself can also output in the same
protocol, so this should be easy enough, or so you would think.
Our VMs are all bridged together on the same network that is also exposed to the internet and the EGD protocol doesn’t support any kind of encryption, so in order to be safe rather than sorry, I decided to encrypt the entropy. Some people think I’m mad for encrypting what is essentially random bits, but that’s me for you.
So, I ended up setting up stunnel
, telling ekeyd
on the host to
listen to localhost
on a given port, and stunnel
to forward
connections to that port. On each VM, I set up stunnel
to forward
connections from a given port on localhost to the port physical
machine where stunnel is listening. ekeyd-linux-egd
is then told to
connect to the port on localhost where stunnel is listening. After a
bit of certificate fiddling and such, I can do:
# pv -rb < /dev/random > /dev/null
17.5kB [4.39kB/s]
which is way, way better than what you will get without a hardware RNG. The hardware itself seems to be delivering about 32kbit/s of entropy.
My only gripes at this point is that the EGD implementation could use a little bit more work. It seems to leak memory in the EGD server implementation. Also, it would be very useful if the client would reconnect if it was disconnected for any reason. Even with those missing bits, I’m happy about the key so far.
2009-07-02 – Airport WLAN woes
Dear whoever runs the Telefonica APs in both Rio de Janeiro and Sao Paulo airports: Your DNS servers are returning SERVFAIL and has been doing so for quite a while. This is not helpful, perhaps you should set up some monitoring of them?
2009-06-19 – Rendering GPX files using libchamplain and librest
A little while ago, I read robster’s post about librest, and it looked quite neat. I have had a plan for visualising GPX files for quite a while, hopefully with something that allows you to look at data for various bits of a track, like speed and the time you where there, but for various reasons, I haven’t had the time before.
Last night, I took a little time to glue librest and libchamplain together. libchamplain is a small gem of a library, quite nice to work with and with the 0.3.3 release, it got support for rendering polygons. The result is in this screenshot:
This is about 160 lines of C, all included.
2008-12-17 – varnishlog's poor man's filtering language
Currently, varnishlog
does not support very advanced filtering. If
you run it with -o
, you can also do a regular expression match on tag
- expression. An example would be
varnishlog -o TxStatus 404
to only show log records where the transmitted status is 404 (not found).
While in Brazil, I needed something a bit more expressive. I needed
something that would tell me if I had vcl_recv
call pass
and the URL
ended in .jpg
.
varnishlog -o -c | perl -ne 'BEGIN { $/ = "";} print if
(/RxURL.*jpg$/m and /VCL_call.*recv pass/);'
fixed this for me.
2008-12-15 – Ruby/Gems packaging (it's java all over again)
It is sad to see how people complain about
how packaging Ruby gems is painful. It seems like it is the Java
packaging game all over again where any application ships its
dependencies in a lib/
directory (or in the case of Rails,
vendor/
). Mac OS X applications seem to do some of the same thing
by shipping lots of libraries in their application bundle, which is
really just a directory with some magic files in it.
This is of course just like static linking, which we made away with for most software many years ago, mostly due to the pain associated with any kind of security updates.
Update: What I find sad is that people keep making the same mistakes we made and corrected years ago, not that people are complaining about those mistakes.
2008-11-28 – !Internet
This is my current internet connectivity. Yay, or something.
2008-11-24 – How to handle reference material in a VCS?
I tend to have a bunch of reference material stored in my home directory. Everything from RFCs, which is trivial to get at again using a quick rsync command (but immensely useful when I want to look up something and am not online) to requirements specifications for systems I made years and years ago.
If I didn’t use a VCS, I would just store those in a directory off my
home directory, to be perused whenever I felt the need. Now, with a VCS
controlling my ~
, it feels like I should be able to get rid of those,
and just look them up again if I ever need them. However, this poses a
few problems, such as “how do you keep track of not only what is in a
VCS, but also what has ever been there”. Tools like grep
doesn’t work
so well across time, even though git has a grep command too, it still
doesn’t cut it for non-ASCII data formats.
Does anybody have a good solution to this problem? I can’t think I’m the only one who have the need for good tools here.
2008-11-16 – network configuration tools, for complex networks
Part of my job nowadays is regular Linux consulting for various clients. As part of this, I end up having to reconfigure my network quite a lot, and often by hand. Two examples:
I am setting up some services on a closed server network. I am
connected to this using regular, wired Ethernet. This network does not
have access to the internet, so I also have access to a WLAN which does.
However, I need access to both internal and external DNS zones, so I
need to use two different set of servers, depending on the domain name.
I also currently set up some static routes to get to the internal DNS
and have to chattr +i /etc/resolv.conf
in order for the DHCP client
not to overwrite my manually configured DNS.
Another example: I am troubleshooting Varnish, deep in a company’s
intranet. To get access to this, I first have to use a VPN client, then
ssh with an RSA token as well as password. From there on, I use
tsocks
to connect to an intermediate host before using tsocks
again
to get to the actual Varnish boxes.
Currently, I set up all of this infrastructure by hand, which doesn’t really work so well when I switch between clients and go home and use the same laptop there. Does any network configuration tools help me with complex setups such as the ones above? I realise they are not exactly run-of-the-mill setups used by most users, but for me they are two fairly common examples of setups I need.
2008-09-27 – Things to do on a Friday night
(when your wife/SO is not around)
- Finally get around to play with the PowerPC you have had standing besides your desk for about a month.
- Discover that it still doesn’t boot, since it can’t find its hard drive. Also discover that it doesn’t want to talk to your USB keyboard.
- After a while, think of removing and replugging the SAS connectors, which fixes the boot problem. The machine now runs YDL.
- Decide you want to install Debian instead of YDL, but also wonder how to do that safely since you still can’t talk to Open Firmware.
- Search for the RJ45-to-serial adapter you got with the box. Discover you probably wired it wrongly the first time around. Break it when you try to rewire it.
- Find that spare DB9 connector you had lying about, find soldering iron and fix up the connector.
- Become very, very confused, since you get perfect output, but input still doesn’t work. Discover you managed to solder all the connections mirrored. It worked with effectively just one wire, not even shared ground. Resolder.
- Download Debian ISO, burn it on a DVD. Get annoyed at the machine for failing to boot from the DVD.
- Set up netboot, boot from network.
- Discover d-i doesn’t install a kernel, nor a bootloader, do that by hand.
- Oops, bootloader didn’t work. Iterate a couple of times of running
mkofboot
until it suddenly feels like booting from the hard drive.
Hurrah! And it only took like six or seven hours.
Notes for later: This is an YDL Powerstation, the magic mkofboot
invocation is mkofboot -b /dev/sda1 --filesystem raw
; the raw
bit
is needed for IBM hardware. The firmware also cares about whether the
partition is marked as bootable or not, so make sure to mark it as
such.