Happy 4th of July, 2022!

Happy Birthday, America from my Robotics Lab! This is Shadow_8472, and my side project for this week would have involved installing F-Droid, but it hit a last minute dead end.

I stubborned gpg long enough to [re]learn how to verify the F-Droid .apk download. In short: private key, download, and (optionally) detached signature. While searching for F-Droid’s public key, I found multiple places talking about their public key expiring some time during or before 2019. I expect my larger writeup will instead involve a section where I weigh different alternative app stores against each other.

Between last week’s marathon project and starting this month’s larger project, I’m a bit burned out. Praise God for affording us a measure of freedom here on Earth in the form of America – and that only a wavering flicker of the freedom in the world to come He’s planning for us.

Happy 4th of July and God Bless!

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 Broke My 3D Printer Making a Gift

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

The Game Quilt

My mother is made a quilt for a kid who will be spending his summer in the hospital this year recovering from a painful procedure. An accompanying game board has Chess/Checkers quilted onto one side and Tic-Tac-Toe on the other. The idea of paper Chess pieces glued inside some bottle caps grossed me out. I demanded to make something a bit nicer. I browsed the available Chess sets on Thingiverse and settled on a short “travel” set [1].

The Black Army

My printer started the week loaded with black filament, so I printed the black army first. I scaled the pieces up to 150% to match the board and made the bases solid to lower pieces’ center of mass. I tested these changes with a queen and the result needed a larger crown topper that wasn’t so sharp and fragile-looking.

With those changes in place, I started printing, but pieces kept peeling/detatching, resulting in some… spectacular failures that often involved massive misalignments. I made it through four usable batches of two pawns each, but a couple were damaged during removal (my sister and I had similar ideas involving channel locks on batches 3 and 4, respectively).

I printed a bishop, knight, rook triplet and the 10% infill I had been using did not support their flat tops. The bishop was usable, but a little warped on the base. Nevertheless, all three had performed decently, so I bumped it up to 15% infill and tried printing the back row pieces minus knights. Print failure after print failure. Small brims curled on the first layer, even with a high temperature first layer trick I tried.

Finally, I programmed some brims so big they would touch, I also tried wiping the bed with some acetone. Another print failure, but this time only because it stopped extruding after a beautiful, no-curl first layer. I took the printhead out and cleared out a clog, only for it to clog at least one more time. Eventually, I traced the source of the crud not from my spool of filament, but to the e-step motor assembly and even fashioned some tools out of my failed prints to navigate the tight quarters in the mechanism to clean it out. The next print came out nicely.

I knew from the beginning I wouldn’t be happy playing with K’s for knights. Where most of the pieces were just the heads of a more traditional set those knights – YUCK! I appreciate the need for a simpler geometry for small prints, but K is for king in Chess notation where N is for knight. I found my way around Thingiverse to a decent knight designed to be printed without supports [2]. It was a slight adventure putting its head onto a base like the other pieces, but a doable challenge nonetheless. I printed two up to complete the army.

Filament Change and the White Army

I stayed up late to get the knights off as soon as possible and get the white army printing so they would be done before my writeup (an estimated 14 hour printjob). I should have slept on it. Mistake 1: using the firmware’s unload feature; the plastic overheated and stretched off inside the printhead, denying the cleaning filament admittance. Mistake 2: disassembling the printhead while it was on, in a shadow – I snapped two fan blades in successive attempts to engage with a bolt. Within ten minutes, I had found a replacement set of fan blades [3] and quadruple checked the counter clockwise variation was the file I needed. I printed it, enduring the much louder fan as it choked out one last print.

In the morning, my father advised we pass on gluing the original blades back on in the hopes of printing a better set of replacement blades. I clipped the remaining blades and used the fan itself to sand the nubs smooth. My father glued the blades on and we had to squish the fan’s housing to correct for Mistake 3: clipping one of the fan’s three spokes. I printed a Benchy tugboat to satisfactory results.

After all that drama, the white army came out usable with one knight warping a little and one pawn nicked during removal. I plan on adding a couple extra queens in each color because I know from experience that they make for more exciting endgames.

Takeaway

Don’t work on machines while tired, or in the dark. The fix I found is only a patch job until I can buy an upgraded replacement. It’s not as balanced as one made to factory standards, but it is good enough for decent prints on a temporary basis.

Final Question

What self-inflicted accidental damage have you caused by a series of dumb mistakes?

I look forward hearing your answers on in the comments below or on my Discord server, where I sometimes share exclusive nuggets that didn’t fit into the main post.

Works Cited

[1] Raukk, “Travel #chess,” thingiverse.com, March 22, 2012. [Online]. Available: https://www.thingiverse.com/thing:19754/comments. [Accessed June 13, 2022].

[2] Zarlor, “OpenSCAD Chess Simple Printing,” thingiverse.com, Jan. 26, 2019. [Online]. Available: https://www.thingiverse.com/thing:3381939/files. [Accessed June 13, 2022].

[3] CreativeTools, “Cooling fan replacement blades,”thingiverse.com, Nov. 19, 2013. [Online]. Available:https://www.thingiverse.com/thing:186979. [Accessed June 13, 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].

Patience is a Virtue When Internet Breaks

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

It’s the last Monday of the month. I should have a larger project this week, but I had to split a step off into a prequel of sorts when it ballooned on me. For reasons I will go into next week, I ended up talking with tech support for my Internet provider.

It all started when I logged into my router’s off-site network settings (WHY??? is this a thing?) so I could forward a couple ports to Button Mash, my home server, when I noticed it alternating between two internal IP’s: the static IP I configured it to call itself and another one I thought was assigned to another [possibly decommissioned at present] Raspberry Pi – or it may have been a setting I never fully cleaned up. I have no way to tell.

Additionally, I learned that the online toy they’re having me use to try and manage the network is being retired. They want me to use their app I don’t want on the phone I don’t carry. No thanks. I’d rather move my whole network over to this 3rd party gaming router we have on hand.

Support Begins

Friday before posting: On my first session with support, I got a live agent after complaining to their help bot that it hated me. When I shared how I wanted to use my own router, the agent mentioned “bridge mode,” an option I had noted in the gateway’s admin panel. We continued by poking at my Manjaro workstation’s 10 Mbps connection speed with little luck because I was using a different computer.

Sunday: I got into chat with an agent on my now 3.5 Mbps connection. To not-my surprise, the obligatory reboot everything between me and the Internet didn’t change much. I told him no fewer than two or three times that I was on desktop, not phone; I do not have mobile data to remain connected; no, I do not think my family is interested in a coupon for this streaming service you’re offering; this is my one and only means of connecting to you. I followed my given instructions and pressed a button on the back of the gateway for an unusually long time. The Internet did not come back on.

Level 2

My father called a number given to me by the second chat agent, and we were connected with an awesome “Level 2” agent who could follow along as I described my unique home network while repairing the damage done by a factory reset. When bridge mode came up, I figured we might as well fix it how we want if it’s already broken and we have a professional on the line. He had some sudden technical issues of his own an hour plus into helping us.

We called back and got someone whom I had to remind a couple times that Debian 10 does not mean Windows 10. Nevertheless, he got the idea through to us that moving/disabling the default IP range was not a feature our gateway supports. I read something as much in a forum post; it said something about Layer 2 network devices, but that’s homework for a future topic.

The first guy called back just as I was giving into despair with the second guy. Long story short: our network is at around 80%; ButtonMash and GoldenOakLibry, our server and network storage, are configured with static IP’s and don’t show up at all right now. The awesome agent suggested upgrading to the next router, which might not be hard coded to serve its default IP range, allowing me to swap IP ranges between gateway and router. I don’t want to manually configure all my computers to find GoldenOakLibry at a new IP.

Takeaway

A lot of going through tech support as a customer is about explaining your exact situation to however many agents you may come into contact with.

Special thanks to Mr. E on my family’s personal Discord server for the suggestion of disabling the gateway’s integrated router.

Final Question

Have you ever had tech support struggling to keep up with you?

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

I Battled My Sister’s Blinky Monitor

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

Did I Fix the Graphics Card or Not?

My sister’s computer has had its second monitor blinking intermittently. It’s been frequent enough to be annoying, but rare enough to be infuriating to diagnose. Over the months she’s had it, we’ve tested out the screens and cables. I’ve even booted it to one of my Linux drives for another project and it still blinked, so it’s not Windows’ fault. The next thing to test is the graphics card.

My sister’s graphics card has two HDMI ports for her screens and a DVI port she has set up with an HDMI adapter to a drawing tablet. I swapped it out for one of mine for a couple days, configuring one of my workstations for triple screens and played some games on it. As it continued to hold up, our theory evolved from the card being defective, to it not getting enough power in her computer as my power supply was a little stronger than hers.

We picked up a new power supply on discount, but I restored our original configuration for over the weekend to see if maybe something I wasn’t controlling for –but did nonetheless– was the cause, like a buggy driver (unlikely, given it was previously replicated in Linux).

The graphics card behaved without the new power supply up until just over an hour and a half before posting today. Our best guess was that the power cable wasn’t properly seated. Her card takes an 8-pin connection, but it’s being fed by a 6+2 connector. The extra two pin piece could easily have been dislodged slightly some time ago, causing these problems. The search continues. The next step is to replace the power supply and see if that helps. If the card continues to misbehave, we may try the card switch again for a longer period of time.

Takeaway

While swapping the cards to begin with, I didn’t keep track of the screws as well as I should have, but someone strongly recommended a bowl. While returning our cards to their proper towers, I relented and my dog decided to walk off with it while I wasn’t looking. It only had a couple screws for the outer case when he took it, and I found it in the other room with some new tooth marks and a wet spot. We recovered one screw off the floor, and the other from under the couch. Next time I mess with computer parts, the bowl goes out of his reach.

Final Question


Have you ever faced one of your creatures eating [part of] a project?

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

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].