Blogs
pve 安装 immortalwrt
immortalwrt firmware selector, pve 安装下载 squashfs-combined-efi. squashfs: 一种只读的文件系统,每次修改: actually a copy of it is being copied to the second (JFFS2) partition combined: 带引导分区文件 combined-efi: 支持 efi 启动 1. 安装 # 上传到 pve 任意目录 gzip -d immortalwrt-xxx # 查看已有虚拟机配置: qm config <vmid> # ~~net0 待启动 immortalwrt 基本设置完成后再设置~~ # 创建空白虚拟机(无磁盘) qm create 201 --name opw-immort-2305.4 \ --ostype l26 --scsihw virtio-scsi-single \ --cpu x86-64-v2-AES --cores 2 --memory 2048 \ --net0 virtio,bridge=vmbr0,firewall=1 \ --net1 virtio,bridge=vmbr1,firewall=1 \ --net2 virtio,bridge=vmbr2,firewall=1 \ --boot order=scsi0 # 导入磁盘, 此命令成功后会输出 `Successfully imported disk as 'unused0:local-lvm:vm-201-disk-0'`, 记录 local-lvm:vm-201-disk-0 后续命令使用 qm importdisk 201 immortalwrt-xxx.img local-lvm # 磁盘连接到虚拟机的 SCSI 控制器, 并设置大小 qm set 201 --scsi0 local-lvm:vm-201-disk-0,iothread=1,size=1024M 2. 配置 配置备份与还原: 系统 > 备份与升级
2024/06/16
ssh jump & port forwarding
References: SSH from A through B to C, using private key on B A Visual Guide to SSH Tunnels: Local and Remote Port Forwarding ssh jump use self key situation: ssh ssh A ------> B ------> C ^ ^ using A's using A's ssh key ssh key Access C from A by: ssh -J B C
2024/04/28
WSL2 安装 ArchLinux
wsl2: wsl --set-default-version 2 推荐浏览: wsl 检查可用容量 wsl vhdx 定位 wsl-config ArchL Wiki ArchL Wiki pacman 安装 ArchLinux 基本安装 从 yuk7/ArchWSL 下载安装, 此处选择最轻便的 zip, 解压到例如 d:/wsl2/arch, 双击 Arch.exe 即完成安装. 关于其 release 的其他文件: Arch_Online 是不带 fs 的, 运行 Arch.exe 后会先去 github(yuk7/ArchWSL-FS) 下载 fs, 通常作者会同步更新这俩仓库所以没必要使用此版本 安装完成后会在目录生成 ext4.vhdx, 其内部就是整个系统, rootfs 文件可以删除. 通过 wsl -l -v 的列表中有无 Arch 来确认是否成功 设置此 VHD (虚拟磁盘)自动收缩: wsl --manage Arch --set-sparse true wsl2 config windows 下的 ~/.wslconfig 和 子系统下的 /etc/wsl.conf 可配置项部分不是完全相同的!!!
2024/04/09
PVE 首页添加温度
pve 首页添加温度 1. 依赖配置 # 安装依赖 apt install lm-sensors # 检测可用传感器 sensors-detect # 测试 -j 参数表示 json 输出 sensors -j 2. 修改源码 vi 编辑按键不对解决: nano /etc/vim/vimrc.tiny 将 set compatible 改为 set nocompatible
2023/09/23
go 杂项
http.Response.Body 注意 Body 字段的注释: The default HTTP client’s Transport may not reuse HTTP/1.x “keep-alive” TCP connections if the Body is not read to completion and closed. 为了连接复用,需要读取和关闭 body,如果实际不用 body 时可使用 io.Copy(io.Discard, resp.Body) 使用 strace 查看连接情况: strace -qqfe connect ./read_body 2>&1 | grep -E '\(80\)|doRequest' In [1]: %%writefile /tmp/read_body.go // go build -o read_body main.go package main import ( "fmt" "io" "net/http" ) func doRequest(closeBody, readBody bool) { resp, err := http.Get(`http://httpbin.org/get`) if err != nil { panic(err) } defer resp.Body.Close() if readBody { io.Copy(io.Discard, resp.Body) } fmt.Printf("doRequest done, closeBody=%v, readBody=%v\n", closeBody, readBody) } func main() { doRequest(true, true) doRequest(false, true) doRequest(true, true) doRequest(true, true) doRequest(true, false) doRequest(true, true) } Out[1]: Cell contents written to "/tmp/read_body.go". In [2]: !cd /tmp; go build -o read_body read_body.go !cd /tmp; strace -qqfe connect ./read_body 2>&1 | grep -E '\(80\)|doRequest' // 可以看到有两次 `connect(5, {sa_family=AF_INET...`, 第二发生在 `doRequest(true, false)` 的下一个请求, 即其没有释放连接 Out[2]: [pid 33511] connect(5, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("198.18.1.217")}, 16) = -1 EINPROGRESS (Operation now in progress) doRequest done, closeBody=true, readBody=true doRequest done, closeBody=false, readBody=true doRequest done, closeBody=true, readBody=true doRequest done, closeBody=true, readBody=true doRequest done, closeBody=true, readBody=false [pid 33511] connect(5, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("198.18.1.217")}, 16) = -1 EINPROGRESS (Operation now in progress) doRequest done, closeBody=true, readBody=true json.Marshal 结构体内部匿名字段实现了 json.Marshaler(方法: MarshalJSON() ([]byte, error)), 则会直接调此 MarshalJSON 而忽略结构体. 源码:
2023/04/15
go 字符串
相关文档: spec#Rune_literals spec#String_literals spec#String_types blog/strings In [1]: import ( ic "github.com/WAY29/icecream-go/icecream" "os" ) func init() { ic.ConfigurePrefix("\u001B[37mic| \u001B[0m") ic.ConfigureOutputFunction(os.Stdout) ic.ConfigureArgNameFormatterFunc(func(name string) string { return "\u001B[36m" + name + "\u001B[0m" }) } 0. 关于 rune 标识 Unicode 码点(code point) 的整数值, 其类型声明为: type rune = int32 是 int32 的别名。
2023/04/09
rclone快速上手
doc: https://rclone.org/docs/ # 开启命令行提示, oh-my-zsh 不要 compinit 相关 rclone genautocomplete zsh # 如果提示 /zsh/vendor-completions 不存在,可以放到家目录下: acdef_path="${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/rclone" mkdir -p "$acdef_path" rclone genautocomplete zsh "$acdef_path/_rclone" # 然后添加 rclone 到 .zshrc 的 plugins 列表里 plugin=(... rclone) 0. config rclone config paths rclone config show 命令行交互式创建配置:
2023/04/02
lf 快速上手
常用命令快捷键 搜索和查找 ignorecase 忽略大小写 搜索 globsearch (false) 是否支持 glob pattern incsearch (false) 是否增量搜索, 即每次按下字符都搜索. 增量模式下 cmd-enter 确认, cmd-escape 取消(光标位置会回滚回去) 查找 anchorfind (true) 是否只查找第一个字符 findlen (1) 查找长度, 默认是 1, 即只能输入 1 个字符来查找 常用命令 cmds 查看定义的命令 maps 查看快捷键(包括内置的) 常用快捷键 q 退出 y 复制(没有选择文件时使用当前文件) d 剪贴(没有选择文件时使用当前文件) p 粘贴 复制/剪贴 的文件 c 清除 复制/剪贴 e 编辑 i 预览 m 保存当前目录到书签, 其会提示输入一个字符来命名 ' 选择要加载的书签 <space> 切换文件的选择状态 gg 跳转到顶部 G 跳转到底部 # 搜索相关 / 搜索 ? 反向搜索, 结果的上下顺序颠倒 n 移动到下一个 N 移动到上一个 # 查找相关 (findlen) f 查找 F 反向查找, 结果的上下顺序颠倒 ; 移动到下一个 , 移动到上一个 配置概要 lf/doc
2023/03/08
python 依赖包离线
1. conda 离线 1.1 离线创建虚拟环境 复制 base 环境: conda create --clone base --prefix $HOME/.conda/envs/YOUR_ENV_NAME 1.2 离线 py 包 1.2.1 依赖简单的 py 包 离线依赖较少的 py 包。
2021/02/27
git-bash安装其他工具
git-bash 安装 windows 的 git-bash 安装 zsh/rsync 等工具。 git bash 是基于 MSYS2 的,可以安装 pacman 包管理器来安装下面工具 参考 Using fish shell with git bash on windows git-bash 在文件管理器打开文件夹: # open path in windows file explore, default to current win() { : $(cd "${1:-.}" && echo 'start .' | cmd) ; } 1. 手动安装 对于有子依赖的包安装比较麻烦,收集所有依赖可以在某一台未安装的环境上先清空 pacman 的缓存( 目录 var/cache/pacman),然后安装,然后缓存目录里就包含需要的依赖。
2020/11/20
tmux 快速上手
1. 安装 apt update apt install tmux 2. 配置 这里使用 github 中一个使用人数非常多的配置:repo: gpakosz/.tmux,下面是此配置的使用方法。 cd ~ git clone https://github.com/gpakosz/.tmux.git ln -s -f .tmux/.tmux.conf cp .tmux/.tmux.conf.local . 3. 命令及快捷键 参考自:github gist: ryerh/tmux-cheatsheet.markdown,下面是节选的一部分常用的命令和快捷键。
2020/06/08
powershell自动补全与主题
主要描述 powershell 美化、自动补全,以及配合 git-bash 使用部分 Linux 命令。 文档: powershell install-module。 powershell profile-types-and-locations 1. 配合git-bash 使 powershell 使用 grep、awk、which…。 需要安装 Git for windows(关于 git-bash 安装 zsh 等的记录见 git-bash安装),PATH 中除了 git 所需的 Git、Git\cmd 之外,额外加入 Git\usr\bin 即可,如我的完整路径为: D:\Git D:\Git\cmd D:\Git\usr\bin 这样就可以使用 grep 等等了,如下面提取 wlan 的 ip (图2):
2019/07/02
python 编译带 Inference Engine backend 的 Opencv
为 python3 编译带 Inference Engine backend 的 Opencv,可以让 Opencv 的 dnn 使用 intel 的一些边缘计算设备 官方文档:github repo opecv’s wiki: Intel’s Deep Learning Inference Engine backend Opencv docs: Installation in Linux 这里再重现一遍是因为有些需要注意的问题(一是版本问题,二是视频接口问题),我在 Opencv 的官方论坛和 github 里有提问,想看原回答的详见 Potoo: Build error with Opencv with Inference Engine backend on raspberry,github raspberrypi/linux issue: Webcam failed to set camera param 1. 安装依赖 参考:Install OpenCV 3 + Python on your Raspberry Pi Intel’s Deep Learning Inference Engine backend
2018/10/10
树莓派 3 配置
无桌面版配置,没有显示器所以配置全部在 ssh 登陆后使用命令来完成。 1. ssh 和 wifi 引自: 《无屏幕和键盘配置树莓派WiFi和SSH》 1.1 允许 ssh 内存卡写入好镜像后,在内存卡跟目录建立 ssh.txt 空文件,在将 “.txt” 后缀删去。 1.2 保存 wifi 在 /boot 下新建 wpa_supplicant.conf ,以下面模板写入 wifi信息 ssid: 网络的 ssid psk: 密码 key_mgmt: 加密方式,现在 wifi 大多都是 WPA/WPA2 priority: 连接优先级,数字越大优先级越高(不可以是负数) scan_ssid: 连接隐藏 wifi 时需要指定该值为1 country=CN ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="wifi1" psk="12345678" key_mgmt=WPA-PSK priority=99 } network={ ssid="wifi2" psk="12345678" key_mgmt=WPA-PSK priority=98 } 后期可编辑 /etc/wpa_supplicant/wpa_supplicant.conf 来密码修改或者新增 wifi。
2018/10/10
树莓派 3 配置 OpenVINO 与 IR 模型转化
树莓派3b+ 加 Movidius NCS 完整环境配置。 区别 Python-Opencv4_withIE_onRaspi 中介绍的下载解压的方式,完整安装的可以使用 库 openvino.inference_engine,优点是可以利用多进程来同时使用 n 个计算设备,如果你只有一个计算设备那就别完整安装了,添加预编译的 OpenCV 到 PATH 就行了,具体见上面的链接。 前置条件: raspberry 3b+ OS: Raspbian Python3.5+ (Raspbian9 自带) 1. 安装 OpenVINO: 树莓派安装 OpenVINO 无须编译,只需下载解压添加环境变量即可使用。 OpenVINO 下载链接:OpenVINO 2018.5.445 官方教程:Install the Intel Distribution of OpenVINO Toolkit for Raspbian OS 官方提供的预训练模型:Overview of OpenVINO Toolkit Pre-Trained Models 2. 转换自己模型 OpenVINO 和 OpenCV dnn 使用的模型文件都是 IE(Inference Engine)模型,所以需要将自己的模型转化过去,对于 tensorflow 一般过程是: ckpt模型文件 –> pb 模型文件 –> IR 模型。我这里只说转换 tf model 到 IR,其他的六月份完善。
2018/10/10
树莓派配置 python 环境
经过一整天的折腾,从 py3.6 到 py2.7 到 py3.5 又到 py3.6 最后到 py3.5,总结了主要过程与心得 以下配置的环境: os: Raspbian Debian 9.8 (stretch) Kernel: armv7l Linux 树莓派有桌面版镜像中以附带了 python2.7 与 python3.5.4,但是现在很多库都不支持 py2.7 ,所以推荐使用 3.5 以上的版本。但是由于不用处理器不同py版本之间的py库的 whl安装文件不同,树莓派官方仅提供了大多数 py35 的编译好的库文件,所以推荐使用 py3.5。如果真的需要装 3.6以上版本见 github:raspbian-python3.6.rst 关于 python 库 whl文件的编译:Python中 pip 可以直接安装的文件是 whl文件,而python 的包源文件是 zip 压缩文件,包含了 py 文件和 c 文件,其需要编译后生成 whl 文件,编译是个很漫长而且会出各种麻烦错误的过程。有的库没有系统或者 cpu 架构的限制,如pyparsing,它发布的 whl文件后缀就是 none-any.whl。有的库(我测试下来好像大多都是有大量计算的库) 需要使用当前用户的处理器来生成对应的 whl文件,python官方是给出了常见配置编译好的 whl文件,比如 windows 64位处理器那其专用的 whl文件后缀就应该是 win_amd64.whl(amd64 指的是 amd64 架构的处理器)。对于树莓派 3b+,那其对应的可直接安装的 whl文件的后缀就是 linux_armv7l.whl,树莓派 py3.5 提供了很多针对此架构的 whl文件,但是 py3.6 只有非常少一部分有编译好的。
2018/10/10
Windows 注册表自定义
打开注册表编辑器: regedit 修改应用图标 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Applications\xxx.exe\DefaultIcon] @="D:\\xxx\\appicon.png" 文件默认名 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\NamingTemplates] "CopyNameTemplate"="%s-dup" "RenameNameTemplate"="Template" 右键新建菜单添加自定义文件类型 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.py] @=".py" [HKEY_CLASSES_ROOT\.py\ShellNew] "NullFile"="" "FileName"="temp.py" 右键菜单增加应用快捷打开 shell 后就是显示的菜单项名称, 会按照字典序排序 文件 Windows Registry Editor Version 5.00 ; 若只为用户生效, 则替换 HKEY_CLASSES_ROOT 为: HKEY_CURRENT_USER\Software\Classes [HKEY_CLASSES_ROOT\*\shell\Open with notepad--] [HKEY_CLASSES_ROOT\*\shell\Open with notepad--\command] @="D:\\notepad--\\notepad--.exe \"%1\"" 文件夹 Windows Registry Editor Version 5.00 ; 若只为用户生效, 则替换 HKEY_CLASSES_ROOT 为: HKEY_CURRENT_USER\Software\Classes [HKEY_CLASSES_ROOT\Directory\shell\Zidea] @="Open Folder in Idea" "Icon"="D:\\idea\\bin\\idea.ico" [HKEY_CLASSES_ROOT\Directory\shell\Zidea\command] @="\"D:\\idea\\bin\\idea64.exe\" \"%V\""
2018/09/13