mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-03-06 01:20:12 +08:00
Merge remote-tracking branch 'LCTT/master'
This commit is contained in:
commit
0e0c2fae44
@ -1,22 +1,22 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (qhwdw)
|
||||
[#]: reviewer: ()
|
||||
[#]: publisher: ()
|
||||
[#]: url: ()
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-10405-1.html)
|
||||
[#]: subject: (How to Build a Netboot Server, Part 3)
|
||||
[#]: via: (https://fedoramagazine.org/how-to-build-a-netboot-server-part-3/)
|
||||
[#]: author: (Gregory Bartholomew https://fedoramagazine.org/author/glb/)
|
||||
|
||||
如何构建一台网络引导服务器(第三部分)
|
||||
如何构建一台网络引导服务器(三)
|
||||
======
|
||||
|
||||

|
||||
|
||||
在 [如何构建一台网络引导服务器(第一部分)][1] 的文章中,我们提供了一个极简的 [iPXE][2] 引导脚本来引导你的网络引导镜像。许多用户除了使用网络引导镜像外,可能在机器本地也有一个操作系统。但是使用常见的工作站的 BIOS 去切换引导加载器是很笨拙的。在本系列文件的第三部分,我们将向你展示如何设置一个更复杂的 iPXE 配置。它将允许终端用户以更容易的方式去选择引导哪个操作系统。它也可以配置为让系统管理员从一台中央服务器来统一管理引导菜单。
|
||||
在 [如何构建一台网络引导服务器(一)][1] 中,我们提供了一个极简的 [iPXE][2] 引导脚本来引导你的网络引导镜像。许多用户除了使用网络引导镜像外,可能在机器本地也有一个操作系统。但是使用常见的工作站的 BIOS 去切换引导加载器是很笨拙的。在本系列文件的第三部分,我们将向你展示如何设置一个更复杂的 iPXE 配置。它将允许终端用户以更容易的方式去选择引导哪个操作系统。它也可以配置为让系统管理员从一台中央服务器来统一管理引导菜单。
|
||||
|
||||
### 一个交互式 iPXE 引导菜单
|
||||
|
||||
下面这些命令重定义了网络引导镜像的 boot.cfg 来作为一个交互式的 iPXE 引导菜单,并使用了一个 5 秒倒计时的定时器:
|
||||
下面这些命令重定义了网络引导镜像的 `boot.cfg` 来作为一个交互式的 iPXE 引导菜单,并使用了一个 5 秒倒计时的定时器:
|
||||
|
||||
```
|
||||
$ MY_FVER=29
|
||||
@ -61,22 +61,20 @@ END
|
||||
|
||||
上述菜单有五个节:
|
||||
|
||||
* **menu** 定义了显示在屏幕上的实际菜单内容。
|
||||
* **failed** 提示用户发生了错误,并将用户带到 shell 以错误错误。
|
||||
* **shell** 提供了交互式命令提示符。你可以在引导菜单出现时按下 **Esc** 键进入,或者是
|
||||
“boot” 命令失败时也会进入到命令提示符。
|
||||
* **lcl** 包含一个提供给 iPXE 退出的简单命令,以及返还控制权给 BIOS。在 iPXE 之后,无论你希望缺省引导的设备(即:工作站的本地硬件)是什么,都必须在你的工作站的 BIOS 中正确地作为下一个引导设备列出来。
|
||||
* **f29** 包含前面文章提到同一个网络引导代码,但使用最终的退出代码来替换掉 goto failed。
|
||||
* `menu` 定义了显示在屏幕上的实际菜单内容。
|
||||
* `failed` 提示用户发生了错误,并将用户带到 shell 以错误错误。
|
||||
* `shell` 提供了交互式命令提示符。你可以在引导菜单出现时按下 `Esc` 键进入,或者是
|
||||
`boot` 命令失败时也会进入到命令提示符。
|
||||
* `lcl` 包含一个提供给 iPXE 退出的简单命令,以及返还控制权给 BIOS。在 iPXE 之后,无论你希望缺省引导的设备(即:工作站的本地硬件)是什么,都必须在你的工作站的 BIOS 中正确地作为下一个引导设备列出来。
|
||||
* `f29` 包含前面文章提到同一个网络引导代码,但使用最终的退出代码来替换掉 `goto failed`。
|
||||
|
||||
|
||||
|
||||
从你的 `$HOME/esp/linux` 目录中复制更新后的 boot.cfg 到所有客户端系统的 ESP 中。如果一切顺利,你应该会看到类似下面图片的结果:
|
||||
从你的 `$HOME/esp/linux` 目录中复制更新后的 `boot.cfg` 到所有客户端系统的 ESP 中。如果一切顺利,你应该会看到类似下面图片的结果:
|
||||
|
||||
![][3]
|
||||
|
||||
### 一个服务器托管的引导菜单
|
||||
|
||||
你可以添加到网络引导服务器的另一个特性是,能够从一台中央位置去管理所有客户端的引导菜单。这个特性尤其适用于批量安装(升级)一个新版本的操作系统。在你将新内核和新的 initramfs 复制到所有客户端的 ESP 之后,这个特性可以让你执行一种 [原子事务][4] 去切换所有客户端到新操作系统。
|
||||
你可以添加到网络引导服务器的另一个特性是,能够从一台中央位置去管理所有客户端的引导菜单。这个特性尤其适用于批量安装(升级)一个新版本的操作系统。在你将新内核和新的 `initramfs` 复制到所有客户端的 ESP 之后,这个特性可以让你执行一种 [原子事务][4] 去切换所有客户端到新操作系统。
|
||||
|
||||
安装 Mojolicious:
|
||||
|
||||
@ -116,9 +114,9 @@ END
|
||||
END
|
||||
```
|
||||
|
||||
这是一个非常简单的 Mojolicious 应用程序,它监听 80 端口,并且只回复到 /menu 的请求。如果你想快速了解 Mojolicious 能做什么,运行 `man Mojolicious::Guides::Growing` 去查看手册。按 **Q** 键退出手册。
|
||||
这是一个非常简单的 Mojolicious 应用程序,它监听 80 端口,并且只回应对 `/menu` 的请求。如果你想快速了解 Mojolicious 能做什么,运行 `man Mojolicious::Guides::Growing` 去查看手册。按 `Q` 键退出手册。
|
||||
|
||||
将 boot.cfg 移到我们的网络引导应用程序中作为一个名为 menu.html.ep 的模板:
|
||||
将 `boot.cfg` 移到我们的网络引导应用程序中作为一个名为 `menu.html.ep` 的模板:
|
||||
|
||||
```
|
||||
# mkdir /opt/bootmenu/templates
|
||||
@ -157,7 +155,7 @@ END
|
||||
# systemctl start bootmenu.service
|
||||
```
|
||||
|
||||
用 wget 测试它:
|
||||
用 `wget` 测试它:
|
||||
|
||||
```
|
||||
$ sudo dnf install -y wget
|
||||
@ -199,9 +197,9 @@ initrd --name initrd.img ${prefix}/initramfs-4.19.4-300.fc29.x86_64.img
|
||||
boot || goto failed
|
||||
```
|
||||
|
||||
现在,引导菜单服务器已经正常工作了,重新构建 ipxe.efi 引导加载器,使用一个 init 脚本指向它。
|
||||
现在,引导菜单服务器已经正常工作了,重新构建 `ipxe.efi` 引导加载器,使用一个初始化脚本指向它。
|
||||
|
||||
第一步,先更新我们在本系列文章的第一部分中创建的 init.ipxe 脚本:
|
||||
第一步,先更新我们在本系列文章的第一部分中创建的 `init.ipxe` 脚本:
|
||||
|
||||
```
|
||||
$ MY_BOOTMENU_SERVER=server-01.example.edu
|
||||
@ -236,7 +234,7 @@ $ sudo systemctl restart bootmenu.service
|
||||
|
||||
### 做一步的改变
|
||||
|
||||
如果引导菜单服务器工作正常,在你的客户端系统上的 boot.cfg 文件将更长。
|
||||
如果引导菜单服务器工作正常,在你的客户端系统上的 `boot.cfg` 文件将更长。
|
||||
|
||||
比如,重新添加 Fedora 28 镜像到引导菜单中:
|
||||
|
||||
@ -271,13 +269,13 @@ via: https://fedoramagazine.org/how-to-build-a-netboot-server-part-3/
|
||||
作者:[Gregory Bartholomew][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[qhwdw](https://github.com/qhwdw)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/glb/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/how-to-build-a-netboot-server-part-1/
|
||||
[1]: https://linux.cn/article-10379-1.html
|
||||
[2]: https://ipxe.org/
|
||||
[3]: https://fedoramagazine.org/wp-content/uploads/2018/11/netboot-menu-1024x641.png
|
||||
[4]: https://en.wikipedia.org/wiki/Atomicity_(database_systems)
|
@ -1,8 +1,8 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-10404-1.html)
|
||||
[#]: subject: (A Tale of HTTP/2)
|
||||
[#]: via: (https://veronneau.org/a-tale-of-http2.html)
|
||||
[#]: author: (Louis-Philippe Véronneau https://veronneau.org/)
|
||||
@ -14,7 +14,7 @@
|
||||
|
||||
说实话,我刚刚重写了管理我们备份程序的 Puppet 代码,启用 HTTP/2 似乎是一种转向另一个大型项目之前有效的拖延方式。这有多难?
|
||||
|
||||
结果我花了大约 25 个小时来完成。坐下来穿上舒适的拖鞋,因为这是一个 HTTP/2 的故事!
|
||||
结果我花了大约 25 个小时来完成。坐下来穿上舒适的拖鞋,听听这个 HTTP/2 的故事!
|
||||
|
||||
[![The Yule Log][2]][3]
|
||||
|
||||
@ -25,15 +25,15 @@
|
||||
```
|
||||
Protocols h2 h2c http/1.1
|
||||
|
||||
H2Push on
|
||||
H2PushPriority core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated after
|
||||
H2PushPriority text/css before
|
||||
H2PushPriority image/jpeg after 32
|
||||
H2PushPriority image/png after 32
|
||||
H2PushPriority application/javascript interleaved
|
||||
H2Push on
|
||||
H2PushPriority * after
|
||||
H2PushPriority text/css before
|
||||
H2PushPriority image/jpeg after 32
|
||||
H2PushPriority image/png after 32
|
||||
H2PushPriority application/javascript interleaved
|
||||
```
|
||||
|
||||
这当然很容易。即使 Apache 中的所有内容都已正确设置,网站仍然可以使用 HTTP/1.1。不过,显然我做得没错,因为我的网站现在发送了一个新的 HTTP 头:`Upgrade: h2, h2c`。
|
||||
这当然很容易。即使 Apache 中的所有内容都已正确设置,网站仍然使用的是 HTTP/1.1。不过,显然我做得没错,因为我的网站现在发送了一个新的 HTTP 头:`Upgrade: h2, h2c`。
|
||||
|
||||
在浪费了大量时间调试 TLS 密钥(HTTP/2 [与 TLS 1.1 不兼容][4])之后,我终于发现问题是没有使用正确的 Apache 多进程处理模块。
|
||||
|
||||
@ -43,13 +43,13 @@ H2PushPriority application/javascript interleaved
|
||||
|
||||
![A clip from Alice in Wonderlands][5]
|
||||
|
||||
在很长一段时间里,一位好友一直试图让我相信 [PHP-FPM][6] 的优点。虽然纸上看起来很好, 但我从来没有真正试过。它看起来很复杂。常规的 `mod_php` 做得很好,还有其他事情需要我注意。
|
||||
在很长一段时间里,一位好友一直试图让我相信 [PHP-FPM][6] 的优点。虽然表面上看起来很好,但我从来没有真正试过。它看起来很复杂。常规的 `mod_php` 做得很好,还有其他事情需要我注意。
|
||||
|
||||
事实上,这次的 HTTP/2 事件是让我钻研它的一个契机。在我理解了 FPM 池的工作原理后,它实际上很容易设置。由于我不得不重写我们用于部署网站的 Puppet 配置文件,我也借此机会巩固了一堆东西。
|
||||
|
||||
PHP-FPM 允许你在不同的 Unix 用户下运行网站来增加隔离性。最重要的是,我决定是时候让我们服务器上的 PHP 代码以只读模式运行,并且不得不为我们的 Wordpress、Nextcloud、KanBoard 和 Drupal 实例调整一些东西来减少报错。
|
||||
|
||||
过了很长时间通过 Puppet 的自动任务后,我终于能够在任何地方关闭 `mod_php` 和 `mpm_prefork` 并启用 `mpm_event` 和 `mod_http2`。PHP-FPM 和 HTTP/2 带来的速度提升不错,但更让我感到高兴的是这次磨练增强了我们的 Apache 处理 PHP 的能力。
|
||||
过了很长时间通过 Puppet 的自动任务后,我终于能够全部关闭 `mod_php` 和 `mpm_prefork` 并启用 `mpm_event` 和 `mod_http2`。PHP-FPM 和 HTTP/2 带来的速度提升不错,但更让我感到高兴的是这次磨练增强了我们的 Apache 处理 PHP 的能力。
|
||||
|
||||
![Victory!][7]
|
||||
|
||||
@ -60,7 +60,7 @@ via: https://veronneau.org/a-tale-of-http2.html
|
||||
作者:[Louis-Philippe Véronneau][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
@ -72,4 +72,4 @@ via: https://veronneau.org/a-tale-of-http2.html
|
||||
[4]: https://http2.github.io/http2-spec/#TLSUsage
|
||||
[5]: https://veronneau.org/media/blog/2018-12-22/mod_php.gif (A clip from Alice in Wonderlands)
|
||||
[6]: https://wiki.apache.org/httpd/PHP-FPM
|
||||
[7]: https://veronneau.org/media/blog/2018-12-22/victory.png (Victory!)
|
||||
[7]: https://veronneau.org/media/blog/2018-12-22/victory.png (Victory!)
|
Loading…
Reference in New Issue
Block a user