Mastodon | Lunaffe - v4.2 升级笔记

陆陆续续折腾大半个月,把露站升到v4.2.1了。原本是想升到v4.2.0的,但是摸索摸索着还没成功升级呢,新版本就发布了〒▽〒
感想包括但不限于:docker真耐糟我再也不暴力复制粘贴文件了!!!

超级小白一只,本篇不全面不完善不专业,可能会有很多问题及隐患。仅记录从 v4.1.6 升级到 v4.2.1 中遇到的问题和解决办法

升级过程

首先我强烈建议学习下GIT相关概念以及相关指令,至少有个概念能知道错在哪里或者这段代码究竟有什么用

我参考的是:30分钟弄懂所有工作Git必备操作 / Git 入门教程
如果对GIT一无所知的话建议找其他更加详细的教程观看,并查询Git中文文档

通过 Git 拉取上游( upstream 即官方)版本进展

参考pullopen 的升级教程:打开 Github Desktop,点击左上角后右键对应仓库,再点击 Open in Command Prompt 打开命令行工具

Github

git remote -v 

// 是否有 upstream,如果有:
git fetch --tags upstream
// 如果没有,则通过下面一行指令进行添加
git remote add upstream https://github.com/mastodon/mastodon.git

git merge v4.2.1    // 输入要升级的tag名

接下来进行融合操作,一个个处理冲突文件,选择接受哪一方改动。如果拿不准的话建议全部同意,成功构建 docker 镜像文件没问题后再重新进行魔改。

这里不知道选错了什么文件出了问题,后面因为已经合并完成,也不知道怎么回滚合并,僵持在那一直错误无法成功构建;也有可能是这一个版本的 workflows 里没有给通用即时构建文件,只有一个 build-nighly,每天早上十点才给我 docker hub里推送镜像文件,导致当时的我误以为构建出错。

因为这里操作不当而导致的问题请参考文章最下面的问题解决环节。

因为 4.2 版本后的 workflows 文件进行了变化,需要重新填入自己的 Github 和 Docker Hub 账号,参考pullopen 魔改教程的「2.在DockerHub中建立属于自己的镜像」部分内容,也可以参考我的这次 Commit 进行修改

因为没有即时推送文件嘛,所以照着其他文件依葫芦画瓢写了一个:复制粘贴build-nightly.yml,将其重命名为build-image.yml,点开后把里面所有内容删掉,然后把以下内容放进去,不要忘记修改push_to_images:的值

name: Build container image
on:
  workflow_dispatch:
  push:
    branches:
      - 'main'  // 根据你的分支名来写,如果没有新创建分支,那默认就是main
    tags:
      - '*'
  pull_request:
    paths:
      - .github/workflows/build-image.yml
      - Dockerfile
permissions:
  contents: read
  packages: write

jobs:
  compute-suffix:
    runs-on: ubuntu-latest
    steps:
      - id: version_vars
        env:
          TZ: Etc/UTC
        run: |
          echo mastodon_version_prerelease=nightly.$(date +'%Y-%m-%d')>> $GITHUB_OUTPUT
    outputs:
      prerelease: ${{ steps.version_vars.outputs.mastodon_version_prerelease }}

  build-image:
    needs: compute-suffix
    uses: ./.github/workflows/build-container-image.yml
    with:
      platforms: linux/amd64,linux/arm64
      use_native_arm64_builder: true
      cache: false
      push_to_images: |
        XXXXX/mastodon   // 将 XXXXX 替换为你的 Docker Hub 名字
#      version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
      labels: ${{ needs.compute-suffix.outputs.prerelease }}
      flavor: |
        latest=auto
      tags: |
        type=edge,branch=main
        type=raw,value=edge
        type=ref,event=pr
#        type=schedule,pattern=${{ needs.compute-suffix.outputs.prerelease }}
    secrets: inherit

接下来就和以前一样,等编译并推送到 Docker Hub 后就可以在服务器端拉取并重启了,以前每次编译要等两三个小时,现在只要十分钟就行。之后在服务器端:

cd /home/mastodon/mastodon
docker pull brsu/mastodon:edge   // edge为最新编码的tag,如果需要创建特定版本的tag,则将edge改成tag名
docker-compose down
docker-compose up -d  // 重启docker-compose

随后根据官方v4.2.0更新说明步骤进行:

SKIP_POST_DEPLOYMENT_MIGRATIONS=true
docker-compose run --rm -e SKIP_POST_DEPLOYMENT_MIGRATIONS=true web bundle exec rails db:migrate
docker-compose down
docker-compose up -d  // 重启docker-compose
docker-compose run --rm web bundle exec rails db:migrate
docker-compose run --rm web bin/tootctl search deploy --reset-chewy

这一套组合下来,应该就没什么问题了!好耶,恭喜你成功升级到v4.2.1!

遇到的问题

因暴力复制粘贴导致的权限出错

在合并代码的时候不知道哪里出现问题,于是把官方的仓库用压缩包形式下载下来后直接解压覆盖...一顿操作后虽然能够成功编译和构建镜像文件了,但是没想到 tootctl 指令用不了了

root@:/home/mastodon/mastodon# tootctl version
Creating mastodon_web_run ... done
[FATAL tini (8)] exec bin/tootctl failed: Permission denied

排查几天后发现,欸?蓝盒子的镜像文件指令能用欸...?随后意识到是我的镜像文件出现了问题,但究竟是哪里出现问题了呢...再之后查FATAL tini查到了这条 Issues...好吧原来是我的暴力操作导致的

想重新git合并合并不了,想回滚也不知道滚到哪去。想着要不重新fork一份文件全部重来,在炸库前学习了下git相关的指令概念,发现直接创建一个分支就行了,然后我就通过复制官方分支 stable-4.2 来新建了一条分支,修改后重新编译构建,成功解决了