在树莓派上部署openwrt
五一放假,不想写代码不想看书也懒得追番,准备搞事情,把旧iPhone和一块旧树莓派(3B)废物重组一下,让iPhone体验一下Tiktok的沙雕。
打算按照mlapp帖子里的固件和方法整,当然,有关树(Li)莓(nu)派(x)的任何东西都不会那么一帆风顺的……
概况
现有环境
因为我最近才发现,家里用的TP-LINK的无线猫上已经连了很多设备了,智能音响、扫地机器人、空气净化器、树莓派、手机、电脑、电视等等十几个设备,直接改造TP-LINK影响太大了,而且一时半会上不了网,这个我是不能接受的。那么,只好从主猫上再接出一路WiFi。
目前手里有好几块树莓派(但是我没买4,因为听说type-c有些无伤大雅的设计问题,完美主义者怎么能买这种东西呢?!),3B+、3B、2B我都有,于是选了个3B,因为性能还凑合,而且我只有一个2B舍不得用,要知道2B是不板载无线里性能最NB的了,万一哪天会在比较严格的环境试验这种东西,肯定首选这个没无线功能的了[捂脸]另外,3B+上面有DOA的麦阵列那一套环境,懒得删了,所以选用这个闲置的3B。
iPhone吧是个6S,卡早换新手机上了,你要用Tiktok得骗它。因此,通过某瑞士安全邮箱服务、谷歌地图、一次性手机号服务等AppleID相关操作,再连上有科学功能的树莓派WiFi,它就真以为自己是个硅谷手机了。这个时候,装上Tiktok,就可以绕过字节跳动的分区管理了。
写镜像
使用macOS向SD卡写镜像
失败:用balenaEtcher写镜像直接报错,不管是lean官方的,还是mlapp提供的都说“镜像损坏”。
失败:用macOS的dd
强行写,虽然能写进去,但返回值是错误的(unix非0返回值,zsh红箭头),插入树莓派启动失败:
1 | (base) ➜ ~ sudo dd bs=1m if=/Users/zealot/Downloads/openwrt-bcm27xx-bcm2710-rpi-3-squashfs-factory.img of=/dev/rdisk2 |
网上搜了一下,推荐用Windows下的分区工具或者Linux下的dd
。
使用虚拟机向SD卡写镜像
实在是因为手头拿不出Windows电脑或者USB读卡器[捂脸]。
用以前在virtualbox建好的里的win7,不论怎么设置苹果内置的sdcard reader(虚拟机里显示为一个USB设备,不论mount状态、如何重启虚拟机都不行),都报设备busy的错误:
查看sdcard:
1 | (base) ➜ ~ df -lh |
或是卸载sdcard:
1 | diskutil umount /dev/disk2s1 |
查帖子说是因为后来的MBP不把读卡器暴露为USB设备了,按这个帖子做:
插入SDcard,在终端里用
mount
查看分区,确定设备名称。在我的电脑上,显示为“NO NAME”的卷就是SD卡,其对应的设备叫做/dev/disk2s1
,而这个s1
表示/dev/disk2
上的第一个分区,因此设备名其实应该叫做/dev/disk2
:1
2
3
4
5
6
7
8(base) ➜ ~ mount
/dev/disk1s5 on / (apfs, local, read-only, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk1s1 on /System/Volumes/Data (apfs, local, journaled, nobrowse)
/dev/disk1s4 on /private/var/vm (apfs, local, journaled, nobrowse)
map auto_home on /System/Volumes/Data/home (autofs, automounted, nobrowse)
/dev/disk1s3 on /Volumes/Recovery (apfs, local, journaled, nobrowse)
/dev/disk2s1 on /Volumes/NO NAME (msdos, local, nodev, nosuid, noowners)打开电脑上“Disk Utility.app”,也就是“磁盘工具.app”,找到SD卡然后卸载它,要注意是卸载,而不是推出。另外,可能在做完下一步后还需要在卸载一次,因为macOS有可能自动把SD卡装载回来。
使用下面的命令,要注意的是,
-rawdisk
后面跟的参数是/dev/disk2
,不是/dev/disk2s1
。另外,/Users/zealot/VirtualBox\ VMs/WIN7/sdcard.vmdk
这个路径写哪都行,图方便我直接放在我的WIN7虚拟机文件夹下了。:1
2(base) ➜ ~ sudo VBoxManage internalcommands createrawvmdk -filename /Users/zealot/VirtualBox\ VMs/WIN7/sdcard.vmdk -rawdisk /dev/disk2
RAW host disk access VMDK file /Users/zealot/VirtualBox VMs/WIN7/sdcard.vmdk created successfully.注:若出现类似”…vmdk uuid…does not match /var/root/Library/VirtualBox/VirtualBox.xml”这种报错,可以考虑修改虚拟机配置文件如
WIN7.vbox
或VirtualBox.xml
文件中的相应uuid。重新配置虚拟机:
确定虚拟机已关闭;
打开“设置”->“存储”,点控制器旁边的“添加虚拟磁盘”,并选择“使用现有的虚拟磁盘”;
点击“注册”,选择上一步中生成的
/Users/zealot/VirtualBox\ VMs/WIN7/sdcard.vmdk
;此处如果报权限错误,我试了chmod
和chown
改.vmdk
和disk2s1
的权限是没用的,我也试了关掉macOS的SIP同样是没用的,必须命令行管理员权限运行sudo VirtualBox
才可以。真的不太懂系统权限问题[捂脸]。双击列表中的
sdcard.vmdk
,然后就会返回“存储”界面并看到这个设备。启动虚拟机,看到该设备显示为一个本地磁盘。
这一套做下来,我们的SD卡在win7里就挂载为了一个ATA设备,也就是硬盘,很不幸的是“Win32 Disk Imager”是不认硬盘的。
因此,把4.2修改一下:打开“设置”->“存储”,点控下方的“添加存储控制器”,选择菜单项“添加USB控制器”,这时候列表里多出来一个“USB控制器”,然后再按照上一步中2、3操作添加虚拟磁盘,然后选上“热插拔”和“固态驱动器”,这样就真的把SD卡伪装成USB设备了。此时Win7里出现两块硬盘,一个是ATA设备,一个是USB设备。再打开“Win32 Disk Imager”时,就可以选择这个盘了:
开机搜索名为“openwrt”的无线SSID,连接,进入http://192.168.1.1,用“root/password”登录配置界面。
配置openwrt
先让自己能上网
我家用的TP-LINK的猫,LAN口接树莓派,而这个TP-LINK默认是在192.168.1.1上的,所以先在openwrt配置界面中“网络”->“接口”里改个IP,默认网关写在192.168.1.1上,然后写上俩TP-LINK里用的DNS(我的西安电信通常是61.134.1.4
和218.30.19.40
,西安移动通常是211.137.130.19
)就可以访问互联网了。
配置SS
先把本机的公钥先传到openwrt上,方便ssh登录,然后直接root登录吧,懒得弄用户了。
如果vim
时报错遇到"E437: terminal capability "cm" required"
,需要执行一下export TERM=xterm
。
继续,在openwrt管理页面中配置“ShadowSocksR Plus+”->“服务器节点”,添加一个类型为“ShadowSocksR”的服务器就可以了,我的情况,主机名、端口、密码、加密方式填上,其他默认就可以直接联通了。
github免密push
临时想到的,最近时不时要更新博客,push的时候总是让我输入用户名密码,很烦。因为我的github号是双因子的,push时总要输用户名,然后复制粘贴那个巨长的push key。
github repo的免密push设置也很简单,最关键的是注意仓库的git协议。
本机git仓库配置
在仓库中使用git config -e
命令修改配置文件,只有使用git
时才可以免密,https
不行:
1 | [remote "origin"] |
如果是hexo之类的博客,cli工具自动集成push功能,那么修改其配置文件的repo目标即可,比如我用的hexo,那么修改_config.yml
即可:
1 | deploy: |
远端github配置
可以在你的某个特定github-repo下的“settings”->“deploy key”里写一个公钥,选上允许写权限。这个方法有个缺点,一个库会占一个key,下一个库就不能再用这个key了。
也可以直接在github账号配置的“settings”->“SSH and GPG keys”里写一个SSH公钥,这个号里所有的repo就都可以push了。其实这个方法更简单,推荐。
后记
工作这么多年,除了自学机器学习,最有用的就是去成都培训了一个月的Linux基础知识,打那时候起,就再也不虚Linux环境了,甚至编译报错都敢直接改源码了。所以说,对程序员来说,什么最重要?是以技术为基础产生的信念,遇到问题时,始终相信只要是计算机上的罗辑问题,都是可解的,就算当下搞不定,时间长了总能搞定。