[b]使用qemu建立虚拟机[/b]
[b]
1.需要内核文件 bzImage
2.制作操作系统的镜像 hda.img
[/b]
内核编译参考:[url]http://haoningabc.iteye.com/blog/2237569[/url]
制作简单的镜像需要使用[url]https://github.com/killinux/jslinux_reversed[/url]
具体建立一个120M的精简操作系统,debian的etch版本
要求支持ip,ifconfig,dhclient等网络命令
建立方法,这个debootstrap命令国内可能不通,去aws上操作吧
建立方法:
在ubuntu操作系统上
得到
/opt/etch
为所需要的操作系统的文件,注意这里选的包包含基本的网络命令ip,dhclient等
下载生成镜像的工具
主要使用[url]https://github.com/killinux/jslinux_reversed/blob/master/contrib/createimage.sh[/url]
生成hda.img文件
在linux启动的时候默认先调用/sbin/init
所以检查init文件的正确性
mkdir hda
mount -o loop hda.img hda
vim hda/sbin/init
这里注释掉#. /dev/clipboard
注意如果启动失败,可能需要加上
[color=red]/sbin/mdev -s[/color]
作用是初始化/dev下面的文件
这里关键点是挂载/proc /sys 和/dev 三个文件系统
有了bzImage内核和hda.img镜像
就可以建立虚拟机了
或者
-hda或者使用-drive的方式
[b]cache参数可以使用[/b]
[color=red]writethrough 直写模式:在调动write写入数据的同时将数据写入到磁盘缓存中
writeback 回写模式:数据写入到磁盘缓存即返回
none 关闭缓存[/color]
btw,如果不想破坏原来的hda.img
使用增量建立vm
可以指定hda.img为backing_file
即hda.img 作为基础模板,
新的hda_hasbacking_file.qcow2 保存hda.img的增量部分
使用hda_hasbacking_file.qcow2建立的vm不会对原来镜像造成破坏
如果加了-boot order=dc,menu=on
可以控制启动顺序,和是否显示启动菜单
d为光驱,c为第一个硬盘
如果添加网络则用-net 参数
-net nic 为必须的参数表明这是一个网卡配置
vlan表示blan编号,默认0
macaddr是mac地址,进虚拟机后
ctrl+a c 切换到monitor模式
info network查看网卡
可以看到mac地址
52:54:00:12:34:22
是我们建立vm的时候指定的
model为网卡类型,可以查看qemu查看网卡的类型有哪些
更多网络相关的,可以参考
[b]桥接的方式使用qemu建立虚拟机[/b]:[url]http://haoningabc.iteye.com/blog/2306736[/url]
[b]NAT的方式使用qemu建立虚拟机[/b]:
[url]http://haoningabc.iteye.com/blog/2306952[/url]
[b]
1.需要内核文件 bzImage
2.制作操作系统的镜像 hda.img
[/b]
内核编译参考:[url]http://haoningabc.iteye.com/blog/2237569[/url]
制作简单的镜像需要使用[url]https://github.com/killinux/jslinux_reversed[/url]
具体建立一个120M的精简操作系统,debian的etch版本
要求支持ip,ifconfig,dhclient等网络命令
建立方法,这个debootstrap命令国内可能不通,去aws上操作吧
建立方法:
在ubuntu操作系统上
cd /opt/
debootstrap --variant=minbase --include=dhcp-client,ssh,vim,make,psmisc,mini-httpd,net-tools,iproute,iputils-ping,procps,telnet,iptables,wget,tcpdump,curl,gdb,binutils,gcc,libc6-dev,lsof,strace --exclude=locales,aptitude,gnupg,cron,udev,tasksel,rsyslog,groff-base,manpages,gpgv,man-db,apt,debian-archive-keyring,sysv-rc,sysvinit,insserv,python2.6 --arch i386 etch etch 'http://archive.debian.org/debian'
得到
/opt/etch
为所需要的操作系统的文件,注意这里选的包包含基本的网络命令ip,dhclient等
下载生成镜像的工具
主要使用[url]https://github.com/killinux/jslinux_reversed/blob/master/contrib/createimage.sh[/url]
cd /var/www/html/
git clone https://github.com/killinux/jslinux_reversed
mv /opt/etch /var/www/html/jslinux_reversed/contrib/squeeze
./createimage.sh
生成hda.img文件
在linux启动的时候默认先调用/sbin/init
所以检查init文件的正确性
mkdir hda
mount -o loop hda.img hda
vim hda/sbin/init
#!/bin/sh
show_boot_time 2>/dev/null
echo "JSLinux started, initializing..."
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
export HOME=/root
export TERM=vt100
mount -n -t proc /proc /proc
mount -n -t sysfs /sys /sys
mount -n -t devpts devpts /dev/pts
mount -n -t tmpfs /tmp /tmp
mkdir -p "/tmp/root"
ip link set up dev lo
main() {
echo >/dev/clipboard
while :; do
setsid sh -c "exec bash 0<>/dev/ttyS0 1>&0 2>&0"
done
}
#. /dev/clipboard
main "$@"
这里注释掉#. /dev/clipboard
注意如果启动失败,可能需要加上
[color=red]/sbin/mdev -s[/color]
作用是初始化/dev下面的文件
这里关键点是挂载/proc /sys 和/dev 三个文件系统
有了bzImage内核和hda.img镜像
就可以建立虚拟机了
qemu-system-i386 -kernel bzImage -drive file=hda.img,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic
或者
qemu-system-i386 -kernel bzImage -hda hda.img -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic
-hda或者使用-drive的方式
[b]cache参数可以使用[/b]
[color=red]writethrough 直写模式:在调动write写入数据的同时将数据写入到磁盘缓存中
writeback 回写模式:数据写入到磁盘缓存即返回
none 关闭缓存[/color]
btw,如果不想破坏原来的hda.img
使用增量建立vm
可以指定hda.img为backing_file
qemu-img create -f qcow2 -o backing_file=hda.img hda_hasbacking_file.qcow2
即hda.img 作为基础模板,
新的hda_hasbacking_file.qcow2 保存hda.img的增量部分
使用hda_hasbacking_file.qcow2建立的vm不会对原来镜像造成破坏
qemu-system-i386 -kernel bzImage -drive file=hda_hasbacking_file.qcow2,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic
如果加了-boot order=dc,menu=on
可以控制启动顺序,和是否显示启动菜单
d为光驱,c为第一个硬盘
如果添加网络则用-net 参数
qemu-system-i386 -kernel bzImage -drive file=hda_hasbacking_file.qcow2,if=ide,cache=none -append "console=ttyS0 root=/dev/sda rw rdinit=/sbin/init notsc=1" -nographic -boot order=dc,menu=on -net nic,vlan=0,macaddr=52:54:00:12:34:22,model=e1000,addr=08 -net tap,ifname=tap1,script=no,downscript=no
-net nic 为必须的参数表明这是一个网卡配置
vlan表示blan编号,默认0
macaddr是mac地址,进虚拟机后
ctrl+a c 切换到monitor模式
info network查看网卡
root@(none):/# QEMU 2.5.1 monitor - type 'help' for more information
(qemu) info network
hub 0
\ hub0port1: tap.0: index=0,type=tap,ifname=tap1,script=no,downscript=no
\ hub0port0: e1000.0: index=0,type=nic,model=e1000,macaddr=52:54:00:12:34:22
(qemu)
可以看到mac地址
52:54:00:12:34:22
是我们建立vm的时候指定的
model为网卡类型,可以查看qemu查看网卡的类型有哪些
qemu-system-i386 -net nic,model=?
qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio
更多网络相关的,可以参考
[b]桥接的方式使用qemu建立虚拟机[/b]:[url]http://haoningabc.iteye.com/blog/2306736[/url]
[b]NAT的方式使用qemu建立虚拟机[/b]:
[url]http://haoningabc.iteye.com/blog/2306952[/url]