Jun
7
参考安装步骤:https://yeasy.gitbook.io/docker_practice/install/ubuntu
== 修改镜像源 ==
腾讯云:https://cloud.tencent.com/document/product/1207/45596
$ sudo mkdir -p /etc/docker && sudo vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
== 配置代理 ==
$ sudo mkdir /etc/systemd/system/docker.service.d
$ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,tencentcloudcr.com,halo2024.tencentcloudcr.com"
最后需要重新加载配置:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
== 修改镜像源 ==
腾讯云:https://cloud.tencent.com/document/product/1207/45596
$ sudo mkdir -p /etc/docker && sudo vi /etc/docker/daemon.json
引用
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
== 配置代理 ==
$ sudo mkdir /etc/systemd/system/docker.service.d
$ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
引用
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,tencentcloudcr.com,halo2024.tencentcloudcr.com"
最后需要重新加载配置:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
May
8
在阿里云采购的小内存(512M)主机会 OOM,卸载完这些垃圾服务以后就正常了。
# 云盾(AliYunDun、AliYunDunMonitor)
https://help.aliyun.com/zh/security-center/user-guide/uninstall-the-security-center-agent#section-wfc-zqf-pgb
在主机资产页面该服务器基本信息页签的防御状态区域关闭「客户端自保护」和「恶意主机行为防御」
然后在 云安全中心控制台 -> 系统配置 > 功能设置 -> 客户端 -> 卸载,找到对应的主机完成卸载。
# 云助手(aliyun-assist)
https://help.aliyun.com/zh/ecs/user-guide/start-stop-or-uninstall-the-cloud-assistant-agent
# 云监控(cloudmonitor)
https://help.aliyun.com/zh/cms/cloudmonitor-1-0/user-guide/install-and-uninstall-the-cloudmonitor-agent-for-cpp#section-hdw-doi-fv4
# 云盾(AliYunDun、AliYunDunMonitor)
https://help.aliyun.com/zh/security-center/user-guide/uninstall-the-security-center-agent#section-wfc-zqf-pgb
在主机资产页面该服务器基本信息页签的防御状态区域关闭「客户端自保护」和「恶意主机行为防御」
然后在 云安全中心控制台 -> 系统配置 > 功能设置 -> 客户端 -> 卸载,找到对应的主机完成卸载。
# 云助手(aliyun-assist)
https://help.aliyun.com/zh/ecs/user-guide/start-stop-or-uninstall-the-cloud-assistant-agent
/usr/local/share/assist-daemon/assist_daemon --stop
/usr/local/share/assist-daemon/assist_daemon --delete
ps x | grep aliyun-service
kill $PID
rm -rf /usr/local/share/assist-daemon
rm -rf /usr/local/share/aliyun-assist
/usr/local/share/assist-daemon/assist_daemon --delete
ps x | grep aliyun-service
kill $PID
rm -rf /usr/local/share/assist-daemon
rm -rf /usr/local/share/aliyun-assist
# 云监控(cloudmonitor)
https://help.aliyun.com/zh/cms/cloudmonitor-1-0/user-guide/install-and-uninstall-the-cloudmonitor-agent-for-cpp#section-hdw-doi-fv4
bash /usr/local/cloudmonitor/cloudmonitorCtl.sh stop
bash /usr/local/cloudmonitor/cloudmonitorCtl.sh uninstall
rm -rf /usr/local/cloudmonitor
bash /usr/local/cloudmonitor/cloudmonitorCtl.sh uninstall
rm -rf /usr/local/cloudmonitor
Apr
15
某办公网的 ISP 有强制 DNS 劫持,通过这种方式可以在内网提供不受污染的 DNS 服务:
修改 hosts
120.53.53.53 doh.pub
然后用 gost v2 提供 dns 服务:
sudo gost -L="dns://${内网IP}:53?mode=udp&dns=https://doh.pub/dns-query"
注:
1. 如果不修改 hosts,有可能仍然被劫持;
2. gost(v2)可从 https://github.com/ginuerzh/gost 下载;
3. 监听 0.0.0.0 会失败(可能是因为 systemd 在监听 127.0.2.1:53 有冲突),所以需要监听指定的 IP。
修改 hosts
引用
120.53.53.53 doh.pub
然后用 gost v2 提供 dns 服务:
引用
sudo gost -L="dns://${内网IP}:53?mode=udp&dns=https://doh.pub/dns-query"
注:
1. 如果不修改 hosts,有可能仍然被劫持;
2. gost(v2)可从 https://github.com/ginuerzh/gost 下载;
3. 监听 0.0.0.0 会失败(可能是因为 systemd 在监听 127.0.2.1:53 有冲突),所以需要监听指定的 IP。
Mar
15
通过 API 下载了个 zip 文件是 AES-256 加密的,用 unzip 解压报错:
WINRAR 倒是可以解压,但是 unrar 命令行工具不支持。
换用 7zip 可以正常解压,在 windows 下有乱码,倒腾了一圈,最后解决了:
注:
- `-y` 表示确认所有提问(例如文件存在则覆盖)
- 65001 是 UTF-8 的 code page;反过来如果是windows下压缩的文件希望在linux下解压无乱码,就得用 936 (即GBK)
- 文件扩展名需要是 .zip;如果用 .7z 的话,也会报错 "Can't open as archive: 1"
引用
unsupported compression method 99
WINRAR 倒是可以解压,但是 unrar 命令行工具不支持。
换用 7zip 可以正常解压,在 windows 下有乱码,倒腾了一圈,最后解决了:
引用
7z x -y -pPASSWORD -mcp=65001 file.zip
注:
- `-y` 表示确认所有提问(例如文件存在则覆盖)
- 65001 是 UTF-8 的 code page;反过来如果是windows下压缩的文件希望在linux下解压无乱码,就得用 936 (即GBK)
- 文件扩展名需要是 .zip;如果用 .7z 的话,也会报错 "Can't open as archive: 1"
Dec
18
1. Get character count in a line
$ xxd packets | head -n 1 | wc -c
68
2. Join lines
xxd packets | tr -d '\n' && echo
Save the output to local file "packets.xxd".
3. Fold lines and decode
fold packets.xxd -w 67 | xxd -r > packets
引用
$ xxd packets | head -n 1 | wc -c
68
2. Join lines
引用
xxd packets | tr -d '\n' && echo
Save the output to local file "packets.xxd".
3. Fold lines and decode
引用
fold packets.xxd -w 67 | xxd -r > packets
Dec
16
// 日常吐槽莎币苹果。
MacOS 有很多很蠢的地方,比如没有快捷键可以让窗口在屏幕间移动;比如不能右键直接创建空文件;比如右键菜单有「复制」和「拷贝」两个选项;比如会莫名其妙出现左右声道不平衡的 bug 并且长期未修复;
再比如,不能在外接显示屏的情况下关闭内屏。
当然也不是完全不能,网友也有一些解决方案:
1. 合上屏幕当主机用,自然就息屏了。不过我需要用 mac 的键盘、触摸板和 TouchID 解锁。过。
2. 随身携带磁铁,欺骗 macOS 屏幕已经关闭。这可能是种行为艺术,可惜我不是艺术家。过。
3. SwitchResX,试了下,确实可以把内屏关闭,只不过拔了外显内屏还是关着的,折腾了几下甚至 mac 都不能识别外显了,重启才解决。卸。
4. 在「系统设置 -> 显示」里,将背光拉到 0;不能直接用 Fn 调节屏幕亮度,因为会把外接屏亮度一起调低(莎币值+1);而且每次接上外显或 wakeup 时,都要重新设置。过……吧?
好在作为一名码农,可以想一些自动化的方式来把方案 4 利用起来。
首先是用 brew install brightness (update: M3 Macbook can not use this. try Lunar, details below),可以用 `brightness -d 1 0` 把 display 1 的亮度调到 0 (注意把主屏设置为外接屏,且把内屏设置为拷贝外屏,这样内屏的编号就是 1,外显是 0)。
其次是有一个叫 hammerspoon 的软件(https://www.hammerspoon.org/),可以在 unlock 的时候自动执行一个 lua 脚本。
把下面这个 lua 脚本存为 ~/.hammerspoon/init.lua
然后再 touch ~/.unlock && chmod +x ~/.unlock,内容为:
sleep 5 是因为从睡眠状态恢复时,识别外屏会比较慢,可按需调整 sleep 时长。
如果你看到这里,说明你也需要注意日常用电脑的姿势了,避免头颈前倾。
(完)。
update @ 2023-12-12
实际体验下来还有一些问题,例如去倒杯水,锁屏但没有睡眠,解锁后就不会息屏。
最好用的方案往往只需要最简单的工具:crontab。
MAILTO=""
* * * * * /Users/bytedance/bin/TurnOffScreen.sh
* * * * * sleep 15 && /Users/bytedance/bin/TurnOffScreen.sh
* * * * * sleep 30 && /Users/bytedance/bin/TurnOffScreen.sh
* * * * * sleep 45 && /Users/bytedance/bin/TurnOffScreen.sh
update @ 2024-01-26
brightness seems to be not working on M3 Macbooks, so I switched to lunar:
1. Download and install lunar
2. Run in terminal: /Applications/Lunar.app/Contents/MacOS/Lunar install-cli
3. Update the TurnOffScreen.sh to be (remember to replace with your monitor model or serial id in the pattern):
MacOS 有很多很蠢的地方,比如没有快捷键可以让窗口在屏幕间移动;比如不能右键直接创建空文件;比如右键菜单有「复制」和「拷贝」两个选项;比如会莫名其妙出现左右声道不平衡的 bug 并且长期未修复;
再比如,不能在外接显示屏的情况下关闭内屏。
当然也不是完全不能,网友也有一些解决方案:
1. 合上屏幕当主机用,自然就息屏了。不过我需要用 mac 的键盘、触摸板和 TouchID 解锁。过。
2. 随身携带磁铁,欺骗 macOS 屏幕已经关闭。这可能是种行为艺术,可惜我不是艺术家。过。
3. SwitchResX,试了下,确实可以把内屏关闭,只不过拔了外显内屏还是关着的,折腾了几下甚至 mac 都不能识别外显了,重启才解决。卸。
4. 在「系统设置 -> 显示」里,将背光拉到 0;不能直接用 Fn 调节屏幕亮度,因为会把外接屏亮度一起调低(莎币值+1);而且每次接上外显或 wakeup 时,都要重新设置。过……吧?
好在作为一名码农,可以想一些自动化的方式来把方案 4 利用起来。
首先是用 brew install brightness (update: M3 Macbook can not use this. try Lunar, details below),可以用 `brightness -d 1 0` 把 display 1 的亮度调到 0 (注意把主屏设置为外接屏,且把内屏设置为拷贝外屏,这样内屏的编号就是 1,外显是 0)。
其次是有一个叫 hammerspoon 的软件(https://www.hammerspoon.org/),可以在 unlock 的时候自动执行一个 lua 脚本。
把下面这个 lua 脚本存为 ~/.hammerspoon/init.lua
-- init.lua
local log = hs.logger.new("", "info")
local function ok2str(ok)
if ok then return "ok" else return "fail" end
end
hs.caffeinate.watcher.new(function(event)
local eventName = hs.caffeinate.watcher[event]
log.f("got caffeinate event:%s (id:%d)", eventName, event)
local script
if event == hs.caffeinate.watcher.screensDidLock then
script = "${HOME}/.lock"
elseif event == hs.caffeinate.watcher.screensDidUnlock then
script = "${HOME}/.unlock"
else
log.f("ignored event:%s (id:%d)", eventName, event)
return
end
local ok, st, n = os.execute(script)
log.f("exec:%s -> %s, %s, %d", script, ok2str(ok), st, n)
end
):start()
local log = hs.logger.new("", "info")
local function ok2str(ok)
if ok then return "ok" else return "fail" end
end
hs.caffeinate.watcher.new(function(event)
local eventName = hs.caffeinate.watcher[event]
log.f("got caffeinate event:%s (id:%d)", eventName, event)
local script
if event == hs.caffeinate.watcher.screensDidLock then
script = "${HOME}/.lock"
elseif event == hs.caffeinate.watcher.screensDidUnlock then
script = "${HOME}/.unlock"
else
log.f("ignored event:%s (id:%d)", eventName, event)
return
end
local ok, st, n = os.execute(script)
log.f("exec:%s -> %s, %s, %d", script, ok2str(ok), st, n)
end
):start()
然后再 touch ~/.unlock && chmod +x ~/.unlock,内容为:
#!/bin/bash
export PATH=$PATH:/usr/local/bin/
brightness -d 1 0
sleep 5 && brightness -d 1 0
export PATH=$PATH:/usr/local/bin/
brightness -d 1 0
sleep 5 && brightness -d 1 0
sleep 5 是因为从睡眠状态恢复时,识别外屏会比较慢,可按需调整 sleep 时长。
如果你看到这里,说明你也需要注意日常用电脑的姿势了,避免头颈前倾。
(完)。
update @ 2023-12-12
实际体验下来还有一些问题,例如去倒杯水,锁屏但没有睡眠,解锁后就不会息屏。
最好用的方案往往只需要最简单的工具:crontab。
引用
MAILTO=""
* * * * * /Users/bytedance/bin/TurnOffScreen.sh
* * * * * sleep 15 && /Users/bytedance/bin/TurnOffScreen.sh
* * * * * sleep 30 && /Users/bytedance/bin/TurnOffScreen.sh
* * * * * sleep 45 && /Users/bytedance/bin/TurnOffScreen.sh
update @ 2024-01-26
brightness seems to be not working on M3 Macbooks, so I switched to lunar:
1. Download and install lunar
2. Run in terminal: /Applications/Lunar.app/Contents/MacOS/Lunar install-cli
3. Update the TurnOffScreen.sh to be (remember to replace with your monitor model or serial id in the pattern):
#!/bin/bash
pattern='S2721QS'
if ~/.local/bin/lunar displays | grep $pattern; then
~/.local/bin/lunar displays "Built-in" brightness 0
fi
pattern='S2721QS'
if ~/.local/bin/lunar displays | grep $pattern; then
~/.local/bin/lunar displays "Built-in" brightness 0
fi
Sep
1
2009年在 B 厂实习的时候,人手发一个硬件 token,它有个屏幕,实时显示 6 位 TOTP ,用于登录 relay 机器,再通过 relay 机器登录生产环境的机器。
由于 relay 机器禁用了端口转发等各种 fancy 的能力,所以除了 shell 上的输入和输出外无法实现额外的通信。
好在 SecureCRT 默认支持 zmodem 协议,大家都用 sz/rz 来上传/下载文件,也还算方便。
sz 是基于 zmodem 协议实现的,这个功能在早期的 BBS 上非常实用。
简单说就是,通过发送一个特殊的控制串,告诉 terminal 它想要发送一个文件,支持 zmodem 协议的 terminal 会将后续发送的数据保存到本地文件中。
当然具体的协议细节比较复杂,不是本文重点,就不展开了,详情可参考知乎这位老哥的整理 https://zhuanlan.zhihu.com/p/579720546 。
继续发散,我们可以想象一下,如果我们实现 2 个程序 A、B:
1. A 通过 ssh 连接到目标机器,打开 B
2. 用 B 的 stdin/stdout 来「模拟」一个 tcp 连接
3. 在这个「tcp 连接」上用 xtaci/smux 实现多路复用
4. 在 A 实现 socks5 的前端(监听),在 B 实现 socks5 的后端(转发)
这样我们就实现了一个穿透了 relay 的代理。
领导:明天去财务处结一下工资,后天不用来了。
由于 relay 机器禁用了端口转发等各种 fancy 的能力,所以除了 shell 上的输入和输出外无法实现额外的通信。
好在 SecureCRT 默认支持 zmodem 协议,大家都用 sz/rz 来上传/下载文件,也还算方便。
sz 是基于 zmodem 协议实现的,这个功能在早期的 BBS 上非常实用。
简单说就是,通过发送一个特殊的控制串,告诉 terminal 它想要发送一个文件,支持 zmodem 协议的 terminal 会将后续发送的数据保存到本地文件中。
当然具体的协议细节比较复杂,不是本文重点,就不展开了,详情可参考知乎这位老哥的整理 https://zhuanlan.zhihu.com/p/579720546 。
继续发散,我们可以想象一下,如果我们实现 2 个程序 A、B:
1. A 通过 ssh 连接到目标机器,打开 B
2. 用 B 的 stdin/stdout 来「模拟」一个 tcp 连接
3. 在这个「tcp 连接」上用 xtaci/smux 实现多路复用
4. 在 A 实现 socks5 的前端(监听),在 B 实现 socks5 的后端(转发)
这样我们就实现了一个穿透了 relay 的代理。
领导:明天去财务处结一下工资,后天不用来了。
Feb
24
Why: kitex framework is using gofumpt as linter in gitlab CI, but goland defaults to use gofmt, which enforces weaker rules.
Procedure:
0. $ go install mvdan.cc/gofumpt@v0.2.0 # or any version as you need
1. Install file watcher plugin in goland settings;
2. Go to settings -> Tools -> File Watchers:
2.1. Click on "+", and choose "go fmt"
2.2. Replace "Program:" to be the full path of your gofumpt binary
2.3. Modify "Arguments:" to be "-w $FilePath$"
2.4 OK & OK again.
Procedure:
0. $ go install mvdan.cc/gofumpt@v0.2.0 # or any version as you need
1. Install file watcher plugin in goland settings;
2. Go to settings -> Tools -> File Watchers:
2.1. Click on "+", and choose "go fmt"
2.2. Replace "Program:" to be the full path of your gofumpt binary
2.3. Modify "Arguments:" to be "-w $FilePath$"
2.4 OK & OK again.