跳到主要内容

本地使用iso制作docker镜像

# 创建目录
mkdir -p /mnt/euler_docker

# 挂在iso
mount -o loop openEuler-22.03-LTS-SP2-aarch64-dvd.iso /mnt/euleriso

编辑/etc/yum.repos.d/openeuler.repo,添加如下内容:
[local-iso]
name = euler-local
baseurl = file:///mnt/euleriso
gpgcheck = 0
enabled = 1

# 刷新yum源
yum clean all
yum makecache

安装filesystem
yum --installroot=/mnt/euler_docker -y --releasever=22.03 --enablerepo=local-iso install filesystem

完成后查看目录/mnt/euler_docker,已经有了linux文件系统

然后开始装需要的包,此时需要在/mnt/euler_docker/etc/yum.repos.d/openeuler.repo文件中增加local-iso的配置

cp /etc/yum.repos.d/openeuler.repo /mnt/euler_docker/etc/yum.repos.d/

yum -y --installroot=/mnt/euler_docker install gcc-c++

# 打包
cd /mnt/euler_docker
tar -cvpf /home/euler_base.tar .

将压缩包导入docker成为image
docker import /mnt/euler_base.tar euler_base:v1

# 启动
docker run -it --network=host --privileged=true euler_base:v1 bash

valgrind 测试

安装,使用源码安装或者yum install valgrind

正确的c程序:

#include <stdio.h>

int main() {
printf("Hello World\n");
return 0;
}

存在问题的c程序:

#include <stdlib.h>

void f(void)
{
int* x = malloc(10 * sizeof(int));
x[10] = 0; // problem 1: heap block overrun
} // problem 2: memory leak -- x not freed

int main(void)
{
f();
return 0;
}

编译:gcc -g -O0 -o testmem testmem.c

设置权限:chmod 777 testmem

valgrind测试:valgrind --leak-check=full ./testmem