Neil Williams: Validating ARMMP device tree blobs
I ve done various bits with ARMMP and LAVA on this blog already, usually waiting until I ve got all the issues ironed out before writing it up. However, this time I m just going to do a dump of where it s at, how it works and what can be done.
I m aware that LAVA can seem mysterious at first, the package description has improved enormously recently, thanks to exposure in Debian: LAVA is a continuous integration system for deploying operating systems onto physical and virtual hardware for running tests. Tests can be simple boot testing, bootloader testing and system level testing, although extra hardware may be required for some system tests. Results are tracked over time and data can be exported for further analysis.
The LAVA documentation has a glossary of terms like result bundle and all the documentation is also available in the lava-server-doc package.
The goal is to validate the dtbs built for the Debian ARMMP kernel. One of the most accessible ways to get the ARMMP kernel onto a board for testing is tftp using the Debian daily DI builds. Actually using the DI initrd can come later, once I ve got a complete preseed config so that the entire install can be automated. (There are some things to sort out in LAVA too before a full install can be deployed and booted but those are at an early stage.) It s enough at first to download the vmlinuz which is common to all ARMMP deployments, supply the relevant dtb, partner those with a minimal initrd and see if the board boots.
The first change comes when this process is compared to how boards are commonly tested in LAVA with a zImage or uImage and all/most of the modules already built in. Packaged kernels won t necessarily raise a network interface or see the filesystem without modules, so the first step is to extend a minimal initramfs to include the armmp modules.
apt install pax u-boot-toolsThe minimal initramfs I selected is one often used within LAVA:
wget http://images.armcloud.us/lava/common/linaro-image-minimal-initramfs-genericarmv7a.cpio.gz.u-bootIt has a u-boot header added, as most devices using this would be using u-boot and this makes it easier to debug boot failures as the initramfs doesn t need to have the header added, it can simply be downloaded to a local directory and passed to the board as a tftp location. To modify it, the u-boot header needs to be removed. Rather than assuming the size, the u-boot tools can (indirectly) show the size:
$ ls -l linaro-image-minimal-initramfs-genericarmv7a.cpio.gz.u-boot -rw-r--r-- 1 neil neil 5179571 Nov 26 2013 linaro-image-minimal-initramfs-genericarmv7a.cpio.gz.u-boot $ mkimage -l linaro-image-minimal-initramfs-genericarmv7a.cpio.gz.u-boot Image Name: linaro-image-minimal-initramfs-g Created: Tue Nov 26 22:30:49 2013 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 5179507 Bytes = 5058.11 kB = 4.94 MB Load Address: 00000000 Entry Point: 00000000Referencing http://www.omappedia.com/wiki/Development_With_Ubuntu, the header size is the file size minus the data size listed by mkimage.
5179571 - 5179507 == 64So, create a second file without the header:
dd if=linaro-image-minimal-initramfs-genericarmv7a.cpio.gz.u-boot of=linaro-image-minimal-initramfs-genericarmv7a.cpio.gz skip=64 bs=1decompress it
gunzip linaro-image-minimal-initramfs-genericarmv7a.cpio.gzNow for the additions
dget http://ftp.uk.debian.org/debian/pool/main/l/linux/linux-image-3.14-1-armmp_3.14.12-1_armhf.deb(Yes, this process will need to be repeated when this package is rebuilt, so I ll want to script this at some point.)
dpkg -x linux-image-3.14-1-armmp_3.14.12-1_armhf.deb kernel-dir cd kernel-dirPulling in the modules we need for most needs, comes thanks to a script written by the Xen folks. The set is basically disk, net, filesystems and LVM.
find lib -type d -o -type f -name modules.\* -o -type f -name \*.ko \( -path \*/kernel/lib/\* -o -path \*/kernel/crypto/\* -o -path \*/kernel/fs/mbcache.ko -o -path \*/kernel/fs/ext\* -o -path \*/kernel/fs/jbd\* -o -path \*/kernel/drivers/net/\* -o -path \*/kernel/drivers/ata/\* -o -path \*/kernel/drivers/scsi/\* -o -path \*/kernel/drivers/md/\* \) pax -x sv4cpio -s '%lib%/lib%' -d -w >../cpio gzip -9f cpiooriginal Xen script (GPL-3+) I found it a bit confusing that
i is used for extract by cpio, but that s how it is. Extract the minimal initramfs to a new directory:
sudo cpio -id < ../linaro-image-minimal-initramfs-genericarmv7a.cpioExtract the new cpio into the same location. (Yes, I could do this the other way around and pipe the output of find into the already extracted location but that's for when I get a script to do this):
sudo cpio --no-absolute-filenames -id < ../ramfs/cpioCPIO Manual Use newc format, the new (SVR4) portable format, which supports file systems having more than 65536 i-nodes. (4294967295 bytes)
(41M)
find . cpio -H newc -o > ../armmp-image.cpio... and add the u-boot header back:
mkimage -A arm -T ramdisk -C none -d armmp-image.cpio.gz debian-armmp-initrd.cpio.gz.u-bootNow what? Now send the combination to LAVA and test it. Results bundle for a local LAVA test job using this technique. (18k) submission JSON - uses
file:// references, so would need modification before being submitted to LAVA elsewhere.
complete log of the test job (72k)
Those familiar with LAVA will spot that I haven't optimised this job, it boots the ARMMP kernel into a minimal initramfs and then expects to find apt and other tools. Actual tests providing useful results would use available tools, add more tools or specify a richer rootfs.
The tests themselves are very quick (the job described above took 3 minutes to run) and don't need to be run particularly often, just once per board type per upload of the ARMMP kernel. LAVA can easily run those jobs in parallel and submission can be automated using authentication tokens and the lava-tool CLI. lava-tool can be installed without lava-server, so can be used in hooks for automated submissions.
Extensions
That's just one DTB and one board. I have a range of boards available locally:
* iMX6Q Wandboard (used for this test)* iMX.53 Quick Start Board (needs updated u-boot)
* Beaglebone Black
* Cubie2
* CubieTruck
* arndale (no dtb?)
* pandaboard Other devices available could involve ARMv7 devices hosted at www.armv7.com and validation.linaro.org - as part of a thank you to the Debian community for providing the OS which is (now) running all of the LAVA infrastructure. That doesn't cover all of the current DTBs (and includes many devices which have no DTBs) so there is plenty of scope for others to get involved. Hopefully, the above will help get people started with a suitable kernel+dtb+initrd and I'd encourage anyone interested to install
lava-server and have a go at running test jobs based on those so that we start to build data about as many of the variants as possible.
(If anyone in DI fancies producing a suitable initrd with modules alongside the DI initrd for armhf builds, or if anyone comes up with a patch for DI to do that, it would help enormously.)
This will at least help Debian answer the question of what the Debian ARMMP package can actually support.
For help on LAVA, do read through the documentation and then come to us at #linaro-lava or the linaro-validation mailing list or file bugs in Debian: reportbug lava-server.
, so you can ask me.
I'm giving one talk on the LAVA software and there will be a BoF on validation and CI in Debian.
You should now have your own JSCommunicator repository on your Github account. On your main page select the tab Repositories . It should be the first on the list. The url will be https://github.com/YOUR-USERNAME/jscommunicator. My Github username is JLouback, so my jscommunicator repo can be found at https://github.com/JLouback/jscommunicator.
Clone
Now you should download all that code to your local machine so you can edit it. On your JSCommunicator page somewhere around the lower right corner you ll see a field entitled HTTPS clone URL:
I don t know if this is correct, but you can just copy the URL on your browser too. I do that.
Now on your terminal, navigate to the directory you d like to place your repository and enter
Click the green button directly to the left of the branch drop down menu shown above. This will create a pull request to add your new code to the official jscommunicator code. Once you click that button, you should see this:
Make sure that the base repo (the first on the line above the green Create pull request button) is opentelecoms-org:i18n-support and not opentelecoms-org:master or another branch name. If it is, just click Edit on the right and you ll be able to select the branch from a dropdown like so:
If first repo is opentelecoms-org:i18n-support and the second is YOUR_USER:i18n-support and you ve verified (scroll down) that there are 2 files changed which are your new .properties file and the added element to the available_languages.xml, go ahead and press create pull request. It ll open a window with a text box you can add an explanation to with one final Create pull request button. Click that and you re done! You ve kindly contributed with a translation for JSCommunicator!
As my previous post suggested I'd been running a service for a few years, using Redis as a key-value store.
Redis is lovely. If your dataset will fit in RAM. Otherwise it dies hard.
Inspired by Memcached, which is a simple key=value store, redis allows for more operations: using sets, using hashes, etc, etc.
As it transpires I mostly set keys to values, so it crossed my mind last night an alternative to rewriting the service to use a non-RAM-constrained service might be to juggle redis out and replace it with something else.
If it were possible to have a redis-compatible API which secretly stored the data in leveldb, sqlite, or even Berkley DB, then that would solve my problem of RAM-constraints, and also be useful.
Looking around there are a few projects in this area
We currently use completely different methods and tools of building test beds and running tests for Debian vs.
Twenty years ago, I was sixteen and in high school. The school at the
time, if memory serves right, was the "Kunsthumaniora voor muziek en
woord van het gemeenschapsonderwijs" in Brussels (which translates
approximately to "art high school for music and word of the communal
educational branch"... that's not entirely right, but it's late and I'm
too tired to look for a dictionary). I was taking drama classes there.
No, I'm not making this up. Except maybe the sixteen bit I might
be off by one or two years.
Hey, I did a lot of things during high school. Stop looking at me like
that.
At one point in time during my stint in drama, a group of educational
interns the sort of people who would be teaching some sort of
stuff somewhere after their graduation cooperated with our school
to come up with a whole day of classes around one subject. I'll never
forget the title: "Can art rescue the democracy?" If that sounds pompous
and silly, that's because it was. However, I was at art school, fer
crying out loud, so I drank it up like it was cool-aid. Which it wasn't.
It was worse.
At the end of the day (literally, that is), the educational interns had
booked some hot shot art person for a debate. I've since completely
forgotten his name. He must've been not that hot shot after all, since
I never even once read anything about him in the next few years. Of
course I can't exclude the most recent decade, not remembering him and
all, but whatever. I also don't remember whether he was a hot shot art
critic, a hot shot artist, or just some random hot shot person who
writes about art, but doesn't actually do it himself. Whatever.
One of the main topics during the whole day was the point about how
artsy people find it extremely difficult to define what art actually
is. I mean, it's all they do all day, but they can't come up with a
decent definition of the damn thing.
During the afternoon break, just before the debate with this
maybe-sortof-semi hot shot art person, I walk around the playground and
think about the whole thing. And come up with some personal definition
of art. My definition.
As the time of the debate comes up, the hot shot art person sits in the
front of the gym behind some table, and the whole school (literally) is
sitting in chairs in the rest of the gym. Some questions are asked. Many
of those are just shot down.
At some point, I raise my finger when it's asked if anyone has further
questions. I walk up to the microphone. I ask him:
"Could we maybe define art as that thing that, though it might be easy
to reproduce, in no case is easy to produce?"
He sits (he never got up, really). He thinks. I stand, and wait. After a
few seconds of this, he answers. He seems impressed. His reply is
something along the lines of "that's not a perfect definition, but it's
pretty good. There's a lot to be said for that, and I urge you to write
about art when you grow older".
I never followed his advice. I got a bit more interested in art, but
quickly found out that art consists of one group of people who spend
their time doing things other people find pretty, and another group of
people who spend their time doing things that makes other people
"think", whatever that is. They may not have a brain, they may be silly
as hell, but they still want to "think". It's not for me, it's never
been. Art, that is -- not the think bit. That is something I don't mind
doing.
Don't get me wrong. I still like art. I like going to museums from time
to time; I like the performing arts. I mean, I play the flute. Not the
piano, not the guitar, not the flipping drums, the flute. Which I
like, for what it's worth.
But if the intent is to make people think, there are better ways to do
that. If I want to make people think, I'm not going to make some obscure
object that may or may not have a message, in the hope that a
millionaire with no better use for his money would buy it just to make
his friends jealous, after which he's going to put it in a safe for a
few years so he can sell it at a higher value. Without thinking about
it. If I want to make people think, I'm not going to write a play or
piece of music that's so obscure it will make people all confused, so
they can fill their evening afterwards drinking cocktails at a
reception, claiming it was all nice and thought-provoking, quoting
little parts of it to people they've never met, just so they can make
their social status look more than it actually is.
Good thing I never finished drama school, I suppose.
No, if I want to make people think, I'll try doing so where it actually
matters. Like, say, in politics. Not that I have any political
ambitions, mind you. But I think the answer to that question of twenty
years ago should be a firm "no." Art cannot rescue democracy. Not if
they don't have a lot of interesting things to say to anyone but
themselves. Maybe the reverse is true, though; maybe democracy can
rescue art. Not that I care much.
Why is all this relevant today?
A few days ago, as I was driving somewhere, there was some show on the
radio relating to the current exploits of the Belgian national soccer
team. There are a lot of them these days. Radio shows about that
subject, that is not Belgian national soccer teams. I suppose
having a lot of competition makes it hard to find a new angle to come
up with, and still keep things interesting. I also suppose having a lot
of stuff going on about that squad gets people annoyed if they're not
the least bit interested. I suppose that could be a new angle.
Presumably that radio host supposed the same, because he'd been looking
for, and asking questions of, people who didn't like soccer and who
weren't going to watch the match. Most of them said they weren't
interested and added one or two words about what they were going to be
doing instead.
One of them said that "they" would be better off spending money on "art
and culture", rather than on soccer. No, I don't know who "they" were,
he didn't say. Never mind that, let me go on now.
I don't know who this dude was; they the radio people didn't
say. He sounded like someone between 50 and 65, and had a somewhat
tenor-y voice. I suspect he had two kids, and a mercedes. Yes, I just
made that up. The part about the kids. And the car. No, it doesn't
matter. But it's still likely. He sounded like that sort of guy.
Whoever this dude was, though, I'd like to just say one thing: Dude,
you're an idiot. There's a time and a place for everything.
The time and place for art is "everywhen", and "in any random art
gallery, opera house, or theatre, out of the public eye". Not because
the rest of us doesn't want to deal with art, but because artsy people
like it that way. They like to feel all pompous and important, and
therefore use difficult words. Words that nobody except those along with
them in their ivory tower like to use. Words that don't actually mean
anything. But in doing so, they make this Art thing uninteresting to
look at for people who don't care about their pompous and silly words.
And strengthen the walls of their ivory tower. Only to complain later on
that nobody ever shows up at art galleries, and that the really good
ones keep going out of business.
The time and place for the world championship soccer is "once every four
years", and "everywhere". Not because soccer people want to annoy
you although, yes, I'll grant you that the KBVB has gone a little overboard with the
merchandising this time around but rather because it's so simple.
You kick the ball, and you hit the goal. There, done. Everyone can do
it. Yes, true, there are some pompous people talking about it on TV,
too. And yes, true, some people are better at it than others. But nobody
claims you can't do soccer unless you're part of the "in" club. There
are plenty of people who claim you can't do art unless you are. And if
everyone can do it, then everyone can understand it. If you can
understand it, it's easier to enjoy it. This is why so few people enjoy
cricket or baseball outside of the few countries where it's popular.
That's also why so few people enjoy art: because you make it so
difficult. And people just don't care. They want to be entertained.
I'm not saying that soccer is the best sport in the world, or that
watching it is the most entertaining thing one can do. It isn't. In
fact, beyond the national team, I'm not really following it all that
well myself. If through some weird spacial anomaly the world
championship would suddenly cease to exist and I would be the only
person alive remembering it, I don't think I'd spend a lot of time
trying to get it back.
But don't compare it to art. Because, well, in the grand scheme of
things, neither of those two really matters all that much.
That is all.
The heading might be ambiguous, but I couldn't figure out better
heading so let me start by explaining what I'm trying to solve here.
I must echo
Please stop recommending that checking government-issued ID is a good way to verify someone's identity before signing their GPG key.
Have you been a US bartender before? Or held any other position where you've had to verify an ID? It's not an easy thing to do. People in those positions have books of valid IDs from different states. They have lights that show the security marks. They still get it wrong regularly. A very amateur fake ID, or borrowed real ID, will fool just about everyone in any informal context.
What's even worse is that people have a habit of happily looking at passports from other countries than their own, and nodding knowingly. It's fun, but be honest, you have no idea what you're doing.
How about just signing keys with people you would actually say you know well enough to trust? It's not the Web of Amateur ID Checking.
ID checking is at best ineffective against the threats it's supposed to address, and is probably actually damaging to the Web of Trust because of the false sense of security.
No idea what I'm talking about? Learn to encrypt your email by reading the FSF's new
The new model provides an xTuple application server that can handle requests from web users and potentially other third-party apps too.
Who is it for?
Some people may feel that the web UI is intended to appeal to mobile users. While it is useful for mobile and tablet devices, this is not strictly the aim,
If you follow my blog closely, you noticed that I skipped all my usual monthly summaries in 2014. It s not that I stopped doing free software work, instead I was just too busy to be able to report about what I did. As an excuse, let me tell you that we just moved into a new house which was in construction since may last year.
The lack of visible activity on my blog resulted in a steady decrease of the amount of
I also helped Sylvestre Ledru to finalize and close the 

So I was needing a resulting JSON array with possible solutions for a given address or city name and then
If you're looking to get started at packaging free software for