前言

今早发现新买的软银VPS的systemd好像是219,太老了,导致某软件的service无法启动。然后就开始折腾怎么升级这个 systemd。最后还是艰难的解决了,而且搜出来的信息很少,同时其中大部分中英文教程都没啥用。

快捷安装

根据实测,可升级到234这个版本,已经能正常运行service进程。

原理是调用 facebook 提供的一个第三方 Yum 仓库

Make sure to edit /etc/selinux/config and put SELinux to permissive before you update, otherwise your system will not boot anymore!

wget https://copr.fedorainfracloud.org/coprs/jsynacek/systemd-backports-for-centos-7/repo/epel-7/jsynacek-systemd-backports-for-centos-7-epel-7.repo -O /etc/yum.repos.d/jsynacek-systemd-centos-7.repo

然后运行yum安装

yum update systemd -y

若要卸载可以参考这篇文章 系统安装-007 CentOS7yum源添加、删除及其yum优化

注意:升级systemd后重启服务器会导致网卡设备名称发生变化,用户需要重新配置网卡信息。

升级 systemd 后,用户需要重新编译系统内核才能启用新版本的 systemd。如何升级内核不在本文中描述。

可以通过 dmesg 命令查看 systemd 的当前版本。

编译安装

参考了多篇文档,结果各种破事越来越多,尤其是mount (meson)要2.30版本,而yum安装出来的只有2.23,整半天也没升级成功,同时还需要3.7+的python环境。

systemctl --version
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
wget https://www.moerats.com/usr/shell/Python3/CentOS_Python3.6.sh && sh CentOS_Python3.6.sh
wget https://ftp.osuosl.org/pub/blfs/conglomeration/systemd/systemd-251.tar.gz
tar -zxvf systemd-251.tar.gz
cd systemd-251
yum install gcc intltool gperf glib2-devel libcap-devel libmount-devel xz-devel gperf yum-utils -y
pip3 install --upgrade pip
pip3 install meson ninja jinja2
yum update -y
./configure
make
make install
systemctl --version
networkctl --help

 

参考资料

如何在 RHEL/CentOS 7 上安裝/升級 Systemd

Centos 升级 systemd 版本

centos 7 升级 systemd

centos 7 uppgradera systemd

安装python3一键脚本

Python 3.6一键安装脚本 for CentOS/Debian

systemd-231-latest-in-centos-7-thx-to-facebook

系统安装-007 CentOS7yum源添加、删除及其yum优化

jsynacek/systemd-backports-for-centos-7

如何在CentOS 7上禁用SELinux