一加 3T 刷 LineageOS 18.1记

现在用的手机是一加8 Pro,旧手机一加3T放在公司作为备用机和必要时候的远程打卡机,最近在在使用scrcpy连接手机发现音频的传输需要系统在Android 10以上,然而这个手机早已失去了官方的支持,最终最新版系统停留在安卓9.0,幸好这手机在国外很受欢迎,有 LineageOS 的官方支持,最新的系统也有基于Android 11 的 LineageOS 18.1,今天就来记录一下安装过程。 本文不是教程文章,只是自己的折腾记录,如果你要按照本文的方式来操作,请确保你了解必要的手机刷机的知识如 adb、fastboot、解锁 bootloader 等。 1. 解锁 Bootloader, 刷入第三方 recovery 手机刷机第一步,由于我的一加3T很早以前就已经解锁BL并刷入了第三方TWRP recovery,这里就写一写步骤就好了 1.1 安装 oem usb 驱动 Mac和Linux系统无须安装usb驱动,但在Windows上则必须安装,否则 adb 和fastboot无法连接设备。 由于设备古老,在中文互联网上已经很难找到官方驱动了,还好在外网有专门的网站下载,虽然标的是官方,但具体是否还待验证,用起来是没有什么问题。 下载之后是 setup.exe 文件,点击安装之后用手机连接Windows,设备管理器里没有Android设备的感叹号就好了。 1.2 解锁 Bootloader 安装 adb 工具 scoop install adb 打开USB调试模式,连接手机并允许usb调试。 adb reboot bootloader 或者关机状态下按住 ”音量+“ + “电源” 键进入 fastboot 模式。 fastboot devices 键入一下命令解锁 Bootloader fastboot oem unlock 没有报错就解锁成功了。 1.3 刷入 Recovery 下载 LineageOS 的 recovery 镜像 进入 fastboot 模式...

2023-11-30 · 2 min · 229 words · Linkzz

Oracle Linux 8 升级内核

甲骨文的免费Arm主机开始申请的时候没注意选了 Oracle Linux 8 系统而没选自己更熟悉的Ubuntu ,导致各种折腾的时候发现资料有点少,今天折腾一个云安卓 redroid 系统的时候发现需要编译一些内核模块,而默认的 5.4 内核一直编译失败,于是想到升级内核试试,一路搜索找不到很符合的文章,于是自己摸索了一下,记录于此。 1. 查看已经安装的内核包 ➜ client yum list installed | grep kernel kernel-headers.aarch64 4.18.0-477.13.1.el8_8 @ol8_baseos_latest kernel-tools.aarch64 4.18.0-477.13.1.el8_8 @ol8_baseos_latest kernel-tools-libs.aarch64 4.18.0-477.13.1.el8_8 @ol8_baseos_latest kernel-uek.aarch64 5.4.17-2136.307.3.1.el8uek @ol8_baseos_latest kernel-uek.aarch64 5.4.17-2136.309.4.el8uek @ol8_baseos_latest kernel-uek.aarch64 5.4.17-2136.320.7.1.el8uek @ol8_baseos_latest kernel-uek-devel.aarch64 5.4.17-2136.307.3.1.el8uek @ol8_baseos_latest kernel-uek-devel.aarch64 5.4.17-2136.309.4.el8uek @ol8_baseos_latest kernel-uek-devel.aarch64 5.4.17-2136.320.7.1.el8uek @ol8_baseos_latest 可以看到我们的内核都是baseos仓库安装的内核,该仓库内核版本比较老,查看 官网仓库 列表,内核仓库有了更新的包。 内核版本为 5.15.0 2. 安装内核 先看下已有的 yum 库 ➜ sudo yum repolist repo id repo name docker-ce-nightly Docker CE Nightly - aarch64 docker-ce-stable Docker CE Stable - aarch64 docker-ce-test Docker CE Test - aarch64 epel Extra Packages for Enterprise Linux 8 - aarch64 nginx-stable nginx stable repo ol8_MySQL80 MySQL 8....

2023-11-24 · 2 min · 321 words · Linkzz

pve安装Android-x86并配置显卡加速

先看下效果: 可以看到运行很流畅,由于gif压缩小了尺寸,Aida64的信息界面看不清,显卡是virtGL,支持OpenGL,3D加速由宿主机Intel UHD 630提供,最后的游戏演示可看出很流程。 1. 前言 1.1 为什么需要Android 我日常使用的是一个直通了RTX2060s(矿卡)的Win11虚拟机,众所周知,在虚拟机里使用模拟器性能巨差,我试过夜神模拟器,启动慢不说,游戏电竞帧数,连抖音都卡顿明显。所以一个能在Hypevision中运行的安卓系统就是一个很好的选择。 1.2 选择哪一种 现阶段能作为选择的有3种方案: ChromeOS: 首当其冲的就是基于Chromium OS的ChromeOS及其他发行版如国内的FydeOS,这系统号称老电影福音,具有完整的桌面环境并兼容Android应用,可惜对于显卡的兼容性不是很好,而虚拟机能使用3D加速的显卡,除了显卡直通外还有一种就是最近一两年积极维护的VirtualGL,所以ChromeOS在VirtualGL下运行是否可行还得画个问号,后面再折腾。 容器化方案 -Waydroid or Redroid: 第二种方案就是借助容器化cgroups,namespace 等内核技术的容器化方案,这种方案启动快速,可使用宿主机硬件资源,也能使用宿主机GPU进行3D加速, 但是对于Nvidia的显卡兼容性很差。运用pve创建一个lxc容器来运行docker redroid容器也能运行,后续折腾一下这个方案。 Android-x86: Android-x86 在AOSP的基础上增加x86平台的支持,可通过native-bridge转义arm指令从而运行arm应用,同样称为老电脑福音,GPU兼容性较好,兼容VirtualGL ,今天我们就来在pve中尝试一下这个系统有什么妙处。 2. 安装Android-x86 2.1 镜像下载 打开Android-x86 官网,官网提供了2个下载分流,按需选择,我这里选择SourceForge 共有一下版本: 最新版本Release 9.0 基于Android 9.0 Pie,也是下载次数最多的版本,我们选择此版本。 选择 64 位ISO版本 2.2 创建虚拟机 创建虚拟机 选择刚才下载的镜像 选择 q35 机型和 OVMF 安装,显卡选择VirGL GPU VirGL GPU 需要宿主机有有效的render节点设备,也就是说你的显卡需要正确的驱动了才能运行,通过ls /dev/dri 查看是否有 render* 字样。 存储给到32G即可,如果需要安装大型游戏可以给多一点。 安卓比较依赖CPU资源,如果运行的是arm应用更需要CPU的转译,所以这里给到 10 vCPU 。 内存给到 8G Android-x86做了虚拟机的兼容,所以这里网卡选择效能最高的 VirtIO 。 点击完成之后选择“硬件” -> “添加音频设备”, 后端驱动器选择 “无”...

2023-11-23 · 2 min · 300 words · Linkzz

pve环境10代i5-10400核显直通

1. 背景 3年前,怀着不折腾不舒服斯基的心情,我按当时最新的硬件(大概)组了一台All in One主机,这这台主机拥有当时最为先进的14nm+++工艺的CPU i7-10400和性能遥遥领先的UHD630核显,我当时的想法也很普通,就是集家庭透明网关、NAS、Linux开发机、Windows娱乐机、以及Linux Docker服务器于一身的超级家庭数据中心,下面看下我当时所选的硬件: 类别 项目 价格 CPU i5-10400 – 主板 华擎B-460M钢铁传奇 – 内存 酷兽8G * 4 = 32G – SSD 三星980 1TB – SSD 爱国者 128GB – HDD 希捷酷狼4TB * 2 – 机箱 先马趣造 – 散热 九州风神 – 当时我选配的时候正值挖矿潮,显卡是没想法的,只当一个服务器用,这其中Windows娱乐机的需求一开始没有显卡加速,使用起来确实无法胜任我的需求,我希望的是这台机器能24小时开机,能浏览网页,能流程播放h265视频。但很显然只依靠CPU模拟的显卡是无法完成以上工作的,于是就想到了直通核显到Windows客户机,然而当时针对10代的直通教程真是少之又少,爬了很多帖子之后只能做到直通安装Ubuntu并拥有hdmi输出,Windows则不是hdmi黑屏就是显卡驱动Code 43,后来矿难入了一张2060s之后直通用来打游戏,核显就只是用来为jellyfin提供硬件解码加速,直通核显这事就一直搁浅了。而今折腾之心渐起,而今itel也早已经更新到了14代酷睿,igpu性能也较10代大幅提升了,早先的10代直通恐怕也很多大佬已经研究透彻了,而且我平时用的一个Windows虚拟机主要使用微软的RDP远程桌面,没有GPU加速下看视频内容实在是难以忍受,于是开始了新的爬帖之旅。果然,10代直通的中文内容也多了起来,也有很多人做成了直通并显示hdmi接口内容,于是就有了今天的文章。 2. BIOS准备 这里参考pve官方Wiki内容,需要BIOS设置好直通所需的技术: 2.1 启用VT-d 启用CPU虚拟化,启用vt-d(直通必备) 2.2 启用CSM 启用CSM并将所有启动项设置为"仅传统" 待会创建的虚拟机将使用legacy启动模式直通,若不开启DP接口和hdmi接口将无法输出画面,而且如果你是先用pve的默认显示安装完Windows再安装核显驱动,然后再添加核显的pci设备,启动之后核显还是无法驱动的,会报错“代码43”,除非你有一个正确的igpu bios文件,有了这个文件的话核显可正常驱动,但是看不到pve的SeaBIOS界面,启动Windows核显驱动正常加载之后可以输出Windows画面,本文最后会介绍提取vbios的方法。 2.3 启用多图形适配器 有些主板BIOS设置的主GPU是PCIE通道的gpu且多图形适配器功能是关闭的,也就是说你的主板PCIE X16的插槽插上显卡之后核显会被屏蔽,需要开启多图形适配器功能(我的主板是这个设置项)并且将主图形适配器设置为“板载”。 3. 宿主机(pve)设置 我的pve环境如下: ➜ ~ pveversion --verbose proxmox-ve: 7.3-1 (running kernel: 5....

2023-11-17 · 3 min · 581 words · Linkzz

一次防火墙纠错,让我更了解防火墙机制

1. 起因 工作中我一直使用wireguard搭建公司 -> 家的桥梁,用于随时随地访问家中内网的各种服务,如gogs代码仓库、nextcloud同步工作文件,抑或是远程连接windows虚拟机用来摸鱼,然而尽管拥有公网ip,家里和公司之间只有区区10ms的网络时延,却还是因为运营商对UDPl的QOS而影响远程服务的传输体验。于是我就搭建了一套phantun服务用来将UDP流量转换为TCP流量而避过运营商的QOS,建好之后确实体验提升明显,远程的moonlight能稳定跑满30M上传带宽,然而当时搭建的时候的iptables规则未保存,今天的一次重启让我的phantun死活连不上,于是就有了今天的文章。 2. 排查 2.1 报错日志 由于是客户端重启之后连不上的,排除服务端错误的情况,从客户端查起,查看phantun报错: sudo systemctl status phantun.service Nov 8 10:22:11 new-business-dev-001 phantun_client[5517]: ERROR client > Unable to connect to remote {my-home-ip}:25379 Nov 8 10:22:14 new-business-dev-001 phantun_client[5517]: ERROR client > Unable to connect to remote {my-home-ip}:25379 客户端一直报错连不上服务端,25379端口是phantun_server的监听端口,之前连接是好的,不可能有问题。 2.2 抓包分析 遇到网络相关的问题,抓包分析是最为直观的解决方案,我们查看往来服务端的流量信息: sudo tcpdump -i any host {my-home-ip} 10:28:48.652090 IP 192.168.200.2.61048 > {my-home-ip}.25379: Flags [S], seq 0, win 65535, options [nop,wscale 14], length 0 10:28:49.653239 IP 192....

2023-11-07 · 2 min · 412 words · Linkzz

基于AutoHotKey的windows平台Vim输入法切换方案

众所周知,在中文环境下使用 vim 一直会有中英文输入法切换的烦恼,社区也有一些方案解决,如 AutoHotKey 脚本 im-select 插件等,今天提供一种基于屏幕颜色的方案来实现按下 ESC 键切换输 入法的方案,下面是效果展示: Window Spy 我目前安装的是AutoHotKey v2.0.2版本,使用其提供的 Window Spy 功能,我们可以方便的查看各个窗口的信息,鼠标的信息等,今天我们要实现的版本思路就是基于判断屏幕指定坐标处的十六进制颜色来判断当前是处于什么输入法环境下。 如上图,因为截图无法截取鼠标位置,我的鼠标置于图中“中”字的下部分,切换到英文的时候为大写字母"A",屏幕相同的位置是没有“中”字下部分的颜色的,而 Windows 系统输入法状态指示的图标相对来说是比较固定的,故以此来判断当前输入法的环境是可行的,看官自己设置的时候使用 window spy 来获取这个坐标即可。 AutoHotKey 脚本 既然有了方案就可以着手实现了,我们使用 V2 版本的语法来完成,并将键盘上不常用的 CapsLock 键映射为 ESC 键,下面是完整的脚本: #Requires AutoHotkey v2.0 ; 获取坐标的模式,相对于屏幕 CoordMode "Pixel", "Screen" CoordMode "Mouse", "Screen" ; 应用vim模式的窗口组 GroupAdd "VimMode", "ahk_exe WindowsTerminal.exe" GroupAdd "VimMode", "ahk_exe Code.exe" GroupAdd "VimMode", "ahk_exe Obsidian.exe" ; 退出vim模式 VimEsc() { Send "{Esc}" if (PixelGetColor(1985, 1422) = "0x464646") Send "{Shift}" } #HotIf WinActive("ahk_group VimMode") ESC::VimEsc() CapsLock::VimEsc() #HotIf 以上代码中将需要生效的应用添加到 VimMode 组,如果有更多需要应用 Vim 模式的应用,通过 window spy 获取其 ahk_exe,通过GroupAdd "VimMode", "ahk_exe {name}" 将其加入组中即可,十六进制颜色和坐标也根据需要修改为你自己的,Send 后面的内容也要修改你输入法的中英文切换的快捷键,在这里我的是 Shift 键,之后运行脚本即可实现“按下 Esc 或者CapsLock 自动切换为英文输入法” 的功能。

2023-09-05 · 1 min · 97 words · Linkzz

【NanoPi R2S旁路网关系列】2. 自定义域名、DDNS、KMS

前言 上一章我们实现了 wireguard 在任意地方安全的访问家庭网络,这章我们将实现自定义域名和 DDNS 动态更新公网 IP 的需求。 自定义域名 内网自定义域名有什么好处: 防止 IP 变更之后的访问难题 想象一下这样一个场景,一开始我内网部署了一个 jellyfin 服务,ip 为192.168.5.132,但某天我的网段变了,我得用192.168.1.132这个 IP 去访问,这时好不容易浏览器记住的密码和所有缓存信息都失效,还有有记错 IP 需要重新查看的烦恼。 有记忆特征 IPv4 是 4 段数字,即使家里网段固定只需要记忆一段的数字,那也是 0-254 共 255 个数字,数字的记忆对人类来说是不如字符来的方便的,jellyfin和132请问你是更喜欢记忆哪一个,虽然自建服务也可以通过搭建dashbord服务如heimdall,但是这样打开网页的效率着实有点低,你需要打开 heimdall 页面,再去点击相应的链接,同样还要维护服务的变更。 签发证书实现 https 有了自定义域名,我只需要修改 nginx 配置,将反代的 IP 变更即可解决以上 2 个问题,同时通过自签名的泛域名证书,我可以通过 https 访问自建服务,https 可以开启一些自建服务的一些功能。 Dnsmasq 配置 openwrt 的 dns 服务基于 dnsmasq,自定义一个内网域名解析我们只需要修改配置即可: vi /etc/config/dhcp config dnsmasq配置下添加 list address 选项 config dnsmasq option domainneeded '1' option localise_queries '1' option rebind_protection '1' option rebind_localhost '1' option local '/lan/' option domain 'lan' option expandhosts '1' option authoritative '1' option readethers '1' option leasefile '/tmp/dhcp....

2023-08-10 · 2 min · 309 words · Linkzz

使用Oracle对象存储作为博客图床(二)

前言 上一章我们已经做到了使用 picgo 上传图片并获得一个可以公开访问的链接,这章介绍如何使用 CloudFlare 代理图片的访问并加上自定义域名,以及录屏转 gif 的方法。 CloudFlare 代理访问 创建一个 Cloudflare Workers,代码如下: export default { async fetch(request, env) { const url = new URL(request.url); const path = url.pathname.replace("/blog/", ""); const originUrl = `${env.OBJECT_STORAGE_BASE_URL}${path}${url.search}`; const res = await fetch(originUrl); return new Response(res.body); }, }; 以上代码功能是将访问的 url 去掉存储桶名称,通过 workers 获取内容并返回给访问者,充当了一个代理的角色,这样我们可以使用自定义的域名来替代甲骨文对象存储的访问域名,以后换了图床供应商也方便切换,因为博客里的链接是不用改的。 部署完之后需要配置环境变量OBJECT_STORAGE_BASE_URL的值为上文的访问地址,一直到/o/处,如: 现在你可以使用 works 提供的域名作为图片前缀访问,也可以自定义域名,该功能只限于你自己的域名是由 CloudFlare 托管解析的才可,如果已经使用 CloudFlare 作为域名解析商,在 works 配置的Custom Domains配置即可,CloudFlare 会自动生成 Https 证书。 配置好之后将picgo的配置文件的urlPrefix改为上面的域名: { "aws-sr3": { "accessKeyID": "{ak}", "secretAccessKey": "{sk}", "bucketName": "blog", "region": "ap-chuncheon-1", "uploadPath": "images/{year}/{month}/{md5}....

2023-08-09 · 1 min · 154 words · Linkzz

【NanoPi R2S旁路网关系列】1. 基础配置、Wireguard

前言 自己现在家中有一台自己组的 All in One 服务器,系统是 PVE,在上面跑了个虚拟机 OpenWRT 承担家里旁路网关的功能,起初用的国内不知道谁编译的版本,后面自己编译了官方 22.05 版本,添加上自己想要的功能一直稳定运行了 2 年,但是 All in One 最大的问题就是宿主机重启,因为最近折腾显卡直通需要不断重启 PVE,这时要是家里领导在打王者掉线了就有的好受了,所以趁着 618(没错 618 到现在才开始折腾)下手了一台 R2S,彻底杜绝家里领导找茬的机会。 需求 基本是目前虚拟机上 OpenWRT 功能的移植: Wireguard 能通过 Wireguard 结合家里的公网 ip 从公司访问家里网络 自定义域名 通过自定义域名和 Nginx 实现域名访问自部署的服务,不用记 ip 和端口,不用维护 dashboard 服务 DDNS 服务 自动更新公网 ip,防止每次拨号之后 Wireguard 失联 KMS 服务 windows 激活 懂的都懂需求 如题,不做展开 R2S 系统安装 下面我们就一步步实现上面的需求,首先是系统的选用,依照官网介绍选择官方自己维护编译的 OpenWRT 发行版,对与 Docker 目前是没有需求的,但为了防止以后有需要的时候还得自己安装,所以我们直接一步到位,选择官方基于 OpenWrt 22.03 构建的带 Docker 的FriendlyWrt 固件 接下来就是烧录固件到 TF 卡,插电开机。 系统配置 插上网线,更改电脑 ip 为192....

2023-08-07 · 4 min · 772 words · Linkzz

使用Oracle对象存储作为博客图床(一)

先看效果: 作为一个专业白嫖党,只使用 Oracle 的 4 个免费鸡怎么能满足呢,拥有 20GB 免费空间的对象存储当然也要利用起来,正好最近又重拾起了鸽了多年的博客,正好作为博客的图床。 前置条件 一个 Oracle Cloud 账号(需要信用卡认证,大陆已经很难申请了) 良好的科学环境 Oracle Object Storage 存储桶准备 进入 Oracle Cloud 对象存储管理界面,创建新的存储桶 默认配置即可,创建完之后编辑可见性,这里可以选择公开或者私有, 公开:所有文件允许读取 私有:可使用预先验证的请求实现部分文件公开(推荐这种方式) 创建预先验证的请求 选择具有前缀的对象,前缀填写images,下文配置 picgo时需要匹配这个前缀,否则会有权限问题,访问类型默认只读即可,到期时间尽量一步到位多配几年。 将 URL 复制保存,这即时存储桶相应前缀目录访问的 BaseURL 上传一个图片试一下能否访问 可以看到由于存储桶的权限设置,使用 URL 路径访问是行不通的 需要替换为刚才创建的预见请求的 URL 前缀 https://objectstorage.ap-chuncheon-1.oraclecloud.com/p/xxx/n/{namespace}/b/blog/o/images/2022-05-23.png 存储桶 Endpoint 甲骨文的对象存储 endpoint 模式为https://{namespace}.compat.objectstorage.{region}.oraclecloud.com/ namespace: 存储桶信息名称空间字段 region: 这个是你甲骨文账号的区域,通常在你的 Oci 的 console 地址里就有体现,如我的春川为ap-chuncheon-1 申请 Oracle 账户 Ak 和 Sk右上角头像,进入“我的概要信息“,”客户密钥“选项”生成密钥“ 同样保存已生成密钥,该密钥为账户的SecretAccessKey AccessKeyID在列表页,同样复制保存 安装配置 Picgo 和 s3 插件 准备工作完成,下面开始配置图床工具。这里有两种选择: 具有 GUI 界面:PicGo Cli 命令行操作:PicGo-Core 上面两种看个人喜好,我比较习惯命令行,所以选择第二种,配置方面都是一样的,区别为是否提供了GUI, 安装 Node 环境 自行按nodejs官网安装...

2023-07-11 · 1 min · 193 words · Linkzz