<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vince Hillier</title>
    <link>https://vince.ca/</link>
    <description>Recent content on Vince Hillier</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Thu, 14 Sep 2023 09:42:54 -0500</lastBuildDate><atom:link href="https://vince.ca/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Kubernetes to rsyslog via FluentD</title>
      <link>https://vince.ca/posts/kubernetes-fluentd-rsyslog/</link>
      <pubDate>Thu, 14 Sep 2023 09:42:54 -0500</pubDate>
      
      <guid>https://vince.ca/posts/kubernetes-fluentd-rsyslog/</guid>
      <description>After a few hours of scouring documentation and reviewing examples, I couldn&amp;rsquo;t find a complete working example of how to get FluentD running as a Daemonset to forward logs to rsyslog. Below is a complete working example that I cobbled together.
Rsyslog config    The following additions need to go into /etc/rsyslog.conf or /etc/rsyslog.d/your.conf.
 Enable the udp listener for rsyslog:  # provides UDP syslog reception module(load=&amp;#34;imudp&amp;#34;) input(type=&amp;#34;imudp&amp;#34; port=&amp;#34;1514&amp;#34;) Create a template for Kubernetes logs  $template KubernetesLogs,&amp;#34;/var/log/remote/kubernetes/%msg:R,ERE,1,BLANK:\&amp;#34;namespace_name\&amp;#34;=&amp;gt;\&amp;#34;([a-zA-z0-9_-]+)\&amp;#34;,--end:secpath-replace%_%msg:R,ERE,1,BLANK:\&amp;#34;container_name\&amp;#34;=&amp;gt;\&amp;#34;([a-zA-z0-9_-]+)\&amp;#34;,--end:secpath-replace%.</description>
    </item>
    
    <item>
      <title>Samsung Odyssey G9 on QubesOS</title>
      <link>https://vince.ca/posts/samsung-odyssey-g9-on-qubesos/</link>
      <pubDate>Sat, 07 Jan 2023 01:42:54 -0500</pubDate>
      
      <guid>https://vince.ca/posts/samsung-odyssey-g9-on-qubesos/</guid>
      <description>UPDATE: Dump nvidia chipsets and go with a Radeon RX580. All problems disappear and the rest of this post is moot.
After months of careful consideration I pulled the trigger on a Samsung Odyssey G9, a personal Christmas present!
This screen is very impressive at 49&amp;quot; with an extreme curve. I couldn&amp;rsquo;t wait to get it set up.
QubesOS had quite the difficulty remembering the Display settings for this monitor, I had to reconfigure it every time I booted or unlocked my screen.</description>
    </item>
    
    <item>
      <title>OVH Licensing Windows Inside a Proxmox VM</title>
      <link>https://vince.ca/posts/ovh-licensing-windows-inside-proxmox-vm/</link>
      <pubDate>Wed, 04 May 2022 04:38:22 -0400</pubDate>
      
      <guid>https://vince.ca/posts/ovh-licensing-windows-inside-proxmox-vm/</guid>
      <description>I can count on one hand with several fingers left how many Windows Server workloads I&amp;rsquo;ve implemented. I build a lot of infrastructure that supports Windows Server workloads, but rarely involved in the actual configuration of Windows Server itself.
Requirements    Setup a Windows Server at OVH with SQL Server running in a Proxmox VM. This VM will use a routed network for internet access and nat through the Proxmox server when communicating with the OVH licensing server.</description>
    </item>
    
    <item>
      <title>TraefikEE Let&#39;s Encrypt acme certs via TLS</title>
      <link>https://vince.ca/posts/traefikee-letsencrypt-acme-via-tls/</link>
      <pubDate>Sat, 09 Apr 2022 17:16:51 -0400</pubDate>
      
      <guid>https://vince.ca/posts/traefikee-letsencrypt-acme-via-tls/</guid>
      <description>We&amp;rsquo;re using wildcard certificates with dnsChallenge everywhere, however, we onboarded a service that is delegated to nameservers we don&amp;rsquo;t control. We had to add another certificateResolver to Traefik using httpChallenge, but actually tlsChallenge.
Our first attempt was using httpChallenge with the following static config:
certificatesResolvers: le-prod-http: acme: email: &amp;#34;example@example.com&amp;#34; keyType: &amp;#34;RSA4096&amp;#34; httpChallenge: entryPoint: web This resulted in the following log errors:
traefikee_controller-0.1.ooby8h4drk1g@ovh03 | time=&amp;#34;2022-04-09T21:03:21Z&amp;#34; level=error msg=&amp;#34;Unable to obtain ACME certificate for domains \&amp;#34;service.</description>
    </item>
    
    <item>
      <title>TraefikEE: Tcp Router Ipwhitelist Middleware</title>
      <link>https://vince.ca/posts/traefikee-tcp-router-ipwhitelist-middleware/</link>
      <pubDate>Sun, 20 Mar 2022 04:16:50 -0400</pubDate>
      
      <guid>https://vince.ca/posts/traefikee-tcp-router-ipwhitelist-middleware/</guid>
      <description>Service delivery consists of more than just HTTP reverse proxies and SSL termination. This post will explore exposing a TCP service within a cluster as well as limiting access to said service. It&amp;rsquo;s written specifically for TraefikEE users but easily adapted to CE.
We&amp;rsquo;ll be working with the following components:
 Proxy stacks Static configuration Dynamic configuration Docker stacks  Proxy Stacks    If you want your service to access the source IP of incoming connections you&amp;rsquo;ll need to enable host networking.</description>
    </item>
    
    <item>
      <title>Dhcp Option 43 for Aironet Aps</title>
      <link>https://vince.ca/posts/dhcp-option-43-for-aironet-aps/</link>
      <pubDate>Mon, 15 Nov 2021 13:46:27 -0500</pubDate>
      
      <guid>https://vince.ca/posts/dhcp-option-43-for-aironet-aps/</guid>
      <description>Just a quick hacky script to generate dhcp option 43 for Cisco LAPs to join Wireless Lan Controllers (WLC). This script outputs a line to add to your dhcpd.conf subnet declaration. It takes a list of IPs as arguments and will convert them into a suitable dhcpd.conf entry.
Script invocation example:    user@work:~$ ./gen-dhcp-43.py 192.168.10.5 192.168.10.20 Please add the following line to the correct subject declaration. option vendor-encapsulated-options f1:08:c0:a8:0a:05:c0:a8:0a:14; Example subnet declaration    subnet 192.</description>
    </item>
    
    <item>
      <title>TraefikEE: Ipwhitelist Behind Cloudflare</title>
      <link>https://vince.ca/posts/traefikee-ipwhitelist-behind-cloudflare/</link>
      <pubDate>Tue, 09 Nov 2021 17:44:51 -0500</pubDate>
      
      <guid>https://vince.ca/posts/traefikee-ipwhitelist-behind-cloudflare/</guid>
      <description>At Revenni we&amp;rsquo;re huge fans of Traefik and have used their software for over 3 years. This time last year we decided to deploy TraefikEE for a couple of clients - it has been a fantastic experience and dealing with Traefik on the business end, a pleasure.
There are a literal ton of posts just like this one, but not a single one summarized a working solution to use ipwhitelisting[sic] with Cloudflare.</description>
    </item>
    
    <item>
      <title>Preventing Mailman Subscription Spam</title>
      <link>https://vince.ca/posts/preventing-mailman-subscription-spam/</link>
      <pubDate>Mon, 01 Nov 2021 07:33:41 -0500</pubDate>
      
      <guid>https://vince.ca/posts/preventing-mailman-subscription-spam/</guid>
      <description>Mailman is an opensource software for managing mailing lists. As with everything on the internet, it&amp;rsquo;s subject to abuse. One of the mailman services we maintain experienced some wild success with 18K new subscriptions in 24 hours&amp;hellip; or did it.
root@mailman:/var/log/mailman# cat subscribe|wc -l 18099 Let&amp;rsquo;s see who is responsible for these subscriptions.
root@mailman:/var/log/mailman# cat subscribe |awk &amp;#39;{print $NF;}&amp;#39;|sort|uniq -c|sort -nr|head -5 3942 128.199.129.xxx 1209 138.199.50.xxx 514 49.64.213.xxx 266 220.165.247.xxx 261 114.</description>
    </item>
    
    <item>
      <title>Tiling Offsets With ClusterSSH</title>
      <link>https://vince.ca/posts/tiling-offsets-with-clusterssh/</link>
      <pubDate>Thu, 21 Oct 2021 17:41:46 -0400</pubDate>
      
      <guid>https://vince.ca/posts/tiling-offsets-with-clusterssh/</guid>
      <description>Before ansible and a lot of config management tools, we had clusterssh. I&amp;rsquo;ve been using clusterssh forever and a day at this point. After a long hiatus, I dusted it off and fired it up only to be very disappointed in the tiling across two screens. Some terminals were on the split, while others were overlapping.
For the first time in more than a decade I opened up ~/.clusterssh/config and discovered the following options:</description>
    </item>
    
    <item>
      <title>GrapheneOS: Authenticator Plus to AndOTP</title>
      <link>https://vince.ca/posts/grapheneos-authenticator-plus-to-andotp/</link>
      <pubDate>Mon, 23 Aug 2021 00:03:52 -0400</pubDate>
      
      <guid>https://vince.ca/posts/grapheneos-authenticator-plus-to-andotp/</guid>
      <description>A lifetime ago I found myself switching from Android to iPhone. Part of migrating to my shiny new iPhone involved moving 10s of 2fa tokens trapped in Google Authenticator to a new application on the iPhone. Unfortunately, in 2015, GA had no export function and I couldn&amp;rsquo;t find a way to migrate the tokens. I began what seemed like an insurmountable task of re-enrolling all of my accounts in a new application, Authenticator Plus, which I ensured had an export function in the event I replaced my phone.</description>
    </item>
    
    <item>
      <title>GrapheneOS: Android to IPhone and Back Again</title>
      <link>https://vince.ca/posts/grapheneos-android-to-iphone-and-back-again/</link>
      <pubDate>Sun, 22 Aug 2021 00:15:52 -0400</pubDate>
      
      <guid>https://vince.ca/posts/grapheneos-android-to-iphone-and-back-again/</guid>
      <description>More than a decade ago I jumped on the Android wagon with an Acer Liquid before following the Nexus line from One-6P. By 2015 I became really frustrated with Google and their privacy incursions. This lined up perfectly as Apple was being very obtuse with the US Government requests to access an iPhone belonging to a shooter in San Bernardino. I figured any company willing to take that stand was a company I was willing to pour my wallet into.</description>
    </item>
    
    <item>
      <title>Reset Windows Password on OVH</title>
      <link>https://vince.ca/posts/reset-windows-password-ovh/</link>
      <pubDate>Fri, 05 Feb 2021 07:50:24 -0500</pubDate>
      
      <guid>https://vince.ca/posts/reset-windows-password-ovh/</guid>
      <description>We have a handful of Windows Servers with password expiry policies. This is a short cheatsheet for anyone else encountering ERRCONNECT_PASSWORD_EXPIRED.
Error    xfreerdp +clipboard /u:admin /p:$(pass servers/windows/revenni) /w:1920 /h:1080 /v:xxx.xxx.xxx.xxx:3389 [07:29:36:722] [11626:11627] [INFO][com.freerdp.client.common.cmdline] - loading channelEx cliprdr [07:29:36:723] [11626:11627] [INFO][com.freerdp.client.x11] - Property 273 does not exist [07:29:37:285] [11626:11627] [ERROR][com.freerdp.core] - freerdp_set_last_error ERRCONNECT_PASSWORD_EXPIRED [0x0002000E] [07:29:37:286] [11626:11627] [ERROR][com.freerdp.core.rdp] - rdp_recv_callback: CONNECTION_STATE_NLA - nla_recv_pdu() fail [07:29:37:286] [11626:11627] [ERROR][com.freerdp.core.transport] - transport_check_fds: transport-&amp;gt;ReceiveCallback() - -1 Software Required on debian    apt-get install xfreerdp2-x11 openjdk-11-jre icedtea-netx Process     Login to OVH&amp;rsquo;s control panel Navigate Dedicated Servers -&amp;gt; &amp;lt;server&amp;gt; -&amp;gt; IPMI Inside the Remote KVM section, click From a Java applet (KVM).</description>
    </item>
    
    <item>
      <title>Benchmarking WordPress with Locust</title>
      <link>https://vince.ca/posts/benchmarking-wordpress-with-locust/</link>
      <pubDate>Fri, 15 Jan 2021 09:45:10 -0500</pubDate>
      
      <guid>https://vince.ca/posts/benchmarking-wordpress-with-locust/</guid>
      <description>Wordpress. Love it or hate it, it runs close to 40% of the internet. So when tasked with increasing it&amp;rsquo;s performance we need to establish a baseline and then measure our incremental changes. Queue Locust!
  Install python3-venv and python dev packages
apt-get install python3-venv python3-dev   Create locust virtual environment and activate it
python3 -mvenv ~/.python_envs/locust source ~/.python_envs/locust/bin/activate   Install locust
pip install locust   Create locustfile.</description>
    </item>
    
    <item>
      <title>Openstack Lockout Recovery</title>
      <link>https://vince.ca/posts/openstack-lockout-recovery/</link>
      <pubDate>Mon, 26 Oct 2020 05:57:49 -0400</pubDate>
      
      <guid>https://vince.ca/posts/openstack-lockout-recovery/</guid>
      <description>Story time    The perfect storm culminated in a dire rescue operation.
Some ansible managed machines in a hyper secure cloud environment based on OpenStack. No problem, I&amp;rsquo;m a partner at OVH and manage a lot of infrastructure there for several clients. OpenStack internals and APIs are things I&amp;rsquo;m intimately familiar with.
Fire off a playbook to update the machines and everything looks good. Expected updates marked as changes, no anomalies.</description>
    </item>
    
    <item>
      <title>Streaming Pandora with Pianobar on QubesOS</title>
      <link>https://vince.ca/posts/streaming-pandora-with-pianobar-on-qubesos/</link>
      <pubDate>Sun, 17 May 2020 07:54:32 -0400</pubDate>
      
      <guid>https://vince.ca/posts/streaming-pandora-with-pianobar-on-qubesos/</guid>
      <description>The other day Kris Nóva was broadcasting her effort to get pianobar working. Pianobar is a Pandora radio CLI application written in C.
Typically my day is filled with some lo-fi hip hop streamed from YouTube. But the constant ads and &amp;ldquo;Video Paused. Click to continue&amp;rdquo; prompts are quite annoying. The idea is to have some chill background music not something that requires constant petting throughout the day, when I found out about pianobar I had to get it going.</description>
    </item>
    
    <item>
      <title>Benchmarking file uploads with Locust</title>
      <link>https://vince.ca/posts/file-uploads-with-locustio/</link>
      <pubDate>Tue, 07 Apr 2020 09:45:10 -0500</pubDate>
      
      <guid>https://vince.ca/posts/file-uploads-with-locustio/</guid>
      <description>I had to perform some functional load testing of some file upload features. The last time I played with load testing Jmeter was the incumbent, with an entire team dedicated to its usage. My first crack was to harness curl and launch a bunch of loops into the background. This worked well to generate load but offered little in terms of process control and reporting. To change the number of clients I had to rerun my wrappers with new variables.</description>
    </item>
    
    <item>
      <title>Intro to Linux pass</title>
      <link>https://vince.ca/posts/intro-to-linux-pass/</link>
      <pubDate>Fri, 21 Feb 2020 22:45:10 -0500</pubDate>
      
      <guid>https://vince.ca/posts/intro-to-linux-pass/</guid>
      <description>I&amp;rsquo;ve been doing some migration and isolation work lately to reduce the attack surface in the event of a supply chain compromise. The original intention of this post was to document the process of switching from a single password store for all services to several password stores each with their own virtual machine, disk resources, as well as pgp keys and passphrases. Half way through that process I realized there should be some context for that, queue this post.</description>
    </item>
    
    <item>
      <title>Rss and Comments</title>
      <link>https://vince.ca/posts/rss-and-comments/</link>
      <pubDate>Sat, 15 Feb 2020 22:24:27 -0500</pubDate>
      
      <guid>https://vince.ca/posts/rss-and-comments/</guid>
      <description>I enjoy posting content about things I find interesting. I also enjoy stepping outside of my echo chamber and hearing your thoughts, feedback, and adventures.
In that spirit, it&amp;rsquo;s now easier to follow content I post with the new RSS feed. Additionally, comments have been enabled via Commento, the least invasive, privacy focused, open source commenting platform I could find.</description>
    </item>
    
    <item>
      <title>Eliminating 502 Proxy Errors</title>
      <link>https://vince.ca/posts/eliminating-502-proxy-errors/</link>
      <pubDate>Tue, 11 Feb 2020 14:01:15 -0500</pubDate>
      
      <guid>https://vince.ca/posts/eliminating-502-proxy-errors/</guid>
      <description>While working on an infrastructure refresh and consolidation project for one of my clients they had a legacy archive of public data consisting of several hundred gigabytes. There are a couple of approaches to handle this, each with its advantages and disadvantages.
Decisions      Move the data into the web container
 Advantages  Local data is easy to manage with standard tools   Disadvantages  Bloated containers Synchronization requirement for each container Cost      Move the data into a central nfs server</description>
    </item>
    
  </channel>
</rss>
