说明
Openwrt trunk版本更新实在太快了,我昨天刚刷最新的固件,今天安装软件时就提示不兼容了。没办法,只能升级到最新的固件来j兼容要装的软件了。
为装个软件而刷固件是在是太劳民伤财了!虽然系统有备份还原,但是刷机、装软件、还原这个过程还是要不少时间和精力。在网上搜了下,不少朋友都遇到同样的问题。看到有位朋友通过为Openwrt建立本地镜像的方法来解决:,这真是个一劳永逸的解决方案!
实现
实现OpenWrt软件源镜像非常简单,大概分3步:
- 下载所有软件
- 搭建web服务
- 设置OpenWrt软件源
下载所有软件
由于Openwrt的软件实在太多,当然不可能一个个手动下载,我们可以写个爬虫来实现自动下载:
#!/usr/bin/env python #coding=utf-8 # # Openwrt Package Grabber # # Copyright (C) 2014 # import urllib2 import re import os # the url of package list page, end with "/" baseurl = 'openwrt.org/snapshots/trunk/ar71xx/packages/' # which directory to save all the packages, end with "/" savedir = './download/' if not os.path.exists(savedir): os.makedirs(savedir) print 'fetching package list from ' + baseurl content = urllib2.urlopen(baseurl, timeout=15).read() print 'packages list ok, analysing...' pattern = r'' items = re.findall(pattern, content) cnt = 0 for item in items: if item == '../': continue else: cnt += 1 print 'downloading item %d: '%(cnt) + item if os.path.isfile(savedir + item): print 'file exists, ignored.' else: rfile = urllib2.urlopen(baseurl + item) with open(savedir + item, "wb") as code: code.write(rfile.read()) print 'done!'
我的路由器是WR703N,Openwrt官方源接近4000个应用,总共还不到300M。在Openshift上大概半个小时就全部下载完毕,速度还是比较快的。
搭建WEB服务
下载完成之后我们需要将整个目录部署成一个web应用,并开发文件列表,这样就可以作为镜像源使用了。这里使用nginx作为前端,并加载了FancyIndex模块,所以下面的列表比官方的要漂亮一些。
更改软件源
最后将Openwrt的软件源地址设为这个镜像地址就行了,这样相当于将官方的trunk源freeze了一个版本。以后下载应用都是从这个源下载,再也不用当心官方源频繁升级带来的不兼容问题了。