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