radioml-docker环境搭建

Posted by SkyHigh on December 19, 2017

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)

References