LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 8934|回复: 16

通过chroot方式安装Arch [最新更新:05-05-17]

[复制链接]
发表于 2005-2-28 15:25:40 | 显示全部楼层 |阅读模式
================================================
最新的chroot安装方式,请参考下面diony的帖子,可以节省不少时间。有任何问题请提出
================================================

什么是Arch?(distrowatch.com的介绍)

Arch Linux是一份为i686优化的轻量级Linux发行,它包含了各种软件的最新稳定版本。软件以.tar.gz格式打包并由包管理器进行跟踪维护,这样的设计使得软件升级非常容易。与其他发行相比,Arch的技术相当之先进。一些相对不大使用(至少对我而言)的东西没有保留下来(例如,info页面)。一次缺省的Arch安装带给你的是一套牢固的系统基础,你可以在此基础上增加软件包从而创建你所需要的定制安装。Arch的包系统允许你方便地创建你自己的软件包,这使得按你自己特定的配置重新编译一份新的软件包变得非常容易。Arch的另一个目标是让用户尽可能地使用到Linux的新特性,例如 ReiserFS、ext3以及devfs。

自从使用lfs后,就喜欢上了可以chroot安装的系统,真方便啊。 所以就想使用chroot方式安装Arch
我现在只有一个20G的ReiserFS分区,已经装了10G的东东。单独分区装Arch不可能了,只能想办法装在这20G的分区上。
先用Qemu装了遍,发现Arch的安装程序很简单,定制性很强,正好适合chroot安装。

开始我的Arch之旅: ^_^

http://mirror.pacific.net.au/ibi ... linux/0.7/iso/i686/
这里可以下载到Arch-0.7的base版和完整版,当初下载时不了解,下载了完整版,结果装的时候只装了base的东东,剩下的都直接从网上下载安装的最新版本

先从ISO中提取出chroot安装需要的东东(initrd.img):
[root@Arch ~]#mount /root/arch-0.7.iso /root/Arch
[root@Arch ~]#cp /root/Arch/isolinux/initrd.img /root
解压缩initrd.img:
[root@Arch ~]#cat initrd.img |gzip -d >initrd
挂载在/root/tmp下:
[root@Arch ~]#mount -o loop initrd tmp/

将initrd.img中的东东全部复制到目标分区上(我挂载在/mnt/distro):
[root@Arch ~]#mkdir /mnt/distro/Arch
[root@Arch ~]#cp -aR /root/tmp/* /mnt/distro/Arch
因为安装程序需要在/dev/vc/5记录安装信息,所以在/dev下创建它:
[root@Arch ~]#cd /mnt/distro/Arch/dev
[root@Arch dev]#mkdir vc
[root@Arch dev]#mknod vc/5 c 4 5
将arch-0.7.iso挂载在src目录下,以备安装软件包:
[root@Arch dev]#mount /root/arch-0.7.iso /mnt/distro/Arch/src -o loop

chroot安装Arch:

因为initrd.img里面没有bash,chroot会出错,cp过去一个:
[root@Arch dev]#cp /bin/bash /mnt/distro/Arch/bin
[root@Arch dev]#chroot /mnt/distro/Arch
[I have no name!@Arch /]#
设置TERM为linux,这样运行setup才不会出错:
[I have no name!@Arch /]#TERM=linux

运行setup开始安装,这个程序在图形下的终端比较难看,我是ctrl+alt+F2在字符下运行的

[I have no name!@Arch /]#arch/setup
首选选择安装介质,选cdrom就可以了。

  1. "Prepare Hard Device"  略去。我可不想分区 :)
  2. "Select Packages"     选择src,选择base,调整安装的软件包,默认即可。
  3. "install Packages"    开始安装,所有软件包安装在/mnt。
  4. "install kernel "     我选择了v2.6IDE的,先装上再考虑自己编译内核 :)
  5. "Configure System"     选择喜欢的编辑器编辑吧,可以再图形界面下做。
  6. "Install Bootloader"   略去。我有/boot分区,使用它管理所有的系统启动。
复制代码

配置系统:

我是按照linuxfans:sutie大侠的文章配置的:
http://www.linuxfans.org/nuke/mo ... wtopic&t=106299

不同的是,我是固定IP上网,说一下固定IP怎么配置吧:
#
# Interfaces to start at boot-up (in this order)
# Declare each interface then list in INTERFACES
# (prefix an interface in INTERFACES with a ! to disable it)
#
# Note: to use DHCP, set your interface to be "dhcp" (eth0="dhcp")
#
lo="lo 127.0.0.1"
eth0="eth0 10.70.54.30 netmask 255.255.255.0 broadcast 10.70.54.255"
#IP:10.70.54.30 netmask:255.255.255.0 broadcast 10.70.54.255
#填上自己的IP,NETMASK.....
# Routes to start at boot-up (in this order)
# Declare each route then list in ROUTES
#   (prefix a route in ROUTES with a ! to disable it)
#
gateway="default gw 10.70.54.254" ------>网关:10.70.54.254
ROUTES=(gateway) ---->注意这里要去掉"!"

配置/etc/fstab:

Arch的fstab和其他发行版表示分区所有不同,表示hda1:/dev/discs/disc0/part1

/etc/fstab:
那些tmpfs,devpts,usbfs...不用修改,添加上需要挂载的分区即可。
.......略
/dev/discs/disc0/part5 /         reiserfs  defaults 0 1
/dev/discs/disc0/part11 swap     swap      defaults 0 0

安装好后我使用lfs中的内核引导Arch,发现无法识别/dev/discs/disc0
只好换回原来表示分区的格式(/dev/hda5),不知道是哪里的问题
我现在fstab的样子:
/dev/hda5          /     reiserfs   defaults,noatime,notail  0       1
/dev/hda11  swap           swap     defaults                 0       0

配置grub/menu.lst:

title Arch Linux
kernel (hd0,7)/vmlinuz26 root=/dev/discs/disc0/part5 ro
这是使用Arch安装程序安装的2.6.10的内核。我b把它复制到/boot分区(hda8),统一管理
title Arch Linux
kernel (hd0,7)/lfs-2.6.10-lvm root=/dev/hda5 vga=791
这是使用lfs内核的配置文件。 无法识别/dev/discs/disc0,只好用/dev/hda5

在Arch中使用已有的内核也很简单:

grub中使用旧内核引导,如上所示,将原内核的/lib/modules/`uname -r`目录复制到Arch /lib/modules中,在/etc/rc.conf中加载需要启动的模块就可以了,当然也可以使用hotplug自动加载,只是hotplug服务启动慢一点

我的/etc/rc.conf加载模块配置:
#
# Module to load at boot-up (in this order)
#   (prefix a module with a ! to disable it)
#
MODULES=(!via_rhine !ide-scsi snd_intel8x0 soundcore snd snd_seq_oss snd_pcm_oss snd_mixer_oss rtc nls_cp936 intel_agp agpgart kqemu)
snd_intel8x0是我的声卡,似乎这里不用加载这么多关于声音的,没实验了,都写上了
关于这些模块名可以从/lib/modules/`uname -r`/modules.alias 得到。

一切做好后,将Arch系统移动到目标分区根目录下:
[root@Arch Arch]#mv /mnt/distro/Arch/mnt/* /mnt/distro
OK,现在就可以reboot,体验Arch的风采啦。 ^_^

base安装好的只是基本系统,没有X,没有KDE....下一步从网上下载回最新版本X,KDE安装上。
也在chroot环境进行吧,不用对着黑呼呼的进度条。还可以听听歌,上上网的
[root@Arch ~]chroot /mnt/distro
[root@Arch Arch]
先同步更新软件数据库:
[root@Arch Arch]pacman -Sy
安装xorg:
[root@Arch Arch]pacman -S xorg
速度很慢的话,可以使用下载工具从镜像站点下载回来xorg的pkg包使用pacman -A 包名安装。

OK,快去pacman吧 !
发表于 2005-2-28 19:54:13 | 显示全部楼层
真正的高手哇!
  1. MODULES=(!via_rhine !ide-scsi snd_intel8x0 soundcore snd snd_seq_oss snd_pcm_oss snd_mixer_oss rtc nls_cp936 intel_agp agpgart kqemu)
  2. snd_intel8x0是我的声卡,似乎这里不用加载这么多关于声音的,没实验了,都写上了
  3. 关于这些模块名可以从/lib/modules/`uname -r`/modules.alias 得到。
复制代码

如果写全,这样就不用hotplug,能稍微加快点启动速度!
回复 支持 反对

使用道具 举报

发表于 2005-2-28 21:16:34 | 显示全部楼层
关于声音模块,只需填上snd_intel8x0就可以了,起他的在modprobe时会自动加载上的。

完全可以取消hotplug的,我的MODULES=(8139too uhci_hcd snd-via82xx nvidia)。取消hotplug,可以缩短大约10秒钟启动时间。

要知道自己需要加载哪些模块,最方便的方法是使用hwd -e来查看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-28 21:56:45 | 显示全部楼层
恩,我记得应该是只加载一个,其他的就会自动加载的。

hwd不错的东东,不知道能不能应用到liveCD中
回复 支持 反对

使用道具 举报

发表于 2005-3-1 15:18:39 | 显示全部楼层
Should be on the wiki。
回复 支持 反对

使用道具 举报

发表于 2005-3-1 18:56:43 | 显示全部楼层
Post by 6692975
恩,我记得应该是只加载一个,其他的就会自动加载的。

hwd不错的东东,不知道能不能应用到liveCD中


hwd本身就是从liveCD中来的。knoppix
回复 支持 反对

使用道具 举报

发表于 2005-3-6 20:07:45 | 显示全部楼层
hotplug这个是起什么作用的??
回复 支持 反对

使用道具 举报

发表于 2005-3-7 08:41:18 | 显示全部楼层
hotplug可以让你临时插入的PCI设备或者USB设备可以立即被使用。

据我理解就是通过后台服务,自动加载相应模块来驱动新设备。

如果你知道你的所有设备使用的是什么模块,就不必使用hotplug了。
回复 支持 反对

使用道具 举报

发表于 2005-3-11 18:09:23 | 显示全部楼层
我在用chroot命令的时候出现的错误:
chenpp:/mnt/disk/arch/bin # chroot /mnt/disk/arch
/bin/bash: error while loading shared libraries: libreadline.so.5: cannot open shared object file: No such file or directory

chenpp:/mnt/disk/arch/dev # whereis libreadline.so.5
libreadline.so: /lib/libreadline.so.5 /usr/lib/libreadline.so

请问楼主,我该怎么做?
/mnt/disk做为安装的目标分区
/mnt/disk/arch是initrd镜像的文件复制目录?
我现在用的系统是suse9.2
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-11 18:50:16 | 显示全部楼层
将/lib/libreadline.so.5 cp到initrd解压的lib下。
cp /lib/libreadline.so.5 /mnt/disk/arch/lib

在主系统中用ldd /bin/bash可以查看bash都需要什么库文件。

缺什么cp过去什么就可以了。

才发现每个发行版的bash需要的库文件是不同的  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表