V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
HOMO114514
V2EX  ›  NAS

深入浅出玩转绿联 UGOS (下)

  •  3
     
  •   HOMO114514 · 340 天前 · 5827 次点击
    这是一个创建于 340 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目录

    深入解析绿联云 DX4600 Pro UGOS 系统(1)

    深入解析绿联云 DX4600 Pro UGOS 系统 (2)

    深入浅出玩转绿联 UGOS (上)

    ※ 深入浅出玩转绿联 UGOS (下)


    全文总目录

    • 绿联云 DX4600 Pro UGOS 深入解析
      • 感谢与感想
      • SSH
      • OS
      • OPKG
      • 物理存储, xfs, raid
      • 网络服务,SMB
      • (重要) NFSd
      • P2Px
      • 目录窥探
      • (非常重要)权限模式与用户隔离
      • (重要)为什么只有管理员能开 SMB ?
      • Nginx
      • 套件分析:文件管理
      • 套件分析:相册
      • 套件分析:云影院
      • 套件分析:云音乐/有声书
      • 套件分析:备份
      • 套件分析:百度云
      • 下集预告
      • 附录
    • 深入浅出玩转绿联 UGOS
      • 目标
      • 紧急通知
      • Tailscale
        • 添加 OPKG 软件源
        • 安装 Tailscale
        • 登录 Tailscale
        • 配置防火墙
        • Troubleshooting
      • Docker 的网络搭建
        • 给 bridge 开启 IPV6
        • 创建一个新的 NAT 网络
        • 第一个容器
          • 配置文件
          • 远程管理
          • 互访案例
      • Docker 挂载公共空间的方案
        • 为什么 docker 不能挂公共空间?
      • 什么是 Linuxserver ?
      • BT 下载器
        • Aria2
        • qBittorrent
      • 公网安全保护指南
        • 例子:Meta
        • 例子:QB
        • 例子:Aria2
      • Jellyfin 配置
        • 隧道组网
        • 硬解配置
        • Tone Mapping 和 Direct Play
        • 中文字库
        • IPV6
        • 权限更改
        • (可选)主题优化
        • (可选)进度条预览
        • (可选)观看统计
        • (额外)命名守则
      • Linux 补完计划
        • Busybox
        • 其它软件
      • 用户态 nfsd
      • 用户反馈模式

    什么是 Linuxserver ?

    linuxserver.io

    我们会发现教程教学和 Docker 页面里的“常用镜像”使用的镜像全都不是来自于官方,而是来自于一个叫做 linuxserver 的开发者,所以需要介绍一下 linuxserver.io 到底是何方神圣。

    linuxserver 由一群志愿者组成,致力于为开源软件构建改良的 docker 镜像,并且在官方镜像的基础上提供以下特性:

    • 添加统一的 Ubuntu 系统底层,定期更新

    • 跟随上游版本发布 CI 定期更新

    • 增加 User Mapping 功能( PGID 、PUID )

    • S6 Overlay支持

    • 将所有软件的用户配置文件解耦并统一管理

      linuxserver 维护的所有软件配置文件都在/config 文件夹下,可以保证只要/config 不变,镜像版本无痛更新

    • 友好的 fork 支持

    配置文件解耦这一点很重要,每个 linuxserver.io 的镜像你只需要把他们的/config 映射到本地永久化储存,镜像就能够随意更新不受影响。

    市面上非常多热门的“增强版”Docker 镜像都是基于 linuxserver.io 开发的

    BT 下载器

    绿联云套件已经内置了“离线下载”和“迅雷”APP 。这个“离线下载”实际上就是 Aria2 的封包,屏蔽了所有的参数设置;同时我们也知道吸血鬼迅雷是个什么东西,走在路上都要捏着鼻子避开。因此,一个正常的具有互联网精神的网民都应当会选择自建 docker 来完成远程下载。2023 年的 Linux 下载器不外乎就 2 个,qBittorrent 负责 BT ,Aria2 负责直链。

    无它,因为在 BT 这方面 qBittorrent 实在是强太多。

    部署 BT 下载器的时候一定要注意一件事情,把容器放在 Bridge 里面会导致网络严重受限,一切涉及到 BT 下载的容器请部署在 Host 网络。绿联官方的教程就犯了这个错误。

    Aria2

    很多人在部署 aria2c 的 docker 镜像的时候都会去优先寻找国人优化的“增强版”,我也一样,因此有个注意事项:

    热度和下载量很高的p3terx/aria2-pro在绿联系统上有兼容性问题,会一直自动结束,无法使用

    建议使用superng6/aria2代替。

    同时,因为系统内置了 aria2c ,所以 6800 端口被占用,使用的时候需要更改成别的端口。

    qBittorrent

    qb 增强版我个人使用的是superng6/qbittorrentee,基于 linuxserver 镜像,并提供了各种喜闻乐见的优化,详情可以通过Github repo了解。

    需要注意的是,网络模式设置成 Host 后,创建容器时的“端口设置”条目是无效的,程序的监听地址仅由环境变量中的WEBUIPORT指定。

    如果你按照官方的**教程设置PGIDPUID为 0 的话,所有下载的文件 owner 会是 root ,默认权限 755 ,则通过 SMB 访问时不可写。

    image-20231126155001021

    实战当中,我推荐将 QB 的容器用户指定为你在“网络服务”中创建的账户,通过 Linux 基础命令可以查询 UID 和 GID:

    id <user>
    

    比如我的账户叫做 nas ,查询得知 UID 和 GID 均为24****0000

    image-20231126155711524

    则创建容器时,在环境变量中指定他们为查询到的 ID:

    image-20231126160024426

    superng6/qbittorrentee镜像中,指定 UMASK 的环境变量名为UMASK_SET,而在 linuxserver.io 官方镜像中(应该)是UMASK。设置为 000 使得所有用户都能够读写,UMASK 的定义参见Wiki,反正绿联的文件权限管理哲学就是全盘 777 ,已经很危险了,所以不用害怕安全问题。

    这至少能够保证挂载的 SMB 能够正常读写,其他成员通过套件访问时都会被 UGOS 自动重置成 root777 。

    至于 QB 的内部设置,增强版基本已经做到开箱即用,没有什么注意事项,qb 本身的更多设置优化可以参考网上大量的文章。

    存储空间映射则看个人喜好,我自己会喜欢为每个子文件夹单独创建一个映射,保持空间侵入最小化,而不是直接映射一个根文件夹让 QB 在内部自由访问,二者皆可。

    image-20231126161911369

    强烈推荐增加一条 SSD 用来单独存放 config 和临时文件,这样可以降低机械硬盘负载,增加休眠几率,理论上延长写寿命。

    • 在 QB 设置中,保存未完成的 torrent 到 SSD
    • Jellyfin 的媒体库很庞大时,Metadata 和 Cache 容量可能高达数十 GB ,放在 SSD 可以大幅加快加载速度,减少机械硬盘的小文件读

    公网安全保护指南

    在《深入解析》中我们已经分析过,UGOS 的 Nginx 把所有套件的端口都聚合到 9999 反向代理,但是没有做任何的手段去阻止端口对外暴露,所有套件的端口依旧监听在 0.0.0.0 ,这是一个非常大的安全隐患。我们可以简单在公网资产嗅探引擎简单搜索一下“绿联”或者“绿联私有云”,可以得到 2023 年光是中国大陆内就有约 5000 多台绿联 NAS 暴露在公网上,并且随便选个 IP 蒙常用端口都能进得去:

    ed076d9c267636766fc2a76dc165227

    0ca9ae080879d74d359a5d6a015936f

    d9cf5aa3b1816700b9b06b4600d575b

    公网的高阶防护,端口隐藏之类可以通过 Docker lucky 来完成,但是在这里我不打算教这个东西,因为我也没部署。公网和论坛里有不少关于这个的教程都可以参考。

    既然我们部署在大内网,那么优先的手段是利用大内网的优势,即从软件本身限制某些不希望公网访问的服务的监听范围。

    1. 如果软件本身支持指定监听网域,则将监听网域限制在大内网
    2. 如果软件不支持监听网域,但允许设置访问登录,则务必开启登录,并给内网网域设定免验证白名单
    3. 如果软件允许访问登录,但不支持白名单,就选麻烦也要设置好合理的密码,切勿使用 password 等弱密码
    4. 如果都不支持,考虑 lucky 或者自求多福

    例子:Meta

    Meta 属于第二种情况,具体的配置方法已经在上面第一个容器:配置文件中给出

    例子:QB

    QB 的情况也属于第二种,监听全端口,设置强密码并对 localhost 、LAN 、docker 、Tailscale 跳过验证:

    image-20231126171052415

    例子:Aria2

    Aria2 的 RPC 目前只支持监听 127.0.0.1 或 0.0.0.0 ,并且并没有网域白名单,即第三种情况,因此创建容器时请务必给 RPC 设置好一个强密码,指定密码的环境变量是SECRET

    image-20231126171814335

    Jellyfin 配置

    如果你按照绿联云帮助中心的教程部署 Jellyfin ,那么恭喜你,这个 Jellyfin 基本只有 40%可用。你将会面临以下问题:

    • 内置刮削源不可用
    • 硬解解码未配置
    • 4K HEVC 的 HDR10/Dolby Vision 无法转码
    • 中文字库缺失,封面和字幕全是方块
    • IPV6 默认关闭
    • 配置文件权限失控

    想要得到一个比较完美的 Jelly server ,还需要更多的步骤。

    隧道组网

    在买这台 NAS 之前,我的 Jellyfin 服务器是搭建在主力 Windows PC 上的,而我的 PC 又开机启动隧道,导致我以为 Jellyfin 的 IMDB 和 TMDB 源都是开箱即用的,直到我把几个 T 的影视迁移到 NAS 后发现什么东西都刮削不出来。

    我在交流群中看到有些用户会使用适配 Jellyfin 的第三方刮削源,比如 tinyMediaManager 来解决这个问题,不过我更喜欢原生的 IMDB 和 TMDB ,因为我已有的媒体库在内置源下已经全部准确识别,所以适合继续沿用。

    说白了还是网络问题,解决的方法也很简单,要么改 hosts ,要么上隧道,而我肯定是义无反顾地选择上隧道的,只要在环境变量里加上这两条就好,Jellyfin 能够识别并且自动走代理:

    image-20231205211651726

    绿联的官方教程根本没有提及这个问题。

    硬解配置

    Jellyfin 的硬解稍微有一点学问,但不多,总结下来大概有这么几点:

    1. 在 Docker UI 里勾选的硬件渲染实际上等价于--device /dev/dri:/dev/dri透传显卡设备,官方教程中让用户设置PUIDPGID为 0 是因为/dev/dri/renderD128/dev/dri/card0权限为 root@600
    2. N5105 和 N6005 的硬解设备统一都为 Intel QuickSync (QSV)
    3. Jasper Lake GPU 不支持 VPP Tone mapping ,在“色调映射”相关选项中应当开启的是普通的 Tone Mapping
    4. (没有真实验证过,理论上)低功耗 encoder 在这个 Openwrt 系统里应当是不可用的,不过反正这颗 CPU 功耗已经很低了
    5. Fallback font folder path 需要放置 woff2 字体,并且大小不能大于 20MB ,我推荐 sarasa-gothic-sc-regular-nerd-font.woff2
    6. 需要勾选“Allow subtitle extraction on the fly”
    7. H.265 encoding CRF 推荐 27 ,H.264 encoding CRF 推荐 24

    附:我的个人设置

    image-20231205213735888

    Tone Mapping 和 Direct Play

    高清影视收藏早就迈入了 4K HDR 时代。现在越来越多的电影和 TV 都是动辄 HDR 、Dolby Vision 等先进编码格式,对解码工作有不小的挑战。

    就我的使用经验总结,以下情况会不可避免地强制触发转码:

    1. 在不支持 HDR 的客户端观看 HDR 片源(多见于 Windows ,使用浏览器,未开启 Windows HDR ):触发 Tone Mapping
    2. 在基于浏览器的客户端中尝试播放带有ASS 高级字幕的 HEVC 片源:触发服务端烧录
    3. 在除 Edge 之外的浏览器中尝试观看 HEVC 片源(只有 Edge 交了授权费):触发 H264 转码
    4. 在没有授权的设备上观看 Dolby Vision P5 片源:触发 Tone Mapping

    以下情况能够避免转码:

    1. Windows 使用 Jellyfin Media Player ,或者 Jellyfin MPV Shim

    2. 使用基于 MPV 的客户端,如 vidhub

    3. 使用基于 VLC Kit 的客户端,如 swiftfin

      以上 3 种选择,共同点是 HDR 内容会在本地 tone mapping ,并且具备终端字幕的处理能力,但不支持 HDR 输出。据称 MPV Shim 在配置得当的情况下能够支持 HDR 输出,但是我还没调通。

    4. iOS 使用 native player 播放,并且同时选择 SRT 基础字幕( iOS 的 native player 不具备高级字幕的处理能力,ASS 会触发服务端烧录,不推荐)

    5. Apple 生态的宇宙终极解决方案 Infuse ,支持全格式+全种类 HDR 解码+HDR 输出,支持终端字幕处理

    6. Android TV 使用 Jellyfin Media Player 或者 Kodi 客户端(解码能力遵守电视硬件和系统设置,支持终端字幕处理)

    Android 手机端、Shield 、Apple TV 等环境因为我没有无法测试,希望网友们补充。

    可以看到,一旦涉及浏览器和 iOS 环境,坑和雷就很多,而在原厂情况下 Jasper Lake 核显在尝试处理 HDR 编码( DV, HDR10 and HLG )时会转码失败,无法播放,查询 log 会有device not found字样,多见于 4K 电影和美剧。这种情况仅会在 HEVC HDR 环境发生,但并不代表 N5105/6005 的核显不支持这个规格的视频转码。Linuxserver.io文档已经提到了相关的问题,你需要在环境变量中加一条参数:

    DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel
    

    以开启基于 OpenCL 的 Tone Mapping 能力。本身 Jasper Lake 就不支持 VPP TM ,同时遇到上述高规格编码时普通 Tone Mapping 无法工作,所以会导致播放失败。

    绿联的官方教程根本没有提及这个问题。

    中文字库

    Linuxserver.io 的原厂镜像并没有对 CJK 语境的支持,一旦在不支持终端字幕处理的设备上观看中文内容,就会导致中文全部变成框框、中文的媒体库封面也变成框框。在网上有很多传统教程教你用别的 ttf 字体替换系统内置的 Deja-Vu Sans ,其实 2023 年并不需要这么麻烦,Linuxserver 的镜像内部已经支持自动加载/usr/share/fonts下的字体文件,你只要用docker cp把字体放进去就好。

    image-20231211145135773

    还有更加简单的方法,Linuxserver 镜像底层是 Ubuntu ,所以一条命令就能够解决中文环境问题:

    apt update && apt install fonts-noto-cjk-extra -y
    

    会自动在系统中安装 Noto CJK (思源黑体)。系统显示用的非衬线体我只推荐两个:Noto更纱黑体,只有他们对字形的支持能够覆盖到操作系统的所有显示需求。

    绿联的官方教程根本没有提及这个问题。

    IPV6

    Jellyfin 才在半年之内的版本实现对 IPV6 的支持,而且出厂似乎默认没有开启。记得去 Networking-IP Protocols 把 Enable IPV6 勾选上

    权限更改

    参考前文,因为调用 GPU 必须指定用户为 root ,所以默认情况下镜像产生的所有配置文件和文件夹通过 SMB 访问没有写入权限,因此我们必须在环境变量中加入:

    UMASK=000
    

    (可选)主题优化

    默认的主题对比 Emby 稍微有些死板,不够灵动,所以我去 Github 找到了一套我最喜欢的主题Ultrachromic,并且进行了一点点优化配置,供各位参考

    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/fixes.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/base.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/accentlist.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/rounding.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/smallercast.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/episodelist/episodes_compactlist.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/header/header_transparent.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/login/login_minimalistic.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/type/dark_withaccent.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/fields/fields_noborder.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/cornerindicator/indicator_floating.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/titlepage/title_simple-logo.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/progress/floating.css');
    @import url('https://cdn.jsdelivr.net/gh/CTalvio/Ultrachromic/effects/glassy.css');
    @import url("https://cdn.jsdelivr.net/gh/prayag17/Jellyfin-Icons/round.css");
    
    /* Fonts */
    @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');
    @import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@500;600;700&display=swap');
    
    body, h1, h2, h3, h4 {
      font-family: 'Quicksand', 'Noto Sans SC', sans-serif;
    }
    .emby-textarea {
      font-family: monospace;
      font-size: 10pt;
    }
    
    /*Style backdrop*/
    .backdropImage {filter: blur(18px) saturate(120%) contrast(120%) brightness(20%);}
    
    /*Login background*/
    #loginPage {background: url(/* 公共图床的背景图片 URL ,推荐 1080P */) !important;}
    
    /*Accent and rounding*/
    /* 可以调配你自己喜欢的颜色 */
    :root {--accent: 195,140,255;}
    :root {--rounding: 12px;}
    
    /* Disable carousel */
    /* 在大屏幕设备上关闭首页卡片的横向滚动,更加易用 */
    @media all and (min-width: 50em) {
      .homePage .emby-scroller {
        margin-right: 0;
      }
      .homePage .emby-scrollbuttons {
        display: none;
      }
      .homePage .itemsContainer {
        flex-wrap: wrap;
      }
    }
    

    (可选)进度条预览

    我们使用Jellyscrub来提供进度条预览功能,这个插件能在 Plugins-Catalog 直接安装,并且与各种客户端、浏览器和第三方插件的适配都很好:

    image-20231211151422009

    image-20231211151510519

    请记得在插件设置里把 HW Acceleration 更改为 No Encode ( Intel 核显不支持 mjpeg 编码,所以不能选择 Full ),不然会通过 CPU 编码,整台机器发烧到天昏地暗,速度还慢得出奇。

    同时,上面提到的 DOCKER_MODS 环境变量还会影响这个插件的缩略图采集,如果没有打 MOD ,这个插件也不支持生成高规格 HDR 视频的进度条预览图。

    (可选)观看统计

    观看统计通过插件 Playback Report 实现,直接从 Plugins-Catalog 安装就好,在你的影视库用户量比较大的时候能够给你一个统计报告,观察大家都喜欢看什么:

    image-20231211151831043

    (额外)命名守则

    https://jellyfin.org/docs/general/server/media/shows/

    遵守 Jellyfin 官方的命名守则能够让你更有序地管理剧集和番剧资源,目前我库里的所有番剧内容都会按照 Jellyfin 的命名守则重新改名字,用 Power Rename 正则表达式其实挺方便的:

    image-20231211152518751

    TMDB 本身就有番剧资源的元数据,并不依赖 AniDB 等第三方插件(除了里番、OVA 等),只要稍加改名就能够正确识别:

    image-20231211152725194

    Linux 补完计划

    固件破破烂烂,我们缝缝补补

    s/1ejEUsEYZzIi5vu5NSrej0g?pwd=9uv7

    Busybox

    在《深入解析》的时候我们就已经知道了这个系统用的是 busybox+ash 。但是,更离谱的是,UGOS 在编译时忽略了接近 50%的 busybox 命令,导致 shell 基本上处于一个半残废状态。

    为了补足功能的缺陷,我连夜学习编译了一个静态库版本的 busybox ,包含了官方出厂能用的 310 条命令,并且对比系统固件所缺的命令列表,总结出了缺失命令,写了一个脚本来创建动态链接,缝补好这个残缺的 busybox:

    #!/bin/bash
    
    busybox_path="/opt/bin/busybox"
    target_dir="/usr/bin/"
    
    items=(
    "acpid" "add-shell" "adjtimex" "ar" "arch" "arp" "base32" "base64" "bc" 
    "beep" "blkdiscard" "bootchartd" "bzip2" "cal" "chat" "chpst" "chrt" "chvt" 
    "cksum" "comm" "conspy" "cpio" "crc32" "cryptpw" "cttyhack" "dc" "deallocvt" 
    "depmod" "dhcprelay" "diff" "dnsd" "dnsdomainname" "dos2unix" "dpkg" "dpkg-deb" 
    "dumpkmap" "dumpleases" "ed" "eject" "envdir" "envuidgid" "ether-wake" "expand" 
    "factor" "fakeidentd" "fallocate" "fatattr" "fbset" "fbsplash" "fdflush" 
    "fdformat" "fgconsole" "fold" "freeramdisk" "fsck" "fsck.minix" "fsfreeze" 
    "fstrim" "ftpd" "ftpget" "ftpput" "getopt" "getty" "hd" "hexedit" "hostid" 
    "hostname" "httpd" "hush" "ifenslave" "ifplugd" "inetd" "install" "ionice" 
    "ipaddr" "ipcalc" "ipcrm" "iplink" "ipneigh" "iproute" "iprule" "iptunnel" 
    "kbd_mode" "killall5" "klogd" "last" "link" "linux32" "linux64" "linuxrc" 
    "loadfont" "loadkmap" "logname" "lpd" "lpq" "lpr" "lsscsi" "lzcat" "lzma" 
    "lzop" "makedevs" "makemime" "man" "mdev" "mesg" "microcom" "mim" "mkdosfs" 
    "mkfs.minix" "mkfs.reiser" "mkpasswd" "more" "mountpoint" "mt" "nameif" 
    "nanddump" "nandwrite" "nbd-client" "netcat" "nl" "nmeter" "nohup" "nproc" 
    "nsenter" "od" "openvt" "paste" "patch" "pipe_progress" "popmaildir" "powertop" 
    "printenv" "pscan" "pstree" "raidautorun" "rdate" "rdev" "readahead" "readprofile" 
    "realpath" "reformime" "remove-shell" "renice" "resume" "rev" "rpm" "rpm2cpio" 
    "run-init" "run-parts" "runlevel" "runsv" "runsvdir" "script" "scriptreplay" 
    "seedrng" "sendmail" "setarch" "setconsole" "setfont" "setkeycodes" "setlogcons" 
    "setpriv" "setserial" "setsid" "setuidgid" "sha1sum" "sha3sum" "sha512sum" 
    "showkey" "shred" "shuf" "slattach" "smemcap" "softlimit" "split" "ssl_client" 
    "stty" "sulogin" "sum" "sv" "svc" "svlogd" "svok" "syslogd" "tac" "tc" 
    "tcpsvd" "telnet" "telnetd" "tftp" "tftpd" "truncate" "ts" "tsort" "tty" "ttysize" 
    "tunctl" "ubiattach" "ubidetach" "ubimkvol" "ubirename" "ubirmvol" "ubirsvol" 
    "ubiupdatevol" "udhcpc6" "udhcpd" "udpsvd" "uevent" "unexpand" "unix2dos" "unlink" 
    "unlzma" "unshare" "unxz" "users" "usleep" "uudecode" "uuencode" "vconfig" "vlock" 
    "volname" "wall" "watchdog" "who" "whoami" "whois" "xxd" "xz" "xzcat" "zcip"
    )
    
    for item in "${items[@]}"; do
        ln -s "$busybox_path" "$target_dir$item"
        if [ $? -eq 0 ]; then
            echo "Created symlink for $item"
        else
            echo "Failed to create symlink for $item"
        fi
    done
    

    请根据自己的情况修改 busybox binary 的存放位置。

    其它软件

    rsync 对于高级 Linux 玩家不可或缺,同样是由于 libc 的原因,从 opkg 安装的 rsync 无法运行。所以我又编译了一个 static 版本的 rsync ,还是一样:

    ln -s /opt/bin/rsync-static /usr/bin/rsync
    

    同理,还有:

    • iozone ,一个用户 Linux IO 性能测试的软件
    • iotop ,一个类似 top/iftop/nvtop 的,面向系统 IO 的监控软件(但是在 UGOS 运行一段时间后会出现行错位,不太好用)

    用户态 nfsd

    论坛里面还是有高手的,有一位大哥实现了用户态 nfs 软件 nfs-ganesha 的部署,并且看起来像是自己编译的安装包、自己写的 init.d 配置文件,移步论坛帖子查看:

    https://bbs.ugreengroup.com/forum.php?mod=viewthread&tid=10961&highlight=ganesha

    它写的 init.d 配置文件默认只分享一个目录,我进行了一些适当的修改,具体可以参照帖子里最新的一楼。

    image-20231211174010309

    用户反馈模式

    最后这一部分是一个小吐槽。

    买之前我看博主是这样吹的:

    08cb9a7b35274c69c84f762b26f62c8e

    买之后固件更新失踪一个月、官方更新路线失踪 2 个月,官方四处叫天天不应、叫地地不灵,技术支持客服 80%的时间在用套话跟你聊天。

    网上面的很多博主都会说绿联听取用户意见,那我就不得不说说绿联现在的用户反馈模式了:

    1. 外网,全部都是投放和软文,并且定位都是轻度体验和开箱,绝口不提深度的软件内容,没有任何公开的用户讨论社群

    2. 论坛,admin 直接和用户打交道的地方,必须购买产品并且注册账号才能够访问,论坛本身有 token 验证,不携带 token 拒之门外,放一个二维码给你扫

      2.1 这一步将用户的沟通渠道从公网收缩到了买了产品、注册而且会上论坛的人

      2.2 现在论坛的建议反馈区域已经没有 admin 回答,admin 只活跃在解答用户疑问的“求助解答”板块

    3. 11 月中绿联官方短暂复活,发布帖子邀请用户加入“绿联私有云官方交流群”,方式是添加一个“工具人”,提交你的账号、设备 SN 码,经核实才会允许入群,群规模 500 ,我加入的是第 5 群

      3.1 这一步将用户的沟通渠道进一步收缩到了 3000 人

      3.2 我时不时会看到自己那篇《深入解析》被转载到群里交流,但是好像没怎么发现是我写的

    4. 群里面有一个 bot 提供基本的解答,并且 500 人的大群,意见反馈和需求统一需要主动加群里的 1 个人私聊,没错,只有这 1 个人,收缩比例 1:500:

      d83c654de7e86d13cf7cd408bb071851

    5. 目前更新计划已经彻底不公开,论坛“官方公告”的升级规划已经全部成为过去式,如果想要了解系统的更新计划,现在的做法是蹲点等待“内测组报名”不定期开启,每次内测只会邀请数十名用户直接面对产品组体验 beta 固件,免费测试打工,除此之外请排队找上图的这位爷。

    6. 然后群里日常吐槽系统问题,官方的机器人突然活人上号出来让我们不要诋毁,被我骂了

      792439752a58c0194360ac7a773ba20d

    第 1 条附言  ·  338 天前
    关于 HDR 转码的事情前阵子我还问过开发者

    有时候看 HDR 视频烧录字幕不可避免,而一旦烧录就会 Tone Mapping 丢失 HDR

    开发者的答复是,在下一个大版本(10.9.0)将会支持 HDR to HDR transcoding

    但是 Jellyfin 的大版本发布一直比较随缘,没有固定路线,所以这方面的需求目前还得等。现阶段还是尽量找支持本地字幕处理的客户端
    36 条回复    2024-11-15 22:31:20 +08:00
    xiaoz
        1
    xiaoz  
       340 天前
    我还是喜欢 OMV 这种简洁的 NAS 系统,想要什么软件自己 Docker 就能安装了。大部分 NAS 系统硬塞一堆不需要的东西。
    Meekdai
        2
    Meekdai  
       340 天前
    哈哈,OP 你在群几?我在群 3~~
    flyqie
        3
    flyqie  
       340 天前 via Android
    flyqie
        4
    flyqie  
       340 天前 via Android
    @xiaoz #1

    omv 确实简洁,他走的不是群晖那种的路子,就纯粹是一个 nas ,很清真。
    ragnaroks
        5
    ragnaroks  
       340 天前
    绿联开始找白嫖王打广告我就不用它了
    anguliuyun
        6
    anguliuyun  
       339 天前
    买了之后只用了几个简单的功能,还没开始折腾,后面多半会换掉这系统
    tangtang369
        7
    tangtang369  
       339 天前
    我目前是 qb + nastools 感觉爽反了
    如果一定要访问内网服务 建议买个蒲公英的路由或者是旁路由 直接组网 省去折腾时间
    7477wj
        8
    7477wj  
       339 天前
    @ragnaroks 嫖王是谁??
    B9hkc
        9
    B9hkc  
       339 天前
    楼主太 6 了,愣是看完了 4 篇连续剧,后面会再折腾折腾刷黑裙吗?
    redvoilin
        10
    redvoilin  
       339 天前
    @7477wj 何同学?
    HOMO114514
        11
    HOMO114514  
    OP
       339 天前
    @B9hkc 不打算折腾了,家里人都用上了,背后的技术细节只有自己懂,迁就一下
    somebody1
        12
    somebody1  
       339 天前
    你写的是不是比他们的系统设计说明书还要长呢!
    Withal
        13
    Withal  
       339 天前
    这垃圾官方群我都不加,反正就这么将就用用了。macvlan 我看论坛提一年多了还没加
    Withal
        14
    Withal  
       339 天前
    🤣另外我觉得 jellyfin 还是开发者特供的好用,不用那么折腾。https://hub.docker.com/r/nyanmisaka/jellyfin
    penissponge
        15
    penissponge  
       339 天前
    感谢!我在群 3 ,期待楼主更多好文
    xiaoz
        16
    xiaoz  
       338 天前 via Android
    @Withal #14 ,为啥不直接用 jellyfin 官方提供的镜像呢。
    wsbqdyhm
        17
    wsbqdyhm  
       335 天前
    @ragnaroks 听说这个会主动扫盘?
    Imr
        18
    Imr  
       333 天前
    感谢分享,看完四篇,切实感受到一路探索的艰辛。
    我是刚准备捡垃圾试试这款 nas ,本着再差也能组 raid 满足存储安全性这点考虑,希望到手别让我太过失望😂
    大部分应用安装都学到了很多东西,只是前面的 tailscale docker 挂载 tun 用 host 网络部署不是也可以,容器化还方便监控资源。
    另外 nas 只适合内网放置,直接 DMZ 很危险,这款 nas ,配置不低,却连基本命令都阉割,安全性更不敢想象
    HOMO114514
        19
    HOMO114514  
    OP
       333 天前
    @Imr
    理论上没问题,docker 还会自动写 iptables 规则,没有防火墙放行的问题。只不过我个人不太中意罢了
    缺点是,固件更新会覆盖 bin 和 sbin ,所以装在系统里的话每次固件更新都会导致 tailscale 被卸载,需要重新走一遍安装流程(但是配置和 uci 不会被刷)
    Imr
        20
    Imr  
       333 天前
    感觉太复杂了,我是心水这款的外观,不在意它里面是臭还是香,不折腾原生系统好点
    我看挺多人推荐用 unraid ,今天摸鱼大概看了下方案还算成熟,不过不喜欢付费买个 gui 还要用 u 盘有点蠢,虚拟机也完全用不到。
    又看了看 openvault media ,跟直接用 linux 服务器也没差多少,网站设计落后太多了,有种 linux 的粗暴美。
    因为之前家里还有个服务器,从 k3s 一路退化到 casaos ,主要是感觉做 all in one 太复杂,存储堆一起不够稳定。想着单独分离出一个能简单扩展轻而美的存储服务器吧,好像还不如直接买群晖?
    pokiller
        21
    pokiller  
       332 天前
    大佬,我机器新买回来是直接算黑裙好还是整个 omv 或 unraid 好?我听说黑裙会有数据丢失问题,不大清楚但有点担心
    liminany1
        22
    liminany1  
       326 天前
    大佬厉害啊~
    我也买了绿联的这个半年多了,买回来也基本我在用,家里人很少用。我不用就没人用。。
    现在也就用用相册和影院功能,其他就是整了一下 docker 应用,最后就是当网盘 用了。

    之前研究过 docker 版的 clash 和 opwerwrt ,想整个旁路由网关。但是系统内核的问题导致容器网络最多只能用 host 模式,虽然搭成功了,但是 opwerwrt 里面集成的那些科迷插件感觉配置和使用什么的都挺麻烦,不好搞。。搞成功了也只能做局域网代理。没法做透明网关。clash 也是,也只是这样了,没法开启 tun 模式。。期待楼主能研究一下这个。。。

    另外 还有一个虚拟机功能,我找了一些资料,还没时间去研究折腾,也期待楼主能搞一下,如果需要我收集下来的那些资料的网址,吱声,我发出来。。


    反正搞下来,绿联这种成品 nas 就用上面那些功能就行,其他,比如我还想要虚拟机(甚至是直通显卡)、玩游戏、推流直播(自动转播+自动录制)、日常工作(码代码各种 win 的操作)还是要搞一台 all in one 主机...
    liminany1
        23
    liminany1  
       326 天前
    另外 还有一点,能不能拿到本地 hdmi 输出权限?现在这 b 玩意用一个播放器独占输出的。
    我试了 kill 掉这个进程,他会自动重启。。我前面试过在他这个播放器上面显示过一个终端,但也只能这样。。了
    liminany1
        24
    liminany1  
       326 天前
    另外 还有一点就是从 usb 启动( winpe 和 batocera 复古游戏模拟器 linux 系统)也试通了,楼主要不要试一下从 u 盘或者内置硬盘启动第三方 nas 系统?我是懒得折腾了
    ixcharlib
        25
    ixcharlib  
       326 天前
    @Meekdai 我也在群 3
    yougotme
        26
    yougotme  
       308 天前 via iPhone
    之前确实月更,后来要搞新品了,老款的开发自然就掉队了。不过我不指望所谓 ugos pro 系统有多强,因为九流的产品搭配三流的开发,就算改名 pro 也 pro 不到哪去,团队水平就是这个垃圾样,特别是产品经理,垃圾中的垃圾,能搞出什么像样的 pro ?
    yooooho
        27
    yooooho  
       307 天前
    DX4800 难产 ,我看他们官方还发新闻去了 CES 现场展示有多盘位的 NAS 官方图里面也有 DX4800 的图,也不知道怎么好意思舔着大脸去的,我要是在现场高低给大佬的文章装订成册给外国人好好看看绿联是个什么货色。
    我现在去问绿联客服 我说你们搞清楚 到底是 openwrt 还是 Debian 他们都吓得不敢回答了。我把大佬的文章直接贴在客服脸上,我说你自己知道自己是什么形象不?他们 P 都不敢放。
    好玩。
    yooooho
        28
    yooooho  
       306 天前
    @yougotme 在群里问一下 DX4600 系列 比如说+和 Pro 会不会升级 UGOS Pro ,新系统是依旧 openwrt 还是 Debian ?我不在群里问不到
    yougotme
        29
    yougotme  
       303 天前 via iPhone
    @yooooho dx4800 哪敢放货,去年极空间 z4pro 出来后,直接把绿联新品按在地上摩擦,未上市就已落后。所谓新系统只是多了一些功能并不涉及底层,底层换啥都没用,不玩 nas 的产品经理它能懂个毛线。
    HOMO114514
        30
    HOMO114514  
    OP
       302 天前 via iPhone
    @yooooho
    “ 今年会有新的东西,迭代计划也会实时跟进”
    “ 计划是会同步出模块说明,跟优化的内容,”
    “ 看产品什么时候梳理好”
    “ 今年会有大的动作 我只能这样说了”
    “ dddd 无法明说 可以稍微等待下”
    “ 去年欠的功能内部都有做测试,没有去上线”
    “ 产品有新的规划”

    群里面产品客服的说法,自己品吧
    从去年 10 月开始到现在已经根本没有更新计划了,每次问就是画饼/装死/不方便透露/懂的都懂
    SteinsGate
        31
    SteinsGate  
       297 天前 via Android
    大佬大佬,求助一个问题,我想在 dx4600 里用 docker 开个幻兽帕鲁服务器 https://github.com/jammsen/docker-palworld-dedicated-server ,尝试启动报错,日志如下:

    ./steamcmd.sh: line 37: /home/steam/Steam/linux32/steamcmd: cannot execute binary file: Exec format error

    绿联这个 openwrt 好像执行不了 32 位程序,steamcmd 也只有 32 位的。

    有个说是要重新编译 openwrt ,好像也弄不了
    https://stackoverflow.com/questions/76822529/running-32-bit-programs-in-centos-7-container-on-openwrt-troubleshooting-steamc
    Magicmadoka
        32
    Magicmadoka  
       280 天前
    @SteinsGate 我用 openwrt 自己编译的版本成功搭建了,灵感就是你发的那个 stackoverflow 帖子,有兴趣可以留个联系方式我教你弄。https://imgur.com/a/ExvO7qe 不知道怎么发图,只能贴个网址了。
    SteinsGate
        33
    SteinsGate  
       279 天前 via Android
    @Magicmadoka 谢谢,我后来找到办法绕过 steamcmd 了,直接用 parworld 服务端,不走 steamcmd 下载就可以了,用的这个 https://github.com/KagurazakaNyaa/palworld-docker
    zhangxi19982017
        34
    zhangxi19982017  
       247 天前
    大佬,想求助一个问题,首先非常感谢您的帖子,让我对我的 DX4600 有了更深入的认识。
    现在想通过 webdav 挂载多个硬盘,修改了/etc/lighttpd/conf.d/ugreen.conf 文件如下:
    server.modules += ( "mod_webdav" )
    server.modules += ( "mod_auth" )
    server.modules += ( "mod_authn_file" )


    $HTTP["url"] =~ "^/dav/ugreen($|/)" {
    webdav.activate = "enable"
    alias.url = ( "/dav/ugreen/main" => "/mnt/media_rw/86167adc-6038-4a38-b812-65ceec3107cd/.ugreen_nas/302105" )
    alias.url += ( "/dav/ugreen/pt" => "/mnt/media_rw/5810aef9-890d-4a18-9189-7b8e278df542/.ugreen_nas/302105" )
    alias.url += ( "/dav/ugreen/system" => "/mnt/media_rw/ff9da0fb-da42-4b72-b7eb-d28b764811f9/.ugreen_nas/302105" )
    server.document-root = "/mnt/media_rw/"
    dir-listing.activate = "enable"
    dir-listing.exclude = (".safe")
    dir-listing.encoding = "utf-8"
    auth.backend = "plain"
    auth.backend.plain.userfile = "/etc/lighttpd/conf.d/ugreen.shadow"
    auth.require = ( "/dav/ugreen" => ("method" => "basic", "realm" => "webdav", "require" => "user=ugreen"))
    webdav.sqlite-db-name = "/tmp/webdav.db"
    }
    但是现在只能通过/dav/ugreen/main ,/dav/ugreen/pt ,/dav/ugreen/system 三个路径单独打开三个盘,而/dav/ugreen 无法打开。一开始想通过软链接直接解决,但发现 webdav 客户端不支持软链接,只能显示为一个没有后缀的文件。想问下大佬有什么方法可以只挂载一个路径来访问三个不同的盘吗,谢谢!
    roding
        35
    roding  
       240 天前
    这垃圾绿联,我都不想吐槽了。相册,影音都是我自己用 docker 搭的,只希望他能换底层,支持虚拟机。其他有没有也不奢望,就算有估计他们也做不好。
    nszr
        36
    nszr  
       5 小时 9 分钟前
    这神贴真是常看常新,当初刚看到这个帖子,大为震撼,后来绿联发了 Pro 系统,简直就是冲着文件权限等等槽点去的,貌似还真是有点诚意(虽然刚发布的时候大翻车)。如今 Pro 系统发布大半年了,也逐渐稳定了
    不知道 OP 大佬的 DX4600 Pro 出了没,真想看 OP 来个续集,解剖一下 Pro 系统 @HOMO114514
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1055 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:40 · PVG 03:40 · LAX 11:40 · JFK 14:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.