Arch Linux 常用软件

本文部分内容基于manjaro,另外如果喜欢苹果界面,可以试下pearos。理论上基于Arch的发行版都可以使用本文进行安装。如果您安装好了manajro但是又不想重装系统,可以试下这个脚本来将Manjaro自动转换为Arch,。 Arch 安装后必装的软件 通过archinstall 安装以后,是没图形界面的。需要安装下面的一些软件和配置 安装时,声音后端的选择: PulseAudio,历史悠久、最为常用; PipeWire,新生代,采用全新架构,整合多种音频后端(PulseAudio、ALSA和JACK),提供低延迟的音频体验 连接无线网 iwctl # 进入交互式命令行 device list # 列出无线网卡设备名,比如无线网卡看到叫 wlan0 station wlan0 scan # 扫描网络 station wlan0 get-networks # 列出所有 wifi 网络 station wlan0 connect wifi-name # 进行连接,注意这里无法输入中文。回车后输入密码即可 exit # 连接成功后退出 启用网络 systemctl enable dhcpcd systemctl enable wpa_supplicant systemctl enable NetworkManager 蓝牙 sudo systemctl enable --now bluetooth 如果没这个服务,可能需要通过 paru -S bluetooth进行安装。 如果需要启用蓝牙音频支持,请安装 paru -S pulseaudio-bluetooth 蓝牙高级管理工具 paru -S blueman 蓝牙协议支持与管理paru -S bluez bluez-utils blueman 微码 pacman -S intel-ucode # Intel pacman -S amd-ucode # AMD 打印机 paru -S cups ghostscript gsfont 然后启动服务...

February 23, 2022 · 25 min · czyt

go-kratos使用备忘

需要特别注意的一些建议 API路由覆盖的问题 比如有两个接口 A get /v1/user/{user_id}和 B get /v1/user/profile如果A定义在B之前,那么B可能会被A覆盖路由。需要将A放到B之前。 JWT使用的建议 摘自极客时间课程《高并发系统实战课》 通讯过程必须使用 HTTPS 协议,这样才可以降低被拦截的可能。 要注意限制 token 的更换次数,并定期刷新 token,比如用户的 access_token 每天只能更换 50 次,超过了就要求用户重新登陆,同时 token 每隔 15 分钟更换一次。这样可以降低 token 被盗取后给用户带来的影响。 Web 用户的 token 保存在 cookie 中时,建议加上 httponly、SameSite=Strict 限制,以防止 cookie 被一些特殊脚本偷走。 自定义接口返回内容 正常的响应序列化逻辑通过Response Encoder实现。 错误的序列化逻辑通过ErrorEncoder实现。 注意:自定义Encoder后,可能会遇到零值字段被忽略的情况,可以参考这个issue。具体的解决办法是 proto定义返回内容,然后将生成的类型在encoder中使用。 简单代码大致如下: proto定义 import "google/protobuf/any.proto"; // BaseResponse is the base response message BaseResponse{ int32 code = 1 [json_name = "code"]; google.protobuf.Any data = 2 [json_name = "data"]; } go代码...

August 12, 2022 · 32 min · czyt

在rust中使用duckdb的一些笔记

基本使用 添加cargo包 在cargo.toml中添加 [dependencies] duckdb = {version = "1"} 示例代码 use duckdb::{params, Connection, Result}; use duckdb::arrow::record_batch::RecordBatch; use duckdb::arrow::util::pretty::print_batches; #[derive(Debug)] struct Person { id: i32, name: String, data: Option<Vec<u8>>, } fn main() -> Result<()> { let conn = Connection::open_in_memory()?; conn.execute_batch( r"CREATE SEQUENCE seq; CREATE TABLE person ( id INTEGER PRIMARY KEY DEFAULT NEXTVAL('seq'), name TEXT NOT NULL, data BLOB ); ")?; let me = Person { id: 0, name: "Steven".to_string(), data: None, }; conn....

July 12, 2024 · 2 min · czyt

跟AI学习Rust的Atomic

QA 如何理解rust的atomic,常见操作有哪些 Rust中的原子类型(atomic types)是一种用于并发编程的工具,它们提供了对共享内存的安全访问机制。以下是对Rust原子类型的理解和常见操作: 理解Rust的atomic: 原子操作是不可分割的操作,它们在多线程环境中能够保证数据的一致性。 Rust的原子类型位于std::sync::atomic模块中。 原子类型可以在多个线程间安全地共享,无需使用互斥锁。 它们通常用于实现无锁数据结构和同步原语。 常见的原子类型操作: 加载(load): let value = atomic.load(Ordering::SeqCst); 存储(store): atomic.store(new_value, Ordering::SeqCst); 比较并交换(compare_and_swap): let result = atomic.compare_and_swap(expected, new, Ordering::SeqCst); 获取并增加(fetch_add): let previous = atomic.fetch_add(1, Ordering::SeqCst); 获取并减少(fetch_sub): let previous = atomic.fetch_sub(1, Ordering::SeqCst); 获取并按位或(fetch_or): let previous = atomic.fetch_or(0b0001, Ordering::SeqCst); 获取并按位与(fetch_and): let previous = atomic.fetch_and(0b1110, Ordering::SeqCst); 获取并按位异或(fetch_xor): let previous = atomic.fetch_xor(0b1111, Ordering::SeqCst); 这些操作都需要指定内存顺序(memory ordering),如SeqCst(顺序一致性)、Relaxed(松散)等,以控制操作的同步级别。 需要注意的是,虽然原子操作提供了线程安全的访问,但它们的使用可能会影响性能。在实际应用中,应根据具体需求选择合适的同步机制。 Rust的atomic常见内存顺序有哪些,它们各自的应用场景有哪些 Rust中的内存顺序(Memory Ordering)是一个重要的概念,它定义了原子操作如何与其他内存操作交互。在std::sync::atomic::Ordering枚举中,Rust提供了以下几种内存顺序选项: Ordering::Relaxed Ordering::Release Ordering::Acquire Ordering::AcqRel Ordering::SeqCst 这些选项的主要区别如下: Ordering::Relaxed(松散顺序) 最宽松的内存顺序 只保证原子操作本身的原子性 不提供任何同步或顺序保证 性能最好,但最难推理...

July 9, 2024 · 1 min · czyt

GIT 别名的 10 个级别【机翻】

第一部分:初级到中级概念 原文 https://www.eficode.com/blog/10-levels-of-git-aliases-beginner-to-intermediate-concepts 您是否知道 Git 可以通过多种方式根据您的需求进行定制? 在 Git 中创建别名是一项强大的功能,它允许您为更长的 Git 命令(以及更多命令)定义“快捷方式”。对于某些人来说,它只是一个让命令行 Git 使用变得可行的工具,但我将向您展示 Git 别名是如此强大,它们可以帮助使命令行成为使用 Git 的首选且最有效的方式。 创建 Git 别名的主要动机可能是以下一项或多项: 优化:为常用的 Git 命令创建快捷方式。 定制:让 Git 按照您想要的方式运行或支持团队商定的习惯。 记忆:易于记忆的复杂操作快捷键。 在我的博客系列的第 1 部分中,我将带您从非常简单的基础知识开始,介绍只需键入较长命令的 Git 别名,一直到甚至许多经验丰富的 Git 老手从未使用过的更高级功能。 第 2 部分将从这里继续,介绍更高级的概念,并尝试真正“外面”使用 Git 别名,包括一些彻头彻尾疯狂的示例,然后再讨论解决相同需求的替代方案。 学习和理解这些技术,无论是用于从别人那里窃取的别名还是自己冒险突破界限,都将使您成为更高效、更强大的 Git 用户,并有望让您使用 Git 的日常生活变得更加愉快。在此过程中,您可能还会学到一些提示和技巧,并探索您甚至不知道的 Git 角落。 什么是 Git 别名,我们如何设置它们? Git 别名是 Git 子命令的替代,就像 Bash 别名是其他 Bash 命令或脚本的替代一样。 Git 只是允许您定义自己的 Git 命令来执行您想要的操作,并且可以与内置命令无缝地使用。 别名是在 Git 配置层次结构中定义的,但由于我们通常希望它们在我们计算机上的任何地方都可以工作,因此全局配置是它们的自然家园。 您可以通过直接编辑全局配置文件或使用git config命令来添加别名。 要创建您的第一个简单别名,只需尝试: $ git config --global alias....

June 25, 2024 · 9 min · czyt

在局域网多台设备上执行ssh脚本

需要的软件包 需要安装sshpass和nmap 代码示例 run_on_lan_machines.sh #!/usr/bin/env bash USERNAME="czyt" PASSWORD="upwd" SUDO_PASSWORD="supwd" SCRIPT="install_test.sh" REMOTE_SCRIPT_PATH="/tmp/$SCRIPT" IP_RANGE="172.168.1.0/24" # 扫描在线主机 echo "Scanning for hosts with open SSH ports..." nmap -p 22 $IP_RANGE --open -oG scan_result.txt # 提取在线主机IP地址 grep "/open/tcp//ssh/" scan_result.txt | awk '{print $2}' > ip_list.txt # 检查是否有找到的IP地址 if [[ ! -s ip_list.txt ]]; then echo "No hosts with open SSH ports found." exit 1 fi # 逐个IP执行脚本 while IFS= read -r ip; do echo "Uploading and executing script on $ip" # 上传脚本到远程主机 sshpass -p "$PASSWORD" scp -o StrictHostKeyChecking=no "$SCRIPT" "$USERNAME@$ip:$REMOTE_SCRIPT_PATH" if [[ $?...

June 21, 2024 · 1 min · czyt

定制你自己的cockpit

什么是Cockpit Cockpit,官网https://cockpit-project.org是一个基于web的服务器管理界面,可以通过浏览器访问。它提供了一个统一的管理界面,用于管理和监控Linux服务器。以下是Cockpit的一些主要特点: 易用性 提供直观的图形化界面,无需命令行操作 支持多种Linux发行版,如Red Hat、CentOS、Fedora、Debian、Ubuntu等 可以通过浏览器远程访问,无需安装客户端软件 功能特性 系统监控:实时查看CPU、内存、磁盘、网络等系统资源的使用情况 服务管理:启动、停止、重启系统服务 存储管理:管理磁盘分区、LVM、RAID等存储设备 网络配置:配置网卡、防火墙、虚拟网络等网络设置 日志查看:查看系统日志和审计日志 用户管理:添加、删除、修改系统用户和组 软件包管理:安装、更新、删除软件包 安全性 基于角色的访问控制(RBAC),可以为不同用户设置不同的权限 支持SSL/TLS加密,保护数据传输安全 可以与LDAP、Kerberos等认证系统集成 总的来说,Cockpit是一个功能强大、易用的Linux服务器管理工具,可以大大提高管理员的工作效率。它适用于各种规模的Linux服务器,是Linux系统管理的一个不错的选择。 安装 cockpit在主流操作系统都一键安装的包。请参考https://cockpit-project.org/running.html的Installation & Setup部分 自定义你的cockpit 修改登陆界面标题 修改 /etc/cockpit/cockpit.conf [WebService] LoginTitle=gophers land 更多参数,请参考 https://cockpit-project.org/guide/latest/cockpit.conf.5.html 编写一个rustdesk id viewer页面 创建目录结构 mkdir -p /usr/share/cockpit/rustdesk cd /usr/share/cockpit/rustdesk cockpit支持从下面两个位置获取配置 ~/.local/share/cockpit 在您的主目录中。它用于用户特定的包和您正在开发的包。您可以即时编辑这些内容并刷新浏览器以查看更改。 /usr/share/cockpit 和 /usr/share/local/cockpit是可供系统所有用户使用的已安装软件包的位置。更改此路径中的文件需要管理员(“root”)权限。在 Cockpit 运行时,不应更改这些内容。 因为涉及一些js库,我想复用原来的,所以我这里使用的是第二个位置。 可以通过cockpit-bridge --packages 查看已经安装的包: apps Applications /usr/share/cockpit/apps base1 /usr/share/cockpit/base1 metrics /usr/share/cockpit/metrics network Networking /usr/share/cockpit/networkmanager rustdesk RustDesk ID /usr/share/cockpit/rustdesk shell /usr/share/cockpit/shell static /usr/share/cockpit/static storage Storage /usr/share/cockpit/storaged system Overview, Services, Logs, Terminal /usr/share/cockpit/systemd updates Software updates /usr/share/cockpit/packagekit users Accounts /usr/share/cockpit/users 创建文件 manifest....

June 9, 2024 · 2 min · czyt

在树莓派3b上搭建GitHub Linux arm64 runner

最近需要在GitHub Action上自动构建一些软件,但是Github 不提供Arm64的runner,自能自建。 github 官方准备在2024年底开始为开源项目提供arm的runner 树莓派设置 Arch系统 安装基本软件 安装下面的这些软件,不同的构建可能有所区别: sudo pacman -S curl zip unzip tar cmake ninja docker Github Action 依赖于docker,所以我们需要安装好docker sudo pacman -S docker 然后将当前用户添加到docker的组 sudo usermod -aG docker $USER 查看和确认: grep docker /etc/group Ubuntu系统 安装基本软件 docker 安装前的配置 # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker....

May 22, 2024 · 2 min · czyt

一些RustDesk部署的笔记

自建 Server 搭建中转服务器 参考官方 https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/ 一些有用的链接: https://github.com/infiniteremote/installer/blob/main/install.sh 搭建api server api server是高级版的功能,但是我们可以通过自建api server实现设备id同步等部分操作。推荐使用: https://github.com/kingmo888/rustdesk-api-server https://github.com/sctg-development/sctgdesk-server 这个是带web console的用户名和密码分别是admin和Hello,world! https://github.com/lantongxue/rustdesk-api-server https://github.com/v5star/rustdesk-api 更多的实现,可以去Github 搜一搜 https://github.getafreenode.com/topics/rustdesk-api-server 客户端自定义部署 基于Github Action 参考官方 https://rustdesk.com/docs/en/dev/build/all/ 对于arm版本的自动化构建,Github Action暂时不提供arm64的runner 基于配置文件和命令行 RustDesk有用的命令行参数 --password 可用于设置永久密码。 --get-id 可用于检索 ID。 --set-id 可用于设置ID,请注意ID应以字母开头。 --silent-install 可用于在 Windows 上静默安装 RustDesk。 RustDesk 配置文件 RustDesk的配置文件,windows为"%appdata%\RustDesk\config\RustDesk2.toml"linux则为~/.config/rustdesk/RustDesk2.toml,下面是一个完整的配置文件示例: rendezvous_server = 'rustdesk.xxxx.tech:21116' nat_type = 1 serial = 0 [options] # 对应安全选项->权限中的完全访问 access-mode = 'full' # 对应安全选项->安全->允许IP直接访问 direct-server = 'Y' # 对应安全选项->安全->自动关闭不活跃的会话 allow-auto-disconnect = 'Y' stop-service = 'Y' key = 'KEY' relay-server = 'IPADDRESS' api-server = 'https://IPADDRESS' custom-rendezvous-server = 'rustdesk....

May 17, 2024 · 1 min · czyt

Windows ollama一些有用的批处理脚本

模型设置 模型路径设置 @echo off echo set models storage path to current Dir %~dp0models SETX OLLAMA_MODELS %~dp0models echo setup done timeout 5 这个脚本会将模型的存储路径放在批处理相同目录的models目录下 启动 一键启动ollam和对应模型 @echo off echo start ollama... start %~dp0ollama.exe serve echo boot model start %~dp0ollama.exe run phi3

May 9, 2024 · 1 min · czyt