Ubuntu Server 20.04.3 でARK鯖構築・移転・移植等

# Ubuntu Server上にARKサーバを構築

ARK server を Ubuntu Server 20.04.3に構築メモ

ARKサーバを複数構築し、サーバ間でアイテムや恐竜を共有して遊ぶ際の環境構築となります。

一応適当なパソコンにOSを入れて、サーバにログインするまでの流れまでを解説しています。

複数のサーバを開くときはサーバのメモリを大量に使用するため、他のサービスと併用させる際はお気を付けください。

## 構築手順

### OSインストール (Ubuntu Server 20.04.3)

```
Use UP, DOWN and ENTER keys to select your language.
   [ Asturianu        > ]
   [ ...              > ]
   [ ...              > ]
   [ English          > ]
   [ English (UK)     > ]
   [ ...              > ]
   [ ...              > ]
```

`[ English          >]` を選択する。
バージョンやJA版で日本語を選択すると表示がバグることがある。

```
Please select your keyboard layout below, or select "Identify keyboard" to detect your layout automatically.

      Layout:  [ Japanese                ▼ ]

     Variant:  [ Japanese         ▼ ]

                               [ Identify keyboard ]  
```

キーボードのレイアウト設定する。

```
Configure at least one interface this server can use to talk to other machines, and which preferably provides sufficient access for updates.

   NAME    TYPE  NOTES
 [ enp3s0  eth   -              ▼ ]
   DHCPv4  192.168.1.xxx/24
   11:22:33:44:55:66 / Qualcomm Atheros / Killer E220x Gigabit Ethernet Controller

 [ Create bond > ]
```

IP固定に関してはルータで行う場合DHCPでネットワーク接続を行う。

固定で設定したい場合はここで設定しておく。

```
If this system requires a proxy to connect to the internet, enter its details here.

Proxy adderss:  ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                If you need to use a HTTP proxy to access the outside world, enter the proxy information here. Otherwise, leave this bland.

                The proxy information should be given in the standard form of "http://[[user][:pass]@]host[:port]/".
```

Enterでそのまま進める。

```
If you use an alternative mirror for Ubuntu, enter its details here.

Mirror address:  http://jp.archive.ubuntu.com/ubuntu
                 You may provide anarchive mirror thatwill be used instead of the default.
```

jpサーバからミラーを行う。

```
Configure a guided storage layout, or create a custom one:
(X)  Use an entire disk
     [ md126                                        imsm RAID 5  7.277T ▼ ]
     ( )  Set up this disk as an LVM group
          [ ]  Encrypt the LVM group with LUKS
                       Passphrase:

               Confirm passphrase:

     (X)  Custom storage layout
```

カスタムストレージを選択する。

特にメモリ周りをいじる為にカスタムする必要がある。

```
FILE SYSTEM SUMMARY
  MOUNT POINT   SIZE      TYPE      DEVICE TYPE
[ /               7.089T  new ext4  new partition of imsm RAID 5 > ]
[ /boot          64.000G  new ext4  new partition of imsm RAID 5 > ]
[ /boot/efi     512.000M  new fat32 new partition of imsm RAID 5 > ]
[ swap          128.000G  new swap  new partition of imsm RAID 5 > ]
```

メモリを非常に使用するため、大容量のswap領域を確保しておくことをお勧めします。


※sshの設定はgithabのアカウント等で登録されているものを読み込ませると簡単なものとなる。

### ポート構築

ここからはssh接続でのヘッドレスサーバ扱い

```
$ sudo apt update 
$ sudo apt upgrade
```

```
$ sudo adduser <rootuser>
$ sudo gpasswd -a <rootuser> sudo
$ su <rootuser>
```

```
$ sudo nano /etc/default/ufw
```

```
-   IPV6=yes
+   IPV6=no
```

複数のARKサーバを立ち上げる際のポートオープン

```
$ sudo ufw allow <ssh's port>
$ sudo ufw allow 7771:7780/udp
$ sudo ufw allow 27011:27015/udp
$ sudo ufw allow 27021:27025/udp
$ sudo ufw default deny
$ sudo ufw enable
$ sudo ufw status
```

各サーバはそれぞれ別ワールドの指定も可能なためマルチでワールドで遊べる。

| server | game port | Raw UDP port | Query port | RCON port |
| :---: | :---: | :---: | :---: | :---: |
| server1 | 7771 | 7772 | 27015 | 27021 |
| server2 | 7773 | 7774 | 27016 | 27022 |
| server3 | 7775 | 7776 | 27017 | 27023 |
| server4 | 7777 | 7778 | 27018 | 27024 |
| server5 | 7779 | 7780 | 27019 | 27025 |

```
$ sudo dpkg --add-architecture i386
$ sudo apt install lib32gcc1
$ sudo apt install libsdl2-2.0-0:i386
$ sudo apt update
$ sudo apt install steamcmd
```

ライセンスが表示されるので、TABを押し、OKを選択して、Enterを押す。
I AGREEを選択して、Enterを押す。

ファイルオープン数の上限設定

```
$ sudo nano /etc/sysctl.conf
```

```
fs.file-max=100000
```

```
$ sudo sysctl -p /etc/sysctl.conf
```

```
$ sudo nano /etc/security/limits.conf
```

```
*                soft    nofile          1000000
*                hard    nofile          1000000
```

```
$ sudo nano /etc/pam.d/common-session
```

```
session required        pam_limits.so
```

### ARKサーバ立ち上げ

サーバを管理するユーザの作成を行う。

```
$ sudo adduser ark
$ su ark
$ cd ~
$ mkdir -p Servers/Server001
$ /usr/games/steamcmd +login anonymous +force_install_dir /home/ark/Servers/Server001 +app_update 376030 +quit
```

※ユーザを間違って作成した際の削除方法

```
$ sudo userdel -r ark
```

起動プロセスに追加

```
$ nano /home/ark/Servers/Server01/arkserver01.service
```

```
[unit]
Description=ARK: Survival Evolved dedicated server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
Type=simple
Restart=no
StartLimitBurst=3
User=ark
Group=ark
ExecStartPre=/usr/games/steamcmd +login anonymous +force_install_dir /home/ark/Servers/Server01 +app_update 376030 +quit
ExecStart=/home/ark/Servers/Server01/ShooterGame/Binaries/Linux/ShooterGameServer <マップID>?listen?port=7771?QueryPort=27015?RCONPort=27021?SessionName="<サーバー名>"?MaxPlayers=<最大入室プレイヤー数>?ServerPassword="<入室パスワード>"?ServerAdminPassword="<管理者パスワード>" -server -log
LimitNOFILE=100000
WorkingDirectory=/home/ark/Servers/Server01/ShooterGame/Binaries/Linux
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID

[Install]
WantedBy=multi-user.target
```

systemdを用いた自動起動の設定

```
$ sudo cp /home/ark/Servers/Server01/arkserver01.service /lib/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl enable arkserver01
$ sudo systemctl start arkserver01
```

サービスの状態確認

```
$ sudo systemctl status arkserver01
```

※起動自体はすぐに立ち上がります。ただし、クライアント側からサーバにアクセスするまで（サーバとして完全に立ち上がるまで）には結構時間がかかる為、ARK側からサーバが見つけられない場合でも5-10分ほど待ってみてください。それでも見つからない場合は設定パラメータにミスがある可能性があります。特に複数のサーバをシェル等で一括して起動するとかなりメモリに負荷をかけるためレンタルサーバーの際は十分に注意してください。

マップID一覧

|  | マップ名 | マップID |
| :---: | :--- | :--- |
| 01 | The Island | TheIsland |
| 02 | The Center | TheCenter |
| 03 | Scorched Earth | ScorchedEarth_P |
| 04 | Ragnarok | Ragnarok |
| 05 | Aberration | Aberration_P |
| 06 | Extinction | Extinction |
| 07 | Valguero | Valguero_P |
| 08 | Genesis: Part 1 | Genesis |
| 09 | Crystal Isles | CrystalIsles |
| 10 | Genesis: Part 2 | Gen2 |
| 11 | Lost Island | LostIsland |

### WindowsからARKサーバの移植

USBでデータを移植してubuntuで起動する。

```
$ sudo fdisk -l
```

接続しているデバイスを特定する。

```
Disk /dev/sda: 111.81 GiB, 120034123776 bytes, 234441648 sectors
Disk model: ASM105x
```

USBメモリをマウントするマウントポイントを作成する。

```
$ sudo mkdir /media/usb
```

```
$ sudo mount -t ntfs /dev/sda1 /media/usb
```

arkユーザでログインして当該ファイルをコピーする。

```
$ su ark
$ cp /media/usb/ArkData/Servers/Server1 ./
```

### サーバの設定（おすすめ）


サーバ設定は以下のファイルをいじることで行うことができる。

```
/ShooterGame/Saved/Config/LinuxServer/GameUserSetting.ini
```

```
[/Script/ShooterGame.ShooterGameUserSettings]
MasterAudioVolume=1.000000
MusicAudioVolume=1.000000
SFXAudioVolume=1.000000
VoiceAudioVolume=1.000000
CharacterAudioVolume=1.000000
UIScaling=1.000000
UIQuickbarScaling=0.650000
CameraShakeScale=0.650000
bFirstPersonRiding=False
bThirdPersonPlayer=False
bInventoryHideUnlearnedEngrams=False
bShowStatusNotificationMessages=True
TrueSkyQuality=0.700000
FOVMultiplier=1.000000
GroundClutterDensity=1.000000
bFilmGrain=False
bMotionBlur=False
bUseDistanceFieldAmbientOcclusion=False
bUseSSAO=False
bShowChatBox=True
bCameraViewBob=True
bInvertLookY=False
bFloatingNames=True
bChatBubbles=True
bHideServerInfo=False
bJoinNotifications=False
bCraftablesShowAllItems=False
bLocalInventoryItemsShowAllItems=False
bLocalInventoryCraftingShowAllItems=True
bRemoteInventoryItemsShowAllItems=False
bRemoteInventoryCraftingShowAllItems=False
bRemoteInventoryShowEngrams=True
bForceDisableSuperDetailMode=True
LookLeftRightSensitivity=1.000000
LookUpDownSensitivity=1.000000
GraphicsQuality=1
ActiveLingeringWorldTiles=1
ClientNetQuality=3
LastServerSearchType=0
LastServerSort=2
LastPVESearchType=-1
LastDLCTypeSearchType=-1
LastServerSortAsc=True
LastAutoFavorite=True
LastServerSearchHideFull=False
LastServerSearchProtected=False
LastServerSearchIncludeServersWithActiveMods=True
HideItemTextOverlay=True
bQuickToggleItemNames=True
bDistanceFieldShadowing=False
LODScalar=0.780000
bToggleToTalk=False
HighQualityMaterials=True
HighQualitySurfaces=True
bTemperatureF=False
bDisableTorporEffect=False
bChatShowSteamName=False
bChatShowTribeName=True
bReverseTribeLogOrder=False
EmoteKeyBind1=0
EmoteKeyBind2=0
bNoBloodEffects=False
bLowQualityVFX=False
bSpectatorManualFloatingNames=False
bSuppressAdminIcon=False
bUseSimpleDistanceMovement=False
bDisableMeleeCameraSwingAnims=False
bHighQualityAnisotropicFiltering=False
bUseLowQualityLevelStreaming=True
bPreventInventoryOpeningSounds=False
bPreventItemCraftingSounds=False
bPreventHitMarkers=False
bPreventCrosshair=False
bPreventColorizedItemNames=False
bHighQualityLODs=False
bExtraLevelStreamingDistance=False
bEnableColorGrading=True
DOFSettingInterpTime=0.000000
bDisableBloom=False
bDisableLightShafts=False
LastJoinedSessionPerCategory=" "
LastJoinedSessionPerCategory=" "
LastJoinedSessionPerCategory=" "
LastJoinedSessionPerCategory=" "
LastJoinedSessionPerCategory=" "
LastJoinedSessionPerCategory=" "
LastJoinedSessionPerCategory=" "
LastJoinedSessionPerCategory=" "
LastJoinedSessionPerCategory=" "
bDisableMenuTransitions=False
bEnableInventoryItemTooltips=True
bRemoteInventoryShowCraftables=False
bNoTooltipDelay=False
LocalItemSortType=0
LocalCraftingSortType=0
RemoteItemSortType=0
RemoteCraftingSortType=0
VersionMetaTag=1
ShowExplorerNoteSubtitles=False
DisableMenuMusic=False
DisableDefaultCharacterItems=False
bRequestDefaultCharacterItemsOnce=False
bHasSeenGen2Intro=False
bHideFloatingPlayerNames=False
bHideGamepadItemSelectionModifier=False
bToggleExtendedHUDInfo=False
PlayActionWheelClickSound=True
CompanionReactionVerbosity=3
EnableEnvironmentalReactions=True
EnableRespawnReactions=True
EnableDeathReactions=True
EnableSayHelloReactions=True
EnableEmoteReactions=True
EnableMovementSounds=True
DisableSubtitles=False
CompanionSubtitleVerbosityLevel=3
CompanionIsHiddenState=False
MaxAscensionLevel=0
bHostSessionHasBeenOpened=False
bForceTPVCameraOffset=False
bDisableTPVCameraInterpolation=False
bFPVClimbingGear=False
bFPVGlidingGear=False
Gamma1=2.200000
Gamma2=3.500000
AmbientSoundVolume=1.000000
bAllowAnimationStaggering=True
bUseOldThirdPersonCameraTrace=False
bUseOldThirdPersonCameraOffset=False
bLowQualityAnimations=False
bShowedGenesisDLCBackground=False
bShowedGenesis2DLCBackground=False
bViewedAnimatedSeriesTrailer=False
bViewedARK2Trailer=False
bShowRTSKeyBinds=True
bHasCompletedGen2=False
bUseVSync=False
MacroCtrl0=
MacroCtrl1=
MacroCtrl2=
MacroCtrl3=
MacroCtrl4=
MacroCtrl5=
MacroCtrl6=
MacroCtrl7=
MacroCtrl8=
MacroCtrl9=
ResolutionSizeX=1280
ResolutionSizeY=720
LastUserConfirmedResolutionSizeX=1280
LastUserConfirmedResolutionSizeY=720
WindowPosX=-1
WindowPosY=-1
bUseDesktopResolutionForFullscreen=False
FullscreenMode=2
LastConfirmedFullscreenMode=2
Version=5

[ServerSettings]
ShowMapPlayerLocation=True
AllowThirdPersonPlayer=True
ServerAdminPassword=31415926
ServerCrosshair=True
RCONPort=27021
EnablePVPGamma=True
TheMaxStructuresInRange=10500.000000
OxygenSwimSpeedStatMultiplier=1.000000
StructurePreventResourceRadiusMultiplier=1.000000
TribeNameChangeCooldown=15.000000
PlatformSaddleBuildAreaBoundsMultiplier=1.000000
StructurePickupTimeAfterPlacement=30.000000
StructurePickupHoldDuration=0.500000
AllowIntegratedSPlusStructures=True
AllowHideDamageSourceFromLogs=True
RaidDinoCharacterFoodDrainMultiplier=1.000000
PvEDinoDecayPeriodMultiplier=1.000000
KickIdlePlayersPeriod=3600.000000
PerPlatformMaxStructuresMultiplier=3.000000
PerPlatformMaxStructuresMultiplier=3.00000
AutoSavePeriodMinutes=15.000000
ListenServerTetherDistanceMultiplier=1.000000
MaxTamedDinos=4000.000000
ItemStackSizeMultiplier=1.000000
RCONServerGameLogBuffer=600.000000
AllowHitMarkers=True
AllowCrateSpawnsOnTopOfStructures=True
TamingSpeedMultiplier=20.00000
XPMultiplier=10.00000
ServerAutoForceRespawnWildDinosInterval=864000
PersonalTamedDinosSaddleStructureCost=10.000000
noTributeDownloads=False
PreventDownloadSurvivors=True
PreventDownloadItems=True
PreventDownloadDinos=True

[/Game/PrimalEarth/CoreBlueprints/TestGameMode.TestGameMode_C]
bServerGameLogEnabled=True

[SessionSettings]
SessionName=JP-PVP-XXXXX-TheIsland

[/Script/Engine.GameSession]
MaxPlayers=32

[MessageOfTheDay]
Duration=30
Message="HelloWorld"
```

### サーバのアップデート

以下のコマンドにより最新バージョンのマップをロードすることができる。

```
/usr/games/steamcmd +login anonymous +force_install_dir /home/ark/Servers/Server01 +app_update 376030 
```

### Hamachiによる外部からのアクセス

```
$ wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.203-1_i386.deb
$ sudo dpkg -i logmein-hamachi_2.1.0.203-1_i386.deb
$ sudo hamachi login
```

最新バージョンのhamachiをインストールする。

```
$ sudo hamachi create [ネットワーク名] [接続するためのパスワード]
Creating [ネットワーク名] .. ok

$ sudo hamachi list
 * [ネットワーク名]  capacity: 1/5, subscription type: Free, owner: This computer
```

アカウントへの紐づけ

```
$ sudo hamachi attach hoge@hoge
Sending attach request to hoge@hoge without networks .. ok
```



### 参考

1. [Dedicated Server Setup](https://ark.fandom.com/ja/wiki/Dedicated_Server_Setup)

1. [ARK: Survival Evolved Wiki](https://wikiwiki.jp/arkse/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC)

1. [Ubuntu Server で USB メモリ・ストレージのマウント](https://www.rough-and-cheap.jp/linux/ubuntu-server-mount-usb/)

1. [Ubuntu20.04 LogMeIn Hamachiを使ってみる](https://rohhie.net/ubuntu20-04-try-using-logmein-hamachi/)