#copy #temporary #running #copies #location #path #executable

replicate

将当前运行的程序复制到临时位置

2 个版本

0.1.1 2022年11月12日
0.1.0 2022年11月11日

#1102 in 开发工具

MIT 许可证

7KB
63 代码行

replicate

replicate 是一个库,它

  • 将当前运行的程序复制到临时文件
  • (仅限 Unix) 使该文件可执行
  • 返回临时文件的路径对象,当对象被丢弃时清理临时文件。

它旨在供 musl 编译的程序使用,这些程序可以在 Docker 容器内运行;通过在 Docker 容器内创建副本并挂载该程序来使用。

示例

use replicate::Replicate;

fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    let copy = Replicate::new()?;
    println!("My copy's path is {}", copy.display());
    Ok(())
}

更多示例在 示例目录 中。


lib.rs:

将当前运行的程序复制到临时位置

此包将当前运行的可执行文件复制到临时位置并返回该可执行文件的路径。这使得您(例如)

  • 使用类似 musl 的工具静态编译程序
  • 在程序运行时创建该程序的副本
  • 从您的原始程序运行 Docker,将副本作为 Docker 卷挂载
  • 在 Docker 环境中运行复制的程序。

由于此库通过 NamedTempFile 通过 Builder 生成临时位置,因此对 Replicate 以下安全限制适用

  1. 副本具有较短的生存期,并且您的临时文件清理程序合理(不会删除最近访问的文件)。
  2. 您信任系统上的每个用户(即您是唯一的用户)。
  3. 您已禁用系统的临时文件清理程序或已验证系统没有临时文件清理程序。

依赖项

~4–13MB
~161K SLoC