最近在做一个工具,估计很快就能和大家见面了。

这是我第一次用 Go 写 CLI 工具,功能意外的还蛮多蛮复杂,其中涉及到一些 Linux 运维的工作,包括对网络接口进行操作,对 IPtables 的维护等。

不可避免的,这个过程中需要调用 Syscall,Go 的 Syscall 不像 C 那样直接,虽然 Go 提供了 golang.org/x/sys/unix 包,其中打包了一些常用的 Syscall,但就我们的案例而言需要去调用裸 Syscall,因此研究了一下 Go 调用 Syscall 的正确打开方式。

旧版 RHEL 能得到 RPM,但新版本系统不再提供了怎么办呢?

除非你使用的软件是专有软件,没有提供 SRPM,否则最好使用 SRPM 在新系统下重新打包。这样可以保证编译时使用新版本的编译器和动态链接库,以便避免一些各种依赖版本带来的问题。

甚至你可以在原包基础上升级软件版本。

我们如何在当前的 PC 上模拟一个大端序系统呢?当然你可以用 QEMU 来完全模拟一个其他架构的计算机,但显然这样的效率比较低。其实可以利用 QEMU-User 来实现 chroot 进入一个与宿主机完全不同架构的环境,这是依靠 QEMU-User 与 binfmt 实现的。