John Sullivan: I think this says something about my taste in music
johnsu01@myles:~$ mpc playlist grep -i outro wc -l14
johnsu01@myles:~$ mpc playlist grep -i outro wc -l14
Half a lifetime ago, somewhere at the end of the last millennia I became a free software enthusiast. On and off, I've been working on Free Software for the past fifteen years - most of them unknown, discontinued by now; a huge part of this work was a hobby: small, infrequent contributions. But it was, and still is, something I enjoy doing, something that satisfies my hunger for knowledge, my desire to give back to the community I received so much from. Over the years, what originally started as a desire became a need. What started as a preference, became a requirement. And all through these years, I had a dream, a clear goal I wanted to achieve, which gave purpose to a lot of things I wrote and worked on.This past Monday, the goal was reached. I left the BalaBit support department this week, and went for greener pastures, to do what I wanted to do since I became a free software fanatic: work on free software for a living. As of July first, I'm officially a syslog-ng OSE developer, working full time on 100% Free Software. And not just any software, but something used by millions all over the world. For the first time in my life, I am able to do what I want, for a living.So how did I end up here?It all started on a boring night in December, 2010, when I wrote the first version of the mongodb destination, which also marks my entrance into the syslog-ng contributor scene (apart from a set of bugfixes I was doing in my role as a software engineer at support). From this grew an agreement between the support and development departments (and myself, of course), that I can spend 20% of my time working on syslog-ng OSE. For a while, I spent my Fridays doing just that, eventually obtaining another hat: maintaining the 3.3 stable branch, and later the 3.4 branch too. Meanwhile, the 20% percent was reconsidered, and became 50%, with the premise that it will become 100% in the not too distant future. That future is now.That future is now, and while there will be a slower ramp-up time, there are great things in store, of which, I'll talk about in a later post. Needless to say, though, even if I achieved a dream, there are other desires to pursue, and I'm not going to spend fifteen years achieving them: it's time to fire up the rocket boots, and see where they take me.Two years. Watch this place.
In light of the recent leaks about the NSA's illegal spying, I've decided to go back to using M-x spook output in my email signatures.
cypherpunk anthrax John Kerry rail gun security plutonium Guantanamo
wire transfer JPL number key military MD5 SRI FIPS140 Uzbekistan
So I'd previously talked about migrating machines. From having one virtual machine running "mail" + "web" + "stuff" I've now got three hosts:
mkdir -p ~/.dput.d/profiles/
cat > ~/.dput.d/profiles/ftp-master.json <<EOT
"fqdn": "ssh.upload.debian.org",
"incoming": "/srv/upload.debian.org/UploadQueue/",
"method": "sftp"
EOT
Note that uploading via SFTP will lead to debianqueued uploading the
files via FTP for you. But maybe that is more reliable than doing it yourself.
We ll see :-).
As part of writing a new mail client I'm wondering about how to change my email-life, and how other people process/handle their incoming email.
I sort my incoming email into folders at delivery-time using procmail. Mail is generally filtered into mailboxes on the basis of the company that sent it, the person that sent it, or the machine which generated it.
Because I manage a lot of machines personally I've split things up so that I have a folder per host. So on a morning I might have unread mail in the following folders:
machines.steve.org.uk/ machines.da-db1/ machines.da-db2/ machines.da-web1/ machines.da-web2/ machines.da-web3/ machines.da-web4/The per-machine mailboxes usually contain a single mail every day from LogWatch, along with output from any cron-jobs. For example today I received the mail:
From: Cron Daemon To: steve@steve.org.uk Subject: Cron steve@steve.org.uk /home/steve/bin/download-check URL http://nodejs.org/ - no longer matches v0.10.9Generally speaking I don't need to read the per-machine messages. I'll keep the most recent 100 for reference, but only need to look if something seems "off" on a machine. But if I don't look I'd not see the node upgrade notice, so find that I do read them after all. This suggest to me that email isn't the right way to handle this kind of thing. Instead I should use a notification system - at work we have a central service called MauveAlert (yes, Red Dwarf reference). Mauve receives "alerts" of various kinds, via UDP. The alerts are then fanned out to appropriate people via XMPP, Email, or SMSs. I have a similarly-inspired system I use on my Debian Administration cluster. A (node) service runs non-stop collecting UDP messages and showing them on a dashboard. I look at it throughout the day to see when slaughter runs, etc. Anyway in conslusion I get a lot of mail. Some of it is related to random projects, and all ends up in the steve.org.uk/ mailbox, some of it relates to machines, and gets filed away, and I have regular conversions with folk so I have a .people.kirsi/ folder which receives a lot of attention, for example. ObRandom:daily() - Mark ~/Maildir/.machines.*, etc, read.
Notice that the SIP messages are accepted over repro's WebSocket transport and relayed to Asterisk over a regular SIP TCP transport. This means that we benefit from repro's TLS support too, so the WebSocket client has a much higher chance of escaping their client-side firewall if port 443 is used (repro pretending to be a HTTPS server) and clients can be authenticated with certificates in their browser.
Here are the steps to get it running:
repro and reTurn setup
Set up repro and reTurn server on a Debian server as per my previous blog post. Verify that the clients can talk to repro.
Asterisk source build
Digium, the creators of Asterisk, are not currently supporting Debian packages, but they do provide RPM packages in their Asterisk package repository
However, the pre-built binary packages for Asterisk 11.4 don't include SRTP support. SRTP is a mandatory part of WebRTC. Therefore, we take the Source RPM (SRPM) and build it manually.
First, it is recommended that you start with a completely fresh CentOS 6 or RHEL6 server. I built a fresh virtual machine in my XCP environment using a procedure similar to that documented by Grant. After installing and setting a root password, configure yum to access EPEL6
Make sure SELinux and firewall are disabled on the box (they are often enabled by default). A quick way to do this:
# sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config # reboot ... # iptables -I INPUT -j ACCEPTNext you can tell yum about the Digium repository and install all the necessary dependencies for building Asterisk:
# rpm -Uvh http://packages.asterisk.org/centos/6/current/x86_64/RPMS/asterisknow-version-3.0.0-1_centos6.noarch.rpm # yum update # yum install rpm-build libsrtp-develIn your home directory, set up a work tree for rpmbuild:
$ mkdir ~/rpmbuild $ cd ~/rpmbuild $ mkdir BUILD BUILDROOT RPMS SOURCES SPECS SRPMS $ cd SPECS $ wget http://danielpocock.com/sites/danielpocock.com/files/asterisk.spec $ cd ../SRPMS $ wget http://packages.asterisk.org/centos/6/asterisk-11/SRPMS/asterisk-11.4.0-1_centos6.src.rpm $ rpmbuild --rebuild asterisk-11.4.0-1_centos6.src.rpmAt this stage, you will have some errors, but it has successfully extracted the tarball into the SOURCES directory:
$ ls -l ../SOURCES -rw-r--r-- 1 daniel daniel 11573400 May 20 23:07 asterisk-sources-11.4.0.tar.gz $It will also complain about missing dependencies, you install them using yum:
# yum install make gcc gcc-c++ ....Notice that you have downloaded a slightly modified version of the asterisk.spec file, the reasons for this are explained in this mailing list discussion. The following should now trigger a successful build:
$ rpmbuild -bb \
--without tds \
--without misdn \
--without odbc \
~/rpmbuild/SOURCES/asterisk.spec
Hopefully, Digium will add the SRTP support in the 11.4.1 packages so that source build won't be necessary for every future release.
Asterisk configuration: demo application
Here we just have to install the RPMs and make a quick configuration change:
$ cd ~/rpmbuild/RPMS/x86_64 $ su - # rpm -i asterisk*rpm # yum install asterisk-sounds-core-en-ulaw asterisk-sounds-extra-en-ulaw --enablerepo=asterisk-11 # ln -s /usr/share/asterisk/sounds/demo-* /var/lib/asterisk/sounds/en/To enable connections from the proxy, we must set a few non-default settings. It is essential to use the TCP transport as the SIP messages from WebSocket clients are usually too big for UDP packets. It is also necessary to enable SRTP and AVPF, as these are mandatory in WebRTC. Here is a diff against the default /etc/asterisk/sip.conf:
--- /etc/asterisk.orig/sip.conf 2013-06-04 10:57:49.428617785 +0200
+++ /etc/asterisk/sip.conf 2013-06-04 11:18:17.825604261 +0200
@@ -207,7 +207,7 @@
; subject to change in any release. If they are changed, the changes will
; be reflected in this sample configuration file, as well as in the UPGRADE.txt file.
;
-tcpenable=no ; Enable server for incoming TCP connections (default is no)
+tcpenable=yes ; Enable server for incoming TCP connections (default is no)
tcpbindaddr=0.0.0.0 ; IP address for TCP server to bind to (0.0.0.0 binds to all interfaces)
; Optionally add a port number, 192.168.1.1:5062 (default is port 5060)
@@ -1371,6 +1371,13 @@
; ...
;
+[1001](public-phone,ulaw-phone)
+avpf = yes
+encryption = yes
+context = public
+icesupport = yes
+
+
; Standard configurations not using templates look like this:
;
;[grandstream1]
This assumes that the SIP user ID of your WebSocket user is 1001
Now you can start Asterisk:
# service asterisk startConfiguring the repro SIP proxy to send calls to Asterisk This is a relatively simple demonstration. The goal is to send calls for the number 1000 to the demo application in Asterisk In repro's web interface, click ADD ROUTE in the menu. Use the following parameters and leave all other options blank:
php5 (5.5.0~rc1+dfsg-1) experimental; urgency=low
[...]
* Add dfsg-repack.sh script to remove non-free JSON module
(Closes: #692613)
* Remove php5-json from Provides, since that's no longer true
-- Ond ej Sur <ondrej@debian.org> Fri, 17 May 2013 14:41:41 +0200
A package with a DFSG replacement for the JSON extension is waiting in the NEW queue and should be available soon. The new JSON extension was done by Remi Collet (PHP developer and Fedora s PHP maintainer). Review and patches are welcomed, code is available at https://github.com/remicollet/pecl-json-c . I hope the PHP project will adopt the solution, after claiming they won t fix it themselves (see php.net #63520).
I wrote a small wiki page for
botch. It includes links to
some hopefully useful resources like my FOSDEM 2013
talk or my master
thesis about botch.
The final goal of botch is to generate a build order with which Debian can be
bootstrapped from zero to more than 18000 source packages. But such a build
order can only be generated once enough source packages (by now the number is
around 70) incorporate build profiles which allow to compile them with less
build dependencies and thereby break all build dependency cycles. So an
intermediary goal of botch is, to find a "good" (i.e. a close to minimal
amount) selection of such build dependencies that should be dropped from their
source packages. So far, the results of all heuristics we use for this task
were just dumped to standard output. Since this textual format was hard to read
for a human developer and even worse machine readable, that tool now outputs
its results in JSON. This data is then converted by another tool to a more
human readable format. One such format is HTML and with the help of javascript
for sortable and pageable tables, the data can then be presented without
producing too much visual clutter (at least compared to the initial textual
format).
Another advantage of HTML is, that the data can now easily be shared with other
developers without them having to run botch or install any other program first.
So without further ado, please find the result of running our heuristics on
Debian Sid as of 2013-01-01 here:
http://mister-muffin.de/bootstrap/stats/
Here is a screenshot of what you can expect (you can see part of the table of
edges with most cycles through them):
On saturday 25. of May I gave a talk about FreedomBox
at the "Claim back your device" track of LinuxTag in Berlin.
LinuxTag is a fairly big annual conference
about (yes, you guessed right) Linux and related topics.
The FreedomBox is a project to help non-geeks care about their
personal privacy when online, same ways as geeks have practiced for a
decade or more. Concrete goal is to design a small, cheap physical box
similar to an internet gateway or wifi router
but with three additions:
Not so long ago I read Dmitrijs' blog post on how to configure apt-cacher-ng to advertise it's service using avahi. As I normally use my laptop in my home and at work, and both networks have apt-cacher-ng running, I decided to give it a try.
I used the Transifex platforms free open source product, created a new project and configured it for free machine translation from the Microsoft service, all of which is pretty clearly documented by Transifex.# apt-get update # apt-get install -t experimental repro resiprocate-turn-server # apt-get install -t unstable chromium sipml5-web-phone # cd /var/www && mkdir jssip && cd jssip # wget -r -nH http://tryit.jssip.net # vi /etc/repro/repro.config # vi /etc/reTurnServer.config # vi /var/www/jssip/js/custom.REMOVE_THIS.jsand then try browsing to /jssip or /sipml5-web-phone Start with a SIP proxy As explained in the RTC Quick Start guide for regular RTC, a SIP proxy is a clean and simple component to start with. The same is true for WebRTC: start with a proxy. There are two I'll emphasize here:
after the release is before the release. this week I started to pick up my
RC bug squashing activities again. first results:
There was an interesting question by Fool recently on the StackExchange site for Boardgames: How do you play a game like Rock-Paper-Scissors with friends online? Or any other game where players have to simultaneously submit their moves (e.g. Diplomacy, or Rock-Paper-Scissors-Lizzard-Spock), which, as I just learned, are simultaneous action selection games. While there are websites dedicated to playing specific games, such as webdiplomacy.net, we could not find a generic one that you can use if you, for example, invent your own variants of a game.
One of my recent innocent tweet about Gerrit vs Github triggered much more
reponses and debate that I expected it to. I realize that it might be worth
explaining a bit what I meant, in a text longer than 140 characters.
I'm having a hard time now contributing to projects not using Gerrit. Github isn't that good. Julien Danjou (@juldanjou) May 8, 2013<script async="async" charset="utf-8" src="http://platform.twitter.com/widgets.js"></script> The problems with Github pull-requests
<figcaption>
A typical case: 3 commits to build a 4 lines long file.
</figcaption>
</figure>
Without Github, the old method that all software used, and that many
software still use (e.g. Linux), is to send a patch set over e-mail (or any
other medium like Gerrit). This method has one positive effect, that it
forces the contributor to acknowledge the list of commits he is going to
publish. So, if the contributor he has fixup commits in his history, they
are going to be seen as first class citizen. And nobody is going to want to
see that, neither your contributor, nor the software maintainers. Therefore,
such a system tend to push contributors to write atomic, logical and
self-contained patchset that can be more easily reviewed.
Technic #2: the History Rewriter
This is actually the good way to build a working and logical patchset using
Git. Rewriting history and amending problematic patches using the famous
git rebase --interactive trick.
The problem is that if your contributor does this and then repush the branch
composing your pull-request to Github, you will both lose the previous
review done, each time. There's no history on the different versions of the
branch that has been pushed.
In the old alternative system like e-mail, no information is lost when
reworked patches are resent, obviously. This is far better because it eases
the following of the iterative discussions that the patch triggered.
Of course, it would be possible for Github to enhance this and fix it, but
currently it doesn't handle this use case correctly..
<figure>
<figcaption>
Exercise for the doubtful readers: good luck finding all revisions of my
patch in the pull-request #157 of Hy.</figcaption>
</figure>
A quick look at OpenStack workflow
It's not a secret for anyone that I've been contributing to OpenStack as a
daily routine for the last 18 months. The more I contribute, the more I like
the contribution workflow and process. It's already
well and longly described on the wiki,
so I'll summarize here my view and what I like about it.
Gerrit
To send a contribution to any OpenStack project, you need to pass via
Gerrit. This is way simpler than doing a pull-request on Github actually,
all you have to do is do your commit(s), and type
git review. That's it. Your
patch will be pushed to Gerrit and available for review.
Gerrit allows other developers to review your patch, add comments anywhere
on it, and score your patch up or down. You can build any rule you want for
the score needed for a patch to be merged; OpenStack requires one positive
scoring from two core developers before the patch is merged.
Until a patch is validated, it can be reworked and amended locally using
Git, and then resent using
git review again. That simple.
The historic and the different version of the patches are available, with
the whole comments. Gerrit doesn't lose any historic information on your
workflow.
Finally, you'll notice that this is actually the same kind of workflow
projects use when they work by patch sent over e-mail. Gerrit just build a
single place to regroup and keep track of patchsets, which is really handy.
It's also much easier for people to actually send patch using a command line
tool than their MUA or git send-email.
Gate testing
Testing is mandatory for any patch sent to OpenStack. Unit tests and
functionnals test are run for each version of each patch of the patchset
sent. And until your patch passes all tests, it will be impossible to
merge it.
Yes, this implies that all patches in a patchset must be working commits and
can be merged on their own, without the entire patchset going in! With such
a restricution, it's impossible to have "fixup commits" merged in your
project and pollute the history and the testability of the project.
Once your patch is validated by core developers, the system checks that
there is not any merge conflicts. If there's not, tests are re-run, since
the branch you are pushing to might have changed, and if everything's fine,
the patch is merged.
This is an uncredible force for the quality of the project. This implies
that no broken patchset can ever sneak in, and that the project pass always
all tests.
Conclusion: accessibility vs code review
In the end, I think that one of the key of any development process, which is
code review, is not well covered by Github pull-request system. It is, along
with history integrity, damaged by the goal of making contributions easier.
Choosing between these features is probably a trade-off that each project
should do carefully, considering what are its core goals and the quality of
code it want to reach.
I tend to find that OpenStack found one of the best trade-off available
using Gerrit and plugging testing automation via Jenkins on it, and I would
probably recommend it for any project taking seriously code reviews and
testing.
Instead our problem was our build farm could best be described as "a pile of stuff" and we wanted to add more systems to it and have switched power control for automated testing.
Previous experience had exposed me to the idea of using 19 inch subracks for mounting circuits inside submodules.
Unfortunately Schroff have no suitable horizontal profiles in their catalog and are another of those companies who seem to not want to actually sell products to end users but rather deal with wholesalers who do not have their entire product range!
I cannot manufacture aluminium extrusions (I know it is a personal failing) nor produce more than 100 mm long length of the plastic profile on my printer.
Mounting the PSU was a simple case of constructing a 3 mm thick plate with the correct cutouts and mounting holes for an ATX supply. Although the images show the PSU mounted on the left hand side of the rack this was later reversed to improve cable management.
Carrier designs for both the i.MX53 QSB and the i.MX6 SABRE Lite boards were created and fabricated at a professional 3D print shop which gave a high quality finish product and removed the perceived risk of relying on a personal 3D printer for a quantity of parts.| Base subrack | |||
|---|---|---|---|
| Item | Supplier | Quantity | Line Price |
| Schroff 24563-194 subrack kit | Farnell | 1 | 41.28 |
| Schroff 24560-351 guide rails | Farnell | 3 | 13.65 |
| Schroff rack rear horizontal rail | Shapeways | 2 | 100.00 |
| 1000mm length of 4mm threaded rod | B and Q | 1 | 1.48 |
| 170mm x 431mm x 3mm Aluminium sheet | inspired steel | 2 | 40.00 |
| PSU mounting plate | Shapeways | 1 | 35.42 |
| PCB standoff | Shapeways | 4 | 22.30 |
| 160mm Deep Modular PC supply | CCL | 1 | 55.76 |
| TP-Link TL-SF1016DS 16-Port 10/100Mbps-Switch | CCL | 1 | 23.77 |
| 8 Channel 16A Relay Board Controlled Via Ethernet | Rapid | 2 | 126.00 |
| Raspberry Pi | Farnell | 1 | 26.48 |
| USB Serial converters | CCL | 10 | 37.40 |
| 10 port strip style USB HUB | Ebay | 1 | 7.00 |
| Parts for custom Ethernet cables | RS | 13 | 26.00 |
| Parts for custom molex power cables (salvaged from scrap ATX PSU) | Workshop | 11 | 11.00 |
| 33R 10W wirewound resistor for dummy load | RS | 1 | 1.26 |
| 24pin ATX female connector pre-wired | Maplin | 1 | 2.99 |
| Akasa double sided thermal pad | Maplin | 1 | 5.00 |
| Small cable tie bases | Maplin | 1 | 6.49 |
| Miscellaneous cable, connectors, nylon standoffs, solder, heatshrink, zip ties, nuts, washers etc. | Workshop | 1 | 20.00 |
| Total for subrack | 603.28 | ||
| i.MX53 QSB carrier | |||
|---|---|---|---|
| Item | Supplier | Quantity | Line Price |
| i.MX53 QSB | Farnell | 1 | 105.52 |
| Intel 320 SSD 80G | CCL | 1 | 111.83 |
| Carrier board | Shapeways | 1 | 30.00 |
| combined sata data and power (15 to 20cm version) | EBay | 1 | 5.00 |
| Low profile right angle 5.5mm x 2.1mm barrel jack | EBay | 1 | 0.25 |
| Parts for 9pin serial cable extension | RS | 1 | 5.00 |
| Miscellaneous solder, heatshrink, nylon nuts, bolts and washers | Workshop | 1 | 5.00 |
| Total for carrier | 262.60 | ||
| i.MX6 SABRE Lite carrier | |||
|---|---|---|---|
| Item | Supplier | Quantity | Line Price |
| i.MX6 SABRE Lite | Farnell | 1 | 128.06 |
| Intel 320 SSD 80G | CCL | 1 | 111.83 |
| Carrier board | Shapeways | 1 | 35.00 |
| combined sata data and power (15 to 20cm version) | EBay | 1 | 5.00 |
| Low profile right angle 5.5mm x 2.1mm barrel jack | EBay | 1 | 0.25 |
| Parts for 9pin serial cable modification | RS | 1 | 2.00 |
| Miscellaneous solder, heatshrink, nylon nuts, bolts and washers | Workshop | 1 | 5.00 |
| Total for carrier | 287.14 | ||
Horay! So how does one use it?abi-compliance-checker (1.98.8-1~exp1) experimental; urgency=low
.
* New upstream release
* Add dh_acc to generate and compare library dumps at build time,
together with addons for dh(7) and cdbs.
* Bump standards version, bump debhelper to 9, use 3.0 (quilt) format,
update Vcs-Svn field to canonical form, remove obsolete
DM-Upload-Allowed.
* Apply a patch to allow suffixes on a-c-c abi dumps.
<?xml version="1.0" encoding="utf-8"?>
<descriptor>
<headers>
./build/include/apt-pkg/
</headers>
<libs>
./build/bin/
</libs>
<skip_types>
SubstVar
</skip_types>
</descriptor>
The first Qt 5 packages have been accepted in Debian experimental.Next.