ILD

install debian 12 to qemu aarch64 machine
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2024-8-26 站点:Inside Linux Development

    本文试着用qemu安装一个debian 12系统。

windows上msys2安装mingw64 qemu包

    $ pacman -S mingw-w64-x86_64-qemu


下载debian 12 aarch64的安装iso

    从任何一个debian-cd镜像站下载iso文件,比如163网易的镜像站:

https://mirrors.163.com/debian-cd/12.6.0/arm64/iso-cd/debian-12.6.0-arm64-netinst.iso


提取kernel和initrd

    在windows下打开iso文件,提取install.a64下面的vmlinuz和initrd.gz文件。

    

    内核和initrd,将用来启动安装系统。通常对于pc来讲,从iso启动,就能启动安装系统,但是qemu arm64需要指定内核和rootfs,因此需要单独提取出来。


创建disk

$ qemu-img create -f qcow2 debian-aarch64.qcow2 8G

install debian

    到这一步,基本所有的资源都准备好了,开始启动一个qemu aarch64虚拟进行系统的安装

$ qemu-system-aarch64 \

    -machine type=virt \

    -kernel ./vmlinuz -append "console=ttyAMA0" \

    -initrd ./initrd.gz \

    -m 1024 -cpu max \

    -drive file=./debian-12.6.0-arm64-netinst.iso,id=cdrom,if=none,media=cdrom \

    -device virtio-scsi-device \

    -device scsi-cd,drive=cdrom \

    -drive file=./debian-aarch64.qcow2,id=hd,if=none,media=disk \

    -device virtio-scsi-device \

    -device scsi-hd,drive=hd \

    -nographic


    一步步安装,这个过程很漫长,安装了2个小时。安装完毕后,退出qemu进程。

提取安装后的kernel和initrd

    由于qemu不能直接从硬盘启动引导,需要提取安装后的kernel和initrd


    将硬盘文件拷贝到ubuntu或者debian系统

$ sudo apt install libguestfs-tools

$ sudo virt-ls -a debian-aarch64.qcow2 /boot/

System.map-6.1.0-22-arm64

config-6.1.0-22-arm64

initrd.img

initrd.img-6.1.0-22-arm64

initrd.img.old

lost+found

vmlinuz

vmlinuz-6.1.0-22-arm64

vmlinuz.old

$ sudo virt-copy-out -a debian-aarch64.qcow2 /boot/vmlinuz-6.1.0-22-arm64 /boot/initrd.img-6.1.0-22-arm64 .

Run debian

运行安装后的debian,此时已经不需要kernel和initrd引导了。只要添加磁盘文件就可以了。


$ qemu-system-aarch64 \

    -machine type=virt -m 1024 -cpu max \

    -kernel ./vmlinuz-6.1.0-22-arm64 -append "root=/dev/sda2 console=ttyAMA0 rootfstype=ext4" \

    -initrd ./initrd.img-6.1.0-22-arm64 \

    -drive file=./debian-aarch64.qcow2,id=hd,if=none,media=disk \

    -device virtio-scsi-device \

    ls-device scsi-hd,drive=hd \

    -nographic


然而,启动后,kernel command line把 /dev/sda2变成了: 

Kernel command line: root=F:/msys2/dev/sda2 console=ttyAMA0


导致挂载rootfs失败:

[   33.931370] F:/msys2/dev/sda2: Can't open blockdev

mount: mounting F:/msys2/dev/sda2 on /root failed: No such file or directory

Failed to mount F:/msys2/dev/sda2 as root file system.


msys2会自动转换,设置环境变量: MSYS2_ARG_CONV_EXCL='*' 就可以了。


启动后,可以登录:

debian login: yuanjp

Password:

Linux debian 6.1.0-22-arm64 #1 SMP Debian 6.1.94-1 (2024-06-21) aarch64


The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.


Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.


l yuanjp@debian:~$ ls

lhyuanjp@debian:~$ cd /

l yuanjp@debian:/$ ls

 bin   dev  home  lost+found  mnt  proc  run   srv  tmp  var

boot  etc  lib   media       opt  root  sbin  sys  usr

lhuanjp@debian:/$

lhyuanjp@debian:/$

l yuanjp@debian:/$ ip route

 default via 10.0.2.2 dev enp0s1

10.0.2.0/24 dev enp0s1 proto kernel scope link src 10.0.2.15

lyuanjp@debian:/$ ping baidu.com

 PING baidu.com (110.242.68.66) 56(84) bytes of data.

64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=255 time=45.1 ms

64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=255 time=42.9 ms

^C

--- baidu.com ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1004ms

rtt min/avg/max/mdev = 42.891/44.006/45.122/1.115 ms

lyuanjp@debian:/$ ip addr show

 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host noprefixroute

       valid_lft forever preferred_lft forever

2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff

    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s1

       valid_lft 86253sec preferred_lft 86253sec

    inet6 fec0::5054:ff:fe12:3456/64 scope site dynamic mngtmpaddr

       valid_lft 86252sec preferred_lft 14252sec

    inet6 fe80::5054:ff:fe12:3456/64 scope link

       valid_lft forever preferred_lft forever



Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.