# Ubuntu 18.04升级systemctl(systemd)到v245

我们知道systemctl是基于systemd的,因为我装机的时候是16.04,所以systemctl的版本才223,最近需要搞一个东西,对systemd的版本有要求,就升级了一下。其间踩了很多坑,就稍微记录一下。

先到systemd的仓库里去下个源码:https://github.com/systemd/systemd/releases,我选了v245,要升级就索性升到最新版,然后tar + configure一条龙,然后……然后就报错了,提示exec: meson: not found

查了一下,meson是个python写的构建工具。那还不简单,apt-get装一个就是了,apt-get install meson一气呵成,然后再次configure……又报错了。这次是什么?Meson version is 0.45.1 but project requires >= 0.46.得,又是apt-get的问题。我们知道,apt-get为了稳定,经常会给我们装一些远古版本的东西。我至今还记得当年apt-get给我装了一个node 4。

那要怎么安装新版本的meson呢,手动下载编译吗?可以,但没必要。不要忘了meson是py写的,我们可以用pip来安装(前提是有py的环境,怎么装py不是这里的重点):pip install meson。这里的pip是py3的pip,有可能你那叫pip3。

然后再次configure,又报错了,这次是Program(s) ['gperf'] not found or not executable。这个也简单,装个gperf就是了,apt-get install gperf。这次的依赖好像可以用apt-get。

然后再次configure,又双报错了,这次是/usr/sbin/update-info-dir: 4: /etc/environment: Syntax error: Unterminated quoted string。想来想去也不知道是为啥,查了半天也没查到,干脆去看看/etc/environment的内容:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en

?最后那个引号去哪了?

把最后的引号补上,再次configure,又双叒报错了,这次是Problem encountered: POSIX caps headers not found。查了一下,发现是少了sys/capability.h。

因为我这是Ubuntu,就apt-get install libcap-dev装了个libcap-dev(centos应该是libcap-devel),然后再次configure,又双叒叕报错了,这次是ERROR: Dependency "mount" not found, tried pkgconfig

那就装一个,apt-get install libmount-dev,然后再次configure,这次终于好了。make && make install,然后systemctl --version验证一下:

systemd 245 (245)
-PAM -AUDIT -SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS -ACL -XZ -LZ4 -SECCOMP +BLKID -ELFUTILS -KMOD -IDN2 -IDN -PCRE2 default-hierarchy=unified

搞定。

最后更新于: 6/25/2020, 2:10:06 PM