How I would Relearn Linux #4: Package Management

Good Morning from my Robotics Lab! This is Shadow_8472 with part four of How I Would Relearn Linux, where I answer the questions I had and offer the tips I wish I knew a few years ago when I started exploring Linux. Let’s get started!

Why Package Managers are Important

Linux software is often distributed in modular units known as packages be they applications, drivers, or kernel modules. If you’ve ever assembled a modpack for a game, there’s a chance you’ve had to chase down a dependencies or address conflicts before you could use it. Now imagine doing that for a full operating system, and you get the idea of what using Linux was like. A single packaged game might require tens or hundreds of prerequisite packages by the time you settle everything. This problem was quickly automated with package managers.

How to Use a Package Manager

Specific features of a package manager will vary, but their primary goal is to install, update, and remove packages. It will have a repository list telling it where to install software from. Android is Linux… kinda. Its default package manager is the Play Store. Its job is to install, update, and remove packages per user direction while making the process as invisible as possible. Unlike Android, a package manager in Linux is typically invoked using another program called Sudo (my preferred pneumonic is “Super User DO” even though I use the su-dough pronunciation).

When installing packages, a package manager has a list of repositories to contact. It will reach out to them with each package being installed and usually ask for clarification if multiple matches are found. It then does the same thing for all the listed prerequisites until it generates a full list of the missing packages needed to make your desired package run. On user confirmation, it begins download/installation.

Updating software is similar to initial installation. New versions may add features that rely on new or different library packages. A package manager will recalculate the missing packages and notify the user if any installed packages are either missing or no longer needed (This is true for the Debian/Ubuntu family’s package manager, apt. I’m not as familiar with pacman or dnf to speak for their specific behavior – as in they might just auto-remove them and I’d be none the wiser).

Uninstalling packages is similar to updating, only an explicitly installed package is being removed along with its unneeded dependencies. This may also be a necessary step if a conflict arises which the package manager cannot automatically resolve, though additional force may be required to bypass dependency checking.

Secondary Package Managers

Going back to Android for a moment, it is possible to “sideload” apps by downloading them from outside the Play Store. It’s even possible to download other app stores, such as F-Droid, which specializes in Free and Open Source Software and the Aurora Store, which uses the Play Store’s repositories, but with an emphasis on being privacy conscious. Similarly, there exist Linux package managers aimed at less-trusted community packages or packages that take care of more of their prerequisites. In this way, multiple versions of a program my be installed simultaneously, which may lead to confusion if a broken copy isn’t cleaned up in the hopes that an update will fix it.

Caution is often advised though when considering adding multiple primary package managers. I’ve not seen or looked for a solid explanation, but I can guess it’s so you don’t break your system by installing everything twice and having things call the wrong programs using twisted system links.

Takeaway

Whatever package manager your installed distro uses, you will get more out of your experience if you take the time to learn how to search for packages (a case where you don’t need sudo). When an exact version matters, you can usually extract that information from your package manager. If you cannot find a package, www.pkgs.org is also your friend. Your package may be in the repositories for the next or previous distribution, or in a repository you have to add special.

For example: in another project of mine, I found and looked up the version of Podman I had on Debian to learn it doesn’t support the Secrets feature I had been using on Rocky Linux: I had to adjust my approach accordingly.

Final Question

What package manager(s) came with your system(s)?

I look forward to hearing from you in the comments below or on my Socials!

What I do with Trash Computers

Good Morning from my Robotics Lab! This is Shadow_8472 and today I am exploring a computer my father found. Let’s get started!

Taking Inventory

While attending a work bee at my church’s school, my father was throwing something away in the dumpster when he noticed an old computer with the hard drive still inside. He took it home for me to look at with the stipulation that I’d need to be sending it along within a week.

The computer in question didn’t promise much on the outside by today’s standards. 1GB of memory. 250GB storage. OEM sticker for Windows XP Media Center Edition 2005. Least promising of all was the sunken power socket. Two disk drives are present – one a LightScribe CD burner and the other a DVD reader. It has no interesting PCI expansion cards. The front panel is two plastic clips from falling off out of an original six to hold it on and is covered in several unsightly stickers. The rest of the case has some scratches, but the side panel opens (and closes) beautifully.

Powering Up

The first thing when working with an unknown system is to try booting it. My first instinct was to locate and install a backup power supply – no-thank-you Dell for the non-standard connections in our stockpile.

A previous project of mine left a free power supply. I confirmed its compatibility (only difference being 600Watt vs 300Watt), swapped it out, screwed it in, and connected it up to all the components – until I got to the dedicated CPU power socket. The old motherboard adheres to a standard with 2×2 pins, and the new standard is 2×3. While the socket itself might fit in terms of power and shape of pins, a stray capacitor blocked this approach.

As noted before, the original power supply’s socket was sunken. Its plastic “screw wings” are broken and there’s not anything good inside to brace it against as is the case for my red laptop. Now, this next part is generally inadvisable, but my father grabbed a spare power cord and we carefully opened up the power supply. The broken part would only need a few solder points and it would work again. As a proof of concept, we connected the cord back up, and I re-installed the original supply.

The computer booted into an admin account on Windows 8.1.

Digital Archeology

First of all, I noticed how the system clock (including time and date) was only around half an hour slow. Also: props to whoever cleaned off this computer. The only clues to its history were in the system logs and the product ID keys for Internet Explorer and Windows.

This computer appears to have had a service life starting some time around 2004/2005 (OEM sticker). It was upgraded –presumably to Windows 7– around 2013 (IE key), where it was used regularly until being upgraded to Windows 8.1 in January, 2018. This upgrade must not have done it so well, as it was only booted a couple times since for around four days total in May and July, 2018 before my activity in 2023 showed up.

At this point, I easily could have run some more invasive file recovery program as a demonstration of why you shouldn’t dispose of your computers improperly, but I decided against it before I even began work on it.

Installing Linux [Hard Mode]

I grabbed the keys and loaded the computer into BIOS to point it at my trusty Ventoy USB. Only, the version of BIOS this thing runs is so old, it only supports booting to internal hard drive and CD. On a whim, I located and force-fed it my GRUB disk after opening the DVD drive by sticking a dulled safety pin up its manual eject hole. From there, I was able to load Ventoy. And from Ventoy, I was able to attempt loading one of my images.

This process took several minutes where it should have been seconds. I had many failed attempts (one casualty of which was a Debian installation I had on a USB stick I turned into installation media), but eventually managed to load Bodhi Linux 7 – specifically a late-cycle release candidate. For whatever reason I was never able to figure out, I had to boot using GRUB2 mode as opposed to “normal mode” from Ventoy. My guess as I write this is it has something to do with the BIOS not supporting USB booting.

The live experience wasn’t impressive. I chose to do a split-partition install simply because I’d never done one before. Otherwise, it booted Linux and ran poorly, but better than over a USB 2.0. I installed Firefox with the intention of it serving again as a backup, but is the system even needed?

Disposal

Technology marches on. 10-15 year-old desktops built near state-of-the-art quality may remain relevant as adequate get-me-online machines after a new hard drive, graphics card, and progressively slimmer versions of Linux, there comes a time when an almost 20 year-old budget crunch system struggles to land a kiosk job – that is if it’s worth the owner’s time to find a buyer.

For this tower, it is time to send it on its way in the Great Material Continuum. In this case: a local e-waste drop off location. My father and I spent some time sorting our tech stockpile and identifying stuff as broken, working, or unknown. We stripped down the systems we sending off for what RAM they had remaining, a couple CPU’s, a bunch of computer screws, and the hard disk from the star of our goodbye party.

An hour or two before we left, I’d lost my de-pointed safety pin from earlier. I had to disassemble it to extract my boot CD. I ended up prying open the back of the case and tilting the unit around until my disk fell out the back.

Takeaway

I don’t know what secrets this computer might have had on its hard drive before I started poking at it. Perhaps nothing. It was certainly tidied up beyond a casual inspection before it found its way to me, but the criminally curious might have applied more powerful recovery tools in the hopes of finding some personal information to steal. This is why some computer recyclers will destroy your hard drive with a drill press while you watch. Better still would be scrambling the hard drive with random bits a few times beforehand.

Final Question

Would you have had a better re-use for the computer I worked on this week?

I look forward to hearing from you in the comments below or on my Socials.

How I would Relearn Linux #3: Terminal Navigation

Good Morning from my Robotics Lab! This is Shadow_8472 with my third installment of How I would Relearn Linux, a series where I pick an entry-level skill I would want to re-learn first if I were to begin my Linus journey over again. The terminal is the heart of the Linux admin experience. Let’s get started!

Command Line Interface (CLI)

The most familiar paradigm of using a computer is the GUI, or Graphical User Interface. Before the GUI, computers more closely resembled increasingly fancy typewriters writing from left to right, top to bottom. Just as GUI’s are still here after VR has been on the market for years, so too has the Command Line Interface (CLI) endured. Modern terminal emulator programs are wildly customizable, but that is beyond the scope of this post as well as my capabilities.

Basic Navigation

I’ll assume you have experience with a GUI file manager. The Linux terminal can do everything those do, but instead of hitting buttons or double clicking folders, you use commands to jump around to directories. My experience is with a popular default shell known as bash.

The Command Prompt

Most beginner-level Linux distributions’ terminals display a prompt like this:

<username>@<hostname>:<directory>$ 

There may be variations like different colors or square brackets present. These are heavily customizable and often are by distribution authors. The point of the prompt is to display who is logged in to what machine and where it is working. For example:

[shadow8472@ButtonMash ~]$ ▯

In this case, username shadow8472 is logged in to ButtonMash. The ~ is a shortcut for the current user’s home directory. The hollowed out cursor means I clicked out of my terminal emulator to another window.

File Paths

Similar to other operating systems, Linux has a file system resembling the trunk, limbs, branches, etc. of a tree. Starting at the root directory, /, (often simply called “root”) absolute file paths list directories separated by additional /’s.

/home/shadow8472/Downloads/Games/TicTakToeStrat.sh

Relative paths the present working directory and work from there. So, if I were in my Downloads directory, the following path would point to the same:

Games/TicTakToeStrat.sh

A leading . (period) in a file name means a file is hidden. A lone . points to the present working directory, and a pair of periods .. points to a parent directory. These are mostly used when working with a file in the present working directory or moving the present working directory up one level, respectively, though if so inclined, a user can use them as part of a larger path:

/home/././shadow8472/Downloads/./Games/../Games/../../Downloads/Games/./TicTakToeStrat.sh

Spaces cannot be used in file names because the space character dictates the flow of control when working with commands. To get around this, the \ (backslash) may be used as in “\ ”, or the entire file path may be placed in quotation marks. I find it much simpler to use capital letters for new words.

Commands

Linux commands are special system programs accessible from anywhere. As a general rule, they follow the syntax (pattern):

$ <name> -<flags> <additional parameters>

If everything before the $ is who and where you are, everything after is what you do. I like to imagine myself as walking around on the file system as though it were a maze of rooms. More practically, pressing tab will complete a command or file name (or list the possibilities based on syntax if user presses tab multiple times).

Flag and parameter syntax will be specific to an individual command/program. In general, flags control the mode a program operates in; -h or –help is a common flag to quickly access a brief program description, acceptable syntax, other flags, and whatever the programmer thinks it is most important for users to know at a glance. Parameters are more about data – especially file paths. And if you weren’t confused enough, flags can have parameters of their own.

Point of clarification: 
With the exception of Java, multi-letter flags use two hyphens. WordPress's automatic conversion is wrong.
--help
ls (LiSt the contents of a directory)
cd <file path> (Change Directory)

When using the terminal, I will imagine myself walking around the file system as though it were a maze of rooms. I use ls to “Look Surroundings.” The command cd takes steps from one room to another – either by providing a name or using .. to take one step backwards, toward the root. While not a command per se, I envision using tab to complete directory names as of feeling around with my hands; three characters before using tab is usually enough to identify a name or otherwise save a lot of time and mental energy typing and spell checking an exact name.

cd -

I properly learned this trick specifically for this week’s post. It returns you to the previous present working directory. I’ve known about something like this for a while and I intend to use it more when “teleporting.”

pwd (Displays absolute path of Present Working Directory)
whoami (Who Am I? outputs who you are working as)

These commands may seem redundant with the prompt, but some Bash shells reduce clutter and omit the path leading up to the present working directory, which can get confusing when working around multiple instances of a program. whoami exists because some prompts only start at the dollar sign, $.

man <program name> (MANual)

The man command brings up the “man page[s]” for a program detailing exactly how to use it when -h or –help aren’t enough. If a program still eludes you, Internet search and hope your results aren’t just the man page all over again.

Takeaway

The Linux command line cannot be done justice in a single blog post. Manipulating it effectively can be considered a form of art at higher skill levels or on a VM/spare machine you can afford to break. Shell scripts effectively put the computer at its own terminal, and there exist command programs written specifically for this situation. I’m planning on a followup where I go over file manipulation. In the meantime, feel free to look up a cheat sheet and keep it somewhere safe.

Final Question

Are you familiar with the terminal? What assumptions would you say are safe make about people who have only ever used a GUI file manager?

I look forward hearing about them in the comments below or on my Socials.

Nextcloud Soon?

Good Morning from my Robotics Lab! This is Shadow_8472 and today I am pressing on towards my very own Nextcloud deployment beyond a proof of concept. Let’s get started!

Preparing an Account

Last week, I learned that Rootless Podman comes with certain challenges when trying to access a network drive. ButtonMash’s Rocky 8 Linux hard drive is tiny, so I don’t want to use it for storage. That leaves my retired laptop, “RedLaptop” for the job.

I use dedicated user accounts to isolate processes. The first order of business was to create a new account and log in through the Cockpit web interface. I had a bit of trouble when the underlying SSH couldn’t connect because Debian doesn’t like capital letters in its usernames, but the nonexistent, capital-containing username was flushed out while diagnosing user groups per advice on Discord. The account was additionally locked to prevent normal logins via password.

Preparing Containers

I’ve been developing a couple scripts for running Nextcloud on ButtonMash in a pod, so I copied them and the secrets directory (password storage) over to RedLaptop and tried them out. Errors galore! I downloaded the Nextcloud and MariaDB container images, but the older version of Podman (3.0.1 on Debian vs. 4.4.1 on Rocky 8) meant missing features – namely Podman secrets and mounting volumes on pod creation.

The secrets were easy to revert. I just had to remove the –secret flags and reinstate the passwords in surrounded by quotation marks. Unlike best practices in later versions, volumes mounted nicely into their respective containers. I double checked one with

podman inspect <container ID> | grep -i volume

and found references to the correct volume.

New Territory

At long last, I made it to the Nextcloud installation screen where I need to make an admin account. From here on, all I know comes from the little scouting I did way back by using an SQLite database hosted offered from the Nextcloud container as opposed to a more capable one.

I got an error about failing to connect to the database. I found a username with a capitalization error and I didn’t actually have a named database created within MariaDB’s container. But even with both of those fixed, I kept getting kicked back to Nextcloud’s create-an-admin screen.

And here my research for the week runs out of time. MariaDB’s log shows two errors I suspect to be the root issue:

<timestamp> 0 [Warning] mariadbd: io_uring_queue_init() failed with errno 1
<timestamp> 0 [Warning] InnoDB: liburing disabled: falling back to innodb_use_native_aio=OFF

Takeaway

I so want to be done with this project. That is all.

Final Question

I am left without a solution for now. For all I know, it may be low RAM, which I’m already maxed out on for my model of laptop – meaning I’d need to start over again with something else. If anyone has any ideas, I’d be happy to hear about them in the comments below or on my Socials.

Podman-Nextcloud: Climb Shorter Mountains

Good Morning from my Robotics Lab! This is Shadow_8472 and today it’s bully or be bullied as I take another swing at getting my Nextcloud instance even partially usable. Let’s get started!

If there’s one long term project of mine that just loves humiliating me, it’s getting Nextcloud operational. My eventual goal is to have it running in a rootless Podman container with a way to quickly move it to an auxiliary server. My strategy thus far has been to prepare three Podman volumes hosted on GoldenOakLibry (NAS) over NFS while accounting for the speed needs of the MariaDB and Nextcloud volumes with an SSD and vs the capacity needs of the PhotoTrunk volume with a RAID 5 array of HDD’s.

NAS: Network Attached Storage

NFS: Network File System

SSD: Solid State Drive

HDD: Hard Disk Drive

Lowering Expectations

I’ve lost count of how many times NFS has given me grief on this project, so I eliminated it. I moved the SSD from where it was on GoldenOakLibry to ButtonMash, my main server computer. I added it to /etc/fstab – bricking Rocky Linux. ButtonMash is dual booted, so I booted to Debian for repairs.

Rocky’s installation system uses an LVM2 format, which Debian can’t read by default. An LVM2 package exists, and I installed it. LVM2 partitions show up in lsblk as sub-partitions of an actual partition, and it is these sub-partitions that get mounted, for example:

sudo mount /dev/rl_buttonmash/root /mnt/temp

to mount the sub-partition that shows up as rl_buttonmash-root. While I did explore for a quick fix, it’s a very good thing when each side of a dual booted machine can repair the other. Mounting a file system is a very important tool in that kit.

Upon closer inspection, a contributing factor to bricking Rocky was the root account being locked. The computer booted into an emergency mode and got stuck in a loop ending with “Press ENTER to continue…” Unlocking it didn’t get me anywhere when I looked at the logs per the loop’s recommendation, but the command lsblk -f clued me in that I was mounting the drive using the wrong file system type, an error which was soon remedied after I discovered it.

Project Impossible

The move hardly seemed to fix anything as hoped. I didn’t solve much. I kept getting NFS related errors when trying to run the pod, even after moving to a new mountpoint I’d never touched with NFS automounts. I even tried mounting the volumes using hard links pointed at the mounted “data drive” and I still couldn’t get a working Nextcloud instance. Somewhere in my shambling among the apparently limited content available regarding this topic online, I found the following warning on Oracle’s Podman documentation:

Caution: When containers are run by users without root permissions, Podman lacks the necessary permissions to access network shares and mounted volumes. If you intend to run containers as a standard user, only configure directory locations on local file systems [1].

Rootless Podman lacks network share permissions. OK, so NFS out unless I can selectively give Podman network permission without going full root. Until then, Podman is limited to the local disk, and if I’m understanding this warning correctly, mounted drives are also off the table. My plans for a Photo Trunk upgrade may be grounded indefinitely, and with ButtonMash’s Rocky drive being only 60GB, I’m not looking to burden it with anything resembling bulk storage.

Takeaway

The next logical innovation would be to rebuild the project on a computer with more storage. Barring a full makeover of ButtonMash, I do have my Red Laptop as an auxiliary server. I made a new account, but in all reality, this inspiration came after my research cutoff. It’s a project for another week once again.

Final Question

My project directory is messy with scripts to the point where I started a README file. Have you ever had a project so involved as to need one?

I look forward to hearing about it in the comments below or on my Socials.

Work Cited

[1] Oracle, “Configuring Storage for Podman,” oracle.com, [Online]. Available: https://docs.oracle.com/en/operating-systems/oracle-linux/podman/podman-ConfiguringStorageforPodman.html. [Accessed July 27, 2023].

How I would Relearn Linux #2: Blogging

Good Morning from my Robotics Lab! This is Shadow_8472 with another installment of How I would Relearn Linux, a series where I drop tips about the lessons I’ve learned writing about Linux. Let’s get started!

Document Your Work

This blog has been invaluable to my self-studies of Linux. The weekly push has been vital to keeping my various projects alive. If I were relearning Linux, I would highly recommend blogging as one thing I got right early on.

At the same time, another medium might be right for you. The Linux community self-propagates through everything else from videos and books to forums and chat rooms. A private journal would not be inappropriate – as a matter of fact, if I were relearning Linux, I would write for a few months directly into a word processor and buffer it on a hard drive while I research a host, domain name, and blogging software. Whatever you medium or two are suitable to your talents will provide you a resource to look back on later.

Audience and Frequency

Let’s take a closer look at my own blog as an example, Let’s Build Robotics With Shadow_8472. My content is online for the world to see, but my primary audience is myself as I write. I’m of course excited to talk about my projects, but if I cared about having a constant stream of fans jabbering away about me, I would have either paid closer attention to audience building or given up long ago. My main purpose is to give myself a regular push to learn.

The one piece of advice I’ve followed closely is consistency. I’ve posted Mondays at noon (Pacific) with few accidental exceptions since learning to schedule posts. Not every post is my proudest work, but that’s OK. Progress is slow with projects outside familiar parts of my niche. When projects turn out to be much bigger than I judged, I can talk about what’s not working, call it “Part 1,” and hope someone has a solution. If all else fails, I’ve afforded myself the flexibility to switch to a smaller topic when I burn out. It will be there in a month when I return.

Takeaway

This blog remains one of the most important pillars of my continuing to develop my Linux skills. I would totally recommend something similar for anyone looking to learn a technology skill.

Final Question

How do you record your long-term progress?

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

Concept: FOSS LAN Arcade

Good Morning from my Robotics Lab! This is Shadow_8472 and today with a continuation of my project involving the open source game Space Nerds in Space. Let’s get started!

Previously

Two weeks ago, I found Bodhi Linux, a low-weight Linux distribution based off Ubuntu. I used it to compile and run [poorly] a game called Space Nerds in Space (SNIS) on an aged system from a church office.

My Own Space Nerds Distro

I had it all figured out until I had a brilliant idea just minutes before I was sitting down to pen last week’s post. I’d carefully researched and ordered a set of thumb drives to host enough Bodhi installations for a full SNIS bridge on a keyring. I’d have spent a paragraph comparing and contrasting the merits of uniquely colored sticks vs. sticks with both A and C connectors vs. low profile sticks, and a sentence or two about not getting so low a capacity that the case and connector are the major contributing factors to the price (low profile/64 GB, by the way). My project was done except for one small idea: use Ventoy.

Sooner or later, I will update my SNIS bridge, and I’d just as soon maintain a master copy and propagate changes over to the other chips –slim operating system and all– as a bootable .iso disk image. SNIS does not need persistence, so it should be more than happy running out of a live image.

The catch point from last week was in remastering Bodhi. Its official tool doesn’t work in the current version, and so was omitted. I was learning Linux Live Kit and working with its dependencies, but I ran out of time. The afternoon after posting, I coaxed Linux Live Kit into producing an unoptimized image, but I ran out of space on the stick I was working with.

I want to squeeze as much performance out of as little computer for this project as possible. From tests last time, my weak link was memory on the graphics card. Well, how nice would it be if this hypothetical Linux distro didn’t waste system resources on such things as a full desktop environment? I’m comfortable enough on the command line. Assuming I can bully the game into running from the command line, it shouldn’t be difficult to boot straight into the game. If I’m clever, I can have the live distro self-assign a static IP based on a text file sitting beside its .ISO so a router isn’t even strictly needed to play.

Debian/Cage

But I’m dreaming months in advance, and I know it. I made an attempt to slim down Bodhi before switching to Debian 11, the latest version of Debian without a desktop environment (installing over the same small 8GB USB stick from last time). Upon request of various error messages while recompiling SNIS, I had to add packages for git, make, and wget, tools that commonly come with more fleshed out Linux installations.

In the spirit of forward compatibility, I explored Wayland compositors and found one called Cage. Cage will display a single window in full screen and close when no longer needed. It’s perfect for my application… It isn’t in the repository for Debian 11. Debian 12: yes. I went through the effort to try compiling it, made some decent progress while learning about other compilation tools (through downloading/compiling them, naturally), but slammed into a wall of dependencies trying to arrange for a library dependency of something. I got farther with Debian 12, but SNIS wasn’t happy running in Wayland. Furthermore, testing with SuperTuxKart told me I was having issues with keyboard/mouse inputs making it through to programs running in Cage. I eventually scrapped Debian for the short term and went back to Bodhi.

Why just SNIS?

I’ve spent a lot of effort focused on SNIS, but I’ll expand my potential audience if I include a number of open source games. SuperTuxKart (STK) is also ton of fun and has a lower burrier to entry. While it would be nice to compile the latest version of everything each maintenance cycle, some version of STK is in most every major Linux repository.

I spent some time researching other FOSS multiplayer LAN games for Linux without persistence. I found that I had underestimated the trope of “aim gun, shoot enemies.” I’m not opposed to the first or second person shooter genre on principle, but I did narrow my search to exclude graphic violence and the couple horror offerings I also found. I also came across an instance of a game where the engine was open source, but the art, level layouts, characters, and other assets were of mixed licensing that don’t fit with my vision for this project.

Takeaway

I went in another full circle this week. I’ve had some great ideas, but if I expect to have something to show on this project before I lose motivation, I’ll have to arrange my inspirations on a roadmap. For now, I need to focus on learning at least one Linux remastering tool, and game selection/kiosk mode can wait for later.

Final Question

Digging through a freeware list, I found another couple games I’ve played and had a good time with and a few more I’d be willing to try out. What free and open source games would you play at a party?

How I Would Relearn Linux #1: Ventoy

Good Morning from my Robotics Lab! This is Shadow_8472, and today I am starting a new series where I drop a beginner-level tip whenever I have a project change direction last minute. Let’s get started!

Multiboot USB

The biggest barrier to entry for installing Linux is creating your first installation media and booting to it. These days, it looks like downloading a program like either Rufus or Balena Etcher and burning a USB thumb drive with a 1 to 4 GB .ISO file, almost always turning the rest of your 8 to 64 GB USB drive into dead weight. If you intend to continue exploring Linux, it’s easy to get in the habit, and soon you will have a collection of spent USB drives mucking up your search for the one drive you saved to transfer text files or pictures.

The solution is to get a large USB and multiboot it using a utility like Ventoy or YUMI. My experience was with installing Ventoy from Linux, and it was as simple as creating any other USB-based bootable media. Since then, whenever I am instructed to “burn” a .ISO file to disk, I just copy it to Ventoy and it shows up.

What’s more is while I was researching for this post, I learned that it even comes with a Windows installer. As usual, be sure to offload any files you wish to keep as they will be lost while setting up Ventoy.

Takeaway

I consider my Ventoy USB to be the most useful tool in my possession. I highly recommend it for anyone learning Linux.

Final Question

With the entire array of Linux distributions to try out, which ones do you keep around on your master USB drive?

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

Space Nerds In a Tiny Space

Good Morning from my Robotics Lab! This is Shadow_8472 and today I am working on one of my smaller dream projects: a bridge simulator. Let’s get started!

Space Nerds In Space (SNIS) is a LAN game for Linux available as source code hosted on GitHub [1,2]. In it, you and several friends take on the roles of a starship bridge crew manning your stations and going on sci-fi adventures in deep space.

LAN: Local Area Network

I have access to an old church office computer with Windows XP installed. I’m gonna try running it on there. The main site [1] recommends against trying anything less powerful than a Raspberry Pi 4B, but I want an idea of how low the game can go. I’ve set my expectation to “This computer has absolutely no business running this game.”

In old or low-end machines, the weight of an operating system often becomes a significant contribution to resource consumption. At the same time, both low-overhead distros I’ve worked with before (Tiny/Micro Core and Puppy) have specialized package managers, and I’m not up to a self-guided crash course on repositories this week.

My first thought was that I’d prefer access to AUR for an “one-click install,” like how I cheesed it into working on Manjaro. I located an 8GB thumb drive, but the old church computer didn’t appear to be a fan of booting Manjaro. Instead, I researched low-overhead distros which could cleanly install packages from apt. I came across DebianDog Linux which sounded perfect until I learned development had stopped and shelved the idea as a backup plan. Puppy –as I learned– already has the means to use .deb files, so I stashed that as another backup plan in my recent experiences with Puppy, it has to be told to connect each boot.

AUR: Arch User Repository

Bodhi Linux

Further research found me Bodhi Linux, an Ubuntu derivative with downloads as light as 747MB and RAM requirements well under a gigabyte. Its native apt support means access to a large selection of standard packages, which will come in handy when compiling software.

I found my way onto the Bodhi Linux Discord server, where I reported the Arch logo of all things showing up in the installer. After I provided a screenshot from a staged second installation, we figured it was a bug with the installer Bodhi borrows from Ubuntu.

My installation was a success. I found the Moksha desktop maintained in-house [4] to be surprisingly polished, but a bit too flashy for my needs. Were I moving into it as a daily driver, I’d be disabling the animated taskbar icons. The terminal visual bell would also have to go, as I about hear sirens whenever I trip it – and I trip it frequently with my liberal use of tab to complete. I did –however– get around to removing Chromium.

Installing Space Nerds

This was neither my first attempt compiling SNIS nor my first time getting a product out the end, but it was my first time successfully doing so manually. I installed git and cloned the SNIS repository. I passed up my previous attempt by using util/install_dependencies as opposed to finding/installing dependencies manually. My first attempt at opening the compiled program I was… met with a solid green window and the computer crashing hard. I never figured out why, but on attempts where that didn’t happen, I had to wait through a 5 minute, 30-40 second loading screen where I realized later how lucky my second attempt was to have not ended in a massive flicker between black and the desktop – and this second attempt ended in a display of erroneously rendered polygons after a few minutes of play.

I inquired as to SNIS’ minimum system requirements on GitHub [2] and smcameron, the game’s creator, kindly helped me get it “working.” You can read the full discussion here: https://github.com/smcameron/space-nerds-in-space/discussions/333, but to summarize: I provided a number of logs documenting various error states and we figured my graphics card was running out of memory, as I didn’t get a light show when using lower resolution planetary textures.

Takeaway

This computer has no business running SNIS, yet it runs – if only barely. My fun this week was in coaxing this game to running on such an outdated system.

Final Question

What is your go-to low-overhead Linux distribution?

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

Works Cited

[1] S. Cameron, “SPACE NERDS IN SPACE,”github.io, [Online]. Available:https://smcameron.github.io/space-nerds-in-space/ [Accessed May 24, 2023].

[2] S. Cameron, “space-nerds-in-space,”github.com, May 21, 2023. [Online]. Available: https://github.com/smcameron/space-nerds-in-space [Accessed May 24, 2023].

[3] Bodhi Linux, “WELCOME,” bodhilinux.com, [Online]. Available: https://www.bodhilinux.com [Accessed May 24, 2023].

[4] J. Hoogland, “Introducing Moksha Desktop,” github.io, March 3, 2014. [Online]. Available: https://mokshadesktop.github.io/Hello-World/ [Accessed May 24, 2023].

SimCity 3000 on Linux Using Lutris

Good Morning from my Robotics Lab! This is shadow_8472 and today I am exploring the feasibility of running SimCity on Linux. Let’s get started!

Short Answer

SimCity 3000 Unlimited refused to run for me. I suspect DRM. I tried the earlier SimCity3000 (1999) on PopOS, EndeavourOS, and Linux Mint through Lutris with progressively worse results. Of note: I found it important to enable dgvoodoo2.

DRM: Digital Rights Management

Have fun. Good luck. You’ll need it.

My Attempts at SimCity3000 Unlimited

While digging through Garage Space, I happened across a copy of SimCity3000 Unlimited. This city building game of yesteryear puts you in the role of mayor and city planner of a city. You must balance zoning, manage public streets, power, and water service, clean up after disasters, and more as you fight to keep your budget in the black. The case says it’s for Windows 95/98, but I remember it running at least as recently as XP.

Gaming on Linux has a fascinating history. In short: the userbase will sometimes “cheat” Windows games into running through the WINE compatibility layer, though it doesn’t always work. Lutris is a multi-game launcher that makes WINE a lot more approachable. I figured there would be no harm in popping the CD in a drive and trying it out. Like all my previous attempts to install a game manually in WINE, I had little-to-no luck.

My efforts were soon split multiple directions. DosBox is a DOS virtual machine. I found a fork called DosBox-X, which claims to run Windows programs up through the 3.x era as they’re basically just fancied up DOS applications. Windows 95 made some major additions, but was still built on DOS until XP dropped it as a base. Consequently, if our Windows 95/98 CD’s/product keys were to show up, they could be installed into DosBox-X and we could again play our period games.

Garage Space was not so kind. With help, I located a bucket each of 3.25” floppies and CD’s. A further CD binder turned up full of drivers, but no Windows 9X install disks. In one of these caches, the original SimCity3000 turned up.

My Attempts at SimCity3000

This earlier version of Maxis’ once flagship game installed nicely on Derpy Chips running PopOS, but failed miserably at anything past the main menu until I turned on dgvoodoo2 under Lutris’s “Runner options” under the game’s configuration popup. I found it very playable, but sound effects were only in my left speaker channel and I got a nasty buzzing sound in the right speaker/headphone if I turned off the music the way I preferred to play.

Moving on, I attempted a more advanced installation on my Upstairs Workstation, where I created and mounted a disk image on my hard drive. This configuration had a better response time, while still requiring the actual CD to be mounted. Unfortunately, there was a serious graphical issue that affected the main menu, all textual popup boxes except the No-CD notification, and the in-game sidebar sub-menus. It’s like animation layers render black instead of clear. The main menu and text boxes mostly look strange, but are perfectly usable. On the other hand, the in-game sub-menus render as black bars and only show their buttons when hovered over. This arrangement might work for someone who is desperate.

Additionally, I tested SimCity on my father’s computer running Linux Mint. The game would not even install to the prefix; a usable, but slightly graphically glitched launcher was all I got. No matter what I tried on any system, I could not improve its respective base issue. In a last-ditch effort to get it working for my father’s computer, I attempted to copy over my WINE prefix from Derpy, but when I found its debug and pasted a prominent error into a search, I learned how WINE’s Intel integrated graphics support is incomplete and unlikely to ever see completion.

Takeaway

This is a progress report. At present, I believe my issues have to do with AMD vs. NVIDIA vs. integrated graphics. I don’t know if I will follow up or not. The main conversation online around SimCity3000 and WINE is focused around the edition from GoodOldGames. The Unlimited edition on CD has practically zero heartbeat – probably because its DRM is incompatible with WINE, like many games not on lists maintained by Lutris or PlayOnLinux (another WINE tool I tried out, but didn’t remember while weaving my narrative). I also learned of a Linux port of SimCity3000 [and Unlimited] by Loki Games through a script for getting it to run on “modern” versions of Linux as of a few years ago, but it went bankrupt reportedly due to piracy.

Running Windows games on Linux is a puzzle. Your particular one may come pre-solved or there might be pieces entirely missing. I am very proud of my first-ever successful “manual” install, even if I used a tool and it still isn’t perfect.

Final Question

Do you know of a good place to learn WINE? Have you had any success playing SimCity on a Linux system?

I look forward to hearing from you in the comments below or on my Socials.