标签 "Linux" 下的文章

我日常的开发环境是 Manjaro Linux,PHP 是自己编译的 7.2。当我升级系统后(起初不知道升级了,电脑开机很久也没关机),发现我的 PHP 炸了!!!

php: error while loading shared libraries: libicui18n.so.73: cannot open shared object file: No such file or directory

报了这个错误~

libicui18n 是国际化组件 Unicode(ICU) 库的一部分,且 PHP 正是依赖它来处理国际化功能。

libicui18n.so.73 找不到了?估计是升级后变成 74 或者 75 了?还是被删了……

搜了资料发现可以自己安装:

yay -S icu

对了,如果你是其他发行版,可以参考以下命令:

# Ubuntu/Debian 系统
sudo apt-get update
sudo apt-get install libicu-dev

# CentOS/RHEL 系统
sudo yum update
sudo yum install libicu

# Fedora 系统
sudo dnf update
sudo dnf install libicu

然而,我发现我的系统中已经安装了 icu 库,确实是 74 版本:

ls /usr/lib/libicui18n.so.74

OK,那我创建一个符号链接,将已安装版本的库链接到 PHP 尝试加载的版本,这下总可以了吧!

sudo ln -s /usr/lib/libicui18n.so.74 /usr/lib/libicui18n.so.73

很意外,报了另一个错误?

php: error while loading shared libraries: libicuuc.so.73: cannot open shared object file: No such file or directory

继续:

sudo ln -s /usr/lib/libicuuc.so.74 /usr/lib/libicuuc.so.73

好家伙,又报另一个错:

php: error while loading shared libraries: libicudata.so.73: cannot open shared object file: No such file or directory

sudo ln -s /usr/lib/libicudata.so.74 /usr/lib/libicudata.so.73

补齐了以上 3 个符号链接后,我再次尝试运行 PHP,终于能用了!!!

如果你也遇到类似的报错,可以参考。不过,对于大版本的更新,有可能链接后是没办法工作的,这个时候还是重新编译 PHP 吧!

以后可能还会遇到这个问题,索性就记录下来,明天除夕,提前祝大家新你快乐~

注意:如果你公司的 VPN 网络是在苹果下使用的,本文可能不适用(苹果系统不支持 PPTP)。

用 Linux 和用 Windows/macOS 不一样,它真的需要用户操心很多东西。比如怎么连接公司的 VPN 网络……

我是折腾了挺久,反正系统自带的 VPN 连接管理界面,不管你怎么配置,就是用不了!!!

最后,我翻了 arch 的官方文档,发现有一个叫 PPTP Client 的东西,配置起来超级简单,敲几下命令就连接上了……

真正连上的那一瞬间,真的很有成就感!趁热记录下来:)

好了, 我们进入正题,首先是安装:

sudo pacman -S pptpclient

然后配置一下连接(起名叫 company):

sudo pptpsetup --create company --server 域名或 IP 地址 --username 账号 --password 密码 --encrypt

可以用以下命令测试一下 company 连接:

sudo pon company debug dump logfd 2 nodetach

会打印一堆调试信息,并最终程序卡住不会退出。连接成功后,你会看到一个 ppp0 的网卡:

ip addr

要用公司 VPN 连接的时候,需要加个路由:

sudo pon company
sudo ip route add default dev ppp0

结束使用时去掉就好了:

sudo ip route del default dev ppp0
sudo poff company

经过以上步骤配置后,就可以使用了。

但我发现特别卡,ping 了一下发现丢包率很高(6%)。

网上搜索了一圈资料,最终确定和 MTU 有关系(默认是 1500),我参考了 macOS 的 1280,设置后一切正常,不再丢包了!

sudo ifconfig ppp0 mtu 1280

MTU 设置太大会被分片,太小影响效率。因此需要设置成一个合理值,保证网络的可靠性的同时,实现传输效率的最大化。

MTU 一般网络设备都是 1500。如果本机的 MTU 比网关大,大的数据包会被拆分传送,会产生大量数据包碎片,增加丢包率,降低网络传输速度。

检查的话,可以使用以下命令:

ping -s 1472 -M do 192.168.1.123

它表示发送 1472+28 字节的数据包,并禁止路由器拆包。

  • 如果正常回复,说明网络最大 MTU 是 1500,与系统默认一致;
  • 如果不正常,说明超过网络限定大小,需要减小探测包大小再次尝试。

注:1500 = 1472 + 8(ICMP 回显请求和应答报文的格式长度)+ 20(IP 头)。

还是挺多命令要敲的,为了方便,我加了两个 alias,大家可以根据实际情况配置:

alias onn_company="sudo pon company && sleep 5 && sudo ip route add default dev ppp0 && sudo ifconfig ppp0 mtu 1280"
alias off_company="sudo ip route del default dev ppp0 && sudo route del -host 1.2.3.4 dev enp2s0 && sudo poff company"
  • sleep 5 使得连接后等一下下,再改路由;不 sleep 的话网络会卡一下,体验不是很好;
  • ifconfig 修改后的 MTU 重启电脑会丢失,但这个不是很重要,我觉得也没必搞成永久生效了;
  • route del -host 1.2.3.4 需要改成你公司的 VPN 的 IP,我发现有时候 del default 不好使,原因不明(可能我连接多次了)。

整体上还是挺方便的,简单几行命令就搞定了。

“记得上次用 Manjaro Linux 的时候,还是上次:)”

三年前,工作都是在 Linux 下完成的——那时候的我还没有苹果电脑。

我算是接触了很多很多发行版,Ubuntu、Debian、Deepin 深度、Linux Mint 薄荷、CentOS、Manjaro……小众的,还有 Puppy Linux、Slitaz……

最喜欢的,还是 Manjaro 啦!软件库非常齐全,更新也快。所以我一般都会安利它哈哈~

不过有时候下载一些软件,你会发现官网只提供 deb 或者 rpm 包。这个时候可以用以下命令,转成 Manjaro 可以安装的包:

一、先检查有没有安装 debtap,有安装可以直接跳到第 3 步:

sudo pacman -Q debtap

二、安装debtap:

sudo pacman -S yaourt
yaourt -S debtap

三、更换源(非常重要,不然炒鸡炒鸡卡):

sudo sed -i "s|http://ftp.debian.org/debian/dists|https://mirrors.ustc.edu.cn/debian/dists|g" /usr/bin/debtap
sudo sed -i "s|http://archive.ubuntu.com/ubuntu/dists|https://mirrors.ustc.edu.cn/ubuntu/dists|g" /usr/bin/debtap

四、更新一下:

sudo debtap -u

五、打包:

sudo debtap xxxx.deb

期间提示你输入包名、License 信息。

  • 包名根据你安装的软件填写就好了,比如飞书,你输入 feishu 回车键即可;
  • License 自己使用随便填一个就好了,比如 GPL。

上述操作完成后会在deb包同级目录生成×.tar.xz文件

六、安装:

sudo pacman -U XXXX.tar.xz

2022年08月07日文章更新:第 6 步打出来的包是 zst 格式的了,命令自行改一下。