Icarus
Ei tarpeeksi arvosteluja
Easy Linux Dedicated Server Guide
Tekijältä [KIN] AlphaObeisance
A straight forward Steam Guide for deploying an Icarus Dedicated Server on all Linux Servers & PCs.
3
   
Palkinto
Lisää suosikkeihin
Lisätty suosikkeihin
Poista suosikeista
= PREFACE =
________________________________________________________________


I’d like to preface by stating that I have personally contributed nothing to making this possible and am merely providing Steam front Documentation for installing an Icarus Dedicated Server via Nerodon’s preconfigured Docker deployment. Without the work of Nerodon and their contributors; this wouldn’t be as simple for me to write up for you; so thank you!

If you find this guide useful please rate it accordingly.
Without ratings, it's harder for other Linux users to find this guide. Help them out!

Questions, comments, corrections or concerns please feel free to comment below

________________________________________________________________
= HARDWARE / SOFTWARE =
You can install this on any Linux computer / virtual machine / container.

[Desktop Virtualization:] VMware Workstation[www.vmware.com]
[Servers:] Proxmox[www.proxmox.com]
________________________________________________________________

[My Server]
OS: Proxmox
Hardware:
Enterprise Dell R730xd
x2 Intel Xeon E5-2680 48 @ 3.30 GHz
220GB RAM

SYSTEM RESOURCES
[Icarus Server VM]
2 cores
2 ensures around 50% headroom mine runs 4 cores and utilizes around 24% CPU use avg
8GB RAM
avgs around 6.75GB ram regardless of 1-5 players I've tested with. Servers are well optimized.

________________________________________________________________

Ideally, we'll get Native Linux Dedicated Server support in the future; but until then this will have to do.

#LinuxIsTheServerShotcaller
Seriously RocketWerkz, Linux is taking over desktop, but it's owned the Server space for a hot second, there's a reason virtually every major corporation on the planet uses Linux to host their servers ;)
= INSTALLATION =
________________________________________________________________

Creating a dedicated server on Linux (Any Linux Distro) is quite simple and straight forward thanks to the use of Docker.

[Step 1:]
Download Docker

Arch Linux: sudo pacman -S docker docker-compose
Other Distros: https://docs.docker.com/engine/install/

[Step 2:]
Enable Docker


sudo systemctl enable --now docker

[Step 3:]
Pull nerodons docker container


sudo docker pull nerodon/icarus-dedicated

[Step 4:]
Run docker


sudo docker run -p 17777:17777/udp -p 27015:27015/udp -v data:/home/steam/.wine/drive_c/icarus -v game:/game/icarus -e SERVERNAME=AmazingServerName -e JOIN_PASSWORD=mypassword -e ADMIN_PASSWORD=mysupersecretpassword nerodon/icarus-dedicated:latest

________________________________________________________________

[NOTE:] Change AmazingServerName, mypassword, mysupersecretpassword to your desired values.
________________________________________________________________

[Step 5:]
Create docker-compose.yml (This sets up your basic server name and credentials)


mkdir ~/icarus-server
cd ~/icarus-server
touch docker-compose.yml
nano docker-compose.yml
________________________________________________________________

[NOTE:] if you dont have nano, welcome to 2024 ;) install it. Or fart dust with VIM. Whatever editor you prefer, even if it's something as painstaking and un-intuitive as VIM lol
________________________________________________________________

[EXAMPLE:]

version: "3.8"

services:

icarus:
container_name: icarus-dedicated
image: nerodon/icarus-dedicated:latest
hostname: icarus-dedicated
init: true
restart: "unless-stopped"
networks:
host:
ports:
- 17777:17777/udp
- 27015:27015/udp
volumes:
- data:/home/steam/.wine/drive_c/icarus
- game:/game/icarus
environment:
- SERVERNAME=AmazingServerName
- BRANCH=public
- PORT=17777
- QUERYPORT=27015
- JOIN_PASSWORD=mypassword
- ADMIN_PASSWORD=mysupersecretpassword
- STEAM_USERID=1000
- STEAM_GROUPID=1000
- STEAM_ASYNC_TIMEOUT=60

volumes:
data: {}
game: {}

networks:
host: {}

________________________________________________________________

[NOTE:] Change AmazingServerName, mypassword, mysupersecretpassword to your desired values.
Save and exit.
________________________________________________________________

[Make script executable]

chmod +x ~/icarus-server/icarus-monitor.sh

________________________________________________________________
= AUTOMATION / MONITORING =
I wanted to set up a bit of automation for my server; so I created a simple light weight monitor script that effectively checks to ensure the server is running. The script is executed in 5 second intervals.

[Step 1:]

#Create the monitor script

touch ~/icarus-server/icarus-monitor.sh
nano ~/icarus-server/icarus-monitor.sh

[Paste the following]

#!/bin/bash

while true; do
# Check if the container is running
if ! docker ps -q -f "name=icarus-dedicated" > /dev/null; then
# If the container is not running, start it
cd ~/icarus-server && docker-compose up -d
fi
# Wait for 5 seconds before checking again
sleep 5
done

[Save and exit.]

[Step 2:]
Create cron jobs to ensure server starts at boot and monitors server status to ensure always running.


[Open Crontab]
crontab -e

[Paste the following two strings]

#Initialize-Icarus-Server
@reboot cd ~/icarus-server && docker-compose up -d
#Icarus-Server-Monitor
@reboot sleep 180 && nohup ~/check_icarus_server.sh &

[Save, exit, reboot]
= TROUBLESHOOTING =
________________________________________________________________

Now Nerodons github page for the icarus-dedicated docker container says there is a Known Issue regarding an out of memory error. I have not personally had this issue; but just in case here you go.

[Known Issues Out of memory error:]
Freeing x bytes from backup pool to handle out of memory and Fatal error: [File: Unknown] [Line: 197] \nRan out of memory allocating 0 bytes with alignment 0\n but system has enough memory.

[Solution:] Increase maximum number of memory map areas (vm.max_map_count) tested with 262144

[temporary:]
sysctl -w vm.max_map_count=262144[/b]
[permanent:]
echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p

________________________________________________________________
= NOTES =
Successful Server Setup:

SOURCE:]nerodon/icarus-dedicated[hub.docker.com]


Using this process, I successfully set up a standard 8-player dedicated server for my family to play on.

Challenges with Customizing Server Settings:

Despite knowing the server directory(?),

/home/steam/.wine/drive_c/icarus/Saved/Config/WindowsServer/ServerSettings.ini

I haven't been able to effectively customize server settings beyond server name, password, and admin password.

Examples of settings I struggle with:
Increasing player count from 8 to 20.
Adjusting server timeout and lobby settings.

Acknowledgment of Personal Knowledge Gap:

I recognize this is due to my own lack of understanding.
I'm seeking guidance on how to make these customizations persist.

MOST IMPORTANT!:
I use Arch... BTW! ;)
23 kommenttia
[KIN] AlphaObeisance  [tekijä] 3.10. klo 18.44 
I haven't tested but Grolnok's instructions all look logically sound so I've no doubt it works. I'd bet updating the steam app via the docker shell is what fixed it. My wife is a big fan of Icarus, I'll revisit soon and update guide if need be.
Grolnok the Omnivore 3.10. klo 18.40 
If the server doesn't update it is because SteamCMD is checking the OS/Platform and failing when it sees something other than "Windows"

I tried a few different things, not sure what eventually worked:

Update the docker compose.yml

1.) nano to your docker compose.yml
2.) Add the following:

environment:
- STEAMCMD_FORCE_PLATFORM_TYPE=windows

Run as the steam user inside the container
(while the docker is up)

1. cd to the docker/icarus folder
2. Enter the docker
docker exec -it icarus-dedicated bash

3.) switch to the steam user
su - steam


4.) Force steamCMD to update the app disregarding the platform type
~/steamcmd/steamcmd.sh +@sSteamCmdForcePlatformType windows +login anonymous +app_update 2089300 validate +quit


5.) "exit"
6.) Restart the docker
docker-compose restart
[KIN] AlphaObeisance  [tekijä] 3.10. klo 8.57 
@АРМЯНСКИЙ ПСИХ It appears that the docker container has not been updated in 2 months but that's not exactly telling. The container may function perfectly fine as is. I haven't played Icarus in several months now so I cannot confirm/deny that it works or not.

I'll see if I can find the time to get a server online as Docker is not difficult to deploy.
is it still working?
R•F•C_YQJ 27.1. klo 7.22 
,At present, although I can connect to the server to play, I have encountered a new problem. The delay is only 40ms and it is very smooth. However, the server log shows that the network seems not very friendly, which often causes my connection to time out
R•F•C_YQJ 27.1. klo 7.22 
[2025.01.27-14.35.21:082][328]LogNet: NotifyAcceptingConnection accepted from: 76561198280845205:17777
[2025.01.27-14.35.21:215][332]LogNet: NotifyAcceptingConnection accepted from: 76561198280845205:17777
[2025.01.27-14.35.21:348][336]LogNet: NotifyAcceptingConnection accepted from: 76561198280845205:17777
[2025.01.27-14.35.21:349][336]LogNet: Finding connection to update to new address: 76561198280845205:17777
[2025.01.27-14.35.21:349][336]LogNet: Failed to find an existing connection with a matching cookie. Restarted Handshake failed.
STEAMPS3 - AsncTCPSocket destroyed
STEAMPS3 - AsyncTCPSocket created
STEAMPS3 - AsyncTCPSocket created
STEAMPS3 - AsncTCPSocket destroyed
STEAMPS3 - AsncTCPSocket destroyed
STEAMPS3 - AsyncTCPSocket created
STEAMPS3 - AsncTCPSocket destroyed
[KIN] AlphaObeisance  [tekijä] 26.1. klo 14.34 
@KriegTiger unfortunately I don't know right off hand. I'd have to dig through the config files. I'm sure there's something in there somewhere.
KriegTiger 26.1. klo 11.45 
@AlphaObeisance - you don't happen to know how to whitelist players, do you? I can find info on whitelisting admins, but I'd prefer to whitelist basic players so I don't need to password protect my server.
R•F•C_YQJ 26.1. klo 7.39 
The software used includes Wine7.0, Steam Community 302,. NET 4.5, C++runtime library DirectX9、steam win64 dll(1007)
R•F•C_YQJ 26.1. klo 7.31 
@AlphaObeisance 我要告诉你一个好消息,目前我在CentOS Linux release 7.9.2009 系统上完全脱离了Docker运行Icarus 服务器,以下是成功的日志:LogConnectedPlayers: Display: ServerTryCompletePlayerInitialisation - Player: R
[2025.01.26-15.09.55:122][516]LogConnectedPlayers: Display: ServerTryCompletePlayerInitialisation - Player: R?F?C_YQJ
[2025.01.26-15.09.55:194][516]LogOnlineSession: STEAM: Using P2P Data for Connection Serialization
LogOnlinePresence: Warning: STEAM: Steam friends is null, cannot set presence!
[2025.01.26-15.09.55:259][516]LogOnlinePresence: Warning: STEAM: Steam friends is null, cannot set presence!
LogConnectedPlayers: Display: ServerTryCompletePlayerInitialisation - PlayerCharacterID: 76561198280845205_1 | PlayerName: R
[2025.01.26-15.09.55:260][516]LogConnectedPlayers: Display: ServerTryCompletePlayerInitialisation - PlayerCharacterID: 76561198280845205_1 | PlayerName: R?F?C_YQJ