晨曦's Blog

This is a window to the soul

git

在使用 git clone gogs 项目的时候出现错误 fatal: unable to fork ,原因是因为没有 openssh,解决:brew install openssh

npm

问题如下:

1
2
3
4
5
6
> node-gyp rebuild
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.
No receipt for 'com.apple.pkg.DeveloperToolsCLILeo' found at '/'.
No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.
gyp: No Xcode or CLT version detected!

尝试解决:

1
2
xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates

尝试失败了,再次尝试解决:

1
2
sudo rm -rf $(xcode-select -print-path)
xcode-select --install

先删除再重新安装问题解决,真是奇葩问题

先来看看阿里对 docker 加速的步骤

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

接下来我们对群晖中 Docker 套件进行设置,配置文件如下,只需要将阿里加速地址设置在 registry-mirrors 即可

1
2
3
4
5
6
7
8
# 配置文件路径
# /var/packages/Docker/etc/dockerd.json
{
"data-root" : "/var/packages/Docker/target/docker",
"log-driver" : "db",
"registry-mirrors" : ["https://xxx.mirror.aliyuncs.com"],
"storage-driver" : "btrfs"
}

在群晖中对服务的管理可以用 synoservice 命令,利用下面命令重启 Docker

1
synoservice --restart pkgctl-Docker

这样就能重启 Docker 实现加速了,最后我们可以通过 docker info 来查看 Registry Mirrors 参数看是否设置正确


另一种方式也可以通过网页端的套件中心对套件进行停用启用

安装

其实安装挺简单的,因为家里有群晖,所以只需要在 docker 插件上进行安装即可

配置

http

由于群晖中容器安装,所以需要设置 http 访问地址,不然会出现以下错误

1
2
3
4
5
6
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/aiohttp/web_protocol.py", line 275, in data_received
messages, upgraded, tail = self._request_parser.feed_data(data)
File "aiohttp\_http_parser.pyx", line 523, in aiohttp._http_parser.HttpParser.feed_data
aiohttp.http_exceptions.BadStatusLine: invalid HTTP method
2020-05-01 16:19:34 ERROR (MainThread) [aiohttp.server] Error handling request

配置如下:

1
2
http:
base_url: http://xx.xxx.com:8123

Mysql

默认是用的 sqlite 数据库,如果数据量比较大的话建议可以用 mysql 配置如下:

1
2
recorder:
db_url: mysql://user:password@SERVER_IP/DB_NAME?charset=utf8

插件

对于 docker 安装的版本只有核心,并没有 hass.io 插件模块,对于这块可以看以下文章,不过官方好像已经放弃这种方式了:

Hass.io via Docker


估计还是需要上树莓派才是王道

插件

autojump:实现目录间快速跳转,想去哪个目录直接 j,不用再有事没事就 cd
zsh-autosuggestions:输入命令时可提示自动补全以及之前的历史记录,然后按键盘即可
zsh-syntax-highlighting:日常用的命令会高亮显示,命令错误显示红色

安装

安装前我们可以在配置文件中查看 plugins 目录如下

1
2
# Standard plugins can be found in ~/.oh-my-zsh/plugins/*
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/

autojump 安装如下:

1
brew install autojump

zsh-autosuggestions 安装如下:

1
git clone git@github.com:zsh-users/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions

zsh-syntax-highlighting 安装如下:

1
git clone git@github.com:zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting

配置

1
2
3
4
5
plugins=(
autojump
zsh-autosuggestions
zsh-syntax-highlighting
)

加载

source .zshrc

前记

自用代码管理 gogs 和对应的 mysql 都部署在家用群晖的 Docker 上,今早发现 gogs500 错误无法访问,经过查询日志确定是 mysql 5.7 密码已过期,如下错误

1
Error 1862: Your password has expired. To log in you must change it using a client that supports expired passwords.

解决

ssh 登陆到群晖

1
ssh admin@192.168.1.x -p xx22

首先我们需要对群晖 admin 账户提权

1
sudo su

然后进入对应的 docker 容器并登陆到 mysql 客户端,这里说明一下客户端的密码是不会过期的

1
docker exec -it mysql1 mysql -uroot -ppassword

然后重置密码

1
set password = password('newpassword');

接下来刷新权限

1
flush privileges;

最后设置密码永不过期

1
SET GLOBAL default_password_lifetime = 0;

到此问题就解决了,又可以愉快的访问 gogs

前记

6.2 系列引导已经出了一年多了,最近想升级 6.2 试试,于是踩进了坑

当前配置:

  • 型号:DS3615xs
  • 系统:6.1.7

踩坑步骤

  • 新做 1号U盘(6.2引导盘)
  • 拔出 2号U盘(6.1.7引导盘)换上 1号U盘(6.2引导盘)
  • 启动 - 联机 - 迁移(6.2.2)- 重启
  • 做完上面步骤后开机找不到 IP(这里已经改 BIOS 传统启动方式了)
  • 用原 2号U盘(6.1.7引导盘)重新引导
  • 启动 - 联机 - 提示还原 - 还原 - 重启
  • 做完上面步骤后又找不到 IP

降级处理

  • 新做 1号U盘(6.1.7引导盘)型号为 DS3617xs
  • 启动 - 联机 - 全新安装(如果用迁移依然没法降级安装)- 重启

做完以上步骤重启发现仅系统盘丢失,数据盘依然存在,如:docker 容器等

参考资料

XPEnology Community

Scratch

scratch 是一个空镜像,只能用于构建其他镜像,比如你要运行一个包含所有依赖的二进制文件,如 Golang 程序,可以直接使用 scratch 作为基础镜像

Busybox

scratch 是个空镜像,如果希望镜像里可以包含一些常用的 Linux 工具,busybox 镜像是个不错选择,镜像本身只有 763KB,非常便于构建小镜像

BusyBox 是一个集成了一百多个最常用 Linux 命令和工具(如 catechogrepmounttelnet 等)的精简工具箱,它只需要几百KB 的大小,很方便进行各种快速验证,被誉为 Linux 系统的瑞士军刀

BusyBox 可运行于多款 POSIX 环境的操作系统中,如 Linux(包括 Android)、HurdFreeBSD

Alpine

Alpine 采用了 musl libcbusybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,Alpine 还提供了自己的包管理工具 apk,可以通过 packages网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件

Alpine Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他 Docker 镜像,它的容量非常小,仅仅只有 5 MB 左右(对比 Ubuntu 系列镜像接近 200MB),且拥有非常友好的包管理机制

前记

为什么要软路由?目前家里的拓扑是

1
公网 -> 路由器 -> NAS/BOOK/PHONE

路由器负责了拨号科学上网广告过滤

之前已经将 Frp 移到了 NASDocker 里面

FRP 资源

FRP 教程

至于为什么要软路由原因:

  1. AC66U_B1 时常不够稳定,将 frp 迁移至 nas 后深有感受
  2. AC66U_B1 固件中插件有限而且越来越不好用,所以更多的是想将路由上的功能转一部分到软路由上

改造后拓扑为:

1
公网 -> NAS软路由 -> NAS/硬路由->BOOK/PHONE

硬件改造

改造前现有的硬件设备:

机箱:乔思伯 V2
主板:华擎 N3150TM-ITX 主板
电源:绿巨能笔记本 DC 电源
硬盘:西部数据 (WD) 红盘 4TB * 2
内存:金士顿 DDR3L 4G

改造前如图:

改造部分为更换机箱以及增加网卡

机箱:金河田(Golden field)预见 N-1
网卡:EDUP EP-9602 PCI-E 千兆网卡

改造后如图:

LEDE 安装

上传镜像

https://firmware.koolshare.cn/LEDE_X64_fw867 / 虚拟机转盘或 PE 下写盘专用 / 下载 combined-squashfs.img.gz 固件,解压后上传至群晖,如图:

网络设置

好吧,被坑了,还一直没找到问题所在。

最开始上了 EDUP EP-9602 PCI-E千兆网卡(RTL8111芯片),在群晖的网络界面能识别,在 VMM 网络界面添加虚拟交换机时无法识别;后面又换了 LR-LINK 联瑞pciex1台式机千兆有线网卡intelI211芯片支持linux LREC9202CT 还是无法识别;后来又换了胜为(shengwei)PCI-E千兆网卡 以太网rj45台式机电脑10/100/1000自适应网卡 单口 带唤醒 PEC-2051 还是无法识别

算了,不玩儿了

终结

网卡无法识别原因寻找中

未完待续…


关于群晖部分问题可以看各位网友的总结:

黑群晖常见问题

离线安装

SSH 到路由器上
下载 KoolProxy 离线包

1
2
3
4
5
6
7
cd /tmp

# 此为arm380下的包,版本为:3.8.4.1
wget http://cdn.jakehu.me/koolproxy.tar.gz

# 此为arm384下的包,版本为:3.8.4.1
wget http://cdn.jakehu.me/koolproxy384.tar.gz

解压并安装

1
2
3
4
5
6
7
# 此为arm380下的包,版本为:3.8.4.1
tar koolproxy.tar.gz

# 此为arm384下的包,版本为:3.8.4.1
tar koolproxy384.tar.gz

sh koolproxy/install.sh

规则转换

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
安装WebShell
复制下面的内容发送命令。

cd /jffs/.koolshare/koolproxy/data/rules
# 删除旧版本规则文件
rm -rf koolproxy.txt
rm -rf daily.txt
rm -rf kp.dat
# 下载新版本规则文件

wget -O daily.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/easylistchina.txt
wget -O koolproxy.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/fanboy-annoyance.txt
# wget -O kp.dat https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/kp.dat
wget -O kp.dat https://raw.githubusercontent.com/user1121114685/koolproxyR_rule_list/master/kp.dat
# wget -O user.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/user.txt
wget -O user.txt https://raw.githubusercontent.com/user1121114685/koolproxyR_rule_list/master/kpr_our_rule.txt
# 下载扩展规则合并
wget -O koolproxy_tmp.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/191c06c8d1f769f1b81c1437ad3b1271e0e58d7b/koolproxyR/koolproxyR/data/rules/kpr_video_list.txt
wget -O daily_tmp.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/yhosts.txt

cat koolproxy_tmp.txt >>koolproxy.txt
cat daily_tmp.txt >>daily.txt

echo 一点点清洁工作...
rm -rf koolproxy_tmp.txt
rm -rf daily_tmp.txt
echo koolproxy规则已替换完成,请重新启用koolproxy!

自动更新

脚本

自动更新脚本如下:
/jffs/scripts/koolproxy.sh

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
#!/bin/sh

echo "开始转换koolproxyR规则"
cd /jffs/.koolshare/koolproxy/data/rules

# 删除旧版本规则文件
echo "第一步"
echo
echo -e "删除旧版本规则文件"
rm -rf koolproxy.txt
rm -rf daily.txt
rm -rf kp.dat

# 下载新版本规则文件
echo "第二步"
echo
echo -e "下载新版本规则文件"
wget -O daily.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/easylistchina.txt
wget -O koolproxy.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/fanboy-annoyance.txt
# wget -O kp.dat https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/kp.dat
wget -O kp.dat https://raw.githubusercontent.com/user1121114685/koolproxyR_rule_list/master/kp.dat
# wget -O user.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/user.txt
wget -O user.txt https://raw.githubusercontent.com/user1121114685/koolproxyR_rule_list/master/kpr_our_rule.txt
# 下载扩展规则合并
wget -O koolproxy_tmp.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/191c06c8d1f769f1b81c1437ad3b1271e0e58d7b/koolproxyR/koolproxyR/data/rules/kpr_video_list.txt
wget -O daily_tmp.txt https://raw.githubusercontent.com/user1121114685/koolproxyR/master/koolproxyR/koolproxyR/data/rules/yhosts.txt

echo "第三步"
echo
echo -e "合并规则"
cat koolproxy_tmp.txt >>koolproxy.txt
cat daily_tmp.txt >>daily.txt

echo "第四步"
echo
echo -e "一点点清洁工作..."
rm -rf koolproxy_tmp.txt
rm -rf daily_tmp.txt
echo -e "koolproxyR规则转换成功"

exit 0

设置

1
Tools->Scripts->定时任务

参考资料:
arm380 arm384 org lede