CN115658275A - 一种可执行程序迁移方法、装置与计算设备 - Google Patents

一种可执行程序迁移方法、装置与计算设备 Download PDF

Info

Publication number
CN115658275A
CN115658275A CN202211452078.8A CN202211452078A CN115658275A CN 115658275 A CN115658275 A CN 115658275A CN 202211452078 A CN202211452078 A CN 202211452078A CN 115658275 A CN115658275 A CN 115658275A
Authority
CN
China
Prior art keywords
executable program
program
directory
storage
shared library
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.)
Granted
Application number
CN202211452078.8A
Other languages
English (en)
Other versions
CN115658275B (zh
Inventor
徐小东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Uniontech Software Technology Co Ltd
Original Assignee
Uniontech Software Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Uniontech Software Technology Co Ltd filed Critical Uniontech Software Technology Co Ltd
Priority to CN202211452078.8A priority Critical patent/CN115658275B/zh
Publication of CN115658275A publication Critical patent/CN115658275A/zh
Application granted granted Critical
Publication of CN115658275B publication Critical patent/CN115658275B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明公开了一种可执行程序迁移方法、装置与计算设备,涉及ELF可执行程序的迁移技术领域,目的是为了解决现有的ELF可执行程序迁移技术存在无法兼顾操作难度和可靠性的问题。上述方法包括:在原始设备中创建存储目录;获取待迁移的可执行程序及其运行所需的资源,并复制到存储目录下;创建调用入口程序并存放至存储目录下;将存储目录打包、传输到目标设备中并执行调用入口程序,由调用入口程序判断目标设备与原始设备的CPU架构是否一致;若一致,则利用动态装载器指定共享库的存储路径,基于动态装载器执行可执行程序。本发明由计算机自动完成迁移前的打包过程,并且迁移后的可执行程序运行稳定,不会出现共享库缺失等运行问题。

Description

一种可执行程序迁移方法、装置与计算设备
技术领域
本发明涉及ELF(Executable and Linkable Format,可执行与可链接格式)可执行程序的迁移技术领域,尤其是一种可执行程序迁移方法、装置与计算设备。
背景技术
Linux操作系统使用过程中,经常出现ELF可执行程序无法安装的情况,主要原因有:1、用户不具备超级用户(root)访问权限,导致无法通过软件包管理器进行安装;2、设备没有连接公有网络,无法通过软件包管理器进行安装;3、设备的操作系统版本老旧,软件包仓库中不存在预安装的ELF执行程序。这种情况下,需要将ELF可执行程序从一台设备(原始设备)上迁移到另一台设备(目标设备)上进行安装。
迁移过程可以采用Docker容器来完成,但是使用Docker容器要求目标设备具备容器运行引擎,否则,容器在目标设备上将难以执行。除了这种限制前提之外,该方案还存在下列缺点:1、由于运行容器需要相匹配的Docker镜像,且镜像包含根文件系统,会占用额外的磁盘空间;2、Docker镜像一般存储在远端仓库中,在使用前必须依赖公有网络将其拉取到目标设备上,对于没有网络的环境则无能为力;3、Docker镜像的制作有赖于专业的技术操作人员,操作难度大,普通用户很难完成。
因此,普通用户更倾向于一种简单的迁移方式:将原始设备中的ELF可执行程序复制到目标设备上进行安装。但是,由于Linux操作系统的ELF可执行程序惯常使用共享库(shared library)安装,所以经常会导致共享库缺失、重定位错误和段失败等致命问题。这些问题使得这种通过简单复制ELF可执行程序的迁移方法可靠性差。
综上,上述现有的ELF可执行程序迁移技术存在无法兼顾操作难度和可靠性的问题。
发明内容
为此,本发明提供了一种可执行程序迁移方法、装置与计算设备,以力图解决或者至少缓解上面存在的至少一个问题。
根据本发明的一个方面,提供了一种可执行程序迁移方法,包括:在迁移前的原始设备的系统中创建存储目录;获取待迁移的可执行程序及所述可执行程序运行所需的资源,所述资源包括共享库及动态装载器;将所述可执行程序及所述可执行程序运行所需的资源复制到所述存储目录下;创建所述可执行程序的调用入口程序,并将所述调用入口程序存放至所述存储目录下;将所述存储目录打包,并传输到目标设备的系统中;在目标设备的系统中执行所述调用入口程序,由所述调用入口程序判断所述目标设备的中央处理器架构与所述原始设备的中央处理器架构是否一致;若一致,则利用所述动态装载器指定所述共享库的存储路径,基于所述动态装载器执行所述可执行程序。
可选地,在根据本发明的可执行程序迁移方法中,所述存储目录的根目录下包括第一目录、第二目录和第三目录,所述第一目录用于存储所述可执行程序、所述调用入口程序以及所述动态装载器,所述第二目录用于存储所述共享库,所述第三目录用于存储所述动态装载器。
可选地,在根据本发明的可执行程序迁移方法中,所述获取待迁移的可执行程序及所述可执行程序运行所需的资源包括:采用相应的命令搜索所述可执行程序、所述共享库以及所述动态装载器。
可选地,在根据本发明的可执行程序迁移方法中,所述可执行程序迁移方法还包括:若所述目标设备的中央处理器架构与所述原始设备的中央处理器架构不一致,则调用模拟器来实现所述可执行程序的安装。
可选地,在根据本发明的可执行程序迁移方法中,所述利用所述动态装载器指定所述共享库的存储路径包括:将所述共享库的存储目录传递给所述动态装载器的共享库路径参数;所述基于所述动态装载器执行所述可执行程序包括:由所述动态装载器按照所述共享库路径参数加载所述共享库,以实现所述可执行程序的安装。
可选地,在根据本发明的可执行程序迁移方法中,所述基于所述动态装载器执行所述可执行程序还包括:忽略所述可执行程序的目标文件中所记录的限制条件。
可选地,在根据本发明的可执行程序迁移方法中,所述可执行程序迁移方法还包括:清理所述存储目录。
根据本发明的另一方面,还提供了一种可执行程序迁移装置,包括:目录创建单元,适于在迁移前的原始设备的系统中创建存储目录;资源获取单元,适于获取待迁移的可执行程序及所述可执行程序运行所需的资源,所述资源包括共享库及动态装载器;复制单元,适于将所述可执行程序及所述可执行程序运行所需的资源复制到所述存储目录下;程序创建单元,适于创建所述可执行程序的调用入口程序,并将所述调用入口程序存放至所述存储目录下;打包单元,适于将所述存储目录打包,并传输到目标设备的系统中;调用入口程序执行单元,适于在目标设备的系统中执行所述调用入口程序,由所述调用入口程序判断所述目标设备的中央处理器架构与所述原始设备的中央处理器架构是否一致;以及动态装载器执行单元,适于若一致,则利用所述动态装载器指定所述共享库的存储路径,基于所述动态装载器执行所述可执行程序。
根据本发明的另一方面,还提供了一种计算设备,包括:至少一个处理器和存储有程序指令的存储器;当程序指令被处理器读取并执行时,使得计算设备执行如上的可执行程序迁移方法。
根据本发明的再一方面,还提供了一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行如上的可执行程序迁移方法。
根据本发明的可执行程序迁移方法、装置与计算设备,能够实现以下有益效果中的至少一种:自动完成待迁移可执行程序及运行所需相关资源的打包,不需要手动操作,普通用户即可完成迁移过程,几乎没有学习和时间成本;动态装载器能够准确地加载共享库,不会出现共享库缺失、重定位错误、段失败等运行问题,可靠性好。此外,本发明的可执行程序迁移方法还具有以下优点:打包的资源是可执行程序正常运行必需的资源,精简不臃肿,不额外耗费磁盘空间;迁移过程不依赖公网,使用可移动存储设备也可进行迁移;支持多种CPU架构,如:x86、arm、mips等。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的可执行程序迁移方法的使用场景100的示意图;
图2示出了根据本发明一个实施例的计算设备200的示意图;
图3示出了根据本发明一个实施例的可执行程序迁移方法300的流程图;
图4示出了根据本发明一个实施例的可执行程序迁移装置400的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
针对现有的ELF可执行程序迁移技术存在无法兼顾操作难度和可靠性的问题,本发明提供了一种可执行程序迁移方法,能够自动对待迁移的ELF可执行程序进行打包,将打包后的文件迁移至目标设备后能够实现可执行程序的全程无障碍安装。
图1示出了根据本发明一个实施例的可执行程序迁移方法的使用场景100的示意图。
如图1所示,在使用场景100中,可通过本发明实施例的可执行程序迁移方法将原始设备110中待迁移的可执行程序及相关资源迁移至目标设备120,并在目标设备120上运行可执行程序。
应当指出,本发明对原始设备110和目标设备120的具体种类不作限制。例如,可以实现为桌面电脑、笔记本电脑、处理器芯片、手机、平板电脑等计算设备。
在本发明的实施例中,原始设备110和目标设备120适于执行可执行程序迁移方法。本发明的可执行程序迁移方法300将在下文中详述。
在一个实施例中,本发明的原始设备110和目标设备120均可以实现为一种计算设备,使得本发明的可执行程序迁移方法可以在计算设备中执行。计算设备可以是任意具有存储和计算能力的设备,其例如可以实现为服务器、工作站等,也可以实现为桌面计算机、笔记本计算机等个人配置的计算机,或者实现为手机、平板电脑、智能可穿戴设备、物联网设备等终端设备,但不限于此。
图2示出了根据本发明一个实施例的计算设备200的示意图。需要说明的是,图2所示的计算设备200仅为一个示例,在实践中,用于实施本发明的可执行程序迁移方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图2所示的计算设备200相同,也可以与图2所示的计算设备200不同。实践中用于实施本发明的可执行程序迁移方法的计算设备可以对图2所示的计算设备200的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。
如图2所示,计算设备200包括存储器210和处理器220。
取决于期望的配置,处理器220可以是任何类型的处理,包括但不限于:微处理器(µP)、微控制器(µC)、数字信息处理器(DSP)或者它们的任何组合。
取决于期望的配置,存储器210可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。存储器210可以包括操作系统211、一个或者多个可执行程序212、共享库213、动态装载器214、可执行程序212(在未做特殊说明的情况下,本申请实施例的可执行程序指代ELF可执行程序)安装过程所需要的其他资源215以及执行可执行程序迁移方法300的程序指令216。
计算设备200可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,也可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。当然,计算设备200也可以实现为小尺寸便携(或者移动)电子设备的一部分。在根据本发明的实施例中,计算设备200被配置为执行根据本发明的可执行程序迁移方法300。
根据本发明实施例的一种可执行程序迁移方法300包括:在迁移前的原始设备的系统中创建存储目录;获取待迁移的可执行程序及可执行程序运行所需的资源,资源包括共享库及动态装载器;将可执行程序及可执行程序运行所需的资源复制到存储目录下;创建可执行程序的调用入口程序,并将调用入口程序存放至存储目录下;将存储目录打包,并传输到目标设备的系统中;在目标设备的系统中执行调用入口程序,由调用入口程序判断目标设备的中央处理器架构与原始设备的中央处理器架构是否一致;若一致,则利用动态装载器指定共享库的存储路径,基于动态装载器执行所述可执行程序。
图3示出了根据本发明一个实施例的可执行程序迁移方法300的流程图。方法300在计算设备(例如前述计算设备200)中执行,用于将原始设备110中待迁移的可执行程序及相关资源迁移至目标设备120,并在目标设备120上运行可执行程序。如图3所示,方法300始于310。
在310中,在迁移前的原始设备的系统中创建存储目录。
在原始设备110的操作系统211中创建存储目录,存储目录用于存储待迁移的文件。由于待迁移的文件较多,存储目录可以分为若干个层级,用于存储不同的文件。优选的存储目录结构为:根目录下包括并列的三个目录,分别为第一目录、第二目录和第三目录,其中,第一目录用于存储可执行程序212、调用入口程序以及动态装载器214,第二目录用于存储共享库213,第三目录用于存储动态装载器214。本实施例将在下文对调用入口程序、共享库213以及动态装载器214进行说明。第一目录、第二目录和第三目录下也可以根据实际情况再创建子目录。
例如,原始设备110的操作系统211为Linux系统,CPU架构为x86_64。现欲将原始设备110中的可执行程序wget进行迁移,那么首先创建根目录wget-bundle,根目录wget-bundle用于打包wget实用程序。根目录wget-bundle下至少包括usr、lib以及lib64三个目录,usr下包含bin子目录,lib下包含x86_64-linux-gnu子目录。其中,可执行程序212存储在usr/bin中,共享库213存储在lib/x86_64-linux-gnu中(如果CPU架构是mips,那么共享库213存储位置通常为mips64el-linux-gnuabi64),动态装载器214存储在lib64和usr/bin中。以上存储目录的创建方式考虑了对多种CPU架构的支持,如:x86、arm、mips等,从而可以自动适应ELF可执行程序在不同架构下的运行环境差异,既能提高方法300的通用性,又扩大了目标设备120的应用范围。
需要说明的是,创建存储目录可以采用多种编程语言实现,例如bash shell、C、C++、Python等均可。以bash shell为例,创建存储目录的结构可以采用如下代码实现:
#! /bin/bash
#
# ELF bundler
#
# Usage: elf-bundler <binary>
#
# e.g. elf-bundler wget
# scp wget-bundle.tar.gz user@host:~
# ssh user@host
# tar xf wget-bundle.tar.gz
# cd wget-bundle/usr/bin/
# ./wget
BIN="$1"
BIN_DIST="$BIN-dist"
LD_DIST="ld-dist"
ARCH_TUPLE="$(arch)-linux-gnu"
BUN_DIR="$BIN-bundle"
if [ -z "$BIN" ]; then
echo "Usage: elf-bundler <binary>"
echo "e.g. elf-bundler wget"
exit 1
fi
if ! which "$BIN" >/dev/null 2>&1; then
echo "$BIN: not found"
exit 1
fi
if [ -d "$BUN_DIR" ]; then
echo "$BUN_DIR is exist"
exit 1
fi
# prepare directories
mkdir -p "$BUN_DIR/lib64"
mkdir -p "$BUN_DIR/lib/$ARCH_TUPLE"
mkdir -p "$BUN_DIR/usr/bin"
上述代码首先创建了根目录$BUN_DIR,然后在$BUN_DIR下又创建了$BUN_DIR/lib64、$BUN_DIR/lib/$ARCH_TUPLE以及$BUN_DIR/usr/bin。上述代码需要传递两个变量,一个是$BUN_DIR ,另一个是$ARCH_TUPLE 。$BUN_DIR为根目录,$ARCH_TUPLE为当前设备的CPU架构信息,如:x86_64-linux-gnu。
接下来,在320中,获取待迁移的可执行程序212及可执行程序212运行所需的资源,资源包括共享库213及动态装载器214。
本发明对获取原始设备110中待迁移的可执行程序212、共享库213以及动态装载器214的方式不做限定,例如,可以采用相关命令进行查找。
以共享库213为例,可通过ldd程序查找,ldd程序通过将LD_TRACE_LOADED_OBJECTS环境变量设为1来调用动态装载器214,从而查找并载入动态依赖(即共享库213)。当解析共享依赖时,动态装载器214先检查每个依赖字符串是否包含斜杆(/):若包含,则将依赖字符串视为路径名,并用该路径名来载入共享库213;若不包含,则按如下顺序搜索共享库213:
(1)使用LD_LIBRARY_PATH环境变量来搜索共享库213;
(2)在DT_RUNPATH动态节属性所指定的目录下搜索共享库213;
(3)按照/etc/ld.so.cache缓存文件所记录的共享库存储路径来搜索共享库213;
(4)在默认路径/lib下搜索共享库213,若搜索不到,则在/usr/lib下搜索共享库213。
按照以上方法搜索到的结果同时包含了共享库213和动态装载器214,接下来需要对搜索结果进行过滤处理。动态装载器214通常具有ld前缀,而共享库213则包含lib前缀,可以根据这一特点区分共享库213和动态装载器214,然后将共享库213存放至相应的目录下。此外,搜索结果还包含了linux-vdso,linux-vdso为虚拟动态共享对象,由内核自动映射到所有用户态应用程序的地址空间,也需过滤掉。
320中获取的资源是满足迁移后可执行程序212能够正常运行的必须的资源,也是最少的资源,相比Docker容器方案中打包完整的根文件系统而言,方法300更加精简,不会消耗额外的磁盘空间。
除待迁移的可执行程序212、共享库213、动态装载器214外,还需要获取可执行程序212的man手册页、文档、图标等其他资源215,man手册和文档是可执行程序212的操作说明,图标属于可执行程序212的附加资源,这些资源都需要与可执行程序212一并打包迁移。此外,如果可执行程序212需要在德语、法语等环境使用,那么,还需要从原始设备110中获取多语言翻译文件,并将多语言翻译文件与可执行程序212一并打包迁移。可执行程序212的man手册页、文档、图标以及多语言翻译文件可以通过包管理器(如:dpkg)进行查找。
接下来,在330中,将可执行程序212及可执行程序212运行所需的资源复制到存储目录下。
优选的方式是,将待迁移的可执行程序212、调用入口程序以及动态装载器214复制到第一目录下,将共享库213复制到第二目录下,将动态装载器214复制到第三目录下。
以上述bash shell创建的存储目录为例,查找待迁移的可执行程序212($BIN变量)并将其拷贝到目录usr/bin中可采用如下代码实现:
cp "$(which "$BIN")" "$BUN_DIR/usr/bin/$BIN_DIST"
以上代码中,利用which程序查询待迁移的可执行程序212,并将查询到的可执行程序212以$BIN-dist为名进行保存(例如wget-dist)。
查找动态装载器214($LD_LINUX变量)并以$LD_DIST为名将其拷贝到目录lib64和usr/bin中可采用如下代码实现:
LD_LINUX="$(ldd "$(which "$BIN")" | grep -E '^\s/lib' | awk '{print $1}')"
cp "$LD_LINUX" "$BUN_DIR/lib64"
cp "$LD_LINUX" "$BUN_DIR/usr/bin/$LD_DIST"
查找共享库213并将其拷贝到目录lib/$ARCH_TUPLE中可采用如下代码实现:
ldd "$(which "$BIN")" |
grep -Ev '^\s/lib|linux-vdso' |
awk '{print $3}' |
xargs -I '{}' cp '{}' "$BUN_DIR/lib/$ARCH_TUPLE"
接下来,在340中,创建可执行程序212的调用入口程序,并将调用入口程序存放至存储目录下。
调用入口程序以可执行程序212的名称来命名,并保存到usr/bin目录中,以便在目标设备120上执行。调用入口程序在目标设备120中运行时所实现的功能如下:首先判断目标设备120的中央处理器架构与原始设备110的中央处理器架构是否一致;若一致,则调用动态装载器214来实现可执行程序212的安装;若不一致,则调用QEMU模拟器来实现可执行程序212的安装。
迁移到目标设备120中的可执行程序212在运行过程中,可以通过LD_LIBRARY_PATH环境变量来设置共享库213的存储路径,但采用这种方式有可能被第三方恶意地在路径中加入一些不安全的内容,存在安全隐患,因此,本发明实施例创建了调用入口程序,利用原动态装载器来指定共享库213等资源的存储路径,从而确保迁移的可执行程序212在运行时稳定可靠。在目标设备120中,通过exec命令结合动态装载器214来执行可执行程序212。若原始设备110与目标设备120的CPU架构不一致,则通过qemu-$ARCH-static(如:qemu-aarch64-static,针对arm架构)模拟器调用执行,以便应对跨架构平台的ELF可执行程序的迁移。
可执行程序212的调用入口程序可以采用以下代码实现:
if [ "\$SRC_ARCH" == "\$DEST_ARCH" ]; then
exec "\$LD" --library-path "\$LIB_PATH" --inhibit-rpath "" "\$BIN" "\$@"
else
exec "qemu-\$DEST_ARCH-static" "\$LD" --library-path "\$LIB_PATH"--inhibit-rpath "" "\$BIN" "\$@"
fi
代码中的$LIB_PATH变量表示共享库的存放路径,$BIN表示可执行程序212,$@表示命令行参数。上述代码对原始设备110的CPU架构($SRC_ARCH)和迁移后的目标设备120的CPU架构($DEST_ARCH)进行判断,若二者一致,则按照预设的搜索路径调用动态装载器214来执行;若不相同则调用QEMU来模拟执行。可执行程序212和/或共享库213包含了目标文件,目标文件记录了一些限制条件,若要满足这些限制条件,动态装载器214只能以默认的动态装载方式。但是可执行程序212迁移至目标设备120后,程序运行环境发生变化,因此需要对动态装载器214的动态装载方式做出改变。调用入口程序中设定了可执行程序212、动态装载器214以及共享库的搜索路径(即存放位置),在目标设备120与原始设备110具有相同的CPU架构的情况下,按照调用入口程序中设定的动态装载器214的搜索路径($LD)调用动态装载器214,动态装载器214按照调用入口程序中设定的共享库213的搜索路径($LIB_PATH)去调用动态链接的共享库213。应用程序需要适应不同的使用场景,在不同的场景下,调用入口程序通过“$@”对应用程序的一些默认行为做出改变,以使应用程序能够在目标设备120中正常运行。
为了解决可执行程序运行时产生的共享库缺失、重定位错误、段失败等问题,在调用入口程序中设定动态装载器的共享库路径参数“--library-path”为共享库213的实际存储路径($LIB_PATH),即,将“$LIB_PATH”传递给“--library-path”,动态装载器214按照“--library-path”能够准确无误地到搜索到共享库213并将动态链接的共享库213加载到内存中。此外,调用入口程序还引入了“--inhibit-rpath”,可执行程序212的目标文件中的限制条件(例如rpath)是可执行程序212在构建时写入的,而且是固定的,但是程序运行环境发生变化时,这些信息可能会对目标设备120环境下动态链接的加载产生干扰,“--inhibit-rpath”的功能是忽略掉这些限制条件,跳过对这些条件的检查过程,使可执行程序212能够在新的环境下正常运行。
在目标设备120与原始设备110 CPU架构不同的情况下,在模拟器的环境下去调用动态装载器214。
接下来,在350中,将存储目录打包,并传输到目标设备120的系统中。
打包是指将存储目录进行压缩处理,生成一个压缩包,压缩包可采用.tar.gz格式(例如wget-bundle.tar.gz),打包过程可以通过以下代码实现:
tar czf "$BUN_DIR.tar.gz" "$BUN_DIR"
上述代码中,tar命令在每一个Linux系统上都存在,不需要root用户权限和连接公网即可正常提取压缩包里的文件内容,能够确保迁移过程平滑进行,实现了实简单灵活的ELF可执行程序的迁移。
将压缩包通过网络或可移动存储设备迁移至目标设备120,然后在目标设备120上对压缩包进行解压缩处理,并将解压缩得到的文件存储到usr/bin目录下(或设置PATH环境变量),即可正常运行可执行程序212。
由于已经生成了压缩包,原始设备110的存储目录已经失去作用,可以采用以下代码对其进行删除操作:
rm -r "$BUN_DIR"
接下来,将压缩包迁移到目标设备120中。迁移方式可以是通过网络传输,也可以通过U盘等可移动存储设备进行拷贝。
接下来,在360中,在目标设备120的系统中执行调用入口程序,由调用入口程序判断目标设备的中央处理器架构与原始设备的中央处理器架构是否一致。
根据340,调用入口程序需要判断目标设备120与原始设备110的CPU架构是否一致,并根据判断结果选取可执行程序212的安装方式,安装方式包括调用动态装载器214安装和调用模拟器安装。
如果目标设备120与原始设备110的CPU架构一致,则进入370。
在370中,利用动态装载器214指定共享库213的存储路径,基于所述动态装载器214执行可执行程序212。
利用动态装载器214指定共享库213的存储路径是指在调用入口程序运行过程中,将共享库213的存储目录传递给动态装载器214的共享库路径参数,以便在调用动态装载器214安装可执行程序212时,能够按照共享库路径参数去加载动态链接。
如果360的判断结果为目标设备120与原始设备110的CPU架构不一致,则调用模拟器来实现可执行程序212的安装。这里的模拟器指代QEMU模拟器。QEMU模拟器被调用后,在模拟器的环境下去调用动态装载器214,然后利用动态装载器214指定共享库213的存储路径是指在调用入口程序运行过程中,将共享库213的存储目录传递给动态装载器214的共享库路径参数,以便在调用动态装载器214安装可执行程序212时,能够按照共享库路径参数去加载动态链接。
本发明的实施例还提供了一种可执行程序迁移装置400,该装置能够执行如上文所描述的可执行程序迁移方法300的处理。下面,结合图4来描述上述可执行程序迁移装置400。
如图4所示,可执行程序迁移装置400包括目录创建单元410、资源获取单元420、复制单元430、程序创建单元440、打包单元450、调用入口程序执行单元460以及动态装载器执行单元470。
目录创建单元410适于在迁移前的原始设备的系统中创建存储目录。
资源获取单元420适于获取待迁移的可执行程序及所述可执行程序运行所需的资源,所述资源包括共享库及动态装载器。
复制单元430适于将所述可执行程序及所述可执行程序运行所需的资源复制到所述存储目录下。
程序创建单元440适于创建所述可执行程序的调用入口程序,并将所述调用入口程序存放至所述存储目录下。
打包单元450适于将所述存储目录打包,并传输到目标设备的系统中。
调用入口程序执行单元460适于在目标设备的系统中执行所述调用入口程序,由所述调用入口程序判断所述目标设备的中央处理器架构与所述原始设备的中央处理器架构是否一致。
动态装载器执行单元470适于若所述目标设备的中央处理器架构与所述原始设备的中央处理器架构一致,则利用所述动态装载器指定所述共享库的存储路径,基于所述动态装载器执行所述可执行程序。
根据一种实现方式,所述存储目录的根目录下包括第一目录、第二目录和第三目录,所述第一目录用于存储所述可执行程序、所述调用入口程序以及所述动态装载器,所述第二目录用于存储所述共享库,所述第三目录用于存储所述动态装载器。动态装载器存储在第一目录是为了遵循操作系统默认的路径,存储在第三目录是为了供调用入口程序调用。
根据一种实现方式,所述获取待迁移的可执行程序及所述可执行程序运行所需的资源包括:采用相应的命令搜索所述可执行程序、所述共享库以及所述动态装载器。
根据一种实现方式,所述可执行程序迁移装置400还包括:模拟器执行单元,适于若所述目标设备的中央处理器架构与所述原始设备的中央处理器架构不一致,则调用模拟器来实现所述可执行程序的安装。
根据一种实现方式,所述利用所述动态装载器指定所述共享库的存储路径包括:将所述共享库的存储目录传递给所述动态装载器的共享库路径参数;所述基于所述动态装载器执行所述可执行程序包括:由所述动态装载器按照所述共享库路径参数加载所述共享库,以实现所述可执行程序的安装。
根据一种实现方式,所述基于所述动态装载器执行所述可执行程序还包括:忽略所述可执行程序的目标文件中所记录的限制条件。
根据一种实现方式,所述可执行程序迁移装置400还包括:清理单元,适于清理所述存储目录。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的可执行程序迁移方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的优选实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。

Claims (10)

1.一种可执行程序迁移方法,包括:
在迁移前的原始设备的系统中创建存储目录;
获取待迁移的可执行程序及所述可执行程序运行所需的资源,所述资源包括共享库及动态装载器;
将所述可执行程序及所述可执行程序运行所需的资源复制到所述存储目录下;
创建所述可执行程序的调用入口程序,并将所述调用入口程序存放至所述存储目录下;
将所述存储目录打包,并传输到目标设备的系统中;
在目标设备的系统中执行所述调用入口程序,由所述调用入口程序判断所述目标设备的中央处理器架构与所述原始设备的中央处理器架构是否一致;
若一致,则利用所述动态装载器指定所述共享库的存储路径,基于所述动态装载器执行所述可执行程序。
2.如权利要求1所述的可执行程序迁移方法,其中,所述存储目录的根目录下包括第一目录、第二目录和第三目录,所述第一目录用于存储所述可执行程序、所述调用入口程序以及所述动态装载器,所述第二目录用于存储所述共享库,所述第三目录用于存储所述动态装载器。
3.如权利要求1或2所述的可执行程序迁移方法,其中,所述获取待迁移的可执行程序及所述可执行程序运行所需的资源包括:
采用相应的命令搜索所述可执行程序、所述共享库以及所述动态装载器。
4.如权利要求1所述的可执行程序迁移方法,其中,所述可执行程序迁移方法还包括:
若所述目标设备的中央处理器架构与所述原始设备的中央处理器架构不一致,则调用模拟器来实现所述可执行程序的安装。
5.如权利要求1所述的可执行程序迁移方法,其中,
所述利用所述动态装载器指定所述共享库的存储路径包括:
将所述共享库的存储目录传递给所述动态装载器的共享库路径参数;
所述基于所述动态装载器执行所述可执行程序包括:
由所述动态装载器按照所述共享库路径参数加载所述共享库,以实现所述可执行程序的安装。
6.如权利要求5所述的可执行程序迁移方法,其中,所述基于所述动态装载器执行所述可执行程序还包括:
忽略所述可执行程序的目标文件中所记录的限制条件。
7.如权利要求1所述的可执行程序迁移方法,其中,所述可执行程序迁移方法还包括:
清理所述存储目录。
8.一种可执行程序迁移装置,包括:
目录创建单元,适于在迁移前的原始设备的系统中创建存储目录;
资源获取单元,适于获取待迁移的可执行程序及所述可执行程序运行所需的资源,所述资源包括共享库及动态装载器;
复制单元,适于将所述可执行程序及所述可执行程序运行所需的资源复制到所述存储目录下;
程序创建单元,适于创建所述可执行程序的调用入口程序,并将所述调用入口程序存放至所述存储目录下;
打包单元,适于将所述存储目录打包,并传输到目标设备的系统中;
调用入口程序执行单元,适于在目标设备的系统中执行所述调用入口程序,由所述调用入口程序判断所述目标设备的中央处理器架构与所述原始设备的中央处理器架构是否一致;以及
动态装载器执行单元,适于若一致,则利用所述动态装载器指定所述共享库的存储路径,基于所述动态装载器执行所述可执行程序。
9.一种计算设备,包括:
至少一个处理器和存储有程序指令的存储器;
当所述程序指令被所述处理器读取并执行时,使得所述计算设备执行如权利要求1-7中任一项所述的可执行程序迁移方法。
10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-7中任一项所述的可执行程序迁移方法。
CN202211452078.8A 2022-11-21 2022-11-21 一种可执行程序迁移方法、装置与计算设备 Active CN115658275B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211452078.8A CN115658275B (zh) 2022-11-21 2022-11-21 一种可执行程序迁移方法、装置与计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211452078.8A CN115658275B (zh) 2022-11-21 2022-11-21 一种可执行程序迁移方法、装置与计算设备

Publications (2)

Publication Number Publication Date
CN115658275A true CN115658275A (zh) 2023-01-31
CN115658275B CN115658275B (zh) 2023-03-28

Family

ID=85017410

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211452078.8A Active CN115658275B (zh) 2022-11-21 2022-11-21 一种可执行程序迁移方法、装置与计算设备

Country Status (1)

Country Link
CN (1) CN115658275B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117112498A (zh) * 2023-10-25 2023-11-24 中国电子科技集团公司第十五研究所 应用迁移方法、装置、电子设备和存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015092873A1 (ja) * 2013-12-18 2015-06-25 株式会社日立製作所 情報処理システム及び情報処理方法
CN105224370A (zh) * 2015-10-21 2016-01-06 安一恒通(北京)科技有限公司 一种加载elf文件的方法和装置
US20200265007A1 (en) * 2018-12-28 2020-08-20 Nasuni Corporation Cloud-native global file system with direct-to-cloud migration
CN114168286A (zh) * 2021-12-06 2022-03-11 成都傲梅科技有限公司 一种基于Windows的应用软件的迁移方法
CN114217880A (zh) * 2021-12-23 2022-03-22 湖南小算科技信息有限公司 一种突破安卓幽灵进程限制的方法
CN114385261A (zh) * 2021-12-23 2022-04-22 湖南小算科技信息有限公司 一种进程内装载程序的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015092873A1 (ja) * 2013-12-18 2015-06-25 株式会社日立製作所 情報処理システム及び情報処理方法
CN105224370A (zh) * 2015-10-21 2016-01-06 安一恒通(北京)科技有限公司 一种加载elf文件的方法和装置
US20200265007A1 (en) * 2018-12-28 2020-08-20 Nasuni Corporation Cloud-native global file system with direct-to-cloud migration
CN114168286A (zh) * 2021-12-06 2022-03-11 成都傲梅科技有限公司 一种基于Windows的应用软件的迁移方法
CN114217880A (zh) * 2021-12-23 2022-03-22 湖南小算科技信息有限公司 一种突破安卓幽灵进程限制的方法
CN114385261A (zh) * 2021-12-23 2022-04-22 湖南小算科技信息有限公司 一种进程内装载程序的方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117112498A (zh) * 2023-10-25 2023-11-24 中国电子科技集团公司第十五研究所 应用迁移方法、装置、电子设备和存储介质
CN117112498B (zh) * 2023-10-25 2024-01-23 中国电子科技集团公司第十五研究所 应用迁移方法、装置、电子设备和存储介质

Also Published As

Publication number Publication date
CN115658275B (zh) 2023-03-28

Similar Documents

Publication Publication Date Title
CN109906433B (zh) 针对容器的存储隔离
US9864600B2 (en) Method and system for virtualization of software applications
US9779111B2 (en) Method and system for configuration of virtualized software applications
US9336018B2 (en) Mechanism for class data sharing using extension and application class-loaders
US7055146B1 (en) Method and system for dynamically inserting modifications for identified programs
US6295638B1 (en) Method and apparatus for loading native object code in data processing system
CN114207586A (zh) 用于容器部署的动态映像合成
US7805409B2 (en) Dynamic composition of an execution environment from multiple immutable file system images
US20050004925A1 (en) Copy-on-write mapping file system
US8280908B2 (en) Merging file system directories
US7409675B2 (en) Code rewriting
Gilbert et al. Pocket ISR: Virtual machines anywhere
US6748591B1 (en) Method, system, program, and data structures for loading programs into a runtime environment
US7533101B2 (en) Extensible loader
CN105574411A (zh) 一种动态脱壳方法、装置和设备
US11010259B1 (en) Container-based upgrades for appliances
CN105468686A (zh) 减少冗余数据的方法及装置
JP2013519168A (ja) 仮想化のための拡張ポイントの宣言的登録
US8312445B2 (en) User-specified install locations
CN115658275B (zh) 一种可执行程序迁移方法、装置与计算设备
US6324688B1 (en) Method and apparatus for optimizing execution of Java programs
US20230125342A1 (en) Cross-platform application containerized execution
US20210133316A1 (en) Providing security features in write filter environments
CN114756296A (zh) 可读写挂载启动方法、装置、存储介质及电子设备
US11418555B1 (en) Systems and methods for streaming an application via object storage

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