Developers’ Weblog

Sponsored by
HostEurope Logo

Developers’ Weblog

All 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

[rant] FreeBSD® sucks!

29.03.2009 by tg@
Tags: bug mksh snippet

How about this:

	tg@herc:~ $ /bin/sh -c 'echo "0=($0) 1=($1) 2=($2) 3=($3)"' -- a "b c"
	0=(--) 1=(a) 2=(b c) 3=()
	tg@herc:~ $ nbsh -c 'echo "0=($0) 1=($1) 2=($2) 3=($3)"' -- a "b c"
	0=(--) 1=(a) 2=(b c) 3=()

Heck, not just NetBSD® ash, and almost any shell Debian can dig out (bash pdksh ksh93 zsh dash posh) behaves the same as mksh.

MidnightBSD (DragonFly and FreeBSD too):

	tg@mnbsd:~ $ /bin/sh -c 'echo "0=($0) 1=($1) 2=($2) 3=($3)"' -- a "b c"
	0=(a) 1=(b c) 2=() 3=()

And the best thing of all: I am to "fix" this in mksh, as the old FreeBSD® ash is documented to have that weird behaviour. (Well, there's always -DMKSH_BINSHREDUCED...)

This is not a fault of MidnightBSD (except they could fix mports to behave more POSIXish; after all, I had to do that to MirBSD and MirPorts often enough), don't get me wrong. It just surprised me, and since I'm glad they switched to mksh as /bin/sh I basically had to debug it.

I don't remember any more what NetBSD® 1.5 did that its /bin/sh could not be replaced by mksh, but they fixed it in 1.6 – K?buntu (the LTS version) fscks up similarily...

Mein erster FTF

29.03.2009 by tg@
Tags: geocache

Anläßlich meines ersten FTF (ein OC-Only natürlich, weil, sonst kriegt man die Benachrichtigung ja nie pünktlich von der drecks Kommerzseite) habe ich src/share/misc/acronyms für wtf(1) mal um entsprechenden Jargon erweitert.

Hier dann die aktuellen „Statistiken“:
OpenCaching.de The Frog Site Rare Jewels Broken Webpages²
Zwei mehr, auch wenn ich für einen was länger brauchte…

Fixes, current and upcoming

28.03.2009 by tg@
Tags: security

Benny has upgraded Mirzilla Firetapir (ports/www/firesomething).

Some time ago I already upgraded libpng (base and port).

Pending fixes: libc (fts), and probably some subset of the recent OpenSSL things.

mksh R37 is scheduled to be released RSN.

mksh improvements

22.03.2009 by tg@
Tags: mksh

Today's commits should fix Debian #518359 (not tried yet, as looking at a 14" Belinea 10 40 40 CRT makes my eyes and head hurt), as well as improve a lot of more things.

The mksh(1) echo builtin now behaves more POSIXly in "set -o posix" mode (or when called as "sh", if that feature was set at compile time). The exact feature set is negotiable, if certain parties, say pkgsrc®, are interested.

Thanks to the OpenBSD developers for improving their ksh as well.

The ;& and ;;& features are delayed for now though, sorry.

We're in a feature freeze; people please test mksh-current on your system to make R37 rock!

Ja, und sie war schön!

Jetzt erstmal Kaffee, bißchen Geocachen, dann weiter hacken, und mit Benny zu kommunizieren versuchen ;)

Kurz nach Mitternacht (oder genauer, 23:31:56 UTC). Ich stehe am Fenster und atme die frische Frühlingsluft. Gleich in zweierlei Bedeutungen, denn es friert nachts; dies ändert jedoch nichts daran, daß es die letzten und nächsten Tage wunderbares Wetter hat.

Diese Nacht hatte ich keine Kerze an wie sonst. Ich las und unterhielt mich ein wenig, primär via IRC. Auch nicht habe ich produktiv gehackt oder dergleichen (für alle, die noch nicht lange hier mitlesen: hacken bedeutet nicht cracken). Ich frage mich, ob dies zum nächsten Fest anders sein wird. Das Leben gut zu verwalten ist definitiv nicht einfach, insbesondere mit einem Achtstundenjob, dem inneren Schweinehund, und einfach zu vielen guten Ideën (zum Beispiel mksh(1) betreffend).

Nichtsdestoweniger gilt es, aus den paar guten, paar schlechten, und vielen mittelmäßigen Impressionen das Beste zu machen. Einen Kompromiß zu nehmen, damit man zum Beispiel mit dem Zwischenprodukt bereits arbeiten kann (gutes Fallbeispiel, wann es in die Hose geht, wenn man das nicht macht, ist "FreeWRT 1.1", more like 3.0).

Dummerweise habe ich die meisten guten Ideën afk oder doch zumindest im Zug oder dergleichen; außerdem ist es oft diffizil, beim Tippen nicht alles wieder zu vergessen, bedingt durch die langsamere Verarbeitungsgeschwindigkeit sowohl von Worten als auch der physischen Mittel, sowie dadurch, daß das in-Worte-gießen ebenfalls den Geist beansprucht. So manches Mal wünsche ich mir, nur für mich zu hacken und es nicht zu publizieren, neue Versionen zu produzieren "müssen" (selbstauferlegter Druck), so nehmt es mir nicht übel. Keine Angst, weiter geht's immer.

Veränderungen sind auch nichts Feines. Im Großen (in was für einer Welt wachsen unsere Kinder eigentlich auf?) wie im Kleinen (die Java™-Fuzzis machen meinen Cachewolf kaputt). *seufz* Vielleicht muß man echt alles selber machen. Aber ein portables GUI-Toolkit für X11 und WinCE, das nicht Qt heißt oder sonstwie was komisches Objektorientiertes (außer TP) braucht? Naja, packen wir an, was wir können, und machen weiter, in der Hoffnung, es werde nicht zu schlimm, und daß auch andere anpacken. (Ist das eigentlich typisch deutsch? Jedenfalls bin ich Eifler genug, um da keinen großen Aufschrei mehr zu machen. Oder einfach von der harten Realität abgestumpft.)

Rückblicke sind kraß. Da merkt man echt, wie alt man ist/wird.

One of the things you should pay attention to when writing a scientific paper is the layout of the tables. Never, I repeat never, use vertical lines or even a “grid” with lines between all cells. Instead, use only horizontal lines—one at the top, one between the column headings, and one at the bottom. The documentation for the booktab package [pdf], which is appropriately written by a Swiss, explains this nicely. Two more things: the table should be in a smaller font than the text (about 10%) and span the whole width of the text. As scientific papers are always typeset in two-column mode, you may have tables one column or two columns wide. The latter is done like this in LaTeX:

\begin{table*}
\centering\small%
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}lll}
\toprule
First column & Temperature (°C) & $D$ (nm)\\
\midrule
Foo & 210 & 10\\
Bar & 300 & 15\\
\bottomrule
\end{tabular*}
\caption{\label{tbl:mylabel} This is the table caption, where you
should explain what identifiers like $D$ above mean.}
\end{table*}

Units go into the header, or into a separate header line (which is IIRC recommended by DIN). The amount of l at the end of the third line is equivalent to the number of columns. That means you should exclusively use left-aligned columns. Also, don’t be afraid to make tables wider than high, or with only one line of data. I have seen this in Wiley-VCH journals, and it comes out alright.

To make the table only one column wide, replace table* by table and \textwidth by \columnwidth in the example above. Do however leave the asterisk in tabular*.

Es ging also zum GUUG Frühjahrsfachgespräch nach Karlsruhe. Nun, die Stadt kannte ich ja schon vom LinuxTag (meines Erachtens auch der beste Austragungsort für jene), aber diesmal eine neue Ecke. Hotel, Einzelzimmer, bezahlt vom Arbeitgeber; Event auch. Tutorium okay, lehrreich (auch was man nicht will), die Vorträge wechselnd gut aber in der Regel es auch wert. Aber wie auf jedem Event lernt man viele neue Leute kennen, oder auch Gesichter zu den (Nick)namen. Das fand ich gut. Das „social event“ entsprach dem auch, wir waren im lokalen Brauhaus, und das Buffet… nunja, ich bin kein Freund von Buffets und „kompliziertem“ Essen, aber bin gut sattgeworden, nur die „Mousse“ war eher… interessant im Biolekschen Sinne.

Natürlich war ich auch zwischendurch Couscous Merguez essen, frischen Minztee trinken, und beim Geocachen meinen Laptop schrotten. Hmpf. Immerhin laufen die Flüssigkristalle nicht aus. Drückt mir die Daumen, daß der Händler meinen X40 auf Kulanz repariert, da innerhalb der Garantiezeit (1 Jahr; ist knapp unter 6 Monate her, daß ich das Teil brauchte). Immerhin 3 gefunden, einige nicht gefunden (dafür aber ne hiesige Cacherin) oder nicht angegangen (zB da nicht so lebensmüde, auf ein >4m hohes Verkehrsschild zu klettern, oder da die Koords zu weit weg vom Startpunkt waren).

Dummerweise werde ich also jetzt eher an nocd (win2k) und nwt (80486er Kiste) hängen und nicht weiter entwickeln.

Ich denke, ich sollte mal selber meine Founds durchnumerieren und in eine Liste packen, da die meisten eben nicht in allen Datenbanken gelistet sind.

Hier dann die aktuellen „Statistiken“:
OpenCaching.de The Frog Site Rare Jewels Broken Webpages²
Drei mehr dabei, aber leider kaum auf OC

Unterstützt JamesDoe nicht, boykottiert seine Caches, schreibt die Logeinträge bei ihm ausschließlich auf OC.de hin, sodaß er die Listings dort wieder pflegen möge, oder schreibt ihm, was ihr von seiner Aktion haltet, die Listings auf OC.de zu orphanen!

getting closer, slowly

02.03.2009 by tg@
Tags: bug geocache

We’re slowly getting closer to spring! It was about 12°C even in the late afternoon of the weekend, and I took out my bike on Sunday (helped a friend with cleaning up after moving on Saturday). Sadly, three DNFs (one search aborted due to the law enforcement approaching, one not even attempted due to too many muggles – although I already had logged another cache with almost the same name in exactly the same location –, and the third one not done because a certain institution’s garden has different opening times during winter period and I didn’t quite want to risk using the fire fighters’ entrance, like some other logger. Not even for a coin.

Anyway, the tpm driver bugs me a little (it’s possible to hang it from user space), and I can’t make -fwrapv default because -ftrapv wouldn’t disable it then. Unless I look more into gcc’s source again. But I hereby officially announce that code on MirBSD® can assume wrapping semantics and 8/16/32/64 bit wide integral types, big or little endian. No 9 bit bytes, 36 bit PDP endian integers, saturation arithmetics. Ever. It’s a promise.

The IcedTea cross-compile patch and the OpenJDK BSD patchkit are not build system compatible. I probably need to go the route of using compat_openbsd(8) for it. Kurt Miller said if I sigh Sun’s agreement chances are good MirBSD support making it upstream (into the patchkit, for now, but maybe eventually into OpenJDK 7). MirUsers will just have to use a binary package I provide for bootstrap.

More… some other time. Still wish humans would hibernate too…

Uhm, Benny… times in the web source are supposed to be in UTC…

I just created i386-mirbsd-toolchain and sparc-mirbsd-toolchain Debian packages (for my own use, mostly). Because we can.

Maybe I can cross-compile IcedTea with it, to be used to natively compile OpenJDK?

Dr. Pfeffer (happy birthday btw) thinks it’s cool. Comrad is also interested.

Even though I had added a “mmake bulk-build” target to MirPorts’ top-level Makefile some time ago, one thing has always been broken: if one port in a bulk build fails to build, we do not want to abort the whole thing. Using mmake -k however leads to 0-byte packages and corresponding bulk cookies being created erroneously. This seems to be a consequence of the “indirect” inter-target dependencies used by MirPorts.

The fix turned out easier than I thought: there is a REPORT_PROBLEM variable that can be set to a command run when mmake fails. The default is exit 1. For bulk builds (i.e. when BULK is set), we now default to a new failedport script, which records the directory and flavour in ${PORTSDIR}/Failed and exits with status 0. Thus, the build continues at the next port, as is should.

The next thing I want to do is a HTML report of a finished bulk build with links to all build reports. I saw this in Rodrigo Osorio's “Porting applications in FreeBSD” talk on FOSDEM 2009, and thought it was quite nice.

one (lonely) day at work

23.02.2009 by tg@
Tags: bug grml

Today is Rosenmontag, so we were only four people in total today. Anyway, we tried to use Mondo to back up and, subsequently, clone a Gemeinschaft system with CentOS/amd64.

We learned a few lessions:

  • a grml CD is handy, even if it’s just a grml-mir
  • CentOS sucks, RPM sucks, YUM sucks
  • Very few software is available for CentOS
  • Upstream software sucks (RPM and DEB versions differ)
  • Mondo sucks, it can’t deliver what it promises, has a shitload of bugs and is very hard to use
  • You’ll have to install a bootloader yourself after a rescue
  • The GNU GRUB-legacy from CentOS cannot access (even read-only!) a filesystem created with mke2fs -j /dev/sda1 on grml-mir. Neither can ports/sysutils/pxegrub from MirBSD.
  • Debian Lenny/amd64 comes with a working GRUB1, but not with a pxegrub image… anyway, copy ldbsd.com to pxebsd.0 on the netboot server we already have, enter it into pxelinux.cfg/default and use boot> machine exec grub tftp:/stage2 to chain to it. Then copy all the stuff from /usr/lib/grub/… and the binary /usr/sbin/grub to it, remove /boot/grub/stage* first, copy the Debian stuff over, and install (./grub). Voilá.
  • GNU bash sucks. Especially with a foreign keyboard layout where the ‘-’ key produces a ‘ß’, which inserts a multibyte UTF-8 character. Of course, “yum install mksh” worked, thanks to rsc.
  • Any kind of vi(1) sucks. Just some, like vim, suck more.

In the end, we got what we wanted, with a combination of the MirGRML ISO, stock Debian packages, a call to rsync after mondorestore, and my cool bootloader. By the way, this means that both using boot(8/i386) as direct boot image and as “pxebsd.0” image chained(!) from PXELINUX are tested now. (Do not chain to “ldbsd.com” as PXELINUX will unload the PXE/UNDI stack before calling it, possibly. It insists that PXE boot images¹ are called *.0…)

① which, according to hpa’s FOSDEM talk, must be smaller than 32 KiB… the hell… but if such a situation should ever arise, PXELINUX is, in fact, smaller. I haven’t yet such a pedantic NIC yet, though.

Too bad that cost me almost the entire afternoon, since I had planned on beginning to cross-compile Java™ 6 to MirBSD™ using Robert’s IcedTea patches, and hack some more on FreeWRT. But at least, we have achieved something (the second server is running just fine now) and learned a lot in the progress.

In unrelated news, mikap has integrated bsd4grml into the new grml-live version. Although a few commits to the bootloader (cd9660), getextent_cd9660(1), kernel, installer, tpmrng(8) are still pending; he will be provided with a new version of bsd4grml then.

All 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

MirOS Logo