How to setup an MvM server with Docker
This is a simple guide on how to start an MvM server using Docker. This also works with Podman.
1\. Generating an SRCDS Token
SRCDS_TOKEN
is required if you want your server to be visible on the server browser. Follow the below steps to generate one:
-
Open the following link: https://steamcommunity.com/dev/managegameservers
-
In the App ID field, type the following: 440
-
In the Memo field, type whatever you see fit. You may use the following: MvM Server
-
Click on the "Create" button.
-
Copy the login token.
2\. Docker
There are plenty of images that can be picked, which can be found here: https://github.com/CM2Walki/TF2?tab=readme-ov-file#image-variants
For this guide, we will be going with the image that comes with SourceMod pre-installed.
Pull the latest image:
bash docker pull cm2network/tf2:sourcemod
Start and run the container, make sure to replace {YOURTOKEN}
with the token you generated and {YOURPASSWORD}
with a secure password:
bash docker run --net=host --name=my-mvm-server -e SRCDS_TOKEN="{YOURTOKEN}" -e SRCDS_RCONPW="{YOURPASSWORD}" -e SRCDS_PW="" -e SRCDS_STARTMAP="mvm_decoy" -e SRCDS_MAXPLAYERS=32 cm2network/tf2:sourcemod
Here's a breakdown for the command:
docker run
: This command creates and starts a new container.--net=host
: The container shares the host's network stack, meaning it directly uses the host's IP address and ports.--name=my-mvm-server
: This names the container "my-mvm-server". You may change its name to whatever you see it.-e SRCDS_TOKEN={YOURTOKEN}
: This sets an environment variableSRCDS_TOKEN
with a value of{YOURTOKEN}
. This token is necessary to authenticate your server with Valve. Ensure to replace it with your own token.-e SRCDS_RCONPW={YOURPASSWORD}
: This sets an environment variableSRCDS_RCONPW
with a value of{YOURPASSWORD}
. This is the password for remote console access to the server. Ensure to replace it with a secure password.-e SRCDS_PW=""
: This sets the environment variableSRCDS_PW
to an empty string, meaning no password is required for players to join the server.-e SRCDS_STARTMAP="mvm_decoy"
: This sets the initial map to "mvm\_decoy" when the server starts. You may replaced it with any other MvM map if you want.-e SRCDS_MAXPLAYERS=32
: MvM bots take up player slots, so you need to set the max player to at least 32.cm2network/tf2:sourcemod
: This specifies the Docker image to use, which in this case is a TF2 server image with SourceMod pre-installed.
You can find other environment variables here: https://github.com/CM2Walki/TF2?tab=readme-ov-file#environment-variables
After starting the container successfully, wait for the server to update. It might take some time.
Once the server update is complete, launch TF2, open the server browser, click on the "LAN" tab, if everything went well then you will be able to see and connect to your server. However, there are still things need to be done, so continue reading the guide.
3\. Map rotation
To add stock MvM maps to your map cycle, run the following command:
bash docker exec -it my-mvm-server nano /home/steam/tf-dedicated/tf/cfg/mapcycle.txt
Add the following content to mapcycle.txt
:
mvm_bigrock mvm_coaltown mvm_decoy mvm_ghost_town mvm_mannhattan mvm_mannworks mvm_rottenburg
4\. Admin privileges
Since the server comes with SourceMod, it is a good idea to set yourself as an admin in order to access admin-only features.
4\.1. Finding your Steam ID
-
Open the following website: https://steamdb.info/calculator/
-
In the blank field, enter your Steam community profile URL, for example: https://steamcommunity.com/id/kisats/
-
Click on the "Get disappointed in your life" button.
-
Copy the "Steam2 ID" value.
4\.2. Becoming an Admin
To edit the admin list, run the following command:
bash docker exec -it my-mvm-server nano /home/steam/tf-dedicated/tf/addons/sourcemod/configs/admins_simple.ini
At the end of the file, add the following line. Ensure to replace YOUR_STEAM_ID_HERE
with the Steam ID you copied previously:
"YOUR_STEAM_ID_HERE" "99:z"
5\. Changing server.cfg
The server.cfg
file that comes with the image is targeted towards normal TF2 matches. It is important to change it so it fits MvM requirements. To do so, follow the steps below:
Remove the existing server.cfg
file:
bash docker exec -it my-mvm-server rm /home/steam/tf-dedicated/tf/cfg/server.cfg
Create a new server.cfg
file:
bash docker exec -it my-mvm-server nano /home/steam/tf-dedicated/tf/cfg/server.cfg
In the server.cfg
file, insert the following content. Ensure to replace the values of hostname
, rcon_password
, sv_contact
and sv_region
:
``` // Change the following: hostname my-mvm-server // This is the server name. It will be shown on the server browser. rcon_password ChangeMe // Enter a secure password sv_contact [email protected] // Type your email address sv_region 255 // 0: US - East, 1: US - West, 2: South America, 3: Europe, 4: Asia, 5: Australia, 6: Middle East, 7: Africa, 255: World (Default)
// General MVM Settings // tf_mm_servermode 1 //puts the server into mvm matchmaking tf_mm_strict 0 //allows players to join through matchmaking and server browsing tf_mm_match_size_mvm 6 //minimum players needed in matchmaking before connecting tf_mvm_min_players_to_start 1 //default 3 tf_mvm_respec_enabled 1 //allow refunds tf_mvm_respec_limit 0 //total allowed refunds; 0 - unlimited tf_mvm_respec_credit_goal 2000 //if respec_limit is not 0, then the total number of credits needed to earn a refund tf_mvm_skill 3 // 1 - easy; 3 - medium (default); 5 - hard tf_mvm_disconnect_on_victory 0 //disconnect players on victory tf_mvm_victory_reset_time 60 //seconds to wait after victory before changing map
// Set to lock per-frame time elapse host_framerate 0 // Set the pause state of the server setpause 0 // Control where the client gets content from // 0 = anywhere, 1 = anywhere listed in white list, 2 = steam official content only sv_pure 0 // Is the server pausable sv_pausable 0 // Type of server 0=internet 1=lan sv_lan 0 // Whether the server enforces file consistency for critical files sv_consistency 1 // Collect CPU usage stats sv_stats 1 //Tags //sv_tags <your Tags> //Server Player Password // NOTE: if you have a password, your MvM server will not be allowed in Match Making. //sv_password <your server password>
// Execute Banned Users // exec banned_user.cfg exec banned_ip.cfg writeid writeip
// Rcon Settings //
// Number of minutes to ban users who fail rcon authentication sv_rcon_banpenalty 1440 // Max number of times a user can fail rcon authentication before being banned sv_rcon_maxfailures 5
// Log Settings //
// Enables logging to file, console, and udp < on | off >. log on // Log server information to only one file. sv_log_onefile 1 // Log server information in the log file. sv_logfile 1 // Log server bans in the server logs. sv_logbans 1 // Echo log information to the console. sv_logecho 1
// Rate Settings //
// Frame rate limiter fps_max 600 // Min bandwidth rate allowed on server, 0 == unlimited sv_minrate 0 // Max bandwidth rate allowed on server, 0 == unlimited sv_maxrate 20000 // Minimum updates per second that the server will allow sv_minupdaterate 66 // Maximum updates per second that the server will allow sv_maxupdaterate 66
// Download Settings //
// Allow clients to upload customizations files sv_allowupload 1 // Allow clients to download files sv_allowdownload 1 // Maximum allowed file size for uploading in MB net_maxfilesize 64
//VOTING!//
sv_allow_votes 1 sv_vote_allow_spectators 0 sv_vote_failure_timer 120 //(default 300 = 5 minutes)
// REGULAR GAME VOTES // //Enable Scramble Vote sv_vote_issue_scramble_teams_allowed 0 //Enable Restart Game sv_vote_issue_restart_game_allowed 1 //Enable NextLevel Vote sv_vote_issue_nextlevel_allowed 1 //Enable Kick vote sv_vote_issue_kick_allowed 1 //Kick Duration (0 for no ban time, non-0 for minutes to ban) sv_vote_kick_ban_duration 10
// MVM VOTES // //Enable Kick vote sv_vote_issue_kick_allowed_mvm 1 //Enable changelevel vote sv_vote_issue_changelevel_allowed_mvm 1 //Enable restart map vote sv_vote_issue_restart_game_allowed_mvm 1 //Enable classlimits vote sv_vote_issue_classlimits_allowed_mvm 0 //Enable classlimit max count vote sv_vote_issue_classlimits_max_mvm 2 //(default 2) //Enable kick players that haven't connected yet but passed certain time threshold sv_vote_issue_kick_min_connect_time_mvm 0 //(default 0 is enabled) //Vote timer cooldown sv_vote_failure_timer_mvm 120 //(default 120 = 2 minutes) //Allow change difficulty vote sv_vote_issue_mvm_challenge_allowed 1
// Round and Game Times //
//Wait for Players mp_waitingforplayers_cancel 1 // Enable timers to wait between rounds. WARNING: Setting this to 0 has been known to cause a bug with setup times lasting 5:20 (5 minutes 20 seconds) on some servers! mp_enableroundwaittime 1 // Time after round win until round restarts mp_bonusroundtime 10 // If non-zero, the current round will restart in the specified number of seconds mp_restartround 0 //Enable sudden death mp_stalemate_enable 0 // Timelimit (in seconds) of the stalemate round. mp_stalemate_timelimit 300 // game time per map in minutes mp_timelimit 60 //Max Round Wins mp_winlimit 0 //Disable Respawn Times mp_disable_respawn_times 0 //(default 0; 1 allows near instant respawns) // Overrides the max players reported to prospective clients sv_visiblemaxplayers 6 // Maximum number of rounds to play before server changes maps mp_maxrounds 0
// Client CVARS //
// Restricts spectator modes for dead players mp_forcecamera 1 // toggles whether the server allows spectator mode or not mp_allowspectators 1 // toggles footstep sounds mp_footsteps 1 // toggles game cheats sv_cheats 0 // After this many seconds without a message from a client, the client is dropped sv_timeout 900 // Maximum time a player is allowed to be idle (in minutes), made this and sv_timeout equal same time? mp_idlemaxtime 9 // Deals with idle players 1=send to spectator 2=kick mp_idledealmethod 1 // time (seconds) between decal sprays decalfrequency 10 //Overtime Nagging tf_overtime_nag 1
// Communications //
// enable voice communications sv_voiceenable 1 // Players can hear all other players, no team restrictions 0=off 1=on sv_alltalk 0 // amount of time players can chat after the game is over mp_chattime 10 // enable holiday modes: 0none,1birthday,2halloween,3birthday //tf_forced_holiday 0 ```
6\. Checklist
To ensure that everything went well, check the following things:
-
The server is visible on the server browser.
-
The maps and missions can be changed through voting.
-
The admin commands can be accessed by typing
!sm_admin
in the chat. -
When pressing F4, the wave starts and the robots spawn as expected.
7\. Credits
-
Thanks to CM2Walki for providing TF2 Docker images.
-
Thanks to Jamillia for providing server.cfg
I Reviewed Every Mission in Operation: Osmium Ordinance
YouTube Video
Click to view this content.
Operation: Osmium Ordinance was created by Potato MvM and released on July 7th, 2024, featuring 7 intermediates, 14 advanced, and 7 expert missions. The campaign was set to conclude on July 25th, but was extended to August 1st. Join me as we go through each mission in this tour and rank them all to see how well they offered in their gameplay experiences.
Its popular with the kids. You don't have to play it.
Unfortunately, the Steam community rewards this garbage. This spammer got shitload of Steam points by merely copy-and-pasting a "joke" guide.
How to install and play Blue Archive on Fedora Atomic using Waydroid
Thanks to Waydroid, qwerty12356-wart and the open-source community in general, you can now play Blue Archive on Fedora Atomic. This guide will show you how to install Waydroid, install and patch libhoudini, and install Blue Archive.
Installing Waydroid
- Install Waydroid
bash sudo rpm-ostree install waydroid
- Reboot the system
bash systemctl reboot
- Start Waydroid
bash sudo systemctl enable --now waydroid-container
- Launch Waydroid via the application launcher, and then input the following values:
- System OTA: https://ota.waydro.id/system
- Vendor OTA: https://ota.waydro.id/vendor
- Ensure to select Gapps and then click on the "Install" button
Google Play Certification
-
Launch Waydroid shell
bash sudo waydroid shell
-
Get the Android ID, and then copy it
bash ANDROID_RUNTIME_ROOT=/apex/com.android.runtime ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata ANDROID_I18N_ROOT=/apex/com.android.i18n sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"
-
Open the following link, and then paste the Android ID: https://www.google.com/android/uncertified/
-
Wait a few minutes, and then restart Waydroid
bash sudo systemctl restart waydroid-container
Installing Libhoudini
- Clone the repository
bash git clone https://github.com/casualsnek/waydroid_script
- Change directory to the cloned repository
bash cd waydroid_script
- Create a virtual environment
bash python3 -m venv venv
- Install the required packages
bash venv/bin/pip install -r requirements.txt
- Install libhoudini
bash sudo venv/bin/python3 main.py install libhoudini
Patching libhodini
-
Install
vim-common
(xxd
is required by the script)bash sudo rpm-ostree install vim-common
-
Reboot the system
bash systemctl reboot
-
Download qwerty12356-wart script
bash curl -L https://github.com/user-attachments/files/15800844/scripton.txt -o scripton.sh
Warning: Be cautious when downloading and executing scripts from the internet. Ensure you trust the source and understand the script's functionality to avoid security risks. -
Give the script permission to execute
bash sudo chmod +x scripton.sh
-
Run the script as root
bash sudo ./scripton.sh
Warning: Running scripts with root privileges can be dangerous if the script's content is malicious or if it has not been thoroughly reviewed. Proceed with caution.
Installing Blue Archive
If you cannot install Blue Archive from the Google Play Store, you can download the APK from APKPure. Make sure to use the Browser
application that comes with Waydroid to download the APK. Once the APK is downloaded, you can install it by clicking on the APK file in the Downloads
folder.
Conclusion
You should now be able to launch and play Blue Archive on Fedora Atomic using Waydroid. If you encounter any issues, please let me know.
Sources
Nice stats. What's your goal for this account?
Turkey halts trade with Israel until permanent Gaza ceasefire
- Turkey has halted trade with Israel, valued at $7 billion annually, until a permanent ceasefire and humanitarian aid are secured in Gaza, citing Israel's "uncompromising attitude" and worsening conditions in Gaza's Rafah region.
- This move marks Ankara's strongest step yet following months of criticism of Israel's military campaign, impacting $5.4 billion in Turkish exports and $1.6 billion in imports last year.
I don't get it. They already created a good bot network, but the username part is where they get lazy.
What do you like about GNOME Boxes?
Putting the 2 trillion dollars worth into a good use. Happy to see open-source developers getting recognition and proper compensation.
UN refugee chief says outflow of Gazans into Egypt would make conflict resolution impossible
- UNHCR chief warns that a potential assault on Rafah could lead to a refugee crisis, making the resolution of the Israeli-Palestinian conflict impossible.
- Filippo Grandi, emphasized the need to prevent such an exodus, highlighting the responsibility of Israel, the occupying power in Gaza, to avoid this situation.
US has told Iran it was not involved in Damascus attack, White House says
- The US assured Iran it wasn't involved in the airstrike that killed an Iranian commander in Damascus, likely conducted by Israel.
- Fearing retaliation, the US urged Iran to avoid escalation and attacks on US targets.
I didn't downvote, but there are several reasons why some users would downvote this post:
- No English translation
- Vtuber
- Users on r/all automatically downvoting anime-related content
There's a Wikipedia article regarding this incident. Have a look: https://en.wikipedia.org/wiki/XZ_Utils_backdoor
Thankfully, there are some people who are not concerned with copyrights or trademarks. They get to watch anime with no restrictions.
Colombia seeks to join Gaza genocide case against Israel at World Court
- Colombia has requested permission from the International Court of Justice to intervene in South Africa's case against Israel for genocide in Gaza, aiming to protect Palestinian safety and existence.
- The ICJ has ordered Israel to ensure timely food supplies to Gaza and previously instructed Israel to refrain from actions under the genocide convention and to prevent genocidal acts against Palestinians, which Israel denies, attributing its actions to targeting Hamas rather than civilians.
RIP "Ace of Spades: Battle Builder". I can't play this game because Jagex shut down the servers. Can't even play LAN or against bots.
Any plans for flatpak release?
The Black Mesa Hazard Course 2.0™ (By: A Jolly Wangcore)
YouTube Video
Click to view this content.
Japan threatened on Tuesday to take China to the World Trade Organization (WTO) to seek a reversal of Beijing's ban on all of its seafood imports after the release of treated radioactive water from the stricken Fukushima Daiichi nuclear power plant.
Mirror: https://archive.ph/fvPjz
Japan threatened on Tuesday to take China to the World Trade Organization (WTO) to seek a reversal of Beijing's ban on all of its seafood imports after the release of treated radioactive water from the stricken Fukushima Daiichi nuclear power plant.
Mirror: https://archive.ph/fvPjz
They're cross-posts, and I believe they're grouped together, at least in the official Lemmy web client.
I've been using Aegis Authenticator for about two years now . It is free and open-source, and works as expected.
No. I'd rather not owe the bank anything.
I believe the immutable distros you're referring to are Fedora Silverblue and Fedora Kinoite.
I am able to login just fine. Is your Firefox browser up-to-date?
Thanks for the heads-up. According to Catbox FAQ, it seems that there's an issue with Comcast, Spectrum, Rogers and Quad9.
What DNS are you using?