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中烧写固件,每个硬件设备不尽相同,不在详述。

参考:

贝壳如何docker安装openwrt_基于Docker编译openwrt相关推荐

  1. docker安装、部署docker反向代理

    1.1 docker介绍 https://www.cnblogs.com/xiaonq/p/10241045.html#i4 1. 什么是docker Docker 是应用最广泛的开源容器引擎,让开发 ...

  2. [tensorflow]联邦学习框架TFF安装记录(基于docker)

    1.介绍 tensorflow federated (下面简称为TFF) 是谷歌开发的一款开源联邦学习框架,该框架基于tensorflow (下面简称为TF) 运行.安装这个框架花了我两天时间,现在对 ...

  3. Windows7上安装TensorFlow——基于Docker镜像

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.当你通过 Docker 安装和运行 Ten ...

  4. Linux笔记之Docker安装,基于Debian 11(bullseye)

    前置条件 Debian平台版本为 Debian 11(bullseye) 安装的是Docker Community Edition(docker-ce) 安装步骤 1.重新安装卸载旧版,初次安装请跳过 ...

  5. docker安装_使用docker在带有SSL的Nginx反向代理后面部署Quarkus或任何基于Java的微服务...

    docker安装 已经有一段时间了,但是根据一位朋友的要求,我将向您展示如何使用docker在Nginx反向代理后面部署Quarkus微服务. 我们会做什么- 我将在centos 8主机上安装dock ...

  6. 如何使用Docker Volumes在基于Docker的应用程序上启用实时重新加载

    In this post you'll learn how to configure a development environment with live-reload enabled. This ...

  7. docker安装实验和docker容器的使用,云计算技术与应用报告

    题目:Docker的安装和使用 实验环境:ubuntu16.04,虚拟机的网络模式设为NAT模式,IP地址通过虚拟 DHCP 服务器自动分配. 实验内容和要求:安装Docker并进行相关实验,熟悉Do ...

  8. 树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX

    文章目录 一.基于Ubuntu搭建Docker和portainer 1.Docker简介 2.Ubuntu20.04安装Docker-ce 3.Ubuntu20.04安装Docker图形化界面port ...

  9. docker 安装 oracle12,使用Docker安装Oracle 12c

    使用Docker安装Oracle 12c 假设你的服务器已成功安装Docker,继续进行以下操作: 1. 启动Docker [root@node01 ~]# service docker start ...

最新文章

  1. c++与java中子类中调用父类成员的方法
  2. postman websocket_新型开源postwoman接口调试工具VS传统经典postman和crapAPI工具
  3. 同态加法_同态—当旧趋势突然变酷时
  4. 自动给 Asp.Net Core Api 增加 ApiVersionNeutral
  5. 2020 CCPC网络赛 赛后感
  6. SQLserver被js注入的全库替换SQL
  7. cad动态块制作翻转_定制橱柜家具中CAD门型动态块制作方式图文讲解加视频
  8. vscode中打开pdf文件_提取pdf文件中的文字
  9. Mysql设置某字段唯一
  10. Python新闻网站项目-9.Django前端HTML功能
  11. Moodle 安装出现访问空白和open_basedir问题
  12. troublemaker中文谐音_troublemaker歌词, trouble maker 音译中文歌词
  13. RCTF-2015-x_xor_md5
  14. php修改浏览器地址,PHPstorm设置浏览器打开代码
  15. win10删除右键菜单的办法
  16. python程序弹出输入框_Python弹出输入框并获取输入值的实例
  17. 利用批处理脚本批量删除电脑上的空文件夹
  18. 一篇文章带你认识数学建模中的二维插值
  19. 微信小程序开发笔记6——小程序添加并使用外部字体(亲测可用)
  20. 员工时间管理系统市场现状研究分析报告-

热门文章

  1. 【朴素贝叶斯学习笔记】
  2. 【Excel】Exce学习笔记 -- 使用数据透视表一次性建立多个工作簿
  3. input弹出的手机键盘搜索事件
  4. 科大讯飞李世鹏:AI技术公司一定要开拓自己的新产业
  5. cocos2dx Android接入芒果插屏广告
  6. s3c2440的dma操作的一般步骤
  7. bzoj 4031: [HEOI2015]小Z的房间
  8. 小米看上了迅雷的云加速体系?
  9. Description Resource Path Location Type Target runtime Apache Tomcat v8.0 is not defined.
  10. JS数据结构与算法 笔记