openSUSE Leap 下编译安装 Python 所需依赖

使用 pyenv 编译安装 Python 时报错,文档中看起来没有 openSUSE 下的依赖安装指引,而且 Zypper 里也没有等价于 build-dep 的子命令,只好自己安装了。

必选的依赖:

sudo zypper in libopenssl-devel

可选的:

sudo zypper in libbz2-devel libffi-devel readline-devel sqlite3-devel tk-devel xz-devel

如果安装 lzma-devel 会自动转为 xz-devel,具体见引用中的回答。

引用

Setup and building (python.org)

Issue: Installing R on openSUSE Leap 15.0: “liblzma library and headers are required” – Stack Overflow

domain 的自言自语 2402

开发

再有人问你如何实现订单到期关闭,就把这篇文章发给他! (qq.com)

分布式事务,这一篇就够了 | 小米信息部技术团队 (xiaomi-info.github.io)

网络

Windows 11 Insider Preview 26063.1 (24H2) 支持MLO,但 (qq.com)

异数OS 2017 DPDK 峰会观后感-CSDN博客
作者在yds_086 – 博客园 (cnblogs.com)

cloudflare/pingora: A library for building fast, reliable and evolvable network services. (github.com)

如何構建 Pingora 以將 Cloudflare 連線至網際網路代理

Inside NGINX: Designed for Performance & Scalability

家庭影院入门 第3集 困难难度【考拉上校】_哔哩哔哩_bilibili

移动端

介绍 | 存储空间隔离 (rikka.app)

domain 的自言自语 2401

云原生

Kubernetes 基础教程 | 云原生资料库 (jimmysong.io)

序言 · Kubernetes 中文指南——云原生应用架构实战手册 (jimmysong.io)

CKA

CKA.md (github.com)

CKA考试经验总结 – 简书 (jianshu.com)

【助力CKA全球认证】奔走相告!kubernetes管理员实训课火热开启!!!_云容器_华为云论坛 (huaweicloud.com)

华为 kubernetes管理员实训课_哔哩哔哩_bilibili

K8S其实很简单-CKA/CKAD报名和考试技巧 (qq.com)

2023年CKA考试真题及注意事项 – jiayou111 – 博客园 (cnblogs.com)

K8S CKA认证考试经验分享 – 掘金 (juejin.cn)

自考CKA体验总结 – 掘金 (juejin.cn)

【從題目中學習k8s】-【後記】CKA證照 – iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)

CKA考题解析-CSDN博客

K8S认证工程师(CKA)考试必过指南 – 知乎 (zhihu.com)

CKAD

yuyicai/cka-ckad-exam-experience: cka and ckad exam experience,cak和ckad考试经验 (github.com)

dgkanatsios/CKAD-exercises: A set of exercises to prepare for Certified Kubernetes Application Developer exam by Cloud Native Computing Foundation (github.com)

CKAD 1. Core Concepts (13%)考题答案_ckad考试内容-CSDN博客

CKS

CKS考试学习笔记 by 2022.12-2023.01 – huss – 博客园 (cnblogs.com)

CKS真题分析-2023年度_cks考题-CSDN博客

Linux

Linux Signal及Golang中的信号处理 (colobu.com)

Graceful restart in Golang – Gregory Trubetskoy (grisha.org)

算法

【数据结构与算法】蓄水池抽样算法(Reservoir Sampling) – gonghr – 博客园 (cnblogs.com)

酷比魔方 iPlay 50 Pro 刷机,安装 Magisk 获取 Root 权限,以及修复串号的经历

最近刷张大妈的时候,看到酷比魔方的平板卖得还挺便宜的,而且还有卖老人关怀软件,可以在微信小程序上面进行一些远程操作。具体功能官方放了个视频:酷比魔方老人关怀系统,加入更多实用功能,你绝对想不到_哔哩哔哩_bilibili。考虑到长期在外面打工,于是乎决定买一个给家里长辈用用,平时还可以微信视频什么的。

到手之后发现系统是刚适配不久的安卓 13,似乎厂家还没有测试好,非常多奇奇怪怪的小问题。而且国内版本的系统没有底部的三大金刚键,只能用手势操作,感觉很难教会老人;国际版本的系统是虚拟按键,但是客服说不支持使用老人关怀守护软件,只能放弃。基于上述原因,只好刷机降级到安卓 12,为了虚拟按钮和让平板更稳定一些。

刷入官方安卓 12

我们可以在官网 iPlay50Pro(T1030M)-Android12-20230815-固件及刷机教程 – 酷比魔方官网 (51cube.com) 找到刷机包和文档,按照压缩包内文档,安装驱动,然后关机刷入固件即可。

这个线刷通常都比较顺利,官方给的文档也比较详细,这里就不展开了。不过要注意的是,除非有特殊需要,不然不要选择 Format All + Download。这个选项会清除串号 SN 和 WLAN MAC 地址,由于我不小心选到这个选项,这就有了后面重新写 SN 的经历。😅

安装 Magisk 获取 Root 权限

由于需要保活远程协助应用和进行其它一些骚操作,所以需要获取 Root 权限。安装 Magisk 以获取 Root 权限的过程,参考 Installation | Magisk (topjohnwu.github.io) 即可。对于酷比魔方这台机器来说,需要先解锁 Bootloader,然后 Patch 一下 boot.img 再刷入。

解锁 BL

首先获取 adb 用来解锁,本人不从事安卓程序开发,所以就不下载完整的 Android Studio 了,从 SDK 平台工具版本说明  |  Android Studio  |  Android Developers 这里获取单独的工具即可。

然后在平板上反复点按关于平板中的版本号来打开开发者模式,并启用其中的 USB 调试。完成设定后即可将平板连接到电脑上。电脑上执行 .\adb.exe devices 后,平板会弹窗询问调试授权,此时点按同意即可。

随后执行 .\adb.exe reboot bootloader 重启到 Bootloader,成功后再执行 .\fastboot.exe flashing unlock 进行解锁,此时平板上会刷出几行字询问是否解锁,要按音量下键确认解锁,重启平板后其将会自动恢复出厂设置。

Patch 并刷入 boot.img

在平板上面安装最新的 Magisk,并从上文中用过的官方刷机包里找到 boot.img 并传到平板上面,然后在 Magisk 界面中进行 Patch。

Patch 完成后,我们将生成的新 boot.img 传到电脑上。还是执行 .\adb.exe reboot bootloader 重启到 Bootloader,进入 Bootloader 后执行 .\fastboot.exe flash boot .\magisk_patched-26400_bQzZo.img 刷入,成功后即可重启,最后在 Magisk 应用中检查成效。

刷写串号(SN)

刷完机之后,可以从 iPlay50 Pro 老人关怀系统软件(安卓13) – 酷比魔方官网 (51cube.com) 安装关怀系统。然后我就发现了一件非常糟糕的事情,由于前面线刷的时候点到了 Format All,平板的串号和 WLAN MAC 地址都被清掉了,没有串号就没法激活花了 100 块钱买的这个关怀系统。可以在电脑上执行 .\adb.exe shell 打开一个平板的终端,然后通过 getprop ro.serialno 来确认串号是否丢失,或者直接使用 getprop 命令再进行过滤。

由于这个平板是 MTK 方案的设备,而且前面用到的官方刷机包里给了 AP Database,那么应该还是可以用 MTK SN Write Tool 写回去的。在关于X的救砖 – 酷比魔方官网 (51cube.com) 这个帖子里,管理员亦确认了修复的可行性。

我们从 Download SN Write Tool (all versions) – Mediatek IMEI Tool (androidmtk.com) 获取到 SN Writer,当前最新版本在 Windows 11 上运行缺少动态链接库,提示缺少 mfc100.dll,安装后还是报错。为了更快解决主要问题,这里用的是 v1.1924 的版本,内含 mfc90.dll 不会有这种问题。

启动 SN Writer 之前,需要先修改配置文件 SN_Setup.ini 中的 Enable Serial No 以允许烧写串号。如下图所示。

此时应该已经可以在设置中看到烧写串号选项了。

还需要在固件包中找到 MDDB 和 APDB。

在配置中选中它们。

点按 Save 保存,然后点按 Start 烧写包装盒上的串号即可。

将普通 App 转为系统 App

这里听同学的建议,本来是想写个 Magisk 模块,然后把 apk 直接挂进 /system/priv-app 和 /system/app 下面的。但是这样其实缺少权限等文件,部分 apk 直接挂进 /system/priv-app 之后平板直接启动不了了。后面发现其实可以直接用现成的模块转换已安装的应用,这里直接放文章,就不赘述了。

聊聊关怀系统OS

仅仅是一些个人观点,随时间推移,状况可能发生变化。

这个系统,更准确地说是一个有较高权限的软件,可以自行从官网上下载安装。划线价 200 元 5 年,现在是 100 元 5 年。价格不贵,但槽点也挺多,还不是非常完善,总感觉这个项目的产品经理像是微信相框一类的业务过来的。

激活并绑定后,在微信小程序上可以操作声音、亮度等设定还是不错的。这些东西看起来没有知名的竞品厂商在做,以往要实现这些东西还得上远控软件。

然而,小问题也不少。首先,首页几乎不可定制,只能固定若干个应用在快捷应用卡片上,而且这些应用的范围也比较迷。系统应用是没法固定到首页的,这也就意味着打电话等操作是要移动到第二屏的,我很难确认是否能教会 80 多岁的老人这么操作。这个电话里面的通讯录可以在小程序上面下发,但是下发之后是跟外面的通讯录不同步的,这就有点难受了。

其次,第二屏的应用没法整理。对于部分预装应用来说,长按会提示移入“日常应用”,确定的话,实际上是移入“更多应用”里面;对于用户安装的应用,甚至包括预装的应用宝、输入法,长按虽然是提示移入“日常应用”,但是一确认就直接没了,原来的桌面直接崩溃了,在哪里都找不到。只能在小程序里面找到隐藏的应用恢复出来,不论是预装的安卓 13 还是后面我自己刷的安卓 12 均是如此,难以想象 QA 是怎么放过这些常见用例的。

还有,刚到手的时候,我点一下关怀系统里的一键加速,过了一小会儿平板竟然自己触发了紧急呼叫,多次尝试均是如此。这些奇奇怪怪的现象让人很难对这个产品有足够的信心。😥

总之,在我看来这个平板从定位、价格、做工和特色功能等方面来看都是算这个档次里面比较有竞争力的,但是这个价位的产品各种小毛病是真的不少,还需要等待厂商慢慢打磨了。

引用

[MODULE][Terminal] App Systemizer v17.3.1 | XDA Forums

[MODULE] App Systemizer for Magisk v9-v14 — DEPRECATED | XDA Forums

How do I systemize apps on Android 11 with root access? : r/AndroidQuestions (reddit.com)

Magisk-Modules-Repo/terminal_systemizer: terminal_systemizer (github.com)

stangri/AppSystemizer: AppSystemizer (github.com)

【iPlay20】国际版/解锁/救砖/Magisk/Xposed – 第 2 页 – 酷比魔方官网 (51cube.com)

获取android SN码 安卓sn码_mob6454cc634aa4的技术博客_51CTO博客

[2021.04.13]给联发科(MediaTek)平台设备写入串号(IMEI)、MAC地址等设备标识信息 – Hiiragiの咖啡厅 (hiirachan.moe)

Developer Guides | Magisk (topjohnwu.github.io)

开发者指南 | Magisk (e7kmbb.github.io)

Magisk 刷入方法及模块推荐 – Ojhdt’s Blog

Android 11 刷入 Magisk 模块后无法开机的解决方法 – 搞机男 (gaojinan.com)

刷了 Magisk 之后装什么?我推荐这 20+ 个模块 – 少数派 (sspai.com)

使用 Docker Registry 自托管一个缓存镜像源

部署

由于是在一个 1C1G 的机器上部署,就不用 K3s 了,直接用 Docker Compose 拉起一个实例。官方文档有提供 docker-compose.yml,这里也给出一份示例:

version: '3'

services:
  registry-docker:
    image: registry:2
    restart: unless-stopped
    environment:
      REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io
      REGISTRY_PROXY_USERNAME: username
      REGISTRY_PROXY_PASSWORD: dckr_pat_value
      # REGISTRY_AUTH: htpasswd
      # REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      # REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
      REGISTRY_STORAGE_DELETE_ENABLED: "true"
    ports:
      - 127.0.0.1:50000:5000
    volumes:
      - ./data/auth:/auth
      - ./data/docker:/var/lib/registry

这里的账密可以提高拉取限频,但是根据官方文档,使用镜像的用户就可以读到该账号下的私有镜像了,最好是一个独立的账号。

服务拉起来之后,Nginx 反代一下就可以使用了。

拉取

有两种方式可以使用,首先是最普遍且最优的做法,在 /etc/docker/daemon.json 中加入 registry-mirrors 选项。例如:

{
  "registry-mirrors": [
    "https://<docker-registry-host>"
  ]
}

然后重启 Docker Engine 即可。

不过此种方式不支持 HTTP Basic 身份验证,这也就意味着无法通过事先 docker login 的方式来拉取私有的镜像源。目前各镜像站通常的做法是使用泛域名,在域名中提供唯一身份信息,显然这种方式并不安全,只是对当下现状的妥协。

这种情况应该在下一个版本的 Docker 中应该可以得到解决,在即将发布的 24.08/25.0 版本中,我们可以在 [24.0 backport] registry: allow mirror path prefix in config by thaJeztah · Pull Request #46944 · moby/moby (github.com) 中看到,可以支持填带路径的镜像源了,这就意味着可以在路径上实现类似的认证,因为 HTTPS 中路径是受保护的,这样的话就不会有问题了。

另一种方式是手动拉取,这需要以 docker pull <docker-registry-host>/library/nginx:stable 的格式进行拉取。这种方式支持 HTTP Basic 认证。

认证

Docker Registry 上支持认证,可以参照上面的 docker-compose.yml 处理;也可以在反代上面认证,其官方文档给出了 Apache/Nginx 上面的配置示例,具体请参考 Authenticate proxy with nginx | CNCF Distribution

引用

Registry as a pull through cache | Docker Docs

Docker daemon won’t start if a registry-mirror is configured in /etc/docker/daemon.json · Issue #36598 · moby/moby (github.com)

registry: allow mirror path prefix in config · thaJeztah/docker@3d8f7d0 (github.com)

Pull-through cache is not working for private registry: Challenge established with upstream · Issue #3081 · distribution/distribution (github.com)

Implement Basic authentication to upstream registry in proxy mode by ArthurMelin · Pull Request #3256 · distribution/distribution (github.com)

Private Docker registry in pull through cache mode return “invalid authorization credential” – Stack Overflow

Private docker registry behind a subpath : r/docker (reddit.com)

Private Docker registry in pull through cache mode return “invalid authorization credential” – Stack Overflow

在威联通 QTS 的 Container Station 上使用类似虚拟机的桥接网络

日常使用时,我们可以注意到:在创建容器时,Web UI 上其实是允许容器使用虚拟交换机网络而非 NAT 的。这个选项的效果类似于虚拟机平台的虚拟交换机(或者有些时候称之为桥接网络),和直接使用 network_mode: "bridge" 有显著区别。

出于好奇,索性这样创建一个容器,然后直接 SSH 到机器上面看看生成的东西是啥样的。这个容器的实现也很直接,SSH 上去可以直接使用现成的 Docker 的命令行客户端,所以直接看看 Docker 的网络。

可以注意到这里使用了一个定制的 Docker 网络驱动。这下就明白了,然后我们可以来搜一下怎么在 Docker Compose 里调用它。

也比较顺利,直接搜到了官方的文档:Qnet — Container Station documentation (qnap-dev.github.io),这里面给出了示例:

那么直接复制粘贴就可以了。不过也发现一个问题,重新创建应用会导致 MAC 变化,DHCP 服务器上配置的静态分配不生效。此时可以直接给 services.qnet_dhcp 下设置一个 mac_address 属性来指定 MAC 地址,就不会有问题了。

引用

Qnet — Container Station documentation (qnap-dev.github.io)

WordPress 接入 CDN 后升级插件或 WP 失败

现象

近期将博客接入腾讯云 CDN 后发现更新插件和更新 WordPress 版本这种耗时较长的请求都会失败。一开始还没在意,以为是后端请求的下载地址不在国内所以下载超时。

后面发现 Grafana 的服务在没有预热 CDN 缓存的时候,很多大的 JS 文件也都会请求失败,页面无法打开,F12 控制台有一些 net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)。此时考虑 CDN 上面是否有限制回源请求的超时限制。

解决方案

如果使用腾讯云 CDN

发现腾讯云 CDN 有给出回源超时时间配置,见内容分发网络 CDN 回源超时时间配置-配置指南-文档中心-腾讯云 (tencent.com)

默认 TCP 超时限制 5 秒没有问题,但是回源加载时间 10 秒这个限制,对于更新插件和 WP 这种场景,以及 1Mbps 带宽加载 JS 大文件(开启 Gzip 后仍然有 4M+)的情况来说完全不够,因此酌情将回源时间限制放宽。在 CDN 控制台上刷新缓存之后,再次验证更新 WP 版本和访问 Grafana 已没有问题。

如果使用腾讯云 EdgeOne

先前往控制台选择相应站点,然后可以找到规则引擎。在匹配类型为 Host 的规则里新增操作来延长超时时间即可。

更新历史

24/3/12

新增 EdgeOne 相关。

domain 的自言自语 2312

云原生

istio服务网格进阶最佳实践 (qq.com)

没错,数据库确实应该放入 K8s 里! (qq.com)

微服务全做错了!谷歌提出新方法,成本直接降9倍! (qq.com)

华为 kubernetes管理员实训课_哔哩哔哩_bilibili

【助力CKA全球认证】奔走相告!kubernetes管理员实训课火热开启!!!_云容器_华为云论坛 (huaweicloud.com)

互联网故障背后的草台班子们 (qq.com)

开发

microsoft/qlib: Qlib is an AI-oriented quantitative investment platform that aims to realize the potential, empower research, and create value using AI technologies in quantitative investment, from exploring ideas to implementing productions. Qlib supports diverse machine learning modeling paradigms. including supervised learning, market dynamics modeling, and RL. (github.com)

How to update git commit author, but keep original date when amending? – Stack Overflow
[deleted by user]:git (reddit.com)
重置一些 Git 提交的作者,但保留日期等信息。

前端monorepo大仓权限设计的思考与实现|得物技术 (qq.com)

szu17dmy/panabit-ddns-go-manager: 在 Panabit 智能应用网关上运行 jeessy2/ddns-go (github.com)
给 Panabit 网关写了两个插件,或许有空的时候会写个过程吧。

算法

蓄水池抽样算法(Reservoir Sampling) – 简书 (jianshu.com)

无聊

是那一趟红红火火的地铁耶!!! (xiaohongshu.com)
年终周六福在地铁发礼品。

一台为家里干了近8年的买菜车 – 原创分享(新) – Chiphell – 分享与交流用户体验

国内AI绘画著作权第一案➡️判决已出_哔哩哔哩_bilibili

domain 的自言自语 2311

云原生

滴滴弹性云基于 K8S 的调度实践 (qq.com)

滴滴11.27 P0级故障 (qq.com)

设计面向微服务的应用程序 – .NET | Microsoft Learn

网络

Using NGINX as a DoT or DoH Gateway – NGINX

privacy-protection-tools/anti-AD: 致力于成为中文区命中率最高的广告过滤列表,实现精确的广告屏蔽和隐私保护。anti-AD现已支持AdGuardHome,dnsmasq, Surge,Pi-Hole,smartdns等网络组件。完全兼容常见的广告过滤工具所支持的各种广告过滤列表格式 (github.com)

在家也要玩BGP 之 Mikrotik Fan Boy版 | 主题帖 – 梨园 (liyuans.com)

惨不忍睹的Wi-Fi FEM赛道 (qq.com)

Linux

Filesystem Hierarchy Standard – Wikipedia

安全

微信PC客户端存在@全体逻辑错误 (qq.com)

好玩的

[氵]可安装PCIe卡的1L小主机 v6 (qq.com)

Workspace Storage Cleanup – Visual Studio Marketplace