标签: systemd

使用 systemd-networkd 向服务器添加多个静态 IP 地址

我们有一个带有多个 IP 地址的服务器。最近我们迁移到 systemd,我们仍然需要该服务器上的多个 IP。使用 systemd-networkd 我们很难找到配置示例。所以我们在启动过程结束时使用 bash 脚本将 ip 添加到接口。

有人可以提供一个 systemd-networkd 配置示例,用于将多个 IP 添加到一个接口。

networking ip ipv4 systemd

12
推荐指数
1
解决办法
2万
查看次数

使用 systemd 重命名网络接口

我想在 Fedora 22 上将 systemd-networkd(版本 219)管理的网络接口从系统分配的名称重命名enp2s0wan. 为此,我创建了以下文件/etc/systemd/network/80-wan.link

[Match]
MACAddress=mac-address
[Link]
Name=wan
Run Code Online (Sandbox Code Playgroud)

但是,这对系统没有影响。重启后名字还是enp2s0。我看到udevadmudev 拿起文件进行配置,但忽略了提供的名称:

~> udevadm info /sys/class/net/enp2s0 
P: /devices/pci0000:00/0000:00:1c.1/0000:02:00.0/net/enp2s0
E: DEVPATH=/devices/pci0000:00/0000:00:1c.1/0000:02:00.0/net/enp2s0
E: ID_BUS=pci
E: ID_MM_CANDIDATE=1
E: ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
E: ID_MODEL_ID=0x8168
E: ID_NET_DRIVER=r8169
E: ID_NET_LINK_FILE=/etc/systemd/network/80-wan.link
E: ID_NET_NAME_MAC=enxMacAddress
E: ID_NET_NAME_PATH=enp2s0
E: ID_OUI_FROM_DATABASE=Shuttle Inc.
E: ID_PATH=pci-0000:02:00.0
E: ID_PATH_TAG=pci-0000_02_00_0
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
E: ID_VENDOR_ID=0x10ec
E: IFINDEX=2
E: INTERFACE=enp2s0
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp2s0 …
Run Code Online (Sandbox Code Playgroud)

networking fedora systemd

11
推荐指数
2
解决办法
2万
查看次数

systemd 服务:权限被拒绝

我有一个新的 systemd 服务,它无法以“权限被拒绝”错误启动。我买了一台 Thinkpad L480。不幸的是,内核似乎存在未检测到触摸板的问题。这是解决here可以解决

sudo sh -c 'echo -n "elantech" > /sys/bus/serio/devices/serio1/protocol'
Run Code Online (Sandbox Code Playgroud)

因为我不想在每次启动时都这样做,所以我做了一个 systemd 服务,但它没有按预期工作。

我的 touchpad_enabler.service 是

[Unit]
Description=FooBar

[Service]
Type=oneshot
ExecStart=/usr/local/bin/enable_touchpad.sh

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

脚本文件很简单

#!/bin/bash

echo -n "elantech" > /sys/bus/serio/devices/serio1/protocol
Run Code Online (Sandbox Code Playgroud)

但我也用sh -c版本试过了。我通过调整权限

sudo chmod 744 /usr/local/bin/enable_touchpad.sh
sudo chmod 644 /etc/systemd/system/touchpad_enabler.service
Run Code Online (Sandbox Code Playgroud)

所以这两个文件都归root所有。然后我通过

systemctl enable enable_touchpad.sh
Run Code Online (Sandbox Code Playgroud)

当我通过 手动启动服务时systemctl start touchpad_enabler.service,它完全正常工作,触摸板也能正常工作。但是,在启动时,服务失败并在 中被列为“失败” systemctl list-units

的输出journalctl -b -u touchpad_enabler.service是:

systemd[1]: Starting Solves bug that Thinkpad L480 Touchpad is not correctly detected...
enable_touchpad.sh[516]: …
Run Code Online (Sandbox Code Playgroud)

linux services permissions systemd

11
推荐指数
1
解决办法
4万
查看次数

一般来说,让 systemd 服务等待设备

目前,我使用以下配置来确保我的显示管理器等待 DRM 驱动程序加载后启动(否则 X.org 无法启动):

udev规则:

ACTION=="add", SUBSYSTEM=="drm", KERNEL=="card0", TAG+="systemd"
Run Code Online (Sandbox Code Playgroud)

系统服务覆盖:

[Unit]
Requires=sys-devices-pci0000:00-0000:00:01.0-0000:01:00.0-drm-card0.device
After=sys-devices-pci0000:00-0000:00:01.0-0000:01:00.0-drm-card0.device
Run Code Online (Sandbox Code Playgroud)

这样就完成了工作,但看起来很脆弱。

是否可以缩短Requires=After=行以一般性地引用 DRM 设备,而不使用完整的 PCI 路径?

我使用的是 Ubuntu 19.04。

编辑以满足重复的警察:

建议的重复询问如何在设备插入时自动启动 systemd 服务。这个问题是关于等待启动已经自动启动的服务,直到给定设备初始化。两个不同的问题。阅读它们。

xorg ubuntu systemd

10
推荐指数
1
解决办法
7319
查看次数

systemd-resolved 和 docker 应该如何交互?

节指定 Docker 容器获取主机的/etc/resolv.conf. 然而,当我在 Fedora 34 上运行一个简单的容器时,我得到了不同的结果:

$ cat /etc/resolv.conf
# This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8).
# Do not edit.

...

nameserver 127.0.0.53
options edns0 trust-ad
search .
Run Code Online (Sandbox Code Playgroud)
$ docker run --rm -it alpine /bin/sh

/ # cat /etc/resolv.conf 
# This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).
# Do not edit.

...

nameserver 192.168.0.1
nameserver 192.168.0.2
search .
Run Code Online (Sandbox Code Playgroud)

docker 容器获得了我的主接口的名称服务器,由以下人员维护systemd-resolved

$ resolvectl dns enp1s0
Link 2 (enp1s0): 192.168.0.1 192.168.0.2
Run Code Online (Sandbox Code Playgroud)

当我想访问互联网时这有效。但这是否意味着 Docker 以某种方式与 集成systemd-resolved …

networking linux dns systemd docker

10
推荐指数
1
解决办法
7755
查看次数

有什么策略可以“真正”禁用 systemd 服务吗?有些甚至在使用 systemctl 禁用后仍会启动

似乎每当我尝试禁用 systemd 服务时,该服务都会找到某种方法来重新启用自身。最近的例子是 PackageKit,我发现它是我在这个问题中提出的问题的根源。如果我运行这个:

\n
systemctl disable packagekit\n
Run Code Online (Sandbox Code Playgroud)\n

然后几天后,我的磁盘保持稳定,但几天后,PackageKit 会重新启用自身并运行,并/var/cache/yum再次填充,将我的磁盘固定在 100%。

\n

我\xe2\x80\x99m 没有专门询问PackageKit;我真的\xe2\x80\x99m 试图了解systemd 服务停用应该如何工作。

\n

是否有任何通用的方法可以说 \xe2\x80\x9c 禁用此服务,并禁用任何自动重新启用它的方法?\xe2\x80\x9d 或者是我彻底删除我不\xe2 的包的唯一选择\x80\x99 不想运行吗?

\n
\n

更新:我的问题的一部分被误导了:systemctl disable确保服务无论如何都不会运行不是我们的工作;所做的只是systemctl disable说该服务不应在启动时自动运行。

\n

根据 user1686 的回答中的建议,我尝试过

\n
busctl --activatable | grep -i packagekit\n
Run Code Online (Sandbox Code Playgroud)\n

并得到了

\n
org.freedesktop.PackageKit      - -     -    (activatable) -       -\n
Run Code Online (Sandbox Code Playgroud)\n

所以这很可能表明是什么类型的事情正在启动它(如果不是在启动时)。busctl tree但在继续下一步之前我并没有想到要尝试。

\n

再次根据 user1686 的建议,我尝试了

\n
systemctl mask packagekit\n
Run Code Online (Sandbox Code Playgroud)\n

这似乎已经成功了 \xe2\x80\x94 无论之前启动了那个东西,都不再启动它了。\n我不知道这是否会被认为是丑陋的或暴力的或危险的解决方案;我不知道它是否会永远有效,但现在似乎有效。

\n

systemd

10
推荐指数
1
解决办法
5326
查看次数

在systemd用户服务中设置niceness值

我想以 -20 作为非 root 启动 xcape。然而,设置一个好的值 -20 需要 root 权限。所以我想知道这是否可能。我还尝试创建系统服务和设置User=myuser,但 xcape 需要 xorg,DISPLAY因此XAUTHORITY

到目前为止我得到了什么:

[Unit]
Description=xcape: esc on caps lock
PartOf=graphical-session.target

[Service]
Type=simple
Nice=-20
ExecStart=/usr/bin/xcape -t 180 -e 'Caps_Lock=Escape'

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

linux xorg user nice systemd

9
推荐指数
1
解决办法
9872
查看次数

Systemd:如何使两个服务互斥但同时运行?

我有两个 systemd 计时器及其相关服务:

  • a.timer触发a.service
  • b.timer触发b.service

两个服务都使用系统包管理器执行内务管理任务,因此它们不能并行运行(事实上,如果在另一个服务正在运行时启动,则两个服务都会失败,因为两个服务都会尝试创建锁定文件)。

我的目标是确保这两项服务确实运行,因此b.service如果正在运行,则应延迟a.service,反之亦然。

如果我正确理解systemd.unit(5)我无法使用Conflicts=,因为这会在启动一项服务时主动停止一项服务。我不能使用After=Before=之一(与Type=simple),因为这只会延迟第二个服务,直到第一个服务初始化即仍在运行)。

Type=oneshot据我了解,一种解决方案是和的组合,因为 oneshot 使 systemd在主进程终止后After=认为单元处于活动状态(并立即死亡)。另一方面,Type=oneshot对于可能长时间运行的任务,明确不鼓励使用。

人们还可以.service使用以下方法将这两项任务放在一个单元中

ExecStart=/usr/bin/sh -c 'first-command; second-command'
Run Code Online (Sandbox Code Playgroud)

但我认为这非常丑陋,因为它将两个服务的执行间隔绑定在一起。

那么,拥有依赖于同一专有资源的多个服务的最系统化的方式是什么?

services systemd

9
推荐指数
0
解决办法
1312
查看次数

bind、systemd-resolved、dnsmasq 等之间的实际差异是什么?

我正在尝试实现三个简单的目标(在我们的 CentOS8 服务器上)......

  1. 本地 DNS 解析/缓存
  2. DNSSEC
  3. DNSoverTLS

起初我直接选择了dnsmasq,因为这似乎是大多数人在我的研究中使用的。这是一个简单的安装,我很快就能启动并运行它。 #1 - 检查

然后我继续DNSSEC并最终发现我只需要将以下内容添加到我的dnsmasq.conf...

conf-file=/usr/share/dnsmasq/trust-anchors.conf
dnssec
dnssec-check-unsigned
Run Code Online (Sandbox Code Playgroud)

一切看起来都很好,#2 - 检查

dnsforwarder最后我开始了解DNSoverTLS ,并开始了解bind. 似乎如果不在链中安装另一个链接(例如 )stubby,它就不是本机支持的东西。 #3 - 软失败

我想要尽可能简单/易于维护的解决方案,即更少的移动部件,所以我开始考虑它,BIND9因为它是事实上的标准,但在这样做的过程中,我还发现systemd-resolved它已经安装并且似乎支持我的所有三个要求。#1,2,3 - 检查

我的问题是,根据我的三个要求,为什么我不使用systemd-resolved,使用其他两种方法之一的现实世界差异或好处是什么?我看到了一些人对 的憎恨systemd-resolved,但这只是因为它由于可能存在 MITM 向量而并不真正安全,但从我所看到的情况来看,这个问题已经得到了处理。

我试图找到比较这三者的细节,但一切都是关于bind和 的dnsmasq,令人惊讶的是,除了 的参考手册之外很难找到任何东西systemd-resolved

谢谢。


编辑:所以你对情况有了更好的了解,服务器的使用率很低,邮件服务,一些文件同步,轻量的网络任务,通常< 5个用户,也许偶尔会有机器人/白痴试图随机渗透它,唯一需要注意的是,将会有很多这样的实例,所有这些实例都作为集中编排的独立单租户系统独立运行......所以我正在寻找一个简单但功能强大的 DNS 系统,它提供现代隐私和安全功能,如 DNSSEC 和点。

我并不反对一种包含更多部件的解决方案,但我只是在寻找一种理由(如果有这样做的理由)。

也就是说,我刚刚意识到 CentOS8 被困在 systemd v239 上,并且根据文档,完全工作的 DoT 直到 …

dns dnsmasq bind systemd

9
推荐指数
0
解决办法
4527
查看次数

如何在 WSL2 上启用 systemd:Ubuntu 20 和 CentOS 8

我在 WSL2(适用于 Linux 的 Windows 子系统,v2)上并从以下位置获得 CentOS 8 WSL:https :
//github.com/yuk7/CentWSL

从 Windows Store 下载的 Ubuntu 20 WSL 也没有systemd启用。

让它像往常一样运行,但是systemd没有运行,尽管它确实存在于文件系统中:

$ cat /etc/*-release | grep NAME
NAME="CentOS Linux"
PRETTY_NAME="CentOS Linux 8 (Core)"
CPE_NAME="cpe:/o:centos:centos:8"

$ stat /lib/systemd/systemd
  File: /lib/systemd/systemd
  Size: 2523648         Blocks: 4936       IO Block: 4096   regular file
Device: 2h/2d   Inode: 1407374884100769  Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-05-31 13:17:53.497597100 +0700
Modify: 2020-04-10 04:52:32.000000000 +0700
Change: 2020-05-30 12:06:52.791586300 +0700 …
Run Code Online (Sandbox Code Playgroud)

linux init systemd systemctl windows-subsystem-for-linux

9
推荐指数
3
解决办法
3万
查看次数