2021年9月

国内知名“开源软件”织梦 CMS 向用户追索 5800 元授权费

织梦 CMS(DedeCMS)是国内使用广泛的一个内容管理系统,近日它发出一则通告称,“除个人非营利网站外,均需购买 DedeCMS 商业使用授权,授权费为人民币 5800 元”。要求除个人非营利网站外,在 2021 年 10 月 25 日 24 时前必须购买授权。据称,织梦 CMS 官方已经通过 AI 取证机器完成了全网的材料取证,并且组建了一个庞大的律师团队。很多人一直将织梦 CMS 视为“开源的免费软件”。但实际上它并不是开源软件,也不是自由软件,甚至并不是免费软件——因为据其授权协议,只允许“个人非营利网站”免费使用,这种授权协议显然并非 OSI 认可的“开源许可证”。

老王点评:要注意,织梦 CMS 不是开源软件,请大家绕道而行。

Google 律师称必应上最常见的搜索词是“Google”

多年来,Google 一直因其在网络搜索领域的主导地位而受到抨击。本周,Google 提出一个证据,必应上最常见的搜索词显然是“Google”。Google 用这个角度来证明其客户选择使用 Google 搜索而不是竞争对手,不是因为它是其设备上的默认选项。必应是微软的搜索引擎,是该公司的 Edge 浏览器以及 Windows 的默认选项。目前,这家科技巨头正因其行为在欧盟面临 50 亿美元的巨额罚款。欧盟针对 Google 的案件裁定,Google“不公平地”在 Android 手机上推送其搜索引擎,将其作为这些设备的默认选项,以迫使竞争对手退出。

老王点评:在一个搜索引擎输入另外一个搜索引擎的名字,我不知道你们在想什么。

微软五年前就知道 Exchange 的 Autodiscover 缺陷

之前我们报道过 Exchange 的 Autodiscover 缺陷,它会泄露用户凭证。但是其实微软早在 5 年前就知道这个缺陷,并坚称这不是问题,也没有给出修复。2016 年就有人给微软安全响应中心发邮件,指出了该缺陷,“基本上,我已经发现以纯文本方式获取 Exchange(因此也包括活动目录)用户密码是非常容易的”。微软承认有这种情况,但“确定它不是一个安全问题”,而是让用户在向服务器“发送请求之前,确保它是值得信赖的”。

老王点评:问题是,客户在向这些服务器发送请求时,是不知道有这些默认服务器的,即便是发送后也不知道。

这个例子让我们看到了在 Foreman 中管理和配置 CentOS Stream 内容的许多选项。

 title=

2021 年 12 月,CentOS 8 将达到生命终点,被 CentOS Stream 取代。CentOS Stream 和 CentOS 之前的迭代之间的主要变化之一是没有小版本。Centos Stream 采用了一个连续的发布周期。从今年年初开始,Foreman 社区的开发者开始看到 CentOS Stream 由于持续发布而提供的更早的错误检测和补丁的好处。我们不再需要等待下一个版本来利用最新的变化和错误修复。一位资深的 Linux 社区爱好者 指出,此举也使 RHEL 开发者比以往更接近 FOSS 社区。

然而,如果你是一个拥有数百或数千台服务器的管理员,你可能想控制新的软件包何时被添加到特定的服务器。如果你正在寻找一个免费的开源工具,帮助你确保生产服务器的稳定性,同时允许你安全地从 Centos Stream 中拉入最新的变化用于开发和测试,这就是 Foreman 可以帮助你的地方。有了 Foreman,你可以在生命周期环境的各个阶段管理你的 Centos Stream 内容。

Foreman 介绍

Foreman 是一个完整的物理和虚拟服务器的生命周期管理工具。有了 Foreman,系统管理员有能力轻松实现重复性任务的自动化,快速部署应用程序,并主动管理内部或云中的服务器。Foreman 为 配备 provisioning 管理、配置管理和监控提供了企业级解决方案。由于其插件架构,Foreman 可以以无数种方式进行扩展。使用 Katello 插件,你可以把 Foreman 作为一个完整的 内容管理 content management 工具来管理 CentOS Stream,以及其他许多内容类型。

通过 Foreman 和 Katello,你可以准确地定义你希望每个环境包含哪些软件包。例如,生产环境可能使用已被验证为稳定的软件包,而开发环境可能需要最新、最先进的软件包版本。你还可以跨生命周期环境推广 内容视图 content view 。让我们来看看 Foreman 是如何完成这个任务的。

我们在这篇文章中使用了网页用户界面,但 Foreman 也有一个强大的 CLI 和 API。Katello 插件为 Pulp 项目提供了一个工作流和网页用户界面,你可以在 这篇文章 中了解更多。我们在这里也提供了一个简单的工作流程,但是 Foreman 和 Katello 项目提供了许多不同的配置选项来满足你的具体需求。

本文假设 Foreman 和 Katello 已经安装完毕。关于如何安装的更多信息,请参阅 Katello 安装手册

创建一个产品

第一步是在 Foreman 中创建一个 产品 product 。该产品的功能是作为一个内部标签来存储 CentOS Stream 存储库。

  1. 在 Foreman 网页用户界面,导航到“ 内容 Content > 产品 Products ”,并点击“ 创建产品 Create Product ”。
  2. 在“ 名称 Name ”字段中,为产品输入一个名称。Foreman会根据你输入的“ 名称 Name ”自动完成“ 标签 Label ”字段,以后不能再更改。

将 CentOS Stream 存储库添加到产品中

现在你有了一个产品,你可以使用 AppStream 和 BaseOS 存储库的 URL,并将它们添加到你的新产品中。

  1. 在 Foreman 网页用户界面中,导航到 “ 内容 Content > 产品 Products ”,选择你要使用的产品,然后点击 “ 新存储库 New Repository ”。
  2. 在“ 名称 Name ”字段中,为存储库输入一个名称;例如,“Centos8StreamBaseOS”。Foreman 会根据你输入的“ 名称 Name ”,自动完成“ 标签 Label ”字段。
  3. 从“ 类型 Type ”列表中,选择存储库的类型,然后选择“Yum”。
  4. 在 “URL” 字段中,输入 CentOS Stream Baseos 存储库的 URL,作为源: http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/
  5. 选择“ 下载规则 Download Policy ”列表。默认的是“ 按需 On Demand ”,这意味着 Katello 将只下载元数据。如果你想下载所有的软件包,请改成“ 即时 Immediate ”,它可以下载所有的软件包,可能会达到 20-30GB。
  6. 确保“ 与镜像同步 Mirror on Sync ”复选框被选中。这个选项确保在同步过程中,不再是上游存储库的一部分的内容被删除。
  7. 点击“ 保存 Save ”。

重复这些步骤,添加 AppStream 存储库及其 URL,例如,http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/。确保你使用最近的官方 CentOS 镜像来代替它。

要执行立即同步,在你的产品窗口,点击“ 立即同步 Sync Now ”。最初的同步可能需要一些时间。你可以从“ 内容 Content > 同步状态 Sync Status ”查看同步状态。

同步完成后,你可以在“ 主机 Hosts > 操作系统 Operating System ”中查看新的 CentOS Stream 操作系统。请随意编辑名称和描述以满足你的要求。

如果你打算使用 Ansible 或 Puppet 等配置管理软件,Foreman 会自动创建一个操作系统报告。你可以在“ 管理 Administe > 设置 Settings > 忽略操作系统状况 Ignore facts for operating system ”中关闭这个选项。重命名操作系统以匹配配置管理软件中的名称是一个好主意。例如,对于 Puppet,这将是“CentOS 8”。

定义你的基础设施的生命周期环境

应用程序生命周期是 Foreman 的内容管理功能的一个核心概念。应用程序的生命周期定义了一个特定的系统和它的软件在特定阶段的状况。例如,一个应用程序的生命周期可能很简单,你可能只有一个“开发”阶段和“生产”阶段。Foreman 提供了一些方法来以可控的方式定制每个应用生命周期阶段,以适应你的规范。

在这一点上,你必须创建你的生命周期环境路径。

  1. 在 Foreman 网页用户界面中,导航到“ 内容 Content > 生命周期环境 Lifecycle Environments ”。
  2. 点击“ 新环境路径 New Environment Path ”,开始一个新的应用生命周期。
  3. 在“ 名称 Name ”字段中,为你的环境输入一个名称。
  4. 在“ 描述 Description ”字段中,为你的环境输入一个描述。
  5. 点击“ 保存 Save ”。
  6. 根据你的需要添加尽可能多的环境路径。例如,你可以创建“dev”、“test”、“stage” 和 “production” 环境。要添加这些环境,点击“添加新环境”,完成“ 名称 Name ”和“ 描述 Description ”字段,并从“ 优先环境 Prior Environment* ”列表中选择先前的环境,这样你就可以按照你预期使用的顺序将它们串联起来。

创建和发布一个内容视图

在 Foreman 中,“ 内容视图 Content View ”是你的存储库在某个特定时间点的快照。内容视图提供了隔离软件包版本到你想保留的状态的机制。内容视图有很多可配置的功能,你可以用它来进一步细化。为了本教程的目的,让我们保持简单。

  1. 在 Foreman 网页用户界面中,导航到“ 内容 Content > 内容视图 Content View ”,并点击“ 创建新视图 Create New View ”。
  2. 在“ 名称 Name ”字段中,为视图输入一个名称。Foreman 会根据你输入的名称自动完成“ 标签 Label ”字段。
  3. 在“ 描述 Description ”字段中,输入视图的描述。
  4. 单击“ 保存 Save ”以创建内容视图。
  5. 在新的内容视图中,点击“ Yum 内容 Yum Contents > 添加存储库 Add Repositories ”,在“ 存储库选择 Repository Selection ”区域,点击“ 添加 Add ”。对于 BaseOS 和 Appstream 存储库,选择你想包括的软件包,然后点击“ 添加存储库 Add Repositories ”。
  6. 点击“ 发布新版本 Publish New Version ”,在“ 描述 Description ”区域,输入关于版本的信息以记录变化。
  7. 单击“ 保存 Save ”。

当你点击“ 发布新版本 Publish New Version ”时,你创建了一个你已同步的所有内容的快照。这意味着你订阅此内容视图的每台服务器将只能访问与此生命周期环境相关的内容视图中的软件包版本。

每一个新的内容视图和后续版本都会首先发布到库环境,然后你可以在那里推广到其他环境。

跨生命周期环境推广内容

如果你已经测试了新的软件包,并且确信一切都很稳定,你可以把你的内容视图推广到另一个生命周期环境中。

  1. 导航到“ 内容 Content > 内容视图 Content Views ”,选择你想推广的内容视图。
  2. 点击内容视图的“ 版本 Versions ”标签。
  3. 选择你想推广的版本,并在“ 操作 Action ”栏中,点击“ 推广 Promote ”。
  4. 选择你要推广内容视图的环境,并点击“ 推广版本 Promote Version ”。
  5. 再次点击“ 推广 Promote ”按钮。这次选择生命周期环境,例如,“Test”,然后单击“ 推广版本 Promote Version ”。
  6. 最后,再次点击“ 推广 Promote ”按钮。例如,选择“Production”环境并点击“ 推广版本 Promote Version ”。

被分配到该特定环境的服务器现在可以从一套更新的软件包中提取。

创建一个激活密钥

为了将 CentOS Stream 服务器注册到你在特定生命周期中定义的内容,你必须创建一个激活密钥。激活密钥是一种与服务器共享凭证的安全方法。这使用了一个叫做“ 订阅管理器 subscription-manager 的工具来订阅 CentOS Stream 服务器的内容。

当你创建了激活密钥后,将 CentOS Stream 订阅添加到激活密钥中。

  1. 在 Foreman 网页用户界面中,导航到“ 内容 Content > 激活密钥 Activation keys ”,并点击“ 创建激活密钥 Create Activation Key ”。
  2. 在“ 名称 Name ”栏中,输入激活密钥的名称。
  3. 在“ 描述 Description ”栏中,输入激活密钥的描述。
  4. 从“ 环境 Environment ”列表中,选择要使用的环境。
  5. 从“ 内容视图 Content View ”列表中,选择你刚才创建的内容视图。
  6. 点击“ 保存 Save ”。

从 Foreman 管理的内容中创建一个 CentOS Stream 主机

现在一切都准备好了。随着你创建的内容包含在内容视图中,并在整个生命周期中推广,你现在可以准确地用你想使用的内容来配置主机,并订阅你想让它们接收的更新。

要在 Foreman 中创建一个主机,请导航到“主机 > 创建主机”。

  1. 在“ 名称 Name ”字段中,为主机输入一个名称。
  2. 单击“ 组织 Organization ”和“ 位置 Location ”选项卡,以确保配置环境自动设置为当前环境。
  3. 从“ 部署在 Deploy On ”列表中,选择“ 裸金属 Bare Metal ”。
  4. 单击“ 操作系统 Operating System ”选项卡。
  5. 从“ 架构 Architectures ”列表中,选择“x86\_64”。
  6. 从“ 操作系统 Operating System ”列表中,选择“CentOS\_Stream 8”。
  7. 勾选“ 构建模式 Build Mode ”框。
  8. 对于“ 媒体选择 Media Selection ”,选择“ 同步的内容 Synced Content ”来使用你之前同步的 CentOS Stream 内容。
  9. 从“ 同步的内容 Synced Content ”列表中,确保选择 “CentOS Stream”。
  10. 从“ 分区表 Partition Table ”列表中,对于这个演示,选择默认的 “Kickstart”,但有许多可用的选项。
  11. 在“ Root 密码 Root Password ”栏中,为你的新主机输入一个 root 密码。
  12. 点击“ 接口 Interface ”标签,并点击“ 编辑 Edit ”,并添加一个 “ Mac 地址 Mac address ”。
  13. 点击“ 参数 Parameters ”标签,并确保存在一个提供激活密钥的参数。如果没有,添加一个激活密钥。
  14. 点击“ 提交 Submit ”以保存主机条目。

现在,新的主机处于构建模式,这意味着当你打开它时,它将开始安装操作系统。

如果你导航到“ 主机 Hosts > 内容主机 Content Hosts ”,你可以看到你的主机所订阅的订阅、生命周期环境和内容视图的全部细节。

这个例子只是对你在 Foreman 中管理和配置 CentOS Stream 内容的众多选项的一个小窥视。如果你想了解更多关于如何管理 CentOS Stream 版本,控制你的服务器可以访问的内容,以及控制和保护你的基础设施的稳定性的详细信息,请查看 Foreman 内容管理 文档。当所有 CentOS Stream 内容在你的控制之下时,你可以创建和注册 Centos Stream,只使用你指定的内容。有关配备的更多详细信息,请参见 Foreman 配备 文档。如果你有任何问题、反馈或建议,你可以在 https://community.theforeman.org/ 找到 Foreman 社区。


via: https://opensource.com/article/21/9/centos-stream-foreman

作者:Melanie Corr 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

试试这些开源视频会议服务之一。

 title=

我最近参加了 实用开源信息(POSI) 会议,它是在一个自由开源的视频会议平台上举行的。当我参加了一系列关于开源软件的实际用途的精彩讲座时,我意识到视频会议在过去几年里已经变得非常普遍。

如果说开源做了什么,那就是提供了选择,现在越来越多的工人有了远程工作的自由,在你的连接方式上有一个选择是非常有意义的。

有时,你需要一个全功能的视频会议应用,其中包括审核、演示模式和分组讨论室,而其他时候,你想做的只是给朋友打一个快速电话,以便看到对方的脸。

Jitsi

Jitsi 是一个简单、随意、但强大的视频通话平台。你可以自己托管它,也可以在 meet.jit.si 的公共实例上使用它。它有可定制的 URL,可以很容易地与你想见面的朋友分享链接、通话中的聊天、管理控制,和通话录音。它的开发非常活跃,每年都会测试和发布一大批新功能。它是 Opensource.com 用于我们每周会议的平台。

Signal

Signal 已经是一个流行的以安全为重点的聊天应用,最近它又增加了 团体视频通话 的功能。视频通话非常适合简单的会议,而且因为你只能与你的 Signal 联系人列表中的其他人见面,所以不用担心你的视频通话会议上有不速之客。当你尝试定位你应该参与开会的虚拟房间时,也没有来回的“电话标签”。这一切都发生在 Signal 中,因此无需猜测。

Signal 本身是非常直观的,视频功能非常适合其现有惯例。简而言之,只要你的联系人在使用 Signal,这就是一个不费力的视频通话平台。这是我用于个人联系的应用,我经常使用其视频通话功能与朋友和家人联系。

P2p.chat

P2p.chat 是这些中最简单的一个,无论是设计还是实现。通过 WebRTC 工作,p2p.chat 是一个 Web 应用,允许你直接连接到你正在呼叫的人,而不需要托管服务器。p2p.chat 的界面并不多,但这也是其吸引力的另一部分。没有管理控制或演示模式,因为 p2p.chat 在很大程度上是科幻片中承诺的“视频电话”:与远方的人进行轻松的人对人(或人们对人们)视频通话。

你可以使用自定义的 URL 来动态地创建一个会议空间,所以它们相对容易记忆(除了小的随机部分)和输入。我和不在 Signal 上的朋友使用 p2p.chat,它从未让我失望过。

BigBlueButton

如果你需要严格的管理控制和极端的灵活性,BigBlueButton 是你正在寻找的解决方案,它专为教室、会议和演讲而设计。有了 BigBlueButton,你可以让所有与会者静音,阻止和踢走一个与会者,创建分组讨论室,创建协作式白板,共享屏幕,进行演讲,以及记录会议。与会者可以“举起手”表示注意,并将他们的状态设定为非语言交流方式。它很容易使用,但它是一个严肃的平台,适用于重点和非常大的群体。我参加过一些使用 BigBlueButton 的技术会议,包括 实用开源信息(POSI)会议。

Wire

Wire 是寻找托管视频聊天和群件客户端的企业客户的绝佳选择。它是 AGPL 许可,这个开源项目可用于桌面和服务器、安卓和 iOS。它具有视频通话、发信和文件共享的功能,因此,即使是远程会议,基本上也有亲自开会的所有便利。你可以在有限的时间内免费试用 Wire,然后为你的公司购买一份支持合同。另外,你也可以自己托管它。

开源视频聊天

没有理由满足于由你可能不完全信任的公司托管的专有视频通话。今天可用的开源选项对于与你的职业和个人生活中的所有人保持联系是非常好的。下次你想和朋友见面时,不妨试试这些解决方案之一。


via: https://opensource.com/article/21/9/alternatives-zoom

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Stack Overflow 的“复制粘贴键盘”

Stack Overflow 今年的愚人节的恶作剧说,它将限制对其网站的免费访问,除非人们购买“钥匙”,一个带有打开 Stack Overflow、复制和粘贴的按钮的设备。但是大家似乎对这个键盘很感兴趣,于是在一位键盘爱好者和定制键盘制造商 Drop 的帮助下,Stack Overflow 设计了一把真正的键盘,并开始以 29 美元的价格出售。

老王点评:这样的键盘,你想不想要一块?你值得拥有~

广告主投诉 Chrome 取消 Cookie 影响行业营收

代表广告主、出版商和科技公司的行业组织“开放网络运动”今日向欧盟投诉谷歌,称谷歌 Chrome 浏览器取消 Cookie 的计划是一种反垄断行为,将严重影响广告主和出版商的营收。谷歌去年年初宣布,未来两年内将逐步淘汰对第三方 Cookie 的支持,并计划推广其“隐私沙箱”技术。但出版商和广告技术公司纷纷抱怨称,谷歌所谓的“隐私沙箱”将限制他们收集网络用户信息的能力,从而影响他们提供更具价值广告的能力。

老王点评:套用一句俗话,“和尚摸得,我也摸得”。各位广告商在想,凭啥你谷歌一个人可以摸,不让我们摸。

AI 判断一副价值 660 万英镑的名画是赝品

英国国家美术馆最重要的藏品之一鲁本斯的画《参孙与大利拉》,是 40 年前在佳士得拍卖会上以当时创纪录的价格 250 万英镑购买的,相当于今天的 660 万英镑。批评家们长期以来一直认为这幅画并非真正出自鲁本斯之手。而现在,一系列采用突破性人工智能技术的科学测试得出了结论。在与 148 幅无争议的鲁本斯画作进行比较后,它不是鲁本斯的原创作品的概率为 91.78%,而与之对比的是,另外一幅英国国家美术馆收藏的画作则有 98.76% 的概率是真品。

老王点评:AI 技术的进步,往往能做到很多人类做不到和做不好的事情,我认为这才是 AI 真正该发挥作用的领域。

开源用户现在有了一个强大的、功能齐全的群件选择。

 title=

多年来,微软 Exchange 作为一个平台牢牢统治着群件环境。然而,在 2020 年末,一个奥地利的开源软件开发商推出了 grommunio,这是一个群件服务器和客户端,其外观和感觉让 Exchange 和 Outlook 用户感到很熟悉。

grmmunio 项目可以很好地替代 Exchange。开发者以与微软相同的方式将组件连接到平台上,它们支持 RPC (远程过程调用)与 HTTP 协议。据开发者介绍,grommunio 还包括许多常见的群件接口,如 IMAP、POP3、SMTP、EAS(Exchange ActiveSync)、EWS(Exchange Web Services)、CalDAV 和 CardDAV。有了这样广泛的支持,grommunio 可以顺利地整合到现有的基础设施中。

用户会注意到对 Outlook、Android 和 iOS 客户端来说几乎没有区别。当然,作为开源软件,它也支持其他客户端。由于集成了原生的 Exchange 协议,Outlook 和智能手机与 grommunio 的通信就像与微软 Exchange 服务器一样。日常的企业用户可以继续使用他们现有的客户端,而 grommunio 服务器则在后台安静地运行。

不仅仅是邮件

除了邮件功能外,grommunio 界面还提供了日历系统。可以直接在日历显示中或在一个新标签中点击创建约会。这很直观,正如你对现代工具的期望。用户可以创建、管理和分享日历以及地址簿。私人联系人或普通联系人都支持,而且你可以与同事分享一切。

任务管理在左边的下拉菜单中显示任务列表,它们可以有一个所有者和多个合作者。你可以为每个任务指定截止日期、类别、附件和其他属性。笔记可以以同样的方式被管理并与其他团队成员共享。

聊天、视频会议和文件同步

除了现代群件的所有标准功能外,grommunio 还提供聊天、视频会议和文件同步功能。它为企业实现了大规模的全面整合,具有极高的性能。对于开源的推动者来说,这是一个简单的选择,对于系统管理员来说,这是一个强大的选择。因为 grommunio 的目标是整合而不是重新发明,所以所有的组件都是标准的开源工具。

 title=

用于高级视频会议的 Jitsi 集成(Markus Feilner, CC BY-SA 4.0

在 grommunio 会议功能的背后是 Jitsi,它以熟悉的用户界面顺利地集成到 grommunio 的用户界面中。完全集成和集中管理的聊天功能是基于 Mattermost

 title=

用于聊天的 Mattermost(Markus Feilner,CC BY-SA 4.0

ownCloud 承诺提供企业级的文件共享和同步,在点击“文件”按钮后开始。

 title=

用于文件同步和交换的 ownCloud(Markus Feilner,CC BY-SA 4.0

grommunio 项目有一个强大的管理界面,包括角色、域和组织管理、预测性监测和自助服务门户。基于 shell 的向导指导管理员完成安装和从微软 Exchange 迁移数据。开发团队正在不断努力,以实现更好的整合和更集中的管理,并随之为管理员提供更好的工作流程。

 title=

grommunio 的管理界面(Markus Feilner, CC BY-SA 4.0

探索 grommunio

grommunio 项目的目标很高,但它的开发者已经付出了努力,这一点很明显。一家专门从事税务咨询的德国托管服务机构最近宣布,他们的客户可以使用 grommunio,这是一个德国数据保护法特别严厉的行业。grommunio 项目做得很好:将现有的、成功的概念干净地结合在一起,实现了开放、安全和符合隐私的通信。


via: https://opensource.com/article/21/9/open-source-groupware-grommunio

作者:Markus Feilner 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

流行的配置文件格式有若干种,每种都有其自身优势。从中找到最适合你的格式吧!

 title=

计算机上有数以千计的配置文件。你可能永远不会直接与其中的大部分文件打交道,但它们确实散落在你的 /etc 以及 ~/.config~/.local/usr 文件夹中。还有一些可能在 /var,甚至 /opt 文件夹中。如果无意中打开过或更改过它们,你就可能会有疑问:为什么有些配置文件看起来是某一种格式,而另一些则是看起来完全不同的格式?

存储配置是一项很灵活的任务,因为只要开发人员知道他们的代码是如何将数据存入文件的,他们就可以轻松编写代码来根据需要提取数据。然而,科技行业非常青睐有详细文档的标准化事物,因此多年来出现了几种比较普遍的格式用来简化配置任务。

为什么我们需要配置文件

配置文件对于现代计算来说很重要。它们使你能够自定义与应用程序交互的方式,或自定义应用程序与系统内其他程序的交互方式。有了配置文件,每当你启动某个应用程序时,它都会有“记忆”,记录了你喜欢如何去使用该程序。

配置文件的结构可以很简单,而且通常确实也很简单。例如,如果你要编写一个应用程序,程序唯一需要知道的是其用户的偏好名字,那么它的唯一配置文件就可以只包含一个词:用户名。就像下面这样:

Tux

但通常应用程序需要追踪的不仅仅是一条信息,因此配置文件通常会有一个键和一个值:

NAME='Tux'
SPECIES='Penguin'

即使没有编程经验,你也可以想象出代码如何解析这些数据。这里有两个简单的例子,一个使用 awk 命令,另一个使用 grep 命令。两个例子都是只关注包含 NAME “键”的行,并返回出现在等号 (=) 之后的“值”:

$ awk -F'=' '/NAME/ { print $2; }' myconfig.ini
'Tux'
$ grep NAME fake.txt | cut -d'=' -f2
'Tux'

同样的原则适用于任何编程语言和任何配置文件。只要你有统一的数据结构,就可以在需要的时候编写简单的代码来提取和解析它。

选择格式

为了保证普遍有效性,配置文件最重要的一点是它们是一致的和可预测的。你绝对不会想做这样的事:以保存用户首选项的名义,将信息随意存储到文件中,然后花好几天时间逆向工程,来找到最终出现在文件中的随机信息。

流行的配置文件格式有若干种,每种格式都有自己的优势。

INI

INI 文件采用了键值对的格式:

[example]
name=Tux
style=widgety,fidgety
enabled=1

这种简单的配置风格很直观,只要你别选择使用糟糕的键名(比如用 unampref 这样的神秘键名来代替 name)就好。这些键值对很容易解析和编辑。

除了键和值之外,INI 格式还可以分 section 。在下列示例代码中,[example][demo] 就是配置文件中的两个节:

[example]
name=Tux
style=widgety,fidgety
enabled=1

[demo]
name=Beastie
fullscreen=1

这几个配置语句解析起来有点复杂,因为有两个 name 键。想象一下,一个粗心的程序员在这个配置文件中查询 name,结果总是返回 Beastie,因为这是文件中对 name 的最后一个定义值。在解析这样的文件时,开发人员必须加倍小心地在各节中搜索键,这可能会很棘手,具体取决于用来解析该文件的语言。然而,它仍然是一种很流行的格式,大多数语言都会有一个现成的库来帮助程序员解析 INI 文件。

YAML

YAML 文件 是结构化列表,可以包含值或者键值对:

---
Example:
  Name: 'Tux'
  Style:
   - 'widgety'
    - 'fidgety'
  Enabled: 1

YAML 格式很流行,部分原因是它看起来很整洁。数据要放置到相对其上层数据的特定位置,除此之外没有太多其他语法。然而,对于某些人来说的这种特色,在其他人眼中可能就是一个问题。许多开发人员不愿使用 YAML,正是因为它很看重本质上 不存在 的东西。如果你在 YAML 中缩进错误,YAML 解析器可能会将你的文件视为无效文件,即使不视为无效,返回的数据也可能是错误的。

大多数语言都有 YAML 解析器,并且有很好的开源 YAML linters(验证语法的应用程序)来帮你确保 YAML 文件的完整性。

JSON

JSON 文件在技术上来说是 YAML 的子集,因此其数据结构是相同的,尽管其语法完全不同:

{
  "Example": {
    "Name": [
      "Tux"
    ],
    "Style": [
      "widgety",
      "fidgety"
    ],
    "Enabled": 1
  }
}

JSON 在 JavaScript 程序员中很流行,这并不奇怪,因为 JSON 全称为 JavaScript 对象符号 JavaScript Object Notation 。由于与 Web 开发密切相关,JSON 是 Web API 的常见输出格式。大多数编程语言都有解析 JSON 的库。

XML

XML 使用标签作为键,将配置值围绕起来:

<example>
  <name>Tux</name>
  <style priority="user">widgety</style>
  <style priority="fallback">fidgety</style>
  <enabled>1</enabled>
</example>

XML 经常被 Java 程序员使用,Java 有一套丰富的 XML 解析器。虽然 XML 以非常严格而著称,但同时也非常灵活。与有一系列特定标签的 HTML 不同,XML 中可以随意发明自己的标签。只要始终坚持相同的构建规则,并有一个良好的库来解析它,你就可以准确而轻松地提取数据。

有一些很好的开源 linter 可以帮你验证 XML 文件,并且大多数编程语言都提供用于解析 XML 的库。

二进制格式

Linux 以纯文本配置为傲。这样做的优点是可以使用 cat 等基本工具查看配置数据,甚至可以使用你 最喜欢的文本编辑器 来编辑配置。

但是,某些应用程序使用二进制格式配置,就意味着数据以某种非自然语言的格式进行编码。这些文件通常需要一个特殊的应用程序(通常是它们要配置的应用程序)来解释它们的数据。你无法查看这些文件,至少无法以任何有意义的方式查看,并且无法在其宿主应用程序之外编辑它们。选用二进制格式的一些原因如下:

  • 速度: 程序员可以使用自定义符号在二进制配置文件中的某些点注册特定的信息位。提取数据时不涉及搜索,因为所有内容都已标注了索引。
  • 大小: 文本文件可能会变大,如果选择压缩文本文件,实际上是在将其转换为二进制格式。二进制文件可以通过编码技巧变得更小(文本文件也是如此,但在某些时候,你的优化会使数据变得晦涩,以至于文件也成了二进制文件)。
  • 晦涩: 一些程序员甚至不希望人们查看他们的配置文件,因此将它们编码为二进制数据。这通常只会让用户感到沮丧,并不是使用二进制格式的好理由。

如果必须使用二进制格式进行配置,请使用已作为开放标准存在的格式,例如 NetCDF

找到有效的配置格式

配置格式帮助开发人员存储应用程序所需的数据,并帮助用户存储他们希望应用程序如何操作的偏好项。对于应该使用什么格式的问题,可能没有错误的答案,只要你觉得所使用的语言能很好地支持就可以。在开发应用程序时,查看可用格式,用一些样例数据建模,查看和评估你的编程语言提供的库和实用程序,然后选择你觉得最合适的一种格式吧。


via: https://opensource.com/article/21/6/what-config-files

作者:Seth Kenlon 选题:lujun9972 译者:unigeorge 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出