Arch Linux 指南
I. Install Arch
1. Download Arch Linux ISO
2. U 盘 ventoy 准备
ventory 过程:略
选择 Arch Linux install medium (x86_64, UEFI)
启动安装环境
进入 root@archiso
后,需要设置互联网,推荐使用网线连接
检查网络接口是否已经启用
|
|
- 尖括号内的“UP”,表示接口已经启用,否则使用以下命令:
ip link set enp0s3 up
- 请使用 ping 命令测试网络:
ping www.baidu.com
3. 更新系统时钟
在互联网连接之后,systemd-timesyncd 服务将自动校准系统时间,便于安装软件包时验证签名
|
|
4. 分区设置
|
|
5. 选择软件镜像仓库
手动修改 /etc/pacman.d/mirrorlist
,添加相关镜像
|
|
|
|
6. 安装基础包
|
|
7. chroot -> 设置系统属性
切换系统
|
|
设置时区
|
|
修改 hostname
|
|
设置 locale
|
|
网络管理器,蓝牙
|
|
设置 password
|
|
引导相关
|
|
Create user and usergroup
|
|
桌面程序 - KDE
|
|
II. Software
NetworkManager
|
|
pacman 镜像修改
|
|
常见通用软件
|
|
输入法
|
|
|
|
- gpick: 可以从桌面任何地方取色,并且它还提供一些其它的高级特性
- SpeedCrunch: 一个漂亮,开源,高精度的科学计算器
- Snipaste: 截图工具,如不可用可选用
spectacle
- drawio-desktop: Security-first diagramming for teams
- zeal:离线文档浏览器
trans-shell
基础用法
|
|
Alais
|
|
office
|
|
远程工具 - Remmina
-
$ yay -S remmina freerdp
-
安装
freerdp
插件后,可以走 RDP 协议远程 Win10(Win10 不需要其他任何设置)
Git
配置 git
-
设置
user.name
和user.emal
1 2 3 4 5
$ git config --global user.name "kyden" $ git config --global user.email xxxxxx@gmail.com # Verify $ git config --list
-
生成密钥
1 2
# 要求多次输入密码,可不要输入密码 $ ssh-keygen -t rsa -C 'xxxxxx@gmail.com'
-
GitHub 配置 SSH Keys
- 打开生成的
Key
文件~/.ssh/id_rsa.pub
:cat ~/.ssh/id_rsa.pub
- 复制全部内容,在 Key 中粘贴
- 打开生成的
Git 常用命令
git status
git clone
git pull
git push
git commit -m 'commits'
orgit commit -m 'commits' kyden.go
git add .
orgit kyden.go
git reflog
Git实现从本地添加项目到远程仓库
Steps:
-
GitHub 上创建一个新的远程仓库 -
Create a new repo
->Create repository
-
本地仓库:创建并初始化 -> 添加待上传到远程仓库的项目文件
1
git init
-
远程仓库和本地仓库关联
1
git remote add origin git@github.com:kydance/<repository name>
-
项目文件添加、提交、推送
- 由于远程库是空的,我们第一次
push
master 分支时,加上了-u
参数,Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来 - 在以后的
push
或者pull
时就可以简化命令
1 2 3
git add file $ git commit -m '<commit statements>' file $ git push -u origin master
- 由于远程库是空的,我们第一次
用 SSH 密钥在一台机器上管理多个账户
1. 检查一下我们是否有任何现有的 SSH 密钥
ls -al ~/.ssh
这将列出所有现有的公钥和私钥对,如果 ~/.ssh/id_rsa
是可用的,我们可以重新使用它,否则 ssh-keygen -t rsa
生成一个默认 ~/.ssh/id_rsa
的密钥.
通过以上方法,我们可以得到两个不同的密钥:
|
|
2. 将不同 SSH 密钥添加到相应的 GitHub 账户中
复制公钥 ~/.ssh/id_rsa.pub
的内容,将密钥粘贴在 Settings
-> SSH and GPG keys
-> New SSH key
的方框中即可
3. 在 ssh-agent 上注册新的 SSH 密钥
创建并编辑 SSH 配置文件 ~/.ssh/config
|
|
当你克隆一个仓库或为本地仓库设置 remote origin 时,确保与你使用的主机名记号一致
(@
和 :
之间的字符串应该与我们在 SSH 配置文件中给出的内容相匹配):
|
|
4. 为本地仓库设置 user
GitHub 会根据提交(commit)描述所附的电子邮件 ID 来识别任何提交的作者.
一旦我们克隆/创建了本地的 Git 仓库,确保 Git 配置的 user.name
和 user.email
正是你想要的
Golang
|
|
GOROOT
,设置 Golang 的安装位置GOBIN
,执行go install
后生成可执行文件的目录GOPATH
,工作目录,一般设置到用户目录下
MySQL
很多 Linux 发行版都放弃了对 MySQL 的支持(原因自行 Google)转而支持 mariadb(MySQL的另一个分支),Arch Linux就是其中之一,mariadb 具有和 MySQL 一模一样的操作命令,所以完全不用考虑迁移兼容的问题
-
安装mariadb:
1
$ sudo pacman -Sy mariadb
-
配置 mariadb 命令,创建数据库都在
/var/lib/mysql/
目录下面:1
$ sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
-
开启mariadb 服务:
1
$ systemctl start mariadb
-
初始化密码,期间有让你设置密码的选项,设置你自己的密码就行了,然后根据自己需要 y/n 就可,因为很多后面可以再修改:
1
$ sudo /usr/bin/mysql_secure_installation
-
登录mariadb 和mysql命令是一样的:
1
$ mysql -u root -p
-
设置开机自启动服务:
1
$ systemctl enable mariadb
挂载其他硬盘分区
|
|
<device>
描述要挂载的特定块设备或远程文件系统<dir>
描述挂载目录<type>
文件系统类型<options>
相关的挂载选项<dump>
会被 dump(8) 工具检查。该字段通常设置为 0, 以禁用检查<fsck>
设置引导时文件系统检查的顺序; 对于 root 设备该字段应该设置为 1。对于其它分区该字段应该设置为 2,或设置为 0 以禁用检查
NOTE: TYPE 为
ntfs
时导致启动失败,修改为ntfs3
后成功挂载
Present Windows
scp
: 文件上传、下载
- 上传
1
$ scp ./cifar-10-python.tar.gz kyden@<ip>:/home/kyden/
- 下载
1
$ scp kyden@<ip>:/var/tmp/a.txt /var
picgo picgo-core
-
Download and Install PigGo-Core
-
Get token with GitHub
-
Configure
NOTE:使用时,将注释删掉,以免产生不必要的麻烦
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// ~/.picgo/config.json { "picBed": { "current": "github", "github": { "repo": "<userName>/PicBed", // 设定仓库名:上文在 GitHub 创建的仓库 `<userName>/PicBed` "branch": "master", // 设定分支名:`master` "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // 设定 Token:上文生成的 toke "path": "", // 指定存储路径:为空的话会上传到根目录,也可以指定路径 "customUrl": "" // 设定自定义域名:可以为空 }, "uploader": "github", "transformer": "path" }, "picgoPlugins": { "picgo-plugin-github-plus": true } }
CUDA & cuDNN
|
|
Arch Linux 会将 CUDA 相关档案安装至 /opt/cuda
,有需要的话可以将 CUDA 的 PATH
加到 ~/bashrc
,此路径永远指向最新版CUDA
|
|
Clash Verge
DNS 泄露问题
DNS 泄露其实并没有一个明确的定义,也不存在一个官方解释。
大概就是说你访问YouTube等黑名单网站的时候,使用中国大陆的DNS服务器进行了解析,这可能导致隐私问题的。
如果在 DNS Leak Test 、ipleak这种网站的列表中看到了中国国旗,就要意识到可能发生了DNS泄露。 虽然没有人知道具体的探测机制是什么,但很可能是从网络层面获取的。在一般的家庭网络拓扑中,wireshark可以看到什么内容,运营商就能看见什么内容,所以你使用114.114.114.114、223.5.5.5这样的DNS解析去访问了什么网站是很清晰的。
Clash开启TUN模式,关闭系统代理去使用:与普通的系统代理模式区别在于,TUN模式下Clash会创建一张虚拟网卡,从网络层面接管所有的网络流量。
-
开启TUN模式
-
使用稳定的DNS
DNS这部分有人会教使用运营商的DNS,运营商的DNS只适合小白用户,因为他可能连反诈,所以建议使用国内大厂的。
-
[Optional] 关闭浏览器的QUIC, 中国大陆的isp是限速udp的, 所以导致QUIC这个优秀的协议, 到了中国大陆的网络下成了个负面增益效果。
about://flags/#enable-quic
设置为Disabled
(点下方弹出的重启浏览器生效) -
关闭浏览器中的“安全DNS”
chrome://settings/security
-
在Clash Verge的【Profiles】中,点右上角的"NEW" -> Type选择"Script" -> Name随意填写(例如,“修改DNS”)
-
右击新建的文件,然后"Edit File",输入以下内容后启用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
function main(content) { const isObject = (value) => { return value !== null && typeof value === 'object' } const mergeConfig = (existingConfig, newConfig) => { if (!isObject(existingConfig)) { existingConfig = {} } if (!isObject(newConfig)) { return existingConfig } return { ...existingConfig, ...newConfig } } const cnDnsList = [ 'tls://223.5.5.5', 'tls://1.12.12.12', ] const trustDnsList = [ 'https://doh.apad.pro/dns-query', 'https://dns.cooluc.com/dns-query', 'https://1.0.0.1/dns-query', ] const notionDns = 'tls://dns.jerryw.cn' const notionUrls = [ 'http-inputs-notion.splunkcloud.com', '+.notion-static.com', '+.notion.com', '+.notion.new', '+.notion.site', '+.notion.so', ] const combinedUrls = notionUrls.join(','); const dnsOptions = { 'enable': true, 'default-nameserver': cnDnsList, // 用于解析DNS服务器 的域名, 必须为IP, 可为加密DNS 'nameserver-policy': { [combinedUrls]: notionDns, 'geosite:geolocation-!cn': trustDnsList, }, 'nameserver': trustDnsList, // 默认的域名解析服务器, 如不配置fallback/proxy-server-nameserver, 则所有域名都由nameserver解析 } // GitHub加速前缀 const githubPrefix = 'https://ghproxy.lainbo.com/' // GEO数据GitHub资源原始下载地址 const rawGeoxURLs = { geoip: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat', geosite: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat', mmdb: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb', } // 生成带有加速前缀的GEO数据资源对象 const accelURLs = Object.fromEntries( Object.entries(rawGeoxURLs).map(([key, githubUrl]) => [key, `${githubPrefix}${githubUrl}`]), ) const otherOptions = { 'unified-delay': true, 'tcp-concurrent': true, 'profile': { 'store-selected': true, 'store-fake-ip': true, }, 'sniffer': { enable: true, sniff: { TLS: { ports: [443, 8443], }, HTTP: { 'ports': [80, '8080-8880'], 'override-destination': true, }, }, }, 'geodata-mode': true, 'geox-url': accelURLs, } content.dns = mergeConfig(content.dns, dnsOptions) return { ...content, ...otherOptions } }
-
设置完成后,验证DNS解析结果是否都是来自国外的Cloudflare和Google的DNS, 这时节点服务器不管拿到了你传过去的真ip还是假ip地址, 他都会再去请求一次Cloudflare/Google的DNS服务, 确保解析的正确性。 重要的是没有中国大陆的DNS服务器了,如果还是有,那你应该往当前设备的更上层寻找问题所在,比如路由器的设置等。
-
GEOIP,CN问题
目前市面上绝大多数的代理工具都依赖于 GeoIP2 数据库判断地址所属地。它们的规则结尾部分一般都会有一条类似 GEOIP, CN
,用来查询目的 IP 地址是否属于中国大陆,从而判断是否直连。
这些代理工具通常使用的 GeoIP2 数据库是来自于 MaxMind 的 GeoLite2 免费数据库。这个数据库目前存在一下几个问题:
-
获取不便:从 2019 年 12 月 30 日起,必须注册后才能下载
-
数据量大:数据库庞大,包含全球的 IP 地址段,约 10 MB
-
准确度低:对中国大陆的 IP 地址判定不准,如:香港阿里云的 IP 被判定为新加坡、中国大陆等。
庞大的数据量对于大多数中国大陆的用户来说是没有意义的,因为只仅需要去判断 IP 的地理位置是否属于中国大陆境内,其他国家的 IP 一律代理/直连。过多的数据量会增加载入时间,降低查询效率。
我们在之前创建的Script中已经包含了下载更精简合适中国大陆的IP数据库链接, 现在只需要手动操作下载和替换即可:
- Update GeoData: Clash Verge Rev的
设置
菜单中点击Update GeoData
- 验证下载: 打开Clash Verge托盘中的
APP Dir
,找到geoip.dat
文件,验证其大小是否为几百KB - 重启Clash Verge:确保数据库被正确应用
III. 内核更换
-
Install The Desired Kernel
1
$ sudo pacman -S linux-lts linux-lts-headers
-
Editing GRUB Config File
1 2 3 4 5
$ sudo vim /etc/default/grub GRUB_DISABLE_SUBMENU=y # disables the GRUB submenu, i.e., it enables all the available kernels to be listed on the main GRUB Menu itself instead of the “Advanced option for Arch Linux” option. GRUB_DEFAULT=saved # saves the last kernel used GRUB_SAVEDEFAULT=true # makes sure that grub uses the last selected kernel is used as default
-
Re-Generate GRUB Configuration file
1
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
-
Choose Kernel From GRUB During Boot. 🥂
IV. System optimization
SSD 优化
TRIM, 会帮助清理SSD中的块,从而延长SSD的使用寿命
|
|
SWAP 设置
https://wiki.archlinux.org/title/Swap#Swappiness
- 查看 swap 使用率,一般是 60 ,意思是 60% 的概率将内存整理到 swap:
cat /proc/sys/vm/swappiness
- 修改 swap 使用策略为 10%,即 10% 的概率将内存整理到 swap:
sudo sysctl -w vm.swappiness=10
- 修改配置文件:
sudo vim /etc/sysctl.d/99-swappiness.conf
在文件末尾加上下面这行内容:vm.swappiness=10
- 重启后可查看 swappiness 的值
Systemd journal size limit
控制日志最大可使用多少磁盘空间,修改/etc/systemd/journald.conf
中的SystemMaxUse
参数 SystemMaxUse=50M
V. Problem And Solution
1. clear
command - terminals database is inaccessible
解决方案:
|
|
2. tput: unknown terminal "xterm-256color"
解决方案:
|
|
3. 更新内核后,双屏显示时,某一个屏幕黑屏,但鼠标能够移动过去并显示,另一屏幕正常
解决方案:
|
|
命令解释:配置 HDMI-1-0
输出,使其位于 eDP1
输出的右侧,并自动选择最佳的分辨率和刷新率设置
|
|
4. zip 压缩包解压乱码
产生这种情况的原因是,zip 格式本身的缺陷导致的:
zip 格式没有指定文件名的编码格式,因此在压缩和解压时都会采用操作系统本地编码,
Windows 下简体中文采用的是 GBK
/GB312
编码,而 Linux 采用的是 UTF-8
编码,两者不一致导致了乱码的产生。
解决方案:
|
|
5. wps-office大部分字体粗体出现过粗无法正常显示问题
问题: freetype2 更新至 2.13.0 以上版本后出现的问题,导致 wps-office 文档编辑文字大部分字体设置粗体出现过粗无法正常显示。
解决方案:
-
Download freetype2.13.0
-
降级
sudo pacman -U freetype2-2.13.0-1-x86_64.pkg.tar.zst
-
修改
/etc/pacman.conf
->IgnorePkg = freetype2
,排除掉这个包(不让它更新)freetype2: ignoring package upgrade (2.13.0-1 => 2.13.2-1)
1 2
$ env LD_LIBRARY_PATH=/usr/local/freetype2-2.13.0-1-x86_64/usr/lib $ update-desktop-database ~/.local/share/applications
6. wpspdf 无法打开 PDF 文件
wpspdf 依赖于 libtiff5.so.5 以支撑其 PDF 功能。 而系统更新后,Arch Linux 提供的是 libtiff.so.6 或更新版本,导致其无法正常工作。
解决方案:
安装 libtiff5
7. WPS 无法输入中文
解决方案 - wpp
wpspdf
wpp
et
8. lx-music 数据同步失败
解决方案
- 确保PC端的同步服务已启用成功: 若连接码、同步服务地址没有内容,则证明服务启动失败,此时看启用同步功能复选框后面的错误信息自行解决
- 在手机浏览器地址栏输入http://x.x.x.x:5963/hello后回车,若此地址可以打开并显示 Hello~::^-^::
v4,则证明移动端与PC端网络已互通, - 若移动端无法打开第2步的地址,则在PC端的浏览器地址栏输入并打开该地址,若可以打开,则可能性如下:
- LX Music PC端被电脑防火墙拦截
- PC端与移动端不在同一个网络下,
- 路由器开启了AP隔离(一般在公共网络下会出现这种情况)
- 要验证双方是否在同一个网络或是否开启AP隔离,可以在电脑打开cmd使用ping命令ping移动端显示的ip地址,若可以通则说明网络正常