Skip to content

Instantly share code, notes, and snippets.

@TheNewHEROBRINEX
Last active August 2, 2021 17:46
Show Gist options
  • Save TheNewHEROBRINEX/bb5a57cd109a26762ca4212be501437f to your computer and use it in GitHub Desktop.
Save TheNewHEROBRINEX/bb5a57cd109a26762ca4212be501437f to your computer and use it in GitHub Desktop.
function message {
echo "[*] $1"
}
message "PocketMine-MP sta per essere installato nella cartella corrente (`pwd`)"
read -p "Premi invio per iniziare l'installazione...
"
message "Download dei binari PHP..."
wget https://jenkins.pmmp.io/job/PHP-8.0-Linux-x86_64/lastSuccessfulBuild/artifact/PHP_Linux-x86_64.tar.gz
tar xzf PHP_Linux-x86_64.tar.gz
rm PHP_Linux-x86_64.tar.gz
message "Download dello start.sh"
wget https://raw.githubusercontent.com/pmmp/PocketMine-MP/master/start.sh
chmod u+x start.sh
cat << \EOF > installer.php
<?php
system("rm installer.php");
for ($page = 1; ; $page++) {
$curl = curl_init("https://api.github.com/repos/pmmp/PocketMine-MP/releases?per_page=5000&page=$page");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, "PocketMine-MP installer by TheNewHEROBRINEX");
$result = curl_exec($curl);
if ($result === false) {
error("Impossibile eseguire curl.");
}
$json_releases = json_decode($result, true);
if ($json_releases === null) {
error("Impossibile gestire la risposta di github.");
}
if ($json_releases === []) {
break;
}
$releases = array_merge($releases ?? [], parse_json_releases($json_releases));
}
foreach ($releases as $id => $release) {
writeLine(str_pad("($id) ", 7) . $release["desc"]);
}
writeLine();
$id = getInput("Quale release vuoi installare? [0]", "0", "0-" . (count($releases) - 1));
if (!ctype_digit($id) or !isset($releases[(int)$id])) {
error("La release $id non esiste. L'ultima è stata selezionata automaticamente.", false);
$id = 0;
}
system("wget " . $releases[(int)$id]["download"] . " -O PocketMine-MP.phar");
message("Installazione completata. Per startare il server fai ./start.sh");
function parse_json_releases(array $json_releases): array {
foreach ($json_releases as $json_release) {
$release = [];
$release["desc"] = $json_release["name"] . " – " . trim(explode("\n", $json_release["body"])[0], "*\r\n");
if (count($json_release["assets"]) === 0) {
continue;
}
foreach ($json_release["assets"] as $asset) {
if (preg_match("/\bPocketMine-MP.*\.phar\b/", $asset["name"])) {
$release["download"] = $asset["browser_download_url"];
$releases[] = $release;
break;
}
}
}
return $releases;
}
//adapted from https://github.com/pmmp/PocketMine-MP/blob/master/src/pocketmine/wizard/SetupWizard.php
function writeLine(string $line = ""): void{
echo $line . PHP_EOL;
}
function _readLine(): string{
return trim((string) fgets(STDIN));
}
function message(string $message): void{
writeLine("[*] " . $message);
}
function error(string $message, bool $fatal = true): void {
writeLine("[!] " . $message);
if($fatal){
exit(1);
}
}
function getInput(string $message, string $default = "", string $options = ""): string{
$message = "[?] " . $message;
if($options !== "" or $default !== ""){
$message .= " (" . ($options === "" ? $default : $options) . ")";
}
$message .= ": ";
echo $message;
$input = _readLine();
return $input === "" ? $default : $input;
}
EOF
./bin/php7/bin/php installer.php
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment