systemd:谁在没有 ifupdown 的情况下设置 lo 界面?

Yas*_*oji 5 networking debian networkmanager systemd-networkd

什么组件/包负责lo在没有ifupdown包的情况下将systemd 作为 PID1 的网络接口调出?

在 Debian 中,我们有相当多的组件来管理网络、ifupdownnetwork-managersystemd-networkd。现在,我们可以,而且我做到了,删除该ifupdown包,这意味着在启动过程中/etc/network/interface不会引用它ifup

我还ifconfig从 NetworkManager 的配置文件中删除了所有条目/etc/NetworkManager/NetworkManager.conf,并nmcli dev显示它lo是不受管理的。

$ nmcli dev
  :
lo               loopback  unmanaged    --                 
Run Code Online (Sandbox Code Playgroud)

networkctl还显示lo未托管:

$ networkctl
IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           carrier     unmanaged 
  :
Run Code Online (Sandbox Code Playgroud)

但仍然,lo似乎是了(LOWER_UP至少)

$ ip li
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
Run Code Online (Sandbox Code Playgroud)

和 ssh 到 localhost 工作。

所以,我的问题是,谁在提出这个lo界面?

请注意,我的意图不是禁用lo界面,而是知道谁负责以及何时以及如何执行。

sou*_*edi 5

环回接口在早期启动时设置(例如在运行任何网络服务器之前)。似乎分布之间没有显着差异。即使没有在 /etc/network/interfaces 中进行配置,当前的 Debian ifupdown也会启动lo。从技术上讲,可以更改 - 的配置,lo并且仍然可以重新配置,例如使用 ifupdown(甚至可能是 systemd-networkd?)。

systemd 的早期设置部分可能更难理解。它是单个程序的代码(用 C 编写:),设置调用与更多特定于程序的初始化混合在一起,并且似乎没有专门记录。然而,systemd 二进制文件的手册页确实提到了环回接口作为内置设置任务的一个示例:

Systemd 包含需要作为启动过程的一部分执行的各种任务的本机实现。例如,它设置主机名或配置环回网络设备。它还设置和挂载各种 API 文件系统,例如 /sys 或 /proc。

有关 systemd 背后的概念和思想的更多信息,请参阅原始设计文档 [2]。

谷歌知道

https://www.google.com/search?q=systemd%20loopback

代码在哪里 - 结果 1:https : //github.com/systemd/systemd/blob/master/src/core/loopback-setup.c

它还向您显示提及此的开发人员博客文章。这篇博文除了确认 systemd 负责之外,并没有更具体地回答您的问题。例如,它也提到了tmpfiles,没有提到systemd-tmpfiles 是一个与PID 1 不同的二进制和服务单元。明确地说,loopback 接口是由PID 1 设置的,这可以在代码中看到。

结果 3:

面向管理员的 systemd,第 VIII 部分
0pointer.de/blog/projects/the-new-configuration-files - 缓存 - 类似
2011 年 4 月 20 日...我正在进行的面向管理员的 systemd 系列的另一集:...设置主机名;配置环回网络设备

我们的小项目零壳[1] 取得了圆满成功。我们目前几乎涵盖了大多数桌面和嵌入式发行版应该需要的所有内容,以及服务器需求的很大一部分:

  • 检查和挂载所有文件系统

  • 在所有文件系统上更新和启用配额
  • 设置主机名
  • 配置环回网络设备
  • 加载 SELinux 策略并在启动时根据需要重新标记 /run 和 /dev
  • 在内核中注册其他二进制格式,例如 Java、Mono 和 WINE 二进制文件
  • 设置系统区域
  • 设置控制台字体和键盘映射
  • 创建、删除和清理临时和易失文件和目录
  • 将 /etc/fstab 中的挂载选项应用到预挂载的 API VFS
  • 应用 sysctl 内核设置
  • 收集和重放预读信息
  • 更新 utmp 启动和关闭记录
  • 加载和保存随机种子
  • 静态加载特定内核模块
  • 设置加密硬盘和分区
  • 在串行内核控制台上生成自动 gettys
  • 普利茅斯的维护
  • 机器ID维护
  • 设置系统时钟的 UTC 距离