升级 mastodon 受难记录
还是记录一下昨天到现在发生的事吧,In case 其他站长像我一样无知且大胆,遇到类似困难状况可以参考。
事情起源于近期 utopia.cool 升级了 mastodon 版本(4.1.2 --> 4.1.3)。
4.1.3 版本修复了一些安全缺陷,其中包括禁用 ImageMagick 的较低版本(<6.9.7-7)。
而我站的服务器是 Ubuntu 18.04 版本,从官方apt源能获取到的最新 ImageMagick 也不满足此要求。所以我们的图像处理相关功能都出错了。(ImageMagick 问题详见官方的介绍:https://github.com/mastodon/mastodon/issues/25776)
此时有几种解决方案,在18.04上自行编译一版 ImageMagick 也许可行。但为了避免未来有更多组件出现没有官方源更新的问题(Ubuntu 18.04 已经停止维护),我选择了升级 Ubuntu 到 20.04。
OK,噩梦开始了。
尽管我事先做了周密的备份,系统升级过程依然艰辛。
首先是 Ubuntu 升级前通常要求所有可用的 apt 更新都已执行。所以我被迫执行了一次全局的软件更新——这导致 elasticsearch 升级到了插件无法支持的版本。所以本站的全局搜索功能挂了。(我后来通过手动降级 elasticsearch 解决了它)
然后,升级系统的过程把 PostgreSQL 从大版本 10 升级到了 12。系统升级完成后,PostgreSQL 要求执行数据集群迁移10 --> 12。
这个迁移是必须做的,psql 12 不保证能在 10 的数据库上正常工作。我借助 chatGPT 的帮助尝试执行迁移。却完全被这东西的编码格式困住了。无论把编码设置成什么,要么报错说跟旧版数据库编码不符,要么报错说缺乏支持 LATIN1 的编码。等于说新版跟旧版分别对一些方面进行了限制,而同时满足两边条件才能成功执行 pg_upgradecluster。最后我选择了放弃,直接把10版本的数据库 dump 出来,再用12来 pg_restore。也就是备份-->恢复这条路径。OK,这条路是走得通的。(虽然遇到一些问题,后面补充)
好,我们假设数据库的大问题已经解决了。当我尝试重新构建 Mastodon,发现整个 bundle 的依赖关系都坏掉了。由于此前安装的 bundler 没有按照 Ubuntu 的方式进行包管理,所以它没有被系统升级过程管理起来——系统的其他组件升级了,bundler没有。此时 bundle 执行任何命令都会报错,大部分是依赖错误、试图调用系统内某个动态链接库失败。
行吧,为了解决这个问题(和潜在的其他问题),我们需要按照官方教程从头安装 yarn 和 Ruby 和 Bundler,并把它们配置为正确的版本。
如果你像我一样愚蠢,安装新版时没有清理掉旧版残留的依赖包,问题就更大条啦,你会在执行 bundle exec rails assets:precompile 的时候被异常信息淹没。这是因为 bundle 并不会主动检查它此前下载的依赖包的完整性和正确性,而那些在旧系统内构建的包是无法在新系统内工作的。
如果你明确知道出问题的包是哪个,可以这样卸载它再重新安装:
bundle exec gem uninstall ffi
bundle exec gem install ffi
并且我尝试让 bundler 重新编译所有的依赖,来修复任何没被发现的问题:
bundle check
bundle pristine
假设上面提到的问题都解决了,你正确地构建出 mastodon,还是需要额外处理数据库的一些细节:
首先,前面升级 PostgreSQL 时,它在原先的端口 5432 保留运行了旧集群 10 main,而你使用的新集群 12 main 可能工作在 5433 端口。你需要重新配置 mastodon 的 .env.production,修改里面的数据库端口,才能指向新集群。
其次,如果你像我一样选择导出、导入的路径来实现数据迁移,那这个过程中可能没有正确地给 mastodon 用户分配数据库权限。请在导出前确认好它所需的权限,并在导入后把缺失的加回来。当然,如果你选的是 dump_all,可能权限配置也一起导出了,根据自己情况处理。
然后,在导入数据库到 12 main 时,实际上报了几个错,是关于 unique index 的,某些索引在建立时发现了重复的 key,导致建立失败了。这个问题不会中断导入,所以你的数据暂时是完整的。但是缺少索引会影响之后的数据查询效率,需要想办法解决。
我到现在还不知道有没有解决这个问题,我试了这些命令:
tootctl maintenance fix-duplicates
reindexdb --all
站点恢复运行之后我发现访问起来还是相当的慢,研究了一番,发现是每个用户的 timeline 都是在后台临时构建。按我理解,这个 timeline 应该是事先准备好的,所以我又找到了这个命令:
tootctl feeds build
它基于现有的数据,重新构建了每个用户的 timeline。
其他杂七杂八的小问题还很多,但最有风险并且难懂的就是上面这些。
结论就是任何人要新建 mastodon 站点的话务必使用 docker 版本。
并且不推荐0基础运营公开站点,为太多人的数据负责,却又草率行事,后果真的可能很糟糕。
目前有看到国内的设计里有一个新的趋势:适老化设计。
适老化设计与残障设计有一定的共同之处,应用场景也并非仅仅是残障人士或者老人。我从以前就还蛮喜欢研究残障类产品,现在的产品不仅仅只是无障碍设计,还有越来越多的智能设计的加入,比如说普通盲人或者是不方便行动的老人关灯需要很费劲,但是现在只要语音控制就可以。所以不仅仅残障人士和老人可以用这样的设计,普通的正常懒人同样也可以使用这样的设计,并且很多人和父母老人一起居住,因此在做室内设计的时候也可以直接一步到位做适老化设计,同时联动智能家居。
但是看了一些目前国内的适老化设计,也有局限之处,那就是太细了。分得太细了。因人而异的设计是好的,然而老人和小孩一样,状态的变化速度是很快的,可能昨天还能自己做饭,明天就只能躺床上了。昨天做的设计可能明天就不适用了,应用场景也太局限了。我以前在做室内设计的时候,会考虑到设计的成长性。设计能不能变化去适应人,而不是人去配合设计呢,我会尽量这样去做。
以厨房为例,以通用的“黄金三角理论”为基准,依据动线设计成为一个开放空间或者半开放性空间,增加家庭互动和凝聚。
❶在这个基础上动线尽量以u型或者半u型为主,利用率最高同时加上减少移动距离。❷地面做无高差,通道宽于轮椅宽度,水槽和灶台操作台下面留一个轮椅宽度的空,方便轮椅和转椅进去(不止残障老人等可以使用,自己可以坐着做饭也很方便)。❸厨房地柜的把手做成可以帮助站立的扶手(扶手可自行移除或者增加)。❹餐桌与台面保持同一高度做一体化,帮助锅直接从台面滑向餐桌。❺接入智能家居和人体感应系统,不需要起身开灯,语音操控智能家电的使用也减少家务量。
以上其实已经可以适用绝大部分人和场景,不过最好还是使用模块化设计,去应对未来不同的变化和需求。
但在寸土寸金的今天,这样的设计牺牲了一部分收纳,只能说还算是奢侈品吧。
看到一个新闻报道说学校要求教师不要晒暑假旅游照片,原因是不能引起其他行业的不适和非议…
不禁勾起我的记忆了,在国内当老师的那三年,每年暑假我都到处玩,国内国外上山下海,朋友圈经常更新各种风景,有一次校长忍不住给我留言“差不多就回来吧,影响不好” 我一整个无语,下班的自由时间出去玩有什么不良影响,是没有表现出我天天在家备课研究教育吗?
有一年我来美国的行程都订好了,学校放假前临时通知7月底要回校2天,没什么大事就是要检查备课情况开开动员会,我说参加不了,校长让我退票,我说六七千的票退不了。他继续说你不配合工作的话下学期不让你带毕业班,我be like天啊竟有这等好事,马上回他“好啊,正好我也不想那么累”,校长用看精神病一样的眼神看着我,摇摇头走了,最后屁事没有。
校领导的那些PUA整不到我,作为刚毕业的新老师学校喜欢什么事都推给我们,什么朗诵大赛,歌功颂德文章,德育论文大赛只要需要写字的都来找我,当时刚当班主任天天累得跟狗一样。有一次德育主任半夜十点半给我打电话质问我为什么没有交一个狗屁比赛的文章,我说没时间,他絮絮叨叨一大堆说自己年轻时是怎么怎么努力天天加班挤时间搞这个搞那个,年轻人要多锻炼,我默默地听了十几分钟,最后说了一句“那是你厉害,我不行”,对面又像碰到弱智一样沉默了一下,挂了电话。
我就不懂为什么对教师的恶意那么大,每天五六点起来看早自习晚上看晚自习八九点回家可以,经常加班备课备赛搞行政任务忙到半夜可以,天天处理学校学生的乱七八糟的事情劳心劳力可以,得各种职业病可以,做蜡烛烧死了自己可以,但是有了暑假不得了人人都要得红眼病了,老师就不配享受……
我的朋友圈也有一些学生,都是比较自律比较有想法的女生,曾经加过的几个男生都被我删了看着烦。以前她们不止一次跟我说“老师,很羡慕你能到处走,我以后也想像你那样自由自在”,我都告诉她们,如果想自由想看外面的世界,就要努力,不管是学习还是别的能力,学好英语,多了解点历史地理,培养独立的思想和能力,一个人也能支持自己的梦想。我不觉得我朋友圈的那个世界会对学生造成不良影响
也许长毛象和传统的微博服务相比一个劣势就是每个实例的稳定性是未知的。因此希奇!决定每半年发布一次 #运营白皮书 公开这些信息:
希奇!运营技术情况:
* 服务器基本配置:HP 独立服务器, 双路 Xeon E5 @ 8 cores, 64 GB ECC 内存
* 网络:Cox Business Fiber
* 长毛象数据存储:Dual SSD in RAID 1, 每天两次云端备份
* 长毛象媒体存储:目前和数据存储一致,但是未来会做一个新的长毛象专用s3服务也能惠及别的实例:https://c7.io/@snullp/109979065663923473
希奇!运营资金情况:
* 服务器托管、带宽:$0 (感谢 @snullp 提供的独立服务器和免费托管环境)
* 服务器硬件更新:$100/yr
* 域名费用:$40/yr
* CDN + DDoS 防火墙(cloudflare):$0 for now
@snullp 承诺每月allocate up to $100 用于站点运营,目前来看资金情况绰绰有余。
希奇!运营承诺:
结合上文,希奇!承诺至少运营至2024年3月。半年后再次发布的白皮书会更新本承诺。
上次科技给我的震撼还在上一次
买了一个二手激光打印机放办公室,没几天白屏了,找售后。
售后:哦你把机子拆了,对,用力,用点劲!哎对,把那个连接屏幕和主板的扁扁的线拔出来,抹一抹再插回去。
我:(折腾半天后发现这个插头铜丝已经破破烂烂了怪不得接触不良)抹一抹没用啊你看(拍照)。
售后:那简单,你拿个剪刀,把前面0.5厘米剪掉,把后面的铜丝露出来就行了。
我:大受震撼.jpg
随后,屏幕是正常了,但一直提醒我前盖没盖上。
售后:咦这个问题我没见过,我去问问。
我:啊!这么疑难吗!
售后:好,你看一下你机子这里啊,有个洞对不对,这个洞里面有个铁皮,你看看这个铁皮是不是歪了?不在洞中间了?
我:啊?好像是歪了。
售后:对,你拿个细的东西把它拨回中间就行了。
(打印机正常运转)
我:大受震撼.jpg
是的,这么人类智慧结晶甚至自带彩屏的打印机,判断自己盖子是否盖上了的机制跟微波炉/冰箱那种机关没有太大区别……太神奇了……
话说这个类似的思路我在我前男友那里听到过,不过不是对移民发表的评论,而是对独生子女政策。他是父母都有公职的非独家庭里的那个弟弟,他父母生下他以后,通过一些关系运作,工作并没有受到影响,只交了一些罚款,而他上了小学以后才有户口的。有一次我跟他聊天的时候,说起我作为独生女,给父母养老的压力大,他说:谁让你的父母当年没有勇气生二胎。我无语了,你把你家这社会资源运作叫作“勇气”吗?我父母要是再生一个就没工作了,是挺没“勇气”的。 https://o3o.ca/@panthera/110670778809241808
梦到一个一切事情都做完了无所事事的突然恐高的林克