Running Server76 on Debian


A simple step-by-step guide for setting up Server76 on Debian

Preparing the server


This guide presumes that we're starting from a minimalist Debian LXC container, setting up the username server76 and the installation path /opt/server76/. From within a root shell simply run the following commands to create the user and the directory.

useradd -m -d /opt/server76/ -G sudo -s /sbin/nologin server76 && mkdir /opt/server76 && chown -R server76:server76 /opt/server76

By adding the user to the group sudo the user will be able to run commands as root later which will ease up the installation process.

The user needs a password so supply one with the passwd command. If you're feeling lucky, you can also delete the randomized password by running passwd with the parameter -d. Be aware that deleting the password will lead to security nightmares if there is ever an RCE exploit for Server76.

passwd server76

Installing components


Install necessary packages and add support for i386 packages (needed for steamcmd). Make sure to have Debian's non-free component activated in your sources.list if you want to install steamcmd.

dpkg --add-architecture i386
apt update
apt install wget p7zip sudo nano anacron steamcmd:i386

Server76 currently needs Microsoft .NET 8 to run, so get it from the official sources by adding their repository.
wget https://packages.microsoft.com/config/debian/$(cut -d. -f1 /etc/debian_version)/packages-microsoft-prod.deb && apt install ./packages-microsoft-prod.deb && rm packages-microsoft-prod.deb

Update Debian's package archive and install the Microsoft .NET runtime.
apt update && apt install dotnet-runtime-8.0

Now change the directory to /opt/server76 and run a shell you like as server76.
cd /opt/server76 && su -s /bin/bash server76

Installing Server76


Fetch the latest version of Server76 with the following command.

wget https://myfo.online/releases/linuxrelease_$(date -I).7z

If wget returns a 404, check out the project's discord for a new download URL. At the time of writing they were storing their releases with a simple ISO formatted date suffix.

Extract the archive's content to the subdirectory bin with p7zip. The directory doesn't have to exist, it will be created automatically if needed.

7zr x -obin linuxrelease_$(date -I).7z

Remove the archive if you don't like to waste space and make the binary executable with chmod.
rm linuxrelease_$(date -I).7z && chmod +x bin/Server76.Server

Placing data files for Server76


Now dump your Fallout76 1.4.1.6 ESM and BA2 files into the ServerData directory /opt/server76/bin/ServerData. If you need to upload them from a remote location, keep in mind that you might have to enable login for the user if you want to use rsync or scp/sftp.

If you want to use steamcmd, modify the following script to represent your login data and save it as ~/download_f76:

login <user> <password>
download_depot 1151340 1151343 9006394379407093964
download_depot 1151340 1151342 1065890720657377764

Launch the script with /usr/games/steamcmd +runscript ~/download_f76. If you've activated 2FA for your Steam account, you'll be asked for your Steam Guard code. It'll take a while until everything's downloaded.

Once the downloads have finished, you may move the files to the directory mentioned above and tidy up your downloads. Don't forget to remove or protect the above script because you probably don't want to have your Steam account's credentials lying around in plain text.

find ~/.local/share/Steam/steamcmd/linux32/steamapps/content/app_1151340/ -type f -iname *.esm -exec mv {}  ~/bin/ServerData/ \; -o -iname *.ba2 -exec mv {} ~/bin/ServerData/ \;
rm -r ~/.local/share/Steam/steamcmd

First run and bug hunt


Run the server ~/bin/Server76.Server once to let it build initial structures. This will take a while. If it fails with an error message suggesting that CSV files could not be found because the devs once forgot that Linux is case-sensitive, add a symlink with ln -s /opt/server76/bin/ServerData/CSV /opt/server76/bin/ServerData/csv.
It also may fail because of a missing override directory so create one with mkdir -p /opt/server76/bin/ServerData/overrides. You may stop the process when you spot Verbose: World State Service ready....

Creating a service


Now add a systemd service for Server76. This allows us to start/stop/restart Server76 without lousy tricks like screen or tmux and adds a nice way of logging. Additionally, it automatically restarts Server76 if something went wrong.

sudo nano /etc/systemd/system/server76.service

Add the following contents to the newly created service file:
[Unit]
Description=Server76 - a stand-alone private Fallout76 server
After=network.target

[Service]
ExecStart=/opt/server76/bin/Server76.Server
WorkingDirectory=/opt/server76/bin
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
User=server76
\#Nice=-5

[Install]
WantedBy=multi-user.target

The process's priority can be elevated by lowering the niceness. A niceness of -5 might be a good start, so you might try to remove the # when Server76 runs choppy.

Now it's time to reload systemd, enable our new service and start it.

sudo systemctl daemon-reload
sudo systemctl enable --now server76

Server76 will now automatically start when Debian boots up. You can check it's status with sudo systemctl status server76 or it's stdout log with sudo journalctl -u server76.service. Add the user server76 to the group adm if you want to omit sudo for journalctl.

Add auto-update (not tested yet!)


While not necessary, one might find joy in having a fresh copy of Server76 delivered on a daily or weekly basis. To simplify the process we've already installed anacron above. Just throw the below script in one of the /etc/cron.*-directories (e. g. /etc/cron.daily or /etc/cron.weekly).

\#!/bin/bash
SRVDIR="/opt/server76/bin"
ZIPFILE=$(mktemp --suffix .7z)
systemctl stop server76
wget https://myfo.online/releases/linuxrelease_$(date -I).7z -O $ZIPFILE
7zr x -o$SRVDIR -aoa $ZIPFILE
rm $ZIPFILE
chown -R server76:server76 $SRVDIR
chmod +x $SRVDIR/Server76.Server
systemctl start server76

Don't forget to make the script executable. To disable auto-updating again, just remove the executable bit of the file.

This guide also seem to work on free tier Oracle cloud servers with Ubuntu, so go for it if you're feeling lucky. Be sure to add at least 2 GB of swap space if you choose the VM.Standard.E2.1.Micro shape.

in reply to 0mega ☣ [pl]

room
You make so many great points here that I read your article a couple of times. Your views are in accordance with my own for the most part. This is great content for your readers. Door hardware

Show HN: I built a more productive way to manage AI chats

Link: contextch.at
Discussion: news.ycombinator.com/item?id=4…

The second round of talks between Russia and Ukraine may take place next week, – Bloomberg en.news-front.su/2025/05/23/th…

database greenhorn


hi my dears,
I have an issue at work where we have to work with millions (150 mln~) of product data points. We are using SQL server because it was inhouse available for development.
however using various tables growing beyond 10 mln the server becomes quite slow and waiting/buffer time becomes >7000ms/sec.
which is tearing our complete setup of various microservices who read, write and delete from the tables continuously down.
All the stackoverflow answers lead to - its complex. read a 2000 page book.

the thing is. my queries are not that complex. they simply go through the whole table to identify any duplicates which are not further processed then, because the processing takes time (which we thought would be the bottleneck). but the time savings to not process duplicates seems now probably less than that it takes to compare batches with the SQL table.
the other culprit is that our server runs on a HDD which is with 150mb read and write per second probably on its edge.

the question is. is there a wizard move to bypass any of my restriction or is a change in the setup and algorithm inevitable?

edit: I know that my questions seems broad. but as I am new to database architecture I welcome any input and discussion since the topic itself is a lifetime know-how by itself. thanks for every feedbach.

This entry was edited (1 month ago)
in reply to solrize

First question: how many separate tables does your DB have? If less than say 20, you are probably in simple territory.


Currently about ~50.
But like 30 of them are the result of splitting them into a common column like "country". In the beginning I assumed this lead to the same as partitioning one large table?

Also, look at your slowest queries


The different queries itself take not long because of the query per se. but due to the limitation of the HDD, SQL reads as much as possible from the disk to go through a table, given that there are now multiple connections all querying multiple tables this leads to a server overload. While I see now the issue with our approach, I hope that migrating the server from SQL server to postgreSQL and to modern hardware + refactoring our approach in general will give us a boost.

They likely say SELECT something FROM this JOIN that JOIN otherthing bla bla bla. How many different JOINs are in that query?


Actually no JOIN. Most "complex" query is INSERT INTO with a WHEN NOT EXIST constraint.

But thank you for your advice. I will incorporate the tips in our new design approach.

in reply to PoisonedPrisonPanda

You really have to see what the db is doing to understand where the bottlenecks are, i.e. find the query plans. It's ok if it's just single selects. Look for stuff like table scans that shouldn't happen. How many queries per second are there? Remember that SSD's have been a common thing for maybe 10 years. Before that it was HDD's everywhere, and people still ran systems with very high throughput. They had much less ram then than now too.

Shootings in D.C.: U.S./Israeli genocide in Gaza is the source of all violence – resistance is justified iacenter.org/2025/05/23/shooti…

Boiling Steam reshared this.

Warum verschweigen die meisten deutschen #Medien und Politiker:innen, dass die Sicherheit des Palästinensischen Staates ebenfalls deutsche #Staatsräson ist. Hört Euch z. B. Merkels Rede dazu doch mal ganz an.

Was folgt daraus?

N.B.: Ich lehne das anti-rechtsstaatliche und undemokratische Konzept Staatsräson komplett ab, aber wer damit argumentiert, sollte das wenigstens richtig machen.

#Israel #Palästina #Krieg

This entry was edited (1 month ago)

DHS Is Getting Ready to Identify Everyone Who Leaves the Country, Expanding Immigration Dragnet dropsitenews.com/p/border-unit…

The blood of Gaza will never wash from Keir Starmer’s hands declassifieduk.org/the-blood-w…

Sa, 24.05.2025, 08:57
Ihre Sendung konnte heute leider wegen unerwarteter Umstände wie z.B. Krankheit, Unfall, Arbeitszeitüberschreitung nicht zugestellt werden. Ein neuer Zustellversuch erfolgt am nächsten Werktag.


Das haben die noch gar nicht mitgekriegt, dass sie Samstags schon lange gar nicht mehr zustellen in B. Da müssen sie nämlich ihren Kolleg:innen von der S-Bahn helfen beim Reparieren von Signalen.

#DHL #DummesGequassel

Ministers #Smotrich and #Strook have handed out 21 4X4 Ranger vehicles to #settlers in the South #Hebron Hills. On the ground, these so-called “modern day pioneers” are using them to harass and intimidate a Palestinian family that has a flock of sheep. They take photos, report back to their friends by phone, and wait for a confrontation. The gift is proving effective.

In early April (2025), Ministers Smotrich and Strook of the far-right, fundamentalist racist Religious Zionism party handed out 21 4X4 Ranger vehicles to settlers in farm outposts across the South Hebron Hills. On April 3, Smotrich posted on his Twitter: “The farms in Judea and Samaria are the protective wall of the State of Israel. The farmers who take hold of the open areas and stand firm against terror, are the #pioneers of our time.”

Now let us see how the “modern day pioneers” are using the gift they received from the State of Israel: West of the village of As Samu’, a Palestinian shepherd family lives in a few very modest structures. The family has lived in this spot for decades, in Area C, just about 300 meters from the nearest houses of the village, which are in Area B. Between them and the House's village there is a small wadi that the family cultivates mainly to grow fodder for their sheep.

But in the twisted world of Smotrich, Strook, and the #settlers in the area, a Palestinian family quietly raising sheep on its own land is labeled “terrorism” and in order to confront this so-called “ #terrorism” the settlers were given the Rangers. So now, nearly every day, one or two settlers arrive on one of these Rangers that Smotrich gifted, park just a few meters away from the family’s home, and spend several minutes filming them while making phone calls, presumably to “report” something. The goal is clear: to provoke even the slightest pretext for escalation, so the settlers can call the local militia to take it from there and continue their work.


#KeremNavot - Naboth’s Vineyard
Naboth’s Vineyard (Kerem Navot) is an Israeli NGO established in 2012, which monitors and carries out research on Israeli land policy in the #WestBank.

#Palestine
#apartheid #Israel #apartheid-Israel
#History #settlers
#Kerem-navot #Keremnavot
#EU #US #US-Israel #US-Israel-terrorism #Israel #genocide #Gaza #Palestine
keremnavot.org/english
https://x.com/nabothVin

China vows to protect international students amid Harvard visa crisis english.almayadeen.net/news/po…

As part of my job, I have to evaluate AI tools. Part of that evaluation is pushing them to their limit. Today, I realised Cursor has a setting where if you critique its work enough, it goes silent and refuses to apply changes.

It's a moody junior dev whose overconfidence and bravado quickly turn to surly silence when their work is questioned. The happy, helpful (and frequently wrong) AI is gone, replaced by a useless one with a bad attitude that won't make it past the next performance review.

Christ. I'm used to managing engineers, but I draw the line at managing AIs.

#ai #cursor #llm

in reply to Tom

LLMs are statistical bullshit generators. They produce output that looks highly plausible, but may or may not be true, accurate or correct.

LLMs have zero understanding or intelligence, they merely match patterns found in their training data.

The sooner we all realise this, and the "AI" bubble bursts, the better. AI has it's uses, where spotting patterns is useful, but is otherwise mostly just a toy.

Trump After 50% Tariff Announcement Says Not Looking for Deal With EU sputnikglobe.com/20250523/trum…

UNCTAD warns on escalating risks to vulnerable economies plenglish.com/news/2025/05/23/…

Out of curiosity, I had asked GitHub Copilot to create an issue for me in one of my own repos and it didn’t even do the basic task of checking for duplicates. There were at least 5.

I’ve been holding off on moving everything to @Codeberg because of CI and because “everyone has a GitHub account” but directly enabling AI generated spam is the final straw.

I will start migration of what I can on the weekend and I encourage everyone to join me in using a non-corporate forge.

Postscript to 'News Flash' on Russian media available now on youtube gilbertdoctorow.substack.com/p…
in reply to Hackaday (unofficial)

We are looking for an investor who can lend money to our holding company.

We are looking for an investor who can lend 70,000 US dollars to our holding.

We will open a textile production company in Azerbaijan with the 70,000 US dollars you will give to our holding.

Textile business in Azerbaijan is very profitable, but since there are few textile production companies in Azerbaijan, we will make huge profits by opening a large textile production facility.

You will lend 70,000 US dollars to our holding company and you will receive your money back as 700,000 US dollars on 22.01.2026.

You will lend 70,000 US dollars to our holding company. When 22.01.2026 comes, I will give you back your money as 700,000 US dollars.

You will lend 70,000 US dollars to our holding. When the date 22.01.2026 comes, I will return your money as 700,000 US dollars.

You will receive your money back as 700,000 US dollars on 22.01.2026

You will have earned 10 times more income in 9 months.

9 months is a short time, don't miss this opportunity, I promise you big profits in a short time.

To learn how you can invest in our holding and to get more detailed information, send a message to my whatsapp number or telegram username below and I will give you detailed information.

For detailed information, send a message to my WhatsApp number or Telegram username below and I will give you detailed information.

My WhatsApp phone number:
+212 619-202847

My telegram username:
@adenholding

The Decline of the Dollar, the Rise of BRICS, and the Future of African Development Financing infobrics.org/post/45408/