我搭建pocketmine服务器的过程

1716天前 · 技术 · 155次阅读

前几天,尝试搭建pocketmine,官方文档里的脚本无法使用,查阅百度也做不到有用的信息。最后在不停的尝试之下,终于成功搭建。

搭建

方法一 快速搭建

由于官方的脚本无法使用,所以需要自己创建脚本。把下面的内容上传到要安装pocketmine的文件夹,并命名为install.sh

#!/bin/bash
CHANNEL="stable"
BRANCH="stable"
NAME="PocketMine-MP"
BUILD_URL=""
update=off
forcecompile=off
alldone=no
checkRoot=on
alternateurl=off
INSTALL_DIRECTORY="./"
IGNORE_CERT="no"
while getopts "rucid:v:t:" opt; do
    case $opt in
        a)
            alternateurl=on
            ;;
        r)
            checkRoot=off
            ;;
        u)
            update=on
            ;;
        c)
            forcecompile=on
            ;;
        d)
            INSTALL_DIRECTORY="$OPTARG"
            ;;
        i)
            IGNORE_CERT="yes"
            ;;
        v)
            CHANNEL="$OPTARG"
            ;;
        t)
            BUILD_URL="$OPTARG"
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            exit 1
            ;;
    esac
done
if [ `getconf LONG_BIT` == "32" ]; then
    echo "[ERROR] PocketMine-MP is no longer supported on 32-bit systems."
    exit 1
fi
#Needed to use aliases
shopt -s expand_aliases
type wget > /dev/null 2>&1
if [ $? -eq 0 ]; then
    if [ "$IGNORE_CERT" == "yes" ]; then
        alias download_file="wget --no-check-certificate -q -O -"
    else
        alias download_file="wget -q -O -"
    fi
else
    type curl >> /dev/null 2>&1
    if [ $? -eq 0 ]; then
        if [ "$IGNORE_CERT" == "yes" ]; then
            alias download_file="curl --insecure --silent --show-error --location --globoff"
        else
            alias download_file="curl --silent --show-error --location --globoff"
        fi
    else
        echo "error, curl or wget not found"
        exit 1
    fi
fi
if [ "$checkRoot" == "on" ]; then
    if [ "$(id -u)" == "0" ]; then
        echo "This script is running as root, this is discouraged."
        echo "It is recommended to run it as a normal user as it doesn't need further permissions."
        echo "If you want to run it as root, add the -r flag."
        exit 1
    fi
fi
if [ "$CHANNEL" == "soft" ]; then
    NAME="PocketMine-Soft"
fi
ENABLE_GPG="no"
PUBLICKEY_URL="http://cdn.pocketmine.net/pocketmine.asc"
PUBLICKEY_FINGERPRINT="20D377AFC3F7535B3261AA4DCF48E7E52280B75B"
PUBLICKEY_LONGID="${PUBLICKEY_FINGERPRINT: -16}"
GPG_KEYSERVER="pgp.mit.edu"
function check_signature {
    echo "[*] Checking signature of $1"
    "$GPG_BIN" --keyserver "$GPG_KEYSERVER" --keyserver-options auto-key-retrieve=1 --trusted-key $PUBLICKEY_LONGID --verify "$1.sig" "$1"
    if [ $? -eq 0 ]; then
        echo "[+] Signature valid and checked!"
    else
        "$GPG_BIN" --refresh-keys > /dev/null 2>&1
        echo "[!] Invalid signature! Please check for file corruption or a wrongly imported public key (signed by $PUBLICKEY_FINGERPRINT)"
        exit 1
    fi
}
function parse_json {
    echo "$1" | grep "\"$2\"" | cut -d ':' -f2- | tr -d ' ",'
}
if [[ "$BUILD_URL" != "" && "$CHANNEL" == "custom" ]]; then
    BASE_VERSION="custom"
    BUILD="unknown"
    VERSION_DATE_STRING="unknown"
    ENABLE_GPG="no"
    VERSION_DOWNLOAD="$BUILD_URL"
    MCPE_VERSION="unknown"
    PHP_VERSION="unknown"
else
    echo "[*] Retrieving latest build data for channel \"$CHANNEL\""
    VERSION_DATA=$(download_file "https://update.pmmp.io/api?channel=$(tr '[:lower:]' '[:upper:]' <<< ${CHANNEL:0:1})${CHANNEL:1}")
    if [ "$VERSION_DATA" != "" ]; then
        error=$(parse_json "$VERSION_DATA" error)
        if [ "$error" != "" ]; then
            echo "[!] Failed to get download information: $error"
            exit 1
        fi
        FILENAME=$(parse_json "$VERSION_DATA" phar_name)
        BASE_VERSION=$(parse_json "$VERSION_DATA" base_version)
        BUILD=$(parse_json "$VERSION_DATA" build_number)
        MCPE_VERSION=$(parse_json "$VERSION_DATA" mcpe_version)
        PHP_VERSION=$(parse_json "$VERSION_DATA" php_version)
        VERSION_DATE=$(parse_json "$VERSION_DATA" date)
        BASE_URL=$(parse_json "$VERSION_DATA" url)
        VERSION_DOWNLOAD=$(parse_json "$VERSION_DATA" download_url)
        if [ "$(uname -s)" == "Darwin" ]; then
            VERSION_DATE_STRING=$(date -r $VERSION_DATE)
        else
            VERSION_DATE_STRING=$(date --date="@$VERSION_DATE")
        fi
        GPG_SIGNATURE=$(parse_json "$VERSION_DATA" signature_url)
        if [ "$GPG_SIGNATURE" != "" ]; then
            ENABLE_GPG="yes"
        fi
        if [ "$BASE_VERSION" == "" ]; then
            echo "[!] Couldn't get the latest $NAME version"
            exit 1
        fi
        GPG_BIN=""
        if [ "$ENABLE_GPG" == "yes" ]; then
            type gpg > /dev/null 2>&1
            if [ $? -eq 0 ]; then
                GPG_BIN="gpg"
            else
                type gpg2 > /dev/null 2>&1
                if [ $? -eq 0 ]; then
                    GPG_BIN="gpg2"
                fi
            fi
            if [ "$GPG_BIN" != "" ]; then
                gpg --fingerprint $PUBLICKEY_FINGERPRINT > /dev/null 2>&1
                if [ $? -ne 0 ]; then
                    download_file $PUBLICKEY_URL | gpg --trusted-key $PUBLICKEY_LONGID --import
                    gpg --fingerprint $PUBLICKEY_FINGERPRINT > /dev/null 2>&1
                    if [ $? -ne 0 ]; then
                        gpg --trusted-key $PUBLICKEY_LONGID --keyserver "$GPG_KEYSERVER" --recv-key $PUBLICKEY_FINGERPRINT
                    fi
                fi
            else
                ENABLE_GPG="no"
            fi
        fi
    else
        echo "[!] Failed to download version information: Empty response from API"
        exit 1
    fi
fi
echo "[*] Found $NAME $BASE_VERSION (build $BUILD) for Minecraft: PE v$MCPE_VERSION (PHP $PHP_VERSION)"
echo "[*] This $CHANNEL build was released on $VERSION_DATE_STRING"
if [ "$ENABLE_GPG" == "yes" ]; then
    echo "[+] The build was signed, will check signature"
elif [ "$GPG_SIGNATURE" == "" ]; then
    if [[ "$CHANNEL" == "beta" ]] || [[ "$CHANNEL" == "stable" ]]; then
        echo "[-] This channel should have a signature, none found"
    fi
fi
echo "[*] Installing/updating $NAME on directory $INSTALL_DIRECTORY"
mkdir -m 0777 "$INSTALL_DIRECTORY" 2> /dev/null
cd "$INSTALL_DIRECTORY"
echo "[1/3] Cleaning..."
rm -f "$NAME.phar"
rm -f README.md
rm -f CONTRIBUTING.md
rm -f LICENSE
rm -f start.sh
rm -f start.bat
#Old installations
rm -f PocketMine-MP.php
rm -r -f src/
echo -n "[2/3] Downloading $NAME phar..."
set +e
download_file "$VERSION_DOWNLOAD" > "$NAME.phar"
if ! [ -s "$NAME.phar" ] || [ "$(head -n 1 $NAME.phar)" == '<!DOCTYPE html>' ]; then
    rm "$NAME.phar" 2> /dev/null
    echo " failed!"
    echo "[!] Couldn't download $NAME automatically from $VERSION_DOWNLOAD"
    exit 1
else
    if [ "$CHANNEL" == "soft" ]; then
        download_file "https://raw.githubusercontent.com/PocketMine/PocketMine-Soft/${BRANCH}/resources/start.sh" > start.sh
    else
        download_file "https://raw.githubusercontent.com/pmmp/PocketMine-MP/${BRANCH}/start.sh" > start.sh
    fi
    download_file "https://raw.githubusercontent.com/pmmp/PocketMine-MP/${BRANCH}/LICENSE" > LICENSE
    download_file "https://raw.githubusercontent.com/pmmp/PocketMine-MP/${BRANCH}/README.md" > README.md
    download_file "https://raw.githubusercontent.com/pmmp/PocketMine-MP/${BRANCH}/CONTRIBUTING.md" > CONTRIBUTING.md
    download_file "https://raw.githubusercontent.com/pmmp/php-build-scripts/${BRANCH}/compile.sh" > compile.sh
fi
chmod +x compile.sh
chmod +x start.sh
echo " done!"
if [ "$ENABLE_GPG" == "yes" ]; then
    download_file "$GPG_SIGNATURE" > "$NAME.phar.sig"
    check_signature "$NAME.phar"
fi
if [ "$update" == "on" ]; then
    echo "[3/3] Skipping PHP recompilation due to user request"
else
    echo -n "[3/3] Obtaining PHP: detecting if build is available..."
    while [ "$forcecompile" == "off" ]
    do
        rm -r -f bin/ >> /dev/null 2>&1
        if [ "$(uname -s)" == "Darwin" ]; then
            PLATFORM="MacOS-x86_64"
            echo -n " MacOS PHP build available"
        elif [ "$(uname -s)" == "Linux" ]; then
            #if [[ "$(cat /etc/redhat-release 2>/dev/null)" == *CentOS* ]]; then
            #echo -n " CentOS PHP build available, downloading $CENTOS_BUILD.tar.gz..."
            #download_file "https://dl.bintray.com/pocketmine/PocketMine/$CENTOS_BUILD.tar.gz" | tar -zx > /dev/null 2>&1
            #else
            #TODO: check architecture (we might not be on an x86_64 system)
            PLATFORM="Linux-x86_64"
            echo -n " Linux PHP build available"
            #fi
        else
            echo " no prebuilt PHP download available"
            break
        fi
        echo -n "... downloading $PHP_VERSION ..."
        download_file "https://jenkins.pmmp.io/job/PHP-$PHP_VERSION-Aggregate/lastSuccessfulBuild/artifact/PHP-$PHP_VERSION-$PLATFORM.tar.gz" | tar -zx > /dev/null 2>&1
        chmod +x ./bin/php7/bin/*
        if [ -f ./bin/composer ]; then
            chmod +x ./bin/composer
        fi
        echo -n " updating php.ini..."
        sed -i'.bak' "s/date.timezone=.*/date.timezone=$(date +%Z)/" bin/php7/bin/php.ini
        EXTENSION_DIR=$(find "$(pwd)/bin" -name *debug-zts*) #make sure this only captures from `bin` in case the user renamed their old binary folder
        #Modify extension_dir directive if it exists, otherwise add it
        LF=</code></pre><p>然后在命令行中cd到要安装的目录,输入</p><pre><code>bash install.sh -r
</code></pre><p>进行安装。会自动下载所需依赖<br>安装完成后输入 bash start.sh -r就可以启动服务器啦</p><h3>方法二 手动安装</h3><p>有些时候,官方的脚本下载运行环境超慢,这个时候就可以手动安装。</p><h4>安装PHP</h4><p>由于pocketmine使用PHP,所以需要安装PHP。这里使用的系统是ubuntu<br>第一步安装依赖</p><pre><code>sudo apt-get install libxml2-dev
sudo apt-get install libcurl3-openssl-dev
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install libbz2-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libpng-dev
sudo apt-get install libxpm-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libmcrypt-dev
sudo apt-get install libmysql++-dev
sudo apt-get install libxslt1-dev</code></pre><p>第二步下载PHP</p><pre><code>cd /home/download

#导航到下载文件夹 可以改成其他的
wget http://php.net/get/php-7.3.0.tar.bz2/from/a/mirror
#下载PHP
tar xvf mirror
#解压
cd php-7.3.0/</code></pre><p>修改configure参数</p><pre><code>./configure  --prefix=/usr/local/php --enable-fpm --enable-sockets --enable-mbstring=all  -enable-mysqlnd  --with-config-file-path=/usr/local/php/etc --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-curl --with-gd
#编译安装
&lt;pre&gt;&lt;code&gt;make -j2  
sudo make install 
sudo cp php.ini-development /usr/local/php/etc/php.ini
cd /usr/local/php/etc
sudo cp php-fpm.conf.default php-fpm.conf
cd /usr/local/php/etc/php-fpm.d
sudo cp www.conf.default www.conf
#修改profile文件。这里使用了Vim编辑器,如果不知道怎么使用Vim编辑器,请百度。
vim /etc/profile
#将下面的一句话加到末尾
export PATH=$PATH:/usr/local/php/bin
source /etc/profile
php -v 
#出现版本号说明安装成功
php -m
#查看你安装的依赖 </code></pre><h3>下载pocketmine</h3><p>下载pocketmine,然后进入要安装的目录</p><pre><code>wget https://jenkins.pmmp.io/job/PocketMine-MP/1790/artifact/PocketMine-MP.phar
#下载pocketmine</code></pre><p>之后下载start.sh到安装pocketmine的目录,并输入bash start.sh -r就可以启动啦</p><h3>附件</h3><h4>start.sh文件</h4><blockquote>有些时候安装完成之后start.sh文件会错误导致无法启动服务器。这个时候只需要替换start.sh为正确内容即可</blockquote><pre><code>#!/bin/bash
DIR=&quot;$(cd -P &quot;$( dirname &quot;${BASH_SOURCE[0]}&quot; )&quot; &amp;amp;&amp;amp; pwd)&quot;
cd &quot;$DIR&quot;
while getopts &quot;p:f:l&quot; OPTION 2&amp;gt; /dev/null; do
    case ${OPTION} in
        p)
            PHP_BINARY=&quot;$OPTARG&quot;
            ;;
        f)
            POCKETMINE_FILE=&quot;$OPTARG&quot;
            ;;
        l)
            DO_LOOP=&quot;yes&quot;
            ;;
        \?)
            break
            ;;
    esac
done
if [ &quot;$PHP_BINARY&quot; == &quot;&quot; ]; then
    if [ -f ./bin/php7/bin/php ]; then
        export PHPRC=&quot;&quot;
        PHP_BINARY=&quot;./bin/php7/bin/php&quot;
    elif [[ ! -z $(type php) ]]; then
        PHP_BINARY=$(type -p php)
    else
        echo &quot;Couldn't find a working PHP 7 binary, please use the installer.&quot;
        exit 1
    fi
fi
if [ &quot;$POCKETMINE_FILE&quot; == &quot;&quot; ]; then
    if [ -f ./PocketMine-MP.phar ]; then
        POCKETMINE_FILE=&quot;./PocketMine-MP.phar&quot;
    else
        echo &quot;PocketMine-MP.phar not found&quot;
        echo &quot;Downloads can be found at https://github.com/pmmp/PocketMine-MP/releases&quot;
        exit 1
    fi
fi
LOOPS=0
set +e
if [ &quot;$DO_LOOP&quot; == &quot;yes&quot; ]; then
    while true; do
        if [ ${LOOPS} -gt 0 ]; then
            echo &quot;Restarted $LOOPS times&quot;
        fi
        &quot;$PHP_BINARY&quot; &quot;$POCKETMINE_FILE&quot; $@
        echo &quot;To escape the loop, press CTRL+C now. Otherwise, wait 5 seconds for the server to restart.&quot;
        echo &quot;&quot;
        sleep 5
        ((LOOPS++))
    done
else
    exec &quot;$PHP_BINARY&quot; &quot;$POCKETMINE_FILE&quot; $@
fi&lt;/code&gt;&lt;/pre&gt;
\n'
        grep -q '^extension_dir' bin/php7/bin/php.ini &amp;amp;&amp;amp; sed -i'bak' &quot;s{^extension_dir=.*{extension_dir=\&quot;$EXTENSION_DIR\&quot;{&quot; bin/php7/bin/php.ini || sed -i'bak' &quot;1s{^{extension_dir=\&quot;$EXTENSION_DIR\&quot;\\$LF{&quot; bin/php7/bin/php.ini
        echo -n &quot; checking...&quot;
        if [ &quot;$(./bin/php7/bin/php -r 'echo 1;' 2&amp;gt;/dev/null)&quot; == &quot;1&quot; ]; then
            echo &quot; done&quot;
            alldone=yes
        else
            echo &quot; downloaded PHP build doesn't work on this platform!&quot;
        fi
        break
    done
    if [ &quot;$alldone&quot; == &quot;no&quot; ]; then
        set -e
        echo &quot;[3/3] No prebuilt PHP found, compiling PHP automatically. This might take a while.&quot;
        echo
        exec &quot;./compile.sh&quot;
    fi
fi
rm compile.sh
echo &quot;[*] Everything done! Run ./start.sh to start $NAME&quot;
exit 0

然后在命令行中cd到要安装的目录,输入 进行安装。会自动下载所需依赖安装完成后输入 bash start.sh -r就可以启动服务器啦

👍 0

我的世界 minecraft 服务器 pocketmine

最后修改于29天前

评论


世界安全验证

验证码加载ing~
如果无法显示请刷新试试~
贴吧 狗头 原神 小黄脸
收起

贴吧

  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡
  • 贴吧泡泡

狗头

  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头
  • 狗头

原神

  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神
  • 原神

小黄脸

  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  • 小黄脸
  1. 高贵的bread 1698天前

    嗯。。。

目录

avatar

ccrice

愿和平与我们同在

78

文章数

284

评论数

4

分类

我们是不朽的

"结局...并不是结束,他将成为一场告别"

"马库斯"

我只是想回去...