Building and Deploying Hugo Apps using GitHub Actions to Cloudflare Pages

It’s been a while since I did anything with this site, but today I have modified the way it deploys. It used to deploy directly using Cloudflare Pages and Cloudflare did the building of the Hugo site and then deployed the result. Today, I swapped it to use GitHub Actions. This allows me to do other fun stuff after the build is finished. For example, I can run tools like Jampack to compress the site and images before deploying to CLoudflare Pages. I could also run something like Markdownlint before building the Hugo site, but that’s a future job…

The Workflow for the site is up on Github. I will be making tweaks to this over time.

Day 123 100daysofhomelab

Day 123 of #100daysofhomelab and i think I finally sorted out Bird 2.0!

  • It looks like Bird 2.0 is up and running, announcing stuff correctly, and the like. More testing required, but happy days!
  • I also started announcing my new V4 and V6 space though VMHaus, using Bird 2.0. Now to do the same with Vultr and my DEC-IX box. [Update] Spoke too soon, seems my new space is not being announced upstream with VMHaus yet… Ticket opened to figure it out…
  • Have been having issues with DNS for the last few days. I think its Active Directory Related. My PiHole is set to use the AD boxes as their next hop, then AD is using NextDNS as its upstream… I updated PiHole to now use the AD DNS only for internal DNS queries and things are starting to get a bit faster… Maybe my AD boxes are under powered, cause I have run Windows DNS for a long time before and never had issues with perf for DNS… Weird…

More re-numbering for tomorrow and hopefully upgrading the Vultr box to Bird 2.0. The one in DEC-IX will be a larger move… More peering connections to fix… We will see how things go!

Day 121 100daysofhomelab

Day 121 of #100daysofhomelab:

Generating Twitter Card Images in Hugo

So, I should have really gone to bed a couple hours ago, but instead I spent WAY TOO MUCH time figuring out how to get Hugo to generate a Twitter Card image, like below:

Long story boring, the code is in my miniblog repo, but some important bits.

First, I made up an image template in Photoshop and put it into the assets/opengraph folder.

Next, I have the following code used to generate the image. It is called by an over-ridden twitter partial which includes a link to the generated image. When all is said an done, Hugo builds that image using the info from the get-featured-image.html file and writes it to disk.

It works, for now. I need to do some tweaks and make it look better, but my Photoshop skills are very lacking! More tweaks required!

Day 120 of 100daysofhomelab

Day 120 of #100daysofhomelab and I nearly got Bird 2.0 working… Then it failed…

I am not 100% sure what I am doing wrong here, but essentially, on old Bird 1.6, you could create static routes like:

1
2
3
4
    protocol static {
        #send traffic to own server external IPs direct to gateway peer.
        route x.x.x.x/32 via y.y.y.y;
    }

This would then have a static route set for that /32 going though that IP. The reason is because i would have something like as follows:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    protocol kernel {
        scan time 90;
        import all;
        merge paths on; #ECMP
        export filter {
                if (source = RTS_STATIC || source = RTS_DEVICE) then accept; #static and device routes
                if (source = RTS_BGP) then {
                        # Export some routes to the kernel routing table

                        if (bgp_path.len = 0) then
                        {
                                accept; # Internal Routes
                        }

                        else

                        {
                                krt_prefsrc = OWNSRC;
                                accept;
                        }
                        reject;
                }

                accept;
        };   # Actually insert routes into the kernel routing table
    }
essentially, that would first, setup ECMP for routes that have multiple same length hops. Then, it starts doing exporting of routes to the kernel. The line for static and device routes exports them to the kernel, but does not change their preferred source (more on that in a sec). Internal routes does the same. everything else is set to use OWNSRC (an IP from my /24) as the source of that, so any traffic to that comes from that IP.

Problem is, that doesn’t seem to work on Bird 2… or I have screwed up something somewhere… More digging required…

Day 119 of 100daysofhomelab

Day 119 of #100daysofhomelab and there has been some big (and small) changes on the network.

  • Moved my Mikrotik router from Hyper-V to Proxmox. Slightly lower spec CPU (Celeron J4125 vs Xeon Gold 6138) but has a direct connection to both the PPPoE link for the FTTH connection, along with the Cable Modem. So, less stuff in-between to go wrong.
  • Fixed Prometheus to point at the new Mikrotik Exporter location. Had to tweak some IPs that were missing from the last move.
  • Still in the process of IP Renumbering for my ASN move… Hope to get more time this week or this weekend to sort it out fully.

Day 116 of 100daysofhomelab

the real Day 116 (not like that fake 116 from yesterday…) of #100daysofhomelab and there are a few big changes going on.

  • Big Job! Renumbering my homelab IPs. I have change providers for the leasing of my V4 and V6 space. In doing so, I have had to renumber with a different /24. Also, as part of this move, I get my hands on a /44 IPv6 Range. This gives me 16 full /48s that can be announced separately… How that is going to work, I’m not sure yet. This is going to take a few days!
  • Above will also be done while upgrading to Bird 2.0, which is still ongoing.

Day 115 of 100daysofhomelab

Day 115 of #100daysofhomelab (Updated…), and this is the first real day in the since day 109… Been out of commission due to a cold and back issues… tonight’s post is brought to you by Jameson Whiskey, some honey and hot water…

Some updates:

Hopefully tomorrow i will be back in the land of the living, and will get some more updates done. Next task is to move the rest of my BGP boxes to Bird 2.0… Stay tuned!

Day 109 of 100daysofhomelab

Day 109 of #100daysofhomelab and I have done some tweaks to PipeDream, got some new switches and ordered a new HDMI monitor for my camera…

  • Tweets from my miniblog (this one) get posted to twitter within 2 hours of posting, but they don’t include the #100daysofhomelab due to some issue with Hugo i haven’t figured out. They are posted using PipeDream. So, i tweaked Pipedream to now run a NodeJS script to fix the title to include #100daysofhomelab. The code is simple enough: string.replace(' 100daysofhomelab', ' #100daysofhomelab'). That space in front makes sure if i do ever fix hugo, i wont be putting 2 hashtags in…
  • On a more homelab note, i got my hands of 2 EdgeSwitch 48 Pros. They are non POE, but have 2 10Gb uplinks. both will go in the Cloudshed with a fiber link between it and the house. More hopefully next week!
  • I have ordered an Neewer F100 7 Inch Camera Monitor to attach to my Blackmagic Pocket 6k. Its meant to arrive on Monday, so hopefully that will be timing enough for a video on the Cloudshed!

Day 108 of 100daysofhomelab

Day 108 of #100daysofhomelab and, its a mix of news and updates.