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

ref https://wiki.archlinux.org/title/PostgreSQL#pg_upgrade

评论

登录注册后才能评论。