Arch的使用笔记

发布于 2018-12-26  334 次阅读


提醒:本文最后更新于 985 天前,文中所描述的信息可能已发生改变,请谨慎使用!
你似乎正在查看一篇很久远的文章。
为了你这样的访客,我特地保留了我的历史博文。不要笑话过去的我,用温柔的目光看下去吧。

触linux一两年了,一直都是走马观花,在体验过Ubuntu和Mint之后,我最终选择了Arch,小巧简单、文档丰富、社区完善、高度定制化...这些无不吸引着我(还有就是因为Arch娘可爱啊(逃。这篇文章主要记录日常使用中遇到的问题及解决方案(说明:大多数解决方法来源于网络,不保证在经过很长时间后还会有用,只作为一个参考)。环境:DE是KDE Plasma,双系统,和Win 10共存,引导使用rEFInd。

不断更新中...

系统

Pacman相关

降级

有时候我们升级一些软件会遇到bug,这时就需要降级了
降级十分简单,首先查看 /var/cache/pacman/pkg/ 有没有旧版本的包,有的话直接 sudo pacman -U path/to/包名 就行。
如果你已经删除了旧版本的包,那就需要在 https://archive.archlinux.org 去下载相应的包了。下载完成后与前面一致,执行 sudo pacman -U path/to/包名 就行。
如果你不想更新某个软件,只需要在 /etc/pacman.conf 中加一行:

IgnorePkg   =   包名    ## 包名可以不用软件版本号

手动更改PKGBUILD

  1. yay -G
  2. edit the PKGBUILD
  3. makepkg -si

卸载make install编译安装的软件

一般来说,make install完了目录下会有一个install_mainfest.txt的文件记录了安装的所有内容,
然后 xargs rm < install_manifest.txt 就可以了。
如果没有这个文件,可以自己重新make install,从log中过滤出install信息了。
注意 sudo
另外,建议使用 --prefix=/path/you/want/to/install/ 来编译安装,卸载时只需要删除目录即可

无法更新

无法锁定数据库

$ sudo pacman -Syu
:: 正在同步软件包数据库...
错误:无法升级 core (无法锁定数据库)
错误:无法升级 extra (无法锁定数据库)
错误:无法升级 community (无法锁定数据库)
错误:无法升级 archlinuxcn (无法锁定数据库)
错误:无法升级 archlinuxfr (无法锁定数据库)

如果你确认软件包管理器没有在运行,
你可以删除 /var/lib/pacman/db.lck。

$ sudo rm /var/lib/pacman/db.lck

文件系统中已存在***

例如

$ sudo pacman -Syu
错误:无法提交处理 (有冲突的文件)
libbloom: 文件系统中已存在 /usr/lib/libbloom.so.1 
发生错误,没有软件包被更新。
Error installing repo packages

一般来讲是修复缺少动态库链接的bug,所以更新过程需要覆盖

pacman -Suy --overwrite usr/lib/libbloom.so.1

移除孤儿包

很多时候,一些包经过版本迭代已经废弃,成为孤立包大军中的一员,为了节省空间,这时候就卸载它们吧

## 查看孤立包
sudo pacman -Qtdq
## 卸载孤立包
sudo pacman -Rcs $(pacman -Qtdq)

makepkg

新建 ~/.makepkg.conf, 写入如下内容

CFLAGS="-march=native -O2 -pipe -fno-plt"
CXXFLAGS="-march=native -O2 -pipe -fno-plt"

MAKEFLAGS="-j$(nproc)"

BUILDENV=(!distcc color ccache !check !sign)
BUILDDIR=/tmp/makepkg

COMPRESSXZ=(xz -c -z - --threads=0)

作用: 优化生成的二进制文件 && 加快编译速度 && 加快软件包生成速度

禁用独立显卡

安装Bumblebee和bbswitch

bbswitch作为一个模块存在,安装后可以使用

$ modprobe bbswitch ##将其加载
$ rmmod bbswitch ##将其卸载
$ cat /proc/acpi/bbswitch ##查看其独立显卡运行状态。

关闭/开启独立显卡的指令为

$ tee /proc/acpi/bbswitch <<< OFF ## 关闭
$ tee /proc/acpi/bbswitch <<< ON ##开启

若执行关闭后查看状态仍为ON,可能是因为独立显卡的驱动仍在运行,无法关闭。可以通过dmesg查询错误信息:

$ dmesg |tail -1
bbswitch: device 0000:01:00.0 is in use by driver 'nvidia', refusing OFF

我们可以将驱动nvidia模块卸载

$ rmmod nvidia

使用bbswitch时默认的 NVIDIA 电源状态

$ vim  /etc/modprobe.d/bbswitch.conf
options bbswitch load_state=0 unload_state=1

关机时启用NVIDIA显卡

$ vim /etc/systemd/system/nvidia-enable.service
[Unit]
Description=Enable NVIDIA card
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo ON > /proc/acpi/bbswitch'

[Install]
WantedBy=shutdown.target

然后以root权限运行systemctl enable nvidia-enable.service以启用服务。

安装视频硬件解码驱动

具体可查看:archlinux wiki

sudo pacman -S libva-intel-driver libvdpau-va-gl libva-intel-driver  ##Intel VA-API和VDPAU开源驱动
sudo pacman -S libva-vdpau-driver mesa mesa-vdpau ##NVIDIA  VA-API和VDPAU开源驱动

每次内核更新WARNING

每次内核更新都会看到这两个WARNING

==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: wd719x 

如果是普通用户不用去管,忽略即可

Of importance is that this module is entirely unnecessary for most users.
It's simply a warning as these are commonly used modules for SAS/SCSI Disk Controllers in server hardware.
It's not recommended that you install these if you don't have such hardware in your system.
If you don't know what they are, don't install them.
Because if you did know what they are you'd know if you needed them to get your disks working.

没有ifconfig

ArchLinux安装后是没有ifconfig命令的,是因为以前net-tools属于base组,装base时自动就装上了,现在哪个组都不属于了,这些工具需要单独安装。其中ifconfigroutenet-tools包中,nslookupdigdnsutils包中,ftptelnet等在inetutils包中,ip命令在iproute2包中。sudo pacman -S net-tools dnsutils inetutils iproute2

请使用 ip

man ip

使用串口连接树莓派

su
pacman -S screen #Arch Linux默认没有安装screen
modprobe ch341 #加载驱动程序
dir /dev | grep 'tty' #确认CH341的块设备为/dev/ttyUSB0
stty -F /dev/ttyUSB0 115200 #设定波特率
chmod 666 /dev/ttyUSB0
screen /dev/ttyUSB0 115200 #打开screen使用串口块设备

清理日志

删除之前请确认是否还需要这些东西
查看日志文件

du -t 100M /var
journalctl --disk-usage

清理日志文件

## 删除指定大小日志文件
sudo journalctl --vacuum-size=50M
## 删除指定日期之前的日志
sudo journalctl --vacuum-time=7days
## 删除崩溃日志
sudo rm /var/lib/systemd/coredump/*

TRIM

通过 hdparm -I /dev/sda | grep TRIM 检验是否支持
定期 fstrim 或者使用挂载参数 discard

加速EXT4日志

实现:单独使用一个分区作为日志分区然后启用 journal_async_commit, 了解更多请看 ext4: using external journal to optimise performance
注意:本文中设备符号只供参考,具体环境请使用 /dev/disk/by-* 来指定 设备分区

关机进live cd

关闭root分区日志

    tune2fs -O "^has_journal" /dev/nvme0n1p4
    # 可能需要 fsck 下

    # 查看是否移除特性了
    tune2fs -l /dev/nvme0n1p4 | grep 'Filesystem features' | grep 'has_journal'

开机

修改mount选项,注意: 改fstab不起作用,详见man page

    tune2fs -o journal_data /dev/nvme0n1p4

启用日志分区的日志

    tune2fs -O has_journal /dev/sda2

建立日志分区

    mke2fs -O journal_dev /dev/sda2

指定分区创建日志

a.如果是在现有系统上操作

    tune2fs -J device=/dev/sda2 /dev/nvme0n1p4

b.如果是在装系统时进行优化操作的话

    mkfs.ext4  -J device=/dev/sda2 /dev/nvme0n1p4

fstab加上选项 journal_async_commit

重启

软件

交叉编译

可以使用或者

systemd-nspawn

详细操作请看 https://spiritx.xyz/1041.html

## 先安装静态库
yay -S qemu-arm-static
## 进入容器,root为镜像解包后的目录
systemd-nspawn -D root
 ## 显示进入容器了
[root@root ~]# 

Distcc

官方的教程 比较旧了,这里更新一个方法,以编译树莓派的包为例,树莓派(aarch64)为Client,主机(x86_64)为Volunteer

Client

$ yay -Ss distccd-arch-arm
$ vi /etc/makepkg.conf
MAKEFLAGS="-j3"
## 去除 distccd 前面的 !
BUILDENV=(distcc color !ccache check !sign)
## 修改 Volunteer 的值,如下所示,表示调用ip为 192.168.2.2 ,端口为 3636 的 Volunteer 5个线程工作,多个 Volunteer 用空格隔开
DISTCC_HOSTS="192.168.2.2/36:3636"

Volunteer

$ yay -S distccd-alarm-armv8
$ vi /etc/conf.d/distccd-armv8
## 自行修改 192.168.2.0/24 为合适的 ip 或 ip段
PATH=/opt/x-tools8/aarch64-unknown-linux-gnu/bin:$PATH
DISTCC_ARGS="--allow 192.168.2.0/24 --port 3636 --nice 19 --log-file /tmp/distccd-armv8.log"
$ systemctl enable --now distccd-armv8

之后在Client正常使用makepkg就行了

PyPA

推荐安装仓库里面的python-pip,并且pip操作尽量避免sudo,甚至避免在venv外使用,如要装软件包,使用 pip install xxx --user

## 卸载原有从get-pip.py安装的pip
$ sudo python -m pip uninstall pip
## 安装pip
$ sudo pacman -S python-pip
## 换源
$ vi ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
## 我常用的工具
$ pip install beancount fava you-get youtube-dl gallery-dl --user

Teamviewer

鉴于Teamviewer曾发生重大安全事故,改用手动启用服务

## 关闭后台
systemctl disable teamviewerd
## 每次使用时记得这样
systemctl start teamviewerd

网易云

似乎出来deepin网易云会有各种bug,这里我找到的解决方法是:将启动命令改为XDG_CURRENT_DESKTOP=DDE netease-cloud-music %U

WPS

似乎离不开office啊,周围人都在用,,,wps对微软office兼容性较高

公式无法正常显示

安装 ttf-wps-fonts(AUR)

KDE中Microsoft Office文件格式被识别为Zip

sudo rm /usr/share/mime/packages/wps-office-*.xml
sudo update-mime-database /usr/share/mime

使用 GTK+ UI

WPS 默认的 UI 为 Qt,事实上其捆绑的 Qt 为 4.7.4,从而因为版本不符,无法正常加载 qtcurve 之类的主题。

可以修改{{Ic|/usr/share/applications/wps-office-{wps,wpp,et}.desktop}}一劳永逸设定:

Exec=/usr/bin/{wps,wpp,et} -style gtk+ %f

JetBrains系软件

我使用过Idea和Clion,更新系统会出现jdk或者jre的错误。尝试

sudo pacman -Syyu --ignore jre
sudo pacman -Syyu --ignore jdk

如果出现××已经存在、××无法读取的情况,先卸载jdk、jre再安装
记得一定先装jre再装jdk,不然JetBrains系软件不能启动

sudo pacman -S jre
sudo pacman -S jdk

Chromium不能观看Netflix

https://aur.archlinux.org/packages/chromium-widevine/ 下载安装 chromium-widevine即可。

git clone https://aur.archlinux.org/chromium-widevine.git
cd chromium-widevine
makepkg -sri

BBR

唔,这个主要是给树莓派用的

What:

https://github.com/google/bbr

One Command:

sudo modprobe tcp_bbr

Turn on:

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

不过这只是临时的,要在重启时默认开启BBR得做如下设置

Enable It:

echo "net.core.default_qdisc=fq" >> /etc/sysctl.d/tcp-bbr.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.d/tcp-bbr.conf

Check:

lsmod | grep bbr

Redis

为docker容器延迟启动redis
建立 /usr/share/libalpm/hooks/redis.hook 文件,写入以下内容

[Trigger]
Type = Path
Operation = Install
Operation = Upgrade
Target = usr/lib/systemd/system/redis.service

[Action]
Description = delay redis servide to avoid docker err...
When = PostTransaction
Exec = /bin/sh -c 'sed -i "/ExecStart=/i\ExecStartPre=/usr/bin/sleep 30" /usr/lib/systemd/system/redis.service && systemctl daemon-reload'


恭喜,你成功屏蔽了广告 *这是一则由 Google AdSense 自动推荐的广告,不代表本站立场