OpenmediaVault 监控报错挂载失败

1
2
3
4
5
6
7
8
9
10
Monitoring restart -- Does not exist filesystem_srv_dev-disk-by-label-HDD1

The system monitoring needs your attention.

Date: Sat, 12 Dec 2020 02:55:20
Service: filesystem_srv_dev-disk-by-label-HDD1
Event: Does not exist
Description: unable to read filesystem '/srv/dev-disk-by-label-HDD1' state

This triggered the monitoring system to: restart

如果确认挂载的磁盘无误却总是触发报警,那么有可能它是以为内监控的启动比挂载快导致的,这个问题可以通过下面的环境变量解决,路径(/etc/default/openmediavault):

OMV_MONIT_DELAY_SECONDS=15

指定监控延迟15秒开始,为了立即生效,执行下面的语句:

1
2
3
omv-salt stage run prepare

omv-salt deploy run monit

openmediavault 更改默认挂载点

挂载文件是/etc/fstab

如果是3.73前的版本直接修改即可,如果是之后的版本请修改/etc/openmediavault/config.xml中下面xml节点的信息:

1
2
3
4
5
6
7
8
9
10
<mntent>
<uuid>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</uuid>
<fsname>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|xxxx-xxxx|/dev/xxx</fsname>
<dir>/xxx/yyy/zzz</dir>
<type>none|ext2|ext3|ext4|xfs|jfs|iso9660|udf|...</type>
<opts></opts>
<freq>0</freq>
<passno>0|1|2</passno>
<hidden>0|1</hidden>
</mntent>

注意只要修改“dir”就可以修改挂载的路径,其他不需要动。如果是5以后的版本使用以下两个命令中的一个来重新生成fstab,这是omv的命令行工具,可以防止fstab的误操作导致系统无法启动,第二个命令是最新omv的。

omv-mkconf fstab

omv-salt deploy run fstab

如何判断一个健康的Wifi,无线连接速度探究

2020新世代Wi-Fi成軍| iThome

最近在用时间机器备份我的macbook,总是觉得很慢,于是察看了下局域网之间的连接质量。

前面一篇说到Cat5E的网线被老鼠咬断了一半后被网卡自动纠错还保持百兆感到震惊,新买的2021mbp m1 pro连接速度居然只有30MB+,可是路由器是荣耀3Wifi6,这速度太慢了。

我用来测试速度的工具还是iperf3,之前已经测试过nas有线到pc的速度已经千兆,现在就差笔记本了。按住alt健后点击wifi图标可以查看当前wifi的详细信息,这里要喷一下苹果这部分的UI做的真的不好,不可靠,跟内置的设置不同步,还有内置的设置中是无法查看当前连接的详细信息。

这几个参数最重要

PHY你可以清楚知道连接的5g到底是wifi5还是wifi6,如果是6那么是802.11ax,这里也是我百思不得其解的,苹果官网技术参数中说明是支持的,但是连接的确是ac。

Tx速率:当前链接的最大速率,就是传输速度,他会实时变化,满速应该是866Mbps,具体看无线环境后面会说到,比如我现在780实际使用时50MB左右,没错经过调整后速率从30上升到50了。如果是ax那么就能达到2Gbps+的速度。

噪声:90+是最糟糕的干扰环境,没错就是我,没办法,办公室在工厂里,很多大型设备的干扰是很厉害的,也正是发现了这点我果断的买了有线网卡。这个指标在正常环境下30左右是健康的。

RSSI:指标最好理解,就是我们常说的信号好不好,嗯,我的信号很好。

频道:现在路由器都带自动适配,不需要关心,但是后面的80那个位置很重要代表了你的传输速度,如果是20那还不如用2.4g,40/80都是可以接受的千兆频段。

Dotnet 运行AES-GCM程序 on Macos(错误Algorithm 'AesGcm' is not supported on this platform)

Algorithm ‘AesGcm’ is not supported on this platform.

如果使用了aes-gcm的dotnet程序会在macos上报错

AesGCM是一个非常流行的对称加密算法,所以对这个报错还是很惊讶的,一开始以为是dotnet core 适配apple sillicon的问题,查阅文档后发现原来macos都有这个适配错误。Mac的安全策略不允许第三方程序调用系统的加密接口,所以只能使用第三方的加密库。这里真的要喷一下微软,既然不可以用那就给出解决方案么,让我复制黏贴一下不好么。正好在前面解决dotnet5在apple sillicon下时碰到过openssl的配置问题,传入openssl arm的lib路径,问题解决,下面是我用的最新版,其他版本的修改相应路径即可

DYLD_LIBRARY_PATH=/opt/homebrew/opt/openssl@3/lib

参考文档

Macbook M1 Pro 下运行.net core(mac下如何与x86_64兼容)

Apple 宣布將Intel 架構轉移至Apple Silicon ,展示搭載A12Z Bionic SoC 電腦的效能實力- 電腦王阿達

解决“No usable version of libssl was found“

最近调试一个项目,其他都好好地,就是这个项目出现各种诡异的问题,也没有stack_trace,卡了好久,今天发现最后一行小字No usable version of libssl was found ,终于按图索骥解决了。

这是一个.net 5.0的项目,开始我挺担心它在ARM下不兼容的问题,但是可以顺利在Rider中成功build并运行,不得不说苹果的兼容生态和Rider的适配做的太好了,也正是因为这种错觉才让我大意了吧,所以如果您使用的是.net6那么可以忽略,6以下请耐心看完。项目运行后点击登录程序就退出了,期间没有任何debug信息,只有一行灰色小字:

第一次看到这行小字特地用brew 确认了下openssl是否已经安装,所以放过了它,这里要强调.net1到5都是不支持arm的,之所以能顺利build完全是苹果已经用Rosetta偷偷在背后运行了。

Rosetta

这是苹果用来兼容x86的转义器,有了它mac就可以跑x86程序了,惊讶的是几十M的小东西可以如此稳定高效。正因为有了它,普通用户完全不需要关心程序是x86还是arm的只接可以运行。当然作为开发需要知道背后的原理,苹果在x86和arch背后独立设置了一套生态,用于分别运行相应的程序,所以上面的问题就变成了缺少x86版本的libssl。

X86 HomeBrew

要装x86的libssl就要先装x86的HomeBrew,如果你跟我一样是从原来intel的mbp迁移过来的那它已经安装好了,如果不是就需要手动安装,下面是手动安装的步骤:

$ arch -x86_64 zsh

$ cd /usr/local && mkdir homebrew

$ curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew

Alias快捷别名

`$` ibrew='arch -x86_64 /usr/local/bin/brew' `$` izsh='arch -x86_64 zsh' `$` azsh='arch -arm64e zsh'

安装Openssl

`$` ibrew install openssl

记得运行前先用izsh切换到x86环境下,它才会使用Rosetta安装到x86生态中去,同理可以使用azsh切换回来。

环境设置libssl引用

DYLD_LIBRARY_PATH=”/usr/local/opt/openssl@1.1/lib”

Tips

这里注意的是只要是x86苹果使用的路径跟以前一样都是在/usr/local/bin下,而arch的都是丢在/opt/homebrew/bin下。

前面环境变量最好是在项目文件中设置,这样不会全局影响到.net6的运行。

参考资料:

ASP.NET Core中正确设置环境变量

一般设置都是放在appsettings.json,为了安全,特地把一些敏感信息如密码移到环境变量中去,那么如何设置带有子元素的变量呢比如ConnectStrings:

Windows下用冒号“:”分级比如:

1
ASPNETCORE_ConnectionStrings:BlogDb=conn_str

Linux/Mac下用双下划线“__”分级比如:

1
ASPNETCORE_ConnectionStrings__BlogDb=conn_str

正确的使用和清除301/302转发

Chrome, refresh with cache clear

如果没有必要请不要使用301,当你不确定的时候先用302。因为这个转发缓存是存在客户端的,一旦设置301后服务端无法通知客户端更新,除非客户自己清除缓存。

Chrome中301作为永久转发会一直保持下去,上图中就是当打开开发者工作台时可以右击刷新按钮清除缓存。

有一个特殊情况上面的方法不奏效,那就是如果是A.com转发到B.com,如果是这样就要开启工作台中的preserve log后再清除。

Mac上使用SQL Server作为开发用数据库

SQL Server Management Studio (@mssqlserverssms) | Twitter

如果你有不得不用sqlserver的理由,并且手上只有MAC时那么这篇文章可能对你有帮助。

第一个要解决的就是数据库的GUI管理软件,SQL Server Management Studio (SSMS)肯定是没办法在Mac上跑了,这里最佳的替代就是Azure Data Studio,看名字就知道它的作用就是管理Azure上的数据,所以不管是sql server也好还是postgresql也好都可以用它管理。装好之后会发现它绝对是在vs code同一个team弄出来的,连很多默认样式都一样,所以跟vs code一样在使用前你得装好一些必须的插件,这里不得不说sql admin包既然是没个人必装的,为啥不直接默认安装呢。装好后像下面这个样子。

Customize Azure Data Studio with Dashboard Widgets

有的同学在没有安装推荐的admin包前会发现不能创建新的数据库,没错,这种基本插件它默认也没装,对了,可能需要FQ。

另外它也提供profile等调试插件,工具还是很丰富的,虽然离ssms还有差距,如果是专职DBA就用回SSMS吧。

EntityFramework Core CLI Tools 几点坑

Entity Framework Core 2.0 Features | by Aram Koukia | Koukia

开发怎么可能离得开数据库呢~ 这里的EFC和以前的EF不是一个东西,就跟.net core和以前的.net不一样是一个道理。

Core这个家族可以说是完全跟开源接轨了,不管是运行方式,交互方式如果熟悉开源组件的同学就会感觉跟自己家一样,当然还没那么接地气,下面就是在用EFC CLI Tool时碰到的几个坑。

  1. 如果你的项目不是一个程序集,那么你不得不指定开始项目和目标项目就比如得这样:“dotnet ef list -p 目标项目目录 -s 开始项目目录”,这里我就很不理解,也困惑了我好一会,如果知道开始项目,那么作为上层程序集是可以找到下层级中程序集的dbcontext和Model。当然在文档中你可以找到这个说明,只不过我是事后才发现,试问有几个人的项目是只有一个程序集的。
  2. EF Core 6,目前是RC2,作为preview版本它默认需要你指定版本才能被安装,比如当前不指定版本他只给你装到5的latest。
  3. 需要指定一个Dbcontext,如果你有多个的话,它有一个查找顺序,是用的父类往下找的,如果碰到问题可以从这里作为突入口。
  4. 它支持从数据库导出Model,也支持从Model导入数据库,还支持从Model生成sql script。
  5. 生成scrpt最实用,这里推荐带上“-i|–idempotent”参数,不带上它会默认走一个事务提交所有Model,带上后每个Model都是分开的适用于没有严格migrations的项目。用–no-transactions可以关闭事务。
  6. “-p 和 -s”可以指定到项目文件或者项目目录,这就很开源范!~

VisualStudio Code Remote 调试方法(错误Containers Docker version 17.12.0 or later required.)

Remote Development with Visual Studio Code

最近在配置.net的remote开发环境,用了整套VS Code Remote的三大件,在用container时总是提示:

1
Remote - Containers Docker version 17.12.0 or later required.

一头雾水,docker版本20了都,可能的理解就是它没找到docker。可是信息有限,好在开源项目有issue,作者介绍了debug的办法,适用于进一步调试。

1
When you see this, could you click Cancel and then check the dev container log (F1 > Remote-Containers: Show Container Log) and the dev console (Help > Toggle Developer Tools) and post these here?

Developer Tools就是chrome的开发栏,是同一个东西,能够看到UI的日志,已经发现就是Docker version这个命令的返回值出错,作者在issue中反复提到会不会是没加入Path,我不信。最后他终于提到了,如果再vs code 运行中更新过docker就会出现这个bug,解决的办法就是在更新docker后重启一下vs code即可。

另外还有的碰到这个问题可以尝试通过更新vs code和docker desktop到最新的版本。

如果还是不可以除了打开日志查看报错外,可以尝试查看docker context,看看当前的context是不是default。

You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.