libdevuansdk/zlibs/qemu

116 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env zsh
#
# Copyright (c) 2016 Dyne.org Foundation
# libdevuansdk is written and maintained by
# Jaromil <jaromil@dyne.org>
# KatolaZ <katolaz@freaknet.org>
# parazyd <parazyd@dyne.org>
#
# 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 <http://www.gnu.org/licenses/>.
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
}