我的这一款是 6 大核 8 小核 20 线程设计。默认情况下启动虚拟机资源分配是交给 windows 主机自己协调的,很可能会分配给小核运行虚拟机导致运行卡顿,资源管理器可以看到 cpu 负载都在后面的小核上:
解决方法就是以管理员权限运行 vmware,这样 VMware 会自己调度资源使用,优先级大概是大核>小核>超线程。实际效果很明显,基本都运行在了大核上:
小版本升级,例如 19.05-> 19.07。
这种小版本的升级最方便的就是通过 Attended Sysupgrade 功能,可以保留已安装的包和系统设置。最大限度地无缝过渡。官方介绍:https://openwrt.org/docs/guide-user/installation/attended.sysupgrade
需要先安装 Attended Sysupgrade luci 界面包:
opkg install luci-app-attendedsysupgrade
建议使用此功能前依然做一次数据备份。
然后重新登录 luci,在 system - Attended Sysupgrade 找到入口,点击 search for firmware upgrade 即可在线搜索可更新的系统。
最方便的就是通过 luci 界面升级系统,目前支持直接升级的大版本顺序是:19.07 > 21.02 > 22.03 > 23.05。
openwrt 21:https://openwrt.org/releases/21.02/notes-21.02.0
openwrt 22:https://openwrt.org/releases/22.03/notes-22.03.0
openwrt 23:https://openwrt.org/releases/23.05/notes-23.05.0
每个版本升级实际上就是重新刷入了一次固件,所以之前的配置文件什么的基本上都会被覆盖,所以系统内修改过的配置最好做一次备份。
打开 luci 界面,选择 system - backup/flash firmware,在 configuration 菜单栏中将需要保存的文件或目录定义出来,然后在 action 菜单栏中选择 backup - generate archive 即可保存备份到本地。
可以通过 awk 脚本识别出自己手动安装的包列表,方便更新系统后安装回去,下载脚本:https://github.com/richb-hanover/OpenWrtScripts/blob/main/opkgscript.sh
执行以下命令会保存已安装的包列表到 /etc/config/opkg.installed:
opkgscript.sh -v write
执行以下命令会识别并安装 /etc/config/opkg.installed 列表中的包:
opkgscript.sh -v install
也可以执行以下 awk 脚本可以单独列出自己手动安装的包列表:
#!/usr/bin/awk -f
BEGIN {
ARGV[ARGC++] = "/usr/lib/opkg/status"
cmd="opkg info busybox | grep '^Installed-Time: '"
cmd | getline FLASH_TIME
close(cmd)
FLASH_TIME=substr(FLASH_TIME,17)
}
/^Package:/{PKG= $2}
/^Installed-Time:/{
INSTALLED_TIME= $2
# Find all packages installed after FLASH_TIME
if ( INSTALLED_TIME > FLASH_TIME ) {
cmd="opkg whatdepends " PKG " | wc -l"
cmd | getline WHATDEPENDS
close(cmd)
# If nothing depends on the package, it is installed by user
if ( WHATDEPENDS == 3 ) print PKG
}
}
EOF
保存以上内容到 listuserpackages.awk 文件中并执行即可列出用户自行安装包列表。
x86 版本的 openwrt 的升级固件就是全新安装时候用的固件,直接在官网下载需要版本的 gz 压缩包即可。
下载地址:https://downloads.openwrt.org/releases/
我下载的是:generic-ext4-combined.img.gz,注意不要解压出来,保留压缩包即可。
进入 luci 的 system - backup/flash firmware 选择 Flash image ,然后选择刚才下载的压缩包即可上传更新,会提示是否保留设置和配置,跨大版本的升级必须取消选择保留数据,否则可能升级失败:
如果升级后卡在 grub 界面说明可能是由于选择了保留配置导致升级失败了,可以参考官方教程通过 failsafe mode 恢复默认配置:Failsafe mode, factory reset, and recovery mode,或者直接重新安装系统。
稍等几分钟安装好后你可能会发现 luci 无法在局域网中访问了,这是由于新安装的固件恢复了 network 配置,需要直接到 openwrt 设备上配置网络。
配置教程参考:openwrt network 配置
配置好网络后在局域网设备中可以用 ssh 登录了,此时会发现提示:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:U9XODs/7A4k065pxSMyEtQ2m98v2P0bf/ML0MfzU.
Please contact your system administrator.
Add correct host key in C:\\Users\\Marco Nie/.ssh/known_hosts to get rid of this message.
Offending RSA key in C:\\Users\\Marco Nie/.ssh/known_hosts:6
Host key for 192.168.244.1 has changed and you have requested strict checking.
Host key verification failed.
这是由于更新系统后 ssh 指纹发生了变化,需要删除本地缓存的 openwrt 设备的指纹在登陆,windows 系统 ssh 指纹保存地址为当前用户目录下的 .ssh 文件夹。
升级后可以通过之前的脚本列出的已安装包的列表将自己需要的包安装回去,同时将备份数据按照新系统的格式恢复回去。
从 openwrt 21 开始修改了 network 配置文件格式,参考:https://blog.niekun.net/archives/2291.html
从 openwrt 22 开始替换 iptables 为 nftables,需要原始工具的话可以自行安装回去:opkg install iptables
compgen -u
compgen -g
sudo usermod -a -G groupName userName
newgrp groupName
sudo usermod -G groupName userName
newgrp groupName
用户和组对文件的权限管理参考:chown 和 chmod 管理文件权限
]]>$ ip address | grep -w inet | awk '{print $2}'
127.0.0.1/8
192.168.122.2/24
172.18.0.1/16
172.17.0.1/16
172.19.0.1/16
]]>下面举一个例子说明:
{attribute 'qualified_only'} // 必须先写类型名称再写属性名称 (例如 eColor.Red)
// {attribute 'strict'} //取消 'strict' 以允许转换 UDINT 数据类型
{attribute 'to_string'} // 运行字符串转换 (例如 TO_STRING(eColor.Red) = 'Red')
TYPE eColor :
(
Red := 16#FFFF0000,
Green := 16#FF00FF00,
Blue := 16#FF0000FF
Yellow := 16#FFFFFF00,
) UDINT; // 声明 UDINT 作为 int 整形类型
END_TYPE
// 定义一些变量
ColorVar1 : eColor;
ColorVar2 : eColor;
ColorName : STRING;
ColorValue : UDINT;
ColorVar1 := eColor.Green; // ColorVar1 = 16#FF00FF00
ColorName := TO_STRING(ColorVar1); // ColorName = 'Green';
ColorValue := TO_UDINT(ColorVar1); // ColorValue = 16#FF00FF00
ColorVar2 := 16#FF00FF00; // ColorVar2.Green
ColorName := TO_STRING(ColorVar2); // ColorName = 'Green';
ColorValue := TO_UDINT(ColorVar2); // ColorValue = 16#FF00FF00
ColorVar1 := ColorVar2 OR eColor.Red; // 按位相与得到 Yellow=16#FFFFFF00
ColorName := TO_STRING(ColorVar1); // ColorName = 'Yellow';
ColorValue := TO_UDINT(ColorVar1); // ColorValue = 16#FFFFFF00
以上示例列举了常用的 enum 类型可进行的数据交互方式。
eColor.Green
可以获取enum类型属性的值,并可以赋值给其他对应 enum 实例TO_STRING(ColorVar1)
可以转换获取 enum 实例当前值对应属性名称字符串
下载时出现此报警,原因是 task 任务中对 gou 的排序有问题,放在前面的 pou 中使用了后面 pou 才设定好的数据,需要重新排列 task 任务序列:
mc_power
mc_jog
等控制轴的功能块,一运行就报错 SMC_FB_CALLED_FROM_WRONG_TASK,可能是不同的 pou 放在了多个 task 任务中,循环中内部有了冲突,将所有的 pou 放在同一个 task 中就可以解决问题。
GitHub 主页:https://github.com/immich-app/immich
官网教程:https://immich.app/docs/overview/introduction/
使用 docker compose 安装,新建一个 immich 文件夹,下载 docker-compose.yml 和 .env 文件到文件夹:
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
打开 .env 文件配置环境变量,主要就是配置备份路径和数据库密码,修改 UPLOAD_LOCATION 和 DB_PASSWORD。
启动容器:
docker compose up -d
后续更新只需要进入 immich 文件夹执行下面命令即可:
docker compose pull && docker compose up -d
docker-compose.yml 文件中默认将 3001 端口映射到了本地 2283 端口,3001就是服务端访问端口号。
下面是所有可用的端口,根据需要可以修改 docker-compose 文件映射到本地:
PORT | Web Port | 3000 | web |
SERVER_PORT | Server Port | 3001 | server |
MICROSERVICES_PORT | Microservices Port | 3002 | microservices |
MACHINE_LEARNING_HOST | Machine Learning Host | 0.0.0.0 | machine learning |
MACHINE_LEARNING_PORT | Machine Learning Port | 3003 | machine learning |
网页端访问:http://you.machine.ip:2283 进入配置页面,根据提示建立一个管理员账户,后续可以在管理员账户中建立其他子账户供其他人使用。
下载手机端 app,ios 直接在 app store 搜索 immich 下载,安卓在 github 发布页下载 apk:https://github.com/immich-app/immich/releases
在手机端输入以下网址进入:http://you.machine.ip:2283/api
然后就可以配置需要备份的手机端图片文件夹了。
服务器在本地,如果要外网域名远程访问图库,需要一些额外的配置,我这里是通过 cloudflare 配置子域名,nginx 配置反向代理到 frps,最后本地服务器 frpc 配置本地 2283 端口绑定到远程域名访问即可。
可以参考我之前的关于 frp 的教程:https://blog.niekun.net/archives/539.html
]]>添加需要用到的命令是:add-apt-repository,但是默认系统并没有安装这个环境,需要先手动安装 package software-properties-common:
sudo apt install software-properties-common
然后就可以安装需要的源了,推荐两个:
https://launchpad.net/%7Esavoury1/+archive/ubuntu/backports?field.series_filter=bionic
https://launchpad.net/%7Esavoury1/+archive/ubuntu/utilities?field.series_filter=bionic
安装方法很简单:
sudo add-apt-repository ppa:savoury1/backports
sudo add-apt-repository ppa:savoury1/utilities
sudo apt-get update
执行 apt update 后会发现很多可更新的软件了。
]]>wsa 没有在官方的 store 中提供,这里使用开源的 WSA-Script 很方便的一键安装。
GitHub 主页:https://github.com/YT-Advanced/WSA-Script
在 release 页面下载最新打包的版本:https://github.com/YT-Advanced/WSA-Script/releases/latest
我需要使用 google play 框架及 root 权限,所以下载的是框出来的版本:
下载好解压到一个特定的目录,运行 Run.bat
,期间会提示需要管理员权限以及提示收集信息的对话框,点击确认即可。
安装完成后会自动运行 Windows Subsystem For Android™ 应用。
如果需要使用 play 商店,就需要配置代理服务。如果本机有代理工具的话,可以让 wsa 直接调用本机代理。这里需要使用 adb 工具,下载链接:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
解压压缩包,可以看到其中有一个 adb.exe
,可以将目录添加到系统 path 以方便在 terminal 调用。
首先需要设置 wsa 打开开发者模式,进入设置打开选项:
默认 wsa 是运行在本地的 58526 端口的。
建立一个 powershell 脚本,如:wsaproxy.ps1,内容如下:
$WinNetIP=$(Get-NetIPAddress -InterfaceAlias 'vEthernet (WSLCore)' -AddressFamily IPV4) # get android network gateway addr
adb connect 127.0.0.1:58526 # android port
adb shell settings put global http_proxy "$($WinNetIP.IPAddress):1082" # local proxy port
第一次执行会弹出对话框是否信任外部访问,点击允许即可。
以上脚本会获取到 wsa 所在网卡的网关地址,然后用 adb 连接到 wsa,最后配置代理,注意脚本里的本地代理端口修改为实际值即可。
运行脚本即可让 wsa 配置好代理服务。以后只需要执行这个脚本就可以自动设置代理。
如果需要取消代理运行下面命令即可:
adb shell settings put global http_proxy :0
推荐直接在 play 商店安装应用程序,如果需要安装自己下载的第三方 apk,直接使用 adb 工具即可。
安装命令:
adb connect 127.0.0.1:58526
adb install xxx.apk
可以配置一个 Windows 主机的路径作为同 wsa 共享目录,这样两边就可以互传文件了。
打开 Windows Subsystem For Android™ 进入 advanced settings - experimental feature,启用 share user folders 功能并选择一个本地目录作为共享目录:
通过 system - turnoff 关闭 wsa,然后点击 files 会重新运行 wsa:
可以看到有一个 windows 文件夹:
这个文件夹就是对应的 windows 共享目录。
默认情况下只有在第一次安装成功后会自动启动 Android 设置界面,并且找不到设置的启动图标在哪里,我们可以在浏览器里直接访问 android settings 地址的方式启动。
浏览器中输入以下地址并访问:wsa://com.android.settings,会提示是否需要跳转到设置,点击确认即可进入设置:
Windows Android 子系统 WSA 代理设置方法教程
WSA (Windows Subsystem for Android) 使用 Windows 上的代理
我使用的是 app store 上的订阅,所以依然用到了土区的 apple 账户以及 ios 设备,关于如何建立土区账号以及充值参考:国区使用土耳其区 iCloud 家庭共享。
Google 账户需要修改到土耳其区,首先进入 https://payments.google.com/
点击 settings 可以看到区域信息:
这里我已经修改到了土耳其区域了,如果不是的话需要点击区域旁边的按钮修改,会提示让你创建一个新的 profile:
根据提示一步步设置即可,重点是选择土耳其:
然后根据提示设置一个土耳其地址信息即可,参考地址:
Osman Kavuncu Cad
Kenarcık Sk. No2
38090
Kayseri
付款信息可以不写。
建立完成后我们需要将原来的那个 profile 删掉,避免引起混乱。如果有多个 profile 会在右上角显示切换按钮,我这里已经删除过了所以是空白的:
切换到原来的 profile 后下拉到最下面点击删除,需要注意的是删除这个 profile 不会影响账户上的照片文件等信息,但会删除之前的一些购买付款信息:
此时账户就完成了转换到土区的操作。
然后在 ios 设备上用土区账号登陆 app store,注意不是登录 icloud。
登录后我们打开 google drive 或者 google one app 点击管理存储:
就可以看到各种套餐的信息了,都是以土耳其货币里拉为单位的,选择合适的套餐点击购买即可使用账户中的余额订阅。我选择的是 100GB 年付套餐,一年 120里拉,折合 28 人民币,还是不错的。
注意及时充值土区账户,如果余额不足可能导致订阅失效。
]]>