当前位置: 首页 > wzjs >正文

大连建站价格网络营销渠道策略

大连建站价格,网络营销渠道策略,设计软件基础课程学什么,网站建设公司.文章目录 1. 前言2. 构建 runc2.1 准备 C 交叉编译器2.2 编译 libseccomp 库2.3 编译 runc2.3.1 安装 go 编译器2.3.2 编译 runc 3. 构建 runc 镜像包 测试运行3.1 OCI 规范3.2 手工构建 OCI 镜像3.3 运行 1. 前言 限于作者能力水平,本文可能存在谬误,…

文章目录

  • 1. 前言
  • 2. 构建 runc
    • 2.1 准备 C 交叉编译器
    • 2.2 编译 libseccomp 库
    • 2.3 编译 runc
      • 2.3.1 安装 go 编译器
      • 2.3.2 编译 runc
  • 3. 构建 runc 镜像包 + 测试运行
    • 3.1 OCI 规范
    • 3.2 手工构建 OCI 镜像
    • 3.3 运行

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. 构建 runc

runc 是容器的运行时容器运行时的基础组件,常见容器直接使用 Docker 构建,但在资源受限的一些嵌入式设备,Docker 整体就会显得庞大且冗余,这时候我们通常会使用 runc + OCI 镜像的简单组合,来构建容器。

2.1 准备 C 交叉编译器

本文描述在 Ubuntu 22.04.5 LTS 桌面系统下,为 aarch64 平台构建容器的过程,不管是构建 runc 用到的 libseccomp 库,还是编译 runc 源代码中的 C 代码,都需要用到 aarch64 的交叉编译器,所以首先安装交叉编译器:

$ sudo apt-get install gcc-aarch64-linux-gnu

当然,读者也可以使用已有的交叉编译器。

2.2 编译 libseccomp 库

runc 使用了 libseccomp 库,我们先构建 libseccomp 。下载 libseccomp 源码并解压,切换到 libseccomp 源码目录:

$ sudo apt-get install autoconf libtool
$ ./autogen.sh
$ ./configure --host=aarch64-linux-gnu --prefix=`pwd`/_install
$ make && make install

成功编译完成后,在 libseccomp 源码目录下的 _install 目录下,生成了如下文件:

$ cd _install
$ tree
.
├── bin
│   └── scmp_sys_resolver
├── include
│   ├── seccomp.h
│   └── seccomp-syscalls.h
├── lib
│   ├── libseccomp.a
│   ├── libseccomp.la
│   ├── libseccomp.so -> libseccomp.so.0.0.0
│   ├── libseccomp.so.0 -> libseccomp.so.0.0.0
│   ├── libseccomp.so.0.0.0
│   └── pkgconfig
│       └── libseccomp.pc
└── share└── man├── man1│   └── scmp_sys_resolver.1└── man3......8 directories, 44 files

然后将 seccomp.h,seccomp-syscalls.h,libseccomp.so.0.0.0 安装到交叉编译器 gcc-aarch64-linux-gnu 的对应目录:

$ sudo cp include/*.h /usr/aarch64-linux-gnu/include
$ sudo cp lib/libseccomp.a /usr/aarch64-linux-gnu/lib
$ sudo cp lib/libseccomp.la /usr/aarch64-linux-gnu/lib
$ sudo cp lib/libseccomp.so.0.0.0 /usr/aarch64-linux-gnu/lib
$ sudo ln -s /usr/aarch64-linux-gnu/lib/lib/libseccomp.so.0.0.0 /usr/aarch64-linux-gnu/lib/lib/libseccomp.so.0
$ sudo ln -s /usr/aarch64-linux-gnu/lib/lib/libseccomp.so.0.0.0 /usr/aarch64-linux-gnu/lib/lib/libseccomp.so

2.3 编译 runc

2.3.1 安装 go 编译器

runc 源码使用了 goC 语言,C 语言需要的交叉编译器前面已经准备好了,现在参考 Download and install 安装 go 编译器

$ wget https://golang.google.cn/dl/go1.22.4.linux-amd64.tar.gz
$ rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin
$ go version
go version go1.22.4 linux/amd64

2.3.2 编译 runc

下载 runc 源码解压到 runc 目录,然后编译:

$ cd runc
$ GOARCH=arm64 CGO_ENABLED=1 make
$ PREFIX=`pwd`/_install make install
$ file _install/sbin/runc
_install/sbin/runc: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=db10b08ff0a8c578e7c80a9009ca5234b258c9e2, for GNU/Linux 3.7.0, with debug_info, not stripped

libseccomp.so.0.0.0 拷贝到 aarch64 目标机器的目录 /usr/lib,并创建符号链接文件 libseccomp.so.0

# ln -s /usr/lib/libseccomp.so.0.0.0 /usr/lib/libseccomp.so.0

拷贝 runc 文件到 aarch64 目标机器的目录 /usr/sbin,然后添加可执行权限:

# chmod +x /usr/sbin/runc

测试运行:

# ./runc --version
runc version 1.2.0-rc.2+dev
commit: v1.2.0-rc.2-29-gad5b481d
spec: 1.2.0
go: go1.22.4

3. 构建 runc 镜像包 + 测试运行

runc 将配置文件 config.json 运行于一个通过 Linux 命名空间cgroup 隔离的独立环境。Linux 命名空间 用来控制可见的视野,cgroup 用于资源(CPU、内存、磁盘、网络等)的隔离。runc 运行需要一个镜像包,这个镜像包需要符合 (OCI: Open Container Initiative) 的相关规范。

3.1 OCI 规范

开放容器计划 (OCI: Open Container Initiative) 是一个轻量级的开放式治理结构(项目),在 Linux 基金会的支持下成立,其明确目的是围绕容器格式和运行时创建开放的行业标准。OCI 于 2015 年 6 月 22 日由 DockerCoreOS 和容器行业的其他领导者推出。

OCI 目前包含 3 个规范:运行时规范 (runtime-spec)镜像规范 (image-spec)分发规范 (distribution-spec)运行时规范概述了如何运行在磁盘上解压的 OCI 镜像包

为了支持 OCI 镜像格式包含足够的信息以在目标平台上启动应用程序(例如命令、参数、环境变量等)。此规范定义了如何创建 OCI 镜像(通常由构建系统完成),并输出镜像清单、文件系统(层)序列化、镜像配置。概括地说,镜像清单包含有关镜像内容和依赖关系的元数据,包括一个或多个文件系统序列化存档的内容可寻址标识,这些存档将被解压缩以构成最终的可运行文件系统。镜像配置包括应用程序参数、环境等信息。镜像清单镜像配置和一个或多个文件系统序列化的组合称为 OCI 镜像

3.2 手工构建 OCI 镜像

托管在 Docker Hub 上的 Docker 官方镜像,是现成可用的 OCI 镜像,但很可惜,国外的这些镜像无法正常访问,国内的一些镜像也不是长期可用。同时由于这些镜像对于嵌入式设备来说,往往显得庞大冗余,这时候我们就可以选择手工构建简易的、满足自身需求的、符合 OCI 相关规范的镜像文件。

构建一个运行于容器环境的测试程序 oci_test.c

#include <stdio.h>
#include <unistd.h>int main(void)
{int count = 0;while (1) {printf("oci test: count = %d\n", ++count);sleep(3);}return 0;
}
$ aarch64-linux-gnu-gcc -o oci_test oci_test.c
$ mkdir -p mycontainer/rootfs
$ mkdir -p mycontainer/rootfs/{bin,dev,etc,lib,proc,sbin,sys,tmp,usr/bin,usr/lib,usr/sbin,var}
$ cp oci_test mycontainer/rootfs/usr/bin
$ cp /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 mycontainer/rootfs/lib/
$ cp /usr/aarch64-linux-gnu/lib/libc.so.6 mycontainer/rootfs/lib/
$ cp /usr/aarch64-linux-gnu/lib/libm.so.6 mycontainer/rootfs/lib/
$ cp /usr/aarch64-linux-gnu/lib/libresolv.so.2 mycontainer/rootfs/lib/$ tar -cf mycontainer.tar mycontainer

将镜像打包成 mycontainer.tarOCI 镜像就制作完成了。

3.3 运行

如章节 2.3 中准备好 runc,假定 runc 放置在 aarch64 目标机器/test 目录下,将章节 3.2 中制作好的 mycontainer.tar 也拷贝到 /test 目录下:

# cd /test
# ./runc spec # 生成配置文件 config.json

编辑 /test/config.json,将配置项 terminal 修改为 false,容器入口程序修改为 oci_test

在这里插入图片描述

接着创建并启动容器实例:

# mv config.json ./mycontainer
# ./runc run -d -b ./mycontainer ocitest > ocitest.log 2>&1
# ./runc list
ID          PID         STATUS      BUNDLE                      CREATED                          OWNER
ocitest     16427       running     /test/mycontainer       1970-01-01T08:10:45.791058625Z   root
# ./runc ps ocitest
# ps -ef | grep -v grep | grep "oci_test"
16427 root     oci_test
# ls /sys/fs/cgroup/cpu/ocitest/ -l
total 0
-rw-r--r--    1 root     root             0 Jan  1 08:12 cgroup.clone_children
-rw-r--r--    1 root     root             0 Jan  1 08:10 cgroup.procs
-rw-r--r--    1 root     root             0 Jan  1 08:12 cpu.shares
-rw-r--r--    1 root     root             0 Jan  1 08:12 notify_on_release
-rw-r--r--    1 root     root             0 Jan  1 08:12 tasks
# cat ocitest.log 
oci test: count = 1
oci test: count = 2
oci test: count = 3
oci test: count = 4
oci test: count = 5
oci test: count = 6
oci test: count = 7
oci test: count = 8
oci test: count = 9
oci test: count = 10
oci test: count = 11
oci test: count = 12
oci test: count = 13
oci test: count = 14
oci test: count = 15
oci test: count = 16
oci test: count = 17
oci test: count = 18
oci test: count = 19
oci test: count = 20
oci test: count = 21
oci test: count = 22
oci test: count = 23
oci test: count = 24
oci test: count = 25
oci test: count = 26
oci test: count = 27
oci test: count = 28

停止容器实例:

# ./runc kill ocitest
# kill -9 16427
# ./runc list
ID          PID         STATUS      BUNDLE                      CREATED                          OWNER
ocitest     0           stopped     /test/mycontainer       1970-01-01T08:10:45.791058625Z   root

在删除容器实例之前,其 cgroup 信息仍然存在:

# ls /sys/fs/cgroup/cpu/ocitest/
cgroup.clone_children  cpu.shares             tasks
cgroup.procs           notify_on_release

最后,删除容器实例:

# ./runc delete ocitest
# ls /sys/fs/cgroup/cpu/ocitest/
ls: /sys/fs/cgroup/cpu/ocitest/: No such file or directory

文章转载自:

http://B4lYHYmU.rcrfz.cn
http://yEU6KqAZ.rcrfz.cn
http://oPXTpLWZ.rcrfz.cn
http://tR3R4CHU.rcrfz.cn
http://fdkExJ2m.rcrfz.cn
http://X9oWGx3l.rcrfz.cn
http://72hcwBEk.rcrfz.cn
http://t1RhiT2s.rcrfz.cn
http://CTj5aASV.rcrfz.cn
http://fftXbUJn.rcrfz.cn
http://2k7sBles.rcrfz.cn
http://YZOOpAhr.rcrfz.cn
http://O97m61e4.rcrfz.cn
http://TMYpFmS2.rcrfz.cn
http://oAPWE1th.rcrfz.cn
http://n7S5Glgl.rcrfz.cn
http://Zt1sZ43b.rcrfz.cn
http://QDctjp7D.rcrfz.cn
http://GGPbJQFs.rcrfz.cn
http://YhaP5eit.rcrfz.cn
http://mOoSYP2A.rcrfz.cn
http://aolvm9kl.rcrfz.cn
http://rBmlH4nJ.rcrfz.cn
http://liUjTYyn.rcrfz.cn
http://OfBLFljg.rcrfz.cn
http://9mtcA50T.rcrfz.cn
http://Zm7TxU79.rcrfz.cn
http://QB36yhnT.rcrfz.cn
http://1AxGbc6o.rcrfz.cn
http://ErzJ1nR1.rcrfz.cn
http://www.dtcms.com/wzjs/730173.html

相关文章:

  • 网站制作加盟个人工作室注册流程及费用
  • 西安企业建站排名莆田做网站
  • 网站备案本人承诺计算机网络技术就业率
  • 响站怎么建设网站html5移动网站模板
  • 怎样建外贸公司网站工程公司经营范围
  • 高校网站建设规范seo专员是什么职业
  • 一站式网页设计服务平台网站备案行业
  • 哪个网站使用vue 做的昆明做网站推
  • 平乡建设局网站9个不需要门面的生意
  • 网站 如何做用户统计asp网站
  • 网站推广优化方法百度seo关键词排名查询
  • 参考文献 教学网站建设wordpress 唯艾迪
  • 股票分析网站可以做推广吗wordpress后台修改文件
  • 网站域名攻击金融理财网站源码
  • 全景网站开发待遇软文营销的步骤
  • 个人怎么注册自己的网站网站建设管理岗位职责
  • 购物网站首页源码海尔网站建设的优势
  • 域名注册以后怎样做网站铝合金做网站
  • 北京网站建设 优化嘉兴自助模板建站
  • 刷粉网站推广便宜wordpress主题 手机主题
  • 个人主页网站制作网站建设方案和报价表
  • 做网站竞价没有点击率杭州两网建设
  • 便宜做网站企业信息管理系统免费
  • 成都装饰公司网站建设wordpress supports
  • 网站开发过程及要求推广方法有哪些技巧
  • 企业网站建设818gx深圳企业专业网站设计
  • 深圳做网站哪家好做个免费的网站
  • 春节网站设计教育信息化建设网站
  • 自己做的网站如何放进服务器网站底色什么颜色好看
  • 传送门网站是怎么做的上海58同城官网