Minecraft 1.17 (Caves and Cliffs Update) is here! This script and guide are written to help you get a great performing Raspberry Pi Minecraft server up and running in only a few minutes.
This is the standalone version. It runs on most flavors of Linux and should work on most architectures as well (arm, aarch64, etc.).
I highly recommend using Docker over the standalone version for most people. Installing Docker is as simple as sudo apt install docker.io. There are 3 Docker options available:
- The Docker version that has Geyser + Floodgate installed (allowing people running Minecraft Bedrock Edition such as on iOS, Android, and console to connect)
- The Docker version that runs the Purpur Minecraft server with Geyser + Floodgate installed (allowing people running Minecraft Bedrock Edition to connect)
- The Docker version that only includes the Paper Minecraft server (the same as this standalone version)
It’s now possible to convert your worlds between Bedrock and Java versions. Check out my guide on Chunker here for more information.
Features
- Sets up fully operational Minecraft server in a couple of minutes
- Runs the highly efficient “Paper” Minecraft server
- Raspbian / Ubuntu / Debian distributions supported
- Installs and configures OpenJDK 18
- Sets up Minecraft as a system service with option to autostart at boot
- Automatic backups to minecraft/backups when server restarts
- Updates automatically to the latest version when server is started
- Easy control of server with start.sh, stop.sh and restart.sh scripts
- Optional scheduled daily restart of Pi using cron
Requirements
- Raspberry Pi model with 1 GB of RAM or higher. Basically a Raspberry Pi 2B or higher. (No Zero unfortunately, 512MB is not enough RAM to do this, I’ve tried!)
- Headless Linux distribution such as Raspbian Buster Lite, Ubuntu Server 18.04.2, or any Debian based distribution (GUI distros can be used at the expense of available RAM and server performance)
- Solid state drive highly recommended but not required.
You can get a SSD setup on a Pi for less than most Micro SD cards cost. See my article here for details - If using MicroSD you want to be using a high range card otherwise you will really be hurting on IO when the server is reading/writing chunks of terrain! Click here for MicroSD card benchmarks/recommendations.
Recommended Gear
The Raspberry Pi 4 is available in different memory configurations all the way up to 8 GB. It’s about the size of a credit card and uses an extremely low amount of power making it ideal for all sorts of projects and ideas!
Links: Amazon.com*, AliExpress*, Amazon.ca*, Amazon.com.au*, Amazon*.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
The Raspberry Pi 400 kit includes everything you need for a full Pi 400 desktop build. The Pi 400 is the fastest Raspberry Pi ever released and comes in the form factor of a keyboard!
Links: Amazon.com*, AliExpress*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
The Kingston A400 has been a great drive to use with the Pi for years. It’s reliable, widely available around the world, has low power requirements and performs very well. It’s also very affordable. This drive has been benchmarked over 1000 times at pibenchmarks.com and is the #1 most popular SSD among the Pi community!
Links: AliExpress*, Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
The USB 3.1 variant of the StarTech 2.5″ SATA adapter works well with the Pi 4. The USB 3.0 variant doesn’t have firmware updates available and is not recommended.
Links: Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
SD Card Setup:
The SanDisk Extreme A1-A2 SD card has the best scoring SD card on Pi Benchmarks for years and is second in popularity only to the SanDisk Ultra (often included in combo kits). The application class (A1) means random I/O speeds (very important when running an OS) have to meet a higher standard. There’s no benefit on the Pi for A2 right now so get whichever is cheaper/available.
Links: AliExpress*, Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
Choosing a Linux Distribution
The most important consideration when choosing which flavor of Linux to run the server on is simple: available RAM. Headless Linux distributions such as Raspbian Lite that don’t have a built in GUI have
Our biggest obstacle when running a Minecraft server on the Pi is available RAM since 1 GB is extremely low for this type of server. To have a playable experience you should not be running anything else on the Pi so all memory is available to be used.
After testing on many different distros I am finding Raspbian Lite and Ubuntu Server 18.04.4 32-bit to be the best choices. These distributions come with very few background processes and have rock solid support and performance.
64-bit vs 32-bit
There’s a lot of discussion in the Pi world about the up and coming aarch64 64-bit distributions vs. armhf 32-bit distributions. They have been and continue to improve dramatically. There are already use cases where 64-bit is far superior such as video encoding, advanced compression, etc.
So how about for running a Minecraft server? I have been testing extensively with Ubuntu Server 18.04 64-bit and the Debian Buster 64-bit. I have consistently had worse performance and stability than on 32-bit versions of the exact same distros.
But how can that be? It’s certainly true that Minecraft servers benefit in CPU performance from 64-bit versions of Java. The answer is actually incredibly simple: memory. The server running on a 64-bit Java Virtual Machine uses a minimum of about 100 MB more memory. This makes perfect sense because 64 bits > 32 bits by definition!
The Raspberry Pi’s 1 GB of memory has been the biggest obstacle for this project since the very beginning. Back when I first went into the Paper Minecraft developer IRC room and told them what I was trying to do I was practically laughed out of the chat room for even thinking of trying this. Most Minecraft server branches including vanilla can’t even start on the Pi because of the limited memory.
For a dedicated Minecraft server on the Pi I very highly recommend staying 32-bit. You will have more available memory which means it will be much faster and more stable. Since memory is our bottleneck the increased CPU throughput does not help us and losing *any* of our memory is disastrous!
If the Raspberry Pi 4 has more memory like we all expect it to this recommendation will change completely. Even 2 GB of memory would make the extra memory that 64-bit uses a non-issue and the CPU throughput performance gains very desirable. For now though stay 32-bit for a Minecraft server!
Tested Distributions
Raspberry Pi OS – It’s Raspbian. It has very low memory usage and is the official distribution of the Raspberry Pi. The server runs very well on this. It’s overall the best choice. The Buster release has made OpenJDK 11 available on it so it’s no longer behind the rest of the distros.
Ubuntu Server 18.04 / 20.04 – Ubuntu Server is my favorite Linux distro. I use it for nearly all of my projects. The performance of the 32-bit armhf version is on par with Raspbian. It’s a great choice! Click here for my Ubuntu setup guide for Raspberry Pi. The 64-bit version is not a fantastic choice and not recommended because of the higher memory usage. Stick with 32-bit and you’ll be a happy camper with Ubuntu Server.
Debian Buster 64-bit – Debian is the distribution Raspbian is based on. This version is a preview of Debian “Buster” which is the successor to Stretch and will be the next version of Raspbian when it is released. I like this distribution but it is currently still unofficial and unsupported. Performance and stability was less than Ubuntu and Raspbian.
Minecraft Server Installation
SSH into your Raspberry Pi and paste the following commands:
curl https://raw.githubusercontent.com/TheRemote/RaspberryPiMinecraft/master/SetupMinecraft.sh | bash
The script will setup the Minecraft sever and ask you some questions on how to configure it. I’ll explain here what they mean.
“Enter amount of memory in megabytes to dedicate to the Minecraft server” – The amount of memory that will be dedicated to the Minecraft server. The more the better, but you must leave some room for the operating system background processes.
If you exceed the total available memory either the server will crash or the Pi will get incredibly slow to the point where your SSH session will start timing out. The setup script will make a recommendation to you which is your available memory – 10% for headroom. If you aren’t sure what to put just go with the recommended amount.
Note for Raspberry Pi 4: Currently on 32-bit Raspbian 2700 MB is the maximum that Linux will let us allocate in a 32 bit environment. The script has been updated to check for this as the server will not start if it is set over 2700M on a 32 bit server. 64 bit operating systems will be able to allocate all available memory as Pi 4 support rolls out for them.
“Start Minecraft server at startup automatically (y/n)?” – This will set the Minecraft service to start automatically when your Pi boots. This is great because whenever you want to play you can just plug it in and go without having to SSH in.
“Automatically reboot Pi and update server at 4am daily (y/n)?” – This will add a cron job to the server that reboots the Pi every day at 4am. This is great because every time the server restarts it backs up the server and updates to the latest version. See the “Scheduled Daily Reboots” section below for information on how to customize the time or remove the reboot.
That is it for the setup script. The server will finish configuring and start!
Check Java Version
Sometimes if you have multiple versions of Java installed the wrong version of Java will be selected as the default. If the server didn’t start check that the right version of Java is selected with this command:
sudo update-alternatives --config java
If you get the message “update-alternatives: error: no alternatives for java” then you only have one version of Java installed and can skip to the next section.
If you are presented with a list of choices then your machine has multiple versions of Java installed. It will look like this:
update-alternatives: warning: /etc/alternatives/java has been changed (manually or by a script); switching to manual updates only There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
You will usually want to just select the newest version of OpenJDK that is listed so you would type 0 and press enter. In some cases on some platforms you may want to switch to the official Oracle JDK although I strongly recommend sticking with OpenJDK!
First Run
The first time you run the server it will take a little longer to start since it is generating all the server data. If you try to log in before it fully starts you will get a connection timeout error. Watch for the line: “Timings Reset”. This is the last line that prints when the server is ready to rock and roll. At this point you will be able to connect successfully.
The very first time you log into the server it will be slow for about 1-2 minutes. This is because since nobody has logged in before the server has to scramble to generate all the chunks within your view distance (10 by default) and send them to you/store them. During this time you may not be able to see very far and if you try to destroy blocks there will be noticeable lag from when they break to when they actually disappear.
Don’t panic! This will go away within a couple of minutes as the Pi catches up with all the first time login stuff it needs to do. Performance stabilizes and it will feel very much like the offline experience after that.
If you are hosting for a few friends I’d recommend logging in for the first time right after you set up the server instead of having several people nail a blank server at first startup. This gets it out of the way and when everyone is ready to log in the starting area chunks will be fully fleshed out and the Pi just has to read them. It’s an order of magnitude faster for the Pi to read chunks than to generate and store chunks.
In my experience after the initial login exploring new parts of the server doesn’t cause any lag even though new chunks are being generated. The reason for this is that when you’re walking it’s really only having to generate a new chunk as you get close to the border instead of a huge square area of chunks in all directions and all at the same time like during the first login.
Benchmarking / Testing Storage
If you’re getting poor performance or just want to verify everything is working correctly you may want to run my storage benchmark with:
sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
If you search for the model of your drive on pibenchmarks.com you can compare your score with others and make sure the drive is performing correctly!
Changing Minecraft Server Version
To override the default version let’s grab a copy of the script locally:
wget https://raw.githubusercontent.com/TheRemote/RaspberryPiMinecraft/master/SetupMinecraft.sh
nano SetupMinecraft.sh
Now make these changes from inside nano:
Version="1.16.5"
AllowLocalCopy="1"
Now press Ctrl+X to exit nano and answer “y” to save. Now let’s run the script:
chmod +x SetupMinecraft.sh
./SetupMinecraft.sh
And the setup will run and install the version of Minecraft you set at the top of the file!
Changing Minecraft Client Version
If you are wisely running the “stable” branch instead of the “development” branch there will be times where you need to select the version of Minecraft to run otherwise you will get an error message that your client is outdated when you try to log in.
Fortunately this is very easy. Open up the Minecraft launcher and instead of hitting “Play” choose “Launch Options” in the menu at the top of the window. It will look like this:
Click the “Add new” button and pick which version you want to add. You can optionally gave it a name or just click save.
Now when you go back to the “News” tab you will see a dropdown arrow where you can select which version of Minecraft you want to play!
Start, Stop and Restart Server
The server can be started, stopped and restarted two different ways. You can use the provided scripts in the Minecraft folder or you can use systemctl. Here are the commands:
cd ~/minecraft ./start.sh ./stop.sh ./restart.sh -OR- sudo systemctl start minecraft sudo systemctl stop minecraft sudo systemctl restart minecraft
Automatic Backups
The server backs up each time it starts. This helps you recover easily if something goes wrong. This system works best if you configured the server to restart daily since it means you will have a backup every day.
To access these backups type:
cd ~/minecraft/backups
ls
When a backup is made the filename will be the date and time the backup was taken. If you need to restore a backup it’s very easy. Substitute the timestamp in my example to the backup you want to roll back to. Type:
cd ~/minecraft ./stop.sh rm -rf world world_nether world_the_end tar -xf backups/2019.02.15.22.06.30.tar.gz ./start.sh
Your world has now been restored! It’s a good idea to download these backups off the Pi periodically just in case the Pi’s storage fails.
Scheduled Daily Reboots
The daily reboots are scheduled using cron. It’s very easy to customize the time your server restarts.
To change the time that the server restarts type: crontab -e
This will open a window that will ask you to select a text editor (I find nano to be the easiest) and will show the cronjobs scheduled on the Pi. The Minecraft one will look like the following:
0 4 * * * /home/ubuntu/minecraft/restart.sh
There are 5 fields here. The default restart time is set to reboot at 0 minutes of the 4th hour of the day (4 AM). The other 3 fields are left as * to represent every day of every month. Make any desired changes here and press Ctrl+X to exit nano and update the cronjob.
To remove the daily reboot simply delete the line and save.
Installing Mods / Plugins
The server supports plugins that are compatible with Bukkit / Spigot / Paper. A popular place that you can get plugins is at dev.bukkit.org where there are thousands of them!
To install a plugin you simply download the .jar to the minecraft/plugins folder and restart the server. For example, WorldGuard is a very popular plugin that lets you add protection to different areas of your server.
To install this plugin on our Minecraft server we would use the following commands:
cd ~/minecraft/plugins curl -H "Accept-Encoding: identity" -H "Accept-Language: en" -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.12.212 Safari/537.36" -o worldguard.jar https://dev.bukkit.org/projects/worldguard/files/latest sudo systemctl restart minecraft
The reason the middle line is so long is that “robots” (roughly anything that isn’t a web browser being used by a user in this context) including scripts and utilities are blocked by the Bukkit server. The extra parameters we’re including in this line will add the location (-L) flag as well as a user agent and an identity / language header which will allow us to fetch the files without getting a 403 forbidden error.
Make sure to change “-o worldguard.jar” (second to last parameter) and the URL (very last parameter) to match the project you want to download.
The server will restart and the plugin will be installed. It’s that simple! To use the plugin refer to the documentation on the plugin download page to find out which commands you use to configure/interact with it.
Warning: be advised that plugins are the #1 issue for performance degradation on Minecraft servers. This isn’t because all plugins are bad. Some plugins are coded very inefficiently or perform features that require a lot of hooks in the code.
You should be careful about what plugins you install on the server and if you start having bad performance disable your plugins one by one until you find the culprit!
Reconfigure / Update Scripts
The scripts can always be reconfigured and updated by downloading the latest SetupMinecraft.sh and running the installer again. It will update all of the scripts in the Minecraft directory and reinstall the startup service for you.
Running SetupMinecraft.sh again will also give you a chance to reconfigure options such as the memory dedicated to the server, daily reboots, starting the server on boot, etc.
This will not overwrite your world or any other data so it is safe to run!
Port Forwarding
If everyone on your server is on the same LAN or WiFi network as you then you don’t need to do this. If you want people to connect from outside your local network then you need to set up port forwarding on your router.
The process for this is different for every router so the best thing to do is just look at your router and find the model # and put that in google with port forwarding for easy instructions on how to do it for your specific router.
You want to forward port 25565. The type of connection is TCP if your router asks. Once you do this people will be able to connect to your Minecraft server through your public IP address. This is different than your local IP which is usually a 192.x.x.x or 10.x.x.x. If you don’t know what that is just go to google and type “what’s my ip” and Google will kindly tell you!
Wired vs. Wireless
Going with an ethernet (wired) connection is going to be faster and more reliable. There’s so much wireless traffic and other interference in the air that running your server on WiFi is not recommended.
Even if it is working great 99% of the time it can ruin your experience very quickly if the WiFi drops for a couple of seconds and you get blown up by a creeper!
All that being said, the server works fine on wireless. The script will work fine as is with a wireless connection.
Upgrading
PLEASE BACK UP YOUR SERVER FIRST! The server makes automated backups by default for you in the backups folder but I recommend you back up the entire server folder yourself (basically the entire minecraft folder) any time you attempt to upgrade or downgrade. If you need to roll back to older versions it won’t work without a backup from that version or older!
The easiest way to upgrade an installation is to download the latest SetupMinecraft.sh and run it. This will automatically upgrade you to the latest version.
Upgrading and downgrading to versions that aren’t the default the script chooses is pretty simple. Simply change the Version line at the top in the SetupMinecraft.sh script:
#!/bin/bash
# Minecraft Server Installation Script - James A. Chambers - https://jamesachambers.com
# More information at https://jamesachambers.com/raspberry-pi-minecraft-server-script-with-startup-service/
# GitHub Repository: https://github.com/TheRemote/RaspberryPiMinecraft
# Minecraft server version
Version="1.16.1"
Edit this file in your favorite text editor (you can use nano or vi on the Pi like nano SetupMinecraft.sh) and change the Minecraft version to what you want.
Downgrading
PLEASE RESTORE USING A BACK UP FROM THE VERSION YOU ARE DOWNGRADING TO
If you are having problems on a newer version of Minecraft and want to downgrade you can do so using a complete backup of your server before you ran it on a newer version.
The reason you can’t take server data that has been touched by a version such as 1.17 and go back to 1.16 is that the new version adds all sorts of new data types/structures for the new content into your server data files. If you try to roll back the old versions of the Minecraft server will not understand these data types since they didn’t exist in that version and will crash.
As long as you use a backup for your server files from that version (or older) it’s as simple as changing the version in SetupMinecraft.sh just like I show in the “Upgrading” section.
You can upgrade any old version of Minecraft to any version, but again make sure you have a backup first as it is a one way street and you will need that backup if you want to roll back!
Troubleshooting Note – Oracle Virtual Machines
A very common problem people have with the Oracle Virtual Machine tutorials out there that typically show you how to use a free VM is that the VM is much more difficult to configure than just about any other product / offering out there.
It is because there are several steps you need to take to open the ports on the Oracle VM. You need to both:
- Set the ingress ports (TCP/UDP) in the Virtual Cloud Network (VCN) security list
- *and* set the ingress ports in a Network Security Group assigned to your instance
Both of these settings are typically required before you will be able to connect to your VM instance. This is purely configuration related and has nothing to do with the script or the Minecraft server itself.
I do not recommend this platform due to the configuration difficulty but the people who have gone through the pain of configuring an Oracle VM have had good experiences with it after that point. Just keep in mind it’s going to be a rough ride through the configuration for most people.
Troubleshooting Note – Hyper-V
There is a weird bug in Hyper-V that breaks UDP connections on the Minecraft server. The fix for this is that you have to use a Generation 1 VM with the Legacy LAN network driver.
Version History
To view the version history check out the GitHub README here:
Update History – RaspberryPiMinecraft – Official GitHub Page
Other Resources
If you’re trying to set up SSD / USB storage booting check out my Raspberry Pi USB booting setup guide
For benchmarks and recommendations on the fastest storage drives/adapters for the Raspberry Pi check out my 2021 Storage Roundup
If you’re having firmware issues and need to update/restore your firmware check out my Raspberry Pi firmware guide here
How can I give me op permissions to change gemode ingame for example?
Hey Frxhb,
For that one type:
screen -r
and that will pull up the Minecraft console. Here you can just type:
op "username"
and that’s it! You’ll then have access to the Minecraft commands in game as an op. Also, to get out of the Minecraft console, press the keys:
Ctrl+A followed by Ctrl+D
and it will return you to the normal terminal. Hopefully that helps!
I did the installation and started the minecraft server. But how Can i connect to this serer in my minecraft game? Whats the address and how to find out??
Hey Frxhb,
You can find your address by using the command:
ifconfig
or you can log into your router and see what IP address the Pi has. Once you have that just put that in the Minecraft client as the server IP to connect to. Hopefully that helps!
thank you very much! Is it hard to set up the server so friends from external can join me? Can u solve this without third party sites like noip?
nevermind. I got it. It was easy. But now the next question. How can I use commands ingame? Like change game mode or /kill etc??
The player needs to be added to the ops list of the server which you can do in multiple ways eg by adding the player to a config file named ops.json in the Minecraft directory. I would however suggest to simply ssh into the APIs, run screen -r minecraft which puts you in the server console. You can now op a player by simply typing
/op
Command got cut off:
/op playername
If someone got problems with the new version this could be a result of automatically installing and using version 17 of java. The minecraft paper server seems to only work with java 16 yet. To fix this run “sudo update-alternatives –config java” and select version 16. This worked for my end.
Hey Chris,
Thanks for this. I’m going to update immediately to fix this. That probably explains Mark’s issues earlier as well!
I just discoverd i made a typo: its “sudo update-alternatives –config java” not “sudo update-alternatives -config java” (with one – instead of two –)
PS: Thank you, your script made my server for me and my kids possible, endless ours of fun!
This is some amazing work. Is there any way you can explain how to get the latest version of Java installed? Java 16? It says it’s needed to run the latest version of the server.
Hey aruthir,
It should install Java for you automatically but maybe it can’t find the package. Try typing:
sudo apt search openjdk
You should see some packages available. Look for one like openjdk-14-jre-headless or openjdk-14-jre should work!
Hi James, I’ll try that. Thank you so much for the quick reply and for all you’ve done for this space!
No problem at all, let me know what you find/if you need any further help!
I’m only seeing OpenJDK11 as the highest number showing up when I generate the list. Not sure if there’s a manual way to download and then load a newer version in possibly.
I found this article that seems to highlight the issue. I’m on a 32 bit. There was a workaround that a user at the bottom figured out to get it installed, but the steps he took is too complicated for me to follow.
Hey aruthir,
That seems extremely old. Have you done a:
sudo apt update && sudo apt dist-upgrade -y
since I assume you are running Raspberry Pi OS it sounds like this is missing updates. Regardless, OpenJDK 11 used to work just fine (in fact I think we started on 8 or 9 and way back in the day it used to still be the Oracle Java VM). I haven’t tried it lately but did you try running it with 11?
It should be really easy even on 32 bit as 99% of people are probably also on 32 bit for the Pi. I think this may just be missing updates. I also wonder if your apt is broken so I’m curious what you’ll get if you run those update commands! If it says there’s a package issue you can fix them a lot of the time with:
sudo apt-get install --fix-broken
Let me know what you find!
Hey James, thanks again for the follow up. I do have the OpenJDK 11, but when it gets to the point of launching the server, it gives the following warning message:
************************************************************
* WARNING - YOU ARE RUNNING AN OUTDATED VERSION OF JAVA.
* PAPER WILL STOP BEING COMPATIBLE WITH THIS VERSION OF
* JAVA WHEN MINECRAFT 1.17 IS RELEASED.
*
* Please update the version of Java you use to run Paper
* to at least Java 16. When Paper for Minecraft 1.17 is
* released support for versions of Java before 16 will
* be dropped.
*
* Current Java version: 11.0.11
*
* Check this forum post for more information:
* https://papermc.io/java16
************************************************************
Just a bit worried that I won’t be able to upgrade it when they release 1.17 so was hoping there’s a way to upgrade the Java now to make it a bit more future proof.
Hey aruthir,
Oh okay I definitely see where you’re coming from now, that’s a spooky looking notice! I just jumped on a 32-bit and I can’t believe they are still on OpenJDK 11 on there. They really need to jump to the next version of Debian (the underlying OS Raspberry Pi OS is based on). I have Ubuntu installed on a lot of my test rigs and they are way, way ahead of that.
Not to worry, I think I know a sneaky trick using snapd that can get you a newer Java (looks like OpenJDK 16, does require a reboot):
sudo apt update
sudo apt install snapd -y
sudo reboot
sudo snap install core
sudo snap install openjdk
sudo update-alternatives --install /usr/bin/java java /snap/openjdk/current/jdk/bin/java 1
sudo update-alternatives --set java /snap/openjdk/current/jdk/bin/java
java -version
openjdk version "16.0.1" 2021-04-20
OpenJDK Runtime Environment (build 16.0.1+9-snap)
OpenJDK Server VM (build 16.0.1+9-snap, mixed mode)
By the look of things this is going to have to go into SetupMinecraft.sh or it won’t be able to support Raspberry Pi OS. It seems extraordinarily unlikely that all the sudden the Pi apt repositories are going to go from OpenJDK 11 all the way up to 16 in the next few days / weeks.
I’ve supported it for more years than I can remember and am absolutely going to keep supporting it. The required reboot is really unfortunate for a script like this but may be required to run it at all. After your testing and my testing this will likely need to go in for the 1.17 release. It would only do it for platforms that don’t have a new enough OpenJDK in the repository as they can all avoid the reboot (also installing snap core and OpenJDK take a long time on the Pi compared to the packages from apt, like 10-15 minutes long time).
Give that a try and that may be a good workaround and way to get some peace of mind!
Update 6/12/21: I actually turned this into a whole post here.
Hey James,
You’re a wizard! That got the java to update to v16 and gives me the same java -version output information that you showed in your instructions.
After updating the java version using your instructions, I then tried to do the setup by typing “./SetupMinecraft.sh” without the quotes, and it returned the following syntax error. I’m guessing the file needs to be edited to include the new version of Java installed maybe? Thank you so much for your time and help with this!
./SetupMinecraft.sh: line 163: syntax error near unexpected token
JavaVer=$(apt-cache show openjdk-19-jre-headless | grep Version | awk 'NR==1{ print $2 }')'
fi JavaVer=$(apt-cache show openjdk-19-jre-headless | grep Version | awk ‘NR==1{ print $2 }’)’./SetupMinecraft.sh: line 163:
Warm wishes,
aruthir
Doh! I’m glad you let me know about that! I’ve just committed the fix to GitHub here. That syntax error should be gone now, thanks again!
Hey James, whatever you did fixed the installer! It ran through the script and prompted me as detailed in your guide without any issues. I am having an issue trying to connect to the server now that it’s running, but I imagine it’s something unrelated to the install itself.
Here’s a snippit the end part of it after starting up the Minecraft server. I can use the ./stop.sh command to stop the server so I think it’s running…
Updating to most recent paperclip version ...
--2021-06-13 02:57:58-- https://papermc.io/api/v1/paper/1.16.5/latest/download
Resolving papermc.io (papermc.io)... 172.67.72.198, 104.26.12.138, 104.26.13.138, ...
Connecting to papermc.io (papermc.io)|172.67.72.198|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53744623 (51M) [application/java-archive]
Saving to: ‘paperclip.jar’
paperclip.jar 100%[=================================================================================>] 51.25M 2.01MB/s in 28s
2021-06-13 02:58:27 (1.82 MB/s) - ‘paperclip.jar’ saved [53744623/53744623]
Starting Minecraft server. To view window type screen -r minecraft.
To minimize the window and let the server run in the background, press Ctrl+A then Ctrl+D"
I tried using a “sudo systemctl status minecraft” command, and it shows a failed, but not sure what’s causing that or if it’s related to why I can’t connect to the server. Not sure if you might have any idea of what may be wrong here, but even if not, I appreciate all the advice and help you’ve given. Thank you!!!
root@SparhawkPI:/home/pi/minecraft# sudo systemctl status minecraft
● minecraft.service - Minecraft Server Service
Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2021-06-13 02:29:30 BST; 37min ago
Process: 4060 ExecStartPre=/bin/chown -R pi /home/pi/minecraft (code=exited, status=0/SUCCESS)
Process: 4061 ExecStart=/bin/bash /home/pi/minecraft/start.sh (code=exited, status=0/SUCCESS)
Process: 4227 ExecStop=/bin/bash /home/pi/minecraft/stop.sh (code=exited, status=1/FAILURE)
Jun 13 02:20:20 SparhawkPI bash[4061]: 52350K .......... .......... .......... .......... .......... 99% 5.39M 0s
Jun 13 02:20:20 SparhawkPI bash[4061]: 52400K .......... .......... .......... .......... .......... 99% 1.42M 0s
Jun 13 02:20:20 SparhawkPI bash[4061]: 52450K .......... .......... .......... .... 100% 5.80M=29s
Jun 13 02:20:20 SparhawkPI bash[4061]: 2021-06-13 02:20:20 (1.75 MB/s) - ‘paperclip.jar’ saved [53744623/53744623]
Jun 13 02:20:20 SparhawkPI bash[4061]: Starting Minecraft server. To view window type screen -r minecraft.
Jun 13 02:20:20 SparhawkPI bash[4061]: To minimize the window and let the server run in the background, press Ctrl+A then Ctrl+D
Jun 13 02:20:20 SparhawkPI systemd[1]: Started Minecraft Server Service.
Jun 13 02:29:30 SparhawkPI bash[4227]: Server is not currently running!
Jun 13 02:29:30 SparhawkPI systemd[1]: minecraft.service: Control process exited, code=exited, status=1/FAILURE
Jun 13 02:29:30 SparhawkPI systemd[1]: minecraft.service: Failed with result 'exit-code'.
Hey aruthir,
You will want to look in the “logs” folder to get some more insight than the systemd log (the service is just a thin wrapper, so it doesn’t really do/log anything and just starts the server if that makes sense) or just type java -jar paperclip.jar from the ~/minecraft folder and see what is going wrong. Did you try typing screen -r minecraft to load the console?
Most likely it’s a permissions error if you’ve been changing/moving any of the files during all of this so you may want to just run ./fixpermissions.sh from the ~/minecraft folder as well. I was able to get all the way in on my OpenJDK 16 install and everything was working great and I didn’t get any warnings.
Hey James,
Oh, I see. Maybe I need to try starting over from scratch. I did make some changes to the raspi-config when I first loaded up the image to enable wifi and set location to US and such. Maybe that did something that’s affecting things.
Here’s what I see when I run the screen command. It doesn’t seem to do anything past the Timings Reset line. I’m on a 4GB Raspberry Pi 4, not sure if that impacts anything as I know you’ve designed this around the 8GB version. The memory I dedicated to the server was 2560MB. I also tried editing the server.properties file to lower the max players, and max height to see if that helps, but doesn’t seem to do anything.
System Info: Java 16 (OpenJDK Server VM 16.0.1+9-snap) Host: Linux 5.10.17-v7l+ (arm)
Loading libraries, please wait...
[04:16:33 INFO]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD'
[04:16:35 INFO]: Reloading ResourceManager: Default, bukkit
[04:16:38 INFO]: Loaded 7 recipes
[04:16:44 INFO]: Starting minecraft server version 1.16.5
[04:16:44 INFO]: Loading properties
[04:16:44 INFO]: This server is running Paper version git-Paper-777 (MC: 1.16.5) (Implementing API version 1.16.5-R0.1-SNAPSHOT)
[04:16:44 INFO]: Server Ping Player Sample Count: 12
[04:16:44 INFO]: Using 4 threads for Netty based IO
[04:16:44 INFO]: Debug logging is disabled
[04:16:45 INFO]: Default game type: SURVIVAL
[04:16:45 INFO]: Generating keypair
[04:16:45 INFO]: Starting Minecraft server on 192.168.1.236:25565
[04:16:45 INFO]: Using default channel type
[04:16:46 INFO]: Server permissions file permissions.yml is empty, ignoring it
[04:16:46 INFO]: Preparing level "world"
[04:16:47 INFO]: Running delayed init tasks
[04:16:47 INFO]: Done (3.501s)! For help, type "help"
[04:16:47 INFO]: Timings Reset
That looks perfectly normal. Timings reset is exactly what you want to see from a fully loaded server. It’s seeing no connection attempts. Are you trying to connect the way it says with 192.168.1.236:25565 or are you trying to use your public IP address?
You may want to give the whole article a reread now that you’re up and running. I imagine you’re headed straight for a port forwarding issue from your public IP which I cover in here as well. The timings reset and a lot of this stuff is right in there for you to tell you exactly what to do and what you should see! Definitely worth checking now since before this point none of the stuff in the article was relevant so none of it would have “stuck” in your memory but it should get you up and running!
Hey James,
Oh, it does work! I just foolishly tried to connect using a Win10 version of Minecraft and didn’t realize that you need to connect via the Java version of Minecraft. Testing with my son’s Java version allows the server to show up. Thank you so much for all your patience and guidance. I’ll show it to him in the morning after he wakes up, and I’m sure he will absolutely love it!
Warm wishes,
aruthir
Hey aruthir,
Fantastic, I’m very relieved to hear it and that you stuck through with it! Thanks for bearing through all that with me. You honestly helped me prepare for the coming storm of OpenJDK on Raspberry Pi OS not being new enough to run the new 1.17 version here. I definitely had a blind spot since all my test systems had been on different distros lately and I didn’t realize how dire the situation had become with the OpenJDK!
Definitely don’t hesitate to stop by if you have any questions later!
Hey James,
Finally coming back not with a question, but just to say that my 7 year old son absolutely loves that he now has his own Minecraft server to play around in. I told him that the only reason why I was able to do it was because of this incredible guide and all the effort that you put in to helping not just me, but many others to get things up and running; and asked me if I could tell you that he says “Thank you so much!” =)
Warm wishes,
aruthir
Hey aruthir,
Welcome back! That’s absolutely awesome, tell him thank you so much from me and that you both actually helped me prepare for the upcoming version instead of get caught totally off guard!
Warm wishes to both of you as well,
-James
Excellent tutorial and recommendations!! My son and I had a lot fun setting up a server with a RPI 3B for him and a group of friends. Thank you for all the information.
I’d like to add a particular case that may affect others when trying to open the server to the Internet:
My Internet service provider (Claro Argentina) does not allow port forwarding and only gave me DMZ in the IP 192.168.100.200
To have my server available on the Internet, I had to do the following, which I discovered after hours of breaking my head:
sudo nano /etc/dhcpcd.conf
And then add the following lines:
# to get thru the DMZ with IP 192.168.100.200 and gateway 192.168.100.1
interface eth0
static ip_address=192.168.100.200/24
static routers=192.168.100.1
Hey never_give_up,
I’m very glad you never gave up! That is absolutely wild. Recently Leon from Germany said that he faced similar tough networking challenges here.
I don’t think I’ve ever encountered an end-user asked to do anything like this before. That is some enterprise level networking configuration. A DMZ is actually an ideal setup for a public facing server like this so the end results are actually quite good! Thank you very much for sharing your experience and what you did, public IP addresses are only becoming more scarce and this problem is only going to continue to grow!
Hey James,
rock solid work – I have 3 raspberry Pi’s now up and running each with a 240GB SSD and different worlds for my kids. Thanks a lot for your work!!! I could not have done this myself.
In the terminal, I recently spotted this error message:
WARNING - YOU ARE RUNNING AN OUTDATED VERSION OF JAVA. PAPER WILL STOP BEING COMPATIBLE WITH THIS VERSION OF JAVA WHEN MINECRAFT 1.17 IS RELEASED.
Please update the version of Java you use to run Paper to at least Java 16. ...
https://papermc.io/java16
Looks like there is a higher Java requirement that will soon kick in. I tried to manually update Java but as a total noob I was not able to do this. Any solution at hand?
I got the same message and i just let the setupscript run again and it updatet java to version 16.
Hi there, if you are using a 32 bit version of Raspberry Pi OS; James just put up instructions on how to upgrade the device to the newest version of Java that can be found here.
Hi James, Thanks so much for the perfect tutorial, we’ve been enjoying our server for a few months now, but it wont start at the moment, I ‘m guessing because the disk has filled up with backups, I get this error
gzip: stdout: No space left on device
./world/poi/r.-2.-5.mca
tar: backups/2021.05.15.21.51.24.tar.gz: Cannot write: Broken pipe
tar: Child returned status 1
tar: Error is not recoverable: exiting now
sed: couldn't write 28 items to ./sed3YmtIg: No space left on device
sed: couldn't write 28 items to ./sedewwbbm: No space left on device
sed: couldn't write 28 items to ./sedjbuzfn: No space left on device
I can manually remove some backups, But I’m wondering if there’s a way to clear space, and get it to just keep the last few backups?
Many Thanks,
Hey Mark,
Try updating to the latest version. That feature was recently added and should take care of that for you! You’re indeed right, it’s the disk got filled with backups most likely. This happened to one of my servers so I added this feature in.
With the latest version you should see this in start.sh (with your own directories instead of these placeholders) on line 40:
# Rotate backups -- keep most recent 10
Rotate=$(ls -1tr dirname/minecraft/backups | head -n -10 | xargs -d '\n' rm -f --)
To update just download the latest SetupMinecraft.sh from GitHub and run that and it should update the scripts automatically once you’ve manually removed some. Let me know if it works since it’s pretty new and if it’s not clearing any backups we can get it working!