135 lines
3.8 KiB
Bash
Executable File
135 lines
3.8 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_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
|
|
}
|