summaryrefslogtreecommitdiff
path: root/blog/2017
diff options
context:
space:
mode:
Diffstat (limited to 'blog/2017')
-rw-r--r--blog/2017/dont-piss-in-my-beer.rst59
-rw-r--r--blog/2017/emobil.rst112
-rw-r--r--blog/2017/just-add-water.rst100
-rw-r--r--blog/2017/poudriere-in-ezjail.rst34
4 files changed, 305 insertions, 0 deletions
diff --git a/blog/2017/dont-piss-in-my-beer.rst b/blog/2017/dont-piss-in-my-beer.rst
new file mode 100644
index 0000000..c98a541
--- /dev/null
+++ b/blog/2017/dont-piss-in-my-beer.rst
@@ -0,0 +1,59 @@
1.. date: 2017/04/27 22:12
2.. title: Don't piss in my beer
3
4`Twelve years ago <https://erdgeist.org/gitweb/ezjail/commit/?id=bb046d1a21058af9e2077d6b4f0418667862d46e>`_ I started a little project called `ezjail </arts/software/ezjail/>`_, an opinionated tool that helps `FreeBSD <https://www.freebsd.org>`_ admins to make compartmentalization a lot easier. Long before real virtualisation was a real thing for the rest of us, it helped me scratch my itches maintaining virtual servers I could give out to my more or less technically savvy friends without too much headaches regarding the safety of my files. Of course, this project has been released under `my favorite licence <https://erdgeist.org/posts/2011/die_beerware-lizenz.html>`_.
5
6Keep in mind, that this licence actually doesn't ask for much. Basically it only says not to steal it and run around claiming it's yours. Now, you'll *never* guess, `what happened <https://lists.freebsd.org/pipermail/freebsd-jail/2013-March/002118.html>`_ in 2013. ;)
7
8That's right: After apparently not reacting quickly enough to some man page rewrites submitted to me by an author from the philippines, I seem to have made an enemy for life! I've encountered an interesting version of a hostile fork named qjail: my project was copied, the fork renamed and most (`but not all <https://sourceforge.net/projects/qjail/files/qjail-1.0.tar.bz2/download>`_) of the references to the ezjail project name replaced by the fork's name.
9
10When I reported my astonishment to the adults running the FreeBSD project, they quickly `took action <https://svnweb.freebsd.org/ports?view=revision&revision=314731>`_ and blocked the port until qjail acknowledged me being the author. `Others noticed as well <http://stafwag.github.io/blog/blog/2013/04/10/migrating-from-qjail-to-ezjail/>`_ and decided to move away from the copy cat.
11
12The open source philosophy and some licence law details must have been lost on the guy, as becomes obvious by some later quite funny follow-ups. To quote from `emails later in that thread <https://lists.freebsd.org/pipermail/freebsd-jail/2013-March/002149.html>`_ (you have to start reading from the bottom).
13
14 One does not have to be a lawyer to know the lack of any license
15 verbiage embedded in computer programs released to the public becomes
16 property of public domain forever. Putting license verbiage on your next
17 port version is unenforceable because it's already property of public
18 domain.
19
20And even more hilarious
21
22 This outburst only confirms my suspicion that your suffering from dementia
23 caused by advancing age. I tried to give you a way to save face as I purposed
24 in my private email to you.
25
26 I understand what you are going through and forgive you for your actions. I
27 pray you are under medical care for this condition. There are drugs which reduce
28 these effects and prolong the periods of normalness.
29
30While I usually try not to stand in the way of others doing stuff, I found the process annoying enough to act. In turn, ezjail became a constant `target of FUD and suggestions to switch <http://daemonforums.org/showthread.php?t=5977>`_ in all `kinds of forums <https://lists.freebsd.org/pipermail/freebsd-jail/2015-January/002742.html>`_ I never had the time to check and correct.
31
32What made things worse is that the guy `just started <http://lists.freebsd.org/pipermail/freebsd-questions/2013-January/248558.html>`_ learning `the very language <http://lists.freebsd.org/pipermail/freebsd-questions/2013-January/247723.html>`_ ezjail was written in. Considering jails being a security mechanism, that's a very bold move.
33
34In the end, the differences in qjail became so distinct that he could not rip off later developments like the whole zfs sub system, `contributed by a friend of mine <https://erdgeist.org/gitweb/ezjail/commit/?id=095380a8d03be3a0454626e8b150712f125d814d>`_.
35
36Time went by and `things changed in the FreeBSD world <https://lists.freebsd.org/pipermail/freebsd-jail/2013-March/002160.html>`_ that were a little unfortunate to my project: FreeBSD jails were reorganized and the official jail management tool moved from reading a simple config language to a structured one (making it impossible to edit and parse in the rather simple scripting language sh). A legacy wrapper was added which showed a depreciation message every time ezjail would start a virtual system:
37
38 WARNING: Per-jail configuration via jail_* variables is obsolete. Please consider to migrate to /etc/jail.conf
39
40Of course, this only was grist to the FUD mill, claiming ezjail was outdated. For technical reasons, while it is easy to get rid of this warning (qjail did), but unfortunately not `when doing it properly <https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218849#c13>`_. (Tl;dr: you can reproduce the original functionality of the wrapper, but you're doomed to chase changes in the system's implementation forever. Also you keep several, possibly diverging states of your config files without a way to parse the ones that the OS considers official.)
41
42If you zoom out `on the thread I just linked to <https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218849>`_, you'll notice that the very guy who stole my code now lobbies to have the wrapper code removed, which would essentially break ezjail.
43
44And to make things even more absurd: when called out on his proposal, he `approached me <https://bugs.freebsd.org/bugzilla/attachment.cgi?id=182130>`_ with a "fix" to the carnage he tries to bring upon me. You'll *never* guess if he wrote the code he asks me to copy into my project himself. ;)
45
46In summary: I can't really lurk around in all the forums and honestly I don't have the time for fighting an unsuspected arch enemy. But if you want to understand how frustrating open source development can become, once you're up against someone with more time than ability, feel free to join me over a beer!
47
48Update
49======
50
51As an impressive turd seasoning, I just found that qjail's current licence header reads:
52
53 As per the international "Berne Convention" this work is
54 protected and all rights reserved.
55
56 Before qjail may be forked, written permission must be
57 obtained from the author.
58
59No worries mate. Not gonna fork it. Promise!
diff --git a/blog/2017/emobil.rst b/blog/2017/emobil.rst
new file mode 100644
index 0000000..c9f9b8d
--- /dev/null
+++ b/blog/2017/emobil.rst
@@ -0,0 +1,112 @@
1.. date: 2017/05/25 13:06
2.. title: Sonne im Tank
3
4
5Seit September bin ich e-mobil. Ich bin mein ganzes Führerschein tragendes Leben lang auf Mopeds durch Berlin geheizt, beginnend bei einer `Schwalbe <https://de.wikipedia.org/wiki/Simson_Schwalbe>`_, seitdem immer mit lauten und müffelnden Zweitaktern – bei entsprechendem Verschleiß. Ich wollte vermeiden, mehrere Tonnen Stahl durch die Gegend zu hieven, wenn ich doch nur meinen Hintern von A nach B bewegen wollte, und habe daher trotz mehrerer Autos auch immer noch als primäres Fortbewegungsmittel ein Moped beibehalten. [1]_ Trotzdem ist der wohlige Geruch von Zweitaktabgasen, der harmonische und weit wahrnehmbare Klang nicht unbedingt das Omen, das man seiner Ankunft voraussenden möchte – und die Wartungsanfälligkeit dieses fragilen Haufens beweglicher Teile ließ mich schon vor einer Weile die Fühler in Richtung Elektroroller ausstrecken.
6
7Zwar gab der Markt seit sechs, sieben Jahren auch welche her – allerdings schreckten die Preise im Bereich einer Kleinwagenneuanschaffung ab und meine guten Vorsätze verschwanden schnell wieder in der Schublade. Und die frühen Reichweiten-Angebote von so 25 bis 30 Kilometern haben nichts mit den Strecken zu tun, die ich an einem terminlich gut befüllten Tag in Berlin so in die Reifen schrubbe. Mein Reichweiten-Maßstab ist die Sommerresidenz von Freunden nahe Berlin, für die ich rund 80 Kilometer runterreißen muss – jaja, kein Spaß auf einem geschwindigkeitsbegrenzten Kraftfahrzeug, und auch auf meinen Verbrennern hatte ich unterwegs schon eine Stammtankstelle auserkoren. [2]_ Aber zumindest kann ich mal eben ranfahren, "Kaffee" kaufen und weiterfahren. "Mal eben" Akkus aufladen kannste hingegen knicken.
8
9Schon vor ein paar Jahren [3]_ startete die Firma Gogoro in Taipei einen Dienst, bei dem man sich um das Laden nicht mehr kümmern muss, sondern die Akkus an Straßenecken im Späti leer gegen voll tauschen kann. Die sind nun als Mietmobile nach Berlin expandiert [4]_, jedoch finde ich die weder gutaussehend noch gutklingend. Aber hohe Absatzzahlen ziehen ja auch immer sinkende Preise nach sich und richtig:
10
11In den letzten Jahren hat sich da so richtig was getan: Die Preise für Elektromotoren und Batterien sind gepurzelt – nicht zuletzt durch die krassen E-Mobilisierungsprogramme in China und Indien [5]_, Ladezeiten und Energiedichten kommen in erträgliche Größenordnungen und ein Berliner Unternehmen bietet Hipster-geeignete Scooter zum Kampfpreis an. [6]_ In der Rechts-Unten-Vollausstattung mit zwei Akkus ist man schon mit 3,5 k€ [7]_ dabei – das ist nur marginal mehr, als ich in meine alten Benziner investiert habe. Und das liegt vor allem daran, dass an so einem E-Roller nix mehr dran ist:
12
13Nabenmotor im Hinterrad nebst Motorsteuerung, einigermaßen stabiler leichtgewichtiger Rahmen, quasi ein besseres Fahrrad, Akkufach und Sattel. Also habe ich zugeschlagen und fahre seit September quasi durchgängig E-Roller im Berufsverkehr. Und ja, es rockt: Kaum bewegliche Teile, so ein Elektromotor ist im Vergleich zu einem Verbrenner trivial und hält gern mal zig Jahre. Gut, bisschen Bremskram, Tacho und Verkleidung, aber im Prinzip war's das. Und als mir das Akkufach wegen eines unglücklichen Steinschlags an einer Ecke rausgebrochen ist, gab's vom Hersteller ein Paket mit einem tiefgezogenen Plasteteil, das ich mit einem Schraubendreher in 10 Minuten selber tauschen konnte. Ich kann im Prinzip für die nächsten zwanzig Jahre mit dem Gerät fahren, ohne nennenswerte Wartungskosten zu haben.
14
15Und dann der Verbrauch: Aufladen geht mit 220 V, Netzteil ist bei und lädt in rund vier Stunden voll. Die Hersteller-Angaben von "70 % aufgeladen in einer Stunde" sind doch ein bisschen optimistisch, aber eine komplette Ladung bekomme ich zuhause für rund 30 Cent. Da ich nicht erst tanke, wenn die Akkus leer sind, ist der genaue Preis schwer zu schätzen, aber meine monatlichen Ausgaben für's Tanken sind von 60 Euro auf 6 Euro gesunken. Und das noch in den ersten Monaten, wo mich der Fahrspaß das Moped noch deutlich häufiger benutzen lässt. Und Fahrspaß it is!
16
17Das Moped, was ich mir ausgesucht habe, ist im Vergleich zu den Leihrollern von eMio und Coup rund 20 % kleiner und deutlich leichter – und jedes am Roller gesparte Kilo muss ich nicht abnehmen, um an der Ampel schneller wegzukommen. Entsprechend saust es sich an der Kreuzung auch los. Danach gleitet man quasi durch den Straßenverkehr und viel toller: durch Parks und über Fahrradwege und Bürgersteige, ohne negativ aufzufallen. Um das Moped am Café abzustellen, bin ich auch schon durch die Stuhlreihen auf dem Gehweh gerollt und niemand hat auch nur geguckt – mit dem 2-Takter undenkbar. Und wenn man einen Sozius an Board hat [8]_, ist sogar ein entspanntes Gespräch möglich.
18
19Tzschja, und der Pferdefuß? Die Reichweiten-Experimente sind nicht vollständig geglückt: Vollständig leer kann (und sollte man) das Akku nicht realistisch fahren, da auf den letzten 15 % Ladestand ein bequemes Fußgängertempo rauskommt [9]_. Und auch dann landet man nicht bei den 50 Kilometern Distanz, sondern eher so bei 45, von denen man nur die ersten 40 vorankommt. Selbst mit den beiden Akkus sind die 80 Kilometer zur Datsche [10]_ des Kumpels also nicht (oder nur ohne Bremsen und mit viel Bangen) ohne Zwischenstopp zu erreichen. [11]_ Das heißt, dass ich mir jetzt ein Restaurant suchen muss, wo ich auf dem Weg kurz zum Schnitzel Essen anhalten und währenddessen zwei Akkus kurz-betanken muss. Hmm.
20
21Auch ansonsten ist die Kapazität noch nicht da, wo man überhaupt nicht mehr drüber nachdenken muss: Die Akkus selber wiegen so acht Kilogramm und kommen mit Henkel: Mit Erdgeschoss-Büro ist das Tauschen schon in die tägliche Routine übergegangen, weil der Motorcontroller auf den ersten 25 % Akku noch einmal spürbar schneller anzieht und daher ein volles Akku spaßsteigernd ist. [12]_ Allerdings ist es nicht so, dass ich ernstlich leide, wenn ich mal zwei Tage das Tauschen vergessen habe, also kein nervöses Hetzen wie beim Smartphone. Was die Kapazität angeht, bin ich verdammt nah am Wohlfühlbereich dran, und wenn von den wöchentlichen Presseberichten über eine Verdopplung und Verdreifachung der Energiedichte in Akkus im Labor [13]_ auch nur eins die Serienreife erreicht, erreiche ich die Auftank-Frequenz des Benziners.
22
23Da ich auch stolzer Winterfahrer bin, habe ich ein paar Erfahrungen mit den Akkus in der Kälte gemacht. Grundsätzlich gilt: Akkus nicht nachts draußen parken. Und wenn man sie tagsüber ein paar Stunden in der Kälte lässt, zieht das Moped nochmal deutlich schlechter an und man verliert bei Frost rund 10 % Reichweite. Kein Showstopper, aber sollte man beachten.
24
25Das einzige, was mich beim Unu ein bisschen ankekst, ist die Helmsituation. Das Akkufach ist riesig, und wenn man nur einen Akku mitnimmt, hat man echt viel Stauraum für einen mittleren Einkauf. [14]_ Jedoch ist das Akku quaderförmig hoch (es passen also zwei nebeneinander), was keinen Platz mehr für einen normalen Helm lässt. Sinnigerweise passt der Helm prima rein, wenn kein Akku drin ist: Aber ganz ehrlich schleppe ich lieber Helm statt Akku mit. [15]_
26
27Nun kann ich also mit gutem Beispiel voran Energie sparend durch die Stadt heizen und meine Gesamtökobilanz wieder massieren. Beim Recherchieren bin ich noch auf das offensichtlich weit verbreitete Vorurteil gestoßen, Elektro-Mobile würden ja viel dreckiger betrieben werden, als Benziner, da der Strom aus Kohlekraftwerken käme. Gilt für mich zwar nicht, aber noch krasser ist, dass die meisten Raffinerien Benzin mittels Kohlestrom herstellen [16]_, der die Bilanz pro Kilometer sofort wieder Richtung Elektro-Mobil korrigiert. Und Meldungen wie die hier [17]_ machen mir Mut, wirklich Sonnenkraft unterm Hintern zu spüren – Proctoheliose FTW!
28
29Fußnoten:
30
31.. [1] Als ich mal den Verbrauch meines letzten Mopeds auf 100 km hochgerechnet habe, schlackerten mir aber auch die Ohren. Zweitakter sind wirklich ineffizient.
32.. [2] Präteritum und Perfektform von erkiesen. https://de.wiktionary.org/wiki/erkiesen
33.. [3] http://www.intaiwan.de/2016/08/08/gogoro-berlin-e-scooter-elektro-roller/
34.. [4] https://www.electrive.net/2016/08/02/bosch-startet-elektro-scooter-sharing-namens-coup-in-berlin/
35.. [5] http://business.financialpost.com/news/transportation/fossil-fuel-vehicles-will-vanish-in-8-years-in-twin-death-spiral-for-big-oil-and-big-autos-says-study-that-shocking-the-industry
36.. [6] https://unumotors.com/
37.. [7] Dabei kostet der zweite Akku 700 Euro und das Upgrade von der noch erträglichen 2kW-Motor-Version auf die 3kW-Vollausstattung 500 Euro. Den 1-kW-Motor zum Starterpreis von 1600 Euro will man sich nicht wirklich antun.
38.. [8] Für einen Beifahrer muss man sich ob des geringeren Platzangebots sehr lieb haben oder zwei schmale Personen anordnen, sonst heißt es Gepäckträgerberührung.
39.. [9] Jaja, ich weiß das daher, dass ich das Akku auch tatsächlich leergefahren habe.
40.. [10] Für Wessis: Ferienlaube.
41.. [11] Ob das mit einem der beiden Motoren geringerer Leistung möglich gewesen wäre, weiß ich dabei aber nicht.
42.. [12] Es kann daher sein, dass die Anzugsfreudigkeit auf den ersten Kilometern in die Reichweite frisst.
43.. [13] Citation needed.
44.. [14] Der Rest vom Großeinkauf passt bequem zwischen die Füße und in den Rucksack.
45.. [15] Obwohl das im Winter vielleicht doch die bessere Wahl wäre.
46.. [16] https://www.youtube.com/watch?v=BQpX-9OyEr4
47.. [17] https://www.indy100.com/article/two-thirds-germany-powered-renewable-energy-easter-day-green-7737221
48
49.. raw:: html
50
51 <script>
52 (function () {
53 var FOOTNOTE_REGEX = /^\[[0-9]+\]$/;
54
55 var oldOnLoad = window.onload;
56 window.onload = function (event) {
57 var elems = document.getElementsByClassName("footnote-reference");
58 for (var i = 0; i<elems.length; i++) {
59 var elem = elems[i];
60 var ptrText = elem.innerHTML;
61 if (FOOTNOTE_REGEX.test(ptrText)) {
62 elem.className = "footnote-reference footptr";
63 elem.onclick = toggle;
64 }
65 elem.setAttribute("href", "#"+ptrText);
66 }
67 addListItemIds("footnotes", "[", "]");
68
69 if (typeof oldOnLoad === "function") {
70 oldOnLoad(event);
71 }
72 };
73
74 function addListItemIds(parentId, before, after) {
75 var refs = document.getElementById(parentId);
76 if (refs && refs.getElementsByTagName) {
77 var elems = refs.getElementsByTagName("li");
78 for (var i = 0; i<elems.length; i++) {
79 var elem = elems[i];
80 elem.setAttribute("id", before+(i+1)+after);
81 }
82 }
83 }
84
85 var currentDiv = null;
86 var currentId = null;
87 function toggle(event) {
88 var parent = this.parentNode;
89 if (currentDiv) {
90 currentDiv.parentNode.removeChild(currentDiv);
91 currentDiv = null;
92 }
93 var footnoteId = this.innerHTML.match(/[0-9]+/)[0];
94 if (currentId === footnoteId) {
95 currentId = null;
96 } else {
97 currentId = footnoteId;
98 currentDiv = document.createElement("div");
99 var footElem = document.querySelector('[href$="#id'+currentId+'"]').parentNode.parentNode;
100 var footHtml = footElem.childNodes[3].innerHTML;
101 currentDiv.innerHTML = footHtml;
102 currentDiv.className = "foot-tooltip";
103 parent.insertBefore(currentDiv, this.nextSibling);
104 setTimeout(function () {
105 currentDiv.style.opacity = "1";
106 }, 0);
107 }
108 event.preventDefault();
109 }
110 }());
111 </script>
112
diff --git a/blog/2017/just-add-water.rst b/blog/2017/just-add-water.rst
new file mode 100644
index 0000000..719dc6b
--- /dev/null
+++ b/blog/2017/just-add-water.rst
@@ -0,0 +1,100 @@
1.. date: 2017/08/24 19:07
2.. title: Just add water
3
4Since `letsencrypt <https://letsencrypt.org/>`_ has made it easy to actually get the little green lock icon in all the browser, I've deployed it nearly everwhere, where reloading keys every three months is not an issue (looking at you, dovecot and ejabberd). When using FreeBSD, the `security/dehydrated <http://www.freshports.org/security/dehydrated>`_ port has made things smooth enough for me not to be to afraid to execute it from a periodic script: It only requires bash and curl and can be executed as non-privileged user.
5
6So here's a step by step instruction how to properly set it up:
7
8#. Install the port/package::
9
10 pkg install dehydrated
11
12#. Create the letsencrypt user, for example::
13
14 echo letsencrypt::::::::/bin/sh: | adduser -w random -f -
15
16#. Create your config copy ``/usr/local/etc/dehydrated/config`` by duplicating the example::
17
18 cp /usr/local/etc/dehydrated/config.example /usr/local/etc/dehydrated/config
19
20#. Edit ``/usr/local/etc/dehydrated/config`` so it reads ``CONTACT_EMAIL=me@foo.com``. (Don't forget to remove the # at the line's start.)
21
22#. By default, dehydrated's work dir is ``/usr/local/etc/dehydrated``. I do not like that, because the letsencrypt user needs write access to that directory for its housekeeping files and could modify things like the config and – worse – the ``deploy.sh`` script. So I create a different work dir::
23
24 mkdir /var/dehydrated
25 chown -R letsencrypt /var/dehydrated
26
27#. And then I change ``/usr/local/etc/dehydrated/config`` to read ``BASEDIR=/var/dehydrated``. (Again, don't forget to un-comment the line.)
28
29#. The web directory for challenge replies defaults to ``/usr/local/www/dehydrated``. It needs to be writable by letsencrypt user::
30
31 chown -R letsencrypt /usr/local/www/dehydrated
32
33#. Configure domains.txt::
34
35 echo 'foo.com www.foo.com' > /var/dehydrated/domains.txt
36
37#. I want dehydrated to be run weekly by periodic, I also setup the deploy script (see below). I put those lines in ``/etc/periodic.conf``::
38
39 weekly_dehydrated_enable="YES"
40 weekly_dehydrated_user="letsencrypt"
41 weekly_dehydrated_deployscript="/usr/local/etc/dehydrated/deploy.sh"
42
43#. The deploy.sh script needs to be setup, it will tell all frontends to reload certs. For my nginx installations, it is enough to put this into ``/usr/local/etc/dehydrated/deploy.sh``::
44
45 #!/bin/sh
46
47 /usr/sbin/service nginx reload
48
49#. Don't forget execute permissions::
50
51 chmod +x /usr/local/etc/dehydrated/deploy.sh
52
53#. Finally, for nginx to correctly route requests to the web dir, add this to your server block. Don't forget to enable ``listen 80``::
54
55 location /.well-known/acme-challenge/ {
56 alias /usr/local/www/dehydrated/;
57 }
58
59#. Before running dehydrated for the first time, you should reload your nginx config. This also is an implicit check for correct permissions on ``deploy.sh`` ;)::
60
61 /usr/local/etc/dehydrated/deploy.sh
62
63#. Run dehydrated to set up and agree to terms and conditions::
64
65 su letsencrypt -c 'dehydrated --register --accept-terms'
66
67#. Then run it again to actually do a challenge/response and generate certs::
68
69 su letsencrypt -c 'dehydrated -c'
70
71#. If everything went fine, tell nginx to use the new certs in your server block. Don't forget to enable ``listen 443 ssl``::
72
73 ssl_certificate /var/dehydrated/certs/www.foo.com/fullchain.pem;
74 ssl_certificate_key /var/dehydrated/certs/www.foo.com/privkey.pem;
75
76#. Make nginx use your new certs::
77
78 /usr/local/etc/dehydrated/deploy.sh
79
80You should be able to see your web site with a little green lock icon now, carrying a letsencrypt cert.
81
82In order to verify that all your setups have been setup correctly, I wrote a script that checks them all::
83
84 HOSTS="mail.foo.com:25:smtp mail.foo.com:imaps www.foo.com jabber.foo.com:5232"
85 unset LANG LC_CTYPE LC_MESSAGES LC_TIME
86
87 for host in $HOSTS; do
88 unset starttls
89 [ ${host%:*} = ${host} ] && host=${host}.:443
90 if [ ${host%*:*:*} != ${host} ]; then
91 starttls="-starttls ${host#*:*:} "
92 host=${host%:*}
93 fi
94 echo $host ${starttls}
95 notafter=$( yes q | openssl s_client -servername ${host} -connect ${host} ${starttls} 2>/dev/null | openssl x509 -noout -enddate | grep ^notAfter= | cut -d = -f 2- )
96 secs=$( date -j -f "%b %d %T %Y %Z" "${notafter}" +%s )
97 now=$( date +%s )
98 printf "% 4d days .. until %s\n" $(( (secs - now) / 86400 )) "${notafter}"
99 done
100
diff --git a/blog/2017/poudriere-in-ezjail.rst b/blog/2017/poudriere-in-ezjail.rst
new file mode 100644
index 0000000..706260b
--- /dev/null
+++ b/blog/2017/poudriere-in-ezjail.rst
@@ -0,0 +1,34 @@
1.. title: Running poudriere in ezjail
2.. date: 2017/08/06 21:42
3
4Ever since `poudriere <https://github.com/freebsd/poudriere>`_ was published, I felt the obligation to run a public repository with packages tuned to my needs (i.e. without X11, without Java, with a certain TLS library as default, etc). But considering this tool's complexity, I never felt comfortable running it on a production system's host. So naturally I've been looking for a way to jail it away and only 2 years after `this tutorial <https://github.com/freebsd/poudriere/wiki/poudriere_in_jail>`_ outlined how that works, I managed to acutally try it out. Long story short: This guide kinda works and I got poudriere running in a jail. But I want the jail to automatically start up, get the correct dataset attached and receive all permissions needed to do zfs stuff and creating its own builder jails, in other words: I wanted to embed it as an ezjail.
5
6Now, turns out, that's actually not so hard: If you're running ezjail with zfs enabled, you first create the dataset for poudriere to work on::
7
8 zfs create -o jailed=on tank/poudriere
9
10then you just create your poudriere jail, making sure to pass it an ::1 IP address::
11
12 ezjail-admin create -c zfs poudriere 127.0.0.1,lo0|::1
13
14and then manually edit the two config lines in ``/usr/local/etc/ezjail/poudriere`` to read::
15
16 export jail_poudriere_parameters="children.max=10 allow.mount=1 allow.mount.devfs=1 allow.mount.procfs=1 allow.mount.zfs=1 allow.mount.nullfs=1 allow.raw_sockets=1 allow.socket_af=1 allow.sysvipc=1 allow.chflags=1 enforce_statfs=1"
17 export jail_poudriere_zfs_datasets="tank/poudriere"
18
19dont forget that this jail needs a resolv.conf, too and now you can just::
20
21 ezjail-admin console -f poudriere
22
23and follow `the FreeBSD handbook section on poudriere <https://www.freebsd.org/doc/handbook/ports-poudriere.html>`_ to get your poudriere jobs running. Since I wanted the web server jail to serve the packages, I exposed them in ``/etc/fstab.www_domain.com`` by adding a line::
24
25 /usr/jails/poudriere/tank/poudriere/data/packages /usr/jails/www.domain.com/packages nullfs ro 0 0
26
27and after an ``ezjail-admin restart www.domain.com``, you should be able to use the packages built by adding a ``/usr/local/etc/pkg/repos/www.conf`` of::
28
29 www: {
30 url: "file:///packages/103amd64-local-workstation/",
31 enabled: yes
32 }
33
34*Update:* Should you be missing the file systems inside your poudriere jail, make sure to mount them in your periodic script that runs poudriere (using ``zfs mount -a``, before running poudriere), or take a look at `the thread on the ezjail mailing list <https://elektropost.org/ezjail/msg00902.html>`_ regarding rc.d/zfs not finding the dataset when it's run.