radioml-docker环境搭建
最近花了一段时间配置gnuraio,但是没有在单机上成功,因为gnuradio包的依赖包太多了,而且每个依赖包又有依赖,如此反复,感觉永远装不完。而且像ubuntu直接安装gnuraio,有些额外的工具包也不好安装。
正巧最近radioml的官网(现在改成了deepsig)上放了已经包含的gnuraio+deep learning等一系列配置环境的docker镜像,于是果断下载。
为了防止之后还需要操作这个,故先考虑写个博客记录一下,方便回访。
镜像源下载
根据dockerRML的说明,直接从dockergit上拉取radioml-full镜像,但是拉取镜像的过程经常失败(原因不可描述),所以需要用国内的镜像来加速,推荐daocloud,不用掏钱,直接在里面搜“radioml”,会出来很多类型的镜像,可以根据dockerRML的说明来下载自己需要的版本。
gnuraio-docker镜像环境配置
安装gnuradio环境
以radioml/full镜像为例,下载的镜像里貌似没有包含gnuradio(无法在python中导入gnuradio包,没有gnuradio面板命令),也可能是我没找到对应路径,不过dockerRML上也没有说。
所以打算自己手动安装一下,安装过程比较繁琐,可以参考同样是变异SDR环境的minsdr
内容如下:
set up environment
ENV DEBIAN_FRONTEND noninteractive
update repos/ppas...
RUN apt-get update
RUN apt-get install -y python-software-properties software-properties-common
RUN apt-add-repository -y ppa:x2go/stable
RUN apt-get update
install core packages
RUN apt-get install -y python-pip git openssh-server vim emacs screen tmux locate
RUN apt-get install -y python-matplotlib python-scipy python-numpy
RUN apt-get install -y python-numpy python-dev
Set up remove login info
RUN mkdir /var/run/sshd
RUN echo 'root:radioml' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
somewhat more graphical packages..
RUN apt-get install -y firefox evince audacity meld
set up remove visual login packages ...
RUN apt-get install -y xfwm4 xfce4 x2goserver x2goserver-xsession
install python packages
RUN pip install --upgrade pip
set up gnuradio and related tools
RUN apt-get install -y autotools-dev autoconf sudo wireshark gdb
RUN pip install --upgrade git+https://github.com/gnuradio/pybombs.git
RUN mkdir /gr/
RUN cd /gr/ && pybombs prefix init .
RUN cd /gr/ && pybombs recipes add gr-recipes git+https://github.com/gnuradio/gr-recipes.git
RUN cd /gr/ && pybombs recipes add gr-etcetera git+https://github.com/gnuradio/gr-etcetera.git
RUN cd /gr/ && pybombs install gnuradio gr-burst gr-pyqt gr-pcap gr-mapper gr-analysis
check out sources for reference
RUN /bin/ln -s /gr/src/ /root/src
copy in some helpful files / set up env on login
COPY .vimrc /root/R
RUN echo "source /gr/setup_env.sh" >> /root/.bashrc
安装mediatools
如果需要mediatools
,可以参考mediatools。
安装步骤如下:
sudo apt-get install libavcodec-dev libavformat-dev libavutil-dev
git clone https://github.com/osh/gr-mediatools.git
mkdir gr-mediatools/build
cd gr-mediatools/build
cmake ..
make
make install
测试运行dataset
测试dataset里生成信号数据的代码。
所需的数据可以从source_material拿到。
# docker里
source /gr/setup_env.sh && python generate_RML2016.10a.py
# docker外
docker run --rm -v $PWD:/code -w /code radioml/minsdr /bin/bash -c "source /gr/setup_env.sh && python /path/to/generate_RML2016.10a.py"
docker基本操作
docker可以看做是很轻量级的虚拟机,但是它更注重的是操作系统与环境本身,它与宿主机共享资源。常用的docker基本操作可以参考。
拉取镜像
sudo docker pull <image name>
创建容器
# 前端显示
sudo docker run -i -t radioml/full /bin/bash
# jupyter窗口编辑
# 直接在容器里按服务器方式配置jupyter(full里自带jupyter,没有需自行安装),然后在网页上输入<docker_ip>:<port>即可。
# 其余显示方式还没探究
重新激活与进入容器
# 启动容器
sudo docker start container <container_id>
# 用attach进入,但是这样不能同时开多个窗口进入
sudo docker attach <container_id>
# 使用ssh,这里不采用,需要的话可以参考dockerRML
# 使用exec进入容器
sudo docker exec -it <container_id> /bin/bash
与本地传输文件
# 查看容器,找到对应容器的ID号
sudo docker ps -a
# 本地拷贝到容器
docker cp 本地文件路径 ID全称:容器文件路径
# 容器拷贝到本地
docker cp ID全称:容器文件路径 本地路径
保存镜像
# 由于你在退出整个终端后(也就是container被启动的那个终端),container会被销毁,所以如果对container作了修改,可以commit成image
# 可以直接覆盖原来的镜像,则原来的image_id会发生变化
sudo docker commit <container_id> <origin_image_name>:<tag>
# 如果想保留原来的镜像,可以创建新的镜像
sudo docker commit <container_id> <new_image_name>:<tag>
# 查看是否已经保存
sudo docker images
删除所有镜像
# 1.停止所有的container,这样才能够删除其中的images
docker stop $(docker ps -a -q)
# 如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
# 2.查看当前有些什么images
docker images
# 3.删除images,通过image的id来指定删除谁
docker rmi <image id>
# 想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
# 要删除全部image的话
docker rmi $(docker images -q)