分类: Linux

  • 代码即操作系统(UpgradeAll 2 开发计划)

    随着我使用的电子产品越来越多,跨度涉及 Linux 桌面/服务器,Android。我发现,备份还原的操作系统配置是有极限的,极限在于它未曾理解,也无法理解数据的意义。

    DNS hosts 与软件数据库缓存,在它眼里看来,都是一样的“文件”。

    过去

    这带来一个想法,就是代码即架构,也就是 Ansible、Terraform 等,但是它们在“代码”,这个概念的理解上,却出了大差错。软件代码,在软件停止运行后,软件的大部分副作用会消失,而那一小部分副作用也可以以测试代码的形式覆盖。

    现状

    操作系统,并不会随着 Ansible 或者 Terraform 停止运行而关机,其副作用,也不会因为我删除了 Ansible 里的一行代码并重新运行就会消失,于是这时候,便产生了所谓的“配置偏移”,这些传统的代码即架构的软件以“幂等性”来“自欺欺人”式的解决了这个问题,确实“幂等性”很重要,它会避免重复配置或者不必要的重复导致的错误,但是并不能解决这个回滚问题。

    然而,大部分操作都是可以回滚的,甚至配置得当,文件删除也是可以回滚的。现代操作系统已经为我们提供了很多回滚工具,git、文件系统快照、甚至最简单的文件回收站。但是,因为从运维角度编码,可复现与回滚,直接萎缩成了一次性快照,也就是 OCI 与 NixOS 之流。

    未来

    我在这里提出一个新的构建系统,也就是从程序员的角度运维。为一切可以回滚的操作添加支持,如果你在配置代码中删除了一个操作,那么在下次运行时将会对那一个特定操作进行自动回滚。

    此外,我也认为安装软件,维护系统这种经验,应该作为群体智慧被编程的方式保留下来,而不是让人们一次又一次的去重复学习简单的劳动。

    运维的未来应当像 NixOS,面向功能,而绝非面向软件与包。

    这个系统应当满足以下特性:

    1. 面对终端的普通用户
    2. 面对目标,也就是面对一些“单元测试”,因为操作系统应当为功能服务,而不是软件这个概念
    3. 可回滚
    4. 单机应用,可以远程运行,但是应当首要支持单机运行
    5. 与现有的运维技术兼容,并尽量使用现有的运维技术进行配置(初版暂定使用 Ansible),我们的世界不需要更多轮子了
    6. 可自动检查一个现有的,已经配置的操作系统,并生成配置代码
    7. 逻辑代码应当灵活,这个项目提出的一部分原因就是希望推进 Gentoo 的发展。(源码的自由是选择的自由,也是保证自由的基石)

    对于 Android

    而这个系统在 Android 上的体现会是 UpgradeAll

    因为我希望 UpgradeAll 可以拥有这些特性:

    1. 从源码编译(你可以随意使用开发者没有合并的分支与功能)
    2. 面对开发者友好(你可以编程你的更新流程)
    3. 面对用户友好(你可以只考虑需要什么功能,而不是寻找应用,这应该让开发者来做,参考 quickenergy)
    4. 促进 Android 应用开放化(Android 应用的封闭性在我看来有很大部分是因为深刻骨髓的二进制分发,tui)
  • exa 仅显示点文件

    exa 是一个 ls 程序的替代品,旨在提供更加友好与多彩的用户界面,其期望与 bat 相似。

    背景

    在简单尝试 exa 后,我决定 alias 替换 ls 来体验一段时间,然后发现 ls -al --ignore="[^.]*" 命令无法被直接替换,因为 exa 没有 ignore 接口。

    测试命令

    在查找文档后,发现 exa 拥有基于 glob 语法的过滤(文档的 Filtering 节)。

    所以仅显示点文件的命令应该是

    exa -la --ignore-glob="[!.]*"

    其中,!意指不包括。

    添加 alias

    最后,我修改后的 rc 文件为(color 只是为了方便之后切换回 ls,exa 默认开启)

    alias ls='exa'
    alias l.='exa -la --ignore-glob="[!.]*"'
    alias ll='ls --color=auto -l'
    alias la='ls --color=auto -la'
  • Pipewire 多设备输出

    今天想和朋友一起听歌,把ta的蓝牙耳机连到电脑上后发现 KDE 界面只能设置一个音频输出端口。想起来上次 Steam Link 的经验,决定使用 Pipewire 实现这个功能。

    参考资料:
    https://xzos.net/steam-for-linux-no-sound-when-streaming/
    https://bbs.archlinux.org/viewtopic.php?pid=1986792#p1986792
    1. 查找音频设备
    $ pw-link -o
    Midi-Bridge:Midi Through:(capture_0) Midi Through Port-0
    v4l2_input.pci-0000_00_14.0-usb-0_6_1.0:out_0
    alsa_output.pci-0000_00_1f.3.analog-stereo:monitor_FL
    alsa_output.pci-0000_00_1f.3.analog-stereo:monitor_FR
    alsa_input.pci-0000_00_1f.3.analog-stereo:capture_FL
    alsa_input.pci-0000_00_1f.3.analog-stereo:capture_FR
    easyeffects_sink:monitor_FL
    easyeffects_sink:monitor_FR
    easyeffects_source:capture_FL
    $ pw-link -o
    Midi-Bridge:Midi Through:(capture_0) Midi Through Port-0
    v4l2_input.pci-0000_00_14.0-usb-0_6_1.0:out_0
    alsa_output.pci-0000_00_1f.3.analog-stereo:monitor_FL
    alsa_output.pci-0000_00_1f.3.analog-stereo:monitor_FR
    alsa_input.pci-0000_00_1f.3.analog-stereo:capture_FL
    alsa_input.pci-0000_00_1f.3.analog-stereo:capture_FR
    easyeffects_sink:monitor_FL
    easyeffects_sink:monitor_FR
    easyeffects_source:capture_FL
    easyeffects_source:capture_FR
    ee_soe_output_level:output_FL
    ee_soe_output_level:output_FR
    ee_soe_spectrum:output_FL
    ee_soe_spectrum:output_FR
    ee_soe_equalizer:output_FL
    ee_soe_equalizer:output_FR
    ee_soe_convolver:output_FL
    ee_soe_convolver:output_FR
    ee_sie_output_level:output_FL
    ee_sie_output_level:output_FR
    ee_sie_spectrum:output_FL
    ee_sie_spectrum:output_FR
    Audacious:output_FL
    Audacious:output_FR
    steam:output_FL
    steam:output_FR
    bluez_output.84_AB_26_A6_8A_6A.a2dp-sink:monitor_FL
    bluez_output.84_AB_26_A6_8A_6A.a2dp-sink:monitor_FReasyeffects_source:capture_FR
    ee_soe_output_level:output_FL
    ee_soe_output_level:output_FR
    ee_soe_spectrum:output_FL
    ee_soe_spectrum:output_FR
    ee_soe_equalizer:output_FL
    ee_soe_equalizer:output_FR
    ee_soe_convolver:output_FL
    ee_soe_convolver:output_FR
    ee_sie_output_level:output_FL
    ee_sie_output_level:output_FR
    ee_sie_spectrum:output_FL
    ee_sie_spectrum:output_FR
    Audacious:output_FL
    Audacious:output_FR
    steam:output_FL
    steam:output_FR
    bluez_output.84_AB_26_A6_8A_6A.a2dp-sink:monitor_FL
    bluez_output.84_AB_26_A6_8A_6A.a2dp-sink:monitor_FR

    确认希望使用的音频设备为 alsa_output.pci-0000_00_1f.3.analog-stereobluez_output.84_AB_26_A6_8A_6A.a2dp-sink

    2. 连接创建虚拟设备

    $ pactl load-module module-null-sink media.class=Audio/Sink sink_name=Simultaneous channel_map=stereo
    536870913  # 模块 ID,不用记

    3. 连接设备

    # 顺序不影响结果
    $ pw-link Simultaneous:monitor_FL bluez_output.84_AB_26_A6_8A_6A.a2dp-sink:playback_FL
    $ pw-link Simultaneous:monitor_FR bluez_output.84_AB_26_A6_8A_6A.a2dp-sink:playback_FR
    $ pw-link Simultaneous:monitor_FL alsa_output.pci-0000_00_1f.3.analog-stereo:playback_FL
    $ pw-link Simultaneous:monitor_FR alsa_output.pci-0000_00_1f.3.analog-stereo:playback_FR

    4. 去 KDE 设置里选择

    KDE 音频设置界面

    5. 卸载模块

    用完后可以卸载模块

    $ pactl unload-module module-null-sink
  • Steam for Linux no sound when streaming

    When I use Steam Link to play my game which is running in my ArchLinux PC, I find steam only catch microphone and ignore the sound output of PC. (Fixed on my ArchLinux PC at 2022-09-15)

    Github Issue: [Remote Play] No sound when streaming #6606
    (更多…)
  • ArchLinux 配置指南

    这是一个导航页面,它记录了我的配置过程,你可以按照页面的顺序配置,也可以只搜寻信息。

    (更多…)
  • 使用 Linux 游玩尼尔机械纪元

    这里以 steam平台上运行的 尼尔机械纪元 为例,硬件平台为 Intel + Nvidia

    一般来说,大部分 Windows 游戏都可以通过 wine 运行。
    (更多…)
  • Pacman 通用配置

    配置文件解释参考:Arch manual pages

    你可以直接复制并替换你的 pacman.conf 文件(注意备份)
    (更多…)
  • LVM 保留数据平滑替换(升级)物理磁盘

    前设背景

    1. 使用 LVM
    2. 需要升级(替换)硬盘,但不希望重装系统或是手动拷贝数据
    (更多…)
  • Docker 安装 WordPress 并快速手动迁移所有数据

    运行环境选择:裸机环境 -> Docker

    主要软件选择:NGINX,MariaDB,phpMyAdmin

    (更多…)
🌍 Language