2021年6月

其它平台上的屏幕共享或屏幕镜像应用并不那么好。尽管大多数选项仅适用于 Windows/Mac,而你可能很难找到一个适用于 Linux 的开源解决方案。

有了这个应用,你可以与连接到网络的任何设备共享你的屏幕。

如果你有多显示器设置,你会意识到拥有多个屏幕的好处。而且,有了 Deskreen,你可以把任何设备变成你的副屏,多么令人激动啊!

Deskreen:将任何设备变成你的 Linux 系统的副屏

我把我的 Linux Mint 桌面镜像到我的 Android 手机上

Deskreen 是一个自由开源的应用,可以让你使用任何带有 Web 浏览器的设备来作为电脑的副屏。

如果你愿意,它还支持多个设备连接。

Deskreen 很容易使用,当你的所有设备都连接到同一个 Wi-Fi 网络时,它可以正常工作。

让我们来看看它的功能和工作原理。

Deskreen 的功能

Deskreen 的功能包括以下要点:

  • 分享整个屏幕的能力
  • 选择一个特定的应用窗口进行串流
  • 翻转模式,将你的屏幕作为提词器使用
  • 支持多种设备
  • 高级视频质量设置
  • 提供端对端加密
  • 最小的系统要求
  • 黑暗模式

没有一个冗长的功能列表,但对大多数用户来说应该是足够的。

如何使用 Deskreen 应用?

Deskreen 使用分为三个简单的步骤,让我为你强调一下,以便你开始使用:

首先,当你启动该应用时,它会显示一个二维码和一个 IP 地址,以帮助你用 Web 浏览器连接其他设备,以串流你的屏幕。

你可以按你喜欢的方式,在你的辅助设备上的 Web 浏览器的帮助下建立连接。

当你扫描二维码或在浏览器的地址栏中输入 IP 地址,你会在 Deskreen 应用上得到一个提示,允许或拒绝连接。除非是你不认识它,否则就允许吧。

接下来,你将被要求选择你想要串流的内容(你的整个屏幕或特定的应用窗口):

你可以选择串流整个屏幕或选择你想串流的窗口。然而,并不是每个应用窗口都能被检测到。

在我的快速测试中,我没有检测到 Rocket.Chat 应用窗口,但它似乎能检测到 Slack 窗口、Deskscreen 窗口和终端。

你只需要选择源并确认,就可以了。你应该注意到它在你的副屏(手机/桌面)上开始串流。

这是它完成后的样子:

Deskreen 还为你提供了管理连接设备的能力。因此,如果你需要断开任何会话或所有会话的连接,你可以从设置中进行操作。

在 Linux 中安装 Deskreen

你会找到一个用于 Linux 机器的 DEB 包和 AppImage 文件。如果你不知道,可以通过我们的 安装 DEB 包使用 AppImage 文件 指南来安装它。

你可以从 官方网站 下载它,或者从它的 GitHub 页面探索更多的信息。

结束语

考虑到它使用 Wi-Fi 网络工作,在串流方面绝对没有问题。这是一种奇妙的方式,可以与别人分享你的屏幕,或者出于任何目的将其串流到第二个设备上。

当然,它不能取代你的电脑的第二个显示器的优势,但在一些使用情况下,你可能不需要第二个屏幕。

现在,我想问你,你能想到哪些实际应用可以用到 Deskreen?


via: https://itsfoss.com/deskreen/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

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

这份可下载的指南充满了有用的教程,让 SRE 和系统管理员使用 Kubernetes 获得便利。

 title=

Kubernetes 是容器编排的事实标准,在基础设施管理和应用开发方面已经迅速发展成为容器环境的主导。作为一个拥有庞大的爱好者和专业人士社区的开源平台,以及作为云原生计算基金会的一部分,Kubernetes 不仅成为一个强大而令人印象深刻的编排系统本身,而且它还促进了一个庞大的相关工具和服务的生态系统,使其更容易使用,并通过更强大和复杂的组件扩展其功能。

在这本新的电子书《给 SRE 和系统管理员的 Kubernetes 指导》中,Jess Cherry(Ben Finkel 也有贡献)涵盖了一系列用于管理和整合 Kubernetes 的工具和服务。Cherry 和 Finkel 提供了一些有用的 入门 指南,包括 Kubernetes 和一些工具。他们甚至还分享了面试问题,以帮助读者为在这个快速增长的大规模生态系统中工作做好准备。

了解 Kubernetes

如果你刚开始接触 Kubernetes 和容器,Ben Finkel 的 《Kubernetes 入门》文如其题,也是一篇对你需要了解的相关概念的出色介绍。它也是一本轻量级的快速入门指南,用于设置和使用单节点集群进行测试。没有什么比亲身体验技术并直接进入学习更好的方法了。什么是 吊舱 Pod ? 如何在集群上部署一个应用程序? Ben 一一为你做了介绍。

与集群交互的主要方式是 kubectl 命令,这是一种 CLI 工具,它提供了一种与管理集群本身的 API 服务器交互的适合方式。例如,你可以使用 kubectl get 来列出上述的吊舱和部署,但正如你对 Kubernetes 这样复杂的东西所期望的那样,它的 CLI 界面有很强的功能和灵活性。Jess Cherry 的《9 个系统管理员需要知道的 kubectl 命令》速查表是一个很好的介绍,是使用 kubectl 的入门好方法。

同样,Cherry 的《给初学者的 Kubernetes 命令空间》也很好地解释了什么是命名空间以及它们在 Kubernetes 中的使用方式。

简化 Kubernetes 的工作

在一个复杂的系统中工作是很困难的,尤其是使用像 kubectl 这样强大而极简的 CLI 工具。幸运的是,在围绕 Kubernetes 的生态系统中,有许多工具可用于简化事情,使扩展服务和集群管理更容易。

可用于在 Kubernetes 上部署和维护应用和服务的 kubectl 命令主要使用的是 YAML 和 JSON。然而,一旦你开始管理更多应用,用 YAML 的大型仓库这样做会变得既重复又乏味。一个好的解决方案是采用一个模板化的系统来处理你的部署。Helm 就是这样一个工具,被称为 “Kubernetes 的包管理器”,Helm 提供了一种方便的方式来打包和共享应用。Cherry 写了很多关于 Helm 的有用文章:创建有效的 《Helm 海图》和有用的《Helm 命令》。

kubectl 也为你提供了很多关于集群本身的信息:上面运行的是什么,以及正在发生的事件。这些信息可以通过 kubectl 来查看和交互,但有时有一个更直观的 GUI 来进行交互是有帮助的。K9s 符合这两个世界的要求。虽然它仍然是一个终端应用,但它提供了视觉反馈和一种与集群交互的方式,而不需要长长的 kubectl 命令。Cherry 也写了一份很好的《k9s 使用入门》的指南。

建立在 Kubernetes 的强大和灵活性之上的扩展

幸运的是,尽管 Kubernetes 是复杂而强大的,但它惊人的灵活并且开源。它专注于其核心优势:容器编排,并允许围绕它的爱好者和专业人士的社区扩展其能力,以承担不同类型的工作负载。其中一个例子是 Knative,在 Kubernetes 之上提供组件,它为无服务器和事件驱动的服务提供工具,并利用 Kubernetes 的编排能力在容器中运行最小化的微服务。事实证明,这样做非常高效,既能提供在容器中开发小型、易于测试和维护的应用的好处,又能提供仅在需要时运行这些应用的成本优势,可以在特定事件中被触发,但在其他时候处于休眠。

在这本电子书中,Cherry 介绍了 Knative 和它的事件系统,以及为什么值得自己研究使用 Knative。

有一个完整的世界可以探索

通过 Jess Cherry 和 Ben Finkel 的这本新的电子书,可以开始了解 Kubernetes 和围绕它的生态系统。除了上述主题外,还有一些关于有用的 Kubernetes 扩展和第三方工具的文章。


via: https://opensource.com/article/21/6/kubernetes-ebook

作者:Chris Collins 选题:lujun9972 译者:geekpi 校对:wxy

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

Neo4j:数据库历史上最大的投资

图形数据库供应商 Neo4j 的 CEO 在该公司的年度虚拟会议上宣布了这笔 3.25 亿美元的 F 轮融资,使 Neo4j 的估值超过 20 亿美元。谷歌的母公司参与了投资,这是迄今为止对一家私营数据库公司的最大投资。

在会议上,Neo4j 还演示了一个有史以来最大的有 30 亿人的社交网络,展示了在 1000 多台机器上运行的拥有超过 2000 亿个节点和超过一万亿个关系的图的实时查询性能。

20 年前只有少数几个关系型数据库,而如今各种新式数据库层出不穷,市场规模也急剧扩大。

软件已经成为了汽车不可缺少的一部分

10 年前仅有高档车才会使用 100 个基于微处理器的微控制单元(ECU),运行大约一亿行代码。今天像宝马 7 系这类配备先进辅助驾驶系统的高档汽车可能使用了 150 个以上的 ECU,福特皮卡 F-150 运行的代码行数高达 150 亿。甚至低端汽车使用的 ECU 都接近 100 个,代码行数在 1 亿以上。

在完全自动驾驶来到之前,软件就开始吞噬汽车了。

数据中心加剧了干旱

报道,典型的数据中心每天使用约 1000-2000 万升的水,与一个拥有 3 万 - 5 万人口的城市的用水量相同。而每天都在建造更多的数据中心,其中近 40% 在美国,亚马逊、谷歌和微软占总数的一半以上。许多数据中心运营商被吸引到美国西部缺水的地区,部分原因是太阳能和风能的可用性。据估计,五分之一的数据中心从中度至高度紧张的流域取水。

虽然这是美国的情况,但是其它国家也纷纷在偏远干旱地区建设数据中心。

使用微控制器、传感器、Python 以及 MQTT 持续追踪温室的温度、湿度以及环境光。

 title=

CircuitPython 提供了一种和微控制器板进行交互的革命性方式。这篇文章介绍了如何使用 CircuitPython 来监测温室的温度、湿度以及环境光,并且使用 CircuitPython MQTT 客户端将结果发布到一个 MQTT 中介 broker 。你可以在若干个程序中订阅 MQTT 队列并进一步处理信息。

这个项目使用一个简单的 Python 程序来运行 Web 服务器,它发布一个 Prometheus 格式的采集端点,拉取监控指标到 Prometheus 进行不间断的监控。

关于 CircuitPython

CircuitPython 是一个由 Adafruit 创建的开源 Python 发行版,用于运行在低成本微控制器开发板上。CircuitPython 为与 兼容的开发板 的交互提供了简单的开发体验。你可以在连接你的开发板时挂载的 CIRCUITPYTHON 根驱动器上创建一个 code.py 文件来启动你的程序。CircuitPython 还为开发板提供了一个串行连接,包含一个交互式解释器(REPL)会话,你可以使用 Python 代码实时和开发板进行交互。

Adafruit 的网站提供了大量的文档,可以帮助你开始使用 CircuitPython。首先,参考下《欢迎来到 CircuitPython》指南。这份指南能够帮助你开始使用 CircuitPython 在开发板上运行代码以及和 REPL 交互。它还记录了如何安装 Adafruit 的 CircuitPython 库合集和范例,可以用在它出售的许多开发板和传感器上。接下来,阅读《CircuitPython 基础》指南来学习更多关于其功能的信息,里面还有链接指向在特定及兼容的开发板上使用 CircuitPython 的相关信息。最后,就如所有开源软件一样,你可以深入 CircuitPython 的源码,发布议题,以及做出贡献。

微控制器设置

微控制器系统非常简单。要完成这个示例项目,你会需要:

  • 树莓派 4:你需要一台电脑来给微控制器系统编程,我用的是树莓派 4。
  • CircuitPython 兼容的微控制器:我用的是 Adafruit Feather S2,带有内置 WiFi,环境光传感器,Qwiic 线缆输入。
  • 微控制器 WiFi:Feather S2 内置了 WiFi。如果你的微控制器没有,你需要给开发板找个 WiFi 扩展板。
  • 传感器:Feather S2 有个内置的环境光传感器,所以我还需要一个温湿度传感器。有很多不同厂商的产品可以选择,包括 Adafruit、SparkFun、亚马逊。我用的是一个 Adafruit 传感器,带有 Feather S2 输入兼容的 Qwiic 线缆。尽管多数 SparkFun 传感器可以在 Adafruit 库下工作,但如果你不是从 Adafruit 购买的传感器,你可能还是需要自己去找到它兼容 CircuitPython 的 Python 库。
  • 跳线和线缆:为了避免使用面包板或焊接,我使用 Adafruit Qwiic 线缆。SparkFun 销售的包含不同长度的线缆套装中也有它。

在将微控制器连接到你的电脑之前,将传感器连接到微控制器上。

 title=

现在你可以将微控制器用 USB 数据线连接到你的电脑。

MQTT 中介

你可以使用 这份说明 来在树莓派的系统上安装 Mosquitto MQTT 中介 和 Mosquitto 客户端。如果你想把树莓派做为长期服务器使用,在你的网络上给树莓派 4 设置一个静态 IP 地址。Mosquitto 中介运行起来之后,创建一份 用户名/密码文件,设置客户端向中介发布和订阅消息时用的认证信息。

你可以用树莓派上的 Mosquitto 客户端来测试 MQTT 中介。打开两个终端(如果你是无界面运行的话打开两个 SSH 会话):

在终端一输入:

mosquitto_sub -h localhost -u $user -P $pass -t "mqtt/test"

这条命令会启动一个持续运行的进程,监听发布到 mqtt/test 队列的消息。

在终端二输入:

mosquitto_pub -h localhost -u $user -P $pass -t "mqtt/test" -m hello`

这条命令会向 mqtt/test 队列发布一条消息,它应该会显示在终端一的输出里。

现在你可以中止终端一运行的 sub 命令了。

Mosquitto 中介允许客户端发布消息到任何队列,甚至没有任何订阅的队列也可以。这些消息会永久丢失,但这不会阻止客户端继续发布消息。

打开第三个终端,订阅下列队列(你的控制器会发布消息到这些队列上):

  • greenhouse/temperature
  • greenhouse/light
  • greenhouse/humidity

给微控制器编码

现在你已经准备好给微控制器编码,发布它的监测指标到树莓派 4 上运行的 MQTT 中介上了。

Adafruit 有 出色的文档,指导你使用 CircuitPython 库合集 的库来将你的微控制器连接到 WiFi 路由器,并发布监测指标到 MQTT 中介上。

安装下列库到 CIRCUITPYTHON/lib 目录,温室监控会用到它们。这些库在 Adafruit 的 CircuitPython 库合集中都有提供:

  • adafruit_bus_device:一个带有多个 .mpy 文件的 Python 包文件夹(.mpy 是经过压缩的 Python 文件,用以节省空间)
  • adafruit_requests:单个 .mpy 文件
  • adafruit_register:一个包文件夹
  • adafruit_minimqtt:一个包文件夹
  • adafruit_si7021:单个 .mpy 文件,用来支持温湿度传感器

库装好了之后,将以下代码写入 CIRCUITPYTHON 文件夹的 code.py 文件中:

import time
import ssl
import socketpool
import wifi
import adafruit_minimqtt.adafruit_minimqtt as MQTT
import board
from digitalio import DigitalInOut, Direction, Pull
from analogio import AnalogIn
import adafruit_si7021
 
# Add a secrets.py to your filesystem that has a dictionary called secrets with "ssid" and
# "password" keys with your WiFi credentials. DO NOT share that file or commit it into Git or other
# source control.
# pylint: disable=no-name-in-module,wrong-import-order
try:
        from secrets import secrets
except ImportError:
        print("WiFi secrets are kept in secrets.py, please add them there!")
        raise
 
print("Connecting to %s" % secrets["ssid"])
wifi.radio.connect(secrets["ssid"], secrets["password"])
print("Connected to %s!" % secrets["ssid"])
### Feeds ###
light_feed = "greenhouse/light"
temp_feed = "greenhouse/temperature"
humidity_feed = "greenhouse/humidity"
 
# Define callback methods which are called when events occur
# pylint: disable=unused-argument, redefined-outer-name
def connected(client, userdata, flags, rc):
        # This function will be called when the client is connected
        # successfully to the broker.
        print("Connected to MQTT!")
 
def disconnected(client, userdata, rc):
        # This method is called when the client is disconnected
        print("Disconnected from MQTT!")
 
 
def get_voltage(pin):
        return (pin.value * 3.3) / 65536
 
# Create a socket pool
pool = socketpool.SocketPool(wifi.radio)
 
# Set up a MiniMQTT Client
mqtt_client = MQTT.MQTT(
        broker=secrets["broker"],
        port=secrets["port"],
        username=secrets["aio_username"],
        password=secrets["aio_key"],
        socket_pool=pool,
        ssl_context=ssl.create_default_context(),
)
 
# Setup the callback methods above
mqtt_client.on_connect = connected
mqtt_client.on_disconnect = disconnected
 
# Connect the client to the MQTT broker.
print("Connecting to MQTT...")
mqtt_client.connect()
 
# Create library object using our Bus I2C port
sensor = adafruit_si7021.SI7021(board.I2C())
light_pin = AnalogIn(board.IO4)
 
while True:
        # Poll the message queue
        mqtt_client.loop()
 
        # get the current temperature
        light_val = get_voltage(light_pin)
        temp_val = ((sensor.temperature * 9)/5) + 32
        humidity_val = sensor.relative_humidity
 
        # Send a new messages
        mqtt_client.publish(light_feed, light_val)
        mqtt_client.publish(temp_feed, temp_val)
        mqtt_client.publish(humidity_feed, humidity_val)
        time.sleep(0.5)

保存你的代码。然后连接到串行监视器,看程序连接到你的 MQTT 中介。你还可以将树莓派 4 上的终端切换到订阅了它的发布队列的终端来查看输出。

处理监测指标

像 MQTT 这样的发布/订阅工作流给微控制器系统提供了诸多好处。你可以有多个微控制器 + 传感器来回报同一个系统的不同指标或并行回报相同指标的若干读数。你还可以有多个不同进程订阅各个队列,并行地对这些消息进行回应。甚至还可以有多个进程订阅相同的队列,对消息做出不同的动作,比如数值过高时发送通知邮件或将消息发送到另一个 MQTT 队列上去。

另一个选项是让一个微控制器订阅一个外部队列,可以发送信号告诉微控制器做出动作,比如关闭或开始一个新会话。最后,发布/订阅工作流对低功耗微控制器系统更佳(比如那些使用电池或太阳能的系统),因为这些设备可以在更长的延迟周期后批量发布监测指标,并在回报的间隔期间关闭大量消耗电量的 WiFi 广播。

要处理这些监测指标,我创建了一个 Python 客户端,使用 Paho Python MQTT 客户端 订阅监测指标队列。我还使用官方的 Prometheus Python 客户端 创建了一个 Web 服务器,它产生一个符合 Prometheus 标准的采集端点,使用这些监测指标作为面板信息。Prometheus 服务器和 Mosquitto MQTT 中介我都是运行在同一个树莓派 4 上的。

from prometheus_client import start_http_server, Gauge
import random
import time
import paho.mqtt.client as mqtt

gauge = {
  "greenhouse/light": Gauge('light','light in lumens'),
  "greenhouse/temperature": Gauge('temperature', 'temperature in fahrenheit'),
  "greenhouse/humidity": Gauge('humidity','relative % humidity')
}

try:
        from mqtt_secrets import mqtt_secrets
except ImportError:
        print("WiFi secrets are kept in secrets.py, please add them there!")
        raise

def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        # Subscribing in on_connect() means that if we lose the connection and
        # reconnect then subscriptions will be renewed.
        client.subscribe("greenhouse/light")
        client.subscribe('greenhouse/temperature')
        client.subscribe('greenhouse/humidity')

def on_message(client, userdata, msg):
        topic = msg.topic
        payload = msg.payload
        gauge[topic].set(payload)

client = mqtt.Client()
client.username_pw_set(mqtt_secrets["mqtt_user"],mqtt_secrets['mqtt_password'])
client.on_connect = on_connect
client.on_message = on_message
client.connect('localhost',1883,60)

if __name__ == '__main__':
        # Start up the server to expose the metrics.

        client = mqtt.Client()
        client.username_pw_set('london','abc123')
        client.on_connect = on_connect
        client.on_message = on_message
        client.connect('localhost',1883,60)

        start_http_server(8000)
        client.loop_forever()

然后我配置 Prometheus 服务器采集端点数据到 localhost:8000

你可以在 Github 上访问 温室 MQTT 微控制器 这个项目的代码,项目采用 MIT 许可证授权。


via: https://opensource.com/article/21/5/monitor-greenhouse-open-source

作者:Darin London 选题:lujun9972 译者:alim0x 校对:wxy

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

概述你的计算机如何引导和启动一个像 FreeDOS 这样的简单操作系统。

 title=

在使用 DOS 计算机的过程中,我很欣赏的一点是,引导过程相对容易理解。在 DOS 中没有太多的变动组件。而今天,我想和大家分享一下电脑是如何引导和启动像 FreeDOS 这样的简单操作系统的概况。

初始引导

当你打开计算机的电源时,系统会进行一些自我检查,如验证内存和其他组件。这被称为 开机自检 Power On Self Test (POST)。POST 之后,计算机使用一个硬编码指令,告诉它在哪里找到加载操作系统的指令。这就是“ 引导加载程序 boot loader ”,通常它将试图找到硬盘上的 主引导记录 Master Boot Record (MBR)。然后,MBR 加载主操作系统,在这里就是 FreeDOS。

这个定位一个信息以便计算机能够加载操作系统的下一个部分的过程被称为“ 引导 bootstrapping ”,来自于“ 通过你自己的努力振作起来 picking yourself up by your bootstraps ”的古老说法。正是从这个用法中,我们采用了“ 引导 boot ”一词来表示启动你的计算机。

内核

当计算机加载 FreeDOS 内核时,内核所做的第一件事就是识别用户所表示要使用的任何参数。它被保存在一个叫做 FDCONFIG.SYS 的文件中,与内核保存在同一个根目录下。如果 FDCONFIG.SYS 不存在,那么 FreeDOS 的内核就会寻找一个叫做 CONFIG.SYS 的替代文件。

如果你在 20 世纪 80 年代或 90 年代使用过 DOS,你可能对 CONFIG.SYS 文件很熟悉。从 1999 年起,FreeDOS 首先寻找 FDCONFIG.SYS,以防你的 DOS 系统与其他 DOS(如 MS-DOS)做了 双启动。请注意,MS-DOS 只使用 CONFIG.SYS 文件。因此,如果你用同一个硬盘同时启动 FreeDOS 和 MS-DOS,MS-DOS 使用 CONFIG.SYS 来配置自己,而 FreeDOS 则使用 FDCONFIG.SYS。这样一来,双方都可以使用自己的配置。

FDCONFIG.SYS 可以包含一些配置设置,其中之一是 SHELL=SHELLHIGH=。任何一个都会指示内核加载这个程序作为用户的交互式 shell。

如果 FDCONFIG.SYSCONFIG.SYS 都不存在,那么内核就会假定几个默认值,包括在哪里找到 shell。如果你在启动 FreeDOS 系统时看到 “Bad or missing Command Interpreter” 的信息,这意味着 SHELL=SHELLHIGH= 指向了一个在你系统中不存在的 shell 程序。

 title=

你可以通过查看 SHELL=SHELLHIGH= 行来调试这个问题。如果做不到这一点,请确保你在 FreeDOS 系统的根目录下有一个名为 COMMAND.COM 的程序。它就是 shell,我接下来会讲到它。

shell

在 DOS 系统中,“shell” 一词通常是指一个命令行解释器:一个交互式程序,它从用户那里读取指令,然后执行它们。在这里,FreeDOS 的 shell 与 Linux 的 Bash shell 相似。

除非你用 SHELL=SHELLHIGH= 要求内核加载一个不同的 shell,否则 DOS 上的标准命令行 shell 被称为 COMMAND.COM。当 COMMAND.COM 启动时,它也寻找一个文件来配置自己。默认情况下,COMMAND.COM 会在根目录下寻找一个名为 AUTOEXEC.BAT 的文件。AUTOEXEC.BAT 是一个“批处理文件”,它包含一组启动时运行的指令,大致类似于 Linux 上 Bash 启动时读取的 ~/.bashrc “资源文件”。

你可以在 FDCONFIG.SYS 文件中用 SHELL=SHELLHIGH= 改变 shell 以及 shell 的启动文件。FreeDOS 1.3 RC4 安装程序将系统设置为读取 FDAUTO.BAT 而不是 AUTOEXEC.BAT。这与内核读取另一个配置文件的原因相同;你可以在硬盘上用另一个 DOS 双启动 FreeDOS。FreeDOS 将使用 FDAUTO.BAT 而 MS-DOS 将使用 AUTOEXEC.BAT

如果没有像 AUTOEXEC.BAT 这样的启动文件,shell 将简单地提示用户输入日期和时间。

 title=

就是这些了。当 FreeDOS 加载了内核,而内核也加载了 shell,FreeDOS 就准备好让用户输入命令了。

 title=


via: https://opensource.com/article/21/6/freedos-boots

作者:Jim Hall 选题:lujun9972 译者:geekpi 校对:wxy

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

以打击盗版为目标的恶意程序

安全研究人员发现了一种不同寻常的恶意程序,与其它专注于偷密码、搞破坏、或勒索赎金的恶意软件不同,它被设计为专门打击软件盗版。这个被称为 Vigilante 的恶意程序通过盗版网站传播,将自己伪装成各种软件包的盗版副本。受害者下载和执行后会将执行的文件名和 IP 地址发送给攻击者控制的服务器,然后修改主机的 hosts 文件将一千多个盗版网站的域名指向本地地址 127.0.0.1。被屏蔽的盗版网站包括了海盗湾 thepiratebay.com 等。受害者如果不手动修改 Hosts 文件删除相关条目的话将会无法再访问盗版网站。

真是一种“奇特”的恶意程序,这可以算是“正义的铁拳”么?

macOS Monterey 不再内置 PHP

自 OS X 10.0.0 版本开始,PHP 就内置在系统中,CGI 或 CLI 默认都可使用。而在 macOS Monterey 中将不再内置 PHP,在 Mac 平台上使用该编程语言的开发人员今后必须要自己安装。

在 macOS 系统中,PHP 并非是唯一集成的编程语言,在 macOS Monterey 中仍然配备了 2.7.16 的 Python 环境。不过 macOS 未来应该并不会像 PHP 一样移除 Python,而是会升级到 Python 3。

我觉得是 PHP 对 macOS 环境的作用并不大了,毕竟一般人不会在自己的 macOS 里面运行 Web 服务器。

谷歌开源全同态加密(FHE)工具包

谷歌开源了一组 C++ 库,用于在现代应用中实现全同态加密(FHE)。

全同态加密 Fully homomorphic encryption ,或简称为同态加密,是一种数据加密形式,它允许用户/应用在不解密的情况下对加密数据进行数学计算,从而保持数据的隐私不受侵犯。虽然同态加密的概念早在 1978 年就已经存在,在 2009 年首次在实践中实现,但由于其复杂性、高级加密技术以及缺乏开源代码和公共文档,一直以来它并没有在软件中被广泛采用。

同态加密在如今个人隐私数据越发得到重视的时候,非常有意义,这是一个值得关注的方向。