Saturday, March 03, 2018
Yak Shaving
I hate yak shaving.
I made a small fix to mod_blog
,
and when I went to update the copy on GitHub,
it failed.
All I got back was: “no kex alg.”
Ah, an error message from the Ken Thompson School of Error Messages.
Analyzing the tea leaves,
it seems my version of openssl
was,
shall we say,
a bit older than 20 minutes?
And something happened at GitHub to precipitate the change.
What,
I could not say (perhaps?).
So, to get back to where I was a few days ago:
- Download the latest version of
openssl
. - Run the configuration script, only to find out my version of Perl was too old.
- Download latest version of Perl.
- Configure Perl.
- Attempt to make Perl.
- Track down error message from compiling Perl.
- Reconfigure Perl, this time to use C99 when compiling.
- Attempt to make Perl. Success!
- Hmm …
make tests
? Sure, why not? - Wait a bazillion hours while the tests run.
- See that five tests out of 3000+ failed.
- Figure that's close enough for government work, and install Perl anyway.
- Reconfigure
openssl
. - Make
openssl
. - Install
openssl
. - Recompile a program I wrote that uses
openssl
. - Get confused as to why it's not linking to
openssl
yet it still works. - Find several previous attempts to install
openssl
and decide to remove them. - Then suddenly realize that I was too hasty and that
bind
will no longer start. - Add recompile of
bind
to list of taks I need to do. - Figure out my program is being statically linked to a previous version of
openssl
. - Put that problem aside. Download latest version of
openssh
. - Configure
openssh
, only to find it doesn't support the latest version ofopenssl
. - Unisntall latest version of
openssl
. - Download latest previous version of
openssl
. - Configure latest previous version of
openssl
. - Make
openssl
. - Install
openssl
. - My program is still being statically compiled to older version of
openssl
. - Force the issue—it fails to link.
- Realize that the latest previous version of
openssl
installed in/usr/local/ssl
instead of/usr/local
. - Reconfigure latest previous version of
openssl
to install in/usr/local
. - Make
openssl
. - Install
openssl
. - Try linking my program again.
- Find out that by default,
openssl
only generates a static library. - Reconfigure
openssl
to generate dynamic libraries. - Make
openssl
. - Install
openssl
. - Get my program to dynamically link to
/usr/local/lib/libcrypto.so
, although I'm still forcing that. - Configure
openssh
. This time it works. - Make
openssh
. - Install
openssl
. - Run
ssh -T git@github.com
. It works! - Carefully compare previous configuration for
sshd
to new version ofsshd
. - Carefully tweak new configuration of
sshd
. - Copy server keys so new configuration can see them.
- Test new
sshd
. It works. - Update start up script to run new
sshd
. - Realize I have to recompile
git
to use the updatedopenssl
. - Clean out previous object files in my local copy of
git
. - Make
git
. - Install
git
. - Done!
- No, wait … there was something … what was it?
- Oh, right!
bind
! - Clean out previous object files in my local copy of
bind
. - Make
bind
. - Stop current version of
bind
. - Install new
bind
. - Start up new version of
bind
. - Start breathing again when it works.
- Decided to remove the old
openssl
static library; now programs will dynamically link to the latest previous version ofopenssl
. - Done!
Now I can update my repository on Github!
I realize that I bring this upon myself by avoiding the whole “upgrade every 20 minutes” schtick, but I believe in the “if it ain't broke, don't fix it” mentality and that the computer is here for my needs, I'm not here for the computer's needs.
Besides, the last time I indiscriminately upgraded, it did not go well …