CN113986395B - 一种linux系统下应用依赖自包含技术的打包方法 - Google Patents
一种linux系统下应用依赖自包含技术的打包方法 Download PDFInfo
- Publication number
- CN113986395B CN113986395B CN202111313962.9A CN202111313962A CN113986395B CN 113986395 B CN113986395 B CN 113986395B CN 202111313962 A CN202111313962 A CN 202111313962A CN 113986395 B CN113986395 B CN 113986395B
- Authority
- CN
- China
- Prior art keywords
- file
- mount
- linux
- program
- dependent
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Abstract
本发明属于计算机软件领域,尤其是涉及一种linux系统下应用依赖自包含技术的打包方法,所述方法包括步骤:创建squashfs文件;启动systemd‑mount自动挂载服务完成挂载点的自动创建;运行入口控制脚本,通过对系统环境的检测将环境变量导向所述挂载点的目录下的文件系统;启动Preloader模组,实时动态修改所述环境变量为挂载点文件系统内的动态链接器的路径。本发明的有益效果是不依赖系统中原有的库文件,完全隔绝系统软件包升级对自依赖包内部环境的影响,不影响系统本身的环境;能够与系统现有的软件包互动,可以调用系统自带的软件如浏览器等,可以被系统中的软件调用;支持跨发行版发布运行软件。
Description
技术领域
本发明属于计算机软件领域,尤其是涉及一种linux系统下应用依赖自包含技术的打包方法。
背景技术
linux操作系统发行版中,每个发行版都会根据自己的发行周期更新、迭代自己的系统,每次迭代都会发布一套全新的软件包集合,这些变化导致了不同版本之间的软件包由于依赖关系的变更很难跨版本运行,特别是i386架构的应用在当前主流的x86_64环境下对经常出现依赖包缺失或版本不匹配等依赖问题,在自依赖环境下其最基础、最关键的依赖包libc6:i386更是与系统中原有的libc6:i386略有差异不同就会造成程序运行错误。
目前linux发行版中常见的现有方法列举如下:
使用容器技术实现,例如flatpak、snap;
AppImage,每个AppImage都包含应用程序以及应用程序运行所需的所有文件。
使用容器技术实现有以下缺点:
1.flatpak、snap这类采用容器技术的工具,通过容器技术屏蔽了系统版本的差异,在容器内安装了与发行版类似系统版本,占用了大量磁盘空间,浪费系统资源。
2.flatpak、snap应用商店掌握在国外发行版厂商的手中,国内用户安装或提交应用及其不便,用户制作、安装自己的软件包非常困难。
3.由于容器的限制,应用开发存在多种限制,例如容器内应用无法调用系统自带输入法,系统自带浏览器等,虽然发行商已经推行多年,但依然很少被用户接受。
4.同样是由于容器技术隔离限制,容器内应用无法使用容器外最新的软件资源,导致发行版没有更新的理由。
AppImage有以下缺点:
1.AppImage程序在运行时解压程序包到/tmp目录下,当程序运行结束时删除解压生成的临时文件,在软件包比较大时效率低下。
2.AppImage程序在每次运行时都会产生单独的实例,这就导致当运行多个程序实例时,会同步产生大量的重复实例,造成系统资源不必要的浪费。
3.每个AppImage程序都是孤立的存在,不能被系统其他应用调用,也不能调用系统其他应用,不归系统已有的程序安装器的管理,容易造成系统混乱。
4.i386架构的包会依赖系统中的libc:i386,跨平台特性受影响。
发明内容
为解决上述技术问题,本发明提供一种计算机软件类,尤其适合一种linux系统下应用依赖自包含技术的打包方法。
本发明采用的技术方案是:一种linux系统下应用自依赖包技术的打包方法,其特征在于,所述方法包括步骤:
创建squashfs文件,所述squashfs文件是依赖文件的集合,可将依赖链上的软件包打包到同一位置;
启动systemd-mount自动挂载服务完成挂载点的自动创建,所述systemd-mount自动挂载服务通过systemd机制将squashfs文件自动挂载到指定的挂载点;
运行入口控制脚本,所述入口控制脚本通过对系统环境的检测将环境变量导向所述挂载点的目录下的文件系统;
启动Preloader模组,所述Preloader模组可实时动态修改所述环境变量为挂载点文件系统内的动态链接器的路径;
根据所述动态链接器完成依赖动态库的自动加载并运行应用。
进一步地,所述启动Preloader模组,所述Preloader模组可实时动态修改所述环境变量为挂载点文件系统内的动态链接器的路径包括步骤:
修改动态链接程序elf文件中的路径;
根据所述入口控制脚本导出的环境变量,将绝对路径“/lib/ld-linux.so.2”动态修改为挂载点文件系统内的动态链接器的路径;
所述动态链接器根据自身逻辑完成相关依赖动态库的自动加载;
将进程控制权交由用户程序的入口,完成用户程序的运行。
进一步地,所述启动systemd-mount自动挂载服务完成挂载点的自动创建,所述systemd-mount自动挂载服务通过systemd机制将squashfs文件自动挂载到指定的挂载点包括步骤:
创建并启动一个临时的.mount单元;
将.mount文件中指定的WHAT文件系统挂载至WHERE目录。
接受所述systemd文件对各个单元的统一管理。
进一步地,所述入口控制脚本位于系统/usr/bin目录下,运行wine时在terminal终端下输入脚本名称和/或绝对路径,bash将会安装脚本中既定的指令序列完成环境变量设置。
进一步地,所述Preloader模块采用wine-perloader程序,所述wine-perloader程序运行包括步骤:
所述wine-preloader程序解析所述elf文件,将其mmap到内存中;
填充所述elf文件数据结构,将所述elf文件的数据结构中的NEEDED字段的路径修改为所述环境变量中的指定的路径;
将动态链接文件mmap到内存中;
跳转至ld-linux.so.2程序所在的内存位置;
将控制权交给所述动态链接器;
进一步地,所述动态链接器的位置由所述elf可执行文件决定,在动态链接的所述elf文件中存在.interp段,所述.interp段保存一个字符串,所述字符串为可执行文件所需要的动态链接器链接。
进一步地,linux动态链接器的运行包括步骤:
内核通过装载所述elf可执行文件后返回用户空间,将控制权交由程序的入口执行;
对于所述动态链接器的可执行文件,所述内核会分析所述动态链接器的地址,将所述动态链接器映射至进程地址空间,将控制权交由所述动态链接器;
进一步地,所述ld-linux.so.2程序在linux环境下可寻找并加载所需要的库文件,将控制权交由应用的启示入口。
本发明具有的优点和积极效果是:
本发明通过各个模块的相互配合,使得每个安装包都包含应用程序以及应用程序运行所需的所有依赖文件,可做到
1、不依赖系统中原有的库文件,如libc6:i386等,完全隔绝系统软件包内部环境的影响,依赖自包含,不影响系统本身的环境;
2、能够与系统现有的软件包互动,可以调用系统自带的软件如浏览器等,也可以被系统中的软件调用;
3、由于依赖自包含,支持跨发行版发布运行软件。
附图说明
图1是本发明实施例的流程示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互结合,下面将参考附图并结合实施例来详细说明本发明。
为了使本领域技术人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明提供一种linux系统下应用依赖自包含技术的打包方法,如图1所示,是根据本发明实施例提供的一种linux系统下应用依赖自包含技术的打包方法的流程图,自依赖包主要由四部分组成,
squashfs文件:包含应用及其运行所需要的所有依赖链上的库的相关文件,squashfs文件系统是只读压缩文件系统,既能保证软件包的安全性防止被篡改,又降低了对系统资源的占用空间;
systemd-mount自动挂载服务:通过systemd机制保证squashfs文件能够自动挂载到指定的挂载点;
Preloader模块:在装载应用及其动态链接库时实时动态的修改动态链接程序(elf文件)中的INTERP段,即动态链接器的路径,将绝对路径“/lib/ld-linux.so.2”根据入口控制脚本导出的环境变量动态修改为挂载点文件系统内动态链接器的路径;
入口控制脚本:用来进行环境检测、环境变量控制,引导应用运行等功能,入口控制脚本位于系统/usr/bin目录下,当用户需要运行wine时,在terminal终端下输入脚本名称ukylin-wine或绝对路径/usr/bin/ukylin-wine,bash将会安装脚本中既定的指令序列完成环境变量设置以及程序的运行。
在linux系统启动时或自依赖包安装后,由systemd-mount自动挂载服务完成挂载点的自动创建,并将squashfs文件自动挂载到指定的挂载点“/run/wine”,完成程序运行环境的准备工作;
当用户运行自依赖包软件时,首先运行入口控制脚本,入口控制脚本进行环境检测、并将系统的环境变量全部指向挂载点目录下的文件系统,之后指定Preloader模块装载、运行用户指定的应用程序;
Preloader模块在本系统中指wine-preloader程序,wine-preloader解析elf文件,将其mmap到内存中,并填充elf相关数据结构,后将elf数据结构中的NEEDED字段的路径修改为环境变量中指定的路径,将该动态链接文件mmap到内存中合适的位置;
最后跳转到ld-linux.so.2程序所在内存位置,将控制权交给动态链接加载器,直至用户程序的运行。
对运行过程中各部分的说明:
当一个需要动态链接的应用被操作系统加载时,系统必须要进行定位然后加载应用所需要的所有动态库文件,在linux环境下,是由ld-linux.so.2来负责完成,ld-linux.so.2会寻找然后加载所有需要的库文件,再将控制权交给应用的起始入口。
systemd-1号进程是linux kernel进入用户态的第一个进程,linux中的所有进程都是由1号进程创建运行的,在系统启动完成后,1号进程将变为守护进程监视系统其他进程的运行;
systemd-mount作为systemd的一个组件,systemd会在合适的实际用systemd-mount创建并启动一个临时.mount或.automount单元,将.mount文件中指定的WHAT文件系统挂载到WHERE目录。systemd-mount并不立即直接执行挂载操作,而是将挂载操作封装到一个临时的.mount或.automount单元中,以接受systemd对各种单元的统一管理,从而可以实现将挂载操作自动按照依赖关系排入任务队列、自动处理依赖关系、挂载前进行文件系统检查、按需自动挂载等任务。
inerp段,动态链接器的位置由elf可执行文件决定,在动态链接的elf可执行文件中,存在.interp段,.interp段的内容是保存一个字符串,这个字符串是可执行文件所需要的动态链接器路径。
实施例1:
以wine项目为例讲解实施细节:
wine(“Wine Is Not an Emulator”)是一个能够在多种POSIX-compliant操作系统(诸如linux,macOS及BSD等)上运行Windows应用的兼容层。wine不是像虚拟机或者模拟器一样模拟内部的Windows逻辑,而是将Windows API调用翻译为东他爱的POSIX调用,免除了性能和其他一些行为的内存占用,让你能够干净地集合Windows应用到用户的桌面。
由于需要模拟几乎全部的Windows API导致wine的依赖关系极其复杂,需要使用到包括FreeFont等字体相关、OpenGL、JPEG等图形和图像相关、X11等窗体相关各方面的动态库多达上千个,所以wine应用的依赖关系很难管理,系统升级或软件更换发行版平台都有可能引起功能上的各种不稳定的问题。
通过依次描述构建squashfs文件、systemd-mount自动挂载服务、入口控制脚本、Preloader模块对自依赖包技术完成wine的软件运行进行描述:
squashfs文件是所有依赖文件的集合,构建自依赖包首先要手机应用所有的直接依赖,以及依赖的依赖信息,将所有依赖链上的软件包都下载到同一个位置备用,通过aptitude会自动分析指定包的依赖,并将相关依赖包下载到指定的路径squashfs_cache,后将这些依赖包解压到统一的目录squashfs_root,使用mksquashfs将其只作为squashfs只读压缩文件系统。
systemd-mount自动挂载服务采用如下关键参数:
[Mount]
What=/usr/share/wine/wine.squashfs
Where=/run/wine
Type=squashfs
入口控制脚本主要是进行环境变量的初始化,如指定系统库有限搜索路径,可执行程序优先搜索路径,调用preloader装载自依赖环境的程序,并传递参数等,主要逻辑如下:
#自动处理挂载点
/usr/bin/pkexec/usr/bin/wine-mount
#参数处理
SELF=$(readlink-f"$0")
HERE=/run/wine
PROGRAM=${0##*/}
#动态改变环境变量
export LD_LIBRARY_PATH="$HERE/lib"
exportLD_LIBRARY_PATH="$HERE/lib/i386-linux-gnu":$LD_LIBRARY_PATH
#调用preloader装载自依赖环境的程序
exec$HERE/usr/bin/wine-preloader$HERE/usr/bin/${PROGRAM}"$@"
Perloader模块是自依赖包独立于发行版系统的关键,Preloader先于用户程序和动态链接器而运行,Preloader本身是静态链接程序,在装入/启动其运行时无需装入函数库映像、也无需进行动态链接;
用户程序运行时,首先运行Preloader读取用户程序ELF文件,Preloader模块根据动态链接程序(EFL文件)头,找到一个名为INTERP的特殊字段,它的p_type为PT_INTERP,此字段指定了动态链接加载器(interpreter)的路径。Preloader模块将其从固定字符串绝对路径“/lib/ld-linux.so.2”动态修改为挂载点文件系统内动态链接器的路径“/run/wine/lib/ld-linux.so.2”。然后将该动态链接文件map到内存中合适的位置。最后跳转到ld-linux.so.2程序所在内存位置,将控制权交给动态链接加载器,直至用户程序的运行。
本发明的优点:使用squashfs只读压缩文件系统自动挂载技术,既能保证软件包的安全性防止被篡改,又降低了对系统资源的占用空间;
Preloader动态链接自动加载技术是自依赖包独立于发行版系统的关键,Preloader先于用户程序和动态链接器而运行,根据动态链接程序(EFL文件)头,自动将INTERP特殊字段指定的动态链接加载器(interpreter)的路径动态修改为挂载点文件系统内动态链接器的路径,然后将该动态链接文件map到内存中合适的位置并运行用户程序。
不依赖系统中原因的库文件,如libc6:i386等,完全隔绝系统软件包内部环境的影响,依赖自包含,不影响系统本身的环境;
能够与系统现有的软件包互动,可以调用系统自带的软件如浏览器等,也可以被系统中的软件调用;
由于依赖自包含,支持跨发行版发布、运行软件。
以上对本发明的实施例进行了详细说明,但所述内容仅为本发明的较佳实施例,不能被认为用于限定本发明的实施范围。凡依本发明申请范围所作的均等变化与改进等,均应仍归属于本发明的专利涵盖范围之内。
Claims (8)
1.一种linux系统下应用自依赖包技术的打包方法,其特征在于,所述方法包括步骤:
创建squashfs文件,所述squashfs文件是依赖文件的集合,可将依赖链上的软件包打包到同一位置;
启动systemd-mount自动挂载服务完成挂载点的自动创建,所述systemd-mount自动挂载服务通过systemd机制将squashfs文件自动挂载到指定的挂载点;
运行入口控制脚本,所述入口控制脚本通过对系统环境的检测将环境变量导向所述挂载点的目录下的文件系统;
启动Preloader模组,所述Preloader模组可实时动态修改所述环境变量为挂载点文件系统内的动态链接器的路径;
根据所述动态链接器完成依赖动态库的自动加载并运行应用。
2.根据权利要求1所述的一种linux系统下应用自依赖包技术的打包方法,其特征在于,所述启动Preloader模组,所述Preloader模组可实时动态修改所述环境变量为挂载点文件系统内的动态链接器的路径包括步骤:
修改动态链接程序elf文件中的路径;
根据所述入口控制脚本导出的环境变量,将绝对路径“/lib/ld-linux.so.2”动态修改为挂载点文件系统内的动态链接器的路径;
所述动态链接器根据自身逻辑完成相关依赖动态库的自动加载;
将进程控制权交由用户程序的入口,完成用户程序的运行。
3.根据权利要求1所述的一种linux系统下应用自依赖包技术的打包方法,其特征在于,所述启动systemd-mount自动挂载服务完成挂载点的自动创建,所述systemd-mount自动挂载服务通过systemd机制将squashfs文件自动挂载到指定的挂载点包括步骤:
创建并启动一个临时的.mount单元;
将.mount文件中指定的WHAT文件系统挂载至WHERE目录;
接受所述systemd机制对各个单元的统一管理。
4.根据权利要求1所述的一种linux系统下应用自依赖包技术的打包方法,其特征在于,所述入口控制脚本位于系统/usr/bin目录下,运行wine时在terminal终端下输入脚本名称和/或绝对路径,bash将会安装脚本中既定的指令序列完成环境变量设置。
5.根据权利要求2所述的一种linux系统下应用自依赖包技术的打包方法,其特征在于,所述Preloader模组采用wine-preloader程序,所述wine-preloader程序运行包括步骤:
所述wine-preloader程序解析所述elf文件,将其mmap到内存中;
填充所述elf文件数据结构,将所述elf文件的数据结构中的NEEDED字段的路径修改为所述环境变量中的指定的路径;
将动态链接文件mmap到内存中;
跳转至ld-linux.so.2程序所在的内存位置;
将控制权交给所述动态链接器。
6.根据权利要求2所述的一种linux系统下应用自依赖包技术的打包方法,其特征在于,所述动态链接器的位置由所述elf文件决定,在动态链接的所述elf文件中存在.interp段,所述.interp段保存一个字符串,所述字符串为可执行文件所需要的动态链接器链接。
7.根据权利要求2所述的一种linux系统下应用自依赖包技术的打包方法,其特征在于,linux动态链接器的运行包括步骤:
内核通过装载所述elf文件后返回用户空间,将控制权交由程序的入口执行;
对于所述动态链接器的可执行文件,所述内核会分析所述动态链接器的地址,将所述动态链接器映射至进程地址空间,将控制权交由所述动态链接器。
8.根据权利要求5所述的一种linux系统下应用自依赖包技术的打包方法,其特征在于,所述ld-linux.so.2程序在linux环境下可寻找并加载所需要的库文件,将控制权交由应用的启示入口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111313962.9A CN113986395B (zh) | 2021-11-08 | 2021-11-08 | 一种linux系统下应用依赖自包含技术的打包方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111313962.9A CN113986395B (zh) | 2021-11-08 | 2021-11-08 | 一种linux系统下应用依赖自包含技术的打包方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113986395A CN113986395A (zh) | 2022-01-28 |
CN113986395B true CN113986395B (zh) | 2023-06-23 |
Family
ID=79747128
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111313962.9A Active CN113986395B (zh) | 2021-11-08 | 2021-11-08 | 一种linux系统下应用依赖自包含技术的打包方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113986395B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780950B (zh) * | 2022-06-20 | 2022-09-06 | 中国人民解放军国防科技大学 | 应用软件跨版本兼容运行的方法、系统、装置及存储介质 |
CN116661904B (zh) * | 2023-07-27 | 2023-10-13 | 中电科申泰信息科技有限公司 | 一种基于申威平台的AppImage应用软件打包装置及其方法 |
CN117369865B (zh) * | 2023-12-07 | 2024-04-05 | 麒麟软件有限公司 | 一种GNU linux通用的应用程序打包方法及图形化应用打包器 |
CN117407047B (zh) * | 2023-12-13 | 2024-04-05 | 麒麟软件有限公司 | 一种基于图数据库的linux生态依赖关系图谱构建方法及应用 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10222353A (ja) * | 1997-01-31 | 1998-08-21 | Hitachi Ltd | プログラムの作成方法 |
US8788615B1 (en) * | 2009-10-02 | 2014-07-22 | Adobe Systems Incorporated | Systems and methods for creating and using electronic content that requires a shared library |
CN107577475A (zh) * | 2017-08-22 | 2018-01-12 | 清华大学 | 一种数据中心集群系统的软件包管理方法及系统 |
CN109144575A (zh) * | 2017-06-16 | 2019-01-04 | 北京海誉动想科技股份有限公司 | 跨操作系统运行应用的装置、方法、电子设备和存储器 |
CN111813646A (zh) * | 2020-07-16 | 2020-10-23 | 华北电力大学(保定) | docker容器环境下注入应用探针的方法和装置 |
CN111880808A (zh) * | 2020-08-08 | 2020-11-03 | 徐钊 | 一种Linux操作系统构建和包管理方法 |
-
2021
- 2021-11-08 CN CN202111313962.9A patent/CN113986395B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10222353A (ja) * | 1997-01-31 | 1998-08-21 | Hitachi Ltd | プログラムの作成方法 |
US8788615B1 (en) * | 2009-10-02 | 2014-07-22 | Adobe Systems Incorporated | Systems and methods for creating and using electronic content that requires a shared library |
CN109144575A (zh) * | 2017-06-16 | 2019-01-04 | 北京海誉动想科技股份有限公司 | 跨操作系统运行应用的装置、方法、电子设备和存储器 |
CN107577475A (zh) * | 2017-08-22 | 2018-01-12 | 清华大学 | 一种数据中心集群系统的软件包管理方法及系统 |
CN111813646A (zh) * | 2020-07-16 | 2020-10-23 | 华北电力大学(保定) | docker容器环境下注入应用探针的方法和装置 |
CN111880808A (zh) * | 2020-08-08 | 2020-11-03 | 徐钊 | 一种Linux操作系统构建和包管理方法 |
Non-Patent Citations (3)
Title |
---|
【译】.NET Core 3.0 发布小尺寸 self-contained 单体可执行程序;JRoger;《博客园》;全文 * |
可定制的应用运行环境;阎栋;王屏;李恺威;边哲;;中国科技论文(07);全文 * |
漫谈兼容内核之七:Wine的二进制映像装入和启动;cosmoslife;《CSDN》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113986395A (zh) | 2022-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113986395B (zh) | 一种linux系统下应用依赖自包含技术的打包方法 | |
CN108027722B (zh) | 在编译和部署中动态更新应用 | |
US10824442B2 (en) | Method and apparatus for loading multiple differing versions of a native library into a native environment | |
US6003095A (en) | Apparatus and method for demand loading a dynamic link library | |
US5790856A (en) | Methods, apparatus, and data structures for data driven computer patches and static analysis of same | |
CA2292123C (en) | Method and system for modifying executable code to add additional functionality | |
CN101470621B (zh) | 虚拟机配置系统 | |
CN111399865A (zh) | 一种基于容器技术自动构建目标文件的方法 | |
CN108847950B (zh) | 电子装置、云系统软件自动部署方法及存储介质 | |
US20100205604A1 (en) | Systems and methods for efficiently running multiple instances of multiple applications | |
US7269464B2 (en) | System, method and computer program product for providing an interface for instantiating additional programmable logic controller functionality | |
CN109614165B (zh) | 一种com组件的多版本并行运行方法和装置 | |
US20040268293A1 (en) | Automating the life cycle of a distributed Computing application | |
US11068243B2 (en) | Application stack builder based on node features | |
CN115629971A (zh) | 一种应用的开发系统和开发方法 | |
US6769126B1 (en) | Apparatus and method for demand load analysis | |
US10552135B1 (en) | Reducing a size of an application package | |
Cortesi | Pyinstaller manual | |
CN114490103A (zh) | 一种操作系统接口调用方法、装置以及电子设备 | |
CN116594640A (zh) | 面向risc-v的可扩展分段自动化镜像构建技术 | |
Ceccato et al. | Adding distribution to existing applications by means of aspect oriented programming | |
CN115599499A (zh) | 一种基于容器技术的跨平台软件适配方法 | |
Golemon | Extending and Embedding PHP | |
CN110806876A (zh) | 基于Slitaz的轻量级Linux系统定制方法、装置计算机设备及存储介质 | |
CN115543486B (zh) | 面向无服务器计算的冷启动延迟优化方法、装置和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |