mincs, MINCS迷你容器 Shellscript

分享于 

12分钟阅读

GitHub

  繁體 雙語
MINCS - Mini Container Shellscript
  • 源代码名称:mincs
  • 源代码网址:http://www.github.com/mhiramat/mincs
  • mincs源代码文档
  • mincs源代码下载
  • Git URL:
    git://www.github.com/mhiramat/mincs.git
    Git Clone代码到本地:
    git clone http://www.github.com/mhiramat/mincs
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mhiramat/mincs
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    MINCS

    MINCS ( 最小容器 Shellscripts ) 是用于重量容器的shell 脚本的集合。 由于MINCS只需要 posix shell 和一些工具,所以即使在 busybox ( 有关busybox组合,请参阅 Ermine插件) 上也很容易运行它。

    要求

    • Posix shell ( 破折号,bash等)

    • coreutils

    • util ( 版本> = 2.24,基本用法为,> = 2.28表示 --nopriv )

    • IProute2 ( 用于 netns )

    • iptables ( 用于 netns )

    • 桥接工具( 用于 netns )

    • Overlayfs

    • squashfs工具( 用于 polecat )

    • libcap ( 用于--nocaps选项)

    • ) ( for ) )

    • Docker 或者 debootstrap ( 用于 marten )

    • qemu-user-static ( 用于 --cross )

    • qemu系统( 针对 --qemu )

    • 或者,busybox ( 版本> = 1.25 ) 和 libcap ( 用于 minc/ermine )

    安装 MINCS

    你可以在不安装的情况下运行MINCS命令,但也可以在系统上选择安装 MINCS。 要安装 MINCS,只需运行 install.sh 即可;

     $ cd mincs
     $ sudo./install.sh

    默认情况下,如果你希望在/usr 或者它的他目录下安装 MINCS,请在/usr/local/. 下安装,请按以下

     $ sudo PREFIX=/usr./install.sh

    要卸载它,请使用--uninstall选项运行 install.sh。 请注意,如果在安装时指定了前缀,则需要指定前缀。

    minc用法

    minc [options] [command [arguments]]

    命令行选项

    • -h或者 --help
      显示帮助消息

    • -k或者 --keep
      保留临时目录

    • -t或者 --tempdir
      设置临时目录的目录( 暗示 -k )

    • R 或者 --rootdir DIR | UUID UUID UUID |
      为原始 root 目录设置目录

    • -b或者 --bind HOSTPATH: 路径
      将HOSTPATH绑定到容器内的路径。 路径必须是绝对路径。

    • -B或者 --background
      在后台运行容器。stdout和stderr的输出存储在tempororary目录下。

    • -X或者 X11
      导出本地 X11 unix套接字。 如果定义了 XAUTHORITY,那么它也会导出它。 ( 无需设置 xhost )

    • -n或者 --net [MODE]
      使用网络命名空间( 指派了IP地址)。 可以将模式指定为选项。 目前可用的模式是 raw raw raw [,IF] dens dens dens dens。 在原始模式下,minc创建新命名空间,但不执行任何操作。 在den模式下,minc生成桥和veth对并伪装网络。

    • -p或者 --port PORT1 [:PORT2[:PROTO] ]
      将主机PORT1映射到 Prototype ( tcp或者 udp )的容器 PORT2

    • -c或者 --cpu 位掩码
      设置可以运行的CPU位掩码

    • --name UTSNAME
      设置容器的utsname

    • --user USERSPEC
      按给定的uid:gid 运行命令

    • --cross。
      使用给定的arch运行命令( 需要设置 qemu-user-mode )

    • --arch。
      --cross相同。

    • --nopriv rootdir
      在给定的rootfs中运行命令而不使用 root 特权

    • --qemu
      在Qemu中运行命令( 如清除容器,请参见 Ermine )

    • --nocaps CAPLIST
      拖放功能( 比如。cap_sys_admin )

    • pivot
      强制使用pivot_root而不是 chroot。 这需要在容器的rootfs上安装 chroot 和 umount。

    marten用法

    marten <command> [arguments...]

    命令

    • lc或者列表
      列出容器

    • li或者图像
      列出图像

    • rm
      删除指定的容器

    • import DIR |
      将DIR或者DOCKERIMAGE作为图像导入

    • 拉 DOCKERTAG
      从DockerHub导入 Docker 图像( 无 Docker )

    • 提交 UUID
      将指定的容器提交到图像

    • 重命名 UUID 名称
      重命名给定UUID容器以命名

    • renamei UUID UUID UUID名称
      将给定UUID映像重命名为名称

    • 标签:UUID 名称
      renamei的别名( 用于图像)

    Opitons

    • -h或者 --help
      显示帮助消息

    minc和marten的混合示例

     $ sudo debootstrap stable debroot
     $ sudo marten import debroot
    c45554627579e3f7aed7ae83a976ed37b5f5cc76be1b37088f4870f5b212ae35
     $ sudo minc -r c455/bin/bash

    minc和 Docker的混合示例:)

     $ sudo docker save centos | gzip - > centos.tar.gz
     $ sudo marten import centos.tar.gz
    Importing image: centos
    511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
    5b12ef8fd57065237a6833039acc0e7f68e363c15d8abb5cacce7143a1f7de8a
    8efe422e6104930bd0975c199faa15da985b6694513d2e873aa2da9ee402174c
     $ sudo marten images
    ID SIZE NAME
    511136ea3c5a 4.0K (noname)
    5b12ef8fd570 4.0K (noname)
    8efe422e6104 224M centos
     $ sudo minc -r centos/bin/bash

    或者,你现在可以直接从marten下载 Docker 图像。

     $ sudo marten pull ubuntu
    Trying to pull library/ubuntu:latest
    Downloading manifest.json
    Downloading config.json######################################################################## 100.0%Downloading sha256:c62795f78da9ad31d9669cb4feb4e8fba995a299a0b2bd0f05b10fdc05b1f35e######################################################################## 100.0%Downloading sha256:d4fceeeb758e5103c39daf44c73404bf476ef6fd6b7a9a11e2260fcc1797c806######################################################################## 100.0%Downloading sha256:5c9125a401ae0cf5a5b4128633e7a4e84230d3eb4c541c661618a70e5d29aeff######################################################################## 100.0%Downloading sha256:0062f774e9942f61d13928855ab8111adc27def6f41bd6f7902c329ec836882b######################################################################## 100.0%Downloading sha256:6b33fd031facf4d7dd97afeea8a93260c2f15c3e795eeccd8969198a3d52678d######################################################################## 100.0%Pulled. Importing image: library/ubuntu
    c62795f78da9ad31d9669cb4feb4e8fba995a299a0b2bd0f05b10fdc05b1f35e
    d4fceeeb758e5103c39daf44c73404bf476ef6fd6b7a9a11e2260fcc1797c806
    5c9125a401ae0cf5a5b4128633e7a4e84230d3eb4c541c661618a70e5d29aeff
    0062f774e9942f61d13928855ab8111adc27def6f41bd6f7902c329ec836882b
    6b33fd031facf4d7dd97afeea8a93260c2f15c3e795eeccd8969198a3d52678d

    polecat用法

    polecat [options] <rootdir> <command>

    命令行选项

    • -h或者 --help
      显示帮助消息

    • -o或者 --output 文件
      输出到文件而不是 polecat-out.sh

    示例

    要构建一个可以执行的debian容器,在目录上运行debootstrap并运行 polecat。

     $ sudo debootstrap stable debroot
     $ sudo polecat debroot/bin/bash

    你将在当前目录中看到 polecat-out.sh,这是一个自执行的二进制文件。 所以你可以运行它。

    ./polecat-out.sh

    Ermine

    Ermine不是 shell script,但它是一个微型的linux引导映像,用于qemu容器( minc --qemu )。 MINCS有一个名为"ermine增殖器"的ermine构建脚本。 你可以在你的机器上构建自己的ermine。

    ermine增殖使用

    ermine-breeder [command] [option(s)]

    命令

    • 生成
      使用主机工具链构建 ermine ( 缺省)

    • 清理
      清理 workdir

    • selfbuild [DIR] [OPT]
      如果为rootfs提供了 DIR,则将新的rootfs设置为( 需要 sudo ),使用目录作为新。

    • testrun [--arch ] [DIR]
      使用ermine映像运行 qemu

    命令行选项

    • --repack
      在不清除 workdir ( 仅重新生成内核的情况下) 重建ermine映像

    • --rebuild
      使用清除workdir重建ermine图像

    • --config CONF_FILE
      使用 CONF_FILE 作为配置

    • --arch。
      为 ARCH ( x86_64,arm,arm64 ) 构建 ermine

    示例

    要通过ermine增殖器构建 ermine,你可以选择下面的任一。

    • 使用 apt/yum/dnf 等在你的环境中为内核和 busybox ( 静态链接 glibc ) 安装构建工具。
    • 安装 debootstrap debootstrap并安装 sudo ( 因为debootstrap需要 root 权限)

    如果你选择前者,你只需要运行 ermine-breeder。 对于后者,运行 ermine-breeder selfbuild 来构建它。

    在 samples/ermine/, 下面有一些示例配置。 E.g.

    
     $./ermine-breeder --config samples/ermine/smallconfig
    
    
    
    

    这将生成具有小型配置的ermine,结果将小于 5 MB。

    支持多配置文件,这样你就可以通过提供多个--config选项来组合不同的配置。 请注意,配置中的设置被后一个配置覆盖。

    构建跨 arch Rootfs

    使用 --arch/--cross选项运行minc时,你将需要一个用于目标架构的rootfs目录。 建议使用cross的一种方法是使用 cross,它允许你构建基于debian的交叉拱 rootfs。 为了方便地设置它,有一个示例脚本。 例如如果你想为arm构建一个 rootfs,请在下面的命令中运行。

    
    $ sudo./samples/scripts/build-debian-rootfs.sh./rootfs/arm arm
    
    
    
    

    以下是./rootfs/arm 目录下的debian jessie ( debian 8 )。 完成后,你可以按如下方式运行 minc:

    
    $ sudo minc -r./rootfs/arm --arch arm
    
    
    
    

    主要发行版的已知问题

    • 在Fedora上,qemu静态设置的/x86_64, aarch64有一个问题。 必须为qemu-aarch64设置一个binfmt配置文件以便在 --cross aarch64中运行。

    • 在/x86_64, 16.04 aarch64上,如果没有安装qemu映像的UEFI,就不能。 ( 看起来软件包不能帮助,你需要将它从qemu代码源的pcbios目录安装到/usr/share/qemu/)。

    • 如果不能使它工作,也可以从下面的源代码构建自己的qemu-system-arm/aarch64:

    
    $ cd qemu
    
    
    $./configure --target-list=arm-softmmu,aarch64-softmmu --enable-virtfs
    
    
    $ make
    
    
    
    

    许可证

    这里程序是在MIT许可证下发布的,请参阅许可证。


    相关文章