主机信息:Oracle Cloud的免费VPS(4+24,Ampere,ARM架构),解决方案点我跳转。 本次头图来自#オリジナル 動 – まごつき的插画 – pixiv。
发现问题
写在前面,问题出现的总结:宝塔面板对于ARM架构的兼容还是有点问题,安装php遇到确实的包不会去安装,而是直接跳过,导致最终编译完成的php不完整,确实不要的函数,没法用。
最近在甲骨文云(Oracle Cloud)提供的免费VPS上搞了一个私有云,用的是Next Cloud的COMMUNITY PROJECTS下的Archive,搭建在了二级域名,也连通了B站录播姬,但是在搭建Next Cloud的过程中遇见了一个比较致命的问题,虽然搭建成功了,但他一直提示 nextcloud 检查服务器设置时出错
,而且在初始配置的时候不显示推荐应用,也没法取消。在使用过程中也无法为文件创建含有密码的分享链接,会一直报错,同时应用商店始终加载不出来。去确认了日志,里面有很多报错,里面最多的是这两个:Exception: Call to undefined function OCA\Theming\mime_content_type()
和Exception: Call to undefined function OC\Http\Client\dns_get_record()
,于是我上网搜,发现遇到这个问题的人也有,但是他们的解决方案我使用了但是无效。
在Nextcloud里看到很多个遇到dns_get_record
没法用的,他们有提供一段测试代码,于是我运行了下,好嘛,根本用不了。
php -r “var_dump(dns_get_record(‘[apps.nextcloud.com 12](http://apps.nextcloud.com/)’, DNS_A | DNS_AAAA | DNS_CNAME));”
于是我上网找了半天,发现
dns_get_record
这个函数是php5之后肯定自带的一个函数,那肯定是php有问题了,于是这个时候我就去试了下用rpm包安装php,参考紀錄從PHP 7.2更新至8.0 on Oracle Linux 8 – Sammy Gone Wild和PHP Packages for Oracle Linux完成了,这下可以用这个函数了。结果宝塔没法管理通过这种方式安装的php,于是回到了原点,我这个时候恰好搜索到有人同样也是使用甲骨文云的ARM服务器安装,遇到一样的报错,虽然他是用甲骨文云搭建的Discuz,他提出的问题被宝塔论坛的工作人员拒绝回答了,说他既然用的aapanel,那就去aapanel那里问,然后我就去了aapanel,果然找到了他的帖子),基于这个帖子我也解决了这个问题,虽然最终还是差了一点点,以下是解决方案。
解决方案
aapanel的运维给出的解决方案是使用以下代码安装libsodium-devel
,不过这个方法在我这里(Oracle Linux8) 并不适用:
yum makecache yum install libsodium-devel
如果以上代码不适用,可以尝试手动安装:
wget https://download-ib01.fedoraproject.org/pub/epel/8/Everything/aarch64/Packages/l/libsodium-devel-1.0.18-2.el8.aarch64.rpm rpm -ivh libsodium-devel-1.0.18-2.el8.aarch64.rpm
很遗憾,对我来说两个办法都没用,但很惊喜,我发现Github上有人提供了解决方案](https://gist.github.com/davidalger/c19a53ed293291ec2e93b5227f9e0a2d)):
有两种方法, 直接复制以下内容运行 或者 创建一个.sh
文件 ,然后运行:
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm \
&& yum install -y php-cli libsodium \
&& yum install -y php-pear php-devel libsodium-devel make \
&& pecl channel-update pecl.php.net \
&& pecl install libsodium \
&& yum remove -y php-pear php-devel libsodium-devel make \
&& echo 'extension=sodium.so' > /etc/php.d/20-sodium.ini \
&& php -i | grep sodium
在这一步完成后本来应该直接可以用了,但我发现不行,于是我回去卸载了php并且重新安装,这个时候变成了宝塔说安装成功,实际上没有,并且报错了,于是我发现还缺少几个必要的包,以下是几个包的安装方法:
在以上内容安装完成后,需要再安装一些额外的包,首先是cmake:
yum install cmake cmake3 -y
然后是这些libpng-dev libjpeg-dev libonig-dev pe6-dev libfreetype-dev
等,不过他们在oracle linux上的名字不大一样,请参考以下内容安装:
dnf install libjpeg-turbo-devel
dnf install libpng-devel
dnf install libjpeg-turbo-devel
dnf install oniguruma
dnf install freetype
dnf install freetype-devel
yum install libsodium-devel -y
如果你在上述安装过程中还是遇到了问题,可以尝试下我在宝塔面板论坛提问后运维给我回复的方法尝试安装oniguruma
和libsodium-devel
,本质上都是安装缺失的包:
cd /tmp
wget https://vault.centos.org/centos/8/PowerTools/aarch64/os/Packages/oniguruma-devel-6.8.2-2.el8.aarch64.rpm
yum install oniguruma-devel-6.8.2-2.el8.aarch64.rpm
yum install libsodium libsodium-devel -y
全部安装完成后,回宝塔面板,卸载已安装的php,然后重新安装一遍,就解决了!如果遇到提示安装成功,但实际上没装上,记得看日志,日志里肯定会提示些什么,而其中大概率是因为又缺失了什么包。
这个时候再次运行
php -r “var_dump(dns_get_record(‘[apps.nextcloud.com 12](http://apps.nextcloud.com/)’, DNS_A | DNS_AAAA | DNS_CNAME));”
发现运行成功,可以回去重新安装NextCloud了。
大功告成!
一些其他分享
Docker录播姬
docker run -d -v 路径 -p 端口:端口 bililive/recorder run --bind "http://*:端口" --http-basic-user 用户名 --http-basic-pass 密码 /rec
更改上述代码内汉字即可一键通过Docker部署录播姬,会映射文件到你给的路径上。
NextCloud自动扫盘
在宝塔内创建计划任务,时间按需选择,代码如下:
cd NextCloud网站根目录
sudo -u www php console.php files:scan --all
只需要更改NextCloud网站根目录
为你的NextCloud站点根目录即可。
大功告成!