鉴于最近政府创建“主权”互联网的举措,也许许多GNU / Linux用户都对确保不受流行GNU / Linux发行版存储库的影响这一目标感到困惑。
有人下载了CentOS,Ubuntu,Debian存储库,有人根据现有发行版建立了发行版,而有人拿着LFS(Linux From Scratch)和BLFS(Beyond Linux From Scratch)书籍开始,从此开始就从源代码开始编译发行版。他认为,在“主权”互联网黑客攻击,病毒爆发,数据泄漏的情况下,肯定会发生,并且二进制文件将在一段时间后变得过时。
最近,根据Linux From Scratch Systemd Edition v.8.3手册中的说明,完全可以从源代码完全编译虚拟机。 我赶紧与您分享结果。
Linux构建过程
从源代码构建Linux的过程可以分为三个阶段:
- 基于现有操作系统,构建了LFS构建环境。
- 构建环境将构建LFS虚拟机的映像。
- 虚拟机会从BLFS手册中安装不在LFS手册中的其他软件包。
静态脚本文件
在构建环境中使用时,使用剪贴板和SSH很方便:从书中复制命令并将其粘贴到构建环境控制台中。
启动创建的虚拟机后,出现了严重的问题。 与终端窗口不同,该代码无法插入虚拟机的客户端窗口中。 用键盘键入命令很不方便,并且有很大的输入错误风险。 错别字的危险在于它们可能不会立即出现,而是会出现一段时间并导致严重的问题。
众所周知,不仅可以从键盘输入命令,还可以从标准流(STDIN)输入命令。 标准流的源可以使用串行端口以及脚本程序的结果,即所谓的标准输出(STDOUT)。
很多人都知道wget命令可以将下载文件的内容输出到标准输出(STDOUT):
wget http://example.com -O -
如果将wget命令的输出发送到解释器,则可以执行任意代码。 将执行该代码,就像在键盘上键入或从剪贴板复制代码一样:
wget http://umvirt.com/linux/helloworld.sh -O - | bash
因此,您可以使用命令将文件放置在某些Web服务器上,并将其内容发送到解释器。
动态脚本文件
如果您确切地知道需要做什么,并且已经安装了软件包,并且没有明确安装依赖项,那么静态文件当然是一件好事。
一个基于
LAMP Web服务器 (Linux-Apache-MySQL-PHP)的动态站点可以解决这个问题。 如果站点可以动态生成页面(HTML文件)和图片,则它应该能够处理普通的文本文件。
事情就这样发生了。 编写了站点
UmVirt LFS Packages ,该站点为Bash解释器生成了脚本。 站点数据库包含有关软件包,依赖项,补丁,添加和构建命令的信息。
现在,要安装mc软件包(午夜指挥官),您可以编写以下命令:
wget --no-check-cerificate https://umvirt.com/linux/packages/0.1/mc/install -O - | bash
站点脚本本身将接收来自数据库的数据,并将生成用于检查依赖关系的代码和用于安装软件包的脚本代码。 解释器将处理脚本中的指令。
为了使之成为可能,有关数据库中已安装软件包的信息存储在虚拟机磁盘上。
已安装软件包的数据库位于目录中
/ var / cache / ulfs-packages是空文件列表,其名称与软件包名称相对应。
如果在数据库中找不到该软件包,则将以递归方式安装依赖项。
便利设施
为了使软件包的安装更加方便,我在另一个使用
UmVirt LFS软件包数据库的
UmVirt LFS Assistant网站上编写了黑猩猩脚本。
UmVirt LFS Assistant的主要任务是执行其他命令。
使用黑猩猩,安装软件包更加容易:
chimp install mc
示范
要熟悉
UmVirt LFS软件包和
UmVirt LFS Assistant服务的工作
,可以下载基本映像
Initial UmVirt LFS v.0.1 Update 1 。 通过运行一个命令来安装Xorg:
chimp install X
在脚本执行过程中,将自动安装141个软件包。 为了节省编译时间,可以用MAKEFLAGS变量将/ etc / profile文件中的值替换为“ -j1”(一个流),例如,替换为“ -j6”(六个线程)。
分权和定制
为了确保安全性,自治性和自定义性,已在公共领域发布了UmVirt LFS软件包和UmVirt LFS Assistant服务的源代码。 任何人都可以下载,部署和调整其基础架构中的服务。