分类: 默认

  • 在铁威马Nas上使用最新的Plex Server

    在铁威马Nas上使用最新的Plex Server

    铁威马目前官方商店提供了Plex和Emby,其中Plex的版本为1.20.X,目前最新版本是1.21.X。版本差距不是很大,只是在安装插件的时候找了好一会儿文件路径,还是决定自己装最新版本,自己控制文件夹路径算了。

    直接安装在本地不如Docker方便,所以直接选用官方镜像。在appdata目录下新建一个plex专用文件夹,准备一个database目录用于存储和一个transcode目录作为转码。

    由于Plex依赖的网络端口比较多,选择bridge比较麻烦,这里直接选择host模式。准备一个存放媒体文件的目录,挂在到/data下。

    环境变量中没有太多要配置的,最好配置一个PLEX_CLAIM作为自动关联,这个claim-code可以在plex网站上找到,直接访问 https://www.plex.tv/claim/ 可以获得,然后启动就行了。

    日志可以在Docker管理面板看到

    刚刚下载的BT视频直接被索引到了,然后自动生成缩略图。

    如果需要安装插件,下载好了以后放到/appdata/plex/database/Library/Application Support/Plex Media Server/Plug-ins/中。…

  • 快速编译适用于铁威马Nas的软件

    铁威马Nas自带的生态比较少,除了用Docker解决以外,还可以考虑交叉编译的方式来生成适用的软件。

    官方的文档非常少,基本等于没有,特别是对于UI部分的集成只字不提,不过根据发布的三个工具来看,还是比较清晰

    • 打包工具,生成tpk软件,目录结构和openwrt有点像
    • x86_64的编译sdk
    • arm的编译sdk

    由于软件包下载比较慢,也比较大,我这里构建了一个x86_64可用的镜像,包含了必要的依赖,适用于大部分make或者cmake管理的软件。这里用libuv为例展示下用法。

    镜像地址在:https://hub.docker.com/r/htynkn/terramaster-sdk,版本对应官方提供的sdk版本,即最新的是1.0.1。在下载了libuv代码后直接执行

    docker run -it -v $(pwd):/code htynkn/terramaster-sdk:1.0.1 bash

    相关工具在/sdk目录,由于libuv用了cmake,所以直接指定CC和GCC就可以了

    mkdir build
    cd build
    env CC=/sdk/x86_64_builtroot_toolchain/bin/x86_64-tnas-linux-gnu-gcc CXX=/sdk/x86_64_builtroot_toolchain/bin/x86_64-tnas-linux-gnu-g++ cmake ..
    make uv

    我尝试了一些常用C/C++库,基本没有遇到什么问题。没有特别仔细研究官方具体做出了什么裁剪,但是目前看基本通用。…

  • 铁威马NAS添加开箱即用的Aria2下载工具

    Aria2是比较轻量级的下载工具,支持BT等格式,非常适合简单的下载需求,比如NAS环境挂BT的情况。

    铁威马NAS,相对来说性价比比较高,但是相对的,生态比较差。好在大部分版本都提供Docker支持,可以解决很多问题。以Aria2为例,官方提供应用市场可以安装,但是安装后有很多需要配置的地方,对于初次使用的用户很不友好,特别是自带的管理界面,某一次打开遇到了File not found的错误后再也无法使用。

    有热心网友准备的完美配置,再加上开箱即用的Docker镜像,其实完全可以不实用官方的应用,直接挂Docker。我这里使用的镜像是p3terx/aria2-pro,大小28M,使用的模式是移动模式,即下载完成移动下载完的文件到另外的目录,再删除.aria2和torrent文件。镜像额外还有BT trackers更新,小文件过滤,特别文件名过滤等功能,可以覆盖大部分场景。

    使用时在铁威马NAS中搜索镜像后下载,然后直接创建,这里保留6800作为RPC端口,其他监听端口按照情况更改,需要挂在两个目录,一个是config目录,一个是下载目录。其他不需要特别配置。

    启动后需要一点时间拉取对应脚本并更新Trackers,所以看下日志

    或者等6800端口可用后再访问也可以。

    本文的方法不光适用于NAS环境,或者局限于铁威马这个品牌产品,大部分设备只要支持Docker都可以这样使用。…

  • JDK15中的安全增强

    JDK15上个月发布了,这个版本对于安全上有很多增强,比较有吸引力。

    爱德华兹曲线数字签名算法首次直接加入JDK,名称为Ed25519,使用方式还是一样,只是参数改变下。

    KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519");
    KeyPair keyPair = kpg.generateKeyPair();
    Signature sig = Signature.getInstance("Ed25519");
    sig.initSign(keyPair.getPrivate());
    sig.update(msg);
    byte[] s = sig.sign();

    之前版本的JDK需要使用三方库,比如str4d/ed25519-java。

    证书上也有一些变动,替换了Sectigo过期证书。

    TLS方面主要是追平新的特性,比如https://tools.ietf.org/html/rfc8446#section-4.2.4。这块的需求倒不是那么大。

    其他变动还有一些,比如新的jdk.tls.client.SignatureSchemes和jdk.tls.server.SignatureSchemes变量,SSLSession.getPeerCertificateChain()的API变更等。…

  • Openwrt自建Feeds的签名问题

    Openwrt生成ipk文件后可以自建feeds,这样用户可以更简单的使用。除了常规的文件结构外,Openwrt还要求一个签名,即Packages.sig文件。

    如果之前没有生成可以如下操作:

    docker run -v $(pwd):/keys --rm -it openwrtorg/rootfs

    使用Docker启动一个openwrt环境,并在其中执行

    cd /keys && usign -G -p public.key -s secret.key

    将两个文件保存好,public.key是需要公开的,而secret.key自己保管好,不要共享给别人。

    在编译ipk之后直接执行即可

    ./staging_dir/host/bin/usign -S -m Packages -s /opt/mount/secrets.key -x Packages.sig

    如果要在Github Action中使用可以把秘钥作为secret保存,然后直接echo写入。可以参考:https://github.com/htynkn/openwrt-switch-lan-play/blob/master/.github/workflows/build.yml…

  • Google统计的Measurement Protocol使用

    Google统计是比较常用的统计系统,针对网页的统计只需要引入一段JS即可。

    有一些特殊的场景,不是网页环境,类似于桌面环境,也想使用Google统计的话就需要借助Measurement Protocol协议。

    一般来说这种情况比较多的是记录event,比如有一个用户点击了下载按钮,那么就可以发送一个POST请求/GET请求到Google统计服务器。

    请求的参数可以查看Google的问题,但是这里有一个问题是文档没有提到的,就是UA是必须的。如果没有提供UA,也不会有任何报错,但是记录中就是没有。这一点在文档和debug/collect检验中都没有提到。

    其次就是cid的生成,必须是uuid v4标准,虽然文档例子是普通的数字,但是这个值是无效的。如果使用golang,可以使用

    uuid "github.com/gofrs/uuid"

  • ucore环境搭建

    ucore环境搭建

    最近搞了很多偏底层的东西,越发发现VS Code的Remote功能的便利性。

    以ucore为例,需要一些依赖,虽然也不是特别繁琐的依赖,但是不管用虚拟机,解决本地环境问题,总是需要一些工作的。而Docker可以简单解决并隔离依赖和环境。

    ucore的几个实验都需要qemu,而且是界面模式,所以还需要一个vnc提供界面支持。配置如下:

    FROM consol/ubuntu-xfce-vnc
    USER 0
    RUN sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
        && sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
        && apt-get update && apt install software-properties-common build-essential gdb gnome-terminal qemu-system scons re2c wget -y
    USER 1000

    而devcontainer的配置需要指定端口和启动脚本

    {
    	"name": 
  • VS Code远程模式编译鸿蒙代码

    鸿蒙开源了,代码托管在Gitee,下载很方便,但是说实话东西比想象的单薄很多。

    编译的话主要是依赖了gcc_riscv32,其他都是常规依赖。

    VS Code支持远程模式,直接在Docker中执行相关编译和调试,所以代码拉下来以后直接新增一个.devcontainer文件夹,配置内容如下:

    第一个是Dockerfile

    FROM ubuntu:18.04
    RUN sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
        && sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
        && apt-get update && apt install software-properties-common build-essential python3.8 python3-distutils python3-pip scons re2c wget -y
    RUN mkdir tools
    WORKDIR tools
    RUN 
  • Spring鉴权认证服务

    Spring Security组件支持不同的鉴权认证方式,使用的时候一般是作为接入方来看的。如果要搭建自己的鉴权认证服务,Spring上周新推出的实验性项目Spring Authorization Server可以作为一个选择。

    Spring Authorization Server支持以下标准

    主要是支持Oauth2和JWT。

    当然大部分实验性项目文档都不怎么完整,简单的例子使用如下。

    主要分为auth server和resource server,当然还需要一个client。启动方式和普通Spring Boot应用类似,关注下Config即可

    @EnableWebSecurity
    @Import(OAuth2AuthorizationServerConfiguration.class)
    public class AuthorizationServerConfig {
    
    	// @formatter:off
    	@Bean
    	public RegisteredClientRepository registeredClientRepository() {
    		RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
    				
  • 仿真的精度问题

    精度是建模仿真可信度评估与逼真度研究的重点。精度会影响仿真逼真度,进而影响仿真本身的价值。

    仿真精度是指模型或仿真中的一个/多个参数或变量确切符合真实系统或者某些给定的标准或参考的程度。 仿真精度的概念有狭义与广义之分, 狭义的仿真精度与误差成反比, 即误差越小、精度越高, 这是通常人们所理解的精度。而广义的仿真精度是由不确定性和误差引起的, 本文说的精度使用广义的精度概念。

    仿真系统的开发可以分成若干步骤, 比如FEDEP模型。在不断的概念建模、数学建模过程中,会由于各种原因精度不断下降。一般而言精度主要来自两个干扰,一个是误差,一个是不确定性。

    对于偏差的传播分析分单模型和顺序模型分析,这边文章《仿真精度问题探讨》有数理上的分析。…