一些chroot的小经验  [draft]

gsettings自动设置 软件依赖 使用dpkg-repack和dpkg-deb 要将多个已安装的软件包打包成一个单独的包,可以使用 dpkg-repack 工具,这样可以在离线环境中轻松部署这些包。以下是具体步骤: 1. 安装 dpkg-repack 首先,确保在系统中安装了 dpkg-repack 工具: sh复制代码sudo apt-get update sudo apt-get install dpkg-repack 2. 重新打包已安装的软件包 假设你已经在系统上安装了一些软件包,比如 htop 和 vim。你可以使用 dpkg-repack 将它们重新打包成 .deb 文件: sh 复制代码 dpkg-repack htop vim 这样会生成两个 .deb 文件,htop.deb 和 vim.deb。 3. 使用 dpkg-deb 打包多个包 接下来,你可以使用 dpkg-deb 工具将这些 .deb 文件打包成一个压缩包,以便于离线传输和安装。 3.1 创建打包目录 创建一个目录来存放这些 .deb 文件: sh复制代码mkdir my_packages mv htop_*.deb my_packages/ mv vim_*.deb my_packages/ 3.2 创建 DEBIAN 目录和控制文件 创建 DEBIAN 目录和控制文件来描述这个新的包: sh 复制代码 mkdir -p my_packages/DEBIAN 创建一个控制文件 my_packages/DEBIAN/control,内容如下:...

在局域网多台设备上执行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 [[ $?...

定制你自己的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....

在树莓派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....

一些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/lejianwen/rustdesk-server 更多的实现,可以去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,下面是一个完整的配置文件示例: 新版貌似会读取登录用户的目录下的,老的版本是修改root用户目录下的文件 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 = 'rustdesk....

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

Nom指南中文版

原文https://tfpk.github.io/nominomicon/introduction.html,使用Google进行机翻 nominomicon 欢迎阅读这本关于Nom的书;使用 Nom 解析器发挥巨大作用的指南。本指南将向您介绍使用 Nom 的理论和实践。 本指南仅假设您: 想学习Nom, 已经熟悉 Rust。 Nom 是一个解析器组合器库。换句话说,它为您提供了定义以下内容的工具: “解析器”(接受输入并返回输出的函数),以及 “组合器”(采用解析器并将它们组合在一起的函数!)。 通过将解析器与组合器相结合,您可以从简单的解析器构建复杂的解析器。这些复杂的解析器足以理解 HTML、mkv 或 Python! 在我们出发之前,列出一些注意事项很重要: 本指南适用于 Nom7。 Nom 发生了重大变化,因此如果您正在搜索文档或 StackOverflow 答案,您可能会找到较旧的文档。一些常见的表明它是旧版本的指标是: 2021 年 8 月 21 日之前的文档 named! 宏的使用 使用 CompleteStr 或 CompleteByteArray 。 Nom 可以解析(几乎)任何东西;但本指南几乎完全专注于将完整的 &str 解析为事物。 第一章:Nom 方式 首先,我们需要了解 nom 思考解析的方式。正如简介中所讨论的,nom 让我们构建简单的解析器,然后组合它们(使用“组合器”)。 让我们讨论一下“解析器”实际上是做什么的。解析器接受输入并返回结果,其中: Ok 表示解析器成功找到了它要查找的内容;或者 Err 表示解析器找不到它要查找的内容。 如果解析器成功,它将返回一个元组。元组的第一个字段将包含解析器未处理的所有内容。第二个将包含解析器处理的所有内容。这个想法是解析器可以愉快地解析输入的第一部分,而无法解析整个内容。 如果解析器失败,则可能会返回多个错误。然而,为了简单起见,在接下来的章节中,我们将不对这些进行探讨。 ┌─► Ok( │ what the parser didn't touch, │ what matched the regex │ ) ┌─────────┐ │ my input───►│my parser├──►either──┤ └─────────┘ └─► Err(....

在你的Rust程序中使用Deref和DerefMut trait

Deref Deref 是一种 Rust 编译器宏,用于实现 Deref trait。Deref trait 允许将自定义类型转换为引用,从而使其能够用于任何需要引用的地方。 Deref 宏通常用于以下场景: 新类型模式: 当您定义一个新类型时,deref 宏可以使其能够像引用一样使用。例如,您可以创建一个 Box 类型,该类型将值存储在堆上,并实现 Deref trait 以便可以使用 * 运算符访问值。 链式访问: deref 宏可以用于创建链式访问语法。例如,您可以创建一个 Vec<Box<T>> 类型,其中 T 是任何可实现 Deref trait 的类型。这允许您使用 * 运算符在向量中迭代并访问每个值。 泛型代码: deref 宏可以用于编写泛型代码,该代码可以与任何可实现 Deref trait 的类型一起使用。例如,您可以创建一个函数,该函数接受任何可实现 Deref trait 的类型并返回其值。 deref宏在 Rust 中扮演着重要的角色,它允许你自定义类型在特定情况下表现得像引用一样。这带来了许多便利,例如: 简化访问底层数据: 无需手动解引用,直接访问结构体内部数据。 使用运算符重载: 使自定义类型支持 * 和 [] 等运算符。 自动解引用: 在需要引用的地方,自动解引用自定义类型。 实用例子 1. 自定义智能指针 use std::ops::Deref; struct MyBox<T>(T); impl<T> Deref for MyBox<T> { type Target = T; fn deref(&self) -> &Self::Target { &self....

一些Rust的机器学习资料

代码示例 ONNX web interface to YOLOv8 object detection neural network implemented on Rust. 仓库地址 Client/server face detection from your webcam with tokio, axum, tract-onnx and the lightweight ultraface network. 仓库地址 Segment anything inference using Rust llm https://github.com/jondot/awesome-rust-llm https://github.com/gabotechs/MusicGPT 其他 https://github.com/rustai-solutions 文章 图书

一些rust clap库的笔记

小试牛刀 clap是rust下面的一款命令行解析的库,下面是一些使用的笔记。 在Cargo.toml中添加下面的依赖 [dependencies] clap = {version = "4",features = ["derive"]} 对应feature的作用如下: 默认特性 std: Not Currently Used. Placeholder for supporting no_std environments in a backwards compatible manner. color: Turns on colored error messages. help: Auto-generate help output usage: Auto-generate usage error-context: Include contextual information for errors (which arg failed, etc) suggestions: Turns on the Did you mean '--myoption'? feature for when users make typos. 可选特性 deprecated: Guided experience to prepare for next breaking release (at different stages of development, this may become default) derive: Enables the custom derive (i....