野生程序员
发布于 2024-07-29 / 68 阅读 / 0 评论 / 0 点赞

妈妈再也不用担心我不会装esp-at环境了直接装到docker

esp-at

Dockerfile

# 使用Ubuntu 20.04作为基础镜像
FROM ubuntu:20.04


# 设置工作目录
WORKDIR /root/esp

# 更新软件包列表
RUN apt-get update && \
    # 安装sudo和其他必要的软件包(如果需要的话)
    apt-get install -y sudo

RUN echo '%sudo ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers

# # 安装SSH服务器
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
EXPOSE 22
# CMD ["/usr/sbin/sshd", "-D"]
RUN apt-get install -y expect
# 安装依赖包
RUN apt-get update && apt-get install -y \
    git \
    wget \
    make \
    unzip \
    gcc \
    g++ \
    curl
RUN apt-get update && apt-get install -y python3 python3-pip
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
RUN ln -sf /usr/bin/python3.8 /usr/bin/python
# 克隆ESP-AT仓库(包含子模块)
RUN cd /root/esp
RUN git clone --recursive https://gitee.com/EspressifSystems/esp-at.git
# 容器启动时执行的命令(默认为bash,以便用户可以手动编译)
# CMD ["bash"]

# 设置工作目录
WORKDIR /root/esp/esp-at

# 将script.sh文件从构建上下文复制到容器内的/root/esp目录
# COPY script.sh /root/esp/esp-at
# 写入 expect 脚本到 script.sh
RUN echo '#!/usr/bin/expect -f' > /root/esp/esp-at/script.sh && \
    echo 'spawn /root/esp/esp-at/build.py install' >> /root/esp/esp-at/script.sh && \
    echo 'while 1 {' >> /root/esp/esp-at/script.sh && \
    echo '    expect {' >> /root/esp/esp-at/script.sh && \
    echo '        "Do you want to continue? " {' >> /root/esp/esp-at/script.sh && \
    echo '            send "Y\r"' >> /root/esp/esp-at/script.sh && \
    echo '        }' >> /root/esp/esp-at/script.sh && \
    echo '        -re {choose\(range\[(\d+),(\d+)\]\)} {' >> /root/esp/esp-at/script.sh && \
    echo '            set start [string trim $expect_out(1,string)]' >> /root/esp/esp-at/script.sh && \
    echo '            set end [string trim $expect_out(2,string)]' >> /root/esp/esp-at/script.sh && \
    echo '            if { $end == "5" } {' >> /root/esp/esp-at/script.sh && \
    echo '                send "1\r"' >> /root/esp/esp-at/script.sh && \
    echo '            } elseif { $end == "7" } {' >> /root/esp/esp-at/script.sh && \
    echo '                send "1\r"' >> /root/esp/esp-at/script.sh && \
    echo '            } elseif { $end == "1" } {' >> /root/esp/esp-at/script.sh && \
    echo '                send "1\r"' >> /root/esp/esp-at/script.sh && \
    echo '            }' >> /root/esp/esp-at/script.sh && \
    echo '        }' >> /root/esp/esp-at/script.sh && \
    echo '        "./build.py build" {' >> /root/esp/esp-at/script.sh && \
    echo '            puts "*************"' >> /root/esp/esp-at/script.sh && \
    echo '            break' >> /root/esp/esp-at/script.sh && \
    echo '        }' >> /root/esp/esp-at/script.sh && \
    echo '    }' >> /root/esp/esp-at/script.sh && \
    echo '}' >> /root/esp/esp-at/script.sh && \
    echo 'expect eof' >> /root/esp/esp-at/script.sh && \
    chmod +x /root/esp/esp-at/script.sh


# 给予script.sh执行权限
RUN chmod +x /root/esp/esp-at/script.sh

RUN /root/esp/esp-at/script.sh

RUN cd /root/esp/esp-at
RUN ./build.py build

# 设置启动命令
CMD ["/usr/sbin/sshd", "-D"]

# CMD ["/root/esp/script.sh"]

# 编译
# docker build -t esp32at4 .
# 运行
# docker run -d -p 2222:22 --name esp-at esp32at3
# 然后
# 执行
# cd /root/esp/esp-at
# ./build.py install
# ./build.py build



script.sh

#!/usr/bin/expect -f
spawn /root/esp/esp-at/build.py install
while 1 {
    expect {
        "Do you want to continue? " {
            send "Y\r"
        }
        -re {choose\(range\[(\d+),(\d+)\]\)} {
            set start [string trim $expect_out(1,string)]
            set end [string trim $expect_out(2,string)]
            if { $end == "5" } {
                send "1\r"
            } elseif { $end == "7" } {
                send "1\r"
            } elseif { $end == "1" } {
                send "1\r"
            }
        }
        "./build.py build" {
            puts "*************************"
            break
        }
    }
}
expect eof







加点功能

# 使用Ubuntu 20.04作为基础镜像
FROM ubuntu:20.04


# 设置工作目录
WORKDIR /root/esp

# 更新软件包列表
RUN apt-get update && \
    # 安装sudo和其他必要的软件包(如果需要的话)
    apt-get install -y sudo

RUN echo '%sudo ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers

# # 安装SSH服务器
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
EXPOSE 22
# CMD ["/usr/sbin/sshd", "-D"]
RUN apt-get install -y expect
# 安装依赖包
RUN apt-get update && apt-get install -y \
    git \
    wget \
    make \
    unzip \
    gcc \
    g++ \
    curl
RUN apt-get update && apt-get install -y python3 python3-pip
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1
RUN ln -sf /usr/bin/python3.8 /usr/bin/python
# 克隆ESP-AT仓库(包含子模块)
RUN cd /root/esp
RUN git clone --recursive https://gitee.com/EspressifSystems/esp-at.git
# 容器启动时执行的命令(默认为bash,以便用户可以手动编译)
# CMD ["bash"]

# 设置工作目录
WORKDIR /root/esp/esp-at

# 将script.sh文件从构建上下文复制到容器内的/root/esp目录
# COPY script.sh /root/esp/esp-at
# 写入 expect 脚本到 script.sh
RUN echo '#!/usr/bin/expect -f' > /root/esp/esp-at/script.sh && \
    echo 'spawn /root/esp/esp-at/build.py install' >> /root/esp/esp-at/script.sh && \
    echo 'while 1 {' >> /root/esp/esp-at/script.sh && \
    echo '    expect {' >> /root/esp/esp-at/script.sh && \
    echo '        "Do you want to continue? " {' >> /root/esp/esp-at/script.sh && \
    echo '            send "Y\r"' >> /root/esp/esp-at/script.sh && \
    echo '        }' >> /root/esp/esp-at/script.sh && \
    echo '        -re {choose\(range\[(\d+),(\d+)\]\)} {' >> /root/esp/esp-at/script.sh && \
    echo '            set start [string trim $expect_out(1,string)]' >> /root/esp/esp-at/script.sh && \
    echo '            set end [string trim $expect_out(2,string)]' >> /root/esp/esp-at/script.sh && \
    echo '            if { $end == "5" } {' >> /root/esp/esp-at/script.sh && \
    echo '                send "1\r"' >> /root/esp/esp-at/script.sh && \
    echo '            } elseif { $end == "7" } {' >> /root/esp/esp-at/script.sh && \
    echo '                send "1\r"' >> /root/esp/esp-at/script.sh && \
    echo '            } elseif { $end == "1" } {' >> /root/esp/esp-at/script.sh && \
    echo '                send "1\r"' >> /root/esp/esp-at/script.sh && \
    echo '            }' >> /root/esp/esp-at/script.sh && \
    echo '        }' >> /root/esp/esp-at/script.sh && \
    echo '        "./build.py build" {' >> /root/esp/esp-at/script.sh && \
    echo '            puts "*************"' >> /root/esp/esp-at/script.sh && \
    echo '            break' >> /root/esp/esp-at/script.sh && \
    echo '        }' >> /root/esp/esp-at/script.sh && \
    echo '    }' >> /root/esp/esp-at/script.sh && \
    echo '}' >> /root/esp/esp-at/script.sh && \
    echo 'expect eof' >> /root/esp/esp-at/script.sh && \
    chmod +x /root/esp/esp-at/script.sh


# 给予script.sh执行权限
RUN chmod +x /root/esp/esp-at/script.sh

RUN /root/esp/esp-at/script.sh

RUN cd /root/esp/esp-at
RUN ./build.py build
# 重命名 不然挂载时数据会消失
RUN mv /root/esp /root/esp1
# 设置启动命令
CMD ["/usr/sbin/sshd", "-D"]

# CMD ["/root/esp/script.sh"]

# 编译
# docker build -t esp32at .
# 运行
# docker run -d -p 2222:22 -v D:/0/esp32at/docker/esp:/root/esp --name esp-at esp32at
# 将文件移动回来
# 然后
# mv /root/esp1/* /root/esp/
# 执行
# cd /root/esp/esp-at
# ./build.py install
# ./build.py build




评论