构建环境隔离和文件系统差异

     2023-02-25     179

关键词:

【中文标题】构建环境隔离和文件系统差异【英文标题】:Build environment isolation and file system diffing 【发布时间】:2014-01-28 23:21:12 【问题描述】:

好吧,所以在第 n 次尝试追踪各种软件的依赖关系并复制各种人为所有不同的 linux 发行版所做的工作之后,我想知道是否有更好的方法来捆绑各种将软件片段整合到一个 .rpm 或 .deb 文件中,以便于分发。

我目前的设置是各种工具的科学怪人,但主要是 Vagrant 和 libguestfs(从在 Fedora 中运行的源代码构建,因为实际上没有一个发行版附带 virt-diff)。以下是我目前遵循的步骤:

    使用 Vagrant box 或通过 live CD 创建一个基本操作系统。 导出.vmdk 并将其命名为base-image。 旋转上一张图片的精确复制品并前往城镇:使用包管理器, 或其他方式,下载、编译和安装我需要的所有部分。再次导出.vmdk 并将其命名为non-base-image。 使两个基本映像都可用于具有 libguestfs 的 Fedora 客户操作系统。 使用virt-diff 区分两个图像并将该数据转储到名为diff 的文件中。 运行几个 ruby​​ 脚本,将 diff 转换为另一种格式,其中包含我需要的信息,并且没有我不喜欢 /var 中的内容。 运行另一个脚本,为guestfish 生成一个带有一堆copy-out 命令的命令脚本。 运行guestfish 脚本。 运行另一个脚本以从 diff 重新生成符号链接,因为 guestfish 不能这样做。 将生成的文件夹结构转换为 .deb 或 .rpm 文件并发布。

我想知道是否有更好的方法来做到这一点。你会认为会有,但我还没想出来。

【问题讨论】:

因此,您需要一个包含所有依赖项的单个文件安装程序,例如 Google ChromeOpera。我对吗 ?。您对便携式应用程序(或便携式目录)感兴趣吗? @totti:理想情况下是一个类似 chroot 的环境,可以在任何兼容的 linux 环境上发布和运行。 【参考方案1】:

我肯定会考虑以下几点:

一)

yum 列表(选择您的包/依赖项) 使用上一个列表中的 yumdownloader(或使用您已经下载的 pkgs) 创建仓库 通过安装脚本将 cd 存储库添加到 repolist 等的媒体上发布。

或 B)

如上所述的前两个步骤,然后将 rpms 打包到一个存档中,构建一个包含上述所有内容的包,并开始实际安装 rpms(沿着 rpm -Uvh /tmp/repo/* 的行)作为一个后期的脚本(也许在清理阶段)。不知道这是否可以避免 rpm 数据库上的锁定。

【讨论】:

【参考方案2】:

我认为你已经到了复杂的地步——实际上是一个科学怪人——你应该停止担心制作具有依赖关系的正确包。我们在我之前的工作中这样做了——我们有一组制造的 rpm 包——而且非常简单直接,包括:

安装前/安装后脚本 卸载脚本 依赖关系

我们从来不需要做任何你刚才描述的事情。对于客户来说,甚至安装一组软件包也非常容易!

您可以关注how to build RPM package 的参考手册了解更多信息。

编辑:如果您需要一个安装包,然后创建这个主包,它将包含所有其他包(正确设置依赖项)并在安装后脚本中安装它们(以及在卸载脚本中卸载它们)。

【讨论】:

我可以很好地构建 RPM 包,这不是问题。问题是一些客户没有互联网接入,需要一个独立的包。 我没有说构建这些软件包的人更容易。从客户的角度来看,如果我只给他们一个可以使用rpm -i 安装的软件包,那肯定会更容易。 @davidk01 然后你可以按照我的建议准备所有这些包,然后创建一个主包,它将包含所有这些包并在安装后脚本中安装它们(并在卸载脚本中卸载它们) .【参考方案3】:

主要有 3 个步骤来制作一个包含所有依赖项的包(让它成为 A、B 和 C)。

A.收集所需文件。 有很多方法可以收集主要软件及其依赖项的文件。为了获得所有依赖项并无错误运行,您需要使用基本操作系统(即实时系统) 1. 使用 AppDirAssistant 这个应用程序被 www.portablelinuxapps.org 用来创建可移植的应用程序目录。他们扫描并观察应用程序访问的文件以找到所需的文件。 2. 使用 chroot & overlayfs 在这种方法中,您不需要启动到 live cd 而是 chroot 进入它。 一种。挂载 .iso @ /cdrom 和 湾。挂载文件系统(filesystem.squashfs)@另一个地方,比如@ /tmp/union/root C。绑定挂载 /proc @ /tmp/union/root/proc d。叠加在上面mount -t overlayfs overlayfs /tmp/union/root -o lowerdir=/tmp/union/root,upperdir=/tmp/union/rw e. Chrootchroot /tmp/union/root

现在您可以使用 apt-get 或其他方法(仅从 chrooted 终端)安装软件包。所有更改的文件都存储在@/tmp/union/rw。从那里获取文件。 3. 使用手动收集的包 使用包管理器收集依赖项。例如 apt-get install package --print-uris 将打印 dep 包的下载 uris。使用此 uri 下载包并解压缩所有 (dpkg -x 1.deb ./extracted)。

B.清理垃圾文件 收集文件后删除不需要的文件

C.打包文件 1. 使用 appImageAssistance 如果您手动收集文件,则需要将 appname.desktop 文件从 ./usr/share/applications 复制到目录树的根目录。还可以从另一个应用程序复制名为 AppRun 的文件或从 AppDirAssistance 中提取它。 2. 使用收集的文件制作 .deb 或 .rpm。

【讨论】:

aufs 需要内核升级和其他类型的诡计,而 unionfs-fuse 有很多问题,我唯一能做到的就是每次我尝试挂载一些目录时都冻结盒子。 哪个操作系统,年份?。以上所有内容在我的 Ubuntu 12.10 中运行良好。【参考方案4】:

问题主要在于确保您的客户已安装您的软件包运行所需的所有标准上游发行版软件包吗?

如果是这种情况,那么我认为最直接的解决方案是利用 yum 和 apt 基础架构来让这些工具跟踪并安装必要的先决条件包。

如果您提供具有完整 pre-req 规范的本机 yum/apt 存储库(您显然已经完成了艰苦的工作)。然后标准的系统安装工具会负责其余的工作。有关为 yum/apt 创建个人存储库的更多信息,请参阅下面的链接。

对于离线客户,您可以为您的软件提供媒体,以及上游发行版的mirror 或mirror 子集,以及将它们添加到yum config/apt config 的说明。

百胜 Creating a Yum Repository 在 Fedora 部署指南中

适合 How To Setup A Debian Repository 在 Debian Wiki 上

【讨论】:

没有网络访问。可以在 cd 或其他媒体上发布分发,但同样也可以使用一个包而不是三个不同的包。【参考方案5】:

因此,您的客户永远不会安装任何其他软件,这些软件可能会指定您正在遍历的那些依赖项的不同版本,对吧?

如果你想走那么远,为什么不创建自己的发行版?

或者你可以只给他们一堆包和一个执行rpm -i dep1 dep2 yourpackage的脚本

【讨论】:

说为什么不创建自己的发行版并不是很有帮助,也没有理由进行全面的发行版。给他们一堆包和一个脚本可以工作,但如果我要这样做,那么最好将整个东西打包成一个而不是 X、Y、Z 包。

docker从入门到放弃(代码片段)

...一些配置参数(如匿名卷、环境变量、用户等)。??镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的 查看详情

docker

...成docker镜像,只要将这个docker镜像提供给测试和线上即可构建出相同的环境,在代码部署上我们可以利用docker数据卷将本地项目目录文件直接挂载到测试环境中。3、docker的原理docker是利用Linux内核虚拟机化技术(LXC),提供轻量... 查看详情

Maven构建失败校验和差异

】Maven构建失败校验和差异【英文标题】:MavenbuildtoFailforchecksumdifference【发布时间】:2013-11-0619:27:51【问题描述】:我试图阻止发布版本覆盖。选项之一是检查校验和,如果它不同(这意味着-同名的新文件),则构建失败。有... 查看详情

docker

docker容器虚拟化平台1.什么是容器容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁.隔离的环境拥有自己的系统文件,ip地址,主机名等系统文件:kvm虚拟机,linux,系统文件程序:代码,命令进程:正在运行的程序,代码运... 查看详情

busybox构建根文件系统和制作ramdisk

...nbsp;定制根文件系统的方法很多,最常用的是使用BusyBox来构建定制根文件系统。它集成压缩了Linux的许多工具和命令,可以使用户迅速方便地建立一套相对完整、功能丰富的文件系统,其中包括大量常用的应用程序。下面详细介... 查看详情

markdown构建多用户隔离的jupyterlab单服务器原生环境(代码片段)

查看详情

docker入门lxcwindowscontainer和hyper知识基础实用情况(代码片段)

...的root文件系统进程隔离:每个容器都运行在自己的进程环境中网络隔离:容器件的虚拟网络接口和IP地址都是分开的资源隔离和分组:使用cgroup将CPU和内存之类的资源独立分配给每个容器windows容器主要特点:(https://docs 查看详情

docker容器相关技术

...root文件系统(2)进程隔离:每个容器都运行在自己的进程环境中(3)网络隔离:容器间的虚拟网络接口和IP地址都是分开的(4)资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器查看系统中是否安装curl:whereis... 查看详情

通过命令验证docker容器相当一个轻量级的linux运行环境,且每个容器内都有一个属于自己的文件系统,容器之间相互隔离

通过命令验证docker容器相当一个轻量级的Linux运行环境,且每个容器内都有一个属于自己的文件系统,容器之间相互隔离通过命令验证docker容器相当一个轻量级的Linux运行环境,且每个容器内都有一个属于自己的文件系统,容器... 查看详情

1nacos配置中心源码解析之集成springcloud(代码片段)

...置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。1、基本架构及概念Nacos支持服务发现与服务的... 查看详情

AppDomain 隔离问题

...时间】:2012-05-2118:13:33【问题描述】:我以这样一种方式构建了一个后端,将业务逻辑放置在运行时加载的dll中。使用ShadowCopyFiles=true和文件系统监控,我可以在不重新启动主机进程的情况下修改业务逻辑。到目前为止一切都很... 查看详情

Nix派生中的隔离临时文件

...于在Nix派生中处理临时文件的信息。我找到了$TMP和$TMPDIR环境变量,但它们都指向/tmp,这是系统全局的。pkgs?import<nixpkgs>:pkgs.stdenv.mkDerivationpname="show-t 查看详情

Python中的隐式模块搜索?

...发平台的可移植性问题,但有些部分我不明白。我一直在构建虚拟环境,但没有看到将虚拟环境复制到主机所需的完全隔离(假设主机没有安装python)问题是我要构建一个与系统不完全隔离的平台PP--bin/py 查看详情

文件与目录差异对比方法

环境:Python2.6.6linux系统用到的模块:filecmpfilecmp提供了:单文件对比,多文件对比,目录对比单文件对比:采用filecmp.cmp(f1,f2[,shallow])方法,比较文件名为f1和f2的文件的内容,相同返回True,不相同返回False,shallow默认是True,... 查看详情

基于busybox构建文件系统(代码片段)

0.前提        开发机ubuntu上已经搭建好了NFS服务器,《搭建NFS服务器》。1.busybox源码下载和编译(1)busybox是一个开源项目,各个版本差异不大,版本新旧无所谓。下载busybox可以去linuxidc等镜像网站,也可以去www... 查看详情

入门、快速搭建docker分布式项目环境

...r1.更快速的交付和部署开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。2.高效部署和扩容Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云... 查看详情

隔离环境中的对象关系模型 (ORM)

】隔离环境中的对象关系模型(ORM)【英文标题】:ObjectRelationalModels(ORM)inasegregatedenvironment【发布时间】:2012-03-2602:07:49【问题描述】:我有兴趣为现有系统使用对象关系映射器,该系统是ASP.NET客户端、ASP.NETWeb服务中间层和Oracle... 查看详情

vagrant使用简介

前言Vagrant是什么??????是一款用来构建虚拟开发环境的工具,它底层支持VirtualBox、VMware甚至AWS作为虚拟机系统。Vagrant能做什么?统一开发环境。一次配置打包,统一分发给团队成员,统一团队开发环境,解决诸如“编码问题”... 查看详情