将 Archlinux 塞进 U 盘[安装篇]

Author Avatar
lsbbd 10月 06, 2016
  • 在其它设备中阅读本文章

前言

写这篇文章是第二次在 U 盘里安装,这次是帮黄辉装的。上次自己装的时候大概是心里
比较激动,忘记写文章记录安装过程。这次安装就是用的我 U 盘里的 Archlinux 安装的,
是的没错,用 U 盘给另一个 U 盘安装系统。

在 U 盘里安装 Linux 系统是我很早之前的想法了,但是一直没动手,最近又开始上实验
课,不想用机房的 xp 系统又不想背笨重的笔记本去上课,便想到了在 U 盘里安装一个小
型的系统。

最早有这个想法的时候,是想在网吧里免费蹭网,从 U 盘启动自己的系统,就可以绕过网
吧的计费系统啦。直到上次去见网吧见我朋友,我又不打游戏,坐他旁边玩手机,无聊到
爆,突然想到书包里带着上次做的 Ubuntu 启动盘。于是抱着试一试的心态,插入 U 盘,
成功进入了 Ubuntu,朋友一脸懵逼看着我。不过键盘和鼠标没法用,但至少证明是可行的。

准备工作

  1. 一台安装了 Archlinux 系统的电脑
  2. U 盘一个 (最好不小于 8 GB)

安装 arch-install-script 包

arch-install-script 包中包含了安装 Archlinux 所需的脚本集合,其中包括:

  • pacstrap
  • genfstab
  • arch-chroot

执行:

1
sudo pacman -S arch-install-script

U 盘分区

插入 U 盘,在 dev 目录下找到 U 盘对应的设备代号。使用 parted 进行分区。

注意:

本文中假设 U 盘代号为 sdx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo parted /dev/sdx
GNU Parted 3.2
使用 /dev/sdx
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: Kingston DataTraveler 2.0 (scsi)
Disk /dev/sdx: 7915MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 2097kB 1049kB fat32 bios
2 2097kB 99.6MB 97.5MB fat32 ESP 启动, esp
3 99.6MB 7914MB 7814MB ext4 arch
(parted)

注意:

这里的第一分区是 BISO 启动分区
,GRUB 将 core.img 嵌入到这个分区。

挂载分区

1
2
3
sudo mount /dev/sdx3 /mnt
mkdir /mnt/boot
sudo mount /dev/sdx2 /mnt/boot

安装基本组件base 和 base-devel 组

1
sudo pacstrap -i /mnt base base-devel

生成 fstab

1
# genfstab -U -p /mnt >> /mnt/etc/fstab

说明

  1. 切换到 root 用户,否则执行 genfstab 时权限不够
  2. genfstab 的 -U 参数是使用 UUID 来标识分区,也可使用 -L,使用卷标。

Chroot

1
sudo arch-chroot /mnt bash

设置时区

时区可通过手动和交互两种方式来设置,这里使用交互方式。

交互方式设置时区

执行 tzselect,通过交互方式设置时区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#?

这里选择 4,亚洲,输入后按回车

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Please select a country whose clocks agree with yours.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#?

这里选择 9,中国。

1
2
3
4
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#?

这里选择 1,北京时间。

1
2
3
4
5
6
7
8
9
10
11
The following information has been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Local time is now: Thu Oct 6 17:07:20 CST 2016.
Universal Time is now: Thu Oct 6 09:07:20 UTC 2016.
Is the above information OK?
1) Yes
2) No

输入 1,确认时区。

设置时间标准 为 UTC,并调整 时间漂移:

1
# hwclock --systohc --utc

设置语系环境

编辑 /etc/locale.gen 文件,去掉相应编码的注释。建议选择帶UTF-8的項:

1
# nano /etc/locale.gen

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8

执行 locale-gen 生成 locale 信息。

1
2
3
4
5
6
7
8
# locale-gen
Generating locales...
en_US.UTF-8... done
zh_CN.UTF-8... done
zh_HK.UTF-8... done
zh_TW.UTF-8... done
Generation complete.

设置主机名

1
echo myhostname > /etc/hostname

将 myhostname 替换为想要的主机名。

配置网络

这里我们使用 networkmanager 来管理网络.

安装 networkmanager

1
pacman -S networkmanager

生成 Initramfs

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
# mkinitcpio -p linux
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> Starting build: 4.7.6-1-ARCH
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [autodetect]
-> Running build hook: [modconf]
-> Running build hook: [block]
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'fallback'
-> -k /boot/vmlinuz-linux -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-fallback.img -S autodetect
==> Starting build: 4.7.6-1-ARCH
-> Running build hook: [base]
-> Running build hook: [udev]
-> Running build hook: [modconf]
-> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: aic94xx
-> Running build hook: [filesystems]
-> Running build hook: [keyboard]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating gzip-compressed initcpio image: /boot/initramfs-linux-fallback.img
==> Image generation successful

设置 root 密码

1
passwd

[重点] 安装引导程序

安装过程中最麻烦的就是引导程序了,系统虽然部署好了,但不能让电脑引导也是瞎忙活。
这里以安装 grub 引导程序为为例。

安装 grub 和 efibootmgr

1
# pacman -S grub efibootmgr

安装 grub 到 U 盘上