Install from Existing Linux (简体中文)
此指南合并和更新了 Wiki 上三个已经存在的相似安装指南,用于指导所有希望通过已有 Linux 安装 Arch Linux 的用户。已有 Linux 可以是 LiveCD 也可以是以前安装的其它发行版。
Contents |
概述
Archlinux 的 pacman 可以通过 -r 选项配置成在任意目录下工作,运行时指定的目录成为“根目录”。
在从其他发行版的 Live CD 或安装的系统构建 Arch Linux 的过程中,这一功能很有用。另外,它还可以用来在 主机 上建立 chroot 环境,维护一个开发和发行时使用的 "golden-master",以及其他有趣的主题,例如在 NFS 或无盘工作站上建立 rootfs。
如果是一台 x86_64 主机,甚至可以使用i686-pacman来构建一个32为的 chroot 环境。参见 Arch64 Install bundled 32bit system.
在这个指南中,我们将通过/dev/sdxx 指定磁盘。它们代表系统上的目标分区所对应的 dev 项。规范是:
Drive 1, Partition 1: /dev/sda1 Drive 1, Partition 2: /dev/sda2 Drive 2, Partition 1: /dev/sdb1
等等...
一般会用 /dev/sdxx 表示,在您的系统上,可能需要替换为 /dev/sdxx。
在本文中,
- 主机
- 指执行安装的机器.
- 目标机
- 指您要安装 Arch 的机器.
它们可能是同一机器。主机不需要是 Arch 系统 -- 它可以是 Debian 或 Redhat 系统。章节"安装主机系统" 解释如何在主机上安装 pacman。 随后的章节"架设目标系统" 解释如何使用主机上的 pacman 在目标机器上安装 Arch。所以如果主机已经运行了 Arch,您可以跳到 "设置目标系统"。
设置主机系统
在主机 Linux 系统中安装 pacman。此外还需要一个 pacman 镜像列表以下载可用软件包的数据和软件包本身。
获取需要的软件包
需要获取主机系统需要的软件包,这里假设您使用 i686 环境 如果您运行的是 64bit linux,请将 "i686" 替换为 "x86_64"。
这里给出的所有版本号都可能发生变化,请先检查软件包的版本号并记录下来。版本号可以在如下地址找到:
确定版本号后就可以下载它们(更改 ARCH 以满足您的要求):
ARCH=i686 mkdir /tmp/archlinux cd /tmp/archlinux
现在下载需要的软件包:
wget https://www.archlinux.org/packages/core/$ARCH/pacman/download/ --no-check-certificate wget https://www.archlinux.org/packages/core/any/pacman-mirrorlist/download/ --no-check-certificate
pacman 需要一些库才能正常运行:
wget https://www.archlinux.org/packages/core/$ARCH/libarchive/download/ wget https://www.archlinux.org/packages/core/$ARCH/openssl/download/ wget https://www.archlinux.org/packages/core/$ARCH/xz/download/ wget https://www.archlinux.org/packages/core/$ARCH/expat/download/
解压所有需要的包:
for f in *.tar.gz ; do tar xzvf $f ; done
准备运行 pacman 之前,不要忘记编辑 /tmp/archlinux/etc/pacman.conf 让其指向 /tmp/archlinux/etc/pacman.d/mirrorlist 并选择您常用的镜像。为了方便,(假设您使用 bash 或 zsh),可以设置环境变量
export PATH=/tmp/archlinux/usr/bin:$PATH export LD_LIBRARY_PATH=/tmp/archlinux/usr/lib:$LD_LIBRARY_PATH alias pacman="pacman --config /tmp/archlinux/etc/pacman.conf"
在主机上安装需要的文件
解压软件包
如果不介意主机文件的放置位置,可以把所有下载的压缩包解压到根目录,以 root 权限运行:
cd / for f in /tmp/archlinux/pacman-*pkg.tar.gz ; do tar xzf $f done
不同发行版的安装方式
- 如果是从 Ubuntu 9.10's LiveCD (或其他版本)安装,除了 pacman 文件 (共享库)之外,还需要别的文件才能运行。请用 Lucky's 位于[这里] 的脚本获取/安装它们。
- 此外,您可以使用 alien 工具把压缩包转化为发行版使用的软件包,查看软件的手册以获得详细帮助。生成的软件包可以用主机发行版的常用软件包管理工具安装。这种方式与主机系统的整合最好。以基于 Debian 的软件包系统为例:
cd /tmp/archlinux alien -d pacman-3.3.3-1-i686.pkg.tar.gz alien -d pacman-mirrorlist-20101223-1-any.pkg.tar.gz
- 在 Fedora 12 中,我唯一成功安装 pacman 的方法为使用 https://bbs.archlinux.org/viewtopic.php?pid=734336#p734336 提供的脚本,工作的很好。
- 在 Gentoo 中: 在
/etc/portage/package.keywords中添加sys-apps/pacmanunmask pacman. 然后运行emerge -av pacman.
这里有一个 更详细的指南.
配置主机系统
根据喜好配置 /etc/pacman.conf 并删除 /etc/pacman.d/mirrorlist 中多余的镜像。同时,至少启用一些镜像,因为有些可能暂时无法访问。如果未设置镜像,同步时会出错。可以在 /etc/pacman.d/mirrorlist 中手动解析 DNS,因为 i686 的 pacman 可能无法在 x68_64 系统上获取地址信息。
如果是从 LiveCD 安装,而且系统的内存和交换分区的组合比较小(< 1 GB),请务必将 /etc/pacman.conf 中的 cachedir 设置为 Arch 的新分区(即 /newarch/var/cache/pacman/pkg)。 否则可能在下载安装软件包的过程中耗尽内存。
安装目标系统
准备好安装 Arch 的分区
Arch 不是必须位于单独的分区中。可以在一个普通文件夹建立根文件系统,然后从中生成主压缩包或通过网络传输。
然而,大部分用户都会选择将 Arch 安装到独立的分区中。
准备所有需要的分区和文件系统,如果主机包含图形工具,例如 gparted, cfdisk 或者 mandrakes diskdrake 请自行选择使用。
要把一个分区格式化成 ext3 ,你可以使用(假设你的分区是 /dev/sdxx):
mkfs.ext3 /dev/sdxx
要格式化成带日志和dir_index 的 ext3:
mkfs.ext3 -j -O dir_index /dev/sdxx
格式化为 reiserfs:
mkreiserfs /dev/sdxx
格式化交换分区并启用:
mkswap /dev/sdxx swapon /dev/sdxx
其他分区格式可以使用相应的 mkfs 工具,可以用 tab 自动补全查看。可用的文件系统由主机系统决定。
设置好了你的文件系统,就可以挂载了。本文挂载位置是 /newarch,你可以挂载到任意地方。
mkdir /newarch mount /dev/sdxx /newarch
安装核心系统
更新 pacman,需要先创建 /newarch/var/lib/pacman 目录(参见上面的 #设置主机系统):
mkdir -p /newarch/var/lib/pacman pacman -Sy -r /newarch
安装 'base' 软件包组:
pacman -S base -r /newarch
修改主机 pacman.conf 的例子:
pacman --cachedir /newarch/var/cache/pacman/pkg -S base -r /newarch
准备 /dev 节点
首先,保证为 udev 创建了正确的 /dev 节点:
ls -alF /newarch/dev
将生成类似如下内容的列表:
crw------- 1 root root 5, 1 2008-12-27 21:40 console crw-rw-rw- 1 root root 1, 3 2008-12-27 21:42 null crw-rw-rw- 1 root root 1, 5 2008-12-27 21:40 zero
删除并重建包含错误权限( crw-... 和两个 root )和主次设备号(日期前的两个数字)的文件。
cd /newarch/dev rm console ; mknod -m 600 console c 5 1 rm null ; mknod -m 666 null c 1 3 rm zero ; mknod -m 666 zero c 1 5
所有的节点都应该创建完毕,您不需要再重新创建它们。
Chroot
为了让 DNS 正确工作,需要编辑 /newarch/etc/resolv.conf 或者使用现有系统 resolv.conf 替换:
cp /etc/resolv.conf /newarch/etc/
同时,为新系统创建正确的 mirrorlist:
cp /etc/pacman.d/mirrorlist /newarch/etc/pacman.d
为新系统挂载需要的文件系统:
mount -t proc proc /newarch/proc mount -t sysfs sys /newarch/sys mount -o bind /dev /newarch/dev
如果有单独的 /boot 分区,可能也要挂载它,详情参见 Change Root。
都准备完毕后,chroot 到新系统:
chroot /newarch /bin/bash
安装剩余部分
安装你喜欢用的kernel,以及其他你想要安装的包。例如要安装默认内核(已经安装过了),请使用:
pacman -S linux
如果还需要安装别的软件包,使用下面的命令:
pacman -S 包名
配置新系统
编辑 /etc/fstab,记得添加 /, swap 和其他希望使用的分区。
按需要编辑 /etc/rc.conf,/etc/hosts 和 /etc/mkinitcpio.conf。如果要安装到 U 盘,不要忘了在 /etc/mkinitcpio.conf 中增加 usb 钩子然后重新编译initcpio 镜像:
mkinitcpio -p linux
编辑 /etc/locale.gen,取消希望添加 locale 前的注释,然后重建 locale:
locale-gen
设置 Grub
要在 chroot 后使用 GRUB,请更新 /etc/mtab:
grep -v rootfs /proc/mounts > /etc/mtab
现在可以运行:
grub-install /dev/sdx
如果 grub-install 失败,需要手动安装:
grub grub> find /boot/grub/stage1 (如果一切正常,这里应该有显示,否则请检查安装步骤。) grub> root (hd0,X) grub> setup (hd0) grub> quit
再次检查 /boot/grub/menu.lst,根据主机的不同,可能需要将 hda 修改为 sda 并增加 /boot 前缀。
手动恢复 GRUB 库
如果 *stage* 文件配置在位于 /boot/grub,而系统安装的时候并没有安装启动加载程序或者分区/文件系统损坏,误删除等,可以手动安装 grub 库:
# cp -a /usr/lib/grub/i386-pc/* /boot/grub
此 wiki 上包含 GRUB, GRUB2, LILO, Burg 和 Syslinux 的详细页面。参见 Category:Boot loaders。
安装完毕
阅读 新手指南:配置系统,可以忽略 2.11,但是其它部分应作为安装后配置的参考。
exit
umount /newarch/boot # if you mounted this or any other separate partitions
umount /newarch/{proc,sys,dev}
umount /newarch
重启到新 Arch 系统!
Troubleshooting
Kernel Panic
启动时如果遇到下面的错误信息:
kinit: couldn't open console, no such file...
那么可能是因为没有创建必要的设备文件,按照上面的步骤创建设备即可。
根设备 '/dev/sd??' 不存在
如果重启时遇到如下错误信息:
Root device '/dev/sda1' doesn't exist, attempting to create it... etc.
意味着设备命名成立 "hda1" 而不是 "sda1",需要更改 GRUB 或 LILO 设置以使用 "hd??" 或者:
编辑 /etc/mkinitcpio.conf 将"HOOKS=" 一行中的 "ide" 改成 "pata" 并重新生成 initrd。 (请先进入 chroot 系统。)
mkinitcpio -p linux
如果使用 LVM,请在 HOOKS 行添加 "lvm2",并重新生成 initrd。
如果系统需要 PATA ,请将其放置在mkinitcpio.conf 的 autodetect 钩子之前。
如果根分区是 USB 设备,需要在“HOOKS=” 行最前面添加 “usb”,要放在 “base” 之前。
另一个方法:利用 Arch 镜像从已有 Linux 系统安装
准备安装环境
从 Arch 下载页面下载安装镜像然后挂载: 以 i686 CD 镜像为例:
$ mkdir -v /mnt/image $ mount -o loop archlinux-2011.08.19-core-i686.iso /mnt/image
创建镜像解压目录和 chroot 环境
$ mkdir -v /mnt/extract
$ mkdir -pv /mnt/archlinux/lib/modules
$ mkdir -pv /mnt/archlinux/usr/share
$ mkdir -pv /mnt/archlinux/repo/core/{i686,any}
解压镜像内容:
$ cd /mnt/image/arch/i686/ # root-image $ unsquashfs -dest /mnt/extract/root root-image.fs.sfs $ mount -t ext4 /mnt/extract/root/root-image.fs /mnt/archlinux # lib-modules $ unsquashfs -dest /mnt/extract/modules lib-modules.fs.sfs $ mount -t ext4 /mnt/extract/modules/lib-modules.fs /mnt/archlinux/lib/modules # repo-core-i686 $ mount -o loop -t squashfs repo-core-i686.sfs /mnt/archlinux/repo/core/i686 $ cd /mnt/image/arch/any/ # usr-share $ unsquashfs -dest /mnt/extract/share usr-share.fs.sfs $ mount -t ext4 /mnt/extract/share/usr-share.fs /mnt/archlinux/usr/share # repo-core-any $ mount -o loop -t squashfs repo-core-any.sfs /mnt/archlinux/repo/core/any
执行完后,新的 archlinux 目录中已经包含了一个 Arch 系统。
从新环境安装
$ mount -t proc /proc /mnt/archlinux/proc $ mount -t sysfs /sys /mnt/archlinux/sys $ mount -o bind /dev /mnt/archlinux/dev $ chroot /mnt/archlinux /bin/bash
现在,继续运行 Arch 的 aif 安装程序!
$ aif -p interactive
这样就能从 CD 或互联网正常安装,只需注意:
- 目标分区不能被主机系统使用
从 chroot 环境安装 Arch 后,需要卸载 aif 在安装过程中挂载的分区
$ umount /mnt/boot,home...
$ exit
$ umount /mnt/archlinux/{dev,sys,proc}
$ umount /mnt/archlinux/lib/modules
$ umount /mnt/archlinux/usr/share
$ umount /mnt/archlinux/repo/core/{i686,any}
$ umount /mnt/archlinux
$ umount /mnt/image
$ rm -r /mnt/{archlinux,extract}
在离开 chroot 环境前卸载,否则无法卸载 chroot 分区。
通过 chroot 从 主机系统更新和安装软件包
在主机系统或 Arch 新安装的 Grub 的 menu.lst 中添加入口,将 Arch 文件系统加入 /boot/grub/menu.lst 。
现在重启或 chroot 到 Arch 的分区并安装后续软件包:
$ mkdir /mnt/arch $ mount /dev/sdxx /mnt/arch $ mount -t proc proc /mnt/arch/proc $ mount -t sysfs sys /mnt/arch/sys $ mount -o bind /dev /mnt/arch/dev $ chroot /mnt/arch /bin/bash
升级安装软件包:
# pacman -Syu