However, Google Chrome does not honor this window manager setting. Any click in a chrome window causes it to be raised.
It turns out that, with XFCE's xfwm, there is an additional setting to turn off in gconf:
]]>$ minikube addons configure registry-creds
Do you want to enable Docker Registry? [y/n]: y
It then asks you some questions and expects user input.
I want this automated, as it will be running several times an hour. The addon config does not take any parameters, so I'm taking a different approach. The configure step creates some credentials in k8s, and it is possible to transfer them from one cluster to another. This is how I am doing it:
Continue reading "Automating minikube configuration to log in to a Docker Private Registy."]]>$ do-release-upgrade
Please install all available updates for your release before upgrading.
Yet if you atempt to install updates, that fails:
$ apt dist-upgrade -y
Err:5 http://archive.ubuntu.com/ubuntu impish Release
404 Not Found [IP: 2001:67c:1562::18 80]...
Essentially, apt cache knows about some pending updates, but the actual packages are not longer available. You can't update them, so you can't upgrade your OS.
Continue reading "Upgrading a non-LTS Ubuntu installation after EOL"]]>$ do-release-upgrade
Please install all available updates for your release before upgrading.
Yet if you atempt to install updates, that fails:
$ apt dist-upgrade -y
Err:5 http://archive.ubuntu.com/ubuntu impish Release
404 Not Found [IP: 2001:67c:1562::18 80]...
Essentially, apt cache knows about some pending updates, but the actual packages are not longer available. You can't update them, so you can't upgrade your OS.
Continue reading "Upgrading a non-LTS Ubuntu installation after EOL"]]>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).
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"]]>"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 cert until you are hosting from your domain.
The easiest solution is to initially generate your SSL cert manually. You can then use something like certbot-s3front to auto-renew.
pwsh -c 'Get-InstalledModule VMware.PowerCLI'
When puppet runs it - it doesn't find the module:
Get-Package: /opt/microsoft/powershell/7/Modules/PowerShellGet/PSModule.psm1:9445 Line | 9445 | PackageManagement\Get-Package @PSBoundParameters | Microsoft. … | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | No match was found for the specified search criteria and | module names 'VMware.PowerCLI'. Error: 'pwsh -c "if (-not(Get-InstalledModule VMware.PowerCLI)) { Exit 1 }"' returned 1 instead of one of [0]
After some experimentation, I narrowed it down to a single environment variable missing when puppet executes the command: HOME. Set HOME, and powershell will find modules. That gets us the following recipe:
]]>$my_user = 'some_user' exec { 'Install PowerCLI': path => ['/bin', '/usr/bin'], command => 'pwsh -c \'Install-Module -Force:$true -Name VMware.PowerCLI\'', unless => 'pwsh -c \'if (-not(Get-InstalledModule VMware.PowerCLI -ErrorAction silentlycontinue)) { Exit 1 }\'', user => $my_user, environment => [ "HOME=/home/${my_user}"] }
// The old way:
test {
executable = '/some/hardcoded/path/to/java'
}
Now that Gradle 6.7+ has built-in toolchains support, it's trivial to configure the compile toolchain:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
}
}
But what about tests? What if I want to test with a different JVM? It's a little more verbose:
]]>
test {
JavaToolchainService javaToolchainService = project.getExtensions().getByType(JavaToolchainService.class)
def launcher = javaToolchainService.launcherFor{
languageVersion = JavaLanguageVersion.of(11)
}
javaLauncher = launcher
environment 'JAVA_HOME', launcher.get().metadata.installationPath //if your tests care about JAVA_HOME
}
/etc/autossh/mything.conf:
OPTIONS=-N -M 20000 -R8888:1.2.3.4:8888 5.6.7.8
ln -s /usr/lib/systemd/system/autossh@.service /etc/systemd/system/autossh@mything.service
systemctl start autossh@mything.service journalctl -xe
But it's better to automate:
]]>
define autossh(
$service=$name,
$args,
) {
file {"/etc/systemd/system/autossh@${service}.service":
ensure => link,
target => '/usr/lib/systemd/system/autossh@.service'
} ->
file {"/etc/autossh/${service}.conf":
content => "OPTIONS=${args}"
} ->
service {"autossh@${service}":
ensure => running,
enable => true,
}
}
# and example usage - random port forwarding
autossh{'mything': args => '-N -M 20000 -R8888:1.2.3.4:8888 host1'}
autossh{'mything2': args => '-N -M 20000 -R8888:1.2.3.4:8888 host2'}
MY_CLASS/lib/facter/win_computer_description.rb
MY_CLASS/manifests/init.pp
My options were:
You can find lots of videos online on how to properly replace the circulation pump motor/assembly. I followed the guides for removing the internal components down to the food chopper, since the chopper is on the motor shaft. This takes about 20 minutes. After that, it was easy - all I had to do was pull the bottom cover off and remove 4 screws to get the motor out. Then a magical thing happened.
Continue reading "Replacing Dishwasher Circulation Pump Bearings without buying a whole new unit"]]>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 don't need the whole thing, just the adb tools so you can run "adb logcat"
At the moment when the message appears, I saw this in the log:
05-04 14:48:10.388 1230-1230/? I/PackageManager.DexOptimizer: Running dexopt (dex2oat) on: /data/app/com.alltrails.alltrails-2/base.apk pkg=com.alltrails.alltrails isa=arm64 vmSafeMode=false debuggable=false oatDir = /data/app/com.alltrails.alltrails-2/oat
Well, now I know what to uninstall. I didn't need Alltrails anyway.
]]>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 (and has not been updated since 2014). The proper way to do this is of course with a Domain-based Group Policy, but my machines are not members of a domain.
Fortunately, there is a new Microsoft tool called LGPO that allows for some degree of command-line control of the Local Group Policy. Download "LGPO.exe" here.
parallel one: {
node {
sh "sleep 15"
}
}, two: {
node {
//slow part:
sh "sleep 10"
// now do something that needs "one" to finish. There is a good chance that this will run too soon...
sh 'wget http://something' //for example
}
}
The problem, obviously, is that you can't be sure that the wget will run after part one finishes. (Let's assume that part one creates the file).
Continue reading "Jenkins Pipeline: parallel and waitUntil, waiting until the other branch finishes"]]>