2023年9月

扩展 VxFX 文件系统是 Linux/Unix 管理员的一项日常任务,可以通过以下文章中描述的几个步骤在线完成此任务:

在此,磁盘组没有足够的可用空间,因此我们将在现有磁盘组(DG)中添加新磁盘,然后调整其大小。

相关文章:

步骤 1:识别文件系统

使用 df 命令 检查要增加/扩展的文件系统,并记下以下输出中的磁盘组(DG)和卷名称,稍后在运行 vxdgvxresize 命令时将使用这些名称。

# df -hP /data

Filesystem                  Size  Used Avail Use% Mounted on
/dev/vx/dsk/testdg/testvol  9.0G  8.4G 0.6G  95%  /data

根据上面的输出,VxFS 文件系统大小为 9.0 GB,我们希望额外扩展 5 GB 并发布此活动,VxFS 大小将为 14 GB。

在本例中,DG 名称为 testdg,卷名称为 testvol

步骤 2:获取新磁盘/LUN

新磁盘必须由存储团队映射到主机,这可能需要 CR 批准,因此提出 CR 并向相关团队添加必要的任务,并且还包括此活动的回滚计划。

步骤 3:扫描磁盘/LUN

存储团队将新 LUN 映射到主机后,获取 LUN id 并将其保存。

使用以下命令扫描 LUN 以在操作系统级别发现它们。

for disk_scan in `ls /sys/class/scsi_host`; do 
    echo "Scanning $disk_scan…Completed"
    echo "- - -" > /sys/class/scsi_host/$disk_scan/scan
done
Scanning host0...Completed
Scanning host1...Completed
.
.
Scanning host[N]...Completed

扫描完成后,使用以下命令查看是否在操作系统级别找到给定的 LUN。

lsscsi --scsi | grep -i [Last_Five_Digit_of_LUN]

步骤 4:在 VxVM 中查找磁盘

默认情况下,所有可用磁盘对 Veritas 卷管理器(VxVM)都是可见的,可以使用 vxdisk 命令列出这些磁盘,如下所示。

# vxdisk -e list

DEVICE       TYPE           DISK        GROUP        STATUS               OS_NATIVE_NAME   ATTR
emc_01       auto:cdsdisk   disk1       testdg       online               sdd              -
emc_02       auto:cdsdisk   disk2       testdg       online               sde              -
emc_03       auto:none      -           -            online invalid       sdf              -
sda          auto:LVM       -           -            LVM                  sda              -
sdb          auto:LVM       -           -            LVM                  sdb              -

磁盘 sdf 的状态显示为 Online invalid 表示该磁盘不受 VxVM 控制。但是,请使用 smartctl 命令仔细检查 LUN id,以确保你选择了正确的磁盘。

smartctl -a /dev/sd[x]|grep -i unit

如果磁盘未填充到 VxVM,请执行以下命令扫描操作系统设备树中的磁盘设备。

vxdisk scandisks

步骤 5:在 VxVM 中初始化磁盘

当磁盘在步骤 4 中对 VxVM 可见,那么使用 vxdisksetup 命令初始化磁盘,如下所示:

vxdisksetup -i sdf

上面的命令将磁盘 sdf 带到 Veritas 卷管理器(VxVM),并且磁盘状态现在更改为 online

步骤 6:将磁盘添加到 VxVM 中的磁盘组(DG)

vxdg 命令对磁盘组执行各种管理操作。在此示例中,我们将使用它向现有磁盘组(DG)添加新磁盘。

vxdg -g [DG_Name] adddisk [Any_Name_to_Disk_as_per_Your_Wish=Device_Name]
vxdg -g testdg adddisk disk3=emc_03

运行上述命令后,磁盘名称为 disk3 且磁盘组名称为 testdg 已针对 emc_03 设备进行更新 如下所示:

# vxdisk -e list

DEVICE       TYPE           DISK        GROUP        STATUS               OS_NATIVE_NAME   ATTR
emc_01       auto:cdsdisk   disk1       testdg       online               sdd              -
emc_02       auto:cdsdisk   disk2       testdg       online               sde              -
emc_03       auto:none      disk3       testdg       online               sdf              -
sda          auto:LVM       -           -            LVM                  sda              -
sdb          auto:LVM       -           -            LVM                  sdb              -

步骤 7:检查磁盘组(DG)中的可用空间

要确定连接卷有多少可用空间,请运行:

vxassist -g testdg maxsize

步骤 8:扩展 VxVM 卷和 VxFS 文件系统

我们为此活动添加了 5GB LUN,因此额外扩展了 VxVM 卷和 VxFS 文件系统 5GB,如下所示:

vxresize -b -g [DG_Name] [Volume_Name] +[Size_to_be_Increased]
vxresize -b -g testdg testvol +5g

这里:

  • vxresize:命令
  • -b:在后台执行调整大小操作(可选)。
  • -g:将命令的操作限制为给定磁盘组,由磁盘组 ID 或磁盘组名称指定。
  • testdg:我们的磁盘组(DG)名称
  • testvol`:我们的卷名称
  • +5g:此卷将额外增加 5GB。

步骤 9:检查扩展 VxFS 文件系统

最后,使用 df 命令检查 /data 的扩展 VxFS:

# df -hP /data

Filesystem                  Size  Used Avail Use% Mounted on
/dev/vx/dsk/testdg/testvol  14G   8.4G 5.6G  68%  /data

总结

在本教程中,我们向你展示了如何向现有磁盘组(DG)添加新磁盘,以及如何通过几个简单步骤在 Linux 中扩展 VxVM 卷和 VxFS 文件系统。

如果你有任何问题或反馈,请随时在下面发表评论。

(题图:MJ/3fe4fdb7-99da-4b8f-a818-0ae232e6fbcc)


via: https://www.2daygeek.com/extend-increase-vxvm-volume-vxfs-filesystem-linux/

作者:Jayabal Thiyagarajan 选题:lujun9972 译者:geekpi 校对:wxy

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

大家好!今天我和一个朋友讨论 Git 的工作原理,我们感到奇怪,Git 是如何存储你的文件的?我们知道它存储在 .git 目录中,但具体到 .git 中的哪个位置,各个版本的历史文件又被存储在哪里呢?

以这个博客为例,其文件存储在一个 Git 仓库中,其中有一个文件名为 content/post/2019-06-28-brag-doc.markdown。这个文件在我的 .git 文件夹中具体的位置在哪里?过去的文件版本又被存储在哪里?那么,就让我们通过编写一些简短的 Python 代码来探寻答案吧。

Git 把文件存储在 .git/objects 之中

你的仓库中,每一个文件的历史版本都被储存在 .git/objects 中。比如,对于这个博客,.git/objects 包含了 2700 多个文件。

$ find .git/objects/ -type f | wc -l
2761
注意:.git/objects 包含的信息,不仅仅是 “仓库中每一个文件的所有先前版本”,但我们暂不详细讨论这一内容。

这里是一个简短的 Python 程序(find-git-object.py),它可以帮助我们定位在 .git/objects 中的特定文件的具体位置。

import hashlib
import sys

def object_path(content):
    header = f"blob {len(content)}\0"
    data = header.encode() + content
    sha1 = hashlib.sha1()
    sha1.update(data)
    digest = sha1.hexdigest()
    return f".git/objects/{digest[:2]}/{digest[2:]}"

with open(sys.argv[1], "rb") as f:
    print(object_path(f.read()))

此程序的主要操作如下:

  • 读取文件内容
  • 计算一个头部(blob 16673\0),并将其与文件内容合并
  • 计算出文件的 sha1 校验和(此处为 e33121a9af82dd99d6d706d037204251d41d54
  • 将这个 sha1 校验和转换为路径(如 .git/objects/e3/3121a9af82dd99d6d706d037204251d41d54

运行的方法如下:

$ python3 find-git-object.py content/post/2019-06-28-brag-doc.markdown
.git/objects/8a/e33121a9af82dd99d6d706d037204251d41d54

术语解释:“内容寻址存储”

这种存储策略的术语为“ 内容寻址存储 content addressed storage ”,它指的是对象在数据库中的文件名与文件内容的哈希值相同。

内容寻址存储的有趣之处就是,假设我有两份或许多份内容完全相同的文件,在 Git 的数据库中,并不会因此占用额外空间。如果内容的哈希值是 aabbbbbbbbbbbbbbbbbbbbbbbbb,它们都会被存储在 .git/objects/aa/bbbbbbbbbbbbbbbbbbbbb 中。

这些对象是如何进行编码的?

如果我尝试在 .git/objects 目录下查看这个文件,显示的内容似乎有一些奇怪:

$ cat .git/objects/8a/e33121a9af82dd99d6d706d037204251d41d54
x^A<8D><9B>}s<E3>Ƒ<C6><EF>o|<8A>^Q<9D><EC>ju<92><E8><DD><9C><9C>*<89>j<FD>^...

这是怎么回事呢?让我们来运行 file 命令检查一下:

$ file .git/objects/8a/e33121a9af82dd99d6d706d037204251d41d54
.git/objects/8a/e33121a9af82dd99d6d706d037204251d41d54: zlib compressed data

原来,它是压缩的!我们可以编写一个小巧的 Python 程序—— decompress.py,然后用 zlib 模块去解压这些数据:

import zlib
import sys

with open(sys.argv[1], "rb") as f:
    content = f.read()
    print(zlib.decompress(content).decode())

让我们来解压一下看看结果:

$ python3 decompress.py .git/objects/8a/e33121a9af82dd99d6d706d037204251d41d54
blob 16673---
title: "Get your work recognized: write a brag document"
date: 2019-06-28T18:46:02Z
url: /blog/brag-documents/
categories: []
---
... the entire blog post ...

结果显示,这些数据的编码方式非常简单:首先有 blob 16673\0 标识,其后就是文件的全部内容。

这里并没有差异性数据(diff)

这里有一件我第一次知道时让我感到惊讶的事:这里并没有任何差异性数据!那个文件是该篇博客文章的第 9 个版本,但 Git 在 .git/objects 目录中存储的版本是完整文件内容,而并非与前一版本的差异。

尽管 Git 实际上有时候会以差异性数据存储文件(例如,当你运行 git gc 时,为了提升效率,它可能会将多个不同的文件封装成 “打包文件”),但在我个人经验中,我从未需要关注这个细节,所以我们不在此深入讨论。然而,关于这种格式如何工作,Aditya Mukerjee 有篇优秀的文章 《拆解 Git 的打包文件》。

博客文章的旧版本在哪?

你可能会好奇:如果在我修复了一些错别字之前,这篇博文已经存在了 8 个版本,那它们在 .git/objects 目录中的位置是哪里?我们如何找到它们呢?

首先,我们来使用 git log 命令来查找改动过这个文件的每一个提交:

$ git log --oneline  content/post/2019-06-28-brag-doc.markdown
c6d4db2d
423cd76a
7e91d7d0
f105905a
b6d23643
998a46dd
67a26b04
d9999f17
026c0f52
72442b67

然后,我们选择一个之前的提交,比如 026c0f52。提交也被存储在 .git/objects 中,我们可以尝试在那里找到它。但是失败了!因为 ls .git/objects/02/6c* 没有显示任何内容!如果有人告诉你,“我们知道有时 Git 会打包对象来节省空间,我们并不需过多关心它”,但现在,我们需要去面对这个问题了。

那就让我们去解决它吧。

让我们开始解包一些对象

现在我们需要从打包文件中解包出一些对象。我在 Stack Overflow 上查找了一下,看起来我们可以这样进行操作:

$ mv .git/objects/pack/pack-adeb3c14576443e593a3161e7e1b202faba73f54.pack .
$ git unpack-objects < pack-adeb3c14576443e593a3161e7e1b202faba73f54.pack

这种直接对库进行手术式的做法让人有些紧张,但如果我误操作了,我还可以从 Github 上重新克隆这个库,所以我并不太担心。

解包所有的对象文件后,我们得到了更多的对象:大约有 20000 个,而不是原来的大约 2700 个。看起来很酷。

find .git/objects/ -type f | wc -l
20138

我们回头再看看提交

现在我们可以继续看看我们的提交 026c0f52。我们之前说过 .git/objects 中并不都是文件,其中一部分是提交!为了弄清楚我们的旧文章 content/post/2019-06-28-brag-doc.markdown 是在哪里被保存的,我们需要深入查看这个提交。

首先,我们需要在 .git/objects 中查看这个提交。

查看提交的第一步:找到提交

经过解包后,我们现在可以在 .git/objects/02/6c0f5208c5ea10608afc9252c4a56c1ac1d7e4 中找到提交 026c0f52,我们可以用下面的方法去查看它:

$ python3 decompress.py .git/objects/02/6c0f5208c5ea10608afc9252c4a56c1ac1d7e4
commit 211tree 01832a9109ab738dac78ee4e95024c74b9b71c27
parent 72442b67590ae1fcbfe05883a351d822454e3826
author Julia Evans <[email protected]> 1561998673 -0400
committer Julia Evans <[email protected]> 1561998673 -0400

brag doc

我们也可以用 git cat-file -p 026c0f52 命令来获取相同的信息,这个命令能起到相同的作用,但是它在格式化数据时做得更好一些。(-p 选项意味着它能够以更友好的方式进行格式化)

查看提交的第二步:找到树

这个提交包含一个。树是什么呢?让我们看一下。树的 ID 是 01832a9109ab738dac78ee4e95024c74b9b71c27,我们可以使用先前的 decompress.py 脚本查看这个 Git 对象,尽管我不得不移除 .decode() 才能避免脚本崩溃。

$ python3 decompress.py .git/objects/01/832a9109ab738dac78ee4e95024c74b9b71c27

这个输出的格式有些难以阅读。主要的问题在于,该提交的哈希(\xc3\xf7$8\x9b\x8dO\x19/\x18\xb7}|\xc7\xce\x8e…)是原始字节,而没有进行十六进制的编码,因此我们看到 \xc3\xf7$8\x9b\x8d 而非 c3f76024389b8d。我打算切换至 git cat-file -p 命令,它能以更友好的方式显示数据,我不想自己编写一个解析器。

$ git cat-file -p 01832a9109ab738dac78ee4e95024c74b9b71c27
100644 blob c3f76024389b8d4f192f18b77d7cc7ce8e3a68ad    .gitignore
100644 blob 7ebaecb311a05e1ca9a43f1eb90f1c6647960bc1    README.md
100644 blob 0f21dc9bf1a73afc89634bac586271384e24b2c9    Rakefile
100644 blob 00b9d54abd71119737d33ee5d29d81ebdcea5a37    config.yaml
040000 tree 61ad34108a327a163cdd66fa1a86342dcef4518e    content <-- 这是我们接下来的目标
040000 tree 6d8543e9eeba67748ded7b5f88b781016200db6f    layouts
100644 blob 22a321a88157293c81e4ddcfef4844c6c698c26f    mystery.rb
040000 tree 8157dc84a37fca4cb13e1257f37a7dd35cfe391e    scripts
040000 tree 84fe9c4cb9cef83e78e90a7fbf33a9a799d7be60    static
040000 tree 34fd3aa2625ba784bced4a95db6154806ae1d9ee    themes

这是我在这次提交时库的根目录中所有的文件。看起来我曾经不小心提交了一个名为 mystery.rb 的文件,后来我删除了它。

我们的文件在 content 目录中,接下来让我们看看那个树:61ad34108a327a163cdd66fa1a86342dcef4518e

查看提交的第三步:又一棵树

$ git cat-file -p 61ad34108a327a163cdd66fa1a86342dcef4518e
040000 tree 1168078878f9d500ea4e7462a9cd29cbdf4f9a56    about
100644 blob e06d03f28d58982a5b8282a61c4d3cd5ca793005    newsletter.markdown
040000 tree 1f94b8103ca9b6714614614ed79254feb1d9676c    post <-- 我们接下来的目标!
100644 blob 2d7d22581e64ef9077455d834d18c209a8f05302    profiler-project.markdown
040000 tree 06bd3cee1ed46cf403d9d5a201232af5697527bb    projects
040000 tree 65e9357973f0cc60bedaa511489a9c2eeab73c29    talks
040000 tree 8a9d561d536b955209def58f5255fc7fe9523efd    zines

还未结束……

查看提交的第四步:更多的树……

我们要寻找的文件位于 post/ 目录,因此我们需要进一步探索:

$ git cat-file -p 1f94b8103ca9b6714614614ed79254feb1d9676c
.... 省略了大量行 ...
100644 blob 170da7b0e607c4fd6fb4e921d76307397ab89c1e    2019-02-17-organizing-this-blog-into-categories.markdown
100644 blob 7d4f27e9804e3dc80ab3a3912b4f1c890c4d2432    2019-03-15-new-zine--bite-size-networking-.markdown
100644 blob 0d1b9fbc7896e47da6166e9386347f9ff58856aa    2019-03-26-what-are-monoidal-categories.markdown
100644 blob d6949755c3dadbc6fcbdd20cc0d919809d754e56    2019-06-23-a-few-debugging-resources.markdown
100644 blob 3105bdd067f7db16436d2ea85463755c8a772046    2019-06-28-brag-doc.markdown <-- 我们找到了!!!

在此,2019-06-28-brag-doc.markdown 之所以位于列表最后,是因为在发布时它是最新的博文。

查看提交的第五步:我们终于找到它!

经过努力,我们找到了博文历史版本所在的对象文件!太棒了!它的哈希值是 3105bdd067f7db16436d2ea85463755c8a772046,因此它位于 git/objects/31/05bdd067f7db16436d2ea85463755c8a772046

我们可以使用 decompress.py 来查看它:

$ python3 decompress.py .git/objects/31/05bdd067f7db16436d2ea85463755c8a772046 | head
blob 15924---
title: "Get your work recognized: write a brag document"
date: 2019-06-28T18:46:02Z
url: /blog/brag-documents/
categories: []
---
... 文件的剩余部分在此 ...

这就是博文的旧版本!如果我执行命令 git checkout 026c0f52 content/post/2019-06-28-brag-doc.markdown 或者 git restore --source 026c0f52 content/post/2019-06-28-brag-doc.markdown,我就会获取到这个版本。

这样遍历树就是 git log 的运行机制

我们刚刚经历的整个过程(找到提交、逐层遍历目录树、搜索所需文件名)看似繁琐,但实际上当我们执行 git log content/post/2019-06-28-brag-doc.markdown 时,背后就是这样在运行。它需要逐个检查你历史记录中的每一个提交,在每个提交中核查 content/post/2019-06-28-brag-doc.markdown 的版本(例如在这个案例中为 3105bdd067f7db16436d2ea85463755c8a772046),并查看它是否自上一提交以来有所改变。

这就是为什么有时 git log FILENAME 会执行的有些缓慢 —— 我的这个仓库中有 3000 个提交,它需要对每个提交做大量的工作,来判断该文件是否在该提交中发生过变化。

我有多少个历史版本的文件?

目前,我在我的博客仓库中跟踪了 1530 个文件:

$ git ls-files | wc -l
1530

但历史文件有多少呢?我们可以列出 .git/objects 中所有的内容,看看有多少对象文件:

$ find .git/objects/ -type f | grep -v pack | awk -F/ '{print $3 $4}' | wc -l
20135

但并不是所有这些都代表过去版本的文件 —— 正如我们之前所见,许多都是提交和目录树。不过,我们可以编写一个小小的 Python 脚本 find-blobs.py,遍历所有对象并检查是否以 blob 开头:

import zlib
import sys

for line in sys.stdin:
    line = line.strip()
    filename = f".git/objects/{line[0:2]}/{line[2:]}"
    with open(filename, "rb") as f:
        contents = zlib.decompress(f.read())
        if contents.startswith(b"blob"):
            print(line)
$ find .git/objects/ -type f | grep -v pack | awk -F/ '{print $3 $4}' | python3 find-blobs.py | wc -l
6713

于是,看起来在我的 Git 仓库中存放的旧文件版本有 6713 - 1530 = 5183 个,Git 会为我保存这些文件,以备我想着要恢复它们时使用。太好了!

就这些啦!

这个 gist 中附上了全部的此篇文章所用代码,其实没多少。

我以为我已经对 Git 的工作方式了如指掌,但我以前从未真正涉及过打包文件,所以这次探索很有趣。我也很少思考当我让 git log 跟踪一个文件的历史时,它实际上有多大的工作量,因此也很开心能深入研究这个。

作为一个有趣的后续:我提交这篇博文后,Git 就警告我仓库中的对象太多(我猜 20,000 太多了!),并运行 git gc 将它们全部压缩成打包文件。所以现在我的 .git/objects 目录已经被压缩得十分小了:

$ find .git/objects/ -type f | wc -l
14

(题图:MJ/319a396c-6f3f-4891-b051-261312c8ea9a)


via: https://jvns.ca/blog/2023/09/14/in-a-git-repository--where-do-your-files-live-/

作者:Julia Evans 选题:lujun9972 译者:ChatGPT 校对:wxy

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

GCC 准备引入一“键”安全加固选项

已有各种加固选项来提高生成的二进制文件的安全性,但可能并非所有项目都在使用这些选项,原因可能是不了解它们,也可能是软件没有得到积极的维护。经过讨论,GNU 编译器集合(GCC)正准备添加一个 -fhardened 编译器选项,该选项将启用各种加固功能,以提高生成的二进制文件的安全性/稳健性。该加固选项认为合理的选项不能影响应用程序二进制接口(ABI),不能导致 “严重” 的性能问题,也不能导致新的构建错误。如果不出意外,这个选项补丁将很快被合并到明年初发布的 GCC 14.1 稳定版中。

消息来源:Phoronix
老王点评:这样的一键选项很有必要,甚至我认为将来可能会成为默认值。

红帽正在研究延迟模块签名验证以加快 Linux 启动时间

红帽工程师提交了一组补丁,在启用模块签名检查功能时,可以延迟对这些签名的检查,内核会等待用户空间的通信,然后再开始检查。因此,可以在不影响系统安全的情况下显著提高启动速度。该功能引入了一个新的启动时内核参数,允许用户请求这种延迟。在某些情况下,启动速度变得至关重要。而有时候安全检查是多余的,因为在此过程中已经对内核和 initrd 镜像执行了加密检查,可以合理地认为其内容也是安全的。

消息来源:Phoronix
老王点评:这是安全和效率的合理折中。

Meta 的 VR 世界虚拟化身终于有腿了

此前,Meta 公司的《地平线世界》的虚拟化身因为只有上半身而受到广泛嘲笑。不过现在它终于有了虚拟腿。如果你启动《地平线世界》并在菜单空间中照镜子,你就会看到自己化身的全身,而且当你进入一个世界时,其他人也会看到。但是你自己低头时还是看不到你的腿。不过,目前还没有一款 VR 系统内置腿部追踪功能,因此虚拟腿部与真实腿部的实际动作并不一致。

消息来源:Upload VR
老王点评:我觉得目前的 VR 还处于比较可笑、原始的阶段,需要等待基础设施的进一步发展才会真正形成。

提升 DevOps 文档成熟度的过程与达到 DevOps 或 DevSecOps 成熟化的历程是类似的。

为了能在软件迭代交付周期内按时交付优质的文档,DevOps 和 DevSecOps 的文档实践也需要是敏捷的。这与实现 DevOps 类似,只是更偏向自动化和敏捷的内容处理方法。如果文档现在才进入你的机构的 DevOps 讨论,那么是时候让文档实践追上 DevOps 的步伐了。

下面是 DevOps 文档成熟度的四个层次:

第一层:临时且孤立

在最低一级成熟度(最不成熟),文档编制工作没有和 DevOps 开发对齐。开发团队和文档团队按照各自的路线开展工作,常常导致文档落后于开发。在竞争激烈的“云”世界里,因为文档问题而推迟产品发布是不可接受的。

人员

这个阶段的文档编制人员还没有摆脱传统的工作方式。 技术写作 technical writer 人员隶属于一个中心化的单独团队,与开发团队是脱节的。技术写作组和开发团队之间的鸿可能是由多方面原因造成的:

  • 造成团队分裂和孤立的公司政治
  • 团队只是将技术文档视为项目验收清单上的检查项,而不是推动项目成功的资产
  • 事后才雇佣技术写作人员
  • 技术写作的优先级与开发团队的实际情况不匹配

这个阶段,另一个在人员配置上的挑战是如何“界定工作完成”。刚接触敏捷实践的技术写作可能难以适应 CI/CD 工具链和流程。

文档工具和流程

这个阶段的技术写作仍习惯于使用传统的办公工具,比如办公套件和布局程序。这些工具不够敏捷,没有版本控制和内容管理的要求。它们无法与 DevOps 工具链高效集成,不能支撑快速开发。在这个成熟度,技术写作仍然参照遗留的模板和流程。

成果

这个级别交付的文档可能是过时的,甚至缺乏技术准确性的。如果开发团队以 DevOps 的速度推进工作,而技术文档编制却遵循传统的非敏捷流程(使用专有的工具和交付格式),这就很难让文档迭代速度并跟上应用程序的变化。

第二层:实验和试点

DevOps 文档成熟度的第二层是实验/试验阶段。这个阶段是 DevOps 团队主管和技术写作采取行动打造更敏捷的文档实践和工具的第一步。

理想的情况下,这些实验是 相关方 stakeholder 支持的试点项目的一部分。他们能够从文档交付流程的改善以及其与 DevOps 实践的集成中获益。

人员

本阶段的人员可能来自以下三种形式:

  1. 有远见的技术写作为了更好地完成工作,用自己的时间来实验更敏捷的工具。并且向领导层提出更敏捷的文档编制过程的想法。
  2. DevOps 负责人或工程师试用 Hugo 和 Jekyll 等工具,并将这些工具集成到 CI/CD 流水线中。然后 DevOps 小组教授技术写作如何使用它们。
  3. 团队引入了第三方承包商或顾问,他们在 DevOps 文档工具方面具有专业知识,并且了解文档工具适合嵌入到 CI/CD 工具链和 DevOps 生命周期的位置。

文档工具和实践

HugoJekyll 是本阶段开始出现的工具。在这个阶段也出现新的内容策略和技术写作方法。

成果

实验试点阶段理想的成果应该能够“ 落地并推广 land and expand ”。也就是说其它项目组也可以将其付诸实践。

这个阶段的实验也包括内容策略和发布流程上的根本性变化。其它非试点项目组的技术写作可以学习和使用它们。

试点带来的另一个可能的产出是 技术写作招聘流程 的变化。你需要针对 DevOps 和你新引入的文档工具对内部编写人员进行培训。

新的文档工具和流程是此阶段的关键成果,你需要通过演示、状态报告和内部案例研究等方式,将这一成果推给领导层、相关方和其它团队。

第三层:部分自动化和扩展

DevOps 文档成熟度的第三层(部分自动化和扩展)就是“落地并推广”的进一步行动。在这个阶段,其它 DevOps 团队借用试点项目中产生的 DevOps 文档工具和流程,吸取其中的经验教训。

人员

在这个成熟度,技术写作和 DevOps 团队开始更紧密的协作。招聘新的技术写作主要关注具有 DevOps 环境经验的人选。

工具和文档实践

技术写作开始从抛弃传统的工具和流程,转到更敏捷的文档工具上,比如:

在这个成熟度,技术写作也负责调整遗留的文档实践。

成果

DevOps 文档工具和实践超越试点项目,成为标准实践。在这个成熟度,随着新团队使用新的文档工具和流程,持续学习是必不可少的。

第四层:完全采用

在最高一级的 DevOps 文档成熟度(完全采用且自动化)所有工具、实践和流程已经到位,以支持将文档为项目中的高优先级事项。要达到这一成熟度,需要不断实验、迭代和团队协作。

人员

完全自动化使 DevOps 团队与技术写作之间的协作更紧密。这一阶段的标志是,技术写作牢牢地融入到项目团队的工作流程中。文档工具的维护工作由一些大型企业负责,它们拥有专职维护 DevOps 工具链的工程师。

文档工具和实践

在这个成熟度,技术写作统一采用 Markdown 语言和自动化工具。

成果

本阶段的成果是一套完整的工具和实践,它们支持自动化在线文档发布。技术写作者可以按需发布和重新发布文档,以支持迭代开发流程。

持续学习是这个阶段的另一项成果。技术写作和工具链维护者寻找改进自动化和流程的方法,以帮助文档实践。

总结

提升 DevOps 文档成熟度的过程跟达到 DevOps 或 DevSecOps 成熟化的历程是类似的。我希望行业能够将更灵活的文档实践和工具作为公司推进 DevOps 进程中的一个部分。提高 DevOps 文档成熟度应该作整体 DevOps 成熟化甚至 DevOps 到 DevSecOps 转型的一部分。

(题图:MJ/154429b7-bdfc-4b34-9a81-55d9fe33ab07)


via: https://opensource.com/article/22/2/devops-documentation-maturity

作者:Will Kelly 选题:lujun9972 译者:toknow-gh 校对:wxy

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

openSUSE Leap 将被新产品取代。怎么回事?

openSUSE 项目的长期贡献者 Richard Brown 分享了最近贡献者调查的一些结果。

这是关于用新的社区构建的产品取代 openSUSE Leap 的兴趣和可行性。哦?一个 openSUSE Leap 的替代品?

有趣的消息,对吧? ?

这并不令人震惊。随着 适应性 Linux 平台 Adaptable Linux Platform (ALP) 的推出,openSUSE 团队曾 暗示 Leap 将于 2022 停止运营。所以,这是预料之中的。

但是,有哪些选择可以替代 openSUSE Leap?

Tumbleweed 衍生版可能取代 Leap

根据这份更换提案,我们有两种选择:

  • Linarite:一个普通的老式桌面发行版,软件包的选择范围可能比我们习惯的 Leap 更小,除非我们找到更多的贡献者来支持所有的软件包。
  • Slowroll :是 Tumbleweed 的衍生版本,尽可能地自动构建,使用自动化和度量标准仅在特定条件(最大周期、X 周无变化等)后才从 Tumbleweed 复制软件包。基本上,它试图提供比全速运行的 Tumbleweed 不那么风险的东西。
作为这件事的后继,openSUSE 现在为 Slowroll 做了一个 页面 供你测试。

然而,调查结果显示意见不一。

大多数用户选择 “Slowroll” 作为未来可行的替代方案,他们愿意为此做出贡献。

相比之下,贡献者们则投票不取代 openSUSE Leap 或使用 Tumbleweed 替代它。

但是,在选择一个选项时,贡献者选择了 “Linarite”。

因此,用户和现有贡献者有不同的选择。

openSUSE 决定按照用户的喜好使用滚动发行版 Slowroll。它需要比调查中表示感兴趣的更多的贡献者。

Richard 还透露,两个替代方案中的任何一个都需要比 Leap 付出更多的努力,而且截至目前,对这两个选项感兴趣的 贡献者数量比 Leap 少。

即使有 61 个人直接为代码库和 backports/PackageHub 做出贡献,Leap 仍然举步维艰。这时我们就可以借用 SLE 代码库,这大大减少了所需的工作。

Slowroll 或 Linarite 都比 Leap 需要更多的打包和维护工作。

他还强调,任何 Leap 替代品都应该专注于桌面场景,而不是试图同时兼顾服务器和桌面的需求。

换还是不换?

调查结果公告 要求社区回答 openSUSE 是否应该继续替换 Leap。

而且,如果他们继续这样做,社区可以帮助他们支持吗?

? 你认为 openSUSE 的最终决定应该是什么? 请在下面的评论部分告诉我你的想法。

(题图:MJ/f0fcd9d7-dcae-493f-83db-4a0338eece3b)


via: https://news.itsfoss.com/opensuse-leap-replacement/

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

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

GitHub 调整主页信息流惹怒开发人员

一周前,GitHub 将用户主页中的“关注”信息流和算法推荐的“为你”信息合并,就像在浏览 Twitter 一样,信息流中不按时间顺序排列,也可能混入你没有关注的内容。这让不少用户感到非常生气。有用户说,“不是所有东西都要变得像 Twitter、Facebook 或 Instagram 一样。我们是来完成工作的,而不是来参与你的算法认为我们喜欢的任何事情。”GitHub 回应了这些反馈,称部分受质疑的行为实际上是由于漏洞造成的,现已得到修复,同时加倍坚持其新的信息流的决定。GitHub 称出于性能考虑“删除了‘为用户订阅的资源库推送事件’的功能。我们不会轻易做出这些改变,……我们必须优先考虑可用性、用户体验和性能”。

消息来源:The Register
老王点评:明明是生产力平台,非要变成大家说的“同性交友平台”。

黑客声称只打了 10 分钟电话就关闭了米高梅酒店

一个勒索软件组织声称对周二发生的米高梅酒店网络中断事件负责。该组织声称使用了常见的社会工程学策略,“入侵所做的一切就是在 LinkedIn 找到一名员工,然后致电服务台”,获取员工信任以获得内部信息。据该组织称,授予初始访问权限的对话仅用了 10 分钟。另据报道,他们试图从美高梅骗取赎金,但该公司拒绝支付。受此影响,米高梅的股价已下跌超过 6%。

消息来源:Engadget
老王点评:古老的社工手段真是一直有效。

JetBrains 放弃开源插件,宣布全新 Rust IDE

JetBrains 宣布了 RustRover 的早期访问预览版,这是一个全新的 Rust 集成开发环境。但同时,JetBrains 将不再开发现有的支持 Rust 的开源插件,不会再对其修复漏洞或添加新功能。该插件可与 JetBrains IDE 免费的社区版一起使用。而新发布的 RustRover 也将不会推出社区版,但正式版的发布日期还没有确定,至少在 2024 年 9 月前都只会发布公开测试版本。

消息来源:Dev Class
老王点评:看来,这个开源插件很快就会有复刻版了。

回音

  • “免费下载管理器(FDM)” 承认 其被利用传播 恶意木马,并估计只有 0.1% 的用户受影响。