Evgeni Golov: It's not *always* DNS
Two weeks ago, I had the pleasure to play with Foremans Kerberos integration and iron out a few long standing kinks.
It all started with a user reminding us that Kerberos authentication is broken when Foreman is deployed on CentOS 8, as there is no more
mod_auth_kerb available. Given mod_auth_kerb hasn't seen a release since 2013, this is quite understandable. Thankfully, there is a replacement available, mod_auth_gssapi. Even better, it's available in CentOS 7 and 8 and in Debian and Ubuntu too!
So I quickly whipped up a PR to completely replace mod_auth_kerb with mod_auth_gssapi in our installer and successfully tested that it still works in CentOS 7 (even if upgrading from a mod_auth_kerb installation) and CentOS 8.
Yay, the issue at hand seemed fixed. But just writing a post about that would've been boring, huh?
Well, and then I dared to test the same on Debian
Turns out, our installer was using the wrong path to the Apache configuration and the wrong username Apache runs under while trying to setup Kerberos, so it could not have ever worked. Luckily Ewoud and I were able to fix that too. And yet the installer was still unable to fetch the keytab from my FreeIPA server
Let's dig deeper! To fetch the keytab, the installer does roughly this:
# kinit -k # ipa-getkeytab -k http.keytab -p HTTP/foreman.example.comAnd if one executes that by hand to see the a actual error, you see:
# kinit -k kinit: Cannot determine realm for host (principal host/foreman@)Well, yeah, the principal looks kinda weird (no realm) and the interwebs say for "kinit: Cannot determine realm for host":
- Kerberos cannot determine the realm name for the host. (Well, duh, that's what it said?!)
- Make sure that there is a default realm name, or that the domain name mappings are set up in the Kerberos configuration file (krb5.conf)
ipa-client-install when joining the realm
But there must be something, right? Looking at the principal in the error, it's missing both the domain of the host and the realm.
I was pretty sure that my DNS and config was right, but what about gethostname(2)?
# hostname foremanBingo! Let's see what happens if we force that to be an FQDN?
# hostname foreman.example.com # kinit -kNO ERRORS! NICE! We're doing science here, right? And I still have the CentOS 8 box I had for the previous round of tests. What happens if we set that to have a shortname? Nothing. It keeps working fine. And what about CentOS 7? VMs are cheap. Well, that breaks like on Debian, if we force the hostname to be short. Interesting. Is it a version difference between the systems?
- Debian 10 has krb5 1.17-3+deb10u1
- CentOS 7 has krb5 1.15.1-50.el7
- CentOS 8 has krb5 1.18.2-8.el8
gethostname(2) must return an FQDN.
I've documented that for our users and can now sleep a bit better. At least, it wasn't DNS, right?!
Btw, freeipa won't be in bulsseye, which makes me a bit sad, as that means that Foreman won't be able to automatically join FreeIPA realms if deployed on Debian 11.
I realised this week that my recent efforts to improve how Consfigurator makes
the fork(2) system call have also created a way to install executables to
remote systems which will execute arbitrary Common Lisp code. Distributing
precompiled programs using free software implementations of the Common Lisp
standard tends to be more of a hassle than with a lot of other high level
programming languages. Executables will often be hundreds of megabytes in
size even if your codebase is just a few megabytes, because the whole
interactive Common Lisp environment gets bundled along with your program s
code. Commercial Common Lisp implementations manage to do better, as I
understand it, by knowing how to shake out unused code paths. Consfigurator s
new mechanism uploads only changed source code, which might only be kilobytes
in size, and updates the executable on the remote system. So it should be
useful for deploying Common Lisp-powered web services, and the like.
Here s how it works. When you use Consfigurator you define an ASDF system
analagous to a Python package or Perl distribution called your consfig .
This defines HOST objects to represent the machines that you ll use
Consfigurator to manage, and any custom properties, functions those properties
call, etc.. An ASDF system can depend upon other systems; for example, every
consfig depends upon Consfigurator itself. When you execute Consfigurator
deployments, Consfigurator uploads the source code of any ASDF systems that
have changed since you last deployed this host, starts up Lisp on the remote
machine, and loads up all the systems. Now the remote Lisp image is in a
similarly clean state to when you ve just started up Lisp on your laptop and
loaded up the libraries you re going to use. Only then are the actual
deployment instructions are sent on stdin.
What I ve done this week is insert an extra step for the remote Lisp image in
between loading up all the ASDF systems and reading the deployment from stdin:
the image calls fork(2) and establishes a pipe to communicate with the child
process. The child process can be sent Lisp forms to evaluate, but for each
Lisp form it receives it will actually fork again, and have its child
process evaluate the form. Thus, going into the deployment, the original
remote Lisp image has the capability to have arbitrary Lisp forms evaluated in
a context in which all that has happened is that a statically defined set of
ASDF systems has been loaded the child processes never see the full
deployment instructions sent on stdin. Further, the child process responsible
for actually evaluating the Lisp form received from the first process first
forks off another child process and sets up its own control pipe, such that it
too has the capacbility to have arbitrary Lisp forms evaluated in a cleanly
loaded context, no matter what else it might put in its memory in the
meantime. (Things are set up such that the child processes responsible for
actually evaluating the Lisp forms never see the Lisp forms received for
evaluation by other child processes, either.)
So suppose now we have an ASDF system
However, the growth rate seems to be decreasing. Maybe the low hanging fruit
have all been picked, or maybe we just need to help more people jump in the
automated testing bandwagon.
With that said, we would like to encourage and help more maintainers to add
autopkgtest to their packages. To that effect, I just created the
Hindus comprise 83% of Indian couples with more than two child children
If one wants to, one can read a bit more about the Uttar Pradesh Population bill 


Installing a new laptop
New is a 2nd hand Thinkpad T470p laptop that I intend to duel boot with windows.
I will be listing up my work done in the respective tasks.
Github recently announced
This is not only the Year of the Ox, but also the year of Debian 11, code-named
bullseye. The release lies ahead,
How are you meant to write about an unfinished emancipation? Bodies of Light is a 2014 book by Glasgow-born Sarah Moss on the stirrings of women's suffrage in an arty clique in nineteenth-century England. Set in the intellectually smoggy cities of Manchester and London, we follow the studious and intelligent Alethia 'Ally' Moberly, who is struggling to gain the acceptance of herself, her mother and the General Medical Council.
'Alethia' may be the Greek goddess of truth, but our Ally is really searching for wisdom. Her strengths are her patience and bookish learning, and she acquires Latin as soon as she learns male doctors will use it to keep women away from the operating theatre. In fact, Ally's acquisition of language becomes a recurring leitmotif: replaying a suggestive dream involving a love interest, for instance, Ally thinks of 'dark, tumbling dreams for which she has a perfectly adequate vocabulary'. There are very few moments of sensuality in the book, and pairing it with Ally's understated wit achieves a wonderful effect.
The amount we learn about a character is adapted for effect as well. There are few psychological insights about Ally's sister, for example, and she thus becomes a fey, mysterious and almost Pre-Raphaelite figure 
A quick note to self to remind how I do backups of my Android device with rsync (and adb).
I have followed this guide:
The Rcpp team is pleased to announce release 1.0.7 of
Continuing with
The
Here, I have already logged into my respective accounts so page for entring credentials does not show up but if the user has not logged into his account, he would be first asked to log in.
For complete code, you can check out: