星外之神 Blog

天下难事,必作于易;天下大事,必作于细

Loong Arch Linux维护中可能用到Bootstrap构建方法

面向新人的Bootstrap构建基础指引

前言 有时候某些软件的构建往往会依赖自身进行编译,这时候就需要使用Bootstrap构建方法。 本教程仅简单列举一些新人相对容易理解的、常见的Bootstrap构建方法,对于复杂的问题,可能需要额外的具体研究。 注意事项 首次通过“不干净”的方法生成的软件包请勿上传,请将这一文件添加到本地仓库,再使用官方的构建文件(或者基于官方构建文件应用了我们补丁集中的补丁的),进行正式的打包,然...

配置SSH Agent Forwarding

使用SSH Agent Forwarding在远程服务器上安全访问仓库

前言 在远程服务器上访问仓库时,我们通常会使用SSH密钥来进行认证。但是,如果我们直接将私钥拷贝到远程服务器上,就会存在私钥泄露的风险。SSH Agent Forwarding是一种解决这一问题的方法,它可以让我们在远程服务器上使用本地的SSH密钥,而不需要将私钥拷贝到远程服务器上。 配置SSH Agent Forwarding 在ssh访问时启用SSH Agent Forwardin...

利用本地仓库实现有依赖关系的软件包的顺序构建

Loong Arch Linux下要求同步升级的软件包的构建方法

前言 在软件包的构建过程中,有时候会遇到一些软件包之间有依赖关系的情况,对构建顺序存在要求,并且要求在后一个软件包构建时,能够获取前一个软件包并安装。这一过程固然可以通过手动向makechrootpkg传递-I参数来实现,但当重构大量包时较为麻烦。 本文介绍了一种利用本地仓库实现有依赖关系的软件包的顺序构建的方法。这样的方法尤其适用于需要先在本地一并打包/重构完并要求一次性上传的软件包。...

龙芯Arch Linux内核维护方法

Loong Arch Linux的linux kernel维护

前言 Linux的kernel config非常复杂,Loong Arch Linux作为Arch Linux的龙芯移植,其kernel config既需要能够支持龙芯的硬件及相关驱动,又需要能够及时从Arch Linux的kernel config中同步新的配置。 本文介绍了笔者近期探索出的Loong Arch Linux的kernel config维护方法。 历程 在此前,笔者曾...

在Wayland下解决Electron应用的Fcitx5输入法问题

解决运行在Xwayland下依赖旧式GTK的应用的Fcitx5输入法问题

前言 笔者曾经在博客修复WPS Office的Fcitx5输入法问题中介绍了如何解决WPS Office这样的跑在Xwayland下的闭源旧式Qt5程序在Wayland环境中的Fcitx5输入法问题,如果按照官方推荐的方式,仅启用Wayland输入协议,并添加XMODIFIERS=@im=fcitx这一个环境变量,这样的程序将完全无法使用输入法。按照那篇博客的方法,我们可以通过给这些程序单...

龙芯Arch Linux移植技巧

参与移植工作的注意事项及FAQ

需要重新构建的软件 soname变更 多数时候,如果遇到上游软件包的soname变更,必须要重新构建链接到这些库的软件包。 当开发者使用devtools/devtools-loong64构建软件包时(例如extra-loong64-build),会自动运行checkpkg来检查soname变化,例如,我们将llvm(pkgbase)从16.0.6-2升级到18.1.8-4,checkp...

龙芯的Arch Linux移植工作流程

Loong Arch Linux软件包开发者维护工具设计

本文将介绍目前LoongArch的Arch Linux移植的最小维护架构(不包括CI工具)和参与北京大学Linux俱乐部的Arch Linux龙芯移植工作的可能方式。 前言 Loong Arch Linux是Arch Linux的龙芯移植版本,目前龙芯Linux社区较普遍地认为,为龙芯Linux生态圈维护一个滚动更新的Arch Linux发行版具有重要意义,目前北京大学Linux俱乐部已...

在x86设备上跨架构构建龙芯的Arch Linux软件包

devtools-loong64的应用

前言 Arch Linux主要使用devtools来构建软件包。为了方便拥有x86_64设备的开发者构建LoongArch的软件包,笔者制作了一个devtools-loong64的AUR软件包,可以在龙芯或者x86_64设备上构建LoongArch的软件包。 事实上不只是x86_64设备,任何能够运行Arch Linux及其移植的设备都可以使用devtools-loong64构建L...

解析Android的动态照片

Andorid动态照片的处理与生成

前言 Android的动态照片是一种逐渐普及的媒体文件格式,它可以将包含音频的视频与静态图片结合在一起,形成一个动态的照片。这种照片已经在多种机型上得到了支持,例如Google的Pixel系列、三星的Galaxy系列,以及小米等厂商的大部分机型。本文将介绍Android动态照片的格式、处理与生成方法。 动态照片的格式 Android动态照片本质上是在静态图片的末尾直接附加了一个视频文件...

Arch Linux字体配置

Arch Linux中文默认字体行为变更后的配置

前言 在以前,Arch Linux的软件包noto-fonts-cjk存在打包阶段的配置,安装该软件包后默认的中文字体即是Noto Sans CJK,适合一般的显示,笔者也一直没有对字体进行配置。由于将字体配置写死在打包阶段并不合理,因此目前的这一软件包已经移除了相关配置文件,在笔者的环境下,默认的字体变成了衬线字体Noto Serif CJK,这并不符合系统UI字体的一般惯例,也不利于阅...

通用共享的内核模块和initramfs

可跨设备启动与跨发行版内核混搭架构

前言 笔者的移动固态硬盘上使用了一个Btrfs分区通过多子卷来存放多个Linux发行版。为了在未关闭安全启动的设备上也能正常使用所有发行版,笔者选择使用Ubuntu的GRUB来引导所有的发行版,由于Ubuntu的引导程序有可信签名,可以在未关闭安全启动的设备上正常引导。但是,在开启了安全启动的设备上,使用具有可信签名的GRUB是不能引导未签名的内核的,因此,在这种情况下,笔者需要在所有发行...

systemd-nspawn容器网络配置

Arch Linux宿主下的非Arch Linux发行版容器网络配置

前言 systemd-nspawn是systemd提供的一个轻量容器管理工具,可以用来启动容器。在Arch Linux宿主下,使用systemd-nspawn启动一个Arch Linux容器是直接可以使用网络的,但是如果启动一个非Arch Linux发行版systemd-nspawn容器,可能会遇到网络配置问题。 配置 对于非Arch Linux发行版的systemd-nspawn容器...

修复libvirt虚拟机网络连接问题

一个防火墙设置与dnsmasq导致的错误

问题 不知道哪次升级以后,笔者的libvirt虚拟机突然无法连接到外网。在检查了libvirt的网络设置、虚拟机的网络设置、dnsmasq的设置等等之后,发现问题出在了防火墙上。 解决 防火墙规则 首先,查看ufw的状态: sudo ufw status 如果ufw是启用的,可以看到类似如下的输出: Status: active To ...

使用完整文件系统代替传统压缩格式(展示版)

将Squashfs用作日常归档压缩格式

使用完整文件系统代替传统压缩格式 前言 Squashfs是一种只读文件系统,广泛应用于嵌入式、发行版镜像等场景,也可用于一般的备份或归档使用。相较于常见的zip、7z、rar、tar.gz等压缩格式,Squashfs的主要优势是它是一个完整的文件系统,在Linux下可以直接挂载使用,而不需要解压缩。这也意味着,Squashfs也可以作为独立的镜像直接传递给虚拟机等使用,而不需要更多的...

解码含有Unicode的zsh历史记录

Zsh历史记录编码解析

前言 虽然笔者自去年年初就已经从zsh切换到了fish,但是在Windows平台下,由于fish的路径兼容性问题,笔者在需要使用类Unix Shell时仍然使用zsh。 相比与fish开箱即用的功能,zsh支持的很多特征往往都需要手动配置,不过如果配置得当,zsh的功能也是非常强大的。 然而,有一个问题困扰笔者很久,那就是zsh的历史记录编码问题:如果使用一般的文本编辑器打开~/.zs...

binfmt_misc flags与QEMU用户模式下的跨架构构建环境

Acrh Linux龙架构移植踩坑

前言 对于部分架构,出于设备较不常见或者设备性能较低等原因,很多时候开发者并不会选择在该架构下进行打包与分发,而是选择使用QEMU等模拟器进行跨架构构建。 QEMU主要有两种模式,一种是全系统模拟,另一种是用户模式模拟。全系统模拟是指QEMU模拟整个系统,包括CPU、内存、外设等,而用户模式模拟则是只模拟用户空间,不模拟内核空间。笔者在之前的测试中,发现对龙架构使用QEMU全系统模拟时,...

varallel开发踩坑

一个用于并行执行命令的Vala命令行工具

前言 笔者曾经在批量并行的图片转码一文中介绍了parallel这个工具,它可以将多个命令行工具的输出进行并行处理,从而充分利用电脑的性能;也可方便地实现参数组的输入,代替较复杂的shell循环等代码(还可以通过多组参数代替嵌套循环等操作)。然而,parallel是一个perl程序,包含多达15000行代码,不支持Windows平台,也较难以维护。为了解决这些问题,笔者决定用Vala语言开发...

修复WPS Office的Fcitx5输入法问题

在KDE Wayland的Fcitx5建议设置下修复WPS Office的输入法问题

前言 以前,Fcitx5一般会要求用户在/etc/environment中添加有关环境变量的配置,例如: XMODIFIERS=@im=fcitx GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx SDL_IM_MODULE=fcitx GLFW_IM_MODULE=ibus 然而,在Wayland合成器中,如果存在这些环境变量,可能会遇到Fcitx5闪烁...

使用Btrfs Balance调整分配过多的元数据空间

减小Btrfs元数据空间分配大小的方法

前言 笔者只有单一设备,并没有组RAID,一直以来,笔者本以为自己用不上Btrfs的数据平衡功能。 然而,笔者最近却发现,笔者使用的Btrfs文件系统Metadata不知为什么,分配空间达到了96 GiB(加上默认的DUP就是192 GiB),而实际却仅使用了不到4 GiB(DUP后也不到7 GiB)。分配给Metadata的空间是无法给Data使用的,因此文件系统实际可用空间浪费严重。...

体验Bcachefs

一个代码简洁、功能强大的CoW文件系统

前言 Bcachefs是一个功能强大的CoW文件系统,支持快照、压缩、加密、RAID、缓存、多设备、多磁盘等现代文件系统的特性,同时,作者Kent Overstreet声称也具有较好的稳定性,称其为: “The COW filesystem for Linux that won’t eat your data”. 笔者早在Bcachefs合并到主线之前就已经开始尝试Bcache...

KDE Plasma的Wayland现状

在KDE Plasma 5.27中使用Wayland

前言 近几年来,Wayland作为X11的替代方案,已经逐渐成为Linux桌面环境的主流选择。RedHat、SUSE、Canonical等主流Linux操作系统厂商目前都一致力挺Wayland,而X11的维护力量也在逐渐减弱。GNOME桌面环境率先默认启用Wayland,而像Fedora这样比较激进的发行版甚至在积极准备移除X11。 然而,目前大多数主流桌面环境仍然默认使用X11。KDE...

使用完整文件系统代替传统压缩格式

将Squashfs用作日常归档压缩格式

前言 笔者曾经在Linux下的备份方式小结一文中总结过Linux下的备份方式,其中就提到过使用Squashfs进行数据存档与备份的方法。 事实上,Squashfs的适用场景不仅仅局限于备份,它还可以用于日常归档压缩,甚至可以用于替代传统的压缩格式。Squashfs的支持也非常广泛,几乎所有的Linux发行版都支持Squashfs,而Windows和macOS也都有Squashfs的解压工...

批量并行的图片转码

快速将大量图片转码为所需的格式

前言 相机、手机等设备拍摄的照片通常输出为JPEG格式,而直出的JPEG图片不仅压缩率低,而且还为了保存图片上的无用噪点而浪费了大量的存储空间。笔者经常需要将这些JPEG图片转码为WebP格式,以节省存储空间。 笔者以前通常使用bash、zsh或fish的for循环,调用各编解码器的命令行工具来实现批量转码,但是WebP等图片往往无法多线程编码,在转码时只有一个核实际参与计算,导致电脑性...

免提权验证挂载本地存储设备

非USB设备挂载设置

去年就打算写这篇博客来记录一下,现在才想起来,简单写一下吧( 前言 主流Linux发行版一般可以使用udisks2来方便地挂载存储设备。然而,默认情况下,udisks2挂载USB设备不需要手动输入密码,而挂载非USB设备需要手动输入密码,这样的行为不仅不方便,还会影响KDE等桌面环境的自动挂载功能。 笔者在这里介绍一种方法,可以让udisks2挂载非USB设备时不需要手动输入密...

使用WebP编码超高像素图像

将2亿像素的图像编码为WebP格式

前言 WebP是一种由Google开发的图像编码格式,同时支持无损压缩和有损压缩,其在压缩率与视觉质量上均优于JPEG或PNG,同时还支持透明度与动画。 而相比较新、压缩率更高的AVIF格式,WebP目前的支持要广泛得多:Google Chrome、Mozilla Firefox、Microsoft Edge、Opera、Safari、Android、iOS、各搭载了FFmpeg的Lin...

免拆机免root权限查看小米手机的闪存编号

硬件信息查询方法

前言 本文主要讨论如何在不拆机、不root的情况下查看小米手机的闪存编号 小米手机的闪存编号在手机的设置等自带应用中无法查看。目前,网上的多数查看方法都需要root权限或者拆机,笔者在这里总结一下如何在不拆机、不root的情况下查看小米手机的闪存编号。 步骤 笔者的设备为Redmi Note 13 Pro+,搭载MIUI 14与Android 13。 小米的MIUI系统自带...

2023年的刷机

为小米8 SE刷入LineageOS 20

刷机的时代其实早已过去,但对于一些老旧的设备来说,刷机是令其焕发新生的一种方式。 前言 笔者最近重新从iPhone切换到搭载Android系统的小米Redmi Note 13 Pro+,原来作为Android系统备用机(以防iOS不支持一些功能)的小米8 SE完全失去了作用,小米8 SE发布于2018年,距今已有5年,MIUI的更新也已经停止在MIUI 12.5。为了找回当年刷机...

使用Stellarium观月

LCPU中秋游园会活动

前言 Stellarium是一款开源的天文模拟软件,目前基于Qt6与OpenGL技术,采用了与Linux内核相同的GNU GPLv2许可证分发,可以模拟天空中的恒星、行星、卫星、星系等天体的运行,还可以模拟日食、月食、流星雨等天文现象。Stellarium的模拟效果非常逼真,广受天文爱好者赞誉。 北京大学Linux俱乐部将在中秋游园会暨社团招新活动中使用Stellarium演示虚拟天空,...

Linux下的快速重启

systemd的特殊重启方式

前言 Linux下有很多可以用于重启的命令,例如reboot、shutdown -r和sudo systemctl reboot等。然而,前面列出的这些命令都是执行完整重启的命令,会关闭所有的进程,然后从UEFI引导程序重新启动系统,重启耗时较长。 本文简单介绍在Linux下快速重启的方案。 kexec 首先是较为知名的kexec。kexec是一个用于加载内核镜像的命令,可以在绕过U...

玻璃转化

Wikipedia条目推荐

本文采用CC-BY-SA-4.0协议发布,来自我扩充、编辑、重写的Wikipedia条目玻璃转化,由于个人水平限制,本条目难免会有知识谬误以及描述不清等情况,欢迎读者在维基条目中编辑修改或对本网站在GitHub上的源代码提供Pull request,也欢迎在评论区多多指教。 玻璃转化(glass transition)又称玻璃化转变,是玻璃-液体转变(glass-liquid tr...