linux · 2021年 6月 9日 0

archlinux

2002年由加拿大的Judd Vinet,Archlinux的创始人 怀着对Debian、Redhat的包管理器不满,于是创建了Archlinux!

ArchLinux是一个纯净版的系统,只有一个文字形式的系统,没有预装桌面界面!ArchLinux不适合Linux初学者,Ubuntu适合初学者学习。 ArchLinx 是一款功能强悍的系统,所有的配置都要自己去完成。Archlinux下可以装很多应用,除了Windows下的VC编程,Windows下的少数大型游戏不支持外,完全可以适合日常办公。

arch安装

BIOS设置

Security -> Secure Boot -> Secure Boot: Disabled
Startup -> EFI/Legacy Boot: UEFI Only
Config -> Display -> Total Graphics Memory: 512MB

验证启动模式

ls /sys/firmware/efi/efivars

如果命令没有错误地显示了目录,则系统以 UEFI 模式启动。 如果目录不存在,系统可能以 [BIOS]模式 (或 [CSM] 模式) 启动。如果系统未以您想要的模式引导启动,请参考您的主板手册。

连接到因特网

确保系统已经启用了 [网络接口],用 [ip-link(8)] 检查。

有线网络

# ip link
# dhcpcd

无线网WIFI

# 使用 iwctl 工具,列出网卡设备
[iwctl#] device list
# 扫描网络 wifi
[iwctl#] station <devicename> scan
# 显示扫描的结果
[iwctl#] station <devicename> get-networks
# 在提示符中输入
[iwctl#] station <devicename> connect <wifi-ssid>
# 连接wifi网络,如果wifi加密,会提示你输入密码
***
CTRL+C

用 [ping] 检查网络连接:ping archlinux.org -c 2

更新系统时间

使用 [timedatectl(1)]确保系统时间是准确的:# timedatectl set-ntp true

验证:# timedatectl status

硬盘分区

查看分区情况

磁盘若被系统识别到,就会被分配为一个[块设备],如 /dev/sda, /dev/nvme0n1 或 /dev/mmcblk0。可以使用 [lsblk] 或者 fdisk 查看:# fdisk -l

结果中以 rom,loop 或者 airoot 结束的可以被忽略。

建立分区

对于一个选定的设备,以下的分区是必须要有的

一个根分区(挂载在 根目录/

要在 UEFI 模式中启动,还需要一个 EFI 系统分区

如果需要创建多级存储例如 LVMdisk encryptionRAID,请在此时完成

请使用 fdiskparted 修改分区表。例如:

fdisk /dev/the_disk_to_be_partitioned (要被分区的磁盘):fdisk /dev/sda

以下是分成两个区,一个 300M EFI 和 476G LVM

fdisk /dev/sda

新建分区 /dev/sda1

Command (m for help): n
Partition number (1-4, default 1):
First sector (1677754368-2813066894, default 1677754368):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1677754368-2813066894, default 2813066894): +300M

新建分区 /dev/sda2
Command (m for help): n
Partition number (2-4, default 2):
First sector (1678368768-2813066894, default 1678368768):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1678368768-2813066894, default 2813066894): +476G

将 /dev/sda1 的分区类型改为 EFI System
Command (m for help): t
Partition number (1-4, default 1): 1
Partition type (type L to list all types): ef

Changed type of partition ‘Linux filesystem’ to ‘EFI System’.

保存
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

格式化分区

当分区建立好了,每个新建立的分区都需要使用适当的 文件系统 进行格式化。举个例子,要在根分区 /dev/*root_partition* 上创建一个 Ext4 文件系统,运行:mkfs.ext4 /dev/root_partition(根分区):mkfs.ext4 /dev/sda2

如果有efi分区,假如是在 sda1上,那么需要:

# mkfs.fat -F32 /dev/sda1

LVM 卷创建与管理

建立物理卷PV,使硬盘支持 LVM 管理,将第二个分区设置成 物理卷PV

# pvcreate /dev/sda2

建立卷组VG,命名为 arch,并把建立的物理卷加进去

# vgcreate arch /dev/sda2

分卷,建立逻辑卷LV,

lvcreate -L 100G arch -n root
lvcreate -L 410G arch -n home
lvcreate -l +100%FREE arch -n swap

格式化,

mkfs.ext4 /dev/mapper/arch-root    
mkfs.ext4 /dev/mapper/arch-home    
mkswap /dev/mapper/arch-swap

如果创建了 交换分区 (例如 /dev/*sda3*),请使用 mkswap(8) 将其初始化:

mkswap /dev/mapper/arch-swap

挂载 LVM 分区

挂载分区的时候,如果boot单独分区,要首先挂载root 即 / 分区,然后挂载boot 分区,最后再挂载其它分区,不然后续安装会出现问题,将根磁盘卷 挂载/mnt,然后使用 mkdir(1) 创建其他剩余的挂载点(比如 /mnt/efi)并挂载其相应的磁盘卷。

mount /dev/mapper/arch-root /mnt
mkdir /mnt/boot /mnt/home
mount /dev/sda1 /mnt/boot
mount /dev/mapper/arch-home /mnt/home

注意事项

挂载分区的时候,如果boot单独分区,要首先挂载root 即 / 分区,然后挂载boot 分区,最后再挂载其它分区,不然后续安装会出现问题

软件源选择与更新

更改软件源 (可选)

文件 /etc/pacman.d/mirrorlist 定义了软件包会从哪个镜像源下载。在 LiveCD 启动的系统上,在连接到因特网后,reflector 会通过选择 20 个最新同步的 HTTPS 镜像并按下载速率对其进行排序来更新镜像列表。[2] 。 在列表中越前的镜像在下载软件包时有越高的优先权。您或许想检查一下文件,看看是否满意。如果不满意,可以相应的修改 /etc/pacman.d/mirrorlist 文件,并将地理位置最近的镜像源挪到文件的头部。

或者手动添加软件源:

vim /etc/pacman.d/mirrorlist

输入 插入以下内容:

## China
  Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/repo/os/arch

保存,退出后

更新缓存

pacman -Syy

正式安装

安装内核及硬件固件

使用 pacstrap 脚本,安装 base 软件包和 Linux 内核以及常规硬件的固件

AMD

pacstrap /mnt base linux linux-firmware base-devel lvm2 vim os-prober amd-ucode dhclient dialog dhcpcd openssh wget wireless-regdb wireless_tools wpa_supplicant efibootmgr networkmanager

Intel

pacstrap /mnt base linux linux-firmware base-devel lvm2 vim os-prober intel-ucode dhclient dialog dhcpcd openssh wget wireless-regdb wireless_tools wpa_supplicant efibootmgr networkmanager

提示:

  • 可以将 linux 替换为 kernel 页面中介绍的内核软件包。
  • 在虚拟机或容器中安装时,可以不安装固件软件包。

挂载信息写入

使用 Fstab将挂载信息写到本地, genfstab(8) 将自动检测挂载的文件系统和交换空间。

用以下命令生成 fstab 文件 (用 -U-L 选项设置UUID 或卷标):

genfstab -U /mnt >> /mnt/etc/fstab
cat /mnt/etc/fstab

强烈建议在执行完以上命令后,后检查一下生成的 /mnt/etc/fstab 文件是否正确。

Chroot进入本地系统

Change root 到新安装的系统,

arch-chroot /mnt

设置时区:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
date

运行 hwclock(8) 以生成 /etc/adjtime

# hwclock --systohc

这个命令假定硬件时间已经被设置为 UTC 时间。详细信息请查看 System time#Time standard

语言本地化

先安装文本编辑工具 vim

pacman -S vim

本地化的程序与库若要本地化文本,都依赖 Locale,后者明确规定地域、货币、时区日期的格式、字符排列方式和其他本地化标准。

需在这两个文件设置:locale.genlocale.conf

编辑/etc/locale.gen 然后移除需要的 地区 前的注释符号 #。如 设置为 en_GB.UTF-8

接着执行 locale-gen 以生成 locale 信息:

# locale-gen

然后创建 locale.conf(5) 文件,并 编辑设定 LANG 变量,比如:

/etc/locale.conf
LANG=en_US.UTF-8  ? en_GB.UTF-8

另外对于中文用户:

也可以设置为 en_GB.UTF-8en_SG.UTF-8,附带以下优点:

  • 进入桌面环境后以 24 小时制显示时间;
  • LibreOffice 等办公软件的纸张尺寸会默认为 A4 而非 Letter(US)
  • 可尽量避免不必要且可能造成处理麻烦的英制单位。

编辑完两个文件之后:locale-gen

看到 Generation complete 即说明本地化生成完成。

lvm配置

在block 和 filesystems之间添加lvm2

vim /etc/mkinitcpio.conf
  ----------------------
HOOKS=(base udev autodetect modconf block lvm2 filesystems keyboard fsck)

然后应用此配置

mkinitcpio -p linux

网络配置

创建 hostname 文件:

touch /etc/hostname
pacman -S NetworkManager

安装 dhcpcd:否则重启后无法连接到网络。

安装 iwd: 无线网

pacman -S dhcpcd
pacman -S iwd

Root 密码

passwd

安装引导程序

对于 grub用下面的命令

pacman -S grub
grub-install /dev/sda1

若出现error:will not proceed with blocklists,添加–force参数就好了

grub-install –force /dev/sda

Installation finished. No error reported.安装完成 ,没有错误

对于grub2,用下面的命令

sudo pacman -S grub efibootmgr
sudo mount /dev/sdxx /mnt # sdxx is your EFI partition.
sudo grub-install --target=x86_64-efi --efi-directory=/mnt --bootloader-id=grub --recheck
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo grub-mkconfig -o /mnt/EFI/grub/grub.cfg
* Note: If you got an error, try this before grub-install:
sudo mount /dev/sdxx /boot/efi/
sudo mount -t efivarfs efivarfs /sys/firmware/efi/efivars/

mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

然后

grub-install --target=x86_64-efi --efi-directory=/boot --bootloder-id=ArchLinuxGrub

不管哪种方式安装的 grub 最后都需要

grub-mkconfig -o /boot/grub/grub.cfg

这样我们的系统就配置好了,此时重启。执行

exit
poweroff

参考来源:QIEDD

第一次启动 Arch Linux

正常启动 ——- 如果是虚拟机,先 [设置] -> [存储]-> 移除光盘

进入系统,输入 root(用户名)和密码(先前设置的)

联网

# 有线
systemctl enable dhcpcd
dhcpcd
ip link 
ping baidu.com -c 2
# 无线
systemctl enable iwd
iwctl
ping qq.com -c 2

启用网络连接,一个基本的 Arch Linux 的安装至此结束。

考虑到图形界面网络管理使用 NetworkManager 因此建议使用下面的方法,

网络配置

pacman -S networkmanager  # 网络管理器
systemctl enable NetworkManager  # 将networkmanager写入开机启动
systemctl start NetworkManager
systemctl disable dhcpcd # NetworkManager可能与这个冲突,最好停止并禁用这个
systemctl stop dhcpcd
systemctl disable iwd
systemctl stop iwd

使用 networkmanager链接wifi热点

systemctl start NetworkManager
systemctl enable NetworkManager

查看设备状态

nmcli device

扫描wifi热点

nmcli d wifi list

连接无线热点

nmcli device wifi connect 'tplink-6688' password 'youpassword'

查看连接状态,显示所有的网络链接

nmcli c show

新建一个用户

root 用户的权限过高,造成对系统灾难性的损坏的风险因此较高,我们因此

useradd -m -G wheel username/liupei
passwd username/liupei

安装 sudo

不使用 root 时如何获得 root 权限呢?需要在命令前加上 sudo,而 sudo 也需要先安装:

pacman -S sudo

执行

ln -s /usr/bin/vim /usr/bin/vi
visudo

进入 Vim 编辑器,找到

# %wheel ALL=(ALL) ALL

把「#」去掉,保存退出。reboot 重启。用新用户登陆,进入系统

修改启动停留时间

切换至root用户:su -

编辑 /boot/grub/grub.cfg 配置文件

vim /boot/gub/grub.cfg
set_timeout=5   -->  set_timeout=1
reboot

第一个选项是正常启动,也是默认启动项。第二个急救模式启动(系统出现问题不能正常启动时使用并修复系统)

使用(清华源)

修改源文件:sudo vim /etc/pacman.conf

然后在 pacman.conf 文件的最后增加以下两段代码:

[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

更新源文件

sudo pacman -Syy
sudo pacman -S archlinuxcn-keyring
sudo pacman -Syy

如果出现错误无法安装,执行以下代码:

rm -rf /etc/pacman.d/gnupg
pacman-key --init
pacman-key --populate archlinux
pacman-key --populate archlinuxcn

sudo pacman -Syy
sudo pacman -S archlinuxcn-keyrin

参考文献: cnblogarchlinux.cn

安装完系统配置

换源

sudo pacman-mirrors -i -c China -m rank

更新系统

sudo pacman -Syu

安装输入法

sudo pacman -S fcitx5-m fcitx5-chinese-addons fcitx5-rime

配置输入法

vim .pam_environment
GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE  DEFAULT=fcitx
XMODIFIERS    DEFAULT=@im=fcitx
SDL_IM_MODULE DEFAULT=fcitx

管理输入法:fcitx-configuretool

reference: sf博客

图形化界面

安装xorg服务

$ sudo pacman -S mesa lib32-mesa
# pacman -S xf86-video-intel  # 英特尔集显(独显安装nvidia)官方不建议
pacman -S xf86-video-ati    # AMD集成显卡
pacman -S xorg
pacman -S plasma
pacman -S kde-applications
pacman -S sddm
systemctl start sddm

启动闪屏问题

sudo vim /etc/default/grub
在 GRUB_COMLINE_LINUX_DEFAULT = "loglevel=3 quiet nomodeset"
然后更新一下命令
grub-mkconfig -o /boot/grub/grub.cfg

显卡驱动

所有 AMD 显卡建议使用开源驱动,英伟达显卡建议使用闭源驱动。

Intel 核芯显卡

sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel

不建议安装 xf86-video-intel,而应使用 Xorg 的 modesetting 驱动(也就是什么都不用装的意思)

注意,只有 Intel HD 4000 及以上的核显才支持 vulkan。

AMD 核芯显卡

sudo pacman -S mesa lib32-mesa xf86-video-amdgpu vulkan-radeon lib32-vulkan-radeon

对于具有核芯显卡的 AMD 处理器,需要先确定核显架构(Architecture)是什么,再决定安装什么驱动。

推荐在 TECHPOWERUP 进行查询,信息非常全面。在确定了显卡架构后,再根据架构对照下表决定安装什么驱动。

NVIDIA 独立显卡

较新型号的独立显卡使用以下命令直接安装如下几个包即可

sudo pacman -S nvidia nvidia-settings lib32-nvidia-utils

闪屏问题

sudo mhwd -i pci video-nvidia

如果是 GeForce 630 以下到 GeForce 400 系列的老卡,使用以下命令安装 nvidia-390xx-dkmsaur 及其 32 位支持包:

yay -S nvidia-390xx-dkms nvidia-settings lib32-nvidia-390xx-utils

再老的显卡直接使用以下命令安装 开源驱动 即可:

sudo pacman -S mesa lib32-mesa xf86-video-nouveau

AMD 独立显卡

AMD 独立显卡的驱动安装步骤实际上和 AMD 核芯显卡是相同的,都需要先确定架构,然后选定正确的驱动安装即可。参考步骤 AMD 核芯显卡

双显卡(核显 + 独显)

参考文献:iceklyn

sddm开机默认开启小键盘

从aur源安装numLockOnTty,并开机启动

yay -S systemd-numlockontty
systemctl enable numLockOnTty

编辑/etc/sddm.conf

[General]
Numlock=on

重启:reboot

KDE 美化

sudo pacman -S plank

美化1美化2美化3

XFCE4界面美化

sudo pacman -S xorg xfce4

参考文献: 知乎,Arch Installation凌云

中文显示

vim /etc/locale.gen

取消如下注释

zh_CN.UTF-8
zh_CN.GB18030 

执行:locale-gen

安装中文字体(文泉驿字体):pacman -S wqy-zenhei

中文输入法

ibus中文输入法

sudo pacman -S ibus-rime ibus-libpinyin ibus-pinyin
vim .xprofile
    export GTK_IM_MODULE=ibus
    export XMODIFIERS=@im=ibus
    export QT_IM_MODULE=ibus
    ibus-daemon -d -x

参考文献:极致linux

fcitx5 中文输入法

sudo pacman -S fcitx5-im 
sudo pacman -S fcitx5-chinese-addons  fcitx5-rime
sudo pacman -S fcitx5-configtool

其中:

  • fcitx5-chinese-addons 包含了大量中文输入方式:拼音、双拼、五笔拼音、自然码、仓颉、冰蟾全息、二笔等
  • fcitx5-rime` 对经典的 Rime IME 输入法的包装,内置了繁体中文和简体中文的支持。

然后在环境变量配置文件/etc/environment中添加如下内容:

 # /etc/environment
  GTK_IM_MODULE=fcitx
  QT_IM_MODULE=fcitx
  XMODIFIERS=@im=fcitx
  SDL_IM_MODULE=fcitx

然后配置自动启动,提供以下3种方法,第一个不行,试第2个,然后第3个:

  1. 如果,支持XDG桌面环境,例如 KDE,GNOME, Xfce,默认重启后即可
  2. ~/.config/autostart 目录下添加 fcitx-autostart.deskto p文件,可以从目录etc/xdg/autostart中复制
  3. 对于i3-wm,可以在配置文件~/.config/i3/config中添加如下代码:exec_always --no-startup-id fcitx5

参加来源:zhihu

克隆 oh-my-zsh

git clone http://github.com/robbyrussell/oh-my-zsh ~/.oh-my-zsh

切换配置文件:备份你已有的 .zshrc 文件,然后将 oh-my-zsh 自带的配置文件移动到这个地方。这两步操作可以一步完成,只需要你的 mv 命令支持 -b 这个选项。

mv -b ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

编辑配置文件:例如,你可以更改 .oh-my-zsh 目录的位置。在安装的时候,它默认是位于你的家目录。但是,根据 Free Desktop 所定义的现代 Linux 规范。这个目录应当放置于 ~/.local/share 。你可以在配置文件 .zshrc 中进行修改。如下所示:

# Path to your oh-my-zsh installation.
export ZSH=$HOME/.local/share/oh-my-zsh

然后将 .oh-my-zsh 目录移动到你新配置的目录下:

mv ~/.oh-my-zsh $HOME/.local/share/oh-my-zsh

重新启动 Zsh

source ~/.zshrc

更换你的主题

可以通过列出 .oh-my-zsh 目录下的所有文件来查看所有安装的主题:

peter@c510 ~ ls .local/share/oh-my-zsh/themes/
3den.zsh-theme             kennethreitz.zsh-theme
adben.zsh-theme            kiwi.zsh-theme
af-magic.zsh-theme         kolo.zsh-theme

想在切换主题之前查看一下它的样子,你可以查看 Oh My Zsh 的 wiki 页面。要查看更多主题,可以查看 外部主题 wiki 页面。大部分的主题是非常易于安装和使用的,仅仅需要改变 .zshrc 文件中的配置选项然后重新载入配置文件

#ZSH_THEME="agnoster"
ZSH_THEME="dieter"

参考文献:给 Zsh 添加主题和插件

更改tty字体和大小

临时设置的方法: setfont /usr/share/kbd/consolefonts/latarcyrheb-sun32.psfu.gz

永久设置的方法:echo setfont /usr/share/kbd/consolefonts/latarcyrheb-sun32.psfu.gz >>.zshrc

aur

https://zhuanlan.zhihu.com/p/661351588manjaro

manjaro:sudo pacman -S yay

archlinux

git clone https://aur.archlinux.org/yay.git
cd yay/
export GO111MODULE=on
export GOPROXY=https://goproxy.cn

makepkg -si
yay --version

安装后,你可以使用 yay 命令来安装软件包:

yay -S package_name

参考文献:linuxcn

仓库更新签名报

sudo pacman-key --init && sudo pacman-key --populate && sudo pacman -Syu

参考文献:csdn

pacman命令

自动补全

sudo pacman -S bash-completion

更新系统

pacman 可以用一个命令就可以升级整个系统。花费的时间取决于系统有多老。这个命令会同步非本地(local)软件仓库并升级系统的软件包

pacman -Syu  # 升级系统
pacman -Sy   # 从服务器下载新的软件包数据库(实际上就是下载远程仓库最新软件列表到本地)
pacman -Su   # 升级所有已安装的软件包

如果升级时,网络比较慢,觉得既浪费时间又浪费硬盘,实在不想升级那么多东西,可以逐个软件包升级。用下面命令可以升级核心包:

pacman -S --needed filesystem msys2-runtime bash libreadline libiconv libarchive libgpgme libcurl pacman ncurses libintl

安装软件

pacman -S name1 name2 # 安装软件。也可以同时安装多个包,只需以空格分隔包名即可。
pacman -S --needed name1 name2  # 安装软件,但不重新安装已经是最新的软件
pacman -Sy name    # 安装软件前,先从远程仓库下载软件包数据库(数据库即所有软件列表)
pacman -Sv name    # 在显示一些操作信息后执行安装
pacman -Sw name    # 只下载软件包,不安装
pacman -U name.pkg.tar.gz   # 安装本地软件包
pacman -U http://www.example.com/repo/example.pkg.tar.xz  # 安装一个远程包(不在 pacman 配置的源里面)

卸载软件

pacman -R 软件名   # 只删除包,保留其全部已经安装的依赖关系
pacman -Rv 软件名  # 删除软件,并显示详细的信息

pacman -Rs 软件名  # 删除软件,同时删除本机上只有该软件依赖的软件
pacman -Ru 软件名  # 删除软件,同时删除不再被任何软件所需要的依赖
pacman -Rsc 软件名 # 删除软件,并删除所有依赖这个软件的程序,慎用

搜索软件

# 在仓库中搜索含关键字的软件包(本地已安装的会标记)
    pacman -Ss 关键字
    pacman -Sl <repo>:
        显示软件仓库中所有软件的列表
        可以省略,通常这样用:`pacman -Sl | 关键字`

pacman -Qqs 关键字  # 搜索已安装的软件包
pacman -Qu          # 列出所有可升级的软件包
pacman -Qt         # 列出不被任何软件要求的软件包

参数加q可以简洁方式显示结果,比如pacman -Ssq gcc会比pacman -Ss gcc显示的好看一些。

pacman -Sl | gccpacman -Ssq gcc 很接近,但是会少一些和gcc有关但软件名不包含gcc的包

查询软件信息

pacman -Q  pname # 查看软件包是否已安装,已安装则显示软件包名称和版本
pacman -Qi pname  # 查看某个软件包信息,显示较为详细的信息,包括描述、构架、依赖、大小等等
pacman -Ql pname # 列出软件包内所有文件,包括软件安装的每个文件、文件夹的名称和路径

软件包组

pacman -Sg   # 列出软件仓库上所有的软件包组
pacman -Qg   # 列出本地已经安装的软件包组和子包
pacman -Sg   # 软件包组: 查看某软件包组所包含的所有软件包
pacman -Qg 软件包组 和 pacman -Sg 软件包组完全一样

很多人建议通过安装软件组来安装工具链,这样比较浪费空间。实际上如果把gcc, qt, clang等安装上,msys2就要占掉超过10G的硬盘空间,所以个人很少直接安装软件组。例如:

pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-i686-toolchain
pacman -S mingw-w64-x86_64-qt5
pacman -S base-devel

清理缓存

pacman -Sc  # 清理未安装的包文件,包文件位于 /var/cache/pacman/pkg/ 目录   
pacman -Scc # 清理所有的缓存文件
TOC