Minecraft Server Optimization Part 1: G1GC

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I am working on my Minecraft server. Let’s get started!

A few months back, my sister put together a server idea she called Creepers ‘n’ Cream. It runs on Vanilla Minecraft, but has a few datapacks that offer us little gameplay changes, like mob and player heads, Elytra drop on a rematch with the dragon, and a tool for rotating some blocks in place. All I know is that she got the idea from Hermitcraft, a well known Minecraft server for YouTubers and streamers. We don’t run all of their packs.

I covered my process to get the server machine ready to host Creepers. it provided me with about six weeks of content, and in the end, I accepted MineOS as a much easier alternative to a practically custom-built Linux distro.

Once I got MineOS behaving with 16 GB of RAM open to it, I set it aside for a while. At one point, it had been running more or less stably for about two weeks without a reset when a couple players showed up unannounced. We had them contained in a house in adventure mode, so they were more or less contained. The server crashed unceremonially by a game tick (normally 1/20 of a second) lasting for a full minute. After a peek into the accounts’ history, it looked like they were hackers.

I don’t remember the second big crash all that well, but a couple weeks ago, it crashed the same way for a third time. I started doing some research, and found several places talking about garbage collection.

For the non-programmer, there’s a part of a program’s memory called the heap. If the heap ever overflows, the program crashes. As the program runs, objects are put into the heap when needed, and when they aren’t useful anymore, the program marks them as garbage. Every so often, a garbage collector comes by and tidies the heap up so it has more room for new objects. This takes time away from the program you want to be running. By default, Java collects all the garbage when the heap is full. Unfortunately for Minecraft, this causes a noticeable lag spike when garbage collection (GC) happens, and the bigger the heap, the longer it has to wait.

A number of posts I found in my research sung the praises of G1GC (Generation 1 Garbage Collection) for use with Minecraft. From what I gathered, G1GC focuses on making sure unused objects don’t clutter your heap for any longer than necessary. By having the collector come by frequently, it can collect in several short bursts too fast to notice at the trade off of taking a little longer overall.

Somewhere, I read a G1GC guide or two that suggested allocating all your RAM to Java when you start the program. Bad advice for default GC. The server was running a lot worse for a week before I reigned the minimum from 15 GB back to 4 GB.

Farther research into this theory led me to a programming Discord. Someone there informed me I almost certainly had a memory leak. On a trip to Third Workshop, I learned that even though two or more programs may be free from memory leaks their collaboration may introduce them.

I eventually switched over to basic G1GC. Where default GC would require daily restarts to remain in peak performance, G1GC kept the server stable for three days until planned maintenance took it offline.

In conclusion, I recommend all Minecraft server operators consider trying G1GC.

Final Question: Have you ever broke something by following poorly understood advice?

Minecraft Server Optimization Part 0: A brief history

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I am turning my attention back to the Minecraft server I’m trying to hold together. Let’s get started!

Quick Recap: I delved deep into MicroCore Linux, learned a ton about Linux’s underbelly, then moved on to MineOS to host my server on a computer I’ve named ButtonMash.

I have run Minecraft server software for years — almost as long as I’ve been playing Minecraft. Ever since I saw the Last Airbender plugin for Bukkit back in 1.6. All you had to do back then was download the Bukkit server jar, put your plugins in the right folder, and copy some text in a batch file you run. If you want to invite friends over for a visit, you need to open a port on the router, or ask your admin to do so.

Depending on the plugin or plugins, configuration could be a challenge. I already knew a thing or two about in-game command lines from playing a Sonic fan game I played previously, so it wasn’t that new of a concept at the time.

My entry-level skill set for Minecraft servers was rounded out when I learned to update. Modded servers need time to update after the official release, so I learned how to fix my launcher settings to the correct version early on. I learned how to edit the startup file so it actually works, and that was enough to get me going for a while.

Even back then, knowing what went into making a simple wold made me appreciate how more elaborate servers were set up. I spent a while on someone else’s server, where things didn’t go completely smoothly. There was a childish griefer who possibly had his real name for his account, and an overagressive profanity filter was blocking perfectly innocent words that come up on a daily basis both in-game and on a university campus.

A world or two and a couple family members with accounts later, I furthered my craft some more. I remember running a family server on quad witch hut seed in a then-new amplified terrain world. We dropped the Airbender plugin for this one over an infestation of cactus blocks spawning at the same spot in every chunk just above sea level. We kept the seed, but when an update expanded witch huts’ bounding box, I got in there and manually updated the NBT data on our old huts.

At some point, I got my father playing as well. One family server I think he was on, I learned a painful lesson about backing up. We had a nice, little cove we were all building in. I made a note to backup the whole server in the morning. Someone found our IP in the night. He followed our nether tunnel from spawn to our cove, then raided our stash of gunpowder and sand. The damage from his TNT spree was too much to bounce back from, even with creative mode to speed repairs. The next server, we started using spectator mode to contain new players until an OP can let them out.

Another tool I learned as a more journeyman server sysadmin was Spigot. After Bukkit was shut down, Spigot became the go-to unofficial server provider. The only catch: You needed to follow some more dark, spooky instructions to get your .jar file by compiling it. The hard part is setting it up the first time. There are a lot of steps, and a brand new server operator won’t know if anything is working until they get their working .jar file out the other end. Updating? Good luck remembering where to start in that textbook of an instruction list, because most of them only need to happen once!

This server is getting me to push my Minecraft server sysadmin skills to the next level. Somewhere in my history, I learned how to allocate more RAM to improve server performance, but with more friends frequenting than just immediate family members, I want to make this experience the best I can offer. One of the biggest possible improvements a sysadmin can do is to leave the host machine alone. At that point, you need to start thinking about hardware and operating system, and up to this point, it should be fairly easy for an aspiring sysadmin to grow their trade without crossing their skills over with related fields. Tutorials abound for focused subjects, and one can look up a subject and gain knowledge. Not so, for me anymore.

It feels like I’m crossing some kind of invisible line — or a spread out boundary — where I have been following the footsteps of well-known trails so far, but I have come to a path less followed. People can only write tutorials about their experiences, and as you advance in a field of study, you pass up many of the people you’ve learned from.

While I am not blazing entirely new trails here, I am feeling a little starved for variety of people to choose instruction from. My only guess is that most people who make it this far have either moved on to other pursuits, or are tending their own servers, some of which are monetized through dues or donations. All I want right now is to run my server as smoothly as possible, and I’m going to need to learn a lot more to succeed.

Final Question: What are some stories you’ve gotten over the years while honing your trade?

Family Photo Chest Part 3: Tools of the Trade

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I am taking all my progress so far and discarding it. A lot has happened, yet not much at all. Let’s get started!

The past several weeks have been covered by me getting so far ahead on my Minecraft server, now called Button Mash. I managed to maintain a backlog of completed posts, but for reasons I will get into, I’ve run out, so here I am, “live” again.

This project has undergone a major overhaul in concept. Instead of a ready built solution, I will be facing material in a class I was unable to complete due to incompatibilities with the physical classroom environment; I will be building my site from scratch.

So far, it doesn’t look like it will be as bad as I thought it would be at first. I am going through the Flask Megatutorial by Miguel Grinburg [Link to first lesson]. As of this writing, I am on part 4 of 23. Yeah, I’m going to be at this for a while as I build up my skill set. Unfortunately, I doubt anyone would have fun reading half a dozen blog posts about following tutorials week after week, and I would get bored trying to keep them interesting. So, without much else I can do to keep things interesting, I think this project will be more of a monthly feature until I finish the tutorial. Don’t worry, there will be plenty of other aspects of the project to cover.

My main focus this week is covering the tutorial. I really do need to take it slowly, one lesson at a time until I finish the little “Microblog” project being built and I probably won’t ever deploy anywhere. The process of copying everything reminds me of when I learned Lua. One of the best ways to learn a language is to transcribe a complex, known working program.

The tutorial assumes you are using the command line, but I am using the Pro version of Pycharm. Incidentally, whenever the tutorial gives me step by step instructions for working with the command line, I need to stop and evaluate it for the IDE (Integrated Development Environment).

One of my earliest problems involved trying to get Microblog to work with Flask. That task was trivial, as there’s an option for it in the new project window.

Another, more difficult task was getting Microblog to run when I went to test it for one of the first times. It had two hard-coded URL’s to use, but only one was in seemingly in use. I ended up deleting a default “Hello World” file that was giving the false success. With the decoy out of the way, everything stopped working. The proper files under development were moved to where they actually belonged.

One of the things I did to make it work was a mistake. I don’t know why it worked or why it broke, but whatever I did, I addressed it properly later on, and only just recently cleaned up the mess I made when trying to revert a very early change.

All of my stubborn problems so far have been with the terminal/API differences. At one point, I misunderstood how things were supposed to be arranged. At another, I was unable to read the filesystem correctly, so I actually moved a few files where they should have been. Naturally, Microblog lost track of where they were.

Final Question: What is your favorite or most effective way to learn a programming language?

Family Photo Chest Part 2: First Milestone

Good Morning from my Robotics Lab! This is Shadow_8472, and I am coming right off writing last week’s post because I have more to report, and it made a nice stopping point where I left off. Let’s get started!

I started work on my first prototype during my Third Workshop visit mentioned last time. It’s pretty chill there, so I have time to absorb what I’ve read as I read it slowly.

Philomena is on a Git repository, so I did some reading up on it the week before by going over some basic tutorials. I don’t actually remember much, but I will recognize stuff faster when reexposed to it.

As a side note, something seems to be failing on my laptop. I don’t know what, but it isn’t always booting on the first try. It took up several minutes of my visit to the workshop as it went through its battery of tests. Interestingly enough, the charger passed, even though I know for a fact that it won’t charge the battery due to a failure with the power port.

Git repositories have a special file that displays when you visit their web page. The first several times I looked through the one for Philomena, I had no clue what to do. This time, I recognized a number of commands to run, but require something called docker and docker-compose, neither of which come preinstalled on Raspian, apparently.

In the meantime, Git offers two ways to “clone” or download software contained in repositories. Recommended is over https, which almost all websites use by default now, and the other was over SSH.

Fun diversion, I had a really hard time with PuTTY when it kept complaining about Blinkie’s RSA host key whenever the IP changed. In the end, I hear most SSH clients don’t care about the IP as long as its host key is on a list of known hosts. PuTTY, however, saves host keys to each hostname unless unavailable, as in my case, then it uses the IP.

In light of the sideshow PuTTY put on for me to play through, I wanted to try downloading Philomena over SSH. When I first connected from Blinkie, I got a warning about an unknown host. The key was actually pretty easy to look up and verify. I put Blinkie’s SSH public key up there, but ran into a permission wall. I used wget instead. I later confirmed my heavy suspicion that wget operated on HTTPS and found it also supports a number of similar applications.

With the file downloaded from Git, I started building the tools I need to use it. I found a nice, command-by-command article on how to install both docker and docker-compose aimed at people who are not familiar with the command line. I followed the instructions, but not to the letter: I used Nano instead of vi when I needed a .txt editor, and I chose to use sudo instead of messing round with permissions and possibly introducing a security risk I don’t fully understand.

Docker went on fairly smoothly. They even have a program to verify that everything is working. Docker-compose gave me a little trouble though when I forgot to keep adding sudo.

Situation update: I got something to work. I’m operating blind right now. All I know is that I issued a command and was able to use a browser to navigate to Blinkie’s local IP with a port mentioned a few times during setup. I found what looked like a representation of Blinkie’s file system, but I’d need to double check. One thing I do know: whatever I was looking at went offline when I stopped it from the SSH terminal.

Update 2: I’m not sure where this style of updates came into happening, but I’ll go with it. I’ve done a little more research into Docker, and it looks like a sort of virtual machine –but not quite– and I think I logged into that VM earlier. I still have much to learn.

I’ve found several video series on YouTube documenting Docker and Docker-compose. With enough luck, going through some of those will let me understand what I’m at least looking at.

Update 3: Things have developed in the month or so since I went back to my other projects. I just need to call this a section and get back next week.

Final Question: How do you usually feel when returning to a project after a lengthy hiatus?

Family Photo Chest Part 1: Project Outline

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I am beginning a new project I hopefully won’t burn out on. Let’s get started!

Twenty years ago, my father was tasked with scanning and distributing the contents of an old sea chest that used to belong to his father. Fast forward to the present day, and the project hasn’t even started. I’ve been building my skills the last couple years, and I think I can do one or two better than was originally planned.

Timeline: I’m burned out after three intense weeks on my last project. I’m two weeks ahead, and I plan on keeping that lead for now. After two weeks of this project, I want to go back and try getting the official Java on Micro Core. With any luck, this post will come out when that’s already happened.

I’ve been planning this project for a while now. Nothing to make a whole post about, but important nonetheless.

My intended finished product is as follows: Family members will be able to go to an IP address in a browser, search by a system of tags, and navigate to a specific scan’s page. Groups of pages will make scans of books easier to find, and comments on each picture will only make identifying people in each picture easier.

During my initial investigations, an acquaintance recommended Philomena, a Booru-style image board that fits the description almost perfectly. Their code is free and open source, and the license is compatible with what I want to do.

On the hardware side of things, I have a few prototypes milestones planned out.

The first milestone will be declared when I can manually upload an image and view it on the site from a separate connection. I am planning on prototyping on Blinkie, though almost any computer should do.

The second hardware milestone will be when I have the pictures stored on a RAID array for redundancy. During a visit to Third Workshop, I heard that these can be tricky to do myself, and there are cheap, reliable, preassembled units I can use.

The third hardware milestone will move the software off Blinkie and onto a new machine I want to build myself. I want to remove the innards of whatever RAID setup I end up getting and arrange them into a custom case with a different Raspberry Pi serving as the motherboard.

The main event of the project is actually scanning pictures for safe storage. I know for a fact that disorganized files are discouraging to sift through, so I want to write a script to handle scanning and uploading files. It will have functionality to define groups of pictures as they are scanned, as well as handle bulk tagging.

Skills I expect to learn in the near future: composite 3D printing with ABS, a new programming language, and a better understanding of Git and any other software I need to get Philomena running effectively. As of writing, I have already started work on next week’s post, so I may be cheating a little on that last detail.

Final Question: Do you have any decades old projects that just never seem to get any attention?

Product Review: Off Brand Joystick (PXN-2113 Thunder Pro)

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I am doing another technology review: this time a joystick. Let’s get started!

Kerbal Space Program is a rocket simulator that’s been out for the best part of this past decade. It tackles the the otherwise daunting subject of rocket science and provides a sandbox to explore the subject on an intuitive level, often leading you headlong into thinking about real-life contingencies. As with many other similar games, it provides a highly customizable control scheme, including joysticks.

As with the Steam Controller, I am only familiar with one previous joystick from when I was younger. Any comparisons will be against that one unless where otherwise stated.

Now that it’s been a while since I wrote the last three paragraphs, and the replacement has arrived, I need to actually write the actual review.

Joysticks these days have almost zero competition. If you want a particular shape, your selection will be very narrow. Mine was between the $50 junker I got, and the $30 Logitech 3D Pro. You can find pictures online of both. I didn’t like Logitech’s high-contrast asthetics or its throttle shape, so I went with the more expensive off brand model.

My first in-person impression was the box. Chinese branding covers it. If there’s both English and Chinese, English is given secondary treatment. While I may be a little off put by seeing another language getting preferential treatment, it just means I am not part of the primary target audience, and I have a more understanding attitude if it’s not being sold of a local store shelf.

If boxes could speak as you opened them, this one would say, “Here, I got it here. Be glad it’s in one piece,” whereas the Steam Controller box would have said, “Here, let me be a treasure chest to keep your new friend safe.” (note: I do not consider the Steam Controller a friend. The quote is just what I imagine its box saying).

Safety insert written after the fact: while I was packing this thing back up for a return, I noticed one place where English was, in fact first: the suffocation warning on an internal bag. What was concerning was that it was in five or six languages, all of them using Roman characters, like English, Spanish, German, French, etc.

The overall form factor of my old joystick and this new one is basically the same: A three axis stick with buttons and a hat switch on top, with some extra buttons and a throttle down below. This new one has a fifth button besides the trigger up top and a total of six down below, which are sure to come in handy with the many, many shortcuts I’m bound to want handy while playing KSP. The new one has some kind of vibration feedback, but I haven’t felt it go off when blowing up rockets. The grip felt like it might be made for smaller hands. One final note that you can’t see form the pictures: there are four suction cups on the bottom instead of those pads that eventually come off.

I started up KSP and started configuring my controls. If the kerbals were whimsical before, now I would describe them as hilarious if I were not the one playing the game. All three main axes were just a little off center, resulting in my rockets listing, toppling, and finally spinning out of control when the reaction wheels only had a single command pod to worry about.

One of the things I remember from playing with a joystick was going into the driver and “playing a small game” to fix it in my “big game.” I now know the words calibration. Included with the PXN Thunder was a small CD containing the driver. I stuck it in my disk drive, made a face at the Chinglish phrase “soulmate to players,” and could not load it because of unsupported characters in the file path.

Undeterred, I pulled the driver file into my downloads folder and removed the offending Chinese characters. Launching the installer, I was presented with a window without an English word in it. Useless to me.

With no way to calibrate, I went back to KSP. My one complaint about the controls menu is that I have to back out all the way to the main menu to access it. Nevertheless, I was only able to keep using my new control scheme by increasing the deadzone. It took a couple days to get the bulk of my controls ready for use. Even then, I decided to wait on setting everything up until I got the new joystick.

I’ve been using the joystick for a couple weeks tops now, and it’s already showing wear. The accessible portion of the throttle has been dying from the middle out. As of writing, I think I can access about the bottom quarter and the top sixth. Additionally, one of the buttons on the base isn’t coming out all the way anymore. I might also point out that that extra button on the top, labeled 2, also doesn’t have anywhere near the click that any of the other buttons have. If anything, it’s been moved to a spot on the base right below one end of the throttle. Is it supposed to do that? I have no clue, but there aren’t any buttons there.

In conclusion: Do not buy this product if you can’t read Chinese. Even if you do, consider getting something that will last longer. You’ll end up saving money in the long run because you aren’t buying as many replacements. Neither the vibration feature, nor the otherwise circular throttle was worth an extra $20. The case is entirely plastic, in some parts it feels extra cheap. If I were given the Steam Controller and this thing and a list of their respective prices, I would have guessed this was the $5 one and the Steam Controller was the $50 one. My only guess is that this product was hit hard by American tariffs on Chinese goods. It is going back.

I would give this a one star out of a possible five.

Final Question: Have you ever bought something with a higher price tag expecting more quality, only to be let down?

The Steam Controller: My First Impressions

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I am reviewing the Steam Controller. For anyone who cares, this post is not sponsored. Let’s get started!

I first heard about the Steam Controller in detail from a YouTube video where the reviewer said it was an amazing controller after you persevere through the configuration process, something most reviewers at the time were not taking the time to do before unloading their frustrations into a review. With that said, this post will only be a report on first impressions, and not a final review.

The moment I saw this supposedly brilliant controller on 90% markdown at $5, two thoughts popped through my head: ‘I might as well see what the fuss was about a few years ago,’ and ‘They must be moving inventory with a discount that steep. (The controller itself is discontinued). After buying, I did a little more research and found that it really doesn’t seem to like running outside Steam, but there is an open-source stand-alone driver for it that sounds like it could be a project.

I don’t have a dedicated gaming budget, so when I’m considering a new game, it needs a lot of replay value or to be culturally important to me in some way.

I’ve only ever owned a GameCube and a Wii, so I’m not well acquainted with any console controllers. I have done zero research into relative prices, so if you were after how it compares to similar products directly, look elsewhere.

Shipping took way longer than I am used to with Amazon. While I waited, I researched a little and found the thing needs Steam open to run correctly. I also found an open-source, stand-alone driver. It’s primarily aimed at Linux, but fiddling with that sounds like an educational experience. I might even like to program it to respond to Morse Code when the on-screen keyboard is up.

The unboxing was a little exciting, but reinforced my expectations to not fall in love with it right away. While the box itself felt like a paper treasure chest, the loot inside did not feel like it was worth any $50. It came with a pair of batteries, a dongle, and a dongle stand. Digging in deeper, I found a cord hidden in a blue sleeve at the bottom of the box, under the “paper foam” support. I had a little chuckle when I read that. Basically, this is a classy box that politely asks you not to throw it away.

Plugging it in, the Steam Controller feels just like a rearranged mouse. Courser control is handled with a circular touchpad on the right, but it drifts. Triggers handle the mouse buttons while the scroll wheel is on the D-touchpad on the left. Don’t expect the D-touchpad to work correctly right away. I found it scrolling the direction I wanted about 64% of the time on the first try, but circling your thumb around the outside seems to work more reliably. I don’t know it it’s learning curve or driver issues. Back and forward are on the underside of the controller on buttons I have no idea what they are called. The bumpers, analog stick, and letter themed buttons each seem to have mappings to keyboard keys.

The on-screen keyboard or “soft keyboard” is accessed by pushing the analogue stick. Each of the two touchpads are then mapped to their hand’s half of the keyboard. there are all sorts of shortcut keys on the different buttons on the controller. I won’t say I’m a huge fan. It is definitely something you can get used to –I am using it for this paragraph, then I am going back– but it isn’t like any keyboard I have ever used before.

My assessment is that the soft keyboard is mainly for when you want to enter short strings of text. Again, it’s something you can get used to, but the multiple ways of doing a few actions mean it’s simultaneously harder to figure everything out, and easier to adjust to a scheme that works for you. It’s faster than an on-screen keyboard with a mouse, but slower –at least without practice– than a smartphone or tablet on-screen keyboard.

In summary, it’s a novel controller with potential, but I am in no position to pass judgement on it. I look forward to learning about hardware drivers with this unit.

Final Question: Have you ever written custom hardware drivers before?

Minecraft Server, Week 6: Press Start

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I almost posted one of my backlogged posts, but I managed to pull together something to continue this project one more week. Let’s get started!

I don’t know where to begin on this one. Last week, I left off with reinstall after reinstall, trying to fix some error I kept seeming to get. I gave up after wrecking my bootloader during one last attempt to fix everything, forcing the machine to depend on booting to live media, such as my Puppy Linux CD. I stuck around to determine that Ubuntu wasn’t accidentally nuked alongside Micro Core, so I was at least partially appeased on that front.

Sunday came and I thought I would try one more time. I had done some research on GRUB 2 (GRand Universal Boot Loader). Boot loaders are programs that take charge after the BIOS select a drive to boot to. They are in charge of starting the operating system. GRUB is designed for environments with more than one OS, like the one I seem to have ended up with. It is worth noting that GRUB and GRUB 2 are two different boot loaders that serve the same purpose, they both refer to themselves as GRUB, but some places say you can get in trouble if you use support for one on the other. From what I can tell Arch Linux is one of the few distros that use the first one.

I started up Puppy Linux and suffered while trying to find the terminal. That little distro does not follow many of the conventions I’m used to as is! Bad dog! I researched how to repair GRUB and when I looked in my MineOS drive, I found… what looked like a fully functional boot loader.

Annoyed, I told the BIOS to boot to the old SSD before the HDD with the bricked GRUB install. It worded. I was able to boot to MineOS, but I still got a corrupt terminal pseudo-window interface: the configuration console. Sometime after I seemingly bricked my machine, I had the thought that I might not have really had an error to fix all along. I was hoping everything was just one unknown away, and that was it.

MineOS is fairly minimal on the host machine. It really shines in its Web Interface. You connect to its IP with https at port 8443 and sign in using the account you set up during your first boot. I tried that and got a page that got stuck loading. Different computers didn’t help either. I gave up and resolved to put the finishing touches on a stand-alone post I have written after pinging my contact with a picture of the error message and corrupt-looking screen I was having trouble with.

Hours passed, and I eventually got a celebratory reply of all things. I decided to humor him with one last attempt on connecting to the previously tried IP and port. It worked. I seemingly didn’t do anything differently, but it worked on me. I went over to the other towers I had previously tried it on, and it worked on those. It did not, however, like Android Firefox on my tablet, but the browser built into LastPass was accepted.

About this time, I investigated one of the features of MineOS inherits from its parent distribution, Turnkey Linux: Let’s Encrypt. Let’s Encrypt seems to be a free SSL certificate authority, if I got my terms all correct. If you already know what you’re doing or are following a set of instructions and don’t care about learning, you can reportedly have one within ten minutes. The only issue for me was that the application script gave me a bit of a head scratcher. It wanted a domain, and I didn’t know what to put. In the end, I figured I wouldn’t be exposing the login port to the Internet anyway, so I can wait on setting that up.

The web interface itself is well polished. I still don’t know what all I am looking at, but it is a whole lot easier to behold than a command line. Exploration is also much easier. I set up a test server, trying to get something going on a port other than 25565, the default Minecraft port, but some diagnostics and research later, and it looks like part of the Web Interface’s design principals exclude it from being able to open additional ports, mainly that not all operating systems it can possibly be installed on keep track of open ports the same way. I suppose that keeps the dabblers contained in a field of relative protection, leaving advanced use to more seasoned computer users.

I moved my test server to the default port and had a volunteer try again. It worked, and this time when I expected it to work.

MineOS has an import feature that’s supposed to be fairly smart when it comes to importing archived servers. .ZIP files were confirmed, but I wanted to feed it a tarball and see what would happen.

I took the server of interest offline and –very important– made a copy separate to any backups I may have had. I then started weeding out things that wouldn’t make it over to MineOS, such as the WorldBackups folder, the start script and its backup, and copies of the datapacks we are running. The tarball came out to 1.9GB.

Transportation was a hassle. I didn’t have the patience to set up SSH correctly, so it gave me a warning if I tried to copy. The old host machine, my father’s computer running Linux Mint, didn’t have an SSH server on by default, so I couldn’t grab it from the new server. I tried my 1TB external drive, but when I finally got it mounted, it was read only, likely because of the way it was formatted. Two additional USB sticks were too small, but I could get it onto an external hard disk drive we have around with plenty of room.

Issues persisted. The MineOS terminal did not want to mount my storage device, and when it did, it wasn’t polite about where it put it. I still don’t know where it was hidden, but one search did turn something up I know for a fact was on the external HDD. For a few actions, like mounting/umounting or listing the contents of some directories, I required root access, but sudo doesn’t look to be a thing here. I used the su (substitute user) command to switch to root, something that should never be done lightly. I even tried booting to Ubuntu and manually copying the .tar.gz file over, but I had some kind of error I have no clue how to address.

In a frustrated fit of doubt, I suggested I may just move the hard drive over to my father’s machine and copy it over to the import directory manually. It actually sounded worth a shot, so I did it. It worked.

I booted the server machine and found a file all ready to import. I set it up, and had a volunteer log in to a brand new world– It was supposed to be the preexisting world. I ended up moving the drive back over to my father’s computer only to discover that it had basically unpacked my improperly compressed tarball and stuck a new server at the root.

I was not pleased. I manually moved the different elements over to the new hard drive and saved each piece. Not all parts had counterparts. I kept the MineOS exclusive files intact, while grafting in the original server’s files. The World file was spelled world (lower case w), but the hardest element was the properties file. For that one, I actually had to evaluate it line-by-line.

Finally, after six weeks worth of work, I had the server on its own dedicated server. I started it back up, and had my volunteers examine the world. So far, all systems appear normal. I plan on keeping on its original Minecraft version for at least a day and I want to make a restore point or backup or whatever they call it. I just need to learn the MineOS Web Interface.

I learned a lot in this project. If it weren’t for this blog, I would likely have given up long ago and just hosted it from my own machine. If it weren’t for my time in MicroOS, the last push I made could have easily have taken two or three more weeks. I’m glad it’s over in time for New Year. And now, I present the newest member of my little computer family: ButtonMash!

Final Question: There are a few details left to polish, but I do not plan on covering them. Do you want me to change my mind?

Minecraft Server, Week 5: MineOS

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I am finishing this project one way or another ™. Let’s get started!

I’m told that when I encounter a problem and a short, easy solution, I tend to keep tunneling on through the mountain until I break out the other side.

Project history: I spent two weeks generating four weeks worth of content, and now I’m back after two weeks of working on other stuff, and I’m ready to make it work. Somehow.

I came back to Micro Core and tarballed my progress and took another look at those Oracle Java install scripts. The more user-friendly looking one looked to be only for Java 7, and I need Java 8+. The other one wasn’t too hard to get working. I got the .tze and some kind of file with legal in the name. Both went in tce/optional, and… nothing. No successful install, no error messages, just nothing. I reached out to my Micro Core contact, but he was busy with other things, so I decided to change directions entirely.

I will say that in my experience with Micro Core, I mined up a lot of valuable knowledge, but it is time to be water and flow around the mountain.

Enter MineOS.

MineOS is toted as so easy, you can have a proper server for yourself on old hardware, even if you don’t know what you’re looking at when facing anything past what you learned by Kindergarten. I’m sure this will work.

I took my target machine into Third Workshop — mostly so I could have a spot to work without the normal household chatter. I also discussed what should be feasible in terms of my next big project. Before I left, I grabbed a nice, Minecraft grass green DVD to burn, as the MineOS site didn’t mention it working with anything else when dealing with physical hardware.

And my problems began. I left my tablet at home when I sometimes pace around the room with it while continuing to research. When I got there and had everything set up, I put the DVD into my laptop drive and spent several minutes trying to figure out how I was going to burn the MineOS ISO. My go-to tool I thought was installed appearently never made it onto my laptop, and my virus scanner was suspicious when I tried downloading a tool to help with the procedure.

I turned to my target machine. As a dual booted system, I can work on one hard drive while keeping the other safe. I booted it to Ubuntu and looked up a Linux tutorial on how to burn a *bootable* disk, as it turns out that not all disk burners can do that. A short tutorial mentioned a tool called Brasero I could use. It should start automatically when trying to burn anything.

A quick search told me Brasero was not installed, so I had my computer apt-get update. Twelve minutes later, it said there were a number of errors. The repositories must have been having issues or something. For some reason, I tried updating again, to similar results. I moved to my laptop and started writing this blog post, introducing the subject. Might as well use the time I have. When that was done, I told it to install Brasero, and the installer spat back an error, saying it was already installed.

I used a microfiber cloth to clean the DVD, as it looked like years on the spindle weren’t exactly the best for it. I burned it and it booted nicely to an option to install or run a live CD. I told it to install, and was given a command line error code I hardly recognized. The thing didn’t even act like it had the CD drive mounted after boot. That or it didn’t want to give it’s boot media up.

A new external hard drive came to my rescue. I moved the files that came with it into a folder on my laptop labeled as bloatware and used a utility I did have on my laptop already to write the installer to my device. It seemed to work just as poorly.

After I got home, I went to continue working on it, and I forgot to move the keyboard and mouse back to the active tower. As a result, I ended up booting correctly to the setup screen. It was only at this point that I recognized the installer as a fancy terminal program that only looks like it’s in something resembling a window. The clue was from a few strange-looking characters on the ASCII table that looked like some sort of boarder.

I wend back and forth over the machine, formatting and reformatting its poor, old 60 GB SSD. I had trouble with GRUB (GRand Unified Boot loader) not installing, so I had a stint of trying to tie into the one on the Ubuntu drive, but it took reformatting while both drives were connected before it accepted the install, but at that, it said it was unclean or something. I figured I could just go on ahead, as the installer wasn’t very imaginative if you did anything other than what it wanted to do.

During the first-boot config, I entered passwords for both the root and mc users. I ran into trouble with getting the network set up, and that’s about where I am now.

I know I didn’t finish like I said I would. It’s been way too long since I started this project that was supposed to take just two weeks. I’ve learned a ton, but right now, a lot of it feels like it’s going to waste.

Final Question: What are you looking forward to giving for Christmas?

Minecraft Server, Week 5: Wall of Java (Unsupported Management version)

Good Morning from My Robotics Lab! This is Shadow_8472, and today, I am continuing work on this server project I’m getting a little tired of. Let’s get started!

Timeline: This week was Thanksgiving, and I didn’t apply myself all day every day until Sabbath like I have the past two weeks. I’m also writing after the fact again.

Last week, I said I would drop the nuke. Well, I did. And the refugees I stored in my little silo gave me a world of trouble. All that trouble last week to preserve what I had, and something, somewhere was unaccounted for, and my little backup and restore scripts all for nothing but an exercise in shell scripting.

While I eventually resorted to a clean install, I learned a few lessons. First, tce-load does not like being run with sudo. I should have remembered this, and come up with some creative solution to install nano and anything else I want to download automatically, but I abandoned that venture before perusing it. Second, something with the login data didn’t copy over correctly. Again, I cut this off before figuring out what exactly was going on. One thing I did keep was the hidden .ssh file for my user account.

Speaking of user accounts, I have noticed that project distros tend to give you a two character login, probably so you can get in easily when you have ssh set up with proper keys. BlinkiePie has a default “pi” account as a nod to it being a Raspberry Pi, while Micro Core’s default user name is “tc” as a nod to the flagship version of the distro, Tiny Core. While doing my clean install, I enshrined my favorite boot codes in the as part of the installation script, and came out with no trace of the tc username in with the encrypted passwords.

With only a couple more obstacles, I loaded OpenJDK 8 on as that is the latest version available for “drag and drop” style installation unless I want to try making a .tcz file myself. I made a folder to test run the server .jar file and ran into an exception: “Unsupported Management Version.”

Those three words defined the rest of my week in relation to this project.

Online searches bring up several near misses, but only a single page even contained the error in its entirety. Sometimes it even shows up twice, and it still doesn’t have any answers.

Several people tried to help me across a few Discord servers. One of my earlier help sessions involved trying to execute a HelloWorld! program. It failed, but only because I actually had do this little thing called “compilation.” A copy was scp’ed (Secure cp (copy), a part of SSH) off to Blinkie for compilation, tested, and ran fine when it came back and I wasn’t just trying to execute the source again.

As a test, I tried copying a known good .jar file over from the intermediary server running on my father’s computer. I mounted the hard disk in the same case tried copying a .jar from a known good Spigot 1.13 server. Both gave slightly different versions of Unsupported Management version. The trace didn’t even lead to the same place!

Taking a closer look at version numbers, I found that I was dealing with a seemingly slightly older build of Java than most of my other computers. If so, it might explain why things aren’t working, as Java supposedly only runs on the same or later version as it was compiled for. Besides, I may want to run a plugin or two some time, and it would be easiest if all versions on the server are running off a single version.

Blinkie seems to have the oldest build of Java 8, so I went over there and started setting up Build Tools, a script used in the distribution of Minecraft Spigot. As with anything that tends to spew files everywhere, I contained it in a box (directory). I ran Build Tools, and got a message about low RAM. It needs more than a 32 bit OS can address, and Raspian is a 32 bit distro intended for a 64 bit machine.

Even though Micro Core doesn’t even seem to have a Java compiler available in its repository, I tried running Build Tools straight on Micro Core. I didn’t expect it to work, and it didn’t. At least it provided me with a third Unsupported Management version example to study. I was honestly expecting it to fail due to lack of a compiler.

From here on out, all I’ve done is research. I’ve poked this problem for days, I don’t know how to fix this yet. The first, and most obvious way would be to try Oracle JDK again, but I want to back everything up first, possibly by booting to Ubuntu, mounting Micro Core’s SSD, and using tar on the contents.

Another possibility is just scrapping everything and going with MineOS. It has all the features I’ll want, all packaged up nice and tidy. Backups, updates, premade start/stop scripts for (multiple?) servers. It even has security considerations I haven’t even begun making plans for yet. Anyone can use it with minimal effort. It’s perfect — except that it would feel like a cop out.

One of the reasons I’m doing this project is to learn whatever I need to function as an effective power user in Linux. I’ve learned so much on this one project, and I don’t want to take the easy way out this time. Even when looking at Build Tools again, I understand so much more than when

The other path I think I can develop is making a new .tcz file for a different version of OpenJDK. Since I don’t want to spend forever trying to do it on my own, I am going to try making an account on the Tiny Core forums. The development team reportedly patrols it, so if there’s any place I’m going to get help, that is it. It isn’t secure, so I’ll be using my password manager to generate a whopper for it.

Ultimately, this is a very niche problem. Normally, I like split the different parts when I have most of the plot threads tied off with progress made on the central thread. This post feels more frayed, but it’s a full week’s events. Happy Thanksgiving!

Final Question: Every kind of computer interface has its own set of required basic actions we take for granted after a while. What kind of basic, but not too basic features do you take for granted in your interface of choice?