arch服务器搭pleroma的两个小问题 (以及解决方案)
在服务器上运行arch的都是勇士
pleroma systemd service 在arch上跑不起来
如果在config中设置了Exiftool的话
config :pleroma, Pleroma.Upload, filters: [Pleroma.Upload.Filter.Exiftool]
即使装了exiftool (extra/perl-image-exiftool),启动pleroma服务时他也会报错说找不到exiftool (not in path)。这是因为 archlinux 会把perl包放在 /usr/bin/vendor_perl/
下,并通过/etc/profile.d/perlbin.sh
导入 PATH,而倒霉的systemd在加载服务的时候并不认这一套,所以会找不到exiftool的可执行文件而报错退出。
参考这个issue
一个简单而愚蠢的方法是把exiftool 软链接到一个systemd认识的PATH里去,e.g.
ln -s /usr/bin/core_perl/exiftool /usr/local/bin/exiftool
postgresql 更新
众所周知arch是滚动升级的,而postgresql大版本之间的数据文件是不通用的,搞不好哪天pacman -Syu 就把数据库给扬了, 所以建议让pacman 跳过对postgresql的更新
如果需要升级postgresql大版本,需要使用pg_upgrade工具迁移数据。如果你不幸忘记迁移数据就升级了postgresql,又把之前版本的postgres给删了,extra/postgresql-old-upgrade 贴心地提供了后悔药,它提供了上一个postgresql大版本的一些可执行文件。
总之,为了抢救数据库,需要做以下步骤:
# 暂停postgresql服务 sudo sytemd stop postgresql # 备份数据 mv /var/lib/postgres/data /var/lib/postgres/olddata # 创建临时工作目录 mkdir /var/lib/postgres/data /var/lib/postgres/tmp chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp # 切换到 postgres 用户: sudo -iu postgres cd /var/lib/postgres/tmp # 初始化新版本postgresql的数据文件 # 注意此命令的相关参数要和创建旧版本数据库时一致,如果数据库是按照pleroma默认安装教程创建的,可以使用如下的命令。 initdb -D /var/lib/postgres/data # 迁移数据 # 将<PG_VERSION>替换为上个版本号,例如从psql 13升级到14,这里就填13。 pg_upgrade -b /opt/pgsql-<PG_VERSION>/bin -B /usr/bin -d /var/lib/postgres/olddata # 重启数据库 sudo systemd restart postgresql
注: 视情况可能需要对pleroma进行迁移 (mix ecto.migrate) 或者对数据库进行REINDEX
1