2022年5月

数字化转型涉及数据驱动的决策与人工智能(AI)的结合。重要数据通过物联网(IoT)设备和智能组件进行传播。由于物联网设备常常处于不安全的环境,而且由于缺乏内生安全机制的脆弱性,很难免于潜在的网络攻击。以下是一些用于实现安全审计的开源工具,可以降低此类攻击风险。

网络攻击者和嗅探器可以从物联网设备中获取敏感数据,并利用这些信息对其他相关系统发起攻击。反病毒和计算机安全服务公司卡巴斯基表示,在 2021,物联网黑客数量同比增长了四倍多。

在很大程度上,黑客通过使用 Telnet 协议访问物联网网络,该协议为通过互联网与设备或服务器进行通信提供了命令行接口。根据研究报告,超过 58% 的物联网入侵使用各种协议以求实现挖掘加密货币、通过分布式拒绝服务(DDoS)攻击关闭系统、窃取机密数据的目的。

由于人们在疫情期间居家使用物联网设备的时间增加,安全风险也随之上升。这些物联网组件中的大部分无论是个人用还是商用,都缺乏基本的安全措施。人工智能和边缘计算等新技术也使网络和数据安全形势复杂化。卡巴斯基的一位安全专家 Dan Demeter 表示:智能组件变得流行,攻击的数量也随之上升了。

Key components in PENIOT

物联网组件的安全审计需求

网络攻击一直在演变,商业公司和政府部门都在采用越来越复杂的网络安全设施以防止他们的应用和基础设施免于在线攻击。全球渗透测试市场预计将从 2021 的 16 亿美元增长到 2026 年的 30 亿美元,2021 至 2026 年的复合年增长率为 13.8%。

物联网设备的渗透测试是一个热门话题,在这一领域有大量研究。即使采用“设计安全”的方法,渗透对于识别真正的安全危险并采取适当的预防措施也是至关重要的。

物联网部署中需要安全和隐私的关键部分和协议包括:

  • 受限应用协议 Constraint application protocol (CoAP)
  • 低功耗蓝牙 Bluetooth low energy (BLE)
  • 高级消息队列协议 Advanced message queuing protocol (AMQP)
  • 消息队列遥测传输 Message queuing telemetry transport (MQTT)

攻击者有多种可能的入口访问到联网设备。在物联网渗透测试(或安全审计)时,要测试完整的物联网场景和生态。测试内容包括从单个层和嵌入式软件到通信协议和服务器的所有内容。对服务器、在线接口和移动应用的测试并非物联网独有,但至关重要,因为它们涵盖了故障可能性很高的领域。物联网漏洞是电气、嵌入式软件和通信协议测试的重点。

在评估联网设备的安全性时会进行以下测试。这些测试都是使用不同的针对漏洞的高性能渗透测试和安全审计工具进行的:

  • 通信端口中的攻击和操纵的测试
  • 基于无线电信号捕获和分析的 IoT 嗅探
  • 接口和后门测试
  • 缓冲区溢出测试
  • 密码破解测试
  • 调试
  • 密码学分析
  • 固件操纵测试
  • 逆向工程
  • 内存转储

物联网安全审计使用的开源工具

物联网设备在我们的日常生活中变得越来越普遍,比如,智能自行车、健身跟踪器、医疗传感器、智能锁和联动工厂等。所有这些设备和组件都可以使用开源工具来抵御网络攻击,本文将简要介绍其中一些工具。

PENIOT

PENIOT 是一种物联网渗透测试工具,使安全审计团队能够通过利用设备的连接来测试和破坏具有各种安全威胁的设备。可以测试主动和被动安全威胁。在确定目标设备和相关信息(或参数)后,可以进行主动安全攻击,例如改变系统资源、重放合法通信单元等。还可以分析被动安全威胁,例如破坏敏感数据的机密性或访问网络流量分析。

Objection

Objective 是一个对物联网环境中使用的安卓和 iOS 应用程序进行详细分析和安全审计的工具。

目前许多智能组件和设备都在使用安卓和 iOS 平台,使用该工具可以通过详细的日志和安全审计报告对这些平台进行分析。

Routersploit

这个 针对嵌入式设备的开源开发框架具有多个用于渗透测试和安全审计的功能和模块:

  • Exploits —— 漏洞评估
  • Creds —— 网络服务和证书的测试
  • Scanners —— 对目标进行详细的安全审计
  • Payloads —— 有效载荷和注入关键点的生成
  • Generic —— 执行和测试攻击

Wireshark

Wireshark 是一款功能丰富的、免费的网络协议分析器。MQTT 等多种物联网协议可通过该工具实现有效分析。为了发现弱点,可以根据协议配置安全规则并检查流量。可以使用 tcpdump 通过命令行访问网络数据包分析器。此类工具用于检查物联网设备和网络之间交换的数据包。

Binwalk

Binwalk 是一种逆向硬件设计的工具。它是 Kali Linux 的关键组件之一,用于渗透测试、服务器指纹识别、安全审计和取证应用。

Firmwalker

Firmwalker 是一款自由开源的工具,用于搜索和扫描固件文件系统,无论是否被提取或挂载。使用这个工具可以做一个详细的安全审计。

在物联网(IoT)和万物互联(IoE)的时代,有必要设计并使用高性能工具包进行渗透测试和安全审计。随着物联网设备数量的增加,安全风险也在增加。为了物联网和万物互联部署有更高级别的安全和隐私,有必要根据最新的协议和动态的流量定制化自由及开源的工具箱和软件包。


via: https://www.opensourceforu.com/2022/05/tools-you-can-use-for-the-security-audit-of-iot-devices/

作者:Dr Kumar Gaurav 选题:lkxed 译者:tendertime 校对:wxy

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

随着图形处理器在计算机里变得越来越常见,英伟达正在扩大与标准和开源社区的合作,以便于包括先前仅限于该公司开发工具的下游技术。虽然人们在 C++ 和 Fortran 等语言上投入了大量精力,但这些语言被认为在高度并行的计算机上执行代码落后于原生实现的编程语言。

英伟达结合了开放和专有库的 CUDA 并行编程框架影响了许多正在开放和主流化的技术。在 2007 年,CUDA 作为一个为程序员开发基于 GPU 的系统的一系列编程工具和框架而推出。然而,随着 GPU 利用率在更多应用程序和领域中的增长,CUDA 理念发生了转变。

英伟达因其在 GPU 上的主导地位而广为人知,但 CUDA 是这家以 1 万亿市值为目标的软件和服务供应商重塑品牌的核心。英伟达的长期目标是成为一个全栈提供商,专注于自动驾驶、量子计算、医疗保健、机器人、网络安全和量子计算等特定领域。

英伟达已经在特定领域创建了专用的 CUDA 库,以及企业可以使用的硬件和服务。其 CEO 黄仁勋在最近的 GPU 技术大会上宣布的 “AI 工厂” 概念,最能体现全栈战略。客户可以将应用程序放入英伟达的大型数据中心,从而获得针对特定行业或应用程序需求量身定制的定制 AI 模型。

英伟达可以通过两种方式从 AI 工厂原则中受益:利用 GPU 容量或利用特定领域的 CUDA 库。在英伟达 GPU 上,程序员可以使用 OpenCL 等开源并行编程框架。另一方面,CUDA 将为那些愿意投资的人提供额外的最后一英里增长,因为其已调整为与英伟达的 GPU 密切运作。

虽然并行编程在高性能计算中很常见常见,但英伟达的目标是让其成为主流计算的标准。该公司正在协助实现一流工具的标准化,无论品牌、加速器类型或并行编程框架是什么,都可以编写可跨硬件平台移植的并行代码。

一方面,英伟达是 C++ 小组的成员,该小组正在为跨硬件同时执行可移植代码奠定基础。上下文可以是主要执行 IO 的 CPU 线程,也可以是执行高要求计算的 CPU 或 GPU 线程。英伟达特别致力于为 C++ 程序员提供异步和并行的标准语言和基础设施。

第一项工作侧重于内存模型,该模型已合并到 C++ 11 中,但当并行性和并发性变得更加普遍时,必须对其进行更新。C++ 11 的内存模型强调跨多核 CPU 的并发执行,但它缺乏并行编程钩子。C++ 17 标准为更高级别的并行特性奠定了基础,但真正的可移植性必须等待未来的标准。C++ 20 是当前标准,而 C++ 23 即将推出。


via: https://www.opensourceforu.com/2022/05/nvidia-begins-to-set-the-foundation-for-future-open-and-parallel-coding/

作者:Laveesh Kocher 选题:lkxed 译者:zxcv545 校对:wxy

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

Facebook 开源挑战 GPT-3 的语言模型

OpenAI 的文本生成神经网络 GPT-3 是目前最先进的语言模型之一,使用了 1750 亿个参数,但它至今没有开源,只通过其申请及审核程序提供给学术界和商业实体使用。现在 Meta 开源了能挑战 GPT-3 的语言模型开放式预训练变换模型 OPT-175B,使用了能比拟 GPT-3 的 1750 亿个参数。作者们在论文中说,“考虑到计算成本,如果没有大量资金,这些模型很难复制。对于少数通过 API 可调用的模型(暗指 GPT-3),如果不能获得完整的模型权重,就难以进行研究。……因此,我们推出了 OPT(这是一个只有解码器的预训练变换模型)……”

消息来源:ieee
老王点评:在这件事上,Meta 真的很棒,只有开源才能真正推动 AI 的发展。

RTX 30 全系显卡挖矿限制遭破解

去年,为了遏制游戏显卡被用于挖矿,英伟达限制了新上市 RTX 30 系列显卡的算力水平,这批显卡被称之为 LHR(低哈希率)显卡。本周,NiceHash 宣布,继去年 8 月成功解锁 LHR 显卡 70% 的原始算力后,现在几乎 RTX 30 全系 LHR 显卡已经被 100% 破解。只有 RTX 3050 和RTX 3080 12GB,所需要的新算法还没完工。

消息来源:nicehash
老王点评:终究,显卡还是被用于挖矿了。

谷歌正在为 Linux 研究加密休眠支持

谷歌工程师正在研究安全地“在一些新的场景中启用休眠”。除了采取预防措施,确保恶意的用户空间不能利用休眠数据,谷歌安全团队也在强制要求加密休眠。谷歌现在正在研究基于内核的加密,支持使用 TPM 支持的密钥来加密休眠镜像,用 PCR 策略来密封加密密钥,以及其他工作来确保加密的休眠镜像可以被信任。

消息来源:phoronix
老王点评:这个倒是一直以来的一个薄弱点,虽然对于服务器意义不大,但对于桌面设备有意义。

如果你打算在今年探索 Rust,请下载我们的免费 Rust 速查表,以供快速参考基础知识。

 title=

Rust 是一门相对较新的编程语言,受到各个企业的 程序员的欢迎。尽管如此,它仍是一门建立在之前所有事物之上的语言。毕竟,Rust 不是一天做出来的,所以即便 Rust 中的一些概念看起来与你从 Python、Java、C++ 等编程语言学到的东西大不相同,但它们都是基于同一个基础,那就是你一直与之交互(无论你是否知道)的 CPU 和 NUMA( 非统一内存访问 Non Uniform Memory Access )架构,因此 Rust 中的一些新功能让人感觉有些熟悉。

现在,我的职业不是程序员。我没耐心但我又有点儿强迫症。当我需要完成某件事时,如果一门语言不能帮助我相对较快地获得想要的结果,那么我很少会受到鼓舞而使用它。Rust 试图平衡两个矛盾:现代计算机对安全和结构化代码的需求,和现代程序员对编码工作事半功倍的渴望。

安装 Rust

rust-lang.org 网站有丰富的的文档指导如何安装 Rust,但通常,它就像下载 sh.rustup.rs 脚本并运行它一样简单。

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs
$ less sh.rustup.sh
$ sh ./sh.rustup.rs

没有类

Rust 没有类,也不使用 class 关键字。Rust 确实有 struct 数据类型,但它的作用是充当数据集合的一种模板。因此,你可以使用 结构体 struct ,而不是创建一个类来表示虚拟对象:

struct Penguin {
  genus: String,
  species: String,
  extinct: bool,
  classified: u64,
}

你可以像使用类一样使用它。例如,当定义完 Penguin 结构,你就可以创建它的实例,并与该实例进行交互:

struct Penguin {
  genus: String,
  species: String,
  extinct: bool,
  classified: u64,
}

fn main() {
  let p = Penguin { genus: "Pygoscelis".to_owned(),
    species: "R adeliæ".to_owned(), 
    extinct: false, 
    classified: 1841 };

  println!("Species: {}", p.species);    
  println!("Genus: {}", p.genus);
  println!("Classified in {}", p.classified);
  if p.extinct == true {
    println!("Sadly this penguin has been made extinct.");
  }
}

impl 数据类型与 struct 数据类型结合使用,你可以实现一个包含函数的结构体,并且可以添加继承和其他与类相似的特性。

函数

Rust 中的函数很像其他语言中的函数。每个函数都代表一组严谨的任务,你可以在需要时调用它们。主函数名必须是 main

fn 关键字声明函数,后跟函数名称和函数接受的所有参数。

fn foo() {
  let n = 8;
  println!("Eight is written as {}", n);
}

通过参数,将信息从一个函数传递到另一个函数。例如,我已经创建了一个 Penguin 类(结构),并且我有一个 Penguin 的实例为 p,将目标函数的参数指定为 Penguin 类型,就可把 p 的属性从一个函数传递到另一个函数。

fn main() {
  let p = Penguin { genus: "Pygoscelis".to_owned(), 
    species: "R adeliæ".to_owned(), 
    extinct: false, classified: 1841 };
  printer(p);
}

fn printer(p: Penguin) {
  println!("Species: {}", p.species);    
  println!("Genus: {}", p.genus);
  println!("Classified in {}", p.classified);
  if p.extinct == true {
    println!("Sadly this penguin has been made extinct.");
  }
}

变量

Rust 默认创建的为 不可变 immutable 变量。这意味着你创建的变量以后无法更改。这段代码虽然看起来没问题,但无法编译:

fn main() {
  let n = 6;
  let n = 5;
}

但你可以使用关键字 mut 声明一个 可变 mutable 变量,因此下面这段代码可以编译成功:

fn main() {
  let mut n = 6;
  println!("Value is {}", n);
  n = 5;
  println!("Value is {}", n);
}

编译

Rust 编译器,至少就其报错信息而言,是可用的最好的编译器之一。当你在 Rust 中出错时,编译器会真诚地告诉你做错了什么。实际上,仅通过从编译器错误消息中学习,我就了解了 Rust 的许多细微差别(就我理解到的 Rust 的任何细微差别而言)。即便有时错误消息太过于模糊,而不知所以然,互联网搜索几乎总能得到解释。

启动 Rust 程序的最简单方法是使用 cargo,它是 Rust 的包管理和构建系统。

$ mkdir myproject
$ cd myproject
$ cargo init 

以上命令为项目创建了基本的基础架构,最值得注意的是 src 子目录中的 main.rs 文件。打开此文件,把我为本文生成的示例代码粘贴进去:

struct Penguin {
  genus: String,
  species: String,
  extinct: bool,
  classified: u64,
}

fn main() {
  let p = Penguin { genus: "Pygoscelis".to_owned(), species: "R adeliæ".to_owned(), extinct: false, classified: 1841 };
  printer(p);
  foo();
}

fn printer(p: Penguin) {
  println!("Species: {}", p.species);    
  println!("Genus: {}", p.genus);
  println!("Classified in {}", p.classified);
  if p.extinct == true {
    println!("Sadly this penguin has been made extinct.");
  }
}

fn foo() {
  let mut n = 6;
  println!("Value is {}", n);
  n = 8;
  println!("Eight is written as {}", n);
}

使用 cargo build 命令进行编译:

$ cargo build

执行 target 子目录下的二进制程序,或者直接运行 cargo run 命令来运行你的项目:

$ cargo run
Species: R adeliæ
Genus: Pygoscelis
Classified in 1841
Value is 6
Eight is written as 8

Crates

任何语言的大部分便利都来自于它的库或模块。在 Rust 中,进行分发和跟踪的库称为 “crate”(箱子)。crates.io 是一个很好的社区 crate 注册网站。

把一个 crate 添加到你的 Rust 项目,首先要在 Cargo.toml 文件中添加这个 crate。例如,要安装随机数函数,我使用名为 rand 的 crate,使用 * 作为通配符,以确保在编译时获得最新版本:

[package]
name = "myproject"
version = "0.1.0"
authors = ["Seth <[email protected]>"]
edition = "2022"

[dependencies]
rand = "*"

在 Rust 代码中使用它需要在最顶行使用 use 语句:

use rand::Rng;

以下是一些创建随机种子和随机范围的示例代码:

fn foo() {
  let mut rng = rand::thread_rng();
  let mut n = rng.gen_range(1..99);

  println!("Value is {}", n);
  n = rng.gen_range(1..99);
  println!("Value is {}", n);
}

你可以使用 cargo run 来运行它,它会检测代码是否被更改并触发一个新的构建。构建过程中下载名为 randcrete 和它依赖的所有 crate,编译代码,然后运行它:

$ cargo run
Updating crates.io index
Downloaded ppv-lite86 v0.2.16
Downloaded 1 crate (22.2 KB) in 1.40s
 Compiling libc v0.2.112
 Compiling cfg-if v1.0.0
 Compiling ppv-lite86 v0.2.16
 Compiling getrandom v0.2.3
 Compiling rand_core v0.6.3
 Compiling rand_chacha v0.3.1
 Compiling rand v0.8.4
 Compiling rustpenguin v0.1.0 (/home/sek/Demo/rustpenguin)
 Finished dev [unoptimized + debuginfo] target(s) in 13.97s
 Running `target/debug/rustpenguin`

Species: R adeliæ
Genus: Pygoscelis
Classified in 1841
Value is 70
Value is 35

Rust 速查表

Rust 是一门令人非常愉快的语言。集成了在线注册网站、有用的编译器和几乎直观的语法,它给人的适当的现代感。

但请不要误会,Rust 仍是一门复杂的语言,它具有严格的数据类型、强作用域变量和许多内置方法。Rust 值得一看,如果你要探索它,那么你应该下载我们的免费 Rust 速查表,以便快速了解基础知识。越早开始,就越早了解 Rust。当然,你应该经常练习以避免生疏。

Rust 速查表

via: https://opensource.com/article/22/1/rust-cheat-sheet

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

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

毫不夸张地说,在开源方面获得的经验,帮助我在产品管理领域创造了一条成功的职业道路。

我是一个充满好奇心的人,我喜欢探索科技行业的许多领域,从视觉设计、编程到产品管理。我也被开放源码的理念所吸引。因此,我很高兴与大家分享我作为一个产品经理(PM),是如何利用开源来建立我的职业生涯的。我相信我的经验可以帮助其他对产品管理感兴趣的人。

什么是开源软件

简单地说,开源软件是开放源代码的软件,这意味着任何人都可以检查、修改、增强和分享它的源代码。我们发表过一篇详细、全面的文章 来帮助你了解什么是开源。

我最早知道开源是很久以前了,那时,我还是一名刚入行不久的视觉设计师。我很想知道开源是什么,也很想知道如何成为它的一部分。在这种好奇心的驱使下,我接触到了一些有经验的开源贡献者和倡导者。虽然我当时没有做出贡献,但是他们让我知道了什么是社区,这对我下定决心开始贡献有很大帮助。

如何上手产品管理

产品管理工作貌似是一件很难上手的事情,感觉必须要戴上拳击手套,经过一番搏斗,才能强行进入这一行。然而,我从其他产品经理那里听说,与编写/调试代码块,或使用像素点生成复杂的产品设计线框相比,产品管理工作其实是更好上手的。

虽然我们的经历和经验各不相同,但是有一点可以确定:成为产品经理的道路往往是漫长而不可预知的。随着就业竞争的不断加剧,获得一个初级产品经理的职位可能会很困难。应聘者通常被要求有 2 到 3 年的经验才能加入产品团队。这时你可能会问:“我应该如何获得这些经验呢?”

来看看下面这四个策略吧,它们或许能够将你的职业生涯转向到产品管理:

  1. 在一个大型组织的内部转岗。这可能需要你的经理为你说一些好话,比如,说你很适合在公司内部转岗等。你必须有证据表明你掌握了该岗位的技能。这通常被认为是获得产品管理经验的最快
  2. 担任大型组织的初级产品经理角色。通过它获得实习机会,或者加入一个需要初级产品经理的关副产品管理项目,这些都很常见。
  3. 你也可以尝试通过加入创业公司来上手产品管理工作。
  4. 你还可以启动一个自己的副业项目来上手产品管理工作。

缺乏实践经验,就很难成为产品经理。正如开源产品经理 David Ryan 所说,“有一条获得实际的产品管理经验的途径,它既未被人充分利用,也很少有人意识到并利用它们”。

这条途径是什么?

答案就是开源

一个开放源码项目要想成功,需要的不仅仅是代码。它还包括项目战略、用户研究,以及将战略与日常工作联系起来。这些都是产品经理应该积极参加的活动。但是,在产品管理这一行里,有多少职责会分配给一个新手产品经理呢?

Susana Videira Lopes 在她的一篇文章中指出,“获得一个入门级的产品角色,本质就是以一种建立你的信心的方式,让你加入到至产品管理这一行,同时尽早为组织提供价值”。

一个入门级的产品经理该如何参与开源项目,并为它提供价值呢?

答案很简单:多问问题

这里有一些你可以问的问题:

  • 正在探索的是什么问题/机会?
  • 如何制定解决方案来解决这个问题?
  • 用什么标准来确定项目是否成功?
  • 这个解决方案的服务对象是谁?
  • 他们是如何被告知这个解决方案的?
  • 该解决方案如何与当前和更广泛的生态系统相适应?
  • 项目的文件是在哪里维护的?
  • 项目维护者是否了解 无障碍 accessibility 要求?它们是否被满足?

既然你已经获得了产品经理的所需技能,为何不应用它们呢?结合所学,表达出你深思熟虑的问题,并邀请你的团队来评估吧!你的团队可以选择那些能引起开发者和社区共鸣的问题,并优先考虑其中最重要的。

这些问题可以帮助你建立用户角色、用户旅程图、精益画布,以及更多。这种经验对发展职业潜力有很大的帮助。

我在 OpenUnited 的经历

OpenUnited 是一个以独特方式连接数字人才和工作的平台。我们与贡献者合作,帮助他们投入到高质量的开源产品,从而证明自身的特定技能。一旦他们的工作得到验证,这些有才华的贡献者就有资格在公司里从事有偿工作。

OpenUnited 是一个开源平台,为各类贡献者(包括产品经理、开发人员、设计师、商业分析师和其他人)提供服务。它致力于帮助贡献者提高技能,并为他们提供长期的高质量付费工作来源。

Miro 公司的高级产品经理 Farbod Saraf 让我加入他与合作伙伴创建的一个平台。我加入了这个项目,并了解了如何对 OpenUnited 做出贡献。我还了解了其他可以帮助我在产品管理生涯中成长的项目,并做出了我的第一次贡献。这是一次很好的经历,因为我可以迅速地开始投入到产品的某些部分,以改善平台上其他用户的体验。在我为项目做贡献的时候,我的导师 Farbod 随时为我提供任何需要的帮助,使我的工作更加轻松。

你对开源项目所做的一切贡献,都会成为你成长为产品经理过程中的有力的公共记录。对于任何想通过开源上手产品管理的人,我都强烈推荐 OpenUnited 平台。

如何找到开源项目

许多人认为,贡献开源只适合于开发人员,因为他们觉得找到一个可以舒适地贡献的开源项目是很难的。

即使作为一个初出茅庐的产品经理,也有好几种方法可以找到适合贡献的开源项目。这里列出了一些:

  • 在产品经理社区中发言,如 Mind The Product 和 Product School。
  • 参加当地的聚会和开源会议,如非洲开源社区节,以此来与开源项目的创建者和维护者保持联系。
  • 与在 GitLab 或 Mozilla 等大型开源公司工作的产品经理接触。他们可能会把你推荐到需要你的技能和贡献的开源项目中。
  • 联系开源公司的开源倡导者和开发者关系团队,让他们推荐一些适合入门级产品经理贡献的开源项目。
  • 寻找 AngelList 上的开源公司或 Product Hunt 上流行的开源产品。这些都是你可以找到适合贡献的开源产品的好地方。

下一步

Ruth Ikegah 是我的一个重要灵感来源,她 为开源新手写了一篇文章。她的文章给出了一些提示,在你开始为开源做贡献时,可能需要考虑一下它们。

在加入和贡献项目、社区或组织之前,对它们做一些研究,并提出自己的问题。当你最终决定加入社区时,试着积极地介绍自己,并说明你可以在哪些方面提供帮助。

当然,开源不仅仅是你职业生涯的一个垫脚石。它本身就是一个平台,而且它需要优秀的产品经理。参与进来吧!一方面,你能为社区做出贡献;另一方面,它也能帮助你磨练自己的技能。


via: https://opensource.com/article/22/4/product-management-open-source

作者:Shebuel Inyang 选题:lkxed 译者:lkxed 校对:wxy

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

从 Pop OS 21.10 升级到 Pop OS 22.04 LTS 的简单步骤。

System76 跟着 Ubuntu 22.04 LTS 发布 了 Pop OS 22.04 LTS ,它带来了一些令人兴奋的功能。Pop OS 22.04 LTS 是来自 System76 发布的长期支持版本,它带来了自动计划更新、自定义的 GNOME 42、底层性能改进和 许多其它的功能

你肯定很想体验一下,计划更新到 Pop OS 22.04 。这里我给出你升级 Pop OS 22.04 LTS 的步骤。

注意: 你不能直接从 Pop OS 20.04 升级到 Pop OS 22.04 。首先,你需要先升级到 Pop OS 21.10,然后按照此处概述的步骤升级到这个版本。

从 Pop OS 21.10 升级到 Pop OS 22.04

升级之前的准备

Pop OS 升级过程是相对稳定的。因为根据我们 上一篇关于升级的文章,许多用户面临升级方面的问题。但是如果你正在使用英伟达硬件运行 Pop OS ,我建议你做个备份。

  • 确保你的系统是最新的。你可以使用 Pop 商店应用检查更新。或者,你可以打开终端提示符并运行以下命令更新:
sudo apt update && sudo apt upgrade
  • 按照以上步骤升级完成之后,重启系统。
  • 备份你的文档、照片、视频和其它文件到独立的磁盘分区或者 USB 驱动器。
  • 升级之前,禁用所有 GNOME 扩展。许多扩展会阻挡迁移到 GNOME 42 的过程,最好在你升级之前禁用所有扩展,之后再启用它们。
  • 记下所有额外的软件源或你已经添加的 PPA 仓库,因为它们可能与 “jammy” 分支不兼容。升级之后你可能需要验证它们。
  • 关闭所有运行的程序。
  • 最后,确保你有时间和稳定的网络连接来完成升级。

Pop OS 22.04 LTS 的升级步骤

图形界面升级方法

如果你正在运行的是 Pop OS 21.10 ,你应该看到如下提示是否你的系统需要升级。

Pop OS 22.04 升级提示

或者,你可以打开 “ 设置 Settings ” 然后访问 “ 系统升级和恢复 OS Upgrade and Recovery ” 标签。这里你应该看到有系统更新信息。

Pop OS 22.04 在设置标签的提示

点击 “ Download 下载 ” 开始升级过程。

升级到 Pop OS 22.04 LTS 的终端方法

  • 打开终端运行以下命令:
sudo apt update
sudo apt full-upgrade
  • 这能确保在升级过程开始前系统保持最新。如果你已经在上述升级前步骤中完成了这个步骤,那么你可以忽略它。
  • 使用以下命令更新恢复分区并等待它完成。这只适用于 UEFI 安装模式。
pop-upgrade recovery upgrade from-release
  • 现在使用以下命令开始升级过程:
pop-upgrade release upgrade

开始升级过程

  • 首先,升级过程将会下载软件包。按照我们的测试,需要下载大约 1600 多个软件包。因此,你应该等到它结束。
  • 其次,一旦下载完成,更新管理器将会提示你重启。 准备升级
  • 重启之后,Pop OS 将开始安装最新的软件包到你的系统中。
  • 最后,这个下载过程要花将近一个小时,所以等待它完成。我不建议中途停止更新,这将会导致系统不稳定。 Pop OS 22.04 LTS 桌面
  • 升级完成之后,享受全新的 Pop OS 22.04 LTS 吧。

via: https://www.debugpoint.com/2022/04/upgrade-pop-os-22-04-from-21-10/

作者:Arindam 选题:lujun9972 译者:hwlife 校对:wxy

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