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 的分区工具,至少要划分出一个文件系统,以及交换分区。如果只用控制台,至少要准备 1012MB 空间,倘若想装 X,就需要至少 2539MB 的空间了(安装 GNOME 或 KDE 这样的桌面环境,还要更多)。

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

# mke2fs -j /dev/sda6

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

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

# mkswap /dev/sda5
# sync
# swapon /dev/sda5

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

# mkdir /mnt/debinst
# mount /dev/sda6 /mnt/debinst

[注意] 注意

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

D.3.2. 安装 debootstrap

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

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

# mkdir work
# cd work

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

# ar -x debootstrap_0.X.X_all.deb
# cd /
# 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://iwawocd.cewmufwd.tk/mirror/list

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

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

# /usr/sbin/debootstrap --arch ARCH bookworm \
     /mnt/debinst http://ftp.us.debian.org/debian

如果目的架构与主机不同,那么应该添加 --foreign 选项。

D.3.4. 基本系统的配置

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

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

如果目标架构与主机不同,那么需要首先将 qemu-user-static 复制到新的主机:

# cp /usr/bin/qemu-ARCH-static /mnt/debinst/usr/bin
# LANG=C.UTF-8 chroot /mnt/debinst qemu-ARCH-static /bin/bash

chrooting 之后,会需要设置终端定义与 Debian 基本系统兼容,例如:

# export TERM=xterm-color

依赖于 TERM 的值,会必须安装 ncurses-term 软件包,来从中得到支持。

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

/debootstrap/debootstrap --second-stage

D.3.4.1. 创建设备文件

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

可以使用的选项有:

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

    # apt install makedev
    # mount none /proc -t proc
    # cd /dev
    # MAKEDEV generic
    

  • 手动创建指定的设备文件,使用 MAKEDEV

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

D.3.4.2. 分区的挂载

您需要新建 /etc/fstab

# editor /etc/fstab

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

# /etc/fstab: static file system information.
#
# file system    mount point   type    options                  dump pass
/dev/XXX         /             ext3    defaults                 0    1
/dev/XXX         /boot         ext3    ro,nosuid,nodev          0    2

/dev/XXX         none          swap    sw                       0    0
proc             /proc         proc    defaults                 0    0

/dev/cdrom       /media/cdrom  iso9660 noauto,ro,user,exec      0    0

/dev/XXX         /tmp          ext3    rw,nosuid,nodev          0    2
/dev/XXX         /var          ext3    rw,nosuid,nodev          0    2
/dev/XXX         /usr          ext3    rw,nodev                 0    2
/dev/XXX         /home         ext3    rw,nosuid,nodev          0    2

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

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

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

# cd /media
# mkdir cdrom0
# ln -s cdrom0 cdrom
# cd /
# ln -s media/cdrom

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

# mount -t proc proc /proc

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

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

D.3.4.3. 设置时区

/etc/adjtime 的第三行设置为 UTCLOCAL,决定系统是否将认为硬件时钟被设置为UTC各自的本地时间。后面的命令允许设置它。

# editor /etc/adjtime

这是个例子:

0.0 0 0.0
0
UTC

后面的命令允许选择时区。

# dpkg-reconfigure tzdata

D.3.4.4. 网络的配置

要配置网络,编辑 /etc/network/interfaces/etc/resolv.conf/etc/hostname/etc/hosts

# editor /etc/network/interfaces

以下的简单例子来自 /usr/share/doc/ifupdown/examples

######################################################################
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
# See the interfaces(5) manpage for information on what options are
# available.
######################################################################

# The loopback interface isn't really required any longer, but can be used
# if needed.
#
# auto lo
# iface lo inet loopback

# To use dhcp:
#
# auto eth0
# iface eth0 inet dhcp

# An example static IP setup: (network, broadcast and gateway are optional)
#
# auto eth0
# iface eth0 inet static
#     address 192.168.0.42
#     network 192.168.0.0
#     netmask 255.255.255.0
#     broadcast 192.168.0.255
#     gateway 192.168.0.1

/etc/resolv.conf 输入您的名称服务器和搜索域:

# editor /etc/resolv.conf

来自 /etc/resolv.conf 的简单示例:

search example.com
nameserver 10.1.1.36
nameserver 192.168.9.100

输入系统的主机名(2到63个字符):

# echo DebianHostName > /etc/hostname

简单的带 IPv6 支持的 /etc/hosts

127.0.0.1 localhost
127.0.1.1 DebianHostName

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

如果您有多张网卡,您应该在 /etc/modules 文件内以适当的顺序排列驱动程序模块名。然后在启动期间,每张卡将会获得您期望的接口名称(eth0,eth1,等等)。

D.3.4.5. 配置 Apt

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

deb-src http://ftp.us.debian.org/debian bookworm main

deb http://security.debian.org/ bookworm-security main
deb-src http://security.debian.org/ bookworm-security main

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

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

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

# aptitude install locales
# dpkg-reconfigure locales

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

# apt install console-setup
# dpkg-reconfigure keyboard-configuration 

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

D.3.5. 内核的安装

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

# apt search linux-image

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

# apt install linux-image-arch-etc

D.3.6. Boot Loader 的设置

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

通过查阅 info grub 可以得到一些有关设置 bootloader 的提示。如果您希望继续保留曾经安装 Debian 的系统,那么安装到您现有的 grub2 grub.cfg 中。

安装和建立 grub2 非常容易:

# aptitude install grub-pc
# grub-install /dev/sda
# update-grub

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

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

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

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

# apt install ssh

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

# passwd
# editor /etc/ssh/sshd_config

这是启用的选项:

PermitRootLogin yes

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

# mkdir /root/.ssh
# cat << EOF > /root/.ssh/authorized_keys
ssh-rsa ....
EOF

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

# adduser joe
# passwd joe

D.3.8. 最后一笔

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

# tasksel install standard

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

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

# apt clean



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