AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-38371

xealits's questions

Martin Hope
xealits
Asked: 2024-12-17 00:26:41 +0800 CST

如何让 NetworkManager 使用 `/etc` 配置以及 `/run` 连接来自哪里?

  • 6

我有一块 Petalinux 开发板(带有 AMD/Xilinx Zynq UltraScale+ MPSoC 的 Trenz Electronic),它启动时网络连接配置错误(无 DHCP)。它没有以下配置/etc:

$ ls /etc/NetworkManager/system-connections/
$ 

配置连接后,sudo nmcli con mod eth0 ...它可以正常工作。 (我修改了 ipv4 和 ipv6 配置,就像stackoverflow 上的那样。) 它会在中创建一个永久配置文件/etc:

/etc/NetworkManager/system-connections/eth0.nmconnection

但是,重新启动后,NetworkManager 会创建一个新的/run配置,该配置以某种方式优先于我的连接/etc:

$ nmcli -f TYPE,FILENAME,UUID,NAME,DEVICE connection
TYPE      FILENAME                                                  UUID                                  NAME  DEVICE 
ethernet  /run/NetworkManager/system-connections/eth0.nmconnection  99e39a32-c0ab-4b3f-be16-75a9bdff1277  eth0  eth0   
loopback  /run/NetworkManager/system-connections/lo.nmconnection    5d84c484-4214-47e4-8f00-01f7730200b3  lo    lo     
ethernet  /etc/NetworkManager/system-connections/eth0.nmconnection  fb365147-6ad9-47a0-a5c8-fbea10080ece  eth0  --     

这里,恶意程序99e39a32已/run连接到eth0设备,并且我的/etc连接配置fb365147保持空闲状态。

如何在 NetworkManager 中正确永久地保存连接配置,或者让其使用/etc配置作为连接的唯一模板eth0?它从哪里获取配置/run?它为什么不用/etc来创建/run配置?

有帖子说 NetworkManager 会为每个用户创建连接。也就是说,建议是/etcroot,然后其他连接会以某种方式用于我的用户。但我不认为这里的情况如此。nmcli不允许我修改没有 root 权限的连接。

互联网上有许多类似的问题:1 (我没有/etc/netplan评论中提到的文件),2,3 。但它们对我的情况没有帮助。

更新:

通过计算机启动后的日志/run可以了解配置如何产生的一些信息:journalctl -u NetworkManager[loggin] level=TRACE/etc/NetworkManager/NetworkManager.conf

NetworkManager[347]: <info>  [1734374462.9312] device (eth0): carrier: link connected
NetworkManager[347]: <trace> [1734374462.9313] ethtool[3]: ETHTOOL_GSET, eth0: success
NetworkManager[347]: <debug> [1734374462.9317] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [platform-init,!user-settings=0x4/0x14/unmanaged/unrealized], set-managed [user-settings=0x10])
NetworkManager[347]: <debug> [1734374462.9318] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [!platform-init,!user-settings=0x0/0x14/managed/unrealized], set-managed [platform-init=0x4])
NetworkManager[347]: <debug> [1734374462.9318] device[e5c0e28febbc1b13] (eth0): unmanaged: flags set to [!sleeping,!platform-init,!user-settings=0x0/0x15/managed/unrealized], set-managed [sleeping=0x1])
NetworkManager[347]: <trace> [1734374462.9319] dbus-object[e5c0e28febbc1b13]: export: "/org/freedesktop/NetworkManager/Devices/2"

NetworkManager[347]: <info>  [1734374462.9329] manager: (eth0): new Ethernet device (/org/freedesktop/NetworkManager/Devices/2)
NetworkManager[347]: <trace> [1734374462.9349] settings: auto-default: cannot create auto-default connection for device eth0: already has a profile
<----- this already existing "profile" must be the config in /etc
       when I added no-auto-default=* or eth0 in NetworkManager.conf
       this line said: cannot create auto-default.. because no-auto
...
NetworkManager[347]: <debug> [1734374462.9356] Connection 'eth0' differs from candidate 'eth0' in ipv4.addresses, ipv4.gateway, ipv4.method
NetworkManager[347]: <debug> [1734374462.9357] manager: (eth0): assume: generated connection 'eth0' (b807ebb2-d7a5-4b26-82c1-c321a6e7d5ba)
NetworkManager[347]: <debug> [1734374462.9357] device[e5c0e28febbc1b13] (eth0): assume-state: set guess-assume=0, connection=(null)
NetworkManager[347]: <trace> [1734374462.9370] keyfile: commit: b807ebb2-d7a5-4b26-82c1-c321a6e7d5ba (eth0) added as "/run/NetworkManager/system-connections/eth0.nmconnection" (nm-generated,volatile,external)

我想现在的问题是Connection 'eth0' differs from candidate 'eth0' ...- 候选者是什么?也就是说,设备本身可能还有一些配置eth0,当/etc配置与该配置冲突时,NetworkManager 会创建一个新的配置?

我尝试添加此文件,但行为没有任何变化(它可能已被弃用):

$ cat /etc/network/interfaces
auto eth0
iface eth0 inet dhcp

更新 2:

需要指出的是,我曾尝试添加no-auto-default配置,但在这种情况下没有任何区别:

/etc/NetworkManager/NetworkManager.conf

[main]
no-auto-default=*
# or no-auto-default=eth0

添加连接/etc/network/interfaces也无济于事:

# Wired interfaces
auto eth0
iface eth0 inet dhcp
    hwaddress ether <MAC address>

我认为,正如@telcoM 所建议的那样,这是 Petalinux 特有的行为。您在构建映像时定义 eth0 设备的设置(显然 NetworkManager 可以以某种方式从设备读取设置,或者其他什么?),并且在构建映像后您无法在 Petalinux 中修改以太网设置ZynqMP>。可能,您在 uboot控制台中也无法修改任何内容。

所以,我最终做的是:重命名我的连接并eth0dhcp添加启动后连接它的 systemd 单元。

sudo nmcli c mod fb365147-6ad9-47a0-a5c8-fbea10080ece con-name eth0dhcp

连接配置如下:

$ sudo cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0dhcp
uuid=fb365147-6ad9-47a0-a5c8-fbea10080ece
type=ethernet
autoconnect=false
interface-name=eth0
timestamp=1734377647
 
[ethernet]
mac-address=<mac address>
 
[ipv4]
method=auto
 
[ipv6]
addr-gen-mode=default
method=auto
 
[proxy]

一次性的 systemd 单元:

[Unit]
Description=UP the eth0dhcp for eth0 after boot
 
After=network.target
Requires=network.target
 
[Service]
Type=oneshot
RemainAfterExit=yes
User=root
ExecStart=nmcli con up eth0dhcp
 
SuccessExitStatus=0
Restart=on-failure
RestartSec=20
 
StartLimitInterval=300
StartLimitBurst=5
 
[Install]
WantedBy=multi-user.target

对我来说,这已经足够了。稍后我们将使用所需的任何设置来构建图像。

networkmanager
  • 2 个回答
  • 44 Views
Martin Hope
xealits
Asked: 2024-10-21 06:08:56 +0800 CST

每次运行时,Systemd-analyze verify multi-user.target 都会显示不同的排序周期数

  • 5

我在从 Intel Optane(我刚从 ebay 收到)启动全新的 Ubuntu 24.04.1 时遇到了一些问题:启动过程运行很快,但有时一些 systemd 单元在启动过程中不运行,系统启动时没有 NetworkManager 或其他东西,如 snapd-apparmor。journalctl 日志报告存在排序周期。尝试找到它们时,我注意到systemd-analyze verify multi-user.target几乎每次运行它时都会报告不同的内容:

$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
7
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
13
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
0
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
0
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
18

由于对来自 ebay 的磁盘有怀疑,我在之前安装在 Corsair NVMe 上的 Ubuntu 22.04 上尝试了同样的操作,结果相同:

$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
16
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
22
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
44
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
24
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
4
$ sudo systemd-analyze verify multi-user.target 2>&1 | grep -i netwo | wc -l
14

Corsair NVMe 上的启动过程也存在类似的问题,即无法启动某些 systemd 单元。但这种情况不太常见。

为什么会发生这种情况?我是否遗漏了什么systemd-analyze verify?为什么systemd-analyze verify每次运行时都会报告不同的循环次数?

版本。在英特尔傲腾上:

$ systemd --version
systemd 255 (255.4-1ubuntu8.4)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -BPF_FRAMEWORK -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.1 LTS"

之前在 Corsair NVMe 上安装的情况(lspci实际上报告为 Phison Electronics Corporation E12):

$ systemd --version
systemd 249 (249.11-0ubuntu3.12)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY -P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.5 LTS"
systemd
  • 1 个回答
  • 11 Views
Martin Hope
xealits
Asked: 2024-08-01 09:09:58 +0800 CST

如何获取启动临时 systemd 单元的信息?

  • 5

我想让自定义服务单元依赖于远程文件系统 CVMFS 的挂载点。远程文件系统在 systemd 中有一个奇怪的设置,我并不完全理解。我使用中间服务单元做了一个简单的解决方法,所以它工作正常。但我想了解远程文件系统的单元是如何工作的,以便了解 systemd 中的这种行为。

这是远程文件系统的挂载点单元:

$ systemctl status cvmfs-sft.cern.ch.mount
* cvmfs-sft.cern.ch.mount
     Loaded: loaded
     Active: active (mounted) since Wed 2024-07-31 23:31:49 CEST; 1min 32s ago
      Until: Wed 2024-07-31 23:31:49 CEST; 1min 32s ago
      Where: /cvmfs/sft.cern.ch
       What: cvmfs2

它没有列出单元文件。该单元必须以某种方式动态创建。因此,当我将 添加Requires=cvmfs-sft.cern.ch.mount到我的单元时,它在 Linux 启动过程中失败,并显示以下内容:

localhost systemd[1]: Failed to start A one shot script ...
<hostname> systemd[1]: ....service: Failed to schedule restart job: Unit cvmfs-sft.cern.ch.mount not found.

但是,如果我在启动后启动我的设备,它会正常运行。即,Requires=cvmfs-sft.cern.ch.mount当我以普通用户身份登录时,依赖关系正常工作,服务器已达到多用户目标,cvmfs 已安装并且该设备cvmfs-sft.cern.ch.mount处于活动状态。

我期望的是 cvmfs 安装点有实际的单元文件。远程文件系统需要时间来安装这些安装点,然后我的单元将从那里继续。

根据CVMFS 文档,真正管理这个文件系统的是这个autofs.service。该autofs服务运行挂载点如下:

$ systemctl status autofs
* autofs.service - Automounts filesystems on demand
     Loaded: loaded (/usr/lib/systemd/system/autofs.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/autofs.service.d
             `-50-cvmfs.conf
...
     CGroup: /system.slice/autofs.service
             |-3405 /usr/bin/cvmfs2 ... sft.cern.ch /cvmfs/sft.cern.ch
...

我想问的是,在 systemd 中,什么可以创建这样的单元而无需单元文件?如果我有一个 init.d 脚本,systemd总是会将其转换为实际的单元文件,不是吗?在这个特定情况下,单元状态显示What: cvmfs2。这是否意味着cvmfs2使用以下功能systemd.mount?

$ man systemd.mount
...
DESCRIPTION
       ...
       The systemd-mount(1) command allows creating .mount and .automount units
       dynamically and transiently from the command line.

我猜想你需要这种用于安装点的瞬时行为,例如当用户将 USB 驱动器插入计算机等时。但是其他单元类型是否可以瞬时创建,即在没有单元文件的情况下动态创建?

有没有一个好的方法可以找出是什么启动了这样一个临时单元? 就我而言,单元依赖关系没有告诉我任何信息:

$ sudo systemctl list-dependencies cvmfs-sft.cern.ch.mount
cvmfs-sft.cern.ch.mount
* |--.mount
* `-system.slice
$ sudo systemctl list-dependencies --reverse cvmfs-sft.cern.ch.mount
cvmfs-sft.cern.ch.mount

是否有其他systemctl命令可以告诉您更多有关此类瞬态单元的来源的信息?

systemd
  • 1 个回答
  • 35 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve