Featured image of post Gentoo GNU/Linux 安装指南

Gentoo GNU/Linux 安装指南

Gentoo 是一个面向高级用户的 Linux 发行版,以高度可定制性著称。使用 Portage 包管理系统。允许用户通过 USE Flags、编译选项和内核配置来优化系统,实现高度灵活和可定制的环境。

💡 提示

这里我用 Void Linux 的 ISO 镜像,使用 xgenfstab 生成 fstab 和 xchroot 挂载 “/proc、/sys、/dev、/run” 并进入 chroot 环境。当然,你也可以用 Arch Linux 的 iso 镜像,默认的 genfstab 和 arch-chroot 也是类似的功能。

📝 备注

如需下载 Void Linux ISO 镜像,请访问以下链接。

Void-Linux 北外(bfsu)
live image live image

联网

笔记本连接无线网络可以用 wpa_supplicant,很多发行版都自带有。

ip a 命令查看无线设备,通常类似 wlp1s0、enp33、wlan0。

生成配置文件

1
wpa_passphrase "你的WiFi名称" "你的WiFi密码" > /etc/wpa_supplicant/wpa_supplicant.conf

或者手动写入

1
2
3
4
5
# 写入以下内容
network={
    ssid="你的WiFi名称"
    psk="你的WiFi密码"
    }

连接无线网络

1
wpa_supplicant -B -i wlp1s0 -c /etc/wpa_supplicant/wpa_supplicant.conf

如果跟我一样用的 Void Linux ISO,联网第一步要更新一下xbps,执行以下命令。

换源

1
sed -i 's/default/fastly/' /usr/share/xbps.d/00-repository-main.conf

更新 xbps 以及安装软件包

1
xbps-install -Syu xbps links xz
  • links 命令行浏览器,下载 stage 用的。
  • xz 解压 tar.xz 包。

分区

EFI

分区方案:

磁盘 大小 类型
sda1 300M efi
sda2 4G 交换分区
sda3 剩余空间 /

分区工具 fdisk,用法 fdisk /dev/sdafdisk /dev/nvme,具体名称可通过 lsblk 查看。

 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
fdisk /dev/sda

输入[g] # 将磁盘类型转换成 GPT 类型
输入[n] # 新建分区
默认回车 # 分区号
默认回车 # 第一个扇区
输入[+300M] # 最后一个扇区,设置分区大小为 300M
输入[t] # 更改分区类型
输入[1] # 将分区类型改为 "EFI System"

输入[n] # 新建分区
默认回车 # 分区号
默认回车 # 第一个扇区
输入[+4G] # 最后一个扇区,设置分区大小为 4G
输入[t] # 更改分区类型
默认回车 # 选择需要更改的分区,默认 2 
输入[19] # 将分区类型改为 Linux swap

输入[n] # 新建分区
默认回车 # 分区号
默认回车 # 第一个扇区
默认回车 # 最后一个扇区,设置分区大小为剩余空间
输入[t] # 更改分区类型
默认回车 # 选择需要更改的分区,默认 3 
输入[23] # 将分区类型改为 Linux root (x86_64)

输入[p] # 打印分区表
输入[wq] # 保存退出

当然,根分区你不改成 Linux root (x86_64),默认的 Linux filesystem 也能正常使用。

格式化分区

EFI 分区

1
mkfs.fat -F 32 /dev/sda1

Swap 分区

1
mkswap /dev/sda2

启用 Swap

1
swapon /dev/sda2

/ 分区

1
mkfs.ext4 /dev/sda3

挂载 / 分区

1
mount /dev/sda3 /mnt

MBR

分区方案:

磁盘 大小 类型
sda1 4G 交换分区
sda2 剩余空间 /
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
fdisk /dev/sda

输入[n] # 新建分区
默认回车 # 分区类型
默认回车 # 分区号
默认回车 # 第一个扇区
输入[+4G] # 最后一个扇区,设置分区大小为 +4G
输入[t] # 更改分区类型
输入[82] # 将分区类型更改为 Linux swap / Solaris

输入[n] # 新建分区
默认回车 # 分区类型
默认回车 # 分区号
默认回车 # 第一个扇区
默认回车 # 最后一个扇区,设置分区大小为剩余空间
输入[p] # 打印分区表
输入[wq] # 保存退出

格式化分区

Swap 分区

1
mkswap /dev/sda1

启用 Swap

1
swapon /dev/sda1

/ 分区

1
mkfs.ext4 /dev/sda2

挂载根分区

1
mount /dev/sda2 /mnt

下载 Stage

来源 openrc systemd desktop-openrc desktop-systemd
Gentoo openrc systemd desktop-openrc desktop-systemd
北外 openrc systemd openrc-desktop desktop-systemd

Stage 怎么选

  • 命令行

    • openrc
    • systemd
  • 桌面环境

    • desktop-openrc
    • desktop-systemd

选 openrc 还是 systemd?如果你不知道这个是什么就选 systemd ,主流发行版都是 systemd。

如何下载

  • 用法:links 链接。
  • 操作:『上下键上下移动,左右键返回上一页返回下一页,回车键确认,q 退出』。
1
links https://mirrors.bfsu.edu.cn/gentoo/releases/amd64/autobuilds

Wget

用法:wget 目标文件链接,例如:

1
wget https://distfiles.gentoo.org/releases/amd64/autobuilds/20260610T214636Z/stage3-amd64-desktop-systemd-20260610T214636Z.tar.xz

解压 Stage

1
tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt

创建 EFI 目录

📝 备注

如果是 MBR 就跳过这一步。

1
mkdir /mnt/boot/efi

挂载 EFI 分区

📝 备注

如果是 MBR 这一步也跳过。

1
mount /dev/sda1 /mnt/boot/efi

生成 Fstab

1
xgenfstab -U /mnt > /mnt/etc/fstab

进入 Chroot 环境

1
2
3
xchroot /mnt
source /etc/profile
export PS1="(chroot) ${PS1}"
📝 备注

如果你用的是其他系统的 ISO 镜像,比如 Arch Linux 的或者 Gentoo 官方 ISO 镜像,就需要把上面的 xgenfstab 改成 genfstab ,xchroot 改成 arch-chroot。Gentoo 官方的 ISO 镜像需要安装 genfstab 。

否则请点击 Gentoo Handbook 参阅。

配置 Make.conf

配置文件:/etc/portage/make.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"

# NOTE: This stage was built with the bindist USE flag enabled
MAKEOPTS="-j6" 
ACCEPT_LICENSE="*" 
EMERGE_DEFAULT_OPTS="--getbinpkg --usepkg" 
GENTOO_MIRRORS=https://mirrors.bfsu.edu.cn/gentoo 

# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C.UTF-8
  • -march=native 让编译器针对当前 CPU 自动优化。
  • MAKEOPTS="-jx" 并行编译线程数,x=你的 CPU 线程数。
  • ACCEPT_LICENSE="*" 接受所有许可证,包括闭源软件。如果只想安装自由软件,可以改成 @FREE。
  • EMERGE_DEFAULT_OPTS="--getbinpkg --usepkg" 让 emerge 优先使用预编译二进制包,大幅减少编译时间。
  • GENTOO_MIRRORS emerge-webrsync 快照镜像站。
  • 可选: ACCEPT_KEYWORDS="~amd64" 滚动更新,如果你喜欢保持系统包都是最新的,开启此选项。

同步快照

1
emerge-webrsync

设置主机名

1
echo host > /etc/hostname

配置本地化

1
2
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen

生成 Locale

1
locale-gen

列出 Locale 列表

1
2
3
4
5
6
7
8
9
eselect locale list

Available targets for the LANG variable:
  [1]  C
  [2]  C.UTF-8
  [3]  POSIX
  [4]  en_US.UTF-8
  [5]  zh_CN.UTF-8
  [ ]  (free form)

选择 Locale

1
eselect locale set 4

加载环境

1
env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

设置时区

1
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

设置 Root 密码

1
passwd

配置 Portage 源

创建 repos.conf 目录

1
mkdir /etc/portage/repos.conf

复制示例配置文件

1
cp /usr/share/portage/config/repos.conf /etc/portage/repos.conf/gentoo.conf

配置文件:/etc/portage/repos.conf/gentoo.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[DEFAULT]
main-repo = gentoo

[gentoo]
location = /var/db/repos/gentoo
sync-type = rsync
sync-uri = rsync://mirrors.bfsu.edu.cn/gentoo-portage
auto-sync = yes
sync-rsync-verify-jobs = 1
sync-rsync-verify-metamanifest = yes
sync-rsync-verify-max-age = 3
sync-openpgp-key-package = sec-keys/openpgp-keys-gentoo-release
sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc
sync-openpgp-keyserver = hkps://keys.gentoo.org
sync-openpgp-key-refresh-retry-count = 40
sync-openpgp-key-refresh-retry-overall-timeout = 1200
sync-openpgp-key-refresh-retry-delay-exp-base = 2
sync-openpgp-key-refresh-retry-delay-max = 60
sync-openpgp-key-refresh-retry-delay-mult = 4
sync-webrsync-verify-signature = yes
sync-git-verify-commit-signature = true
💡 提示

只需要改sync-uri,把官方源改成国内源即可。中科大、清华、北外源都行。

配置二进制包源

配置文件:/etc/portage/binrepos.conf/gentoo.conf

1
2
3
4
5
6
7
8
9
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consider using a local mirror.

[gentoo]
priority = 9959
sync-uri = https://mirrors.bfsu.edu.cn/gentoo/releases/amd64/binpackages/23.0/x86-64
verify-signature = true
location = /var/cache/binhost/gentoo

如果你的 CPU 支持 x86-64-v3 把这个加在后面。

1
2
3
4
5
[gentoo-x86-64-v3]
priority = 9999
sync-uri = https://mirrors.bfsu.edu.cn/gentoo/releases/amd64/binpackages/23.0/x86-64-v3/
verify-signature = true
location = /var/cache/binhost/gentoo-x86-64-v3
💡 提示

priority 改成 99599999sync-uri 改成国内中科大、清华、北外源都行。

密钥验证

1
getuto

安装 Cpuid2cpuflags

如果是虚拟机安装 Gentoo ,这一步通常不需要。

1
emerge --ask --oneshot app-portage/cpuid2cpuflags

执行 cpuid2cpuflags

1
cpuid2cpuflags

写入 USE

1
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

安装固件

如果是虚拟机安装 Gentoo ,这一步通常也不需要。

1
emerge linux-firmware

内核

内核推荐 gentoo-kernel-bin 这个是预编译包,自己编译就选 gentoo-kernelgentoo-sources ,至于怎么编译我这里就不过多叙述了。

设置 USE

1
echo "sys-kernel/installkernel dracut" > /etc/portage/package.use/00install-kernel

安装内核

1
emerge installkernel gentoo-kernel-bin

安装 GRUB

1
emerge grub

配置引导

EFI 引导安装

1
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Gentoo GNU/Linux"

MBR 引导安装

1
grub-install /dev/sda

生成 grub.cfg

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

安装 DHCP

1
emerge dhcpcd

开机自启

Openrc

1
rc-update add dhcpcd default

Systemd

1
systemctl enable dhcpcd

无线网络

笔记本使用无线网络的可以装个 wpa_supplicant 或者 iwd ,这里就以 wpa_supplicant 为例。

1
emerge wpa_supplicant

查看无线设备接口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 74:4c:a1:55:9d:23 brd ff:ff:ff:ff:ff:ff
    altname wlx744ca1559d23
    inet 192.168.31.93/24 metric 1024 brd 192.168.31.255 scope global dynamic wlp1s0
       valid_lft 43102sec preferred_lft 43102sec
    inet6 2409:8a5c:b843:bdb0::dc7/128 scope global dynamic noprefixroute
       valid_lft 43102sec preferred_lft 43102sec
    inet6 2409:8a5c:b843:bdb0:764c:a1ff:fe55:9d23/64 scope global mngtmpaddr noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::764c:a1ff:fe55:9d23/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
💡 提示

这里的 wlp1s0就是我的无线设备接口。

配置无线网络

OpenRC

配置文件:/etc/wpa_supplicant/wpa_supplicant.conf

生成配置文件

1
wpa_passphrase "你的WiFi名称" "你的WiFi密码" > /etc/wpa_supplicant/wpa_supplicant.conf

或者手动写入

1
2
3
4
5
6

# 写入以下内容
network={
    ssid="你的WiFi名称"
    psk="你的WiFi密码"
    }

开机自启

1
rc-update add wpa_supplicant default

指定无线设备接口

配置文件:/etc/conf.d/wpa_supplicant

1
wpa_supplicant_args="-i wlp1s0 -c /etc/wpa_supplicant/wpa_supplicant.conf"

Systemd

配置文件:/etc/wpa_supplicant/wpa_supplicant-无线接口名称.conf

生成配置文件

1
wpa_passphrase "你的WiFi名称" "你的密码" > /etc/wpa_supplicant/wpa_supplicant-wlp1s0.conf

或者手动写入

1
2
3
4
5
6
# 写入以下内容

network={
    ssid="你的WiFi名称"
    psk="你的WiFi密码"
    }

开机自启

1
systemctl enable wpa_supplicant@wlp1s0

OpenRC

📌 重要

如果你用的是 OpenRC 需要安装额外的软件,Systemd 请跳过这一步。

系统日志

  • sysklogd 提供传统的系统日志守护进程。默认日志配置开箱即用,无需复杂设置,因此对新手来说是一个不错的选择。
  • syslog-ng 一款功能更强大的高级系统日志程序。更适合有经验的用户使用,其强大的日志处理能力是主要优势,但相应地也需要投入更多时间进行配置。

安装

1
emerge sysklogd

开机自启

1
rc-update add sysklogd default

Cron 守护进程 - 可选

虽然 Cron 守护进程是可选组件,并非所有系统都必须安装,但通常还是建议安装一个。如果完全没有定时任务需求,也可以暂时不安装。

安装

1
emerge cronie

开机自启

1
rc-update add cronie default

时间同步

安装

1
emerge chrony

开机自启

1
rc-update add chronyd default

更多内容请点此 Gentoo Handbook 参阅

退出 Chroot 环境

1
exit

重启进入新系统

1
reboot

设置 DNS

1
echo "nameserver 8.8.8.8" > /etc/resolv.conf

同步 Portage 树

1
emerge --sync

选择 Profile

Profile 怎么选

Profile 会预设好相关的 USE Flags。

📌 重要

什么情况下需要选择 Profile?最初下载 Stage 选择不带 Desktop,现在想要装桌面比如 “Hyprland、Xfce” 的,就需要选择 Profile 为 Desktop 的。最初 Stage 选择带 Desktop 的,直接同步 Portage 和更新 World 就行。

💡 提示

当然,用不惯 OpenRC 想转 Systemd 的也需要切换 Profile,但是不推荐这样。

  1. 只用命令行
  • OpenRC
    • 选 → [1] default/linux/amd64/23.0 (stable)
  • Systemd
    • 选 → [2] default/linux/amd64/23.0/systemd (stable)
  1. 要装桌面环境
  • OpenRC
    • 选 → [3] default/linux/amd64/23.0/desktop (stable)
  • Systemd
    • 选 → [4] default/linux/amd64/23.0/desktop/systemd (stable)
  1. 要装 GNOME
  • OpenRC
    • 选 → [5] default/linux/amd64/23.0/desktop/gnome (stable)
  • Systemd
    • 选 → [6] default/linux/amd64/23.0/desktop/gnome/systemd (stable)
  1. 要装 KDE Plasma
  • OpenRC
    • 选 → [7] default/linux/amd64/23.0/desktop/plasma (stable)
  • Systemd
    • 选 → [8] default/linux/amd64/23.0/desktop/plasma/systemd (stable)

本文使用 Systemd,最初 Stage 选的 Systemd-desktop 所以选的是 [4] default/linux/amd64/23.0/desktop/systemd。如果你后续打算装 KDE 或 GNOME,建议在这一步就选好对应的 Profile,省去后面切换的麻烦。

列出 Profile

 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
eselect profile list

Available profile symlink targets:
  [1]   default/linux/amd64/23.0 (stable)
  [2]   default/linux/amd64/23.0/systemd (stable)
  [3]   default/linux/amd64/23.0/desktop (stable)
  [4]   default/linux/amd64/23.0/desktop/systemd (stable) *
  [5]   default/linux/amd64/23.0/desktop/gnome (stable)
  [6]   default/linux/amd64/23.0/desktop/gnome/systemd (stable)
  [7]   default/linux/amd64/23.0/desktop/plasma (stable)
  [8]   default/linux/amd64/23.0/desktop/plasma/systemd (stable)
  [9]   default/linux/amd64/23.0/no-multilib (stable)
  [10]  default/linux/amd64/23.0/no-multilib/systemd (stable)
  [11]  default/linux/amd64/23.0/no-multilib/hardened (stable)
  [12]  default/linux/amd64/23.0/no-multilib/hardened/systemd (stable)
  [13]  default/linux/amd64/23.0/no-multilib/hardened/selinux (stable)
  [14]  default/linux/amd64/23.0/no-multilib/hardened/selinux/systemd (stable)
  [15]  default/linux/amd64/23.0/no-multilib/prefix (exp)
  [16]  default/linux/amd64/23.0/no-multilib/prefix/kernel-2.6.32+ (exp)
  [17]  default/linux/amd64/23.0/no-multilib/prefix/kernel-2.6.16+ (exp)
  [18]  default/linux/amd64/23.0/no-multilib/prefix/kernel-3.2+ (exp)
  [19]  default/linux/amd64/23.0/llvm (exp)
  [20]  default/linux/amd64/23.0/llvm/systemd (exp)
  [21]  default/linux/amd64/23.0/hardened (stable)
  [22]  default/linux/amd64/23.0/hardened/systemd (stable)
  [23]  default/linux/amd64/23.0/hardened/selinux (stable)
  [24]  default/linux/amd64/23.0/hardened/selinux/systemd (stable)
  [25]  default/linux/amd64/23.0/split-usr (stable)
  [26]  default/linux/amd64/23.0/split-usr/desktop (stable)
  [27]  default/linux/amd64/23.0/split-usr/desktop/gnome (stable)
  [28]  default/linux/amd64/23.0/split-usr/desktop/plasma (stable)
  [29]  default/linux/amd64/23.0/split-usr/no-multilib (stable)
  [30]  default/linux/amd64/23.0/split-usr/no-multilib/selinux (stable)
  [31]  default/linux/amd64/23.0/split-usr/no-multilib/hardened (stable)
  [32]  default/linux/amd64/23.0/split-usr/no-multilib/hardened/selinux (stable)
  [33]  default/linux/amd64/23.0/split-usr/no-multilib/prefix (exp)
  [34]  default/linux/amd64/23.0/split-usr/no-multilib/prefix/kernel-2.6.32+ (exp)
  [35]  default/linux/amd64/23.0/split-usr/no-multilib/prefix/kernel-2.6.16+ (exp)
  [36]  default/linux/amd64/23.0/split-usr/no-multilib/prefix/kernel-3.2+ (exp)
  [37]  default/linux/amd64/23.0/split-usr/llvm (exp)
  [38]  default/linux/amd64/23.0/split-usr/hardened (stable)
  [39]  default/linux/amd64/23.0/split-usr/hardened/selinux (stable)
  [40]  default/linux/amd64/23.0/x32 (dev)
  [41]  default/linux/amd64/23.0/x32/systemd (exp)
  [42]  default/linux/amd64/23.0/split-usr/x32 (exp)
  [43]  default/hurd/amd64/23.0 (exp)
  [44]  default/linux/amd64/23.0/musl (dev)
  [45]  default/linux/amd64/23.0/musl/systemd (dev)
  [46]  default/linux/amd64/23.0/musl/llvm (exp)
  [47]  default/linux/amd64/23.0/musl/llvm/systemd (exp)
  [48]  default/linux/amd64/23.0/musl/hardened (exp)
  [49]  default/linux/amd64/23.0/musl/hardened/systemd (exp)
  [50]  default/linux/amd64/23.0/musl/hardened/selinux (exp)
  [51]  default/linux/amd64/23.0/split-usr/musl (dev)
  [52]  default/linux/amd64/23.0/split-usr/musl/llvm (exp)
  [53]  default/linux/amd64/23.0/split-usr/musl/hardened (exp)
  [54]  default/linux/amd64/23.0/split-usr/musl/hardened/selinux (exp)

选择 Profile

1
eselect profile set 4

更新 World

1
emerge -avuDN @world

写在最后

Gentoo 日常管理

  • 安装软件包 emerge 包名
  • 卸载软件包 emerge -C 包名
  • 搜索软件包 emerge -s 包名
  • 更新单个软件 emerge -1 包名
  • 查询包信息 emerge --info 包名
  • 查询软件包是否安装 emerge -pv 包名
  • 同步软件仓库 emerge --sync
  • 预览更新 emerge -pvuDN @world
  • 更新整个系统 emerge -avuDN @world
  • 清理无用依赖 emerge --depclean

安装桌面请设置以下 USE

💡 提示

如果使用二进制预编译包,这一步是可选设置。

  • amd 显卡
1
echo "*/* VIDEO_CARDS: -* amdgpu radeonsi" > /etc/portage/package.use/00video_cards
  • 英伟达显卡
1
echo "*/* VIDEO_CARDS: -* nvidia" > /etc/portage/package.use/00video_cards
  • 英特尔显卡
1
echo "*/* VIDEO_CARDS: -* intel" > /etc/portage/package.use/00video_cards

关于 USE、KEYWORDS、MASK

  • 全局

配置文件:/etc/portage/make.conf

1
2
USE=""
ACCEPT_KEYWORDS="~amd64"
  • 单包

用于仅针对指定软件包修改 USE Flags 或允许测试版。

单包 USE 配置:/etc/portage/package.use/

单包 KEYWORDS 配置:/etc/portage/package.accept_keywords/

  • MASK

用于屏蔽某些软件包或特定版本,防止其被安装或升级。

控制配置:/etc/portage/package.mask/

本站文章采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
使用 Hugo 构建,主题 StackJimmy 设计。