I Went From Command Line to Discord Voice on Raspberry Pi

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

Starting From the Basics

I found myself in need of a separate Discord account connected to a voice server this past week. With one account on my main computer and myself unable to use Discord mobile, I chose to work with my Raspberry Pi 400. I downloaded a build of Debian 12 for the Pi, flashed it with balenaEtcher, and it booted to the command line with no Internet access.

I was challenging myself by trying to maintain a conversation while setting things up. As I lacked a free Ethernet connection, that meant working with Wi-Fi. I only got as far as failing to get wpa_supplicant up while only using far fewer tools than were assumed by the tutorials I was using. In the end, I moved a connection over from my main computer temporarily.

Desktop Environment

The MATE desktop environment has been good to me for my old laptop. Once I got it installed on the Pi, even it felt a bit heavy – a note for next time, I suppose. I was able to easily connect to Wi-Fi and restore my desktop’s Ethernet.

Firefox went on next because Discord doesn’t have a client for ARM processors outside the same Android app I cannot use, but the browser version loaded. It didn’t see my USB microphone, and neither did Firefox even after bumbling around with allowing web pages to see my mic. Only then did I find and enable the PulseAudio daemon so Firefox could see my mic and pass it to Discord.

pulseaudio --start

Since I was working quick and sloppy as root, I had to use the following instead:

pulseaudio --system

Takeaway

I can tell my skills are improving. I believe a full Arch install may be in my future.

Note

An interesting problem I keep running into is the system clock. Extreme low-end computers frequently don’t include the circuitry to measure time while power is otherwise off because of monetary cost and circuit board real estate. This week, it meant I had to reboot after connecting to Ethernet, though I could probably have found a way to manually set it.

Final Question

What is the craziest project you’ve ever done starting with a command line?

I look forward hearing your answers on in the comments below or on my Discord server.

I Made Copies of Archived Floppies

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

The process of archival maintenance can be tedious and repetitive. As disk formats change, it becomes harder to locate adapters for disks with old connection standards. For today’s project, I worked with a USB floppy reader.

It all started when my mother’s Designer Ruby embroidery machine wasn’t as broken as she thought. The machine is quite old by this point, and while discussing what thumb drives we might have that aren’t too big for it to see, my father and I were quickly able to trial an SD card over an adapter (didn’t work) and an external 3¼ floppy disk reader. It wasn’t long before we were pouring over a stash of floppies from a previous embroidery machine and rediscovering old patterns.

My mother spent an afternoon copying the archive to a thumb drive, but a few files were appearently corrupt. I tried to access them on Linux, but the floppy drive was making an unusual pattern of sounds as it accessed the first trouble file. Instead, I very carefully crafted a dd command to dump the contents to an image in my Downloads directory. I repeated the process for each floppy, then mounted it into my file system for extraction.

Out of curiosity, I looked up how it was possible for a user to mount a USB stick if Linux is running mount, a privileged command, underneath the graphics. Long story short, I saw it before while researching an open source driver for our uninterruptible power supplies. Daemons are a type of privileged program that can act on behalf of an underprivileged program without giving it wide, open access to root level permissions. Udisksctl is one such command line utility.

Mounting the disk images proved problematic, producing several errors. Assuming they were permissions related, I tried using udiskctl to mount them as myself instead of root, but instead renamed them with .img and mounted them with Dolphin, a graphical file manager. Turns out the errors really were badly corrupted files, and they still refused to copy out of the disk images, even with the correct permissions. At least it was cleaner this way.

I originally thought I had saved around three of the nine missing files, but one or two of the recovered ones turned upon inspection. I am happy to report that I was able recover the one pattern my mother wanted most. The entire archive will soon end up on GoldenOakLibry, my family’s network storage.

Takeaway

The possibility remains that further attempts at recovery may be viable. Given that the bulk of the collection was archived successfully before I got involved, I will have to ask her if the last few patterns are worth it. In any case, it was nice seeing some of those patterns I remember being stitched out by machine all those years ago. It reminds me of 3D printing in the present day.

Final Question

Have you ever dealt with aging technology to move an archive forward in terms of technological time?

I look forward hearing your answers on in the comments below or on my Discord server.

My Manjaro Melted Down

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

Surprise! Bad Manjaro update. I seem to be getting them once a year. I rebooted some time last Wednesday, seemingly to a black screen. My first thought this time wasn’t, “Oh, no! What am I going to do?” so much as, “Ugg, I need to refresh my memory on chroot and manual updating with pacman, skills I’ve only used once or twice before.”

No need to go through all the trouble if it’s not actually necessary. Manjaro has a feature where you can boot from one of an installed list of kernels, and I was seeing that list. Every option failed though – the most I ever got was an emergency shell that didn’t aknowledge the keyboard enough to toggle number or caps locks. This install wasn’t going to fix itself.

My first thought was to grab the Debian drive from ButtonMash, but I’d rather not mess up the only known working drive for scanning pictures. Instead, I riffled through my thumb drive collection and located one with Debian 11 install media. I got on Derpy Chips, my other daily driver workstation, and installed balenaEtcher special to safely make a new Manjaro live USB/install media.

During this time, I was researching the problem. Other people were talking about it within the past month, but I didn’t pick up the actual reason – just something about most Linux kernel 5.x versions being incompatible with a change. Do not cite me on this. I also learned a bit about the command:

manjaro-chroot -a

This command came in handy. The actual repair consisted of me booting to the live media, mounting my main Manjaro drive (graphically, even), going over to it in terminal, changing root directory per the above command, and updating with

pacman -Syyu

If it actually did anything, I didn’t discern anything. I rebooted to confirm it was still broken to find things seemingly repaired. Was it ever broken? Did I actually fix it? I may never know. In either case, I installed a 4.x kernel listed under KDE’s system settings program on the off chance my successful reboot was a fluke. A further reboot held true.

Takeaway

This fix was only done within 24 hours and no interactive help because I’ve already knew all of the needed skills already. Unfortunately, as I finish writing this post, more update shenanigans appear to be inbound. It appears a new package conflicts with one called wxgtk-common but doesn’t satisfy wxgtk2’s requirements for it.

Final Question

Were you affected by these or a similar Manjaro update?

I look forward hearing your answers on in the comments below or on my Discord server.

I Survived Self-Hosting a Wiki With Podman!

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am setting up not one, but two personal wikis on my home network. Let’s get started!

A Personal Wiki

Wikis are the reference material of choice for the casual researcher in this day and age. The content of the subject encyclopedia is turbocharged by the power of the hyperlink when compared to a volume/page reference that can take minutes to weeks to “load” depending on circumstantial accessibility. Community contributions allow for information to be updated in a timely manner, while built-in version control helps admins quickly repair sabotage.

This technology can easily be deployed to a closed-off environment for personal, group, or enterprise use. I know I could use one to organize my role play games, and my sister is after one to help with her writing. My goal for this month’s large project is to get both these wikis operational within our home network.

Wiki Planning

The first list of open source wiki software listed Wiki.js as supporting deployment on Docker. If my Rocky Linux 8 experience with ButtonMash has taught me anything, it’s that OCI containers are good for easy cleanup of botched installations, though challenges can arise when using Podman instead of Docker.

I spent a day studying Wiki.js off and on. My basic understanding is that you need three things for a wiki: the web server, the database, and the wiki software itself. I already understand a bit about the relationship between website and web server. Database vs. website is a similar relationship to website vs. browser. It is an independent process that serves data a website garnishes before presenting to a browser. It’s even possible for multiple websites to share a common database. While Wiki.js currently supports a few SQL (Structured Query Language) databases, PostgreSQL is the only database they will support in future versions.

Sparing a thought for my photo trunk project, I believe a wiki has potential for distribution once we learn more about how to use one. ButtonMash is configured to use the scanner though on its Debian install and not the Rocky 8 one, so I’ll need a different machine to host. GoldenOakLibry comes to mind as its primary function is to host and serve files.

My First Operable Prototype Wiki

GoldenOakLibry is a Network Attached Storage (NAS) by Synology running a custom version of Linux called Disk Station Manager. I found MediaWiki, the wiki software powering Wikipedia.org, in its package manager and chose the easy route. I did not know what I was doing for the most part – just that I was glad I re-enabled the old Vaultwarden container to store new passwords I made as I passed through Password Purgatory: database, wiki root, wiki admin (a user), database user – and then I had to make names for them all before I understood what each one did or how many more were needed.

There was a slight snag when the wiki wanted the database password and I wanted a new one, but someone blissfully using the same password for everything wouldn’t have noticed. A less tech savvy individual wouldn’t have thought to try looking for where to copy the wiki’s configuration file via command line. Once I figured that out though, I landed on a fresh wiki.

The snag that caught me was the mission-critical “What You See is What You Get” editor. Whenever I tried saving changes I made with it, it returned “[<RANDOM HEX NUMBER>] Caught exception of type Error.” A help topic on MediaWiki.org [1] reported fixing his wiki by installing a package called php7-zlib. This package is not in the Synology-approved repository, and I found no other package managers I’m familiar with when I connected over SSH. That’s… understandable, I suppose. The product is aimed at homes and small business too small for dedicated IT, after all.

An Alternative MediaWiki Host

A couple weeks ago, I had the misfortune of breaking one of the hooks securing the bezel around my laptop’s screen. Without it, I have to be extremely careful opening and closing the lid. I’m in the market for a new laptop, but in the meantime, the machine’s mind as it were is intact and I can’t use it for computing just anywhere anymore.

I learned a lot on my first successful prototype wiki. Database-website distinction and multi-site databases come to mind as relevant to my use-case. I’m imagining a system where I run each website in an OCI container with Podman on my laptop, then they go to a database on GoldenOakLibry for content.

…Podman isn’t in the Debian 10 repositories. There is a way to install it that involves a lot of hububaloo, but https://pkgs.org/ says it is on Debian 11, and I’ve had the computer upgrade bug as of late. My recent experience upgrading Mint primed me to locate a tutorial and upgrade to Debian 10. The process was the same (Timeshift, shift repositories, upgrade), just a bit less automated [2]. I took the opportunity to clean up after a failed project or two that involved repositories, but I think I ran into issues with Lutris’s repository GPG key (it updated later so I’m not sure). I’m leaving it for now.

The packages podman, cockpit, and cockpit-podman went on easily. Getting a static IP for the laptop was another story. Its official position within the house is under the TV, out of range of any free Ethernet cables we have laying about. After a few hours trying to understand how its Wi-Fi is even connected, I chose to move it next to ButtonMash and configure a static IP that way.

I started and enabled Cockpit with systemctl. It complained without a proper config file, but a browser on another computer made it to laptop’s Cockpit login screen. I told ButtonMash to link Cockpits, and it gave me a command I’ve been looking for for years.

ssh-keyscan -t ecdsa-sha2-nistp256 localhost | ssh-keygen -lf -

Admittedly, this only hints at a formula, but I saved it to a special directory on GoldenOakLibry anyway.

My Second Operable Prototype Wiki

With a more malleable host than GoldenOakLibry that wasn’t ButtonMash, I scrapped what I could of my first setup and started over. MediaWiki lists four packages as dependencies, and I removed three of them that related directly to serving web pages. MariaDB 10 stayed because I know for sure that it is compatible.

Unlike my experience with Rocky Linux 8, Podman on Debian 11 did not come with any unqualified registries configured, so I was getting fast searches with no results when pulling an image in Cockpit. I took a break for Sabbath, even though I felt I could keep the progress coming. When I got back, I about immediately found a tutorial that recommended a couple Red Hat container registries to add in addition to docker.io [3]. I spotted registry.centos.org in ButtonMash’s registries.conf; with the warnings in the file headers about who you trust, I removed it over the slim chance it gets compromised in the future. Worst case scenerio: I have to re-add it later.

Acquiring docker.io’s official image was easy next to telling MariaDB to let it in. I spent around seven hours inching through assorted tutorials tangential to setting up MediaWiki in a Podman container with [important keywords here:] remote access to a MariaDB database on a Synology device. It was slow, I could have written a post about just this paragraph, but I learned enough to understand the provided instructions (key tutorial: [4]). I braved Vim to write a needed config file and learned about MySQL database CLI client to make a pseudo-root account. And of course this was after locking things down to the static IP addresses I set up earlier.

Once MediaWiki was happy with its access to MariaDB, setup was similar to my first time, though I paid a little closer attention this time around and included all the editors, the mistake that send me on this side quest in the first place. The containerized setup will still come in handy, so it was not all for nothing. As a final, problematic sendoff, MediaWiki’s setup file, LocalSettings.php, remembers the port number it was installed to: future wiki installation attempts will happen in the containers they’re meant to run in, not some baseline I’ll be keeping around.

It was cause for celebration when I made the first edit and it stuck.

Project Notes

Given the right circumstances, I would have to say it’s possible for about anyone to bumble his or her way into a working self-hosted wiki on a Synology NAS, as I sort of did. Don’t get me wrong: even this is not an impatient beginner’s project! This week I learned that databases stand alongside websites, not inside them – a very important distinction for a sysadmin to know.

I’ve seen the Cockpit functionality to switch hosts since first installing Rocky 8 on ButtonMash. It was a pleasant surprise to find it worked over SSH and had a ready command for generating SSH host key fingerprints. DSM sadly does not have that functionality.

My opinion of Synology’s DSM began strong after a slow start, but it’s been fading. Stray one command outside their intended use case and it has DON’T TOUCH THAT! signs waiting everywhere. It’s still production grade, and that I can respect. I just won’t be asking for a similar system in the future.

The database password was extremely difficult to get right. No errors were ever thrown when entering 100+ character jibberish from Bitwarden, but 79 appears to be the maximum MySQL can swallow.

Takeaway

My progress this project does not represent a production-ready environment. I fully expect to have to tweak things before I have each wiki sequestered to its own user while still running happily. Website administration will be a whole other matter to conquer, but that is an exercise for another week.

Final Question

What kind of information might you organize with a wiki?

Works Cited

[1] Winel10, “Caught exception of type Error when saving changes in VisualEditor,”MediaWiki.org, Feb. 4, 2019 and June 8, 2022. [Online]. Available: https://www.mediawiki.org/wiki/Topic:Uuk96xjvh0ukaci2. [Accessed June 27, 2022].

[2] AM, “How to upgrade to Debian 11 from Debian 10,” AtechTown.com, 2022. [Online]. Available: https://www.atechtown.com/upgrade-debian-10-to-debian-11/. [Accessed June 27, 2022].

[3] J. Arthur, “How to Install Podman on Debian 11,” LinOxide.com, Sept. 20, 2021. [Online]. Available: https://linoxide.com/install-podman-on-debian/. [Accessed June 27, 2022].

[4] TechNotes “How to run Mariadb in Docker and Connect Remotely,”YouTube.com, Dec. 15, 2020. [Online]. Available: https://youtu.be/OabTOPOU2RU. [Accessed June 27, 2022].

I Upgraded Linux Mint Two Whole Versions

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

Linux Mint is known for being one of the easiest distributions to use when switching from Windows, so that’s why I chose it when I assembled a desktop for my father. The only catch –or so I heard– was that you’re basically stuck reinstalling every time you need to upgrade. Or are you?

Clues here and there hint otherwise. Long story short, I found a few guides. The gist of them is generally to update/upgrade packages, backup, then system upgrade. The Mint 18.x repositories are shut down, but the underlying Ubuntu ones still work. I went on to backup the home directory, then use a recommended utility called Timeshift to create another time-consuming backup.

I tried following one to upgrade to Mint 20, but 18.3 insisted on Mint 19 and 19 on 19.3. The jump to 20 was a lot longer, requiring the sudo password multiple times along the way. A couple days later, after things were starting to settle, I spotted Mint 20.3, and struggled upgrading to that trying to follow the same principals as before. Turns out there are multiple ways to upgrade, and not all of them work for each upgrade. The Linux Mint User Guide has a page linking to blog posts about each step in the upgrade path from Mint 17 to present [1].

Takeaway

I doubt I would trust someone who only knows how to update/upgrade/install packages unless he was up to failure/frustration/learning cycles. On the other hand, that is why using a utility like Timeshift is important.

My recommendation for Mint users who haven’t learned the command line is to back up their home directory and restore it after a clean install.

Final Question

Do you schedule backups for your computer systems?

I look forward hearing your answers on in the comments below or on my Discord server.

Work Cited

[1] Linux Mint Revision 52875d62, “Docs >> Upgrades,” The Linux Mint User Guide, 2020, [Online]. Available: https://linuxmint-user-guide.readthedocs.io/en/latest/upgrade.html. [Accessed June 19, 2022].

I Switched My Operations to Caddy Web Server

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am rebuilding my home server, Button Mash, from the operating system up. Let’s get started!

Caddy Over Nginx

I spent well over a month obsessing over Nginx, so why would I start over now? As far as I am concerned, Caddy is the piece of software for my use case. While I am sure Nginx is great at what it does, I keep slamming into its learning curve – especially with integrating Let’s Encrypt, a tool for automating SSL encryption (HTTPS/the green padlock). Caddy builds that functionality in while still doing everything I wanted Nginx for.

The official Caddy install instructions [1] for Fedora, Red Hat, and CentOS systems are as follows:

$ dnf install ‘dnf-command(copr)’
$ dnf copr enable @caddy/caddy
$ dnf install caddy

First of all, new command: copr. Background research time! COPR (Cool Other Package Repositories) is a Fedora project I feel comfortable comparing to the Arch User Repository (AUR) or Personal Package Archive (PPA): it lets users make their own software repositories.

Installation went smoothly. When I enabled the repository, I had to accept a GPG key that wasn’t mentioned in the instructions at all. From a user point of view, they appear to fill a similar purpose here to a SSH keys: special numbers use math to prove you are still you in case you get lost.

Caddy uses an HTML interface (a REST API – Don’t ask, I don’t understand myself) on the computer’s internal network known as loopback or localhost on port 2019. Caddy additionally serves everything over HTTPS by default. If it cannot convince Let’s Encrypt to give it a security certificate, it will sign one itself and tell the operating system to trust it. In other words, if I were not running ButtonMash headless (without a graphical interface), I’d be able to try connecting to localhost:2019 with a favorite browser, like at least one of the limited supply of Caddy tutorials did.

IP Range Transplant

I should have just done my experimentation on DerpyChips or something. Instead, I pressed on with trying to point a family-owned domain name at Button Mash. This side adventure sprouted into last week’s post. In short: ButtonMash’s static IP kept was in conflict with what my ISP-provided equipment kept trying to assign it, resulting in an estimated 50% downtime from a confused router. Upgrading to the next gateway may have allowed us to free up the IP range for the gaming router’s use, but it’s not out for our area yet. My father and I switched our network connections over to a “gaming router” we had laying about and enabled bridge mode on the gateway to supposedly disable its router part. I have my doubts about how it’s actually implemented.

Most of our computers gladly accepted the new IP range, but GoldenOakLibry and ButtonMash –having static IP’s– were holdouts. I temporarily reactivated a few lines of configuration on my laptop to set a static IP so I could talk with them directly and manually transfer them over to the new IP range, breaking NFS shares and Vaultwarden on them respectively.

In the confusion, ButtonMash lost its DNS settings; those were easy enough to fix by copying a config line to point those requests to the router. GoldenOakLibry took a bit longer to figure out because the NFS shares themselves had to accept traffic from the new IP range with settings buried deep within the web interface. Once that was sorted, I had to adjust the .mount files in or around /etc/systemd/system on several computers. Editing note: While trying to upload, I found I could not access GoldenOakLibry on at least a couple of my machines. Note 2: I had to change the DHCP settings to the new IP range on my Raspberry Pi reverse Wi-Fi router. Systemd on both goofed systems needed a “swift kick” to fix them.

sudo systemctl start <mount-path-with-hyphens>.mount

Repairs Incomplete

That left Vaultwarden. I was already in a it’s-broken:-fix-it-properly mentality from the modem/router spinoff project. I got as far as briefly forwarding the needed ports for an incompletely configured Caddy to respond with an error message before deciding I wanted to ensure Bitwarden was locked down tightly before exposing it to the Internet. That wasn’t happening without learning Caddy’s reverse proxy, as I put Vaultwarden exclusively onto a loopback port.

Speaking of loopback, I found the official Caddy tutorials lacking. They –like many others after them– never consider a pupil with a headless server. I have not yet figured out how to properly convince my other computers to trust Caddy’s self-signed certificates and open up the administration endpoint. That will come in another post. I did get it to serve stuff over HTTP by listing IP’s as http://<LAN address>, but Bitwarden/Vaultwarden won’t let me log in on plain HTTP, even over a trusted network and confine the annoying log to a file.

As far as I can tell, the administration API on port 2019 does not serve a normal web page. Despite my efforts, the most access I have gotten to it was for it to error out with “host not allowed.” I haven’t made total sense of it yet. I recognize some of the jargon being used, but its exact mechanics are beyond me for the time being.

Takeaway

Caddy is a powerful tool. The documentation is aesthetically presented and easy enough to understand if you aren’t skimming. But you will have a much better time teaching yourself when you aren’t trying to learn it over the network like I did.

Final Question

Do you know Caddy? I can tell I’m close, but I can’t know for sure if I’m there in terms of the HTTP API and just don’t recognize it yet. I look forward hearing from you in the comments below or on my Discord server.

Works Cited

[1] “Install,” Caddy Documentation. [Online], Available: https://caddyserver.com/docs/install. [Accessed: June 6, 2022].

My Father Hacked Discord onto Debian 11

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

Forcing Discord

I worked with my father on his Debian 11 (Bullseye) computer this week. The program he’s been missing the most has been Discord, the chat platform. The official .deb package relies on a library package called libappindicator (or similar) despite it being depreciated. Ironically, this happened so long ago, the change has now made it to the stable branch of Debian. Discord, PLEASE look into this!

Feeling optimistic, we redownloaded Discord and installed it with dpkg. The Apt package manager wasn’t happy with this arrangement, and wanted us to

sudo apt-get --fix-broken install

where it said it was going to remove Discord. We launched Discord anyway; it worked.

The missing dependency would still be a problem though, so I looked into reinstalling while telling apt to ignore it. Before I finished researching that solution though, I found a repository on GitHub set up by user Guna [1]. This individual replaced the dependency, a procedure I have tried and not succeeded at. You can read more about the repository’s precautions under in SECURITY.md under the project’s root level directory. Many thanks.

Projects Around LXDE

LXDE is a desktop environment aimed specifically at people who don’t want to spend excessive system resources on a flashy user interface. Our experience with it would suggest it is not for beginners as a few annoying tidbits require beating into submission.

The first annoyance we fixed was the panel along the bottom hiding itself. While looking through some the panel’s settings as part of an unrelated issue I spotted a relevant tic box to make it stay.

While multiple desktops may be a great way to organize a swarm of windows, not everyone thinks in terms of them. LXDE came configured with a mess of shortcuts you can accidentally trigger, leaving yourself stranded in the wrong desktop workspace. To fix this, we followed a guide [2] to a file called ~/.config/openbox/lxde-rc.xml and specified 1 desktop instead of 2.

Similarly, volume and mute keys are often taken for granted. While following a guide on wiki.lxde.org [3], we copied a block of configuration code into the same ~/.config/openbox/lxde-rc.xml file as above and modified it per instructions for PulseAudio. In theory, it links appropriate keyboard button presses to corresponding events within the system. Mute cooperated, but the volume keys refused to work until we were almost zeroed in on the problem. Our problem vanished while playing around with commands based off where the script was actually trying to set the volume. At least it sticks around through a reboot.

Takeaway

There remains one thing we have yet to figure out: getting Ctrl+Alt+t to open a terminal. A keyboard shortcut list from around 2020 listed it, but perhaps something changed since then.

Final Question

Let me know what you think: Why might LXDE have solved itself? What is with the terminal keyboard shortcut not working? I look forward to hearing from you in the comments below or over on my Discord server.

Works Cited

[1] Guna, “discord-debian-bullseye” github.com, Feb. 18, 2022. [Online]. Available: https://github.com/gunalabs/discord-debian-bullseye [Accessed: May 16, 2022].

[2] “Help:Configuration”openbox.org, May 1, 2018. [Online]. Available:http://openbox.org/wiki/Help:Configuration#Desktops [Accessed: May 16, 2022].

[3] “LXDE:Quesions”wiki.lxde.org, Feb 27, 2017. [Online]. Avalable: https://wiki.lxde.org/en/LXDE:Questions#How_do_I_make_my_special_keyboard_buttons_.28mute.2C_volume.2C_screen_brightness_….29_work.3F [Accessed: May 16, 2022].

My PopOS Upgrade was Surprisingly Smoothly

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

The Linux Development Cycle

System76 released PopOS 2022.04 LTS for April, 2022. Both PopOS and its upstream distributions Ubuntu and Debian, follow a release cycle where software changes accumulate over time until they are bundled and published together so end-users aren’t bothered with little updates potentially breaking sensitive applications all the time. Ubuntu (and subsequently PopOS) release new versions every six months with very little overlap.

LTS releases are special because support for them lasts far longer. This makes for a more stable platform for developers and end-users, and a larger base of compatible software grows as a result. All this is at the cost of some applications being sorely outdated toward the release’s end of life.

Derpy’s Upgrade

Derpy Chips, one of my desktop workstations, runs PopOS on an LTS release. While Canonical may support several Ubuntu LTS versions at once, System76 does not extend the same policy to PopOS. And so, I went along with the upgrade.

Based on my father’s difficulties installing Discord on Debian 11, I expected it might not work with the new PopOS either. My difficulties were elsewhere. MultiMC was all but gone, I had a few things to re-customize, and the sound stopped working for Nodecore a block game I’ve been playing that runs on the Minetest engine. I originally had to install it from a snap package for version compatibility reasons, but the new repositories had the same version I was already using before the upgrade, and moving away from the Snap fixed my sound issues. I moved my game files around, but it was nothing I wouldn’t trust an adventurous, new Linux user to figure out within a couple hours.

Changes to KDE, my desktop environment, were the most noticeable. The upgrade introduced a number of useful features I’ve been enjoying on Manjaro like split terminals and annotations for screenshots, while also bringing over a wider style of panel menu I don’t particularly care for, but don’t hate enough to revert myself.

Takeaway

Major upgrades carry the potential to break software, but this time has been painless besides reinstalling a couple programs. I was able to upgrade on my own terms

Final Question

Are there any features you’ve been excited to find after an update? I look forward to reading your answers in the comments or on Discord.

My Raspberry Pi 400 Runs Android

Good Morning from my Robotics Lab! This is Shadow_8472 with a side project of the week. Let’s get started!

Android Practice

I have been going without a smartphone for a while because I don’t accept Google’s terms of service. Apple is no better. The only option I’ll be happy with is one with nothing but open source software at its heart.

Unfortunately, 3rd party Android builds like LineageOS are infamously difficult and potentially a little unforgiving to install yourself. I need practice, which is why I installed an unofficial LineageOS build for the Raspberry Pi a couple months ago – right before I made an incomplete mad dash for assembling Button Mash into a proper home server.

I used balena Etcher to safely install a build of Android made for the Raspberry Pi 4 lineup built by Konsta [1].

The initial boot was a bit longer than reasonable, and there were some impressive graphical glitches I have never been able to reproduce since. It was a little wired using a mouse with Android menus – especially since I had no way to switch the mouse buttons to a more comfortable lefty configuration. My greatest impression was that there was nothing to do besides browse settings and the file system.

I wanted something a little more to present today, so I installed F-Droid, an app store for open source apps. The challenge wasn’t so much installation, but loading the .apk installation file where the file browser could see it. I had to plant a directory from within LineageOS and use the find command to locate it. Before moving the SD card back to the Pi 400 again, I changed the owner from root to the number 0 and made sure it had the needed permissions. Installation was smooth after that.

Only while doing this writeup did I realize this build was Android TV based. I expect to revisit this project with the correct installation.

Takeaway

I have no idea if this is supported at all beyond the efforts of KonstaT, or if it’s even anything more than a tech demo. While I would not recommend using a setup like this long term, it is still an excellent learning tool for where I am at right now.

Final Question

Have you ever used Android on something other than a smartphone or tablet?

I look forward to hearing your answers in the comments below or on my Discord server.

Work Cited

[1] Konsta, “Raspberry” konstakang.com, 2022. [Online]. Available: https://konstakang.com/devices/rpi4/. [Accessed May 2, 2022].

Misadventures in Studying NGINX

Good Morning from my Robotics Lab. This is Shadow_8472, and today I am getting lost while exploring SSL certificates… again. Let’s get started!

Installing NGINX

At last count, I had about six or seven projects I should hook into it, but most of them are on hold because I don’t want some stranger finding his way into my home network and rearranging things without permission. I set up Vaultwarden to manage its own HTTPS connections, and I learned a lot about what SSL is and how it works. But this is not a recommended configuration and I want to learn the proper, more advanced way of doing things.

I ignored plenty of guides’ advice on my path to a Vaultwarden server. They recommend some sort of ingress controller, and I’m currently exploring one called NGINX. I’ve come across quite the debate as to whether to use a container or install it native. The tutorials for the container edition all use Docker, but I’m using Podman and I’m uneasy about root permission nuances between the two projects making things needlessly more challenging, so I installed the package on ButtonMash.

sudo dnf install nginx

To confirm installation, I enabled the web server with a few systemctl commands and opened a port in ButtonMash’s firewall. NGINX now proudly displays its welcome page.

A Web of Dependencies

NGINX does not lend itself to solo study. It is a do-everything solution for networking. With so many use cases from serving HTML pages to load balancing containers, I have spent weeks pouring through tutorials without finding a keystone lesson for my use case. Some of that time was spent looking into some sort of web interface I falsely believed was included. See NGINX Proxy Manager vs. NGINX for details. I will stick with bare NGINX if for now mainly because NGINX Proxy Manager’s website ironically has an expired SSL certificate.

I got lost researching what I would need for a project this week. Proper HTTPS for Vaultwarden is a good choice of target. That will require an SSL certificate, and that means Let’sEncrypt. An SSL certificate requires either a domain name or a subdomain, so that means arranging one of those.

Somewhere along the way, I got lost and visited this blog’s host cPanel in the interest of moving its SSL to Let’sEncrypt. The experience was unexpectedly surreal, like I was paging through a book written in a language I’m trying to learn – there was a flood of jargon, but the bits I recognized made for moments of satisfaction.

3D Printing Corner

I want to glue the Sonic figure I printed, but I’d just as soon have some experience with gluing large, flat surfaces together before I go smashing a larger project together and hoping it sticks (literally). I had the idea to print up eight calibration cubes for practice. I tried some lower infill settings and got inferior, but adequate results. My biggest complaint was how many tries it took for the overall first layer. I had to settle with a couple curling corners, but a perfect print wasn’t the goal anyway. Gluing will have to wait until next week though.

Side Project

Also on the topic of 3D printing, my mother has been into quilting as of late and she commissioned some more bias tape makers like the ones I made during the early stages of the pandemic. I found what I thought was the model on Thingiverse and its description linked a revision that folds it in half again. I used a spreadsheet to scale the model to a couple different sizes.

Takeaway

I feel like I am assembling a jigsaw puzzle without the box. Each piece must be studied and understood before placing it. Half the challenge is knowing what pieces need to be in place before it’s time to begin studying others. Placing more than one at a time is very difficult, but the HTTPS piece interlocks with so many others, its ecosystem doesn’t lend itself to a project of the week format of study like what I have going on here.

Final Question

The most important lesson in tech is to know where to seek help. I had to seek out a new
Discord server familiar with NGINX this week when I should have looked them up a week ago. How long does it take before you look for specialized help?