分类 技术 下的文章

想在 Arch Linux 上试试 Unity 吗?现在可以了!

Unity Desktop 是由 Canonical 构建的经典桌面环境,它从 2010 年到 2017 年是 Ubuntu 的一部分,但为了支持 GNOME 而放弃。

我们认为它永远被杀死了。但它卷土重来。

今年早些时候,自 2016 年 5 月上次更新以来,经过长达 6 年的时间,Unity 的改进版本发布了。

开发由一位年轻的开发人员 Rudra Saraswat 带头,他也是 Ubuntu Unity 的创建者,它现在是 Ubuntu 的官方版本。

Unity 7.6 的发布标志着大量改进的到来。

而且,更进一步,Unity 7.6 已可用于 Arch Linux。开发者提到:

此移植基于 chenxiaolong (于 2011-2016 年维护)的早期成果 Unity-for-Arch。

在 Arch Linux 上试用 Unity 7.6

unity on arch linux

首先,你必须确保你已经安装了 Arch Linux。

然后你可以按照以下步骤在 Arch Linux 上运行 Unity 7.6:

安装 Paru,它是一个 AUR 助手。

使用 paru -S unity-installer-arch 安装名为 unity-installer-arch 的脚本。

在 TTY/终端窗口中运行 unity-installer-arch

选择 “ 安装 Unity 桌面 Install Unity desktop ”。

将默认显示管理器更改为 lightdm

使用 unity-greeter 作为默认登录界面。

我的同事 Sreenath 尝试了一下,在安装过程中,由于多重依赖冲突,他不得不从全新的 Arch 开始。

对你来说可能有所不同,但请记住这一点。如果你不想花时间在这上面,你可能想试试 Ubuntu Unity

总结

对于 Unity 桌面爱好者来说,这是一件好事。更多发行版可能会考虑使用带有 Unity 桌面的变体。

你想让那发生吗?

? 你是 Unity 桌面的用户吗?想试试看么?在评论区分享你的观点。


via: https://news.itsfoss.com/unity-arch-linux/

作者:Sourav Rudra 选题:lkxed 译者:geekpi 校对:wxy

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

PowerShell(也可写作 pwsh)是一个功能强大的开源命令行工具,它是面向对象的,由微软开发和维护。它的语法特征冗长,但对用户来说比较直观。本文介绍如何在主机上和在 Podman 或其他容器内安装 PowerShell。

为何使用 PowerShell

PowerShell,正如它的名字那样,是一个强大的工具。它的句法冗长,但语义清晰。对那些不愿意写长命令的开发者来说,PowerShell 的大多数命令都有别名。可以使用 Get-Alias 或点击 此处 查询别名的使用方法。

PowerShell 和传统的 Shell 最大的区别在于它的输出管道。普通的 Shell 输出的是字符串或字符流,PowerShell 输出的是对象。这对命令管道的工作方式具有深远的影响,而且它具有很多的优点。

演示例子

下面的例子体现的是冗长而清晰的特点。以 # 号开头的行是注释行。以 PS > 开头的行是命令行,PS > 是提示符:

# Return all files greater than 50MB in the current directory.
## Longest form
PS > Get-Childitem | Where-Object Length -gt 50MB
## Shortest form (with use of aliases)
PS > gci | ? Length -gt 40MB
## Output looks like this
    Directory: /home/Ozymandias42/Downloads
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-----          20/08/2020    13:55     2000683008 40MB-file.img


# In order: get VMs, get snapshots, only select the last 3 and remove selected list:
PS > Get-VM VM-1 | Get-Snapshot | Select-Object -Last 3 | Remove-Snapshot

上述例子说明了:Bash 脚本经常需要用 cutsedawk 等工具对输入/输出进行格式化,而使用 PowerShell 时通常就没有这个必要了。这是因为 PowerShell 的工作机制跟传统的 POSIX shell(例如 Bash、Zsh、Fish等)有本质的不同。传统的 Shell 的命令输出形式是字符串,而在 PowerShell 中,命令输出形式为对象。

Bash 与 PowerShell 的比较

下面的例子说明了与 Bash 中的字符串输出模式相比,PowerShell 的对象输出模式的优点。假设你需要写一段脚本,该脚本的作用显示所有进程,这些进程一共占用了 200MB 内存空间。如果使用 Bash,大致如下:

$ ps -eO rss | awk -F' ' \
    '{ if($2 >= (1024*200)) { \
        printf("%s\t%s\t%s\n",$1,$2,$6);} \
     }'

PID    RSS     COMMAND
A      B       C
[...]

第一个显而易见的差别就是可读性,或更确切地说是语义清晰度。 psawk 都不是自描述的。ps 命令的功能是显示进程状态;awk 是一种文本处理工具和语言,这个词汇每个字母都是前期开发人员的名字(Aho, Weinberger, Kernighan(详见 维基百科)的首字母。然而,在把它与 PowerShell 作比较前,先看看这个脚本:

  • ps -e 输出所有运行中的进程;
  • -O rss 输出 ps 的默认输出内容,再加上 RSS 字段 —— 每个进程使用的千字节数(以 KB 为单位);输出结果类似于:
PID  RSS   S TTY TIME     COMMAND  
1    13776 S ?   00:00:01 /usr/lib/systemd/systemd
  • | 管道操作符使用左边命令的输出作为右边命令的输入。
  • awk -F' ' 定义“空格”,作为输入字段分隔符。以上面的例子来说,PID 是第一个字段,RSS 是第二个字段,依此类推。
  • '{ if($2 >= (1024*200)) { 是实际的 AWK 代码起始处。它的作用是检查第二个字段(RSS)是否包含一个大于或等于 1024*200 的数字;
  • printf(“%s\t%s\t%s\n”,$1,$2,$6);} 脚本继续。如果前面的条件成立,则输出第一、第二和第六个字段(分别是 PIDRSSCOMMAND 字段)。

考虑到这一点,退一步说,编写这段脚本需要什么才能令它工作:

  • 输入命令 ps 的输出中必须包含我们想要过滤的字段。这在默认情况下是没有的,需要我们使用 -O 标志和 rss 字段作为参数。
  • 我们需要将 ps 的输出当作一组输入字段,所以我们还应当知道它们的顺序和结构。换句话说,我们至少需要确定 RSS 是第二个字段。这也意味着我们需要提前知道 ps 的输出信息的大致情况。
  • 然后我们需要知道过滤的数据是什么单位,以及相关工具的单位是什么。也就是我们需要知道 RSSawk 字段使用 kb。不然我们就不能写出 ($2 >= 1024*200) 这样的表达式。

现在,我们把前面的命令跟 PoserShell 中等价的命令比较:

# Longest form
PS > Get-Process | Where-Object WorkingSet -ge 200MB
# Shortest form (with use of aliases)
PS > gps | ? ws -ge 200MB

NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
------    -----      -----     ------      --  -- -----------
     A        B          C          D       E   F           G
[...]

首先应该注意到,语义非常清晰。这些命令都是自描述的,能清晰描述它们做什么。

此外,不需要对输入-输出重新格式化,也不需要关心输入命令使用的单位。这是因为 PowerShell 输出的是对象,而非字符串。

考虑下述情况,就可以理解这些内容。在 Bash 中,命令的输出信息就是终端显示的信息。在 PowerShell 中,终端显示的信息并不等于实际可用的信息。这是由于 PowerShell 中的输出-打印系统使用的也是对象。因此 PowerShell 中每一条命令都对输出的对象的一些属性作了可打印的标记,也对一些属性作了不可打印的标记。然而,它总是包括所有的属性,而 Bash 只包括它实际打印的内容。我们可以把它想象成 JSON 对象。Bash 中的输出位置被分为一些“字段”,以空格或制表符为标志,在 PowerShell 中它是一个容易寻址的对象属性,只需要知道它的名称即可使用。就像上述例子中的 WorkingSet 那样。

为了看到一条命令的输出对象的所有属性和它们的类型,可以进行以下操作:

PS > Get-Process | Get-Member

安装 PowerShell

PowerShell 安装包的形式有若干种,包括 Fedora Linux 中使用的 RPM 安装包。本文介绍在 Fedora Linux 中如何使用多种方法安装 PowerShell。

我推荐使用原生的方法安装。但我也会介绍如何在容器中安装。我将展示使用官方微软 PowerShell 容器和 Fedora Linux 30 的 Toolbox 容器。使用容器的优点在于,所有的依赖捆绑在其中,并且与主机隔离,所以它一定是有效的。无论如何,虽然官方文档只是明确指出支持 Fedora Linux 发行版的 28-30 版本,我还是建议使用原生的方法安装。

注意: 官方支持意味着一定有效。但其他的版本也不是一定不兼容。也就是说,高于 30 的发行版也应该有效。经过测试,的确如此。

在容器中设置并运行 PowerShell 比直接在主机上运行它难度更大,安装需要花费更多时间,而且你还不能直接运行主机的命令。

在主机上使用包管理器安装 PowerShell

方法一:使用微软仓库

安装过程很直接,而且跟通过第三方仓库安装其他软件没什么区别。

通俗地说,安装过程可以分为四步:

  1. 添加新仓库的 GPG 密码
  2. 在 DNF 仓库列表中新增相应的仓库
  3. 刷新 DNF 缓存,将新仓库中的有关包包含进来
  4. 安装新包

然后使用命令 pwsh 启动 PowerShell。

$ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
$ curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
$ sudo dnf makecache
$ sudo dnf install powershell
$ pwsh

欲删除仓库和包,运行以下命令:

$ sudo rm /etc/yum.repos.d/microsoft.repo
$ sudo dnf remove powershell
方法 2:使用 PRM 文件

这种方法与第一种方法没有明显的差别。实际上,在安装 RPM 文件时,隐式添加了 GPG 密码和仓库。这是由于 RPM 文件包含它们两者的关联关系,保存在它的元数据中。

首先,从 PowerShell GitHub 仓库 获取相应版本的 .rpm 文件。然后查看 readme.md 文件中的 “获取 PowerShell” 部分的内容。

第二步,输入以下命令:

$ sudo dnf install powershell-<version>.rhel.7.<architecture>.rpm

<version><architecture> 节点中填写各自的内容,例如 powershell-7.1.3-1.rhel.7.x86\_64.rpm

你也可以使用链接运行它,不指定版本和架构,先把它下载到本地。

$ sudo dnf install https://github.com/PowerShell/PowerShell/releases/download/v<version>/powershell-<version>.rhel.7.<architecture>.rpm

欲删除 PowerShell,运行以下命令:

$ sudo dnf remove powershell

通过容器安装

方法一:使用 Podman 容器

Podman 是一个兼容 开放容器倡议(OCI)的、嵌入式的容器引擎,它可以代替 Docker。

微软提供了 PowerShell Docker 容器集成工具。下面的例子将在 Podman 中使用容器。

欲了解更多关于 Podman 的信息,可以访问 Podman.io。Fedora 杂志还有一个专为 Podman 设计的 标签

欲在 Podman 中使用 PowerShell,运行以下脚本:

$ podman run \
  -it \
  --privileged \
  --rm \
  --name powershell \
  --env-host \
  --net=host --pid=host --ipc=host \
  --volume $HOME:$HOME \
  --volume /:/var/host \
  mcr.microsoft.com/powershell \
  /usr/bin/pwsh \
  -WorkingDirectory $(pwd)

这段脚本为使用 PowerShell 创建了一个 Podman 容器,并立即接入其中。它还将 /home 和主机的根目录挂载到容器中,确保它们在容器中是可用的。无论如何,在 /var/host 目录下,主机的根目录是可访问的。

但是,在容器内部,你只能间接运行主机命令。有一种变通办法,就是先运行 chroot /var/host 改变根目录,然后运行主机命令。

为了把命令拆分开来讲解,除非特别指定,以下所有内容都是强制性的:

  • -it 创建一个持久环境,当你进入该环境后,不会轻易退出;
  • --privileged 给予容器扩展的权限(可选);
  • --rm 当你退出时移除容器;
  • --name 设置容器名称;
  • --env-host 将所有主机的环境变量设置为容器的变量(可选);
  • --net=host --pid=host --ipc=host 在主机的命名空间中运行进程(而非一组单独的名称空间);
  • --volume $HOME:$HOME 挂载用户目录;
  • --volume /:/var/host 将主机根目录挂载到 /var/host(可选);
  • mcr.microsoft.com/powershell 进入容器;
  • /usr/bin/pwsh 可选但很方便的参数:用别名 pwsh,脚本中有了它,可以输入 pwsh 轻松访问 Podman 容器;
  • -WorkingDirectory $(pwd) 在当前目录下进入容器(可选)。

欲移除 PowerShell 镜像,运行以下命令:

$ podman rmi mcr.microsoft.com/powershell
方法二:Fedora 系统的 Toolbox 容器

在不影响主机系统的情况下安装持久化环境,使用 Toolbox 容器是一种巧妙的解决方案。它充当了 Podman 的封装器,负责提供大量的标志,就像方法一中提到的那样。因此,Toolbox 比 Podman 容易使用。它可以用来开发和调试。有了 Toolbox,你可以运行任何命令,跟你直接在 Fedora 工作站主机上运行是一样的。

安装步骤跟在主机上安装一样,唯一的区别就是在容器内部进行。你需要确保已经安装了 toolbox 包。

使用 Fedora 34 Toolbox 容器需要两个步骤:

  1. 创建 Fedora 34 Toolbox 容器
  2. 运行 Fedora 34 Toolbox 容器
$ toolbox create --image registry.fedoraproject.org/f34/fedora-toolbox
$ toolbox enter --container fedora-toolbox

接着,按照 方法一:使用微软仓库 中的相关内容操作。

可选但非常方便的做法:使用别名 pwsh,可以轻松地访问 Toolbox 容器:

toolbox run –container fedora-toolbox pwsh

欲移除 Toolbox 容器,需要确保你已经使用 exit 关闭了 Toolbox 会话,然后运行以下命令:

$ podman kill fedora-toolbox
$ toolbox rm fedora-toolbox

via: https://fedoramagazine.org/install-powershell-on-fedora-linux/

作者:TheEvilSkeleton, Ozymandias42 选题:lujun9972 译者:cool-summer-021 校对:wxy

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

Git 的 bisect 工具通过快速识别坏的提交,节省了时间和精力。

你是不是有过这样的经历:发现代码中有 错误 bug ,但不知道这个错误是什么时候引入的。这有可能是因为,某个人提交了一份有错误的代码,但没有在他的 Git 提交 commit 消息中声明它。这个错误可能已经存在了几周、几个月甚至几年,这意味着你需要搜索数百或数千个提交,才能找到问题何时出现的。而 git bisect 命令能够完美地解决这个问题!

git bisect 命令是一个强大的工具。你可以给 git bisect 命令一个范围,一端是一个已知的好状态,另一端是一个已知的坏状态。它会自动地确认当前范围的中点,在这个中点上进行测试,然后要求你确定那次提交是一个 好提交 good commit 还是一个 坏提交 bad commit ,然后它会重复这一“二分查找”的过程,直到你找到首次引入错误的那一次提交。

Image of Zeno's paradox of Achilles.

这个“数学”工具是利用“二分查找”来找到错误之处的。git bisect 命令通过查看中点,然后由你来决定它是提交列表的新起点(即 “坏提交” )还是新终点(即 “好提交”),进而来缩小查找范围,如此在几次查找中你可以就能定位到有错误的提交。即使你有 10,000 个提交要检查,最多只需要 13 次查找,就能很快地定位到首次引入错误的提交。

  1. 提交 1 坏 <> 提交 10,000 好 => 提交 5,000 是坏的
  2. 提交 5,000 坏 <> 提交 10,000 好 => 提交 7,500 是好的
  3. 提交 5,000 坏 <> 提交 7,500 好 => 提交 6,250 是好的
  4. 提交 5,000 坏 <> 提交 6,250 好 => 提交 5,625 是坏的
  5. 提交 5,625 坏 <> 提交 6,250 好 => 提交 5,938 是坏的
  6. 提交 5,938 坏 <> 提交 6,250 好 => 提交 6,094 是好的
  7. 提交 5,938 坏 <> 提交 6,094 好 => 提交 6,016 是坏的
  8. 提交 6,016 坏 <> 提交 6,094 好 => 提交 6,055 是好的
  9. 提交 6,016 坏 <> 提交 6,055 好 => 提交 6,036 是坏的
  10. 提交 6,036 坏 <> 提交 6,055 好 => 提交 6,046 是坏的
  11. 提交 6,046 坏 <> 提交 6,055 好 => 提交 6,050 是坏的
  12. 提交 6,050 坏 <> 提交 6,055 好 => 提交 6,053 是好的
  13. 提交 6,053 坏 <> 提交 6,055 好 => 提交 6,054 是好的

对于上面这个例子,我们能知道 10,000 个提交中的第一个错误提交是第 6053 次提交。对于 git bisect 命令,最多需要几分钟就能完成检索。但是如果要一个一个查找每个提交是否错误,我甚至无法想象需要多长时间。

使用 Git bisect 命令

git bisect 命令使用起来非常简单:

(LCTT 译注:使用 git bisect start 命令来进入 bisect 模式,并且该命令指定了一个检查范围。它会告诉我们一共有多少次提交,大概需要几步就可以定位到具体的提交。)

$ git bisect start
$ git bisect bad        # Git assumes you mean HEAD by default
$ git bisect good <ref> # specify a tag or commit ID for <ref>

Git 检查中间的提交,并等待你声明这次提交是一个好提交还是一个坏提交:

(LCTT 译注:如果某一提交是可以通过的,则使用 git bisect good 命令标记;同样地,如果某一提交不能通过,则使用 git bisect bad 命令标记。)

$ git bisect good

$ git bisect bad

然后,git bisect 工具重复检查好提交和坏提交中间的那次提交,直到你告诉它:

$ git bisect reset

一些高级用户甚至可以自己编写脚本,来确定提交的好坏状态、并在找到特定提交时采取某一补救措施。你可能不会每天都使用 git bisect 命令,但当你需要它来定位首次引入错误的提交时,它会是一个很有用的救星。


via: https://opensource.com/article/22/11/git-bisect

作者:Dwayne McDaniel 选题:lkxed 译者:chai001125 校对:wxy

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

Cinnamon 是 Linux Mint 的默认桌面环境。本快速指南解释了在 Arch Linux 中安装 Cinnamon 桌面环境的步骤。

Cinnamon 桌面环境Linux Mint 的默认桌面风格。创建这个基于 GTK 的桌面环境是为了提供具有以前的 GNOME 的传统桌面风格(即 GNOME 3 之前的外观)。该桌面本身很轻巧,非常人性化。因为它保留了经过时间考验的图标和菜单驱动的桌面行为,因此它被认为(与 Linux Mint 结合)是新 Linux 用户易于使用的桌面之一。

尽管 Cinnamon 及其软件包与 Linux Mint 紧密结合,但该桌面可以作为单独的桌面环境安装在 Ubuntu、Fedora 或 Arch Linux 中。

在 Arch Linux 中安装 Cinnamon 相当容易,就像在 Arch 中安装其他桌面(例如 Xfce 和 KDE Plasma)一样。但它需要安装一些特定的软件包才能使其看起来像一个合适的 Cinnamon 桌面。

让我们开始吧。

在 Arch Linux 中安装 Cinnamon 桌面

第 1 步:安装基本系统

本指南假设你已经安装了基本的 Arch 系统。如果你没有安装基本系统,请按照 自动化 Arch 安装指南(推荐方法)进行安装。然后按照以下步骤操作。

第 2 步:更新你的系统

在你的 Arch 中打开一个终端。并通过运行以下命令确保系统是最新的:

pacman -Syu

第 3 步:安装 yay AUR 助手

配置 Cinnamon 所需的某些包在 Arch 官方仓库中不可用。它们在 Arch 用户仓库(AUR)中。因此,你需要安装 yay 以获得额外的软件包。按照 本指南安装 yay AUR 助手

第 4 步:在 Arch Linux 中安装 Cinnamon 桌面

基本的 Cinnamon 桌面在 cinnamon 包中,它存在于社区仓库中。打开终端并运行以下命令来安装 Cinnamon 桌面和终端应用。

sudo pacman -S cinnamon gnome-terminal

安装显示服务器和显示管理器。LightDM 是轻量级的,非常适合 Cinnamon。不过,你可以使用任何其他显示管理器,例如 SDDM 或 GDM。但我建议你坚持使用 Lightdm。

sudo pacman -S xorg lightdm lightdm-gtk-greeter

使显示管理器和网络服务在下次启动时启动。

systemctl enable lightdm
systemctl enable NetworkManager

重启系统。

第 5 步:配置 Cinnamon 桌面

成功重启后,你应该会看到 Lightdm 登录提示。使用你在安装基本系统时可能已创建的用户名和密码登录。

当我第一次登录基本的 Cinnamon 桌面时,它看起来非常平淡。所以它需要一些定制。

Arch 中的 Cinnamon 桌面(配置前)

打开终端并安装一些重要的软件包,例如声音驱动、浏览器等。这将确保安装正确的字体和其他项目。

sudo pacman -S pulseaudio pulseaudio-alsa pavucontrol firefox vlc gimp xfburn thunderbird gedit gnome-system-monitor

然后为 Cinnamon 特定的图标集安装 faenza 图标主题。

sudo pacman -S mate-icon-theme-faenza

numix 主题需要安装 yay。在运行以下命令安装之前,请确保按照 该指南 安装 yay AUR 助手程序。

yay -S numix-themes

全部安装完成后,重启系统。

当你重新登录时,打开主题应用并按照以下更改窗口边框、图标、控件和桌面。

本指南的主题更改

你也可以在第二个选项卡(添加/删除)中下载其他主题。

其他主题供你下载

将默认的 GNOME 壁纸(Cinnamon 附带)更改为你喜欢的内容。本指南使用来自 cinnamon-look.org 的 Cinnamon 徽标壁纸。

如果一切顺利,你的桌面应该如下所示。

Arch Linux 中的 Cinnamon 桌面

在 Arch Linux 中运行的 Cinnamon 桌面

因此,在 Arch Linux 中安装和配置 Cinnamon 桌面的基本步骤到此结束。你可能想要添加其他设置,例如桌面小程序等。

结束语

Cinnamon 是一款适合新用户的现代且易于使用的桌面。以 Arch Linux 和 Cinnamon 的灵活性为核心,这个组合非常适合许多喜欢 Cinnamon 桌面(主要是 Linux Mint)但又希望同时使用 Arch Linux 的用户。我希望本指南能帮助你在 Arch Linux 中设置 Cinnamon 环境。


via: https://www.debugpoint.com/cinnamon-arch-linux-install/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

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

你是否在寻找一份在 Debian 11(Bullseye)上安装 Kubernetes 集群的简易指南?

这份分步指南将向你展示如何使用 Kubeadm 工具在 Debian 11 上安装 Kubernetes 集群。

Kubernetes(k8s)集群包含主控节点和工作节点,用于运行容器化的应用程序。主控节点作为控制平面,工作节点为实际工作负载提供环境。

前置条件:

  • 已安装 Debian 11
  • 2 CPU / vCPU
  • 2 GB RAM
  • 20 GB 空闲硬盘空间
  • 有管理员权限的 sudo 用户
  • 稳定的网络连接

实验环境配置:

在本文中,我使用了 3 个 Debian 11 系统的节点,配置如下

  • 主控节点(k8s-master) – 192.168.1.236
  • 工作节点 1(k8s-worker1) – 192.168.1.237
  • 工作节点 2(k8s-worker2) – 192.168.1.238

事不宜迟,我们直接进入安装步骤。

1、设置主机名和更新 /etc/hosts 文件

在主控节点和工作节点上使用 hostnamectl 命令来设置主机名:

$ sudo hostnamectl set-hostname "k8s-master"       // 在主控节点运行
$ sudo hostnamectl set-hostname "k8s-worker1"      // 在工作节点 1 运行
$ sudo hostnamectl set-hostname "k8s-worker2"      // 在工作节点 2 运行

在所有节点的 /etc/hosts 文件末尾添加下面几行内容:

192.168.1.236       k8s-master
192.168.1.237       k8s-worker1
192.168.1.238       k8s-worker2

2、在所有节点上关闭交换分区

我推荐关闭交换分区,以便更丝滑地使用 kubelet。在所有节点上执行以下命令来关闭交换分区:

$ sudo swapoff -a
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

3、配置 Kubernetes 集群相关的防火墙规则

如果你的操作系统防火墙是打开的,请分别在主控节点和工作节点允许以下的端口。

在主控节点,执行:

$ sudo ufw allow 6443/tcp
$ sudo ufw allow 2379/tcp
$ sudo ufw allow 2380/tcp
$ sudo ufw allow 10250/tcp
$ sudo ufw allow 10251/tcp
$ sudo ufw allow 10252/tcp
$ sudo ufw allow 10255/tcp
$ sudo ufw reload

在工作节点,执行:

$ sudo ufw allow 10250/tcp
$ sudo ufw allow 30000:32767/tcp
$ sudo ufw reload

注意:如果你的 Debian 11 系统防火墙是关闭的,可以跳过此步骤。

4、在所有节点安装 Containerd 运行时

Containerd 是容器运行时的行业标准,所有节点必须安装 Containerd。

先在所有节点上配置如下的核心参数,再安装 Containerd。

$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

$ sudo modprobe overlay
$ sudo modprobe br_netfilter

$ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

运行如下命令,以使上面的更改生效:

$ sudo sysctl --system

现在,在所有节点上运行如下 apt 命令来安装 Conatinerd。

$ sudo apt  update
$ sudo apt -y install containerd

在所有节点上运行如下命令来配置 Containerd:

$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1

在所有节点上设置 cgroupdriversystemd,编辑 /etc/containerd/config.toml 文件,找到 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 部分,添加一行内容:SystemdCgroup = true

$ sudo vi /etc/containerd/config.toml

systemdCgroup-true-containerd-config-toml

保存并退出文件。

在所有节点上重启并启用 containerd 服务:

$ sudo systemctl restart containerd
$ sudo systemctl enable containerd

5、添加 Kubernetes Apt 库

执行以下命令,添加 Kubernetes Apt 库:

$ sudo apt install gnupg gnupg2 curl software-properties-common -y
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/cgoogle.gpg
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

6、在所有节点上安装 kubelet、kubectl 和 kubeadm

在所有节点上执行以下 apt 命令,安装 Kubernetes 集群组件,如 kubeletkubectl 以及 kubeadm

$ sudo apt update
$ sudo apt install kubelet kubeadm kubectl -y
$ sudo apt-mark hold kubelet kubeadm kubectl

7、使用 Kubeadm 创建 Kubernetes 集群

现在我们可以创建 Kubernetes 集群了,在主控节点上执行以下命令:

$ sudo kubeadm init --control-plane-endpoint=k8s-master

命令输出:

Kubernetes-Control-Plane-Initialization-Debian11

出现以上内容,说明控制平面初始化成功。在输出中,有普通用户与集群交互的命令,也有把任何工作节点加入到集群的命令。

要开始与集群进行交互,请在主控节点上运行以下命令:

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

执行以下 kubectl 命令来获取节点和集群的信息:

$ kubectl get nodes
$ kubectl cluster-info

以上命令的输出:

Nodes-Cluster-Info-Kubectl

通过执行 kubeadm join 命令来把两个工作节点加入到集群。

注意:请从 kubeadm init 命令的输出中复制完整的命令。在我的例子中,命令如下:

$ sudo kubeadm join k8s-master:6443 --token ta622t.enl212euq7z87mgj \
   --discovery-token-ca-cert-hash sha256:2be58f54458d0e788c96b8841f811069019161f9a3dd8502a38c773e5c6ead17

在工作节点 1 上的输出如下:

Worker-Node1-Join-Kunernetes-Cluster

在工作节点 2 上的输出如下:

Worker-Node2-Join-Kubernetes-Cluster

在主控节点上执行以下命令,检查节点的状态:

$ kubectl get nodes
NAME          STATUS     ROLES           AGE     VERSION
k8s-master    NotReady   control-plane   23m     v1.25.0
k8s-worker1   NotReady   <none>          9m27s   v1.25.0
k8s-worker2   NotReady   <none>          2m19s   v1.25.0
$

为了使节点状态变为 ready,我们需要安装 容器荚 Pod 网络插件,如 Calico 或 flannel。

8、安装 Calico Pod 网络插件

在主控节点上执行以下命令安装 Calico:

$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml

输出:

Install-calico-pod-network-addon-debian11

在所有节点上执行以下命令,配置防火墙允许 Calico 的端口:

$ sudo ufw allow 179/tcp
$ sudo ufw allow 4789/udp
$ sudo ufw allow 51820/udp
$ sudo ufw allow 51821/udp
$ sudo ufw allow 4789/udp
$ sudo ufw reload

执行以下命令检查下 Calico 的状态:

$ kubectl get pods -n kube-system

Calico-Pods-Status-Kuberenetes-Debian11

完美!现在再检查下节点状态:

Nodes-status-after-calico-Installation

非常棒!上面的输出说明主控节点和工作节点的状态都是 ready。现在这个集群可以正常工作了。

9、检查 Kubernetes 集群安装是否正确

我们尝试通过 deployment 命令来部署基于 Nginx 的应用程序,来验证 Kubernetes 集群的安装是否正确。执行以下命令:

$ kubectl create deployment nginx-app --image=nginx --replicas 2
$ kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --port 80 --target-port 80
$ kubectl describe svc nginx-web-svc

以上命令的输出:

Nginx-Based-App-Kubernetes-Cluster-Debian11

使用以下的 curl 命令通过节点端口 30036 来访问基于 nginx 的应用程序。

注意:在 curl 命令中,可以使用两个工作节点任一的主机名。

$ curl http://k8s-worker1:30036

Access-Nginx-Based-App-via-NodePort-Kubernetes-Debian11

以上的输出说明我们可以正常访问基于 nginx 的应用程序了。

以上为全部内容。希望本文对你有用,参照本文可以在 Debian 11 上正常安装 Kubernetes 集群。如有任何问题,请在下面评论区告诉我。


via: https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/

作者:Pradeep Kumar 选题:lkxed 译者:lxbwolf 校对:wxy

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

随着 helloSystem 0.7.0 的发布和更多内部工作,helloSystem 正在增强稳定性,为 macOS 提供一个“开源”的替代方案。

helloSystem 是一个基于 FreeBSD 的轻量级操作系统,旨在为 macOS 提供一个“开源”的替代方案。helloSystem 的主要目标是提供一个易于安装和使用的,真正“开源”的 FreeBSD 替代方案。此外,该团队还专注于从 macOS 转换过来的用户,他们可以舒适的使用类似的桌面,而不会受到系统锁定或 Linux 发行版的复杂性的影响。

考虑到 BSD 系统中的硬件支持,开发这样的操作系统需要时间。团队正在努力从零创建一个桌面 - “hellodesktop”。用 C++ 编写的 hellodesktop 和其他改进正在进行中。

helloSystem 0.7.0 桌面

helloSystem 0.7.0

在 2021 年底,该团队发布了最新一个稳定版本,基于 FreeBSD 13.0 的 helloSystem 0.7.0,并且目前正在将系统移植到 FreeBSD 13.1 和 14 版本。

除此之外,一些新功能也可以在系统中工作了;这是一个总览:

  • 由 FreeBSD 13.0 驱动
  • 通过更新的启动时间和压缩的 UFS 文件系统改进的 现场介质 Live Media
  • 将 ISO 镜像大小减少到 800 MB,以适合 CD
  • 与 Ventoy USB creator 兼容
  • 支持英伟达 GPU,包括旧型号
  • 在目标分区安装时添加了 exFAT 支持
  • 增加了 KDE 开发的 Falkon 浏览器,附带了下载和安装 Chromium 和 Firefox 的附加菜单项
  • 系统提示音
  • 支持通过笔记本电脑键盘的专用键控制亮度和音量

helloSystem 0.7.0 中的菜单与应用

除了上述内容之外,helloSystem 0.7.0 中还添加了一个新部分,以让你可以提前了解团队正在开发的功能。未来版本中将到来的一些最酷的功能包括:

  • BSD 中的 Debian 运行时安装程序,以在 BSD 中运行 Linux 应用程序!
  • 一个独立的应用程序,用于下载应用程序。
  • 新的更新实用程序

此外,0.7.0 中还修复了一些错误并更新了翻译。

安装 Linux 运行时正在开发中

话虽如此,但它仍然需要大量的时间才能成为易于使用的 BSD 变体和 macOS 的“开源”替代方案。自从我 首次报道 以来,已经在图形安装程序,桌面应用程序和错误修复方面进行了巨大的更新。我希望它在随着 2023 年移植到 FreeBSD 14 之后,会变得更加主流。

下载

如果你想在真实的硬件上尝试它,请先进行备份然后尝试。此外,helloSystem 现在完全兼容 VirtualBox 之类的虚拟机。你可以试试。如果你在 VirtualBox 中尝试,请确保将 CPU 更改为 64 位。

官方下载链接(包括 helloSystem 0.7.0 稳定版)可在 此页面 上找到,或者您可以使用下面的链接获取 ISO。

下载 helloSystem 0.7.0

如果你想为测试、开发或任何其他事情做出贡献,请 访问 GitHub 页面以获取详细信息


via: https://www.debugpoint.com/hellosystem-0-7-0/

作者:Arindam 选题:lkxed 译者:Cubik65536 校对:wxy

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