D.3. 通过 Unix/Linux 系统来安装 Debian GNU/Linux

本节说明如何通过现有的 Unix 或 Linux 系统来安装 Debian GNU/Linux,而非使用本手册其余部分谈到的由菜单驱动的安装程序。这篇“交叉安装(cross-install)” HOWTO 是应那些原来使用 Redhat、Mandriva 和 SUSE,现转到 Debian GNU/Linux 的用户撰写的。在本节中,我们假设您对于输入 *nix 命令以及在文件系统中穿梭移动并不生疏。同时,在本节中,$ 标志着这个命令是在用户当前使用的系统中输入的,而 # 则表示这个命令是在 Debian chroot 环境中输入的。

一旦您根据自己的要求配置好了新的 Debian 系统,就可以将您原来系统中的用户数据(如果有的话)悉数迁移到新系统里去。然后就能继续爽了。一言以蔽之,这是一次“不停机”的 Debian GNU/Linux 安装。同时,这也是处理那些因为硬件原因不能通过任何引导或者安装介质完成安装的权宜之计。

[注意]注意

由于绝大多数操作都是手动进行,应该记住这将需要您自己对系统做大量地基本配置,并且要具有比常规安装更多的 Debian 和 Linux 知识。不要期望这种执行的结果与常规安装完全相同。您还应该明白这一过程只是建立一个系统的基本步骤。可能还需要额外的安装、或者配置步骤。

D.3.1. 准备开始

如果需重新分区,用您当前的 *nix 的分区工具,至少要划分出一个文件系统,以及交换分区。如果只用控制台,至少要准备 701MB 空间,倘若想装 X,就需要至少 2486MB 的空间了(安装 GNOME 或 KDE 这样的桌面环境,还要更多)。

下一步,在分区上创建文件系统。例如,在 /dev/sda6 分区(以后的例子中,将把它作为 root 分区)建立一个 ext3 格式的文件系统:

  1. # mke2fs -j /dev/sda6

建立 ext2 格式的文件系统,要去掉 -j

初始化并激活交换分区(请把分区号替换成您希望用作 Debian 交换分区的分区号):

  1. # mkswap /dev/sda5
  2. # sync
  3. # swapon /dev/sda5

把一个分区挂载到 /mnt/debinst(这是安装的位置,将来作为您新系统的根(/)文件系统)。挂载点的名称是任意的,后面的步骤将会用到。

  1. # mkdir /mnt/debinst
  2. # mount /dev/sda6 /mnt/debinst
[注意]注意

如果您打算将部分文件系统(例如,/usr)放到独立的分区,在进入下一阶段之前,需要手动创建和加载这些目录。

D.3.2. 安装 debootstrap

Debian 安装程序使用的工具,同时也作为安装 Debian 基本系统的正式方法,是 debootstrap。它调用了 wgetar,而其他的仅依赖 /bin/sh 和基本的 Unix/Linux 工具[24]。如果您的系统里还没有 wgetar,首先安装它们,然后下载并安装 debootstrap

或者您也可以通过下面的步骤手动安装。先新建一个 work 目录,用于解压 .deb 文件:

  1. # mkdir work
  2. # cd work

debootstrap 的二进制文件位于 Debian archive (请确保选择了合适的架构文件)。下载 debootstrap .deb,它位于 pool,把软件包拷贝到 work 目录,并解压该文件。要将这些文件安装到系统,您需要 root 权限。

  1. # ar -x debootstrap_0.X.X_all.deb
  2. # cd /
  3. # zcat /full-path-to-work/work/data.tar.gz | tar xv

D.3.3. 运行 debootstrap

运行 debootstrap 后,它会从 archive 直接下载所需的文件。在下面的命令示例中,您可以根据自己的网络情况,选择一个较近的 Debian archive 镜像,替换 http.us.debian.org/debian。镜像列表位于 http://www.debian.org/mirror/list

如果您已经把一张 buster 版本的 Debian GNU/Linux CD 挂载到 /cdrom,那么也可以把 http URL 替换成 file URL,即:file:/cdrom/debian/

用下面其中一个架构替换 debootstrap 命令中的 ARCHamd64, arm64, armel, armhf, i386, mips, mipsel, powerpc, ppc64el, or s390x

D.3.4. 基本系统的配置

现在您的磁盘上已经有了一个功能虽弱但却是真正的 Debian 系统。键入 chroot 命令进入:

  1. # LANG=C.UTF-8 chroot /mnt/debinst /bin/bash

然后您需要设置与 Debian 基本系统兼容的终端定义,例如:

如果目标架构与主机不同,则需要完成多阶段自举:

  1. /debootstrap/debootstrap --second-stage

D.3.4.1. 创建设备文件

此时,/dev/ 只含有非常基本的设备文件。安装的后续步骤可能还需要更多的设备文件。使用什么样的文件和方法,取决于安装使用的系统、是否采用内核模块,以及在新系统中采用动态 (比如,使用 udev) 或静态设备文件。

可以使用的选项有:

  • 安装 makedev 软件包,并创建默认的静态设备文件,使用(chroot 以后)

    1. # apt install makedev
    2. # mount none /proc -t proc
    3. # cd /dev
    4. # MAKEDEV generic
  • 手动创建指定的设备文件,使用 MAKEDEV

  • 将 host 系统上加载的 /dev 绑定到 target 系统的 /dev;注意,有些软件包的 postinst 脚本会创建设备文件,所以要小心使用改选项。

D.3.4.2. 分区的挂载

您需要新建 /etc/fstab

  1. # editor /etc/fstab

这里有个样板,您可以根据自己的情况对它进行修改:

  1. # /etc/fstab: static file system information.
  2. #
  3. # file system mount point type options dump pass
  4. /dev/XXX / ext3 defaults 0 1
  5. /dev/XXX /boot ext3 ro,nosuid,nodev 0 2
  6. /dev/XXX none swap sw 0 0
  7. proc /proc proc defaults 0 0
  8. /dev/fd0 /media/floppy auto noauto,rw,sync,user,exec 0 0
  9. /dev/cdrom /media/cdrom iso9660 noauto,ro,user,exec 0 0
  10. /dev/XXX /tmp ext3 rw,nosuid,nodev 0 2
  11. /dev/XXX /var ext3 rw,nosuid,nodev 0 2
  12. /dev/XXX /usr ext3 rw,nodev 0 2
  13. /dev/XXX /home ext3 rw,nosuid,nodev 0 2

可以通过 mount -a 来挂载 /etc/fstab 中所标明的所有文件系统,您也可以逐个分别地挂载这些文件系统,像:

  1. # mount /path # e.g.: mount /usr

当前的 Debian 系统为可移动介质创建的挂载点位于 /media, 但为了保持兼容,仍有符号链接处于 / 目录下面。如果需要,可以像下面这样创建这些挂载点:

  1. # cd /media
  2. # mkdir cdrom0
  3. # ln -s cdrom0 cdrom
  4. # cd /
  5. # ln -s media/cdrom

您可以多次挂载 proc 文件系统,通常是在 /proc 位置,但也可以选择任意的地方。如果没有使用 mount -a,请在进入下一步前先将 proc 挂载:

  1. # mount -t proc proc /proc

ls /proc 命令现在应该列出非空目录。如果失败,您应该从 chroot: 以外加载 proc。

  1. # mount -t proc proc /mnt/debinst/proc

D.3.4.3. 设置时区

/etc/default/rcS 文件中的选项决定系统是以 UTC 还是本地时间解释硬件时钟。下面命令可以让您设定和选择时区。

  1. # dpkg-reconfigure tzdata

D.3.4.4. 网络的配置

To configure networking, edit /etc/network/interfaces, /etc/resolv.conf, /etc/hostname and /etc/hosts.

  1. # editor /etc/network/interfaces

Here are some simple examples from /usr/share/doc/ifupdown/examples:

  1. ######################################################################
  2. # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
  3. # See the interfaces(5) manpage for information on what options are
  4. # available.
  5. ######################################################################
  6. # The loopback interface isn't really required any longer, but can be used
  7. # if needed.
  8. #
  9. # auto lo
  10. # iface lo inet loopback
  11. # To use dhcp:
  12. #
  13. # auto eth0
  14. # iface eth0 inet dhcp
  15. # An example static IP setup: (network, broadcast and gateway are optional)
  16. #
  17. # auto eth0
  18. # iface eth0 inet static
  19. # address 192.168.0.42
  20. # network 192.168.0.0
  21. # netmask 255.255.255.0
  22. # broadcast 192.168.0.255
  23. # gateway 192.168.0.1

Enter your nameserver(s) and search directives in /etc/resolv.conf:

  1. # editor /etc/resolv.conf

A simple example /etc/resolv.conf:

  1. search example.com
  2. nameserver 10.1.1.36
  3. nameserver 192.168.9.100

Enter your system’s host name (2 to 63 characters):

  1. # echo DebianHostName > /etc/hostname

And a basic /etc/hosts with IPv6 support:

  1. 127.0.0.1 localhost
  2. 127.0.1.1 DebianHostName
  3. # The following lines are desirable for IPv6 capable hosts
  4. ::1 ip6-localhost ip6-loopback
  5. fe00::0 ip6-localnet
  6. ff00::0 ip6-mcastprefix
  7. ff02::1 ip6-allnodes
  8. ff02::2 ip6-allrouters
  9. ff02::3 ip6-allhosts

If you have multiple network cards, you should arrange the names of driver modules in the /etc/modules file into the desired order. Then during boot, each card will be associated with the interface name (eth0, eth1, etc.) that you expect.

D.3.4.5. 配置 Apt

debootstrap 会创建一个非常基本的 /etc/apt/sources.list 文件用于安装额外的软件包。但您还可以增加一些其他的源,比如源码包和安全更新:

  1. deb-src http://ftp.us.debian.org/debian buster main
  2. deb http://security.debian.org/ buster/updates main
  3. deb-src http://security.debian.org/ buster/updates main

修改源列表之后一定要执行 aptitude update

D.3.4.6. 本地化和键盘的配置

配置您的本地化设定,以便使用英语以外的语言,需要安装 locales 支持软件包,然后进行配置:

  1. # aptitude install locales
  2. # dpkg-reconfigure locales

配置您的键盘(如果需要):

  1. # apt install console-setup
  2. # dpkg-reconfigure keyboard-configuration

注意,在 chroot 里面不能设置键盘,但重新启动以后可以。

D.3.5. 内核的安装

要想启动这个系统,您很可能还需要一个 Linux 内核和一个启动加载程序。可以用下面指令找到那些预先打包的内核:

  1. # apt search linux-image

然后根据所选取的软件包名称安装内核软件包。

  1. # apt install linux-image-arch-etc

D.3.6. Boot Loader 的设置

要让您的 Debian GNU/Linux 系统能够启动,还要创建 boot loader,好让它能加载安装的内核并用上新的根分区。注意 debootstrap 不会安装 boot loader,因此您要在 Debian 的 chroot 中使用 aptitude 完成。

通过 info grubman lilo.conf 可以看到有关设置 bootloader 的指导。如果希望保留用来安装 Debian 的系统,只需要为 Debian 系统添加一条配置信息到现有 grub2 的 grub.cfglilo.conf。对于 lilo.conf,您也可以把这个文件拷贝到新的系统里,然后在新的系统里编辑它。修改好配置,运行 lilo (请记住,在哪个系统里运行 lilo,它就会用哪个系统里的 lilo.conf )。

安装和建立 grub2 非常容易:

  1. # aptitude install grub-pc
  2. # grub-install /dev/sda
  3. # update-grub

第二个命令将安装 grub2(本例中是 sda 的 MBR)。最后的命令是创建一个可用的 /boot/grub/grub.cfg

注意,这里假设已经创建了 /dev/sda 设备文件。另外一种方法是安装 grub2,但它不属于本附录讨论范围。

下面有一个简单的 /etc/lilo.conf 作为例子:

  1. boot=/dev/sda6
  2. root=/dev/sda6
  3. install=menu
  4. delay=20
  5. lba32
  6. image=/vmlinuz
  7. initrd=/initrd.img
  8. label=Debian

D.3.7. 远程访问:安装 SSH 并设置密码

如果您可以通过控制台登录系统,可以跳过此节。如果以后可以通过网络访问系统,则需要安装 SSH 并设置访问权限。

  1. # apt install ssh

默认禁用 root 登录密码,因此可以通过设置密码来设置访问权限,并用密码重新启用 root 登录:

  1. # passwd
  2. # editor /etc/ssh/sshd_config

这是启用的选项:

  1. PermitRootLogin yes

也可通过在 root 帐户中添加 ssh 密钥来设置访问权限:

  1. # mkdir /root/.ssh
  2. # cat << EOF > /root/.ssh/authorized_keys
  3. ssh-rsa ....
  4. EOF

最后,还可以通过添加非 root 用户和设置密码来设置访问权限:

  1. # adduser joe
  2. # passwd joe

D.3.8. 最后一笔

如前所述,安装的是很基本的系统。如果您想让它更成熟一些,有一个简单的方法,使用 “standard” 优先级来安装所有的软件包:

  1. # tasksel install standard

当然,您也可以用 apt 来安装单独的软件包。

安装之后,/var/cache/apt/archives/ 里面会有大量下载的软件包。您可以运行下面命令释放空间:

  1. # apt clean

[24] 它们包括 GNU core 工具和命令,像 sedgreptargzip