月度归档:2017年01月

在TL-WR703N上安装LEDE并扩展到U盘运行(Extroot)

更新

20170808 感谢@ian提醒,先修改fstab再复制overlay,就不会出现 fstab 恢复原始状态的状况。重新更改该部分内容。 20170706 在720N上,目前新版的LEDE使用f2fs格式化的U盘做exroot时,会出现类似如下的错误: mount: mounting /dev/sda1 on /mnt failed: Invalid argument mount: mounting /dev/sda1 on /mnt failed: I/O error 暂时解决办法是:windows上使用MiniTool Partition Wizard将U盘格式化为ext4格式。 相应的,制作固件时的命令改为: make image PROFILE=tl-wr703n-v1 PACKAGES="block-mount kmod-fs-ext4 kmod-usb-storage" 20170625 LEDE稳定发行版已于20170610更新为17.01.2,本文内容做相应修改。 20170430 LEDE稳定发行版已于20170418更新为17.01.1,本文内容做相应修改。 20170315 所有硬件版本的703N均可以按此方法扩展,但是强烈建议在可以刷入pepe2k不死uboot的703N上进行操作,理论上包括:v1.0-v1.6,以及v1.7(Dec. 2012 (FW build 121204))。 20170222 延迟1周后,LEDE第一个正式版的固件和软件包终于出现在了LEDE官方的下载库中,具体版本号是:17.01.0-r3205-59508e3官方网页暂时仍显示为Current Release - LEDE 17.01.0-rc2,但是应该很快会更新。按正式版重新整理里此文档,但不管是releases版还是snapshots,此文档均适用。 20170212 在无luci的情况下,设置PPPoE和无线桥接的方法可以参考这里20170205 LEDE目前已经放出了发行版的时间表,并已公布了第一个预览版 17.01.0 RC1。 17.01.0最终版将于2017年2月15公布。

说明

说明放在前面,以免浪费你的宝贵时间或可能破坏掉你的路由器: 1.不死uboot 因为只要有了不死uboot,就可以保证只要在uboot中刷入任何固件都不会导致变砖,所以我建议折腾的基础是建立在能刷入不死uboot的703N上。目前理论上可以方便的刷入pepe2k的不死uboot的703N硬件版本为:v1.0-v1.6,以及v1.7(Dec. 2012 (FW build 121204))。尽管事实上,如果想刷,任何版本的703N(包括April 2014 (3.17.1 Build 140120 Rel.56593n))都可以按此法进行扩展,只是个别703N--特指April 2014 (3.17.1 Build 140120 Rel.56593n)--因为不能方便的写入不死uboot,在操作的过程中存在变砖的可能性,尽管有一些硬件DIY可以救,但是这种情况是应该而且可以避免的。LEDE文档说支持的是703N V1。我这个背面铭牌上印的是:Ver:1.6,并操作成功;所以,我不清楚其他版本的情况; 2.这不是一个完全手把手的教程,只是记录自己折腾的过程,因此对于从没有折腾过OpenWrt的人来说,将会面对很多细节问题,一个小问题也许就会卡住你好几天的时间,甚至破坏了你的703N; 3.如果你想折腾,请务必读完全文再决定是否动手; 4.动手之前,请务必备份好网络配置文件(/etc/config/下的network,wireless,firewall),我假设你之前成功折腾了OpenWrt,不过,你折腾过OpenWrt,这些保不保存也无所谓了; 5.如果你对在没有luci(网页版的管理界面)的情况下如何配置网络完全不了解,我劝你动手之前还是要三思。 4.本文亦适用于TL-WR720N。

TL-WR703N只有4M闪存,如果想要安装官方稳定发行版(Stable Release,带luci),不管是OpenWrt还是LEDE,目前能成功配置USB扩展(Extroot)的最新版本是barrier_breaker 14.07

作为OpenWrt的Reboot项目,LEDE已运行多时。半年多了,第一个正式版已经发布,但目前只有此外每日更新的为snapshot版(该版本默认不带luci)。因闪存空间不足以安装扩展所需的软件,LEDE官方稳定发行版(Stable Release)和其开发快照版(Development Snapshot)都是无法扩展到U盘(Extroot)的。但是LEDE和OpenWrt一样,同样提供了一个固件构建程序包(imagebuilder),可以将扩展U盘所需软件直接打包进固件当中,避免了使用opkg安装这些文件出现的空间不足问题,从而成功实现Usb扩展。因为是采用官方工具自己构建,所以对那些使用别人打包的软件心存芥蒂的人来说,是个不错的选择。此外imagebuilder并非从头编译固件,只是相对简单的打包(make),因此不会耗费太多硬件资源和时间。

本文主要参考:
https://lede-project.org/docs/user-guide/extroot_configuration

1 Extroot的背景知识:

LEDE固件将所支持设备的内部存储划分为两部分,一部分高度压缩且只读(/),另一部分可写(/overlay)。LEDE(OpenWrt)通过linux内核的功能可以在表现形式上将这两部存储合并起来,使得对应用程序来说,只感觉到一个总的可读写的存储空间。
Extroot,则是在这两者之外,通过外置U盘等再添加一个外部的(/overlay),在启动时接替了(mounted over)内部的(/overlay)工作,从而实现扩展。还有个好处是,外部(/overlay)接替内部(/overlay)工作,并不彻底覆盖掉或破坏内部的(/overlay),只是运行于其上,这就意味着当外接U盘损坏或移除后,仍然可以通过内部的(/overlay)部分启动,恢复到开启Extroot前的状态。

2 实现步骤

2.1 所需的条件

64位的linux系统(运行在虚拟机中的也可以)
选择正确的固件构建程序包(imagebuilder)
假设是一个u盘(当时折腾14.07时分了三个区

2.2 建立工作目录

mkdir lede-703n
cd lede-703n

2.3 获取正确的imagebuilder

2.3.1 对于正式版:

2.3.1.1 在LEDE的下载库中找到703N所在的文件夹,并找到相关文件
https://downloads.lede-project.org/releases/17.01.2/targets/ar71xx/generic/

tl-wr703n-v1-squashfs-factory.bin
sha256sum: 6989535e198c7d250fcf39a4cf46e74a6230a0a40d2b5c66c22f290101e32c7c
tl-wr703n-v1-squashfs-sysupgrade.bin
sha256sum: 812ec41c9de2e94cb9fa1150f9662e050f4b2b21bd00ce328a8096f55aa1b458
lede-imagebuilder-17.01.2-ar71xx-generic.Linux-x86_64.tar.xz
sha256sum: 21635b5f9c8a21544fb46cb0fac714c4146d5da625105722867f45259fec07db

2.3.1.2 下载对应的imagebuilder:

wget https://downloads.lede-project.org/releases/17.01.2/targets/ar71xx/generic/lede-imagebuilder-17.01.2-ar71xx-generic.Linux-x86_64.tar.xz

wget出错就:

wget --no-check-certificate https://downloads.lede-project.org/releases/17.01.2/targets/ar71xx/generic/lede-imagebuilder-17.01.2-ar71xx-generic.Linux-x86_64.tar.xz

2.3.1.3 解压imagebuilder

xz -d lede-imagebuilder-17.01.2-ar71xx-generic.Linux-x86_64.tar.xz
tar -xvf lede-imagebuilder-17.01.2-ar71xx-generic.Linux-x86_64.tar
2.3.2 对于snapshots版:

2.3.2.1 在LEDE的下载库中找到703N所在的文件夹,并找到相关文件
https://downloads.lede-project.org/snapshots/targets/ar71xx/generic/

tl-wr703n-v1-squashfs-factory.bin
tl-wr703n-v1-squashfs-sysupgrade.bin
lede-imagebuilder-ar71xx-generic.Linux-x86_64.tar.xz

2.3.2.2 下载对应的imagebuilder:

wget https://downloads.lede-project.org/snapshots/targets/ar71xx/generic/lede-imagebuilder-ar71xx-generic.Linux-x86_64.tar.xz

wget出错就:

wget --no-check-certificate https://downloads.lede-project.org/snapshots/targets/ar71xx/generic/lede-imagebuilder-ar71xx-generic.Linux-x86_64.tar.xz

2.3.2.3 解压imagebuilder

xz -d lede-imagebuilder-ar71xx-generic.Linux-x86_64.tar.xz
tar -xvf lede-imagebuilder-ar71xx-generic.Linux-x86_64.tar

2.4 安装make所需的依赖

2.4.1 若是CentOS/RHEL
yum install subversion git gawk gettext ncurses-devel zlib-devel openssl-devel libxslt unzip
yum group install "Development Tools"
2.4.2若是Debian/Ubuntu
apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc unzip

2.5 打包固件

2.5.1 进入imagebuilder工作目录:
cd lede-imagebuilder-*
2.5.2 获取703N的打包参数PROFILE:tl-wr703n-v1。
make info
...
tl-wr703n-v1:
    TP-LINK TL-WR703N
    Packages: kmod-usb-core kmod-usb2
...
2.5.3 打包并获取固件
make image PROFILE=tl-wr703n-v1 PACKAGES="block-mount kmod-fs-f2fs kmod-usb-storage mkf2fs f2fsck"

打包很快完成,在bin/targets/ar71xx/generic/下可以找到已经打包好的固件。

ls ./bin/targets/ar71xx/generic/

17.01.2正式版:

lede-17.01.2-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
lede-17.01.2-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin

snapshots版:

lede-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
lede-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin

2.6 刷入固件

网线连接703N,强烈推荐在不死uboot中刷入sysupgrade固件。

2.7 扩展到U盘(Exroot)

2.7.1 更改root密码

安装好固件后,等指示灯稳定后,用puyyt连接路由器 192.168.1.1,首先是更改root密码

passwd
2.7.2 查看挂载情况
block info
/dev/mtdblock2: UUID="9fd43c61-c3f2c38f-13440ce7-53f0d42d" VERSION="4.0" MOUNT="/rom" TYPE="squashfs"
/dev/mtdblock3: MOUNT="/overlay" TYPE="jffs2"
/dev/sda1: UUID="fdacc9f1-0e0e-45ab-acee-9cb9cc8d7d49" VERSION="1.4" TYPE="ext4"
/dev/sda5: VERSION="1" TYPE="swap"
/dev/sda6: UUID="fffaa123-1234-5678-abcd-1234abcd5678" VERSION="1.7" MOUNT="/mnt/sda6" TYPE="ext4"

这里借用了原文的信息来说明情况。可见已经成功挂载U盘,三个区是:sda1、sda5、sda6。
sda1是为Extroot准备的,sda5是swap,sda6后续可以作为aria2和samba等文档存储区。

2.7.3 将U盘的第一个区sda1和第三个区sda6格式化为f2fs格式
mkfs.f2fs /dev/sda1
mkfs.f2fs /dev/sda6

f2fs格式是为闪存设计的,u盘和ssd建议为f2fs格式。

2.7.4 自动修改文件系统(fstab)信息:
block detect > /etc/config/fstab; \
sed -i s/option$'\t'enabled$'\t'\'0\'/option$'\t'enabled$'\t'\'1\'/ /etc/config/fstab; \
sed -i s#/mnt/sda1#/overlay# /etc/config/fstab; \
cat /etc/config/fstab;

此时自动配置好并显示挂载情况:

config 'global'
        option  anon_swap       '0'
        option  anon_mount      '0'
        option  auto_swap       '1'
        option  auto_mount      '1'
        option  delay_root      '5'
        option  check_fs        '0'

config 'mount'
        option  target  '/overlay'
        option  uuid    'fdacc9f1-0e0e-45ab-acee-9cb9cc8d7d49'
        option  enabled '1'

config 'swap'
        option  device  '/dev/sda5'
        option  enabled '1'

config 'mount'
        option  target  '/mnt/sda6'
        option  uuid    'fffaa123-1234-5678-abcd-1234abcd5678'
        option  enabled '1
2.7.5 复制/overlay到sda1
mount /dev/sda1 /mnt ; tar -C /overlay -cvf - . | tar -C /mnt -xf - ; umount /mnt

直接重启路由器:

reboot
2.7.6 重启后就可以查看到成功了:
df -h

2.8 后续

2.8.1想办法,把没有luci的路由器联网
如果之前备份过OpenWrt的网络配置文件,通过WinScp传回重启就可以了。
2.8.2安装必要组件:
opkg update
opkg install luci luci-i18n-base-zh-cn luci-theme-material
opkg install ...

注:
1.现在没必要安装luci-ssl,它使用的是一个自签名的证书;
2.不要在成功扩展后(Extroot)运行opkg upgrade,更不要通过luci或者putty更新固件,更新固件永远在uboot中进行。

在NETGEAR R6100上安装LEDE以及luci、material主题和中文语言包

更新

20170308 由于正式版发布,强烈建议使用正式版。但是如果仍然想安装Snapshot固件,那么该文档仍然适合你。 20170222 无luci的固件联网方法,可以参照这个帖子: LEDE第一个正式版固件17.01.0已经可以下载。
如果R6100刷了LEDE后,感觉WIFI下载速度不够快,可以看看这个帖子:
NETGEAR R6100在LEDE中5GHz频段Wi-Fi的启用、设置与优化

OpenWrt的部分核心程序员认为OpenWrt不够开放透明,核心人员不够活跃又缺少合作,修补bug移植新功能速度慢,基础设施也不健全,所以他们决定重启试试(reboot),来建立一个更好的项目:LEDE

我折腾这个目前还处在Snapshot阶段(已足够稳定,未预装luci界面)并亟待发布稳定版的LEDE的原因很简单:
我暂时觉得material主题很漂亮。
因为OpenWrt的material主题处于snapshot中,未在Chaos Calmer 15.05.1中提供,即使可以强行安装成功,但会碰到opkg update失败(wget returned 5.)的情况。

简单记录下折腾过程:

折腾环境是:

假如路由器是NETGEAR R6100
路由器R6100通过网线连接移动宽带的光猫;
电脑通过WIFI连接R6100实现上网。

折腾思路是:

因为只有一根网线,且LEDE暂时未预装luci界面,只能通过putty操作。
1 安装LEDE;
2 通过这根网线连接电脑和LEDE路由器的LAN口,设置root密码,开启LEDE路由器的WIFI功能,顺带设置好LEDE路由器的PPPOE功能;
3 再通过这根网线将LEDE路由器的WAN口与移动光猫的LAN口连接,电脑通过WIFI和R6100连通,实现上网;
4 在电脑上通过WIFI和putty进一步设置。

折腾过程是:

1.安装LEDE

在LEDE下载目录中
https://downloads.lede-project.org/snapshots/targets/
找到R6100的固件。当前R6100正在运行OpenWrt,故下载sysupgrade固件即可。
https://downloads.lede-project.org/snapshots/targets/ar71xx/nand/lede-ar71xx-nand-r6100-squashfs-sysupgrade.tar

在OpenWrt的luci里: 系统-备份/升级中刷写新固件,此处注意要去掉“保留配置”的钩,之后刷写固件,切勿断电

2 有线连接电脑与LEDE路由器

刷入LEDE几分钟后,将电脑与LEDE路由器LAN口通过网线连接。LEDE路由器默认IP地址为192.168.1.1。将电脑有线网络设置ipv4自动获取,或者设置为192.168.1.2。此时在电脑上ping 192.168.1.1应该可以有回应了。

2.1 设置root密码

用putty通过 22端口登陆192.168.1.1,用户名为root,密码为空。见到欢迎界面后,即可设置root密码:

passwd
2.2 开启无线网络,设置PPPOE

2.2.1 开启WIFI

vi /etc/config/wireless

将config wifi-device ‘radio0’下的option disabled ‘1’改为

option disabled '0'

保存,并应用网络设置

/etc/init.d/network restart

稍等片刻,即可发现名为LEDE的可供连接的无线网络,密码为空。可在装好luci图形界面后再设置WIFI密码。

2.2.2 设置PPPOE

uci set network.wan.proto=pppoe
uci set network.wan.username=用户名
uci set network.wan.password=密码
uci commit

应用网络设置

/etc/init.d/network restart

2.2.3 更改LEDE路由器LAN的默认网关地址
(实测不更改此地址亦无问题,但强烈建议更改。否则通过浏览器登陆LEDE路由器luci界面的默认网关IP 192.168.1.1时,可能会出现移动光猫的登陆界面,因为移动光猫的网关IP默认也是192.168.1.1。)
此时最好将LEDE路由器LAN的默认网关设置为其他IP,本步及下文均设置为192.168.2.1。

vi /etc/config/network

将config interface ‘lan’区域下的option ipaddr ‘192.168.1.1’改为

option ipaddr '192.168.2.1'

保存,并应用新的网络设置

/etc/init.d/network restart

3 有线连接LEDE路由器和光猫,WIFI连接电脑和LEDE路由器

此时,用网线将LEDE路由器的WAN口与移动光猫的LAN口连接,电脑通过WIFI连接LEDE路由器,此时应该可以上网了。
putty登陆刚才设置好的LEDE路由器网关,192.168.2.1。

okpg update

安装luci、material主题、中文语言包。

opkg install luci-ssl luci-theme-material luci-i18n-base-zh-cn

等待结束。
此时浏览器登陆192.168.2.1,顺利的话就可以看到material的luci界面了。
下一篇:NETGEAR R6100在LEDE中5GHz频段Wi-Fi的启用、设置与优化