赞
踩
前几天写了一个编译Openwrt ipk包的博客《Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)》,那篇文章是以WNDR4300为例,使用恩山上大神编译的纯净版固件,然后自己下载ss和luci的github源码使用openwrt SDK编译出ipk安装包,然后又在openwrt官网上找到ss和luci相关的依赖安装,实现了最新版的ss和luci界面,并支持UDP转发的ss代理。
但是WNDR4300昂贵的价格注定了它应用范围不会太广,只在家里用用都觉得奢侈。而将同样的功能移植到华为 hg255d这个又老又便宜的路由器上才是生产力。
首先华为hg255d具备16m ROM和32m RAM,已经具备了只能路由器的最低配置,完全可以跑Openwrt和ss插件。同样300m的路由器比如极路由1s要一百多快,而且刷好ss版的要更贵
其次我试过使用网山大神给的纯净版固件,不过内核版本都不一致,luci的依赖包kmod-iptable-tproxy安装不上,没有图形界面可用性就大大降低了。
最后其实最重要的是,刷好op的hg255d在某宝二手的售价仅为25人民币,想想这么点钱就能买一个能装插件的智能路由器,而且还能开发USB、多拨等功能,实在是太超值了。
所以一方面为了获得最新的ss和luci插件,另一方面避免固件内核不一致带来的烦恼,非常需要自己动手编译一套固件。
在我的操作过程中发现ImageBuilder编译固件的过程要比SDK编译ipk包容易的多,也不容易出错,但是想要把ss这样的功能直接编译进固件里面,还是需要学会SDK编译ipk包的方式,编译固件的主要目的不是为了添加新的软件,而是为了解决ipk包的依赖,因为openwrt官网上给出的依赖包内核版本经常变化,不能通用。
下文会以Openwrt CC 15.05 为例,具体介绍如何在Ubuntu环境下交叉编译纯净版固件,向固件中添加依赖库,制作整合ss等功能固件的方法
首先我们先通过SDK编译最新版的ss及其luci ipk安装包,具体方法可以看我之前的一篇文章:《Ubuntu 使用Openwrt SDK交叉编译ipk包过程全纪录(超多图)》
然后我们就有了shadowsocks-libev_2.5.5-2_ramips_24kec.ipk,luci-app-shadowsocks_1.3.6-1_all.ipk两个文件,先留着备用,当然没有这两个文件也不耽误我们编译固件,可以略过此步。
下面说一下各版本固件的作用:
纯净版固件:用于观察ss或者其他第三方程序的依赖包,为编译完整版做基础。也可以做普通上网用
依赖包版固件:因为ss等插件频繁更新,而固件我们只想编译一次,所以这个版本的固件只编译进ss的所有依赖包,方便以后opkg升级ss使用
完整版ss固件:方便别人安装使用,一劳永逸的固件。
下面我们编译一个纯净版固件,尽可能少的安装依赖和服务,力图将ROM大小降到最低,满足日常上网要求即可的高稳定性低资源消耗的纯净版本。
第一步:登录openwrt官网,根据CPU型号找到hg255d编译工具的下载界面,也就是:https://downloads.openwrt.org/chaos_calmer/15.05/ramips/rt305x/
其中,packages是我们安装ipk时寻找依赖包的地方
ImageBuilder是今天的主角,用来生成bin固件的
SDK是编译Github上c源码成ipk包的
下面我们就下载ImageBuilder准备生成固件吧,首先下载这个tar包,在windows上随意下载,linux上可以直接使用wget下载,不过国内的网速实在很慢,很容易失败,这个tar包大小在1.5G左右,尽量使用断点续传工具加国外代理进行下载。
下载之后放到Ubuntu系统上,使用tar xjf Openwrt-ImageBuilder-15.05-ramips-rt305x.Linux-x86_64.tar.bz2解压这个tar包,由于这个包1.5G那么大,需要等个两三分钟,不要以为是死机了,耐心的等等就好。差一点的电脑可能要登上5分钟或更久。
解压完成之后,直接cd进解压完毕的文件夹中,现在我们有两件很重要的事情需要做
1、将ImageBuilder的Makefile放开对HG255d的支持
2、选择合适依赖包编译进固件
其中第一点尤为重要,要是没有处理ImageBuilder的Makefile,不管你编译多少次都编译不出能用的固件来的。方法也不麻烦,编辑如下文件:
nano target/linux/ramips/image/Makefile搜索HG255D,去掉前面的注释符#,至于官方为什么要注释掉这一行,有一种说法是官方的版本只在lintel u-boot上测试过,如果刷在带原厂u-boot的HG255D上会出问题,这也许是官方没有提供HG255D固件下载的原因吧。
下面开始选择合适的依赖包。
为什么要选择依赖包呢,因为此时如果直接使用make是可以编译出openwrt固件来的,不过这样的固件几乎除了一个内核之外别的什么都没有,没有web界面的路由器后台。所以要把路由器后台的luci界面和一些其他和网络NAT有关的依赖包编译进去,语法格式是
make image PROFILE=HG255D
# HG255D为路由器名字, 默认只有基础包
make image PROFILE=HG255D PACKAGES=”pk1 pk2 pk3 -pk4”
# -pk4表示去掉pk4包
所以按照以往的经验,我这里给出一个基础依赖包的列表
make image PROFILE=HG255D PACKAGES="base-files busybox dropbear firewall fstools jsonfilter libc libgcc mtd netifd opkg procd swconfig ubox ubus ubusd uci usign kmod-lib-crc-ccitt kmod-ipv6 kmod-ip6tables kmod-ipt-conntrack kmod-ipt-core kmod-ipt-nat kmod-nf-conntrack kmod-nf-conntrack6 kmod-nf-ipt kmod-nf-ipt6 kmod-nf-nat kmod-ppp kmod-pppoe kmod-pppox kmod-slhc kmod-gpio-button-hotplug kmod-spi-bitbang kmod-spi-gpio kmod-ath kmod-ath9k-common kmod-cfg80211 kmod-mac80211 libip4tc libip6tc libxtables libblobmsg-json libexpat libiwinfo libjson-c libnl-tiny libubox libubus libuci ip6tables iptables hostapd-common iw odhcp6c odhcpd ppp ppp-mod-pppoe iwinfo jshn libjson-script uboot-envtools base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools kmod-gpio-button-hotplug swconfig uboot-envtools kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ledtrig-usbdev wget luci iptables-mod-nat-extra bind-dig dnsmasq-full kmod-leds-gpio wpad-mini kmod-usb-dwc2"
其中,最后三个包是openwrt指明单独要给hg255d路由器添加的,可以使用make info来查看
其实就是LED指示灯和USB接口的驱动
在列表中luci就是路由器后台的web管理界面,luci-ssl指https连接,会因为没有证书报站点不安全的异常,所以我们不用luci-ssl,用luci。
wget是用于http下载,下载一些ipk包的时候会用的上。
iptables用来做端口转发,十分必要
dnsmasq换成dnsmasq-full,方便以后用ipset做域名过滤,功能比dnsmasq强大的多。网上有人说要先去掉dnsmasq再安装如"-dnsmasq dnsmasq-full"但是我也没详细测试,因为在我打出的版本中,dnsmasq已经支持ipset了,或许并非是真正的dnsmasq-full,但是对于ipset来说已经够用了
其余的包都是系统必备的一些包,多数我也不清楚是做什么用的。kmod开头的经常会因为openwrt.org提供的内核版本发生变化,所以为了以后扩展方便,尽量把常用的kmod包都打进去
好了执行上面那一坨命令,开始编译,编译过程大概分一下几部:
1、从openwrt.org更新本地依赖包的列表
2、根据更新后的依赖包列表和上面要求编译的包名,去openwrt.org下载相应的ipk包
3、把指定的ipk包编译进固件中
速度视网速而定,一般三四分钟就可以搞定,多数时间都在下载,编译其实很快的。
编译中如果出现哪个包无法编译,直接把这个包从列表中拿走就行
比如我们在列表中加一个不存在的包“kmod-auth9k”就会报如下错误
这时候只要在列表中删掉它即可
正常编译的命令如下,注意列表上不要有换行
编译成功后的终端显示如下
然后就可以在/bin/ramips中找到编译好的固件,如下
然后我们的纯净版固件就这样做好了,整个过程比编译ipk简单。我编译出来的纯净版大小为5377KB,已经是比较大了,网上有很多纯净包甚至编译进ss的包菜3点几兆。所以说明我们的纯净包并不纯净,比如编译进了很多kmod和dnsmasq-full这样的程序。
现在把这个固件通过web后台或者tftp的方式刷进路由器看看长啥样
注意:在点击更新固件之后不要将路由器断电,大约要等10分钟左右,tftp会快一点,可以不停的ping 192.168.1.1,知道能稳定的ping通就算刷完了,可以浏览器打开192.168.1.1,这个固件因为没有配置LED指示灯,所以不插lan线所有灯都不亮属正常现象(包括电源指示灯都不亮)。
刷成功之后只有LAN灯亮,wifi默认关闭
下一步我们就要配置路由器后台的登录密码,不然没法用SSH登录路由器获取root权限,推荐用户名root,密码root
然后我们就可以通过SSH软件登陆路由器安装apk了,我使用的是Xshell5
可以看到纯净版没有安装ss。
下面我们将ss的ipk安装包通过winscp上传到路由器上尝试安装,并解决依赖。
先安装ss,再安装luci界面
从图中可以看出,安装ss非常顺利,不需要解决什么依赖(我在wndr4300上装需要解决两个依赖)在安装luci界面的时候提示安装ipset依赖,于是我们去openwrt官网下载ipset ipk安装包
放到路由器上去继续安装
然后发现ipset还需要依赖包libmnl,那我们就先安装libmnl,再安装ipset,再安装luci-Shadowsocks,如上图
luci安装好之后我们就可以试试能不能用啦
可以看到Shadowsocks-libev已经可以正常运行了
路由器后台也出现了Shadowsocks的服务按钮
点进去之后发现已经可以配置了,只是UDP转发还不能用,提示缺少iptables-mod-tproxy和ip两个包,那么我们继续下载安装
这其中发现还需要额外安装一个依赖包kmod-ipt-tproxy
现在应该都能用了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。