Mac M1配置Docker CentOS(x86)的CSAPP实验环境

本文操作用于完成CSAPP实验,如果仅为了安装x86版的CentOS,忽略有关实验的操作即可。
如果描述有错漏,欢迎指正。

文章目录

  • 前言
  • 安装docker
  • 下载CSAPP实验代码
  • 环境搭建
    • 拉取CentOS系统
    • 创建CentOS(x86)容器
    • 解决Failed to download metadata for repo ‘AppStream’ [CentOS]错误
    • 安装一些必要的工具和库
    • 通过wget获取其他Lab代码
  • 启动和关闭
    • 启动
    • 关闭
  • 参考文章

前言

看了华为鲲鹏云 KBengine arm64编译问题实践报告这篇文章,决定不折腾了,索性直接创建x86版本的CentOS。
在这里插入图片描述

安装docker

在Docker官网下载Apple-Chip版本的Docker,手动安装(避个坑,我最初尝试了brew install dockerbrew install docker --cask两种方法,均不能正常使用)。

下载CSAPP实验代码

在CSAPP官网下载实验对应的代码,本文默认安装在~/download
在这里插入图片描述
解压

cd ~/download
mkdir csapp
tar xvf datalab-handout.tar
mv datalab-handout csapp
cd csapp
ls -al

环境搭建

拉取CentOS系统

docker pull centos

创建CentOS(x86)容器

因为Docker默认创建的是arm架构的CentOS,如果没有指定为amd64,将无法执行yum install glibc-devel.i686gcc -m32等命令,具体可看前言部分

docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it --platform linux/amd64 -v "$PWD:/csapp" --name=csapp centos /bin/bash

$PWD是为了将当前目录挂载以实现同步,从这个角度上来说,除了编译以外的一些操作,如写代码等,均可直接通过本机进行

12.5 更新:
--security-opt seccomp=unconfined 命令是为了解决 Error disabling address space randomization: Operation not permitted

但需要注意的是,在 gdb 调试时,会报错 warning: ptrace: Function not implemented ,这个问题在 Mac M1 Ptrace - warning: ptrace: Function not implemented #5191 早已出现,但由于我自己在创建完 x86 镜像后并没有实际的 gdb 调试,所以一直未曾发现该错误,非常抱歉。

文章暂不作修改,有些地方或许还有借鉴之处。

最近在忙一些论文上的 DDL,结束后我会抽空去找寻下针对 Apple Chip 的解决方法。

解决Failed to download metadata for repo ‘AppStream’ [CentOS]错误

cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
yum update -y

安装一些必要的工具和库

yum install sudo
yum install make automake gcc gdb kernel-devel
yum install glibc-devel.i686
yum install vim wget

通过wget获取其他Lab代码

以bomb lab为例

wget http://csapp.cs.cmu.edu/3e/bomb.tar
tar xvf bomb.tar
cd bomb

Ps:因为挂载了目录的原因,可以直接在本机进行下载操作

启动和关闭

利用下面的命令找到NAMECSAPPCONTAINER ID

docker ps -a

我这里是9a73e13c5742
在这里插入图片描述

启动

docker start 9a73e13c5742
docker exec -it 9a73e13c5742 /bin/bash

关闭

exit

参考文章

[1] Run x86 (Intel) and ARM based images on Apple Silicon (M1) Macs?
[2] Failed to download metadata for repo ‘AppStream’ [CentOS]
[3] CSAPP:Lab1 -DataLab 超详解

你可能感兴趣的:(经验及避坑分享,CSAPP,M1,Docker,CentOS,x86,CSAPP)