#!/usr/bin/env zsh # # Copyright (c) 2016 Dyne.org Foundation # libdevuansdk is written and maintained by # Jaromil # KatolaZ # parazyd # # This file is part of libdevuansdk # # This source code is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This software is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this source code. If not, see . qemu_make_img(){ fn qemu_make_img $@ local imgfile=${1:-"$H/builds/${name_default}_${arch}.img"} local imgsize=${2:-2G} local imgformat=${3:-raw} req=(strapdir os release version arch imgfile imgsize) root=$strapdir freq=($root/.done) reqck || return 1 local blockskip=2050 ## create the qemu image notice "Creating qemu image: $imgfile" qemu-img create -f ${imgformat} ${imgfile} ${imgsize} [[ $? = 0 ]] || { error "failed: qemu-img create -f ${imgformat} ${imgfile} ${imgsize}" zsherr; zshexit } sudo parted ${imgfile} --script -- mklabel msdos && sudo parted ${imgfile} --script -- mkpart primary ${blockskip}s -1s && sudo parted ${imgfile} --script -- set 1 boot on [[ $? = 0 ]] || { error "failed: parted $imgfile scripts (mklabel, mkpart and setboot)" zsherr; zshexit } ## setup the loop device loop1=`sudo losetup -f` sudo losetup ${loop1} ${imgfile} [[ $? = 0 ]] || { error "failed: losetup $loop2 $imgfile" zsherr; zshexit } loop2=`sudo losetup -f` sudo losetup -o $((${blockskip} * 512)) ${loop2} ${loop1} [[ $? = 0 ]] || { sudo losetup -d ${loop1} error "failed: losetup -o $((${blockskip} * 512)) ${loop2} ${loop1}" zsherr; zshexit } ## now we create the fs act "creating filesystem" sudo mkfs.ext4 ${loop2} [[ $? = 0 ]] || { sudo losetup -d ${loop2} sudo losetup -d ${loop1} error "failed: mkfs.ext4 $loop2" zsherr; zshexit } ## and we loop-mount it ztmpd mntdir=$ztmpdir sudo mount -o loop ${loop2} ${mntdir} [[ $? = 0 ]] || { sudo losetup -d ${loop2} sudo losetup -d ${loop1} error "failed: mount -o loop ${loop2} ${mntdir}" zsherr; zshexit } func "mntdir: $mntdir" func "strapdir: $strapdir" # now we rsync everything sudo rsync -raX ${strapdir}/ ${mntdir} [[ $? = 0 ]] || { umount $mntdir sudo losetup -d ${loop2} sudo losetup -d ${loop1} error "failed: rsync -raX ${strapdir}/ ${mntdir}" zsherr; zshexit } # we now install the grub bootloader mountdevprocsys ${mntdir} grub_install_target_dev ${mntdir} ${loop1} umountdevprocsys ${mntdir} sync sudo umount ${mntdir} sudo losetup -d ${loop2} sudo losetup -d ${loop1} if [[ ! -z ${imgfile} ]]; then notice "QEMU image created in ::1 imgfile::" ${imgfile} else warning "Unable to create QEMU image file in ::1 imgfile::" ${imgfile} fi }