N1 盒子使用 Armbian 内核运行 Lede (Openwrt)

注意事项


  1. 如果用作旁路由,则 N1 接主路由的的LAN口
  2. 如果用作主路由,则 N1 接入交换机或AP模式的路由器或不插 WAN 口的路由器
  3. 以上的交换机或路由器设置为 192.168.1.X,但不能为 192.168.1.1,关闭除了 N1 外所有设备的 dhcp 服务
  4. 开 udp 转发,请:opkg install iptables-mod-tproxy

制作镜像


  1. 首先创建目录 openwrt
1
mkdir openwrt
  1. 下载 openwrt rootfs 并解压
1
2
wget https://downloads.openwrt.org/releases/18.06.2/targets/armvirt/64/openwrt-18.06.2-armvirt-64-default-rootfs.tar.gz
tar xvf openwrt-18.06.2-armvirt-64-default-rootfs.tar.gz -C openwrt
  1. 挂载 armbian 镜像
1
losetup -P -f --show Armbian_5.60_Aml-s9xxx_Debian_stretch_default_4.18.7_20180922.img

会输出类似 /dev/loop0 的内容

其他任意 arm 的镜像都行,但是很多是 img 的,请自行挂载。

  1. 把第二分区挂载到 media 目录
1
mount /dev/loop0p2 /media

注意,这里的 loop0 要和上一步中的 loop0 保持一致,有可能是 loop1 等

  1. 删除 openwrt/lib/firmware 并将 media 里的内核模块和驱动等剪切到 openwrt 目录
1
2
3
4
5
6
7
rm -rf openwrt/lib/firmware
rm -rf openwrt/lib/modules

mv /media/lib/modules openwrt/lib/
mv /media/lib/firmware openwrt/lib/
mv /media/etc/modprobe.d openwrt/etc/
mv /media/etc/fstab openwrt/etc/
  1. 切换到 openwrt/lib/modules/4.18.7-aml-s9xxx
1
cd openwrt/lib/modules/4.18.7-aml-s9xxx
  1. 创建 link-ko.sh 写入以下内容
1
2
3
4
for x in `find -name *.ko`
do
ln -s $x .
done
  1. 给予 link-ko.sh 运行权限并运行
1
2
chmod +x link-ko.sh
./link-ko.sh
  1. 回到 root 目录
1
cd
  1. 编辑 openwrt/etc/init.d/boot,在第 38 行也就是 /sbin/kmodloader 之前,增加以下内容:
1
ulimit -n 51200

至此,openwrt 配置完毕,把它们全部剪切到 media 目录

  1. 先清空 media,把 openwrt 目录下所有剪切到 media 并新建 boot 目录
1
2
3
rm -rf /media/*
mv openwrt/* /media/
mkdir /media/boot
  1. 同步一下
1
sync
  1. 卸载 media 和 openwrt 目录
1
2
umount /media
losetup -d /dev/loop0

现在 Armbian_5.60_Aml-s9xxx_Debian_stretch_default_4.18.7_20180922.img 已被修改为 openwrt 系统。

路由相关设置


主路由设置

  1. 进入 Network –> Interfaces
  2. 编辑 lan 口
  3. 取消桥接的对勾,保存
  4. Network –> Interfaces,新建 wan 接口
  5. 接口名称填 wan,协议选 pppoe,网卡选 eth0,选好后,点 submit
  6. 会自动跳转宽带帐号设置页面,填入宽带帐号密码,保存。然后就可以上网了。

旁路网关设置

进入 Network –> Interfaces –> lan 口,gateway 填主路由 ip,并设置 dns,就可以上网了。

转载自 https://www.right.com.cn/forum/thread-468983-1-1.html

N1 盒子 Ubuntu 3.14 内核开启无线热点

  1. 先开启 3.14 内核无线模块
1
modprobe dhd && echo dhd >> /etc/modules
  1. 由于和后续的 dnsmasq 冲突,需要关掉系统自带的 systemd-resolved 服务
1
2
systemctl stop systemd-resolved
systemctl disable systemd-resolved
  1. 安装要用的 dnsmasq 和 net-tools 组件
1
apt install dnsmasq net-tools
  1. 下载并安装 create_ap 工具
1
2
3
git clone https://github.com/oblique/create_ap
cd create_ap/
make install
  1. 将以下内容保存至 /usr/bin/startap 。注意别忘了修改 YourSSIDHere YourPasswordHere 两个参数。如果有需要使用 2.4GHz 网络的,请去掉 –freq-band 5 –ieee80211ac 参数
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=ap
After=network.target


[Service]
Type=forking
ExecStart=/usr/bin/startap
PrivateTmp=true


[Install]
WantedBy=multi-user.target

并执行

1
2
3
chmod +x /usr/lib/systemd/system/ap.service
systemctl enable ap
systemctl start ap

解决dnsmasq安装好之后主机不能解析其他域名的问题

概述

事情是这样的,我想在阿里云上搭建一个dns服务器,没错就是吃空了,在阿里云上搭建一个本地的dns服务器,安装好之后发现不能ping域名了,难道是dns服务器的问题,换成114的dns也没有用,后来终于找到解决的方法了

操作

首先看下我的配置文件

1
2
3
4
resolv-file=/etc/resolv.conf
strict-order
listen-address=47.100.210.53
address=/hello.bboysoul.com/198.13.55.44

没错我加了这个 resolv-file=/etc/resolv.conf
也就是说的我的上游dns服务器地址应该是存在这个文件里面的,之后查看这个文件

1
2
3
4
#Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
options timeout:2 attempts:3 rotate single-request-reopen

这就是问题所在了,之后我们修改我们本机的dns服务器地址

1
vim /etc/resolvconf/resolv.conf.d/head

1
2
nameserver 47.100.210.53
nameserver 114.114.114.114

有人说ubuntu16.04是修改下面这个文件才可以修改dns服务器地址的,反正我是没有成功过,你们看着办

1
vim /etc/resolvconf/resolv.conf.d/base

但是绝对不能编辑下面这个文件,因为一旦重启网络,这个文件会被重写

1
vim /etc/resolv.conf

之后我们重启网络

1
systemctl restart networking

重启dnsmasq

1
systemctl restart dnsmasq

其实貌似直接重启dnsmasq就可以,因为重启这个貌似会直接重启网络的
如果你碰到同样ping不通主机的问题,但是我的方法没有帮助到你,那么也许下面是你的问题所在

第二种情况

首先看下这个进程是怎么启动的

1
2
3
4
╭─root@bboysoul-aliyun ~  
╰─➤ ps -ef |grep dnsmasq
dnsmasq 19842 1 0 17:02 ? 00:00:00 /usr/sbin/dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,19036,8,2,49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5 --trust-anchor=.,20326,8,2,e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
root 20371 20335 0 21:03 pts/1 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn dnsmasq

你可以看到上面这么一段

1
-r /var/run/dnsmasq/resolv.conf

看下上面这个文件的路径和内容,如果不行那么修改下面这个文件,忽略掉上面这个文件之后重启dnsmasq

1
vim /etc/default/dnsmasq

取消下面这行注释

1
IGNORE_RESOLVCONF=yes

之后手动指定上游dns服务器也就是dnsmasq的配置文件vim /etc/dnsmasq.conf加上下面这行

1
resolv-file=/etc/resolv.conf

之后就是重复我上面第一种情况的操作了

转载自 https://www.jianshu.com/p/81c0221de34c

斐讯 N1 折腾记:运行 Linux 及优化

  咳咳咳,上篇教程教大家给斐讯 N1 降级并且刷了官改系统,可以当作一个电视盒子和下载机来使用。
  有些小伙伴可能不想把它当作电视盒子,就想把它当作 NAS 或者是服务器,但是总不能拿 Android 玩吧,Android 也不是针对服务器设计的。
  那么我们说过,N1 不仅能刷官改,还能运行 Linux,而且是完整的 Linux 发行版,用 Linux 当服务器、NAS、下载机,包括电视盒子,体验总是要比 Android 好的。
  这篇教程就教大家如何在斐讯 N1 运行 Linux 以及后续的优化,在此之前,需要将你的 N1 降级并刷入 webpad 的官改固件,或者只刷入降级关键分区(感谢群里的小伙伴反馈)。传送门:《斐讯N1折腾记:降级及刷入官改》

制作 Linux 启动盘

  N1 运行 Linux 的原理是通电的时候引导 U 盘里的系统
  所以我们需要准备一个 U 盘来制作启动盘,U 盘大小推荐不低于 8G,连续读写速度推荐达到 30M/s,随机读写速度推荐达到 10M/s。最好是买个全新的,如果是旧的,提前备份好 U 盘内数据。
  N1 运行的 Linux 发行版叫做 Armbian,玩过树莓派的小伙伴应该对这个系统不陌生,是适用于 ARM 架构的 Debian 和 Ubuntu。

下载地址

Armbian:
https://pan.baidu.com/s/1ux7zAF2QYoLWwTTB0Ah5ug 密码:axov
https://yadi.sk/d/pHxaRAs-tZiei
https://mega.nz/#F!j9QSDQSQ!6WpasOlbZYIInfw6yo4phQ
https://share.weiyun.com/5eCvcvS (部分搬运)密码:mivmcn
启动盘制作工具:https://www.alexpage.de/usb-image-tool/download/

  里面有好几个版本,下载最新的 5.44 版本,然后选择 kernel_3.14,3.14 内核在 N1 上面使用最好,WiFi、蓝牙都可以正常工作,如果你不需要蓝牙和 WiFi,也可以使用 4.16 版本。

IMG 文件名含义

例如:Armbian_5.44_S9xxx_Debian_stretch_3.14.29_server_20180601.img
Armbian:这个就不多说了
5.44:Armbian 的版本号
S9xxx:适用的 CPU
Debian:基于 Debian 编译的,另外还有 Ubuntu。
stretch:Debian 或 Ubuntu 的发行版代号,stretch 表示的是 Debian 9。
3.14.29:Linux 内核版本号
server:桌面环境,Server 代表的是服务器版,没桌面环境,其他的代表的是相应的桌面环境,比如:xfce、mate。
20180601:编译日期

  小白推荐使用 Ubuntu,桌面环境推荐使用 mate。我推荐使用 Debian Server,做一个真正的服务器。
  下面我会以 Armbian_5.44_S9xxx_Debian_stretch_3.14.29_server_20180601 版为例
  首先格式化你的 U 盘分区格式为 FAT32,推荐最好把 U 盘分区全部删除。
  打开启动盘制作工具:左侧选择你的 U 盘 → 点击 [Restore] → 选择 Linux 镜像文件 → 提示框点击 [是] → 等待制作完成
  制作完成后,会出现一个名为 BOOT 的分区,打开它。如果你把分区全部删除了,BOOT 分区默认是 FAT16 格式,Windows 是不会显示的,可以使用 Ubuntu 来访问。
  把dtb文件夹里的gxl_p230_2g.dtb复制到 BOOT 分区的根目录并重命名为dtb.img。如果是 4.16 内核,dtb 文件是meson-gxl-s905d-p230.dtb
  将 N1 断电,插上 U 盘、网线,最好是插靠近 HDMI 接口那个 USB 接口,通电开机。
  正常情况下顺利开机并进入 Linux 系统,如果没有进入 Linux 系统而是进入了 Android 系统,ADB 连接至 N1,输入adb shell reboot update
  接下来的操作我会以 SSH 远程连接为例,如果你使用 HDMI 连接显示器也可以,这种情况推荐你连接一个 USB HUB,方便连接鼠标和键盘,当然,如果你用的是 Server,那么就不需要鼠标了。
  用户:root
  密码:1234
  如何获取 N1 运行 Linux 的 IP?打开 cmd,输入nslookup amlogic,如果amlogic无法解析IP,可以尝试解析aml
  首次登陆需要重置密码,先输入当前密码(1234),再输入新密码以及确认新密码。
  设置完密码之后会让你新建一个普通用户,如果是使用 Server,直接按 Ctrl + C 跳过。如果是使用桌面版,推荐创建一个普通用户,按照提示操作即可。
  跳过之后,再次使用 SSH 连接。
  这时候,整个系统就可以用了,不过我们需要做一些小工作。

小工作

  加载 WiFi 驱动:modprobe dhd && echo dhd >> /etc/modules
  设置时区:echo "Asia/Shanghai" > /etc/timezone && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  删除默认DNS:rm /etc/resolvconf/resolv.conf.d/head && touch /etc/resolvconf/resolv.conf.d/head && systemctl restart network-manager.service
  注:在重启系统后,输入cat /etc/resolv.conf,查看返回结果的第一行是否为nameserver 8.8.8.8,如果不是,则表示删除成功,如果是,则再执行一次删除命令。
  停止红外支持:systemctl stop lircd.service lircd-setup.service lircd.socket lircd-uinput.service lircmd.service
  删除红外支持:apt remove -y lirc && apt autoremove -y
  N1 没有红外,而且由于红外支持找不到红外,一直给系统日志写错误。
  重启系统:reboot
  更新软件包:apt update && apt upgrade -y

挂载外置存储设备

  推荐把外置存储设备分区格式化为 ext4 格式,不推荐使用 NTFS 格式。
  如果你的外置存储设备是 NTFS 格式,可以使用mkfs.ext4命令将你的外置存储设备格式化为 ext4 格式,格式化前提前备份数据。
  可以用fdisk -l查看你的外置存储设备是那个设备,一般是/dev/sdb,分区是/dev/sdb1,如果有多个分区,依次类推。
  输入mkfs.ext4 /dev/sdb1将分区格式化为 ext4,格式化完成后使用fdisk -l查看是否格式化成功,如果分区的 Type 属性为 Linux(如下图所示),表示分区为 ext4/3。

fdisk

  格式化成功后,为了方便挂载,可以给分区设置一个卷标。
  命令:e2label
  设置卷标示例:e2label /dev/sdb1 H1
  查看卷标示例:e2label /dev/sdb1
  然后就可以挂载分区了
  挂载分区示例:echo "LABEL=H1 /mnt ext4 defaults,noatime,nodiratime 0 2" >> /etc/fstab
  此命令会将卷标为 H1 的分区挂载到 /mnt 目录下
  重启系统使挂载生效

Samba 网络共享

  使用 Samba 将外置存储设备共享给其他设备
  Samba 可以使用 Armbian 自带的一个可视化菜单来配置,非常方便。
  启动 Armbian 配置菜单:armbian-config
  选择 [Software] → [Softy] → 选中 (空格) [Samba] → 回车 → 输入 samba 用户名和密码 → 工作组填写 WORKGROUP → 等待安装完成
  安装后,它会自动弹出修改配置文件的界面。

samba

  将红框里的内容删除
  将 ext 的 path 改为 /mnt,如果你的挂载路径不是 /mnt,则改为你的挂载路径。
  按下 TAB 键 → 选择 [OK] → 保存退出
  Samba 网络共享配置完成

后话

  小山觉得,既然斐讯 N1 的定位是 NAS,那么运行 Android 系统是显然满足不了 NAS 这个属性的,只有运行稳定且高效的 Linux 才可以称为 NAS。
  Linux 有着更多的扩展性,你可以在上面任意的折腾,比如搭建个开发环境,Web 服务器等等。
  总而言之,几十块钱买个 N1 这样的玩具,小山觉得是非常值的。
  还是那句话:文章有什么不懂的地方,欢迎在下方或者在QQ群告诉我。
  以后如果我想到 N1 的更多玩法会继续分享给大家的,再次感谢所有为 N1 可玩性付出的人。
  本篇文章参考了以下资料:

  转载自 https://www.mivm.cn/phicomm-n1-linux/

斐讯 N1 折腾记:降级及刷入官改

  上个月,斐讯 K2T 首发那天,小山一不小心抢了两台 K2T,这就尴尬了。退了吧,好不容易抢到的,不退吧,我只能激活一台。所以,两台 K2T 我自己用了一台,另一台我准备卖出去。然而一个月过去了,眼看K码就要到期了,还是没有人要。咋办呢,只能再注册个账号来激活这台 K2T,但是首次激活的机会不能浪费啊,所以我又买了 N1 + H1 。
  本来我根本不打算买 N1,因为我觉得这货没啥用,也没怎么关注过它。但是买来之后才发现,这货居然还能刷固件,刷完固件之后就是个电视盒子了,而且还能运行完整的 Linux。
  这就非常耐斯了,我的折腾之心按耐不住了,所以就开始一步步的折腾。
  这篇教程就先教大家给 斐讯 N1 降级以及刷入官改固件(电视盒子),这也是以后折腾的基础。

降级

  如果你的 N1 系统版本是 2.19,那么可以直接跳过降级过程,如果是其他版本,请按照下面的方法降级关键分区。
  降级准备:你需要有一根双公头的 USB 数据线,淘宝几块钱包邮,附上小山购买的链接(绝对不是广告):https://detail.tmall.com/item.htm?id=13036924933
  有些机智的小伙伴可能会说,我主板有 Type-C 接口,我拿手机的 Type-C 数据线,Type-C 这头插主板,A 头插 N1 行不行。
  这个方法是可以的,小山最开始也是这么做的。但是,只能用来降级,刷官改是不行的,这个问题在刷官改步骤会解释。

  1. 开启 ADB 调试

  非常简单,只需要用鼠标点击斐讯 N1 官方固件的那个版本号 4 次,出现 【ADB调试开启】的字样即可。

  1. 重启至 fastboot 模式

  如果经常给手机刷机的小伙伴,对这个模式肯定不陌生,也就是我们平常所说的线刷模式。
  这一步需要用到 ADB 调试工具,下载地址:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
  下载完成后解压,然后打开解压后的文件夹。按住 Shift,鼠标右键点击空白处,点击 [在此处打开 Powershell 窗口] 或 [在此处打开 命令提示符 窗口]。
  输入.\adb.exe connect %IP%
  将 %IP% 替换为 N1 的 IP,也就是官方固件页面显示的那个 IP。
  示例:.\adb.exe connect 192.168.1.222
  如果返回类似connected to 192.168.1.222这样的提示,表示连接成功。
  连接成功后输入.\adb.exe shell reboot fastboot,重启至 fastboot 模式。

  1. 刷入降级关键分区

  将你的 N1 用双公头 USB 数据线与电脑连接,务必连接至靠近 HDMI 接口的那个 USB 接口,连接后查看设备管理器是否识别出新的硬件,如果新硬件驱动异常,右键新硬件点击 [更新驱动程序]。
  驱动正常后,输入.\fastboot.exe devices查看 fastboot 工具是否已识别设备。
  如果返回类似XXXXXXXXXXXX fastboot这样的提示,表示成功识别。
  注:XXXXX 为序列号
  然后就可以刷入降级分区了,分区文件下载地址:N1_V2.19_imgs.zip
  将压缩包内的分区文件解压至 ADB 工具包文件夹
  依次输入命令刷入各个分区

1
2
3
.\fastboot.exe flash boot boot.img
.\fastboot.exe flash bootloader bootloader.img
.\fastboot.exe flash recovery recovery.img

  如果没有返回任何错误信息,表示降级成功。
  输入.\fastboot.exe reboot重启设备
  至此,降级步骤就完成了,可以放心的刷官改固件了。
  可能有些小伙伴会说,系统版本哪里显示的不是 2.19 啊。这个降级并不是降级系统,而是降级引导等关键分区,所以系统版本哪里不会变的。

刷入官改

  这一步比较危险和麻烦,也正是因为这一步困扰了小山好久。
  上面我说了,小山试过用 Type-C 数据线刷官改,但是没成功,为什么呢?
  问题不是出在 Type-C 上面,而是出在那个垃圾烧录工具的驱动上面(国产芯片的烧录工具,你们懂的)。
  那个烧录工具的驱动程序虽然可以兼容 Windows 10,但是缺兼容不了最新 CPU 平台。
  小山用的是 Ryzen 平台,B350 主板,但是小山各种方法都试过了,插上去它就是识别不了。后来小山把以前的旧电脑拿出来,同一个系统环境,旧电脑插上去就识别了。所以我认为是那个驱动不支持最新的CPU平台,当然,我这里只测试了 Ryzen,酷睿系列没测试,但是我估计,酷睿 7 8 系也都不支持,如果有用酷睿新平台的小伙伴成功了记得在下面留言告诉我。
  所以说,这一步,如果你用的是 Ryzen 平台,那么还是去找一台比较旧的电脑吧。
  注:小山并没有看不起国产芯片,以上言论只针对晶晨USB烧录工具。
  首先下载USB烧录工具,下载地址:USB_Burning_Tool_v2.1.6.zip
  安装的时候记得创建桌面快捷方式,安装最后的驱动安装一定不要跳过。
  另外小山找到了一个 Linux 版本的烧录工具,但没来得及测试,有兴趣的小伙伴可以试一试:http://forum.khadas.com/t/burning-tools-for-linux-pc/1832
  安装完成后还有个小工作要做

小工作

打开设备管理器
随便点击一个硬件
点击 [操作] 菜单 → [添加过时硬件] → 下一步 → 选择 [安装我手动从列表选择的硬件] → 下一步 → 选择 [libusb-win32 Usb Devices] → 下一步 → 选择 [WorldCup Device] → 下一步 → 下一步 → 完成
Burning Tool 驱动
小工作做完之后,那个USB烧录工具才可以正常工作。

  官改固件我推荐刷 webpad 的官改固件,集成度高,也很好用,自带 Google 服务、Root、Xposed 框架、离线下载等常用软件。下载地址:http://www.right.com.cn/forum/thread-322736-1-1.html
  如果只是想当一个电视盒子用的,也可以刷 YYFROM 的语音版固件,下载地址:http://www.yyfrom.com/cms/yyfrom/product/2018-4-9/156.html
  下载你喜欢的官改固件,解压压缩包,得到 img 文件。
  打开 USB_Burning_Tool → 点击 [文件] 菜单 → 导入烧录包 → 选择官改固件的 img 文件 → 等待校验完成
  校验完成后,一定要去除勾选右边烧录配置的 [擦除flash] 和 [擦除bootloader],否则会报错。

Burning Tool

  然后点击烧录工具的 【开始】,这时候,工具就进入了待命状态。
  首先将 N1 彻底断电,然后用双公头 USB 数据线连接电脑,然后接通电源。
  如果不出意外,工具应该会识别出 N1 并且开始烧录。
  如果没有识别出 N1,而 N1 直接进入了系统。使用 ADB 连接 N1(方法见上),输入.\adb.exe shell reboot update重启至刷机模式,应该就可以正常识别了。
  小山懒得再搬出旧电脑了,这里的截图借用别人的。

Burning Tool

  等待上方那个紫色的进度条变绿,提示烧录成功,这时候不要着急拔掉 N1,先点击烧录工具的 【停止】,再关闭烧录工具,然后拔掉 N1,断电,通电开机。
  首次启动大约需要 3-4 分钟,请耐心等待。
  系统启动后,会提示遥控器配对,因为用了 T1 的一些东西,直接跳过即可。
  然后联网,安装一些直播、点播视频应用,就可以完完整整的当一个电视盒子来用了。
  操控方面,可以使用天天链里的遥控器,也可以自己买个蓝牙遥控器,这个看个人喜好。
  如果你刷了 webpad 的固件,在浏览器输入 IP:8081,既可管理离线下载、samba等软件。具体用法我就不多说了。

后话

  斐讯 N1 现在二手平台仅卖 70 元,但 N1 的配置是跟那些两三百的电视盒子不相上下的,可谓是非常的有性价比。
  如果你想入手一个电视盒子,或者是想买一个类似树莓派的玩具(不搞硬件开发)。那么可以考虑下 N1,做电视盒子绰绰有余,运行 Linux 后,就是一个没有硬件扩展性的树莓派,当然,我相信大多数人买树莓派是搞软件开发的。
  这是我目前觉得斐讯最有性价比的产品之一
  再次感谢 webpad 为 N1 可玩性做出的贡献
  下篇教程教大家如何在 N1 上运行完整的 Linux 发行版

  转载自 https://www.mivm.cn/phicomm-n1-unofficial/

流水账记录下 Centos 7 配置 frp 服务端与客户端的全过程

下载 frp:https://github.com/fatedier/frp/releases,解压到 /usr/local/frp 目录下

服务端:
编辑四个文件:
/usr/local/frp/frps_full.ini(配置文件,视情况编辑)

/usr/lib/systemd/system/frps.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=frps
After=network.target

[Service]
Type=forking
ExecStart=/etc/cron.hourly/frps
ExecReload=/usr/bin/frpsreload
ExecStop=/usr/bin/killall frps
PrivateTmp=true

[Install]
WantedBy=multi-user.target

/etc/cron.hourly/frps

1
2
3
4
5
6
#!/bin/sh
echo $(date +"%Y-%m-%d %H:%M:%S") > /tmp/frpTimestamp
ps aux | grep "frps -c" | grep -v grep
if [ $? -ne 0 ];then
nohup /usr/local/frp/frps -c /usr/local/frp/frps_full.ini >> /root/frp.log 2>&1 & echo $! > /var/run/frp-server.pid
fi;

/usr/bin/frpsreload

1
2
3
#!/bin/sh
kill -9 $(cat /var/run/frp-server.pid)
nohup /usr/local/frp/frps -c /usr/local/frp/frps_full.ini >> /root/frp.log 2>&1 & echo $! > /var/run/frp-server.pid

然后执行:

1
2
systemctl enable frps
systemctl start frps

最后是 nginx 反代设置:
/usr/local/nginx/conf/vhost/pi.imjs.0cdn.cn.conf

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name pi.imjs.0cdn.cn *.pi.imjs.0cdn.cn;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host:8080;
}
}

客户端:
编辑四个文件:
/usr/local/frp/frpc_full.ini(配置文件,视情况编辑)

/usr/lib/systemd/system/frp.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=frp
After=network.target

[Service]
Type=forking
ExecStart=/etc/cron.hourly/frp
ExecReload=/usr/bin/frpreload
ExecStop=killall frp
PrivateTmp=true

[Install]
WantedBy=multi-user.target

/etc/cron.hourly/frp

1
2
3
4
5
6
#!/bin/sh
echo $(date +"%Y-%m-%d %H:%M:%S") > /tmp/frpTimestamp
ps aux | grep "frpc -c" | grep -v grep
if [ $? -ne 0 ];then
ntpdate ntp1.aliyun.com && (nohup /usr/local/frp/frpc -c /usr/local/frp/frpc_full.ini >> /root/frp.log 2>&1 & echo $! > /var/run/frp-client.pid)
fi;

/usr/bin/frpreload

1
2
3
#!/bin/sh
kill -9 $(cat /var/run/frp-client.pid)
nohup /usr/local/frp/frpc -c /usr/local/frp/frpc_full.ini >/dev/null 2>&1 & echo $! > /var/run/frp-client.pid

最后执行:

1
2
systemctl enable frp
systemctl start frp

清除windows访问Samba的访问记录

在 windows 中访问 Samba 服务器后,windows 会存储访问记录,比如密码。当我们想清除密码,重新输入时,步骤如下:
1. 获取访问记录

1
2
3
4
5
6
7
8
#在windows的命令行(cmd)中运行net use,可见访问Samba服务器的记录:
C:\Users\User>net use
会记录新的网络连接。
状态 本地 远程 网络

-------------------------------------------------------------------------------
OK \\192.168.2.1\IPC$ Microsoft Windows Network
命令成功完成。

2. 删除访问记录

1
2
C:\Users\User>net use \\192.168.2.1\IPC$ /del /y
\\192.168.2.1\IPC$ 已经删除。

3. 尝试重新登陆Samba

斐讯 K3 流光金开箱与 TTL 刷 LEDE 教程(适用于 v21.5.39.260 系统)

注意:V21.5.39.260 集成的 CFE 编译日期为 8月2日,斐讯封堵了 CFE 网页执行命令,而且固件采用公私钥验证,除了 TTL 手动执行命令基本无法刷入其他固件(斐讯K3 官方固件root版本 安装插件 entware

本文分四段:开箱,拆机加 TTL,CFE 刷官改固件,网页刷 LEDE 固件

在刷入 LEDE 固件之前,不要给 k3 连网!避免自动升级!
在刷入 LEDE 固件之前,不要给 k3 连网!避免自动升级!
在刷入 LEDE 固件之前,不要给 k3 连网!避免自动升级!

11 月 1 号 K3 流光金首发送贼快的闪迪 U 盘,趁活动入了两台:

先上购买链接:

到手开箱全家福:

四网口 + USB 3.0:

整机照:

mmp 的系统版本 v21.5.39.260:

嗯废话说完,先给各位拆个机

第一步先扯下底部脚垫,卸下四个螺丝。注意这里有保修易碎贴,如果还要保修的话,拿电吹风吹下挑开:

第二步从如图位置插入塑料卡片撬开两侧侧面面板。最好不要用美工刀、钢尺等锐利的物品操作,会留下撬痕:

第三步拆开侧面面板,轻轻取下上方天线(注意侧面有卡扣,把塑料外壳往外掰一下就可以取出来了),取下后搁在上面就行,目的是为了卸螺丝。

第四步卸下固定两块主板用的八颗螺丝(在螺丝边上上胶的家伙我谢谢你全家):

第五步在下方主板的右侧 TX RX GND 塞 TTL 线并固定(如果要保修的话,不要固定,我是为了方便以后刷机)我用的热熔胶,如果希望牢固一点的话可以用焊锡。线可以从边上散热孔引出:

第六步接 TTL 小板调试(TX 接 RXD,RX 接 TXD,GND 接 GND),115200,如果有输出,就是正常的:

最后合上侧面面板:

PS 最后找公司的硬件工程师帮忙把引出的线改成了座儿,用热熔胶固定在了散热口:

有了 TTL,我们需要先刷入破解了 root 的官改固件并降级,为刷入 LEDE 固件做准备:

以下是需要的软件:

第一步下载固件,安装运行 Tftpd 工具。使用网线连接至 k3 上,设置静态 IP 192.168.2.100,网关 192.168.2.1,将 Tftpd 中的目录切换到你存放解压出来的固件目录,并切换网卡(应该是 192.168.2.100,我因为刷机后截的图地址不一样):

第二步给路由器断电,连接 TTL,捅 Reset 通电开机,如果成功进入 CFE 会出现下一步图中以 CFE> 开头的界面

第三步输入命令,CFE 会拉取你本机上的固件:

1
flash -noheader 192.168.2.100:/k3_root.bin nflash0.trx

第四步等写入完成后输入 reboot 重启

第五步在 TTL 输入以下命令,将 mtd6 镜像拉至路由器上并写入(镜像大小 44M,刷写时间比较长,大约需要 20 ~ 30 分钟(尽量多等一段时间),刷写过程中不要断开路由器的电源或拔网线,以免变砖!!!):

1
2
3
4
cd /tmp
tftp -g -l K3-linux-partition-mtd6.img -r K3-linux-partition-mtd6.img 192.168.2.100
cat /tmp/K3-linux-partition-mtd6.img > /dev/mtd6
reboot

最后进入功能设置 –> 手动升级看到如图系统版本就说明成功了

随后开始刷 LEDE

固件下载:

第一步刷入基础包,进入功能设置 –> 手动升级,上传:

第二步打开 192.168.1.1,进入 System –> Backup / Flash Firmware,上传升级包固件

最后重启完成,重新打开 192.168.1.1,使用 root / password 登录即可:

该固件带屏幕驱动,感谢 Lean 大的无私奉献!

参考以下文章:

  1. 拆机部分:斐讯路由器怎么样?斐讯K3拆机图解
  1. 官改固件:斐讯K3 官方固件root版本 安装插件 entware
  1. 固件降级:K3原厂固件从217版降级212版方法
  1. Lean 大 LEDE:斐讯 K3 OPENWRT LEDE R7.3 固件,Adbyby Plus,潘多拉多拨,S…

PHP无限级分类实现(递归+非递归)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
/**
* Created by PhpStorm.
* User: qishou
* Date: 15-8-2
* Time: 上午12:00
*/
//准备数组,代替从数据库中检索出的数据(共有三个必须字段id,name,pid)
header("content-type:text/html;charset=utf-8");
$categories = array(
array('id'=>1,'name'=>'电脑','pid'=>0),
array('id'=>2,'name'=>'手机','pid'=>0),
array('id'=>3,'name'=>'笔记本','pid'=>1),
array('id'=>4,'name'=>'台式机','pid'=>1),
array('id'=>5,'name'=>'智能机','pid'=>2),
array('id'=>6,'name'=>'功能机','pid'=>2),
array('id'=>7,'name'=>'超级本','pid'=>3),
array('id'=>8,'name'=>'游戏本','pid'=>3),
);

/*======================非递归实现========================*/
$tree = array();
//第一步,将分类id作为数组key,并创建children单元
foreach($categories as $category){
$tree[$category['id']] = $category;
$tree[$category['id']]['children'] = array();
}
//第二步,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。
foreach($tree as $key=>$item){
if($item['pid'] != 0){
$tree[$item['pid']]['children'][] = &$tree[$key];//注意:此处必须传引用否则结果不对
if($tree[$key]['children'] == null){
unset($tree[$key]['children']); //如果children为空,则删除该children元素(可选)
}
}
}
////第三步,删除无用的非根节点数据
foreach($tree as $key=>$category){
if($category['pid'] != 0){
unset($tree[$key]);
}
}

print_r($tree);

/*======================递归实现========================*/
$tree = $categories;
function get_attr($a,$pid){
$tree = array(); //每次都声明一个新数组用来放子元素
foreach($a as $v){
if($v['pid'] == $pid){ //匹配子记录
$v['children'] = get_attr($a,$v['id']); //递归获取子记录
if($v['children'] == null){
unset($v['children']); //如果子元素为空则unset()进行删除,说明已经到该分支的最后一个元素了(可选)
}
$tree[] = $v; //将记录存入新数组
}
}
return $tree; //返回新数组
}
echo "<br/><br/><br/>";

print_r(get_attr($tree,0));

转载自 http://blog.csdn.net/qishouzhang/article/details/47204359

aria2配置示例

其实面对man的存在,写什么总结完全没有必要,一切宝藏都在manual。不过反正不会有人会读就是了。那我就写一下吧

##基础
首先,aria2或者叫做aria2c,它是一个下载器,嗯。
常用的两种模式是直接下载,比如 aria2c “http://host/file.zip" 这样,当它完成后就退出了,就像wget(估计你们也不知道吧)那样。
另一种就是rpc server模式,特点就是,它启动之后什么都不干,然后等着从rpc接口添加任务,下载完也不退出,而是一直等着。对,就像迅雷干的那样,当然,它不会上传你硬盘上的数据。
因为第一种方式要每次都敲命令,除非像我是原生nix,没有命令行就没法用电脑,估计也没什么用,于是常用的就是第二种。一般启动命令是 aria2c –enable-rpc –rpc-listen-all=true –rpc-allow-origin-all -c -D 。但是,其实*这个命令是不好的!不要使用这种启动方式。
首先,用命令方式导致配置不方便修改保存,-D导致无法看到出错信息。
推荐启动方式是使用配置文件 $HOME/.aria2/aria2.conf 。嗯,我知道路由上这个地址是无法修改或者重启后会丢失的,那么你可以放到别的地方,然后 aria2c –conf-path= 注意 填完整路径,因为鬼知道这个程序是从那个路径启动的。-D (用于后台执行, 这样ssh断开连接后程序不会退出) 只有在确认OK之后在启动脚本中使用。

以下方案都基于配置文件方式

##图形界面
aria2是没有图形界面的,已知相对好用的图形界面有:

请使用chrome,firefox等现代浏览器访问。这两个东西都可以直接使用,除了看英文不爽以外,有什么必要下载回来使用?(吐槽:难道你们就不觉得webui-aria2的title总是被压成好几行,诡异的配色(对,说的就是那个蓝色背景,深蓝颜色的 Use custom IP and port settings 按钮)不难看吗?)
图形界面基本都基于RPC模式,所以一定确定开启了RPC,IP端口可访问,并且在管理器中填写了正确的地址

##配置
请将所有配置置于配置文件中
只有在确认配置无误后再加上 -D 选项
请阅读出错信息!

###RPC
需要1.14及以上版本
http://aria2.sourceforge.net/manual/en/html/aria2c.html#rpc-options

1
2
3
4
5
6
7
8
#允许rpc
enable-rpc=true
#允许所有来源, web界面跨域权限需要
rpc-allow-origin-all=true
#允许非外部访问
rpc-listen-all=true
#RPC端口, 仅当默认端口被占用时修改
#rpc-listen-port=6800

如果启动时出现 Initializing EpollEventPoll failed. 或相似错误, 在配置中加上 event-poll=select

使用token验证(建议使用,需要1.18.4以上版本,帐号密码方式将在后续版本中停用!)

1
2
# token验证
rpc-secret=secret

在YAAW中使用 http://token:secret@hostname:port/jsonrpc 的地址格式设置secret.
如果需要使用密码验证(需要1.15.2以上,1.18.6以下版本)

1
2
3
4
#用户名
rpc-user=username
#密码
rpc-passwd=passwd

在YAAW中使用 http://username:passwd@hostname:port/jsonrpc 的地址格式设置密码.
对于RPC模式来说, 界面和后端是分离的, 只要给后端设置密码即可. 前端认证什么的是毫无意义的.
如果你比较新潮, 在YAAW中也可以用 ws:// 为前缀,只用websocket连接aria2c, 如果你不知道websocket是什么. 那就算了.

###速度相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#最大同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=5
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=5
#最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
min-split-size=10M
#单文件最大线程数, 路由建议值: 5
split=10
#下载速度限制
max-overall-download-limit=0
#单文件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单文件速度限制
max-upload-limit=0
#断开速度过慢的连接
#lowest-speed-limit=0
#验证用,需要1.16.1之后的release版本
#referer=*

###进度保存相关
aria2c只有在正常退出时(ctrl-c), 突然断电是无法保存进度的. 在第一次使用的时候会出现会话文件不存在的错误, 手动创建一个空文件即可. 如果您编写的是自动启动脚本,在启动aria2前加上 touch aria2.session 这句命令。

1
2
3
4
input-file=/some/where/aria2.session
save-session=/some/where/aria2.session
#定时保存会话,需要1.16.1之后的release版
#save-session-interval=60

###磁盘相关

1
2
3
4
5
6
7
8
9
#文件保存路径, 默认为当前启动位置
dir=/some/where
#文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
#disk-cache=0
#另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?)
#enable-mmap=true
#文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长
#所需时间 none < falloc ? trunc << prealloc, falloc和trunc需要文件系统和内核支持
file-allocation=prealloc

###BT相关
http://aria2.sourceforge.net/manual/en/html/aria2c.html#bittorrent-specific-options

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#启用本地节点查找
bt-enable-lpd=true
#添加额外的tracker
#bt-tracker=<URI>,…
#单种子最大连接数
#bt-max-peers=55
#强制加密, 防迅雷必备
#bt-require-crypto=true
#当下载的文件是一个种子(以.torrent结尾)时, 自动下载BT
follow-torrent=true
#BT监听端口, 当端口屏蔽时使用
#listen-port=6881-6999
aria2亦可以用于PT下载, 下载的关键在于伪装
#不确定是否需要,为保险起见,need more test
enable-dht=false
bt-enable-lpd=false
enable-peer-exchange=false
#修改特征
user-agent=uTorrent/2210(25130)
peer-id-prefix=-UT2210-
#修改做种设置, 允许做种
seed-ratio=0
#保存会话
force-save=true
bt-hash-check-seed=true
bt-seed-unverified=true
bt-save-metadata=true
#定时保存会话,需要1.16.1之后的某个release版本(比如1.16.2)
#save-session-interval=60

##常见问题

###Internal server error
手动访问你的JSON-RPC地址 http://hostname:port/jsonrpc?jsoncallback=1 如果没有返回, 请确认aria2是否启动以及连通性. 如果aria2在路由器后或没有公网IP, 请做好端口映射.

###如何使用迅雷离线
http://binux.github.com/ThunderLixianExporter/
安装后, 在迅雷离线的右上角的设置中设置RPC地址.
提供chrome插件: https://chrome.google.com/webstore/detail/thunderlixianassistant/eehlmkfpnagoieibahhcghphdbjcdmen

###如何使用旋风离线(QQ离线)
http://userscripts.org/scripts/show/142624
安装脚本后, 在旋风离线页面使用.

转载自 https://binux.blog/2012/12/aria2-examples/