安装 arch linux
前言
装一次Arch 不容易,需要查好多资料,所以记录下来以免下次又得重新找。 据大多数的信息都可以在Arch的Wiki https://wiki.archlinux.org/index.php/Installation_guide 上找到。
也可参考 http://blog.csdn.net/huangfuran/article/details/73733400
制作U盘启动
先修知识点: 通常主流启动方案有两种:
- BIOS(预启动环境,引导程序) + MBR(文件系统)
- UEFI(预启动环境,引导程序) + GPT(文件系统)
其中方案2 相对方案1 更优,所以选 UEFI + GPT 方案。详见https://www.zhihu.com/question/28471913
Windows下可用的制作U盘启动的程序可以选择Rufus
ArchWiki中也介绍了用dd
命令的办法处理,ArchWiki中说装完系统后U盘格式化恢复前需要清除iso9660文件系统标识(执行sudo wipefs --all /dev/sdx
),否则U盘变得不可用,
然后执行 sudo mkfs.ntfs -F /dev/sdx
。
遇到这种情况,windows下可通过usboot工具恢复解决,但估计会影响U盘寿命,所以最好不用dd
命令方式
基本的系统安装
分区
我的理解是分区可以将文件映射到硬盘不同区域,这一方面可以有不同的文件系统格式,例如NTFS或者
首先可以通过fdisk -l
或者 lsblk -f
(推荐) 或者 parted -l
查看分区信息。
编辑分区方案可用fdisk
或parted
,parted相对fdisk更方便一点,但我觉得fdisk也足够好用。
分区需要注意的是对于 UEFI + GPT 方案,需要有单独的一个分区存储引导系统,大小推荐大于550M,文件格式EFI system
。
其他分区的分区方案,参考http://blog.csdn.net/huangxiang360729/article/details/52639673 以及Arch Wiki https://wiki.archlinux.org/index.php/Partitioning 以及 https://www.zhihu.com/question/22453727/answer/22358304
我的方案如下(为什么1T的硬盘我要纠结这久,才分100G?),到时看使用情况,看哪个分区吃紧。
dir | dev | size | format |
---|---|---|---|
/boot/efi |
dev/sdx1 |
600M(推荐大于550M) | EFI系统(vfat) |
/ |
dev/sdx2 |
20G(包含usr情况下要大一点,如果是服务器usr单独分区可以较小) | ext4 |
/home |
dev/sdx3 |
60G(无明确推荐,根据用户情况) | ext4 |
/var |
dev/sdx4 |
15G(推荐8-12GB) | ext4 |
我觉得内存够大,不想要swap分区,否则2G应该ok。
挂载分区
先格式化mkfs.ext4 /dev/sdx2
,然后mount dev/sdx2 /mnt
将sdx2挂载到根目录,mount dev/sdx1 /mnt/boot/efi
挂载到boot,其他类似
安装Arch
通过源加载文件到 /mnt
来安装,所以第一件事情是找一个比较快的源。
参考 https://wiki.archlinux.org/index.php/Mirrors
$ cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
$ # 排序
$ rankmirrors -n 6 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist
$ # 更新源
$ pacman -Syyu
然后用Arch的安装脚本安装pacstrap /mnt base
,源很快,安装非常顺序,只要一两分钟。
我除了装base
也装了base-devel
,因为看到里面很多多很常用。
自动生成fstab
$ genfstab -U /mnt >> /mnt/etc/fstab
Chroot
$ arch-chroot /mnt
Timezone
$ ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
$ # 例如:
$ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
$ hwclock --systohc
键盘与字体
/etc/vconsole.conf
添加 KEYMAP=us
, 也可以不设置,默认为us
关于字体参考: http://www.cnblogs.com/xlmeng1988/archive/2013/01/16/locale.html
$ vi /etc/locale.conf # 添加一行LANG=en_US.UTF-8
$ vi /etc/locale.gen # 把en_US.UTF-8 UTf-8,zh_CN.GBK GBK,zh_CN.UTF-8 UTF-8,zh_CN GB2312前面的注释去掉
$ locale-gen # 更新语言环境
$ locale # 查看是否有问题
主机名
$ vi /etc/hostname 添加主机名 Arch
网络配置
首先改/etc/hosts文件
添加 127.0.1.1 Arch.localdomain Arch
然后
# 有线连接:
$ systemctl start dhcpcd # 连接
$ systemctl enable dhcpcd # 以后自动连接
# 无线连接:
$ pacman -S iw wpa_supplicant dialog
$ wifi-menu # 连接
更多详细的网络配置参见:
参见 https://wiki.archlinux.org/index.php/Network_configuration#Set_the_hostname
lspci -v
查看Ethernet controller
其中会获得 Kernel driver in use: haha
Kernel modules: haha
然后dmesg | grep haha
会得到dev的初始化信息,
grub
# BIOS 系统:
$ pacman -S grub os-prober
$ grub-install --target=i386-pc /dev/<目标磁盘>
$ grub-mkconfig -o /boot/grub/grub.cfg
# UEFI 系统:
$ pacman -S dosfstools grub efibootmgr
$ grub-install --target=x86_64-efi --efi-directory=<EFI 分区挂载点> --bootloader-id=grub
$ grub-mkconfig -o /boot/grub/grub.cfg
grub -install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --boot-directory=/boot
注意其中x86_64-efi
是64位,i386-efi
是32位,
efibootmgr是生成.efi
,GRUB安装脚本需要的启动项(stub entries),
dosfstools可能不需要。
grub-mkconfig -o /boot/grub/grub.cfg
然后 umount \mnt && reboot
即可
Win10 Arch 双系统
如果是bios + MBR 方案,可以参考这篇文章,步骤基本没问题。
官方参考: https://wiki.archlinux.org/index.php/Dual_boot_with_Windows
原理是在Win系统的引导程序中添加选项,跳到Linux的引导程序,在ArchWiki中提到单独划分一个Window可识别的分区,但如上文所示,可以通过ntfs-3g
支持,因此不需要单独划拨一个后期用不上的分区。
# 支持及自动识别NTFS文件系统
$ sudo pacman -S ntfs-3g #ntfs文件支持
$ sudo pacman -S gvfs # 自动mount文件系统
注意还需要处理Windows与Linux时间不一致的问题。
解决办法是修改Windows时间为UTC格式,通过命令行修改注册表:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
图形界面
我尝试在grub之前安装图形界面,虽然可以成功,但鼠标用不了,这是因为安装环境中没有鼠标驱动,在新Arch系统中装了鼠标驱动没用,而安装grub,启动新系统后能生效。
首先得了解 X, X11(X11R6), Xorg,Xfree86 , gnome, kde, Xfce之类都是些什么, 简单来说 X 是一种图形协议标准,X11R6 是X协议下的当前的最重要的版本, X Protocol version 11 Release 6
Xorg Xfree86, Xnest 都是对X协议的实现,苹果的OS X操作系统也是基于X协议,并被认为是最好的实现,将其实施于系统内核,性能更优。 可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示 Xorg 是在Xfree基础上衍生的版本,因为相对Xfree的许可更自由,很多系统例如Ubuntu、gentoo等都用Xorg替换Xfree
X实现了图形显示,但没有窗口管理 WM(Windows Manager),所以如果没有WM可以显示图形,但不能最大化最小化移动等, 常见WM包括 gnome、kde,Xfce等,但其能力范围大于WM,为桌面环境
一篇比较好的介绍链接(linux图形界面基本知识(X、X11、Xfree86、Xorg、GNOME、KDE之间的关系))
http://blog.csdn.net/zhangxinrun/article/details/7332049
所以X服务器实现,比如选Xorg,桌面环境我试试Xfce4,听说很轻量。
Xorg安装
参考:
https://wiki.archlinux.org/index.php/Xorg
首先安装显卡驱动,先用lspci
查看自己是什么显卡。
然后pacman -Ss xf86-video
查看有哪些包可以装,
我的是AMD卡,所以pacman -S xf86-video-ati
或者应该也可xf86-video-amdgpu
可能还需要 pacman -S mesa
(3D支持),暂时不装
然后安装xorg,
简单的直接pacman -S xorg
都装上,但作为不折腾不舒服的人,
我决定先只装xorg-xinit
以及xorg-server
然后用 startx
测试一下是否安装成功,提示没有xterm,正好我缺一个终端模拟器,
先装一个xterm,pacman -S xterm
,以后看用gnome-terminal还是啥。
退出后又提示没有xclock,pacman -S xorg-xclock
可以进入界面后用pkill X
退出
然后,我装了一下xorg-twm
这是最乞丐版的Windows manager, 相对于gnome之类的简直不能看,
不过还蛮好玩的,startx后可以移动图形了,鼠标也可以用。
Xfce4
https://wiki.archlinux.org/index.php/Xfce
提示有16个extra要装,我原本想只装部分,继续折腾,但看官方貌似意思都装,就都装吧。
然后startxfce4
即可看到进入了。
另一个有趣的窗口管理i3wm
TODO
WIFI图形界面
通过命令行wifi-menu
的方式也足够使用,但图形界面更为方便直观,
不同的桌面环境不一样,我用的xfce,与gnome,KDE等安装所需的软件包不太一样。
wifi管理图形界面我选用NetworkManager,因为其支持项最多。
$ sudo pacman -S networkmanager
$ sudo pacman -S network-manager-applet # xfce4(GTK+ 3)
$ sudo systemctl start NetworkManager # 启动 network manager
$ sudo systemctl enable NetworkManager # 重启时自动启动 network manager
$ nm-applet # 执行一次wifi GUI客户端,panel上应该会出现相应通知,下次启动也应该会有
GUI客户端连wifi跟Windows系统差不多,操作也较为简单,但是注意加密wifi的账号密码写错了不会有提示,这一点不是很方便。
登陆管理
安装 Xfce4 的登陆管理器, 看有人推荐slim,lxdm,gdm
参见Wiki https://wiki.archlinux.org/index.php/Display_manager
其实最好是自动登陆,所以酷不酷炫也就无所谓了,不过我先试一试直接在Xinitrc中执行exec startxfce4
解决乱码
firefox 打开发现中文部分字体是乱码, 按照 https://wiki.archlinux.org/index.php/Firefox所述 中文语言包 firefox-i18n-zh-cn也没用,猜测是字体问题 不得不说arch真是文档齐全 https://wiki.archlinux.org/index.php/Arch_Linux_Localization_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
安装字体 adobe-source-han-sans-cn-fonts
以及 adobe-source-han-serif-cn-fonts
后
配置字体(这一步似乎不需要,因为已经存在此链接了) sudo ln -s /etc/fonts/conf.avail/64-language-selector-prefer.conf /etc/fonts/conf.d/64-language-selector-prefer.conf
重建字体cache fc-cache -fv
即可解决firefox字体乱码问题,就是有些丑。
配置系统语言环境及输入法
参考Linux的locale, LC_ALL 和LANG 以及linux下locale中的各环境变量的含义 还有这一篇非常的详尽Linux中LANG,LC_ALL,local详解
了解locale,LC_CTYPE之类是什么
输入法简单起见,我选择fcitx框架及其sougou拼音输入法,
$ sudo pacman -S fcitx fcitx-configtool
$ sudo pacman -S fcitx-gtk2 fcitx-gtk3 fcitx-qt4 fcitx-qt5
$ sudo pacman -S fcitx-sogoupinyin
配置~/.xinitrc ~/.xprofile
, 然后启动时输入startx
即可执行此脚本,如果直接startxfce4
则不会执行此脚本
.xinitrc
为startx命令启动时执行的脚本,而.xprofile
为用gdm等启动器进入用户界面时执行的脚本。
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
# export LANG=en_US.UTF-8
# export LANGUAGE=zh_CN:en_US
# export LC_CTYPE=zh_CN.UTF-8
fcitx &
exec startxfce4
另外,belleve设计的iosevka字体非常好,所以yaourt -S ttf-isosevka
安装字体,如果出错,多半是locale的问题
locale命令 查看是否有问题
用户及密码
passwd 添加root用户的密码
用户、组与权限
装Arch顺便也探索一下Linux对权限控制的管理机制,假装自己是个运维。
组有个特别的wheel组,参见 Linux中的wheel用户是什么
并用sudo管理,临时提权
这里有篇文章对于sudo的权限管理讲解很细致, sudo权限集中管理+日志审计实战
配置wheel的权限,让不属于wheel的用户无法使用su
修改 /etc/pam.d/su 文件,找到#auth required pam_wheel.so use_uid
这
一行,将行首的“#”去掉
修改 /etc/login.defs 文件,在最后一行增加“SU_WHEEL_ONLY yes”语句。
添加用户
$ useradd -m -g users -s /usr/bin/bash <用户名>
$ # 该命令创建一个名为 <用户名> 的用户,指定登陆 shell 为 bash,所属主用户组 users,用户文件夹位于 /home/<用户名>。
$ passwd <用户名> # 设置密码
所以执行
useradd -m -g wheel -s /usr/bin/zsh sen
passws sen
配置sudo
pacman -S sudo
visudo
或者 编辑 /etc/sudoers
因为将用户作为wheel组,简单起见,只需要注释掉如下中的NOPASSWD行
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
其他安装的软件包汇总
$ pacman -S zsh git vim neovim curl tree openssh yaourt firefox screenfetch sudo
$ pacman -S numix-circle-icon-theme-git numix-gtk-theme numix-icon-theme-git # xfce 图标及主题美化
$ pacman -S deepin-screenshot
$ pacman -S you-get # bilibili YouTube等视频下载
$ pacman -S electronic-wechat-git # 微信
$ pacman -S foxit-reader # pdf阅读
$ pacman -S goland goland-jre go # JetBrains go IDE
$ pacman -S pycharm # JetBrains python IDE
$ pacman -S rubymine # JetBrains ruby IDE
$ yaourt -S ttf-iosevka ttf-iosevka-term # 适合编程的字体