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

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

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

注意

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

D.3.1. 准备开始

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

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

# mke2fs -j /dev/hda6

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

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

# mkswap /dev/hda5
# sync; sync; sync
# swapon /dev/hda5

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

# mkdir /mnt/debinst
# mount /dev/hda6 /mnt/debinst

注意

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

D.3.2. 安装 debootstrap

Debian 安装程序使用的工具,同时也作为安装 Debian 基本系统的正式方法,是 debootstrap。它调用了 wgetar,而其他的仅依赖 /bin/sh 和基本的 Unix/Linux 工具[31]。如果您的系统里还没有 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://www.debian.org/mirror/list

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

用下面列出的一个架构替换 debootstrap 命令中的 ARCHalpha, amd64, arm, armel, hppa, i386, ia64, m68k, mips, mipsel, powerpc, s390, or sparc

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

D.3.4. 基本系统的配置

虽然功能还很弱,现在您的磁盘上已经有了一个真正的 Debian 系统。用 chroot 命令进入:

# LANG=C chroot /mnt/debinst /bin/bash

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

# export TERM=xterm-color

D.3.4.1. 创建设备文件

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

可以使用的选项有:

  • 创建默认的静态设备文件,使用

    # 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/fd0         /media/floppy auto    noauto,rw,sync,user,exec 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

Current Debian systems have mountpoints for removable media under /media, but keep compatibility symlinks in /. Create these as as needed, for example:

# 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/default/rcS 文件中的选项决定系统是以 UTC 还是本地时间解释硬件时钟。下面命令可以让您设定和选择时区。

# editor /etc/default/rcS
# dpkg-reconfigure tzdata

D.3.4.4. 网络的配置

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

# editor /etc/network/interfaces

Here are some simple examples from /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.
######################################################################

# We always want the loopback interface.
#
auto lo
iface lo inet loopback

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

# An example static IP setup: (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

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

# editor /etc/resolv.conf

A simple example /etc/resolv.conf:

search hqdom.local
nameserver 10.1.1.36
nameserver 192.168.9.100

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

# echo DebianHostName > /etc/hostname

And a basic /etc/hosts with IPv6 support:

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

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 文件用于安装额外的软件包。但您还可以增加一些其他的源,比如源码包和安全更新:

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

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

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

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

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

# aptitude install locales
# dpkg-reconfigure locales

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

# aptitude install console-data
# dpkg-reconfigure console-data

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

D.3.5. 内核的安装

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

# apt-cache search linux-image

如果您打算使用预编译的内核包,可以在使用前创建 /etc/kernel-img.conf 配置文件。这里是一个示例文件:

# Kernel image management overrides
# See kernel-img.conf(5) for details
do_symlinks = yes
relative_links = yes
do_bootloader = yes
do_bootfloppy = no
do_initrd = yes
link_in_boot = no

要了解该文件及其选项的信息,请在安装 kernel-package 软件包后参考其手册(man)。我们建议使用适合您系统的值。

然后使用所选择的内核软件包名来安装。

# aptitude install linux-image-2.6.32-arch-etc

假如您在安装预编译内核包之前没有创建 /etc/kernel-img.conf 文件,安装时会被问到相关的问题。

D.3.6. Boot Loader 的设置

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

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

安装和建立 grub 非常容易:

# aptitude install grub
# grub-install /dev/hda
# update-grub

第二个命令将安装 grub (本例中是 hda 的 MBR)。最后的命令是创建一个胜任的 /boot/grub/menu.lst

注意,这里假设已经创建了 /dev/hda 设备文件。另外一种方法是安装 grub,但本附录中不讨论。

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

boot=/dev/hda6
root=/dev/hda6
install=menu
delay=20
lba32
image=/vmlinuz
initrd=/initrd.img
label=Debian

根据您选择的 bootloader,可以在 /etc/kernel-img.conf 里做一些修改。

对于 grub bootloader,您应该设置 do_bootloader 选项为 no。为了能在安装或删除 Debian 内核时自动更新 /boot/grub/menu.lst,应添加下面几行:

postinst_hook = update-grub
postrm_hook   = update-grub

对于 lilo bootloader,do_bootloader 的值应保留为 yes

D.3.7. 最后一笔

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

# tasksel install standard

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

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

# aptitude clean



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