Skip to content

Test on different architectures #34

Description

@zmughal

Activity

  1. mohawk2 commented on Jan 20, 2022

    @mohawk2
    Member

    My script (put together from the history of the files, rather than a fully-tested script per se):

    #!/bin/sh
    
    # works with QEMU emulator version 6.2.0
    # usage: $0 arch (install|run)
    
    disk=disk.qcow2
    disksize=20G
    
    if [ "$1" = arm64 ]; then
      debian_iso=debian-11.2.0-arm64-netinst.iso
      firmware=QEMU_EFI.fd
      INSTMEDIA="-drive file=$debian_iso,id=cdrom,if=none,media=cdrom \
          -device virtio-scsi-device \
          -device scsi-cd,drive=cdrom"
      BASECMD="qemu-system-aarch64 -smp cpus=6 -M virt -cpu max -m 2G -nographic \
          -bios $firmware \
          -drive file=$disk,if=virtio"
      if [ "$2" = "install" ]; then
        curl -O "https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/$debian_iso"
        curl -OL "http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/$firmware"
        qemu-img create -f qcow2 $disk $disksize
        $BASECMD \
            $INSTMEDIA
      elif [ "$2" = "run" ]; then
        # from https://unix.stackexchange.com/questions/52996/how-to-boot-efi-kernel-using-qemu-kvm
        cat <<'EOF'
    at UEFI prompt:
      fs0:
       cd EFI\debian
       grubaa64.efi
    EOF
        $BASECMD \
            $INSTMEDIA
      else
        echo >&2 "Unknown instruction '$2'"; exit 1;
      fi
    
    elif [ "$1" = armhf ]; then
      # modified from https://willhaley.com/blog/debian-arm-qemu/
      bootprefix=http://ftp.us.debian.org/debian/dists/stable/main/installer-armhf/current/images/cdrom
      prefix=https://cdimage.debian.org/debian-cd/current/armhf/iso-dvd
      debian_iso=debian-11.2.0-armhf-DVD-1.iso
      INSTMEDIA="-drive file=$debian_iso,id=cdrom,if=none,media=cdrom \
          -device virtio-scsi-device \
          -device scsi-cd,drive=cdrom"
      BASECMD="qemu-system-arm -m 4G -machine type=virt -cpu cortex-a7 -smp 4 \
        -drive file=$disk,id=hd,if=none,media=disk \
          -device virtio-scsi-device \
          -device scsi-hd,drive=hd \
        -netdev user,id=net0,hostfwd=tcp::5555-:22 \
          -device virtio-net-device,netdev=net0 \
        -nographic"
      if [ "$2" = "install" ]; then
        init=initrd.gz
        kernel=vmlinuz
        curl -OL "$bootprefix/$init"
        curl -OL "$bootprefix/$kernel"
        curl -OL "$prefix/$debian_iso"
        qemu-img create -f qcow2 $disk $disksize
        $BASECMD \
          -append "console=ttyAMA0" \
          $INSTMEDIA \
          -initrd "$init" \
          -kernel "$kernel"
      elif [ "$2" = "run" ]; then
        init=initrd.img-from-guest
        kernel=vmlinuz-from-guest
        $BASECMD \
          -append "console=ttyAMA0 root=/dev/sda2" \
          $INSTMEDIA \
          -initrd "$init" \
          -kernel "$kernel"
      else
        echo >&2 "Unknown instruction '$2'"; exit 1;
      fi
    
    elif [ "$1" = s390x ]; then
      # modified from https://wiki.qemu.org/Documentation/Platforms/S390X
      bootprefix=https://ftp.debian.org/debian/dists/stable/main/installer-s390x/current/images/generic/
      init=initrd.debian
      kernel=kernel.debian
      prefix=https://cdimage.debian.org/debian-cd/current/s390x/iso-cd
      debian_iso=debian-11.2.0-s390x-netinst.iso
      INSTMEDIA="-cdrom $debian_iso"
      BASECMD="qemu-system-s390x -m 4G -machine s390-ccw-virtio -cpu max,zpci=on -serial mon:stdio -smp 8 \
        -drive file=$disk,if=none,id=drive-virtio-disk0 \
           -device virtio-blk-ccw,devno=fe.0.0001,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
        -nic user,model=virtio,hostfwd=tcp::2222-:22 \
        -nographic"
      if [ "$2" = "install" ]; then
        curl -OL "$bootprefix/$init"
        curl -OL "$bootprefix/$kernel"
        curl -OL "$prefix/$debian_iso"
        qemu-img create -f qcow2 $disk $disksize
        $BASECMD \
          -initrd "$init" \
          -kernel "$kernel" \
          $INSTMEDIA
      elif [ "$2" = "run" ]; then
        $BASECMD
      else
        echo >&2 "Unknown instruction '$2'"; exit 1;
      fi
    
    else
      echo >&2 "Unknown arch '$1'"; exit 1;
    fi

    The commands to clone PDL, and get a sufficient (and parallel) build:

    sudo apt-get install git build-essential gfortran libtest-warn-perl libtest-exception-perl libdevel-checklib-perl libpod-parser-perl libfile-which-perl libfile-map-perl libtest-deep-perl libextutils-f77-perl libinline-c-perl libterm-readkey-perl libextutils-depends-perl libastro-fits-header-perl
    git clone https://github.com/PDLPorters/pdl.git
    export MAKEFLAGS=--jobs=8 HARNESS_OPTIONS=j8

    The Vagrantfile I used to debug on i386, which ran much quicker and was painless to set up:

    Vagrant.configure("2") do |config|
      config.vm.box = "bento/debian-11.2-i386"
      config.vm.provider "virtualbox" do |v|
        v.memory = 4096
        v.cpus = 8
      end
    end
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions