2017-07-07 01:51:38 +00:00
< ? php
/**
* Pterodactyl - Panel
* Copyright ( c ) 2015 - 2017 Dane Everitt < dane @ daneeveritt . com >.
*
* Permission is hereby granted , free of charge , to any person obtaining a copy
* of this software and associated documentation files ( the " Software " ), to deal
* in the Software without restriction , including without limitation the rights
* to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
* copies of the Software , and to permit persons to whom the Software is
* furnished to do so , subject to the following conditions :
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
*/
use Illuminate\Database\Seeder ;
use Pterodactyl\Models\Service ;
use Pterodactyl\Models\ServiceOption ;
use Pterodactyl\Models\ServiceVariable ;
2017-07-07 02:08:49 +00:00
class RustServiceTableSeeder extends Seeder
2017-07-07 01:51:38 +00:00
{
/**
* The core service ID .
*
* @ var Models\Service
*/
protected $service ;
/**
* Stores all of the option objects .
*
* @ var array
*/
protected $option = [];
/**
* Run the database seeds .
*
* @ return void
*/
public function run ()
{
$this -> addCoreService ();
$this -> addCoreOptions ();
$this -> addVariables ();
}
private function addCoreService ()
{
$this -> service = Service :: updateOrCreate ([
'author' => config ( 'pterodactyl.service.core' ),
'folder' => 'rust' ,
], [
'name' => 'Rust' ,
'description' => 'The only aim in Rust is to survive. To do this you will need to overcome struggles such as hunger, thirst and cold. Build a fire. Build a shelter. Kill animals for meat. Protect yourself from other players, and kill them for meat. Create alliances with other players and form a town. Do whatever it takes to survive.' ,
'startup' => './RustDedicated -batchmode +server.port {{SERVER_PORT}} +server.identity "rust" +rcon.port {{RCON_PORT}} +rcon.web true +server.hostname \"{{HOSTNAME}}\" +server.level \"{{LEVEL}}\" +server.description \"{{DESCRIPTION}}\" +server.url \"{{URL}}\" +server.headerimage \"{{SERVER_IMG}}\" +server.worldsize \"{{WORLD_SIZE}}\" +server.seed \"{{SEED}}\" +server.maxplayers {{MAX_PLAYERS}} +rcon.password \"{{RCON_PASS}}\" {{ADDITIONAL_ARGS}}' ,
'index_file' => Service :: defaultIndexFile (),
]);
}
private function addCoreOptions ()
{
$script = <<< 'EOF'
apt update
apt - y -- no - install - recommends install curl lib32gcc1 ca - certificates
cd / tmp
curl - sSL - o steamcmd . tar . gz http :// media . steampowered . com / installer / steamcmd_linux . tar . gz
mkdir - p / mnt / server / steam
tar - xzvf steamcmd . tar . gz - C / mnt / server / steam
cd / mnt / server / steam
chown - R root : root / mnt
export HOME =/ mnt / server
./ steamcmd . sh + login anonymous + force_install_dir / mnt / server + app_update 258550 + quit
mkdir - p / mnt / server /. steam / sdk32
cp - v linux32 / steamclient . so ../. steam / sdk32 / steamclient . so
EOF ;
$this -> option [ 'rustvanilla' ] = ServiceOption :: updateOrCreate ([
'service_id' => $this -> service -> id ,
'tag' => 'rustvanilla' ,
], [
'name' => 'Vanilla' ,
'description' => 'Vanilla Rust server.' ,
'docker_image' => 'tenten8401/pterodactyl-rust' ,
'config_startup' => '{"done": "Server startup complete", "userInteraction": []}' ,
'config_files' => '{}' ,
'config_logs' => '{"custom": false, "location": "latest.log"}' ,
'config_stop' => 'quit' ,
'config_from' => null ,
'startup' => null ,
'script_install' => $script ,
'script_entry' => 'bash' ,
'script_container' => 'ubuntu:latest' ,
]);
}
private function addVariables ()
{
$this -> addVanillaVariables ();
}
private function addVanillaVariables ()
{
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'LD_LIBRARY_PATH' ,
], [
'name' => 'LD_LIBRARY_PATH' ,
'description' => 'A fix for Rust not starting.' ,
'default_value' => './RustDedicated_Data/Plugins/x86_64' ,
'user_viewable' => 0 ,
'user_editable' => 0 ,
'rules' => 'required' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'HOSTNAME' ,
], [
'name' => 'Server Name' ,
'description' => 'The name of your server in the public server list.' ,
'default_value' => 'A Rust Server' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'required|string' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'LEVEL' ,
], [
'name' => 'Level' ,
'description' => 'The world file for Rust to use.' ,
'default_value' => 'Procedural Map' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'required|string' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'DESCRIPTION' ,
], [
'name' => 'Description' ,
'description' => 'The description under your server title. Commonly used for rules & info.' ,
'default_value' => 'Powered by Pterodactyl' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'required' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'URL' ,
], [
'name' => 'URL' ,
'description' => 'The URL for your server. This is what comes up when clicking the "Visit Website" button.' ,
'default_value' => 'http://pterodactyl.io' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'url' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'WORLD_SIZE' ,
], [
'name' => 'World Size' ,
'description' => 'The world size for a procedural map.' ,
'default_value' => '3000' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'required|integer' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'SEED' ,
], [
'name' => 'World Seed' ,
'description' => 'The seed for a procedural map.' ,
'default_value' => '' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'present' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'MAX_PLAYERS' ,
], [
'name' => 'Max Players' ,
'description' => 'The maximum amount of players allowed in the server at once.' ,
'default_value' => '40' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'required|integer' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'SERVER_IMG' ,
], [
'name' => 'Server Header Image' ,
'description' => 'The header image for the top of your server listing.' ,
'default_value' => '' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'url' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'RCON_PORT' ,
], [
'name' => 'RCON Port' ,
'description' => 'Port for RCON connections.' ,
'default_value' => '8401' ,
'user_viewable' => 1 ,
'user_editable' => 0 ,
'rules' => 'required|integer' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'RCON_PASS' ,
], [
'name' => 'RCON Password' ,
'description' => 'Remote console access password.' ,
'default_value' => 'CHANGEME' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'required' ,
]);
ServiceVariable :: updateOrCreate ([
'option_id' => $this -> option [ 'rustvanilla' ] -> id ,
'env_variable' => 'ADDITIONAL_ARGS' ,
], [
'name' => 'Additional Arguments' ,
'description' => 'Add additional startup parameters to the server.' ,
'default_value' => '' ,
'user_viewable' => 1 ,
'user_editable' => 1 ,
'rules' => 'present' ,
]);
}
}