1. Ubuntu 上实现 ASF 服务 (2020.04)
  2. 环境
  3. ASF 服务搭建
    1. 主要步骤
    2. 安装 .NET 框架
    3. ASF 下载
    4. 添加配置
    5. 执行 ASF
    6. 后台自动执行
  4. Troubleshooting
    1. ASF process is already running for this working directory, aborting!
    2. We don't have anything to idle on this account!
  5. 参考文献

Ubuntu 上实现 ASF 服务 (2020.04)

你竟然都进来了这篇文章, 那么我默认你知道 ASF 的功能, 知道 ASF 的潜在价值, 也默认你知道需要折腾一番了

环境

  • AWS EC2 Ubuntu 16.04
  • ASF 4.2

ASF 服务搭建

主要步骤

官方指导

In general, here is what we'll do in the next few minutes:

  1. Install .NET Core prerequisites.
  2. Download latest ASF release in appropriate OS-specific variant.
  3. Extract the archive into new location (and chmod +x ArchiSteamFarm if you're on Linux/OS X).
  4. Configure ASF.
  5. Launch ASF and see the magic.

安装 .NET 框架

.NET 这版本经常会改变, 所以主要还是要参考 MS 的 安装指导页面, 找到 Ubuntu 16.04 / Linux Mint 18 对应的最新版本.

切记要在查看最新版本的时候选成你自己的环境所需要的版本。

Add Microsoft repository key and feed

wget -q packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

Install the .NET Core SDK

sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2

Troubleshooting: Unable to locate package dotnet-sdk-2. 2

截止 2020. 04, .net 已经 3.1 版本, 并且 2.2 版本已经不再维护, 但是我们依然要安装 V2.2

If you receive an error message similar to Unable to locate package {the . NET Core package}, run the following commands.

sudo dpkg --purge packages-microsoft-prod && sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install {the . NET Core package}

If that doesn't work, you can run a manual install with the following commands.

sudo apt-get install -y gpg
wget -O- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget https://packages.microsoft.com/config/ubuntu/18.04/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install {the . NET Core package}

Install the ASP.NET Core runtime

sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install aspnetcore-runtime-3.1

ASF 下载

跑到他们 Github 从找到最近一次 release , 然后复制对应下载链接, 使用 wget 下载到服务器, 然后解压.

mkdir ASF
wget https://github.com/JustArchiNET/ArchiSteamFarm/releases/download/3.4.1.8/ASF-generic.zip
mv ASF-generic.zip ASF
cd ASF
unzip ASF-generic.zip

这时候可能要跑一遍 chmod +x ArchiSteamFarm 来确保这个文件有可执行权限

添加配置

可有两种方法修改 / 添加配置

使用参考示例来新建配置

进入 /config 文件夹, 新建一个配置文件

vim xxx.json

下方有一个我所使用的配置, 需要将下方注释的三行修改掉, 同时记得将下面的注释也一起删掉:

{

    "AcceptGifts": false,
    "AutoSteamSaleEvent": false,
    "BotBehaviour": 0,
    "CustomGamePlayedWhileFarming": null,
    "CustomGamePlayedWhileIdle": null,
    "DismissInventoryNotifications": false,
    "Enabled": false,  ##### 本地测试通过后改成 true
    "FarmingOrder": 0,
    "FarmOffline": false,
    "GamesPlayedWhileIdle": [],
    "HandleOfflineMessages": false,
    "HoursUntilCardDrops": 3,
    "IdlePriorityQueueOnly": false,
    "IdleRefundableGames": true,
    "LootableTypes": [
        1,
        3,
        5
    ],
    "MatchableTypes": [
        5
    ],
    "PasswordFormat": 0,
    "Paused": false,
    "RedeemingPreferences": 0,
    "SendOnFarmingFinished": false,
    "SendTradePeriod": 0,
    "ShutdownOnFarmingFinished": false,
    "SteamLogin": null,  ##### 改成你的账号
    "SteamMasterClanID": 0,
    "SteamParentalPIN": "0",
    "SteamPassword": null,  ##### 改成你的密码
    "SteamTradeToken": null,
    "SteamUserPermissions": {},
    "TradingPreferences": 0,
    "UseLoginKeys": true

}

自动生成配置

真是够偷懒的

官方提供了 Config Generator

进去设置一下 bot 然后就可以下载一个 json 文件, 然后用各种魔法上传到 config 文件夹就行

执行 ASF

初步测试

本地先测试一下:

./ArchiSteamFarm.sh

如果你之前有过邮箱来收取验证码的话,它会要求你输入验证码。

后台自动执行

chmod +x ./ArchiSteamFarm.sh
sh -c './ArchiSteamFarm.sh &'

上面这段语句, 开启了一个子进程执行 sh , 并且在 sh 里面继续执行了 ./ArchiSteamFarm &

因此, ASF 就跑到了 Grandchild Process 之中, 也就是 ** 孙子进程 **

虽然是在后台执行,但是他依然会在 CLI 里面要求你提供对应的邮箱验证码。

然后再关闭 Terminal 就不会关闭 ASF, 使其可以在后台运行.

关于 Grandchild Process 的保持运行

有几种情况在一个进程关闭的时候令其子进程一同关闭:

  1. Terminal 消失的时候, 发送一个 SIGHUP 信号给 Controlling Process
  2. Shell 关闭的时候, 发送一个 HUP 信号给所有的 Job

可以用下面几个方法让其保持运行:

  1. NOHUP 的子进程, 会忽略父进程的关闭请求, 并且继续执行, 这个方法阻断的上面第二种 Shell 关闭 HUP 型号
  2. 使用 disown 强行忽略关闭请求, 这个可以将 job 移出 Shell 的 job list, 从而阻断后续的关闭
  3. Double Forking: 当前 Shell 执行一个子进程, 并且子进程立刻执行孙子进程, 当前进程并不了解孙子进程

在这种情况之下就不会关闭孙子进程

关闭后台执行的进程

使用 ps 查看进程号, 然后 kill [pid] 即可

Troubleshooting

ASF process is already running for this working directory, aborting!

已经有一个进程在跑 ASF 了, 需要重新执行的话, 执行 ps -ef | grep Arch 找一下已经执行的进程,然后 kill {pio} 强行关闭

We don't have anything to idle on this account!

看到这个错误信息代表已经跑成功了

只是这个账号下面已经没有可以挂卡的游戏了, 等下次你买的新游戏他还会帮你挂起来的。

参考文献