2020年5月

百度输入法 Linux 版本发布

百度发布了其输入法的 Linux 版本,官方称支持 Ubuntu 18.04 - 19.10、Deepin 1510、1511,应该也可以支持更多 Linux 发行版版本,如 Ubuntu 20.04 LTS 和优麒麟。官网:http://srf.baidu.com/site/guanwang_linux/ 。安装说明称,“本输入法输入面板程序与其他输入法如搜狗输入法、讯飞输入法冲突,可能会受其他输入法影响而无法正常启动,若已安装其他输入法并导致百度输入法输入面板无法正常启动,应关闭其他输入法相关进程并重启百度输入法输入面板程序”。

来源:百度

硬核老王点评:不知道会有多少 Linux 用户会信任和使用百度的软件。顺便说一句,这个“guanwang”的 URL 地址真不愧是拼音输入法的网址。

Chrome 83 稳定版发布

谷歌跳过了 Chrome 82,直接向最终用户推送了 Chrome 83。主要更新内容:有助于防止跨站点脚本漏洞的可信类型;新的表单元素外观;新的跨域政策;支持条形码检测 API,提供了检测和解码条形码的功能;Preferreds-Color-Scheme 媒体查询使作者能够选择自己的深色主题。

来源:开源中国

硬核老王点评:直接跳过了一个大版本,带来的变化非常多。

EA 将在 GPL 下公开《红警》和《泰伯利亚黎明》的源代码

EA 游戏制作人 Jim Vessella 在 Reddit 上宣布,将在 GPLv3 许可证下公开泰伯利亚黎明和红警的源代码。Vessella 称《命令与征服》应该是第一个在 GPL 下公开源代码的大型即时战略游戏。采用 GPL 是为了确保它与开源项目如 CnCNet 和 Open RA 相互兼容。

来源:solidot

硬核老王点评:作为当年的顶级游戏,能够开源还是非常赞的,希望开源社区可以在此基础上发展出更多的衍生品。

OpenBSD 6.7 发布

主要更新内容:改进 FFS2 文件系统并成为默认文件系统,包括在新安装时默认使用 64 位时间戳和区块号;为 ARM64 设备提供对树莓派 4 的支持,同时改进对树莓派 3 的支持。对于 OpenBSD ARMv7,还改进了对树莓派 2/3 的支持;针对 SMP 的多项改进,包括更好的 AMD SMT/Core/Package 检测;引入 FIDO 驱动,支持 FIDO/U2F 安全密钥;PowerPC OpenBSD 构建切换到 Clang 作为其默认代码编译器。

来源:开源中国

硬核老王点评:OpenBSD 是 BSD 家族的重要成员,在广大的 BSD 爱好者眼中,BSD 才是最好的发行版。

DirectX 将进入 WSL 2

在 //build 2020 上,微软宣布 GPU 硬件加速将加入到 WSL 2 中。WSL 是一个允许用户在 Windows PC 上运行 Linux 应用的环境。现在,这些 Linux 应用和工具将能使用 GPU 加速。微软称,对 GPU 的访问,Linux 环境中的应用将和 Windows 原生应用一样,它不会对 Linux 应用进行限制,将根据需要对 GPU 提供动态的分享。微软表示它将完整的 D3D12 API 带到了 Linux。除了 D3D12 和 DxCore 外,它还将其机器学习 API DirectML 移植到了 Linux。

来源:solidot

硬核老王点评:自打微软将开源当成了新欢,现在微软开个开发者大会,都满满是值得大书一笔的开源新动向。DirectX 进入 WSL ,想必可以为 Linux 下的 GPU 应用提供很好的支持。

Signal 不再将电话号码作为用户的唯一 ID

主打安全的即时通信应用 Signal,本周推出了一项名叫“Signal PINs”的新功能。该公司称,此举有助于用户在设备间迁移账户数据。此外从长远来看,新功能也算是向着摆脱使用电话号码作为用户 ID 的目标迈出了重要一步。启用之后,用户将被要求创建一个与之账户相关联的 PIN 码,且可使用 4 位数及以上的字符串。当用户不慎遗失了设备、或想将资料转移到新手机时,Signal PIN 便允许其轻松实现数据迁移。

来源:cnBeta.COM

广告商因疫情放弃百度

与搜索和视频相比,信息流广告是“短期而言广告商的首选渠道,而这正是百度未能吸引广告商的地方”。广告商们纷纷放弃这家中国搜索巨头,转而使用更灵活的竞争对手的应用。百度表示,第一季度营收同比下降 7%,至 225 亿元人民币,原因是旅游、汽车和医疗行业广告客户在公共卫生危机期间削减支出。其核心的搜索和新闻推送业务的营收下滑速度更快,同比下降 13%。净利润较上一季度暴跌 99%,至 4100 万元人民币。

来源:solidot

硬核老王点评:没什么好说的。

本文介绍了 Linux 提供的拆分终端的方法,它能够帮助你完成多任务工作。那么,你最喜欢哪一款终端复用工具呢?

没有什么问题是不能用一个 Linux 终端解决的,如果不行,那就用两个。

很早以前,终端其实是一个物理设备,而现在的终端实际上是在计算机上被模拟出来的一个应用程序。当你使用终端和计算机进行交互的时候,就会发现,只打开一个终端是不够用的。在进行编译、数据处理等长时间任务的时候,你不得不打开一个新终端或新 选项卡 tab 来同时进行其它工作。

如果你是系统管理员,你就需要更多的终端窗口,以便连接到多个不同的主机上并行工作了。

在 Linux 系统中,终端应用程序在很久之前就已经开始带有选项卡功能了。而现在的终端应用程序里,选项卡已经是标配功能了,这是非常流行的趋势。尽管如此,工作的时候在多个选项卡之间来回切换,或多或少也会分散我们的注意力,甚至带来不便。

而最好的解决方案就是将整个屏幕划分为多个部分,这样多个终端就可以在同一个终端应用程序窗口中同时存在。Linux 发行版中也有很多相关的工具可以实现这一功能。

Shell、终端和控制台

在此之前,我们首先要明确 Shell、 终端 terminal 控制台 console 这三个概念。想要详细了解的话,请参阅 Enable Sysadmin 博客上的相关文章。

简而言之:

  • Shell 是带有 命令提示符 prompt 的用于输入、输出的界面。准确地说,POSIX 桌面底层也运行着一个 Shell,即使这个 Shell 对用户不可见,因为用户会话就是由这个 Shell 启动的。
  • 终端是在图形界面服务器(例如 X11 或 Wayland)中运行的应用程序,其中加载了一个 Shell。只有在终端窗口启动之后,才算是运行了一个终端。终端可以认为是操作 Shell 的一个入口。
  • 控制台(或称“虚拟控制台”)通常表示在桌面环境以外使用的 Shell,你可以通过 Alt+Ctrl+F2 进入控制台,通常情况下从 F3F7 都是不同的控制台,其中桌面环境有可能是 F1 或者 F7,这在不同的发行版中可能会有所不同。

因此,有些应用程序提供的功能是拆分 Shell 或者控制台,有些应用程序的功能则是拆分终端。

tmux

 title=

tmux 可以说是最灵活、最强大的屏幕拆分工具了,它通过键盘控制对多个终端的复用,因此你可以将一个控制台叠放在另一个控制台上面,并在两个控制台之间切换。你还可以将整个屏幕等分为多个控制台,以便同时观察不同控制台上的状况。

tmux 的所有操作都是通过键盘完成的,这就意味着你的手不需要离开键盘去寻找鼠标。为此,你需要记住一些按键组合。

如果你只用 tmux 来做屏幕拆分,那你只需要记住一下这些命令:

  • Ctrl-B % 竖直拆分屏幕(两个 Shell 分别位于左右)
  • Ctrl-B " 水平拆分屏幕(两个 Shell 分别位于上下)
  • Ctrl-B O 切换到另一个 Shell
  • Ctrl-B ? 查看帮助
  • Ctrl-B d 断开 tmux 并让其在后台运行(可以使用 tmux attach 重新进入)

tmux 的一大好处是,在一台计算机上启动 tmux 会话之后,也可以从另一台计算机上进入到这个会话,由此可以看出,tmux 对 Shell 进行了 守护进程化 daemonize

例如,当我在树莓派上运行 tmux,我就可以从计算机上连接到树莓派并登录 IRC,当我断开连接时,树莓派上的 tmux 会继续运行,并等待我的下一次连接,在此期间 IRC 是处于持续登录状态的。

GNU Screen

 title=

GNU Screen 也是一个 Shell 复用工具,类似于 tmux,你可以在断开一个活动会话后重连到其中,它也支持竖直或水平拆分屏幕。

screen 的灵活性比 tmux 要弱一些。它默认的绑定按键组合是 Ctrl-A,和 Bash 中光标移动到行首的快捷键是一样的。因此,当你正在运行 screen 的时候,如果想要将光标移动到行首,就需要多按一次 Ctrl-A。而我自己的做法是,在 $HOME/.screenrc 文件中将绑定按键组合重新设置为 Ctrl-J

escape ^jJ

尽管 screen 在屏幕拆分功能上做得很好,但 tmux 上的一些缺点在 Screen 上也同样存在。例如在拆分 Shell 时,在一个新的面板中不会启动新的 Shell ,而是需要使用 Ctrl-A Tab 导航到另一个面板(如果你按照我的方式重新设置了按键组合,需要对应地把 Ctrl-A 改为 Ctrl-J),然后通过 Ctrl-A C 手动创建一个新的 Shell。

tmux 不同的是,screen 在退出一个 Shell 的时候,屏幕拆分状态不会改变,这样的设计在某些情况下是比较适合的,但麻烦之处在于需要手动管理屏幕拆分状态。

尽管如此,screen 还是一个相当可靠灵活的应用程序,在无法使用 tmux 的时候,你可以选择 screen 作为备选方案。

在默认按键方案下,screen 常用的基本命令包括:

  • Ctrl-A | 竖直拆分屏幕(两个 Shell 分别位于左右)
  • Ctrl-A S 水平拆分屏幕(两个 Shell 分别位于上下)
  • Ctrl-A Tab 切换到另一个 Shell
  • Ctrl-A ? 查看帮助
  • Ctrl-A d 断开 screen 并让其在后台运行(可以使用 screen -r 重新进入)

Konsole

 title=

Konsole 是 KDE Plasma 桌面使用的终端应用程序。和 KDE 一样,Konsole 也以高度可定制、功能强大的特点而著称。

tmux、GNU Screen 类似,Konsole 也具有拆分屏幕的功能。由于 Konsole 是图形界面的终端,因此还可以用鼠标来控制它的屏幕拆分。

Konsole 的屏幕拆分功能在“ 查看 View ”菜单中。它也支持竖直和水平方向的拆分,只要点击鼠标就可以切换到另一个面板上。每个面板都是一个独立的终端,因此都可以拥有独立的主题和标签页。

Konsole 和 tmux、GNU Screen 最大的不同之处在于不能断开和重新连接 Konsole。除非使用远程桌面软件,否则只能在打开 Konsole 时使用,这一点和大多数图形界面应用程序是一样的。

Emacs

 title=

严格来说,Emacs 并不算是一个终端复用工具,但它的使用界面支持拆分和调整大小,同时还带有一个内建的终端。

如果 Emacs 是你日常使用的文本编辑器,你就可以在不关闭编辑器的情况下,在不同的应用程序之间轻松互相切换。由于 Emacs eshell 模块是通过 eLISP 实现的,因此你可以在 Emacs 中使用相同的命令进行交互,让一些繁琐的操作变得更为简单。

如果你是在图形界面中使用 Emacs,还可以使用鼠标进行操作。例如通过点击切换面板、用鼠标调整拆分屏幕的的大小等等。尽管如此,键盘的操作速度还是更快,因此记住一些键盘快捷键还是很有必要的。

Emacs 的一些重要快捷键包括:

  • Ctrl-X 3 竖直拆分屏幕(两个 Shell 分别位于左右)
  • Ctrl-X 2 水平拆分屏幕(两个 Shell 分别位于上下)
  • Ctrl-X O (大写字母 O)切换到另一个 Shell(你也可以使用鼠标操作)
  • Ctrl-X 0 (数字 0)关闭当前面板

如果你运行了 emacs-client 的话,就可以像 tmux 和 GNU Screen 一样断开和重新连接到 Emacs 了。

窗口管理器

 title=

除了文本编辑器之外,一些 Linux 桌面也同样具有拆分屏幕、加载终端这样的功能。例如 RatpoisonHerbsluftwm、i3、Awesome,甚至是启用了特定设置的 KDE Plasma 桌面,都可以将多个应用程序在桌面上分块显示。

这些桌面可以让各个应用程序占据屏幕的固定位置,而不是浮在你的桌面“之上”,因此你可以在多个应用程序窗口之间轻松切换。你还可以打开多个终端,排布成网格,就像终端复用工具一样。更进一步,你还可以在你的桌面复用工具中加载一个终端复用工具。

而且,没有什么可以阻止你在里面载入 Emacs 并分割缓冲区。没有人知道,如果你把它更进一步,会发生什么,大多数 Linux 用户不会外传这种秘密。

tmux、GNU Screen 不同,你在断开与桌面的连接后无法重新连接到同一个桌面会话,除非你使用了远程桌面软件进行连接。

更多选择

除了上面介绍到的工具以外,还有诸如 Tilix、Terminator 这样的终端模拟器,它们同样可以实现屏幕拆分、嵌入终端组件等功能。欢迎在评论区分享你喜欢的终端拆分工具。


via: https://opensource.com/article/20/5/split-terminal

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

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

Codeigniter 是一个 PHP 框架,可以使公司进行开发具有灵活性和便捷性的高性能网站。

PHP Codeigniter 是一个开源框架,为商业应用提供易于使用的 PHP 编程语言和强大的编码工具。它还提供商务智能、服务器监视、开发和应用集成功能。这是一个相对冷清的项目,你很少听到它,但它功能强大,许多刚接触的开发人员都对此感到惊讶和耳目一新。

我在新加坡的一家在线学习服务提供商处使用 Codeigniter。我们提供的服务并不算常见,没有可以作为模板的默认功能集或现有后台管理系统,所以我需要一个能提供良好的、可靠的、可以建立在此基础上的原始材料。最初,我考虑用其他平台(如 Wordpress)用于我们的网站。但是,我决定使用 Codeigniter,因为它的灵活性,以及集成了在我们的补课匹配过程中需要的功能。

以下是打动我使用 Codeigniter 的原因:

  • 与 MySQL 数据库的集成 —— 主要功能是允许客户端浏览导师的数据库并添加导师,例如类似于电子商务平台的“购物车”。
  • 客户端界面系统 —— 用户可以登录来管理偏好并编辑详细信息,修改所教的科目、旅游的地区、手机号码、地址等。
  • 定制的管理员面板 —— 管理员可以使用定制的管理面板访问客户提交的资料,它与客户服务功能集成在一起,因此管理员可以单独跟进。
  • 付款系统 —— 管理面板带有与 Paypal 集成的发票和付款网关。
  • CMS 编辑器界面 —— 管理员能够编辑博客和文章中的文本和图像,以及添加新页面。

该项目花费了大约六个月的时间来完成,另外花了两个月的调试时间。如果我需要从头开始构建所有,或者尝试重新设计现有的框架以满足我们的需求,那将花费更长的时间,而且可能最终无法满足客户需求。

功能和优点

PHP Codeigniter还有很多吸引开发者的功能,包括错误处理和代码格式化,这些功能在各种编码情景下都非常有用。它支持模板,可用于向现有网站添加功能或生成新网站。有许多基于 web 系统商业需要的功能,包括使用自定义标签。即使没有编程经验的普通开发人员也可以使用大多数工具。

Codeigniter 的主要功能是:

  • XML 核心服务,
  • HTTP/FTP 核心服务
  • AppData 和 PHP 沙箱功能
  • XSLT 和 HTML 模板
  • 加密的信息传输
  • PCM Codeigniter 服务器监控
  • 应用集成
  • 文件传输协议(FTP)
  • 服务台支持
  • Apache POI(用于托管网站的内容管理基础架构)

兼容性

Codeigniter 与许多领先的软件程序兼容,例如 PHP、MySQL、MariaDBphpMyAdminApache、OpenBSD、XSLT、SQLite 等。许多公司更喜欢使用 Codeigniter 产品来满足网站要求,因为它们易于使用和集成。如果你不想创建自己的网站,你可以找到许多提供自定义 Web 开发服务的开发人员和设计机构。

安全

Codeigniter 还通过 SSL 加密提供数据安全性。加密可以保护数据免受入侵者和防火墙外部威胁的侵害。数据存储功能还允许对公司网站进行安全审核。

其它功能

一家优秀的 PHP Web 开发公司会使用几种高级技术和第三方技术,例如 XML 和 PHP。它为企业提供了一个完整的平台,可以开发出具有看起来专业的、好用的商业网站。Codeigniter 使得第三方技术的使用变得容易,并可以与常见的 Web 开发软件一起使用。这使得 Web 公司可以轻松地使用所选模块创建网站。大多数 PHP 开发者也为个人提供支持和培训服务。

使用 PHP 框架 Codeigniter

Codeigniter 给企业提供了完整的 PHP 开发包,它将提供强大的功能、灵活性和性能完美结合在一起。到目前为止,我很满意我们的网站,并不断地升级和添加新的功能。并不断升级和增加新的功能。我期待着发现我们的网站还能用 Codeigniter 做些什么。你也是这样么?


via: https://opensource.com/article/20/5/codeigniter

作者:Wee Ben Sen 选题:lujun9972 译者:geekpi 校对:wxy

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

微软在其云服务上打造全新超算

微软与 OpenA 合作,专门为 OpenAI 在 Azure 上构建了一台新的超级计算机,拥有超过 28.5 万个 CPU 核心和 1 万个 GPU。按照世界超级计算机 TOP500 的排名,微软打造的这款新型超级计算机位列前五名。

来源:cnBeta.COM

硬核老王点评:不知道国内的云服务商会不会也打造一个基于云服务器的超算?

WSL 2 计划支持 Linux GUI 应用,可和 Windows 应用同时使用

微软计划在本月底在 WSL 2 中为 Windows 10 系统添加完整的 Linux 内核,而现在又有新计划将支持 Linux 的 GUI 应用,使其能够和常规 Windows 应用一起运行。目前可以使用第三方 X 显示服务器在 Windows 中运行 Linux GUI 应用程序,不过存在性能表现不佳的情况。一旦该功能上线,这就意味着 Windows 用户不需要使用 X11 转发的情况下就能启用 Linux GUI 应用程序,和 Windows 应用一同运行。

来源:cnBeta.COM

硬核老王点评:所以以后在 Windows 上会有越来越多的 Linux 应用出现,无论是命令行的还是图形界面的,或许有一天连内核都换成 Linux 内核,而用户或许会感觉不到变化。嗯,欢迎 Windows “主题”上线。

Windows 10 终于也迎来了一款软件包管理器

微软终于在今日宣布了一项新功能 —— 为 Windows 10 带来了一款内置的软件包管理器。简而言之,其使得用户无需在窗口中频繁点击,即可轻松完成桌面程序的安装工作。Windows 软件包管理器已支持如下命令:install:安装应用程序;show:显示有关应用程序的信息;source:管理应用程序的可用来源;search:查找应用程序的基本信息。感兴趣的朋友可加入 Windows Insider 测试项目,并通过 Microsoft Store 获取 Windows 软件包管理器。

来源:cnBeta.COM

硬核老王点评:在 Linux 等系统中司空见惯的包管理器终于在 Windows 中出现了,这应该算是微软拥抱开源和 Linux,甚至内嵌了 WSL 的系统而带给 Windows 产品线的影响了。

华为 HMS 全球注册开发者达 140 万,接入应用数量超 6 万

目前,全球 170 多个国家和地区的用户已经能够使用华为应用市场、华为浏览器、华为云空间、华为智慧助手·今天等。

来源:网易科技

硬核老王点评:加油!

搭建一个通过容器分发应用的可复用系统可能很复杂,但这儿有个好方法。

一个用于将源代码转换成可运行的应用的构建系统是由工具和流程共同组成。在转换过程中还涉及到代码的受众从软件开发者转变为最终用户,无论最终用户是运维的同事还是部署的同事。

在使用容器搭建了一些构建系统后,我觉得有一个不错的可复用的方法值得分享。虽然这些构建系统被用于编译机器学习算法和为嵌入式硬件生成可加载的软件镜像,但这个方法足够抽象,可用于任何基于容器的构建系统。

这个方法是以一种易于使用和维护的方式搭建或组织构建系统,但并不涉及处理特定编译器或工具容器化的技巧。它适用于软件开发人员构建软件,并将可维护镜像交给其他技术人员(无论是系统管理员、运维工程师或者其他一些头衔)的常见情况。该构建系统被从终端用户中抽象出来,这样他们就可以专注于软件。

为什么要容器化构建系统?

搭建基于容器的可复用构建系统可以为软件团队带来诸多好处:

  • 专注:我希望专注于应用的开发。当我调用一个工具进行“构建”时,我希望这个工具集能生成一个随时可用的二进制文件。我不想浪费时间在构建系统的查错上。实际上,我宁愿不了解,或者说不关心构建系统。
  • 一致的构建行为:无论在哪种使用情况下,我都想确保整个团队使用相同版本的工具集并在构建时得到相同的结果。否则,我就得不断地处理“我这咋就是好的”的麻烦。在团队项目中,使用相同版本的工具集并对给定的输入源文件集产生一致的输出是非常重要。
  • 易于部署和升级:即使向每个人都提供一套详细说明来安装一个项目的工具集,也可能会有人翻车。问题也可能是由于每个人对自己的 Linux 环境的个性化修改导致的。在团队中使用不同的 Linux 发行版(或者其他操作系统),情况可能还会变得更复杂。当需要将工具集升级到下一版本时,问题很快就会变得更糟糕。使用容器和本指南将使得新版本升级非常简单。

对我在项目中使用的构建系统进行容器化的这些经验显然很有价值,因为它可以缓解上述问题。我倾向于使用 Docker 作为容器工具,虽然在相对特殊的环境中安装和网络配置仍可能出现问题,尤其是当你在一个使用复杂代理的企业环境中工作时。但至少现在我需要解决的构建系统问题已经很少了。

漫步容器化的构建系统

我创建了一个教程存储库,随后你可以克隆并检查它,或者按照本文内容进行操作。我将逐个介绍存储库中的文件。这个构建系统非常简单(它运行 gcc),从而可以让你专注于这个构建系统结构上。

构建系统需求

我认为构建系统中有两个关键点:

  • 标准化构建调用:我希望能够指定一些形如 /path/to/workdir 的工作目录来构建代码。我希望以如下形式调用构建:
./build.sh /path/to/workdir

为了使得示例的结构足够简单(以便说明),我将假定输出也在 /path/to/workdir 路径下的某处生成。(否则,将增加容器中显示的卷的数量,虽然这并不困难,但解释起来比较麻烦。)

  • 通过 shell 自定义构建调用:有时,工具集会以出乎意料的方式被调用。除了标准的工具集调用 build.sh 之外,如果需要还可以为 build.sh 添加一些选项。但我一直希望能够有一个可以直接调用工具集命令的 shell。在这个简单的示例中,有时我想尝试不同的 gcc 优化选项并查看效果。为此,我希望调用:
./shell.sh /path/to/workdir

这将让我得到一个容器内部的 Bash shell,并且可以调用工具集和访问我的工作目录(workdir),从而我可以根据需要尝试使用这个工具集。

构建系统的架构

为了满足上述基本需求,这是我的构架系统架构:

 title=

在底部的 workdir 代表软件开发者用于构建的任意软件源码。通常,这个 workdir 是一个源代码的存储库。在构建之前,最终用户可以通过任何方式来操纵这个存储库。例如,如果他们使用 git 作为版本控制工具的话,可以使用 git checkout 切换到他们正在工作的功能分支上并添加或修改文件。这样可以使得构建系统独立于 workdir 之外。

顶部的三个模块共同代表了容器化的构建系统。最左边的黄色模块代表最终用户与构建系统交互的脚本(build.shshell.sh)。

在中间的红色模块是 Dockerfile 和相关的脚本 build_docker_image.sh。开发运营者(在这个例子中指我)通常将执行这个脚本并生成容器镜像(事实上我多次执行它直到一切正常为止,但这是另一回事)。然后我将镜像分发给最终用户,例如通过 容器信任注册库 container trusted registry 进行分发。最终用户将需要这个镜像。另外,他们将克隆构建系统的存储库(即一个与教程存储库等效的存储库)。

当最终用户调用 build.sh 或者 shell.sh 时,容器内将执行右边的 run_build.sh 脚本。接下来我将详细解释这些脚本。这里的关键是最终用户不需要为了使用而去了解任何关于红色或者蓝色模块或者容器工作原理的知识。

构建系统细节

把教程存储库的文件结构映射到这个系统结构上。我曾将这个原型结构用于相对复杂构建系统,因此它的简单并不会造成任何限制。下面我列出存储库中相关文件的树结构。文件夹 dockerize-tutorial 能用构建系统的其他任何名称代替。在这个文件夹下,我用 workdir 的路径作参数调用 build.shshell.sh

dockerize-tutorial/
├── build.sh
├── shell.sh
└── swbuilder
    ├── build_docker_image.sh
    ├── install_swbuilder.dockerfile
    └── scripts
        └── run_build.sh

请注意,我上面特意没列出 example_workdir,但你能在教程存储库中找到它。实际的源码通常存放在单独的存储库中,而不是构建工具库中的一部分;本教程为了不必处理两个存储库,所以我将它包含在这个存储库中。

如果你只对概念感兴趣,本教程并非必须的,因为我将解释所有文件。但是如果你继续本教程(并且已经安装 Docker),首先使用以下命令来构建容器镜像 swbuilder:v1

cd dockerize-tutorial/swbuilder/
./build_docker_image.sh
docker image ls  # resulting image will be swbuilder:v1

然后调用 build.sh

cd dockerize-tutorial
./build.sh ~/repos/dockerize-tutorial/example_workdir

下面是 build.sh 的代码。这个脚本从容器镜像 swbuilder:v1 实例化一个容器。而这个容器实例映射了两个卷:一个将文件夹 example_workdir 挂载到容器内部路径 /workdir 上,第二个则将容器外的文件夹 dockerize-tutorial/swbuilder/scripts 挂载到容器内部路径 /scripts 上。

docker container run                              \
    --volume $(pwd)/swbuilder/scripts:/scripts    \
    --volume $1:/workdir                          \
    --user $(id -u ${USER}):$(id -g ${USER})      \
    --rm -it --name build_swbuilder swbuilder:v1  \
    build

另外,build.sh 还会用你的用户名(以及组,本教程假设两者一致)去运行容器,以便在访问构建输出时不出现文件权限问题。

请注意,shell.shbuild.sh 大体上是一致的,除了两点不同:build.sh 会创建一个名为 build_swbuilder 的容器,而 shell.sh 则会创建一个名为 shell_swbuilder 的容器。这样一来,当其中一个脚本运行时另一个脚本被调用也不会产生冲突。

两个脚本之间的另一处关键不同则在于最后一个参数:build.sh 传入参数 buildshell.sh 则传入 shell。如果你看了用于构建容器镜像的 Dockerfile,就会发现最后一行包含了下面的 ENTRYPOINT 语句。这意味着上面的 docker container run 调用将使用 buildshell 作为唯一的输入参数来执行 run_build.sh 脚本。

# run bash script and process the input command
ENTRYPOINT [ "/bin/bash", "/scripts/run_build.sh"]

run\_build.sh 使用这个输入参数来选择启动 Bash shell 还是调用 gcc 来构建 helloworld.c 项目。一个真正的构建系统通常会使用 Makefile 而非直接运行 gcc

cd /workdir

if [ $1 = "shell" ]; then    
    echo "Starting Bash Shell"
    /bin/bash
elif [ $1 = "build" ]; then
    echo "Performing SW Build"
    gcc helloworld.c -o helloworld -Wall
fi

在使用时,如果你需要传入多个参数,当然也是可以的。我处理过的构建系统,构建通常是对给定的项目调用 make。如果一个构建系统有非常复杂的构建调用,则你可以让 run_build.sh 调用 workdir 下最终用户编写的特定脚本。

关于 scripts 文件夹的说明

你可能想知道为什么 scripts 文件夹位于目录树深处而不是位于存储库的顶层。两种方法都是可行的,但我不想鼓励最终用户到处乱翻并修改里面的脚本。将它放到更深的地方是一个让他们更难乱翻的方法。另外,我也可以添加一个 .dockerignore 文件去忽略 scripts 文件夹,因为它不是容器必需的部分。但因为它很小,所以我没有这样做。

简单而灵活

尽管这一方法很简单,但我在几个相当不同的构建系统中使用过,发现它相当灵活。相对稳定的部分(例如,一年仅修改数次的给定工具集)被固定在容器镜像内。较为灵活的部分则以脚本的形式放在镜像外。这使我能够通过修改脚本并将更改推送到构建系统存储库中,轻松修改调用工具集的方式。用户所需要做的是将更改拉到本地的构建系统存储库中,这通常是非常快的(与更新 Docker 镜像不同)。这种结构使其能够拥有尽可能多的卷和脚本,同时使最终用户摆脱复杂性。


via: https://opensource.com/article/20/4/how-containerize-build-system

作者:Ravi Chandran 选题:lujun9972 译者:LazyWolfLin 校对:wxy

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

MIT “AI 种菜”项目失败,还因环保问题被罚 25125 美元

4 月 30 日消息,麻省理工 MIT 永久关停由原麻省理工媒体实验室首席研究科学家 Caleb Harper 牵头的“开放农业计划(OpenAg)”项目。同一天,Caleb Harper 从 MIT 正式离职。OpenAg 项目始于2015年,其核心产品形态类似迷你培育室,是一个四方的便携密闭箱,被称作个人食品计算机(PFC)。PFC 的硬件和软件全部开源,以便更多人做室内农业试验。这个“开源食物计算机”PFC 一大的技术特色,就是利用深度学习来种菜。项目会搜集来自世界各地的食物计算机数据,然后利用机器学习算法,给植物生长提供更适合其习性的环境“食谱”。Harper 还给这个产品规划了一个充满人情味的发展路线:从帮助叙利亚难民种菜开始,逐步延伸到对未来农业发展的探索,最后建造一个全球化的数字农场,让人们都能自由种植自己喜欢的植物。但 IEEE Spectrum 的一份调查结果显示,2017 至 2019 年期间,Harper 关于 PFC 在难民营的部署的言论被证明是在说谎。PFC 的产品功能也没得到实现。

来源:开源中国

硬核老王点评:理想是好的,现实是残酷的。

梅赛德斯奔驰 OLU 源代码在网上曝光

瑞士软件工程师 Till Kottmann 发现了一个属于戴姆勒公司的 Git 门户网站。Kottmann 在戴姆勒的代码托管门户上注册一个帐户然后下载 580 多个 Git 存储库,其中包含了戴姆勒的梅赛德斯奔驰货车上安装的车载逻辑单元(OLU)的源代码。OLU 是介于汽车硬件和软件之间的一个组件,它负责将车辆连接到云端。戴姆勒未能实施账户确认流程,而这使其能使用一个不存在的戴姆勒公司电子邮件在公司的官方 GitLab 服务器上注册一个账户。

来源:cnBeta.COM

硬核老王点评:GitLab 是好用,但是无防护的实例可能造成的信息泄漏可能更危险。

Rust 发布 5 周年

Rust 核心团队发布博客庆祝发行五周年,并反思了自 2015 年以来该语言经历的所有重大变化。自 2015 年发布 1.0 版以来,Rust 曾在 Stack Overflow 开发者调查中连续四年被评为“最受欢迎的”编程语言。微软也在 2019 年 7 月讨论了对 Rust 的探索,希望将其作为 C、C++ 和其他语言的替代方案,以此来改善应用程序的安全状况。

来源:开源中国

硬核老王点评:Rust 就是太难学了。