Xtenna 40M EFHW, tuned up, ready for POTA.

 

Not long ago I ordered this antenna from the KC8YBC etsy store. Today I finally got it strung up in the backyard between two painter poles so that I could tune it.  I’m planning to use it for some POTA activity near my QTH.  Something I hadn’t noticed until recently was that with the changes to POTA listings, quite a few places within about 10 miles of my house are now possible to activate.   Between this and the x6200, it’s looking like my POTA kit may be getting a little more compact!

The X6200, initial thoughts.

The Xiegu X6200 arrived this morning, a few days earlier than was projected when it shipped.  So far I like it.  I’ve made a couple of contacts to POTA stations this afternoon over my lunch break, both at 5W and 8W, using the built in microphone and using the handheld one.  Except for band conditions being rather bad, I had no issues.

After the work day ended, I grabbed the 9:1 end fed “random” wire antenna, the 10m mast, some feedline, and headed to the back yard.

The internal tuner had no issues with the 9:1 from 40 to 10m.  Even with the display brightness turned down as far as it could go, the screen was readable in direct sunlight.

I have a sneaky suspicion that this is going to turn into my default POTA rig.  We’ll see.  I may even try to activate a park tomorrow night…

You should just leave.

NOTE: I kind of rambled a bit here, sorry about that.
I’ve seen a lot of people over the years, like since I was a kid, express the opinion that if you  don’t like something that is being done where you are, or you don’t agree with the leadership, be it company, local, county, state, or federal politics, that “You should just leave.”
That’s great in theory. That assumes you have the resources to do that, to be able to walk away from that area, that community. Not everyone does. Sometimes it’s money that is the obstacle, sometimes it’s people, friends, family. Sometimes it’s employment. Sometimes it’s all of that and more.
The same can apply to our online communities, the connections that we have with people who may not be physically near us, but who are close to our thoughts and hearts. So please, think of that before you belittle someone for still using an online service that you feel is bad in some way. They most likely know there are problems there as well, and if they are still there, they have a reason.
Also think of that before you say everyone from a particular region is bad, and that the good people should get out, and if they stay, then they must support what is going on there. There have been many times when I have not supported what my local, state, and federal governments have done. I would hate to be held responsible for the acts of others. That doesn’t mean that everyone gets a free pass to just shrug and do nothing. If you don’t support what they are doing, let them know, vote for people that are more closely aligned with your goals. Remember that politics is not taking a ride to exactly where you want to be, it’s like taking a bus. You get on the bus and you take it as close as you can get to where you want to be, sometimes that means you get on another bus from there, or you take a train, or a car, or you walk, to keep moving towards where you want to be.
I know that I have been just as guilty of lumping people into a collective that I think is doing harm and then dismissing them because of that. I’ll probably do it again, because I’m human. But I’m trying not to. I’m trying to not, without evidence, assume that people support the terrible things that others do. But if someone does, then I’m either going to call them on it, or I’m going to decide that it’s not worth the effort, and just move on. That’s going to change day to day, sometimes I just don’t have the emotional/mental bandwidth to be able to do that. And on those days, I’m going to be disappointed in myself, but I’ll just have to deal with it, remember that I am human, and keep trying.

docker-compose.org

This docker-compose.org file lives at /opt/docker-compose.org and is used to generate the /opt/docker-compose.yaml file that spins up all of the services here.

Heading

The :tangle has to be defined here, NOT in the header of the org file.

#+begin_src yaml :tangle "docker-compose.yaml" :noweb yes

If you try to set it in the header, you will get a broken yaml file. ( emacs versions 28 and 29 and the org-mode that comes with them )

Each begin_src has a :noweb-ref NAME definition that is referenced here.

So a simple way to remove a service is to just remove the reference to it from this block.

---
# this file is generated from docker-compose.org
# DO NOT EDIT and expect changes to persist
version: '3.3'
networks:
  <<networking>>
secrets:
  <<secrets>>
services:
  <<nextcloud>>
  <<gitea>>
  <<jellyfin>>
  <<portainer>>
  <<homeassistant>>
  <<pihole>>
  <<mosquitto>>
  <<zigbee2mqtt>>
  <<esphome>>

Networking

brygge_macvlan:
  name: dockervlan
  driver: macvlan
  driver_opts:
    parent: enp1s0
    macvlan_mode: bridge
  ipam:
    config:
      - subnet: 172.27.1.0/24
        gateway: 172.27.1.1
        ip_range: 172.27.1.64/27

macvlan.sh

This is a script that allows for docker containers on a macvlan to be able to communicate with each other and the docker host.

brygge is the hostname for this particular system, and enp1s0 is the ethernet interface.

#!/bin/sh

# https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/


# called by /etc/systemd/system/macvlan.service
# [Service]
# Type=simple
# ExecStart=/bin/sh /opt/macvlan.sh

# [Install]
# WantedBy=multi-user.target


# systemctl enable macvlan

PATH=/bin:/usr/bin:/sbin:/usr/sbin

ip link add brygge_macvlan link enp1s0 type macvlan mode bridge
ip addr add 172.27.1.64/24 dev brygge_macvlan
ip link set brygge_macvlan up
ip route add 172.27.1.64/27 dev brygge_macvlan

macvlan.service

To enable on system start systemctl enable macvlan

[Service]
Type=simple
ExecStart=/bin/sh /opt/macvlan.sh

[Install]
WantedBy=multi-user.target

Secrets

Keep secrets in these local files, not great, but better than in the docker-compose.yaml file! These files have JUST the super secret information in them, nothing else.

We reference them later by setting the secrets entry in the needed service. Notice the _FILE added to the end of the environment entry.

nextcloud_db_pass:
  file: ./nextcloud_db_pass.txt
gitea_db_pass:
  file: ./gitea_db_pass.txt
pihole_web_pass:
  file: ./pihole_web_pass.txt

Nextcloud

nextcloud:
  image: nextcloud
  container_name: nextcloud
  restart: always
  ports:
    - "80:80"
  volumes:
    - /opt/nextcloud/html:/var/www/html
  secrets:
    - nextcloud_db_pass
  environment:
    - USER_UID=33
    - USER_GID=33
    - MYSQL_PASSWORD_FILE=/run/secrets/nextcloud_db_pass
    - MYSQL_DATABASE=nextcloud
    - MYSQL_USER=nextcloud
    - MYSQL_HOST=172.27.1.19:3306
  networks:
    brygge_macvlan:
      ipv4_address: 172.27.1.69

gitea

gitea:
  image: gitea/gitea:latest
  container_name: gitea
  secrets:
    - gitea_db_pass
  environment:
    - USER_UID=1001
    - USER_GID=1001
    - GITEA__database__DB_TYPE=mysql
    - GITEA__database__HOST=172.27.1.19:3306
    - GITEA__database__NAME=gitea
    - GITEA__database__USER=gitea
    - GITEA__database__PASSWD_FILE=/run/secrets/gitea_db_pass
  restart: always
  networks:
    brygge_macvlan:
      ipv4_address: 172.27.1.68
  volumes:
    - /opt/gitea/data:/data
    - /etc/timezone:/etc/timezone:ro
    - /etc/localtime:/etc/localtime:ro
  ports:
    - "3000:3000"
    - "22:22"

Jellyfin

jellyfin:
  image: jellyfin/jellyfin
  container_name: jellyfin
  user: 1000:1000
  volumes:
    - /opt/jellyfin/config:/config
    - /opt/jellyfin/cache:/cache
    - /storage/Media:/media
  ports:
    - 8096:8096
    - 8920:8920
    - 7359:7359/udp
    - 1900:1900/udp
  networks:
    brygge_macvlan:
      ipv4_address: 172.27.1.67
  restart: unless-stopped

Portainer

portainer:
  container_name: portainer
  image: portainer/portainer-ce
  restart: always
  ports:
    - "9000:9000/tcp"
  environment:
    - TZ=America/Chicago
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /opt/portainer:/data

HomeAssistant

homeassistant:
  container_name: homeassistant
  image: "ghcr.io/home-assistant/home-assistant:stable"
  volumes:
    - /opt/homeassistant/config:/config
    - /etc/localtime:/etc/localtime:ro
  restart: unless-stopped
  privileged: true
  network_mode: host

Pi-Hole

pihole:
  container_name: pihole
  image: pihole/pihole:latest
  ports:
    - "53:53/tcp"
    - "53:53/udp"
    - "80:80/tcp"
  environment:
    TZ: 'America/Chicago'
    WEBPASSWORD_FILE: /run/secrets/pihole_web_pass.txt
  volumes:
    - /opt/pihole/config/etc:/etc/pihole
    - /opt/pihole/config/dnsmasq.d:/etc/dnsmasq.d
    - /opt/pihole/config/resolv.conf:/etc/resolv.conf
  networks:
    brygge_macvlan:
      ipv4_address: 172.27.1.65
  restart: unless-stopped

Mosquitto

mosquitto:
  image: eclipse-mosquitto
  container_name: mosquitto
  volumes:
    - /opt/mosquitto:/mosquitto
    - /opt/mosquitto/data:/mosquitto/data
    - /opt/mosquitto/log:/mosquitto/log
  ports:
    - 1883:1883
    - 9001:9001

zigbee2mqtt

zigbee2mqtt:
  container_name: zigbee2mqtt
  image: koenkk/zigbee2mqtt
  restart: unless-stopped
  volumes:
    - /opt/zigbee2mqtt/data:/app/data
    - /run/udev:/run/udev:ro
  ports:
    - 8080:8080
  environment:
    - TZ=America/Chicago
  devices:
    - /dev/serial/by-id/usb-dresden_elektronik_ingenieurtechnik_GmbH_ConBee_II_DE2599684-if00:/dev/ttyACM0
  depends_on:
    - mosquitto

ESPHome

esphome:
  container_name: esphome
  image: ghcr.io/esphome/esphome
  volumes:
    - /opt/esphome/config:/config
    - /etc/localtime:/etc/localtime:ro
  restart: unless-stopped
  networks:
    brygge_macvlan:
      ipv4_address: 172.27.1.66

My thanks to Adam Jackson for pointing me at this stackoverflow article as a solution to the issues I was having with tangling yaml content in orgmode.

Thinking about workflows and directions

I was thinking about how I want to use this site. I was wondering if I should convert to Hugo, or one of the other static generators, assuming I could keep ActivityPub functionality. But then I remembered that there is an Android app for WordPress. And someone has already built a wp to org converter, so I could pull posts back into emacs for editing and archiving.

That could be a very handy feature as I want to use this site to document ham radio activities like POTA, contests, projects, whatever. That does make me think that I should just point nm9o.com here as well, because I think I can be honest enough with myself that I probably won’t keep two sites active.

So, I guess I am saying that this is going to be an eclectic collection of things that I find interesting. Networking, emacs, Linux, BSD, ham radio, World of Warcraft, Diablo 4, python, wood working, electronics, and a bunch of other topics will all be fair game.

More messing with org2blog

Now that automatic login is working, let’s see if the tracking file works.

I opted to just set it, instead of trying to wrap it into the config option that auth took.

(setq org2blog/wp-track-posts (list "org2blog.org" "technomage.net"))

And while messing with this post I decided to go super old school and grab the 2012 wordpress theme.

Of course it wasn’t that easy.

Of course it wasn’t that easy. A little more testing on my part and using webfinger would have probably helped. Oh well.

location = /.well-known/webfinger {
    try_files $uri $uri/ /index.php?$args;
}

location = /.well-known/nodeinfo {
    try_files $uri $uri/ /index.php?$args;
}

I had to add a little glue to my nginx configuration, otherwise queries were not routed to the right place.

Of course now, this is another live test after I have successfully followed my blog from main mastodon account, so… fingers crossed!

Edit: And now that I have added src code plugin, let’s see if this looks better.

Plugging wordpress into the fediverse

One of the things that has been frustrating sometimes is that I want to make a longer post on , but run into the character limits. I appreciate the character limits, I really do, but there are times when I want to be a little more verbose.

I’ve looked at possibly running something like writefreely, or one of the other first platforms. But then I remembered that wordpress had a plugin. And the most recent iteration of my website is running on wordpress, although, up until today it was running on a host in my house and a static export of that was being uploaded to the server.

One of the other things that I wanted to have was the ability to work on blog posts in an efficient way using . So now I have org2blog plugged into my emacs configuration.

As this is my first post using this conglomeration of tools and tech, we’ll see if it works, or if I have a succession of “did it work this time?” posts…

9:1 End Fed Antenna

After probably about a decade of thinking about it, I finally got around to making a 9:1 UNUN to make a “random wire” antenna. I had the PDF from http://earchi.org/proj_homebrew.html for the 6-40M matchbox sitting on various computers for probably a decade.

I built this around a T157-2 with 18 AWG solid wire. The box it is in started out as a headphone to 2M rig interface. I didn’t add any holes or even have to enlarge any of them. I should have gotten a picture before I closed it up, maybe I’ll do that later.

So of course, as soon as I got it closed up, I had to try it out, so I strung it up on the SOTAbeams 10m mast, and plugged it in to the G90. I put about 31′ of wire on it, no counterpoise, but the feedline to the radio is 25′ of RG-174 coax. There was a contest of some kind going on, and plenty of really loud stations, but I managed to get a QSO with N0KTZ doing a POTA activation in Colorado on 20M.

I bounced around a bit and hit the magic TUNE button on the G90 and I was able to get it to find a match on 160M through 10M. I’m thinking this could be really handy for my next POTA activation 🙂