#!/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_install_user() { fn qemu_install_user local cputype="$1" [[ -n $enable_qemu ]] && { act "installing qemu-arm-static" sudo cp -vf /usr/bin/qemu-arm-static $strapdir/usr/bin/ } [[ -n $cputype ]] && { act "compiling qemu wrapper" cp $R/src/qemu-wrapper.c /tmp/qemu-wrapper.c sed -i -e 's/cortex-a8/'$cputype'/' /tmp/qemu-wrapper.c gcc -static /tmp/qemu-wrapper.c -O3 -s /tmp/qemu-wrapper sudo mv -vf /tmp/qemu-wrapper $strapdir/usr/bin/ print ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/qemu-wrapper:' | sudo tee /proc/sys/fs/binfmt_misc/register } } 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 }