Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2420373
  • 博文数量: 384
  • 博客积分: 10193
  • 博客等级: 上将
  • 技术积分: 3785
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-09 18:02
文章分类

全部博文(384)

文章存档

2011年(10)

2010年(29)

2009年(39)

2008年(36)

2007年(43)

2006年(198)

2005年(29)

分类: LINUX

2009-12-06 15:21:32

在kvm image上用debootstrap 安装的Debian sid(v20091206)
  作者:Liang Guo(bluestonechina@gmail.com)

本文描述了一种便于自动化安装Debian的方法, 适用于在已有的Debian 环境中快速构建用于kvm的硬盘映像. 本文中, 所有的操作都需要用root来执行.

1 创建kvm image, 如下命令创建一个8G的硬盘影响文件, /vm/sid1.img. 事实上, 安装完基本系统后, 文件系统的占用不到500M.

kvm-img create -f qcow2 /vm/sid1.img 8G

2 在kvm image上建立分区及文件系统. 首先运行kvm-nbd,

kvm-nbd /vm/sid1.img

这样 nbd-client即可通过本地的1024端口访问/vm/sid1.img, 就像一块普通硬盘.
然后运行nbd-client,

modprobe nbd
nbd-client localhost 1024 /dev/nbd0

3 创建分区, 执行

sfdisk /dev/nbd0 -uM << EOF
,1024,82
;
EOF
该命令在/dev/nbd0上建立了2个分区, 第一个分区/dev/nbd0p1大小1g, 类型swap, 第二个分区为剩余的容量,类型未默认类型linux native.

4 创建文件系统, 执行

mkswap /dev/nbd0p1
mkfs.ext4 /dev/nbd0p2

也可以选择其他类型的文件系统, 如ext3, btrfs, nilfs等新的文件系统.

5  挂载分区, 执行

mount /dev/nbd0p2 /mnt/root/
mkdir -p /mnt/root/var/cache/apt/archives/
mkdir -p /mnt/root/var/lib/apt/lists/
mount -o bind /var/cache/apt/archives/ /mnt/root/var/cache/apt/archives/
mount -o bind /var/lib/apt/lists/ /mnt/root/var/lib/apt/lists/

将本机的/var/cache/apt/archives和/var/lib/apt/lists挂载到/mnt/root下, 是为了让debootstrap使用已经缓存在这些目录下的软件包, 而不需要重新下载.

6 执行安装, 其中amd64是架构, 可以是i386, amd64等等. sid指dist, 可以是sid, testing, stable等, 是打算使用的安装源, 最好和当前系统使用的源相同.

/usr/sbin/debootstrap --arch amd64 sid /mnt/root

7 chroot到新安装的环境中

LANG=C chroot /mnt/root /bin/bash

8 安装kernel 和grub

mount -t proc proc /proc
apt-get -y install linux-image-2.6-amd64
apt-get -y install grub-pc

在执行安装前, 需要先挂载/proc文件系统.

9 设置/etc/fstab, /etc/network/interfaces, /etc/hostname, /etc/hosts,

cat >>/etc/fstab <proc                 /proc    proc    defaults        0       0
sysfs                /sys     sysfs   defaults        0       0
/dev/vda1            none     swap    sw              0       0
/dev/vda2            /        ext4    defaults        0       1
EOF

cat >>/etc/network/interfaces<auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 10.10.1.11
  netmask 255.255.255.0

auto eth1
iface eth1 inet static
  address 10.10.2.11
  netmask 255.255.255.0
EOF

echo "sid1" > /etc/hostname

cat >>/etc/hosts <127.0.0.1 localhost sid1
EOF


10 设置root密码

passwd root


11 退出chroot环境, 卸载所有文件系统, 并中断nbd连接

exit
umount /mnt/root/var/cache/apt/archives/
umount /mnt/root/var/lib/apt/lists/
umount /mnt/root/proc
umount /mnt/root
nbd-client -d /dev/nbd0

12 创建一个包含grub的启动软盘映像.

grub-mkfloppy grub.img

13 启动kvm, 执行

kvm -m 1G -fda /root/grub.img -drive file=/vm/sid1.img,if=virtio,index=0,media=disk,boot=on -boot a

14 使用磁盘中的grub引导硬盘中的系统, 在GRUB>提示符下输入:

root (hd0,2)
linux /vmlinuz root=/dev/vda2
initrd /initrd.img
boot

15 将grub安装到硬盘, 使用步骤10中设置的密码登录系统, 然后运行

grub-install --force /dev/vda
update-grub
shutdown -h now

16 现在可以使用如下命令启动虚拟机, 并正常运行了.

kvm -m 1G -drive file=/vm/sid1.img,if=virtio,index=0,media=disk,boot=on


阅读(2674) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~