🗒️Arch

type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
 

📝 主旨内容

Arch安装

  1. 下载
notion image
可使用清华源下载
  1. 安装指南
开机自检 —> Grub引导项 —> 进入控制台
notion image
  1. 默认的控制台键盘映射US
  1. 验证启动模式
  1. 连接互联网 配置IP
补充无线接入
  1. 配置路由
    7. 更新系统时钟
    systemd-timesyncd默认启用,一旦建立互联网连接,时间将自动同步
    1. 磁盘分区
    1. 安装固件包
    使用pacstrap(8)脚本为常用硬件 安装基础包、Linux内核和固件:
    1. 更新挂载点并写入fatab文件中
    1. 修改时区
    1. 安装vim包便于修改文件
    1. 本地化
    1. 创建主机名文件
    1. 初始化文件
    1. 设置根密码
    1. 重启
    键入exit或按退出 chroot 环境Ctrl+d
    可选择手动卸载所有分区:这允许注意到任何“繁忙”分区,并使用fuser(1)umount -R /mnt查找原因。
    最后,通过键入重新启动机器reboot:任何仍然挂载的分区将由systemd自动卸载。请记住移除安装介质,然后使用 root 帐户登录到新系统。
    1. 会出现无法引导情况,使用以下方法
    1. 小技巧修接口名称
    1. 配置IP
    1. 系统报错会彩色显示使用于排查
    1. 修改添加源
    1. 新建用户final
    1. 安装包补充
    1. 开机启动
    1. 安装输入法
    1. 添加本地解析文件hosts
     

    arch 安装后初始化

    vim编辑器初始化
     

    安装zsh

    安装 oh my zsh
    ohmyzsh
    ohmyzshUpdated Feb 23, 2023
    修改zsh主题
    插件

    解决zsh在git仓库目录慢的问题

    所有用户使用 zsh 和 oh-my-zsh 配置

    arch linux pacman 包管理

    arch 安全篇

    1. 选择密码安全
    1. 使用 pam_pwquality 强制使用强密码
    1. cpu微码
    1. 查看硬件漏洞
    1. 禁用超线程 SMT
    注意:这主要是管理程序从中受益的东西。在普通系统上启用它几乎没有安全优势
    1. 硬化的malloc
    1. 文件加密
    1. 安全加固
    1. 要考虑的潜在文件系统挂载
    1. 文件访问权限
    1. 定期备份重要文件
    1. 从睡眠中唤醒后将 SSD 状态设置为“冻结”
    当从睡眠中醒来时,SSD 很可能会失去其“冻结”状态,使其容易受到ATA SECURE ERASE命令的攻击,如/Memory cell clearing中所述。
    为了防止这个问题,可以在从睡眠中醒来后运行一个脚本
    1. 日常使用不要使用root账号
    1. 在登录尝试失败后实施延迟
    添加以下行以/etc/pam.d/system-login在失败的登录尝试之间添加至少 4 秒的延迟:
    1. 三次登录尝试失败后锁定用户
    1. 限制进程数
    在有许多用户或不受信任的用户的系统上,限制每个进程一次可以运行的数量非常重要,因此可以防止fork 炸弹和其他拒绝服务攻击。/etc/security/limits.conf确定每个用户或组可以打开多少个进程,默认情况下为空(有用的注释除外)。将以下行添加到此文件将限制所有用户的活动进程为 100 个,除非他们使用该prlimit命令显式将会话的最大值提高到 200。这些值可以根据用户应该运行的适当进程数或您正在管理的机器的硬件进行更改
    1. 避免root用户使用Wayland而不是Xorg
    1. 使用sudo 而不是su
    1. 限制root登录
    1. 强制访问控制
    强制访问控制(MAC) 是一种安全策略,它与Arch 和大多数 Linux 发行版中默认使用的自主访问控制(DAC) 有很大不同。MAC 本质上意味着程序可以执行的以任何方式影响系统的每个操作都会根据安全规则集进行检查。与 DAC 方法不同,此规则集不能由用户修改。使用几乎任何强制访问控制系统都将显着提高计算机的安全性,尽管它的实施方式有所不同
    如 路径名MAC 标签MAC 访问控制列表ACL
    1. 内核加固
    linux-hardened包使用基本的内核加固补丁集和比linux包更注重安全的编译时配置选项。可以进行自定义构建以选择安全性和性能之间的折衷方案,而不是倾向于安全性的默认值
    linux-hardened软件包为用户空间进程提供了地址空间布局随机化的改进实现。paxtest命令可用于获取所提供熵的估计值 
    1. 限制对 proc 文件系统中内核指针的访问
    设置 kernel.kptr_restrict为 2 将隐藏内核符号地址,/proc/kallsyms而不管权限如何
    为 0 时, 未作任何处理, 直接输出, 这样对所有用户都没有限制. 为 1 时, 中断上下文则不允许输出, 否则则校验了用户的权限. 为 2 时, 将指针直接置 NULL, 这样所有用户都只能看到全 0.
    1. BPF硬化
    BPF 是一种用于在运行时在内核中动态加载和执行字节码的系统。它用于许多 Linux 内核子系统,例如网络(例如 XDP、tc)、跟踪(例如 kprobes、uprobes、tracepoints)和安全(例如 seccomp)。它还可用于高级网络安全、性能分析和动态跟踪。
    BPF最初是Berkeley Packet Filter的首字母缩写,因为最初经典的BPF是用于BSD的抓包工具。这最终演变成扩展 BPF (eBPF),不久后又重命名为 BPF(不是首字母缩写词)。BPF 不应与 iptables 或 netfilter 等包过滤工具混淆,尽管 BPF 可用于实现包过滤工具。
    BPF 代码可以使用即时 (JIT) 编译器进行解释或编译。Arch 内核的构建CONFIG_BPF_JIT_ALWAYS_ON禁用了 BPF 解释器并强制所有 BPF 使用 JIT 编译。这使得攻击者更难使用 BPF 来升级利用 SPECTRE 式漏洞的攻击。有关详细信息,请参阅引入 CONFIG_BPF_JIT_ALWAYS_ON 的内核补丁
    内核包括一个针对 JIT 编译的 BPF 的强化功能,它可以以牺牲性能和跟踪和调试许多 BPF 程序的能力为代价来减轻某些类型的 JIT 喷射攻击。它可以通过设置net.core.bpf_jit_harden1(启用非特权代码的强化)或2(启用所有代码的强化)来启用。
    有关详细信息,请参阅内核文档net.core.bpf_*中的设置。
    1. ptrace范围
    1. 隐藏进程信息 可能会导致某些应用程序出现问题
    1. 限制模块加载
    1. 禁用 kexec
    1. 内核锁定模式
    1. 容器化
    1. 虚拟化
    1. 防火墙
    1. 开放端口 ss -lpntu
    1. 内核参数
    1. ssh
    1. 域名系统
    1. 代理
    1. TLS证书
    1. 锁定BIOS
    1. 引导装载程序 GRUB
    1. 安全启动
    1. 可信平台模块TPM
    1. 可移动闪存驱动器上的引导分区
    1. 自动注销
    1. 防止流氓 USB 设备
    1. 易失性数据收集 不需要使用的计算机可关闭
    1. 安装包时验证包签名
    1. 定期升级系统
    1. 重建包 去除不需要的功能和特性

    arch 性能篇

    注意: hdparm仅表示硬盘的纯读取速度,不是有效的基准。然而,高于 40MB/s(空闲时)的值在普通系统上是可以接受的
    使用工具查看系统监控
    查看usb接口
    查看pci设备接口
    SSD硬盘比机械硬盘快 目前NVME接口较快
    调整文件系统
    众所周知,noatime选项可以提高文件系统的性能。
     
    xfs文件系统同步间隔
    XFS 有一个专用的sysctl变量,用于设置回写间隔,默认值为 3000。
    警告:虽然较大的值可能会提高性能,但它们也会增加因断电导致的数据丢失的严重性
    虚拟内存
    vm.dirty_ratio如果 RAM 为 1 GB(因此 10% 为 100 MB),则设置为 RAM 的 10% 是一个合理的值。但是如果机器有更多的 RAM,比如说 16 GB(10% 是 1.6 GB),这个百分比可能不成比例,因为它变成了旋转磁盘上几秒钟的写回。在这种情况下更合理的值可能是3(16 GB 的 3% 大约是 491 MB)
    设置vm.dirty_background_ratio5可能适合较小的内存值,但同样,请考虑并相应地调整特定系统上的 RAM 量
    VFS缓存
    降低虚拟文件系统(VFS) 缓存参数值可能会提高系统响应能力:
    故障排除
    小周期系统冻结
    将脏字节设置为足够小的值(例如 4M):
    调度算法
    提高吞吐量的一种方法是线性化访问:通过按逻辑地址对等待请求进行排序并将最接近的请求分组。从历史上看,这是第一个名为elevator的 Linux I/O 调度程序。
    内核的 I/O 调度器
    虽然一些早期的算法现在已经退役,但官方 Linux 内核支持许多 I/O 调度程序,这些调度程序可以分为两类:
    单队列调度器是遗留调度器
    注意:从 Linux 5.0 开始,单队列调度程序已从内核中删除
     
    IO调度算法
    完全公平队列 (CFQ)通过根据提交请求的进程的优先级分配时间片和队列中允许的请求数量来解决该问题。它支持允许为特定进程集合保留一定数量的 I/O 的cgroup 。它对共享和云托管特别有用:为一些 IOPS 付费的用户希望在需要时获得他们的份额。此外,它在同步 I/O 结束时空闲等待其他附近的操作,从预期调度程序接管此功能并带来一些增强。预期和电梯_调度程序已从 Linux 内核中退役,取而代之的是下面介绍的更高级的替代方案。
    预算公平队列 (BFQ)基于CFQ 代码并带来了一些增强功能。它不会为每个进程分配固定时间片的磁盘,而是为进程分配以扇区数衡量的“预算”并使用试探法。它是一个相对复杂的调度程序,它可能更适合旋转驱动器和慢速 SSD,因为它的高每次操作开销,特别是如果与慢速 CPU 相关联,会降低快速设备的速度。BFQ 在个人系统上的目标是,对于交互式任务,存储设备几乎可以像空闲时一样响应。在其默认配置中,它专注于提供最低延迟而不是实现最大吞吐量,这有时可以大大加快硬盘驱动器上应用程序的启动。
    Kyber是一个最近的调度器,其灵感来自于用于网络路由的主动队列管理技术。该实现基于作为限制请求机制的“令牌”。分配请求需要排队令牌,这用于防止请求饥饿。还需要调度令牌,它限制给定设备上特定优先级的操作。最后,定义了一个目标读取延迟,调度程序会自我调整以达到这个延迟目标。该算法的实现相对简单,对于快速设备来说被认为是高效的
     
    小结算法
    mq-deadline 一个很好的多面手,CPU 开销相当低
    CFQ 应用场景共享和去托管
    BFQ 专注提供最低延迟,占用CPU资源较高,不适合大吞吐量的场景
    KYBER 发送的请求操作数量有严格限制到队列。理论上这限制了等待请求的时间被派遣,因此应该提供快速完成时间对于高优先级的请求

    更改 I/O 调度程序

    注意:调度程序的最佳选择取决于设备和工作负载的确切性质。此外,以 MB/s 为单位的吞吐量并不是衡量性能的唯一指标:截止日期或公平性会降低整体吞吐量,但可能会提高系统响应能力。基准测试可能有助于指示每个 I/O 调度程序的性能
    tmpfs是驻留在内存和/或交换分区中的临时文件系统。将目录挂载为 tmpfs 是加速访问其文件或确保其内容在重启时自动清除的有效方法
    通常使用tmpfs(5)的一些目录是/tmp/var/lock/var/run。不要在/var/tmp上使用它,因为该目录用于存放在重新启动后保留的临时文件
    注意:实际内存/交换消耗取决于使用量,因为 tmpfs 分区在实际需要之前不会消耗任何内存。
    关于tmpfs故障排除
    /tmp 由于设置了粘性位而尝试读取符号链接时,预计会出现权限被拒绝的错误。
    这种行为可以通过/proc/sys/fs/protected_symlinks或简单地通过 sysctl:来控制sysctl -w fs.protected_symlinks=0
    警告:更改此行为可能会导致安全问题!
    可以通过卸载内核模块并将其列入黑名单来避免这种情况acpi_cpufreq

    调整默认调度程序 (CFS) 以提高响应能力

    主线 Linux 内核中的默认 CPU 调度程序是CFS
    上游默认设置针对高吞吐量进行了调整,这使得桌面应用程序在 CPU 负载过重时无响应。
    cfs-zen-tweaks AUR包包含一个脚本,用于设置 CFS 以使用与linux-zen内核相同的设置。要在启动时运行脚本,请启用/启动 set-cfs-tweaks.service

    替代 CPU 调度程序

    MuQSS — 多队列跳表调度器。随Con Kolivas-ck开发的补丁集一起提供。
    PDS — 基于优先级和截止日期的 Skiplist 多队列调度程序,专注于桌面响应能力。
    BMQ — BMQ“BitMap Queue”调度程序是根据现有的 PDS 开发经验创建的,并受到 Google 在 Zircon 中发现的调度程序的启发,他们的 Fuchsia OS 计划运行在该内核上。随 CachyOS 的一组补丁一起提供。
    项目 C — 将 BMQ 重构到项目 C 的跨项目,并基于项目 C 代码库重新创建 PDS。所以它是两个项目的合并,随后将 PDS 更新为项目 C。推荐作为更新的开发。
    CacULE — CacULE CPU 调度程序是一个基于交互评分机制的 CFS 补丁集。交互性得分的灵感来自于 ULE 调度器(FreeBSD 调度器)。此补丁的目标是增强系统响应能力/延迟。
    TT — 任务类型 (TT) 调度程序的目标是根据任务的行为检测任务类型,并根据它们的类型控制调度。
    BORE — BORE 调度器在调度交互式任务时着重于牺牲一些公平性以降低延迟,它构建在 CFS 之上并且仅针对 vruntime 代码更新进行调整,因此与其他非官方 CPU 调度器相比,整体变化非常小。
    调整进程的优先级
    另请参见nice(1)renice(1)
    cgroups 可对资源进行分配及限制
    等级制度
    可以使用systemctl statussystemd-cgls命令查看当前的 cgroup 层次结构。
    查找进程的cgroup cat /proc/self/cgroup
    systemd-cgtop命令可用于查看资源使用情况

    CPU限制

    Cpulimit是一个限制特定进程的 CPU 使用百分比的程序。安装cpulimit后,您可以使用计算机拥有的 CPU 内核数的 0 到 100 倍的比例来限制进程 PID 的 CPU 使用率。例如,对于八个 CPU 内核,百分比范围将为 0 到 800。用法:
    irqbalance的目的是在多处理器系统上跨处理器分配硬件中断以提高性能。它可以通过提供的irqbalance.service. 关于多个处理器机器建议开启此服务

    关闭 CPU 漏洞利用缓解措施

    警告:不要在不考虑它打开的漏洞的情况下应用此设置。有关详细信息,请参阅
    关闭 CPU 漏洞缓解措施可能会提高性能。使用下面的内核参数来禁用它们:
    kernel.org给出了它切换的所有开关的解释。您可以使用spectre-meltdown -checker AUR或lscpu(1)(来自util-linux)进行漏洞检查。
    注意:使用第 10 代及更高版本的 Intel CPU 或 AMD Ryzen 1 及更高版本时,禁用缓解措施带来的性能提升最多仅为 5%,而不是前几代 CPU 的最高 25%。参见2021年初的总评Rocket Lake测试和Alder Lake测试
     
    zram 或 zswap
    zswap 作为压缩 RAM 缓存运行,既不需要(也不允许)大量的用户空间配置。有关两者之间差异的更多详细信息, 请参见zswap 。
    示例:要设置一个容量为 32GiB 且优先级高于正常的 lz4 压缩 zram 设备(仅针对当前会话):
    要再次禁用它,请重新启动或运行
     

    使用显卡的 RAM

    在不太可能的情况下,您只有很少的 RAM 而有多余的视频 RAM,您可以使用后者作为交换。请参阅交换视频 RAM
     
    网络

    增加接收队列的大小。

    接收到的帧从网卡上的环形缓冲区中取出后,会存放在这个队列中。
    增加高速卡的此值可能有助于防止丢失数据包:
    注意:在 SIP 路由器等实时应用中,此选项需要高速 CPU,否则队列中的数据将过时。

    增加最大连接数

    内核接受的连接数上限(默认 128):
    注意:内核 5.4 将默认值提高到 4096。[1]
    警告:增加此值可能只会提高高负载服务器的性能,并可能导致处理速度变慢(例如单线程阻塞服务器)或工作线程/进程数量不足[2]
     
    内核引导
     

    pacman 升级软件包提示 “failed to commit transaction (invalid or corrupted package)“

    🤗 总结归纳

    总结文章的内容

    📎 参考文章

    • 一些引用
    • 引用文章
     
    💡
    有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
    KaliWindows
    Loading...
    目录