贝壳如何docker安装openwrt_基于Docker编译openwrt
Docker确实是个好东西,当我用MAC OSX下载编译openwrt过程中遇到不少问题时,想到openwrt官网wiki建议使用的Ubuntu,于是我想到了Docker。至于Docker怎样好,在MAC OSX里怎么安装,在这里不作细说,可参考这篇文章。这里只说在docker里构建openwrt的image及使用其进行编译。假设docker环境已经安装配置好并且已经启动。创建openwrt的Do
Docker确实是个好东西,当我用MAC OSX下载编译openwrt过程中遇到不少问题时,想到openwrt官网wiki建议使用的Ubuntu,于是我想到了Docker。
至于Docker怎样好,在MAC OSX里怎么安装,在这里不作细说,可参考这篇文章。
这里只说在docker里构建openwrt的image及使用其进行编译。
假设docker环境已经安装配置好并且已经启动。
创建openwrt的Docker image
进到docker环境,执行以下命令新建开发目录并进到该目录底下:
mkdir -p /src/openwrt && cd /src/openwrt
执行vi Dockerfile新建docker image配置文件,输入以下内容:
FROM ubuntu:14.10 #使用ubuntu14.10作为基准镜像
RUN apt-get update &&\
apt-get install -y git-core subversion build-essential gcc-multilib \
libncurses5-dev zlib1g-dev gawk flex gettext wget unzip python &&\ #安装openwrt编译所需依赖相关
apt-get clean &&\
useradd -m openwrt &&\ #新建openwrt用户
echo 'openwrt ALL=NOPASSWD: ALL' > /etc/sudoers.d/openwrt &&\ #赋予openwrt用户无密码超级权限
sudo -iu openwrt svn co svn://svn.openwrt.org.cn/dreambox/trunk openwrt-pandorabox &&\ #svn下载openwrt源代码,这里下载的是国内[openwrt中文](openwrt.org.cn)团队的openwrt-pandorabox开发版本
sudo -iu openwrt openwrt/scripts/feeds update #更新openwrt扩展包
保存以上文件退出后,执行创建image指令:
docker build --rm -t myname/my-openwrt:base . //注意:docker build命令最后一定要以.结束才能执行下去
-t 选项是你要构建的base image的tag,就好比ubuntu:14.10一样 –rm 选项是告诉Docker在构建完成后删除临时的Container,Dockerfile的每一行指令都会创建一个临时的Container,一般你是不需要这些临时生成的Container的.
接下来docker会自动下载依赖的image和相关包,这需要花费一些时间。
运行docker image
创建image完成后,执行以下指令运行image并进入其中:
docker run -t -i myname/my-openwrt:base sudo -iu openwrt bash
添加扩展软件包(Add packages from extra feeds)
执行cd openwrt-pandorabox/进到源码根目录下.
执行cp feeds.conf.default feeds.conf,然后vi feeds.conf进入此文件的编辑:
src-svn packages svn://svn.openwrt.org.cn/dreambox/feeds/packages_12.09
src-svn qpe svn://svn.openwrt.org.cn/dreambox/feeds/qpe
src-svn device svn://svn.openwrt.org.cn/dreambox/feeds/device
src-svn dreambox_packages svn://svn.openwrt.org.cn/dreambox/feeds/dreambox_packages
src-svn luci_cn svn://svn.openwrt.org.cn/dreambox/feeds/luci/trunk
文件内前面加注释符号#表示该软件源不会被下载和安装。需要安装何种软件源就去掉相应的# 。
请注意,这个设置并不表示这些应用程序包会被编译,而只是在后面使用menuconfig命令时会获取这些包的描述信息(OpenWrt-Makefiles)。
现在,更新下载这些包,并安装它们到package/feeds/目录:
./scripts/feeds update -a
./scripts/feeds install -a
配置DreamBox(Configure target and packages)
下一步是检查编译环境,若可进行编译则生成默认配置:
make defconfig
若defconfig回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可,不难的,细心点就行。
现在开始配置OpenWrt-DreamBox,选择你需要目标平台,以及选择将要编译和添加进固件的软件包。运行命令:
makde menuconfig
接下来出现的配置界面跟Linux内核的配置界面基本差不多,几乎每一项都有3个选择Y/M/N:
Y:选择Y,该软件将被编译,并且加入到你的目标固件里;
M:选择M,该软件包将会被编译,但不会被放入固件里。在需要它的时候,可以 用OPKG软件包管理器进行安装;
N:选择N,该软件包将不会被编译,也不会被安装进固件。
方向键是移动光标
回车键是确认
空格键是选择,可以代替Y/M/N键的使用
比如要为TP-LINK TL-MR3420编译openwrt:
1 选择CPU型号:
Target System ---> (X) Atheros AR71xx/AR7240/AR913x
2 选择路由型号
Target Profile ---> (X) TP-LINK TL-MR3420 v1
3 软件包就使用默认的,或者可以根据需要添加。
添加luci
LuCI ->Collections -> luci
添加luci的中文语言包
LuCI ->Translations -> luci-i18n-chinese
添加DDNS
LuCI ->Applications -> luci-app-ddns
添加USB挂载
Base system -> block-mount
添加硬盘格式支持
Kernel modules -> Filesystems -> kmod-fs-ext4
添加UTF8编码
Kernel modules -> Native Language Support -> kmod-nls-utf8
添加USB扩展支持
Kernel modules -> USB Support -> kmod-usb-storage-extras.
添加自动挂载工具
Utilities -> Filesystem -> badblocks
添加复位键支持
Utilities -> restorefactory
添加一键开关无线
Utilities -> wifitoggle
如果需要单独配置OpenWrt-DreamBox的linux kernel,可以使用下面命令配置:
make kernel_menuconfig
这和普通的linux kernel的make menuconfig没有什么区别,可以根据需求自行配置。
如无特殊情况,直接使用默认的内核配置即可!
编译openwrt(Build your OpenWRT image)
完成menuconfig配置后,退出保存,开始编译DreamBox:make
编译过程可能会很久(一边下载源代码一边编译),请确认你有足够的磁盘空间(应至少保证能够有大约4G以上的空间)。
另外,你可以使用:make -j 3 V=99
这个命令会使用双核CPU进行编译,并且输出编译过程中的信息,这样你可以比较清楚的看到编译情况或出错情况:
-j3:具有多核CPU处理器的PC进行编译,可使用-j参数加速编译,用法为-j
V=99:表示输出详细的debug信息
make world:表示编译所有
如只想清除/编译某个模块,您可以做如下类似操作:
make package/qos/clean
make package/qos/compile
make package/qos/install
烧写固件(Flash)
编译结束后,生成的固件存放在bin目录下,其中包含了kernel和rootfs的镜像文件,以及众多可以使用OPKG工具安装的.ipk安装包。
接下了就是往flash中烧写固件,每个硬件设备不尽相同,不在详述。
参考:
更多推荐
所有评论(0)