| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 为何创造Linux的NetworkManager,以及它是目前最好的网络管理工具 -> 正文阅读 |
|
[系统运维]为何创造Linux的NetworkManager,以及它是目前最好的网络管理工具 |
原文作者为NetworkManager开发者Thomas Haller。 NetworkManager是一个在Linux主机上配置网络的工具。我是NetworkManager的开发者,在Red Hat工作。在我看来,它提供的最大价值是API。这就是NetworkManager在其他网络配置项目中的独特之处。下面就是原因。 配置网络为了配置主机上的本地网络,你需要一个有状态的过程。 配置网络意味着设置Linux内核和用户空间,以便应用程序能够使用网络。这包括设置网络接口、地址和路由、DNS和系统的主机名等等。对于大多数情况来说,有状态的服务是必要的,以监控和重新配置系统。例如,DHCP(ISC的dhclient)、Wi-Fi(wpa_supplicant)、IPv6 SLAAC(内核本身或用户空间守护进程)、蓝牙(bluez)、ppp(ppd)等就是这种情况。例如,如果你写一个shell脚本来用DHCP配置一个网络接口,它需要生成一个管理器deamon,如ISC的dhclient或dhcpcd。 今天,我们有各种旨在详尽地管理网络的软件。我们有NetworkManager,它是一个freedesktop.org项目。还有ConnMan、netctl(ArchLinux上)、systemd-networkd、wicd(未维护)、wicked(SUSE上)。这些工具中的任何一个都可以很好地在你的机器上设置网络。 为其他工具提供一个APINetworkManager不仅仅是一个配置网络的工具。它的主要目的是为其他应用程序提供一个API。 你是否想知道为什么GNOME或KDE只与NetworkManager进行了UI集成?NetworkManager从一开始就被创建为一个配置守护程序,为应用程序的需求服务,独立于UI。它领先于任何其他提供这种API的解决方案,这就是为什么桌面环境与它集成。它符合要求,没有其他的。上面提到的大多数替代方案甚至没有把这样的API作为他们的明确目标。他们的重点是配置网络。当然,每个可用的程序都会有某种形式的API和如何使用它的方式。但是这样的API往往直接针对人类,针对编辑文件的用户,调用临时命令的用户,以及在周围对故障做出反应的用户。 NetworkManager的API旨在被其他程序使用,即NetworkManager的客户端。其中一些客户端(GUI)也可能直接针对人类终端用户。或者它们提供与OpenStack或OpenShift的集成,在这些地方,人类管理员与主机的关系更为疏离。当人类不在身边时,以编程方式确定系统的当前状态变得至关重要。API不仅用于配置操作,还用于确定系统的当前状态。 通用性和特性化NetworkManager是一个通才,而且功能复杂。 当你的应用程序依赖于NetworkManager时,那么NetworkManager必须至少像你的应用程序一样可移植。这意味着,NetworkManager必须适用于各种环境,而不仅仅是桌面。NetworkManager在电话、服务器、容器、笔记本和工作站上都能很好地工作。同样地,NetworkManager必须支持大量的用例、技术和功能。API必须是强大的和无处不在的。如果有不足之处,那么这些问题应该是可以解决的,而且应该被修复。在你的手机或容器中运行NetworkManager并没有超出范围,它是应该运行良好的东西,而且是明确的目标。 NetworkManager可能还不是每个场景下的最佳解决方案。例如,在一个有数千条路由的BGP路由器上,仍然存在性能问题。或者在一个容器内运行,在macvlan设备上不能很好地工作。或者NetworkManager运行一个DHCP服务器很简单,但不是很灵活。但你所想象的大多数场景都是NetworkManager想要发挥的场景。Linux内核本身就是通才的好处的最好例子,NetworkManager也是一个通才。 这意味着NetworkManager不是一个简单的软件。但它的复杂性是为了给其他应用程序提供功能,所以它们本身可以更简单。一次性解决困难的问题。 工具的整合使用NetworkManager API可以整合各种工具。 无论你在命令行上使用nmcli或nmtui,还是Cockpit、GUI或Ansible,它们都只是同一底层配置的前端。当然,你也可以编写自己的应用程序,使用NetworkManager的API,你的应用程序将自然地与这些其他工具集成。 无论你在哪里拥有NetworkManager,它的工作和行为都是一样的。在RHEL和Fedora上,你使用相同的工具配置服务器和工作站。大多数Linux发行版都提供NetworkManager。如果你知道如何在Ubuntu上配置NetworkManager,你也知道如何在Fedora上配置网络。 下一步是什么?NetworkManger也有一些问题和缺乏的功能。有些人不喜欢它,因为它太大或者太复杂,认为它不稳定,或者除了桌面以外不适合任何东西。NetworkManager是软件,就像每个软件都可以被另一个软件取代一样。我们是否应该用一些假想的、未来的替代品来代替它呢?我相信,逐步改进NetworkManager比扔掉它重新开始要简单得多。 在我看来,我们在自由软件中所面临的大多数缺点都是由于缺乏贡献者和人员。在这种情况下,解决问题的方法不是提供更多的替代方案,而是集中精力使一个方案运行良好。 目前的一个重点领域是与Openstack、Openshift、CoreOS和dracut整合。我也对在手机上运行NetworkManager的前景感到兴奋,比如与UBPorts或Librem5一起。 NetworkManager是一个活跃的自由软件项目。让我们一起努力,在各地运行NetworkManager。 Ref:https://blogs.gnome.org/thaller/2020/04/10/why-networkmanager/ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 15:43:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |