Akom's Tech Ruminations

Various tech outbursts - code and solutions to practical problems

Linux Linux

Preserving a Static Copy of Atlassian Jira (and Confluence) as a Jekyll Site

Last month an old Jira installation I own was compromised via a recent vulnerability. This is bound to happen. Keeping a public product like that secure would require very frequent patching, which is a lot of maintenance. Fortunately, this installation is only a historical record of a popular open-source project (current development uses github issues). In other words, I can get away with a static, read-only copy.

Going Static

Of course, I can use

wget --mirror

to save the whole site exactly as-is. This is a simple option, but it will also need a lot of massaging (for example, to remove confusing links to login, javascript that may break, etc).

Instead, I'm going to convert the content to markdown so that I can then regenerate the site using Jekyll, changing the look and feel, headers and footers as needed. This will also preserve all existing URLs (including attachments).

Making this Happen

I wrote a project to help automate this process fully via the Jira API: https://github.com/akomakom/jira-to-jekyll/.

The basic goal is to do what I outlined above. There is a comprehensive README that explains the process.

Continue reading "Preserving a Static Copy of Atlassian Jira (and Confluence) as a Jekyll Site"

DevOps Linux Linux

Bootstrapping S3/CloudFront with LetsEncrypt»
Let's assume that you want to do the following: Host the contents of your S3 bucket via YOUR.DOMAIN.COM Use CloudFront Use a LetsEncrypt cert "What's the problem?" , you may ask. There are plenty of tutorials for this stuff. Not exactly. A CloudFront Distribution will not let you add a CNAME until you have an SSL cert, but you can't use certbot to auto-provision an SSL ...

Hardware Hacks Hardware Hacks

Adventures in Modifying a UPS for external DC power and LiFePO4 batteries»
I have an ancient APC Smart-UPS 1400 RMNET. It's a very nice UPS, but I have frequent multi-hour power outages and battery life becomes a problem. I have these issues: Short battery runtime , especially as batteries age Lead-acid batteries require frequent replacement and quickly lose capacity (and there are 4 of them) UPS will not accept 110v from a cheap generator (mine is a ...

DevOps Linux Linux

PowerShell on Linux doesn't find modules when run through Puppet»
I'm running PowerShell on Linux for the sake of using PowerCLI . An interesting thing happens: when pwsh is run interactively, in a terminal, the following works fine when PowerCLI is already installed: pwsh -c 'Get-InstalledModule VMware.PowerCLI' When puppet runs it - it doesn't find the module: Get-Package: ...

DevOps Java Java

Gradle Toolchains Support - different JVMs for compile and test»
I'm testing a product that needs to be compiled with JDK 8 but tested (sometimes) on JDK 11. This is now possible to do with maven surefire (although that took some effort). With gradle, I was doing it as follows, which is terrible, even if the path comes from configuration: // The old way: test {     executable = '/some/hardcoded/path/to/java' }   ...

DevOps Linux Linux

Puppet recipe for setting up autossh via systemd»
I've always set up autossh in /etc/rc.local , but with CentOS 8 that doesn't work well (things start too early, etc). Luckily, there is a nicer way using systemd templates. Essentially, all you have to do is create one symlink and one config file per instance of autossh. Example: Make a config file /etc/autossh/mything.conf: OPTIONS=-N -M 20000 ...


Using puppet to set Windows Computer Description»
My company's security department decided to assign Antivirus exclusion policies based on the value of the windows computer description. That means that I need to set computer descriptions ( net config server /srvcomment:"new description" ) to the same value on a whole bunch of windows machines. Doing that by hand is unappealing, and I already have puppet, so here is a simple solution: ...

Low Tech Hacks Low Tech Hacks

Replacing Dishwasher Circulation Pump Bearings without buying a whole new unit»
I have a DW80j3020us/AA Samsung dishwasher. It has been producing a loud noise for some time, and the noise kept getting worse. It was a matter of time before it either seized or melted the motor. The reason I know that the problem is with the circulation pump is that the noise is only audible while it's washing (circulating), not while draining or filling. Clearly the problem could be ...


Android doing Optimizing app 1 of 1 on every boot»
The message appears for a good 15 minutes every time my phone boots up. I followed the usual suggestions (wipe cache partition), and that didn't help Figuring out what app is causing this issue is the hard part. I did it with logcat (I happened to have the Android Studio installed, so logcat is a tab, and it displays the log automatically as the plugged-in phone is booting). You ...


Disabling Windows Recycle Bin with Puppet on all versions of Windows»
And when I say "All versions of Windows" I mean that I tested it on Server 2008, 2012 and 2016. This was oddly hard to figure out, and most tutorials either apply to only one version of windows or to outdated tools. The best way to do this that I found was using Local Group Policy. Now, how to automate this? The puppet local group policy module didn't work at all when I tried it ...


Jenkins Pipeline: parallel and waitUntil, waiting until the other branch finishes»
Let's say that for the sake of speed, you are running two slow things in parallel, but you want one to wait for the other. parallel one: {     node {         sh "sleep 15"     } } , two: {     node {         //slow part:         sh "sleep ...

Code and Hacks Code and Hacks

Customizing Windows 7 keyboard and mouse to act like Linux»
After using only Linux for nearly 20 years, I'm being forced to use a Windows machine for work. To make matters worse, I'm really (really) used to Enlightenment shortcuts, yet I use XFCE (Xubuntu). So, I'd like to have a seamless experience if I can help it. This is a log of my experimentation. Note that I am not talking about a skin - I don't care that much about the looks, and ...

Linux Linux

OCR on a large PDF using tesseract and pdftk»
This turned out to be harder than I thought. I found a large (50MB) PDF with about 50 pages, and none of the tesseract GUI's seemed to be able to handle it without crashing. The solution is to convert the PDF to TIFF so that command-line tesseract could handle it directly, but now ImageMagick couldn't handle that conversion as it was running out of memory (even with the limit settings). ...