raw image operations

This commit is contained in:
parazyd 2016-06-08 18:29:00 +02:00
parent 8e1d14f13f
commit 4e4f10ef42
No known key found for this signature in database
GPG Key ID: F0CB28FCF78637DE
5 changed files with 197 additions and 3 deletions

6
config
View File

@ -49,10 +49,14 @@ base_packages=(bzip2 dialog apt-utils fakeroot e2fsprogs parted)
# other system packages
system_packages=(sysvinit ssh)
# size of raw image file in MB
imgsize=1337
## libdevuansdk-specific settings
workdir="$H/workdir"
strapdir="${workdir}/${os}-${release}-${version}-${arch}"
strapdir="${workdir}/${os}-${release}-${version}"
# declare zuper globals
vars+=(os release version mirror section)
vars+=(workdir strapdir)
vars+=(imgsize)

View File

@ -7,8 +7,6 @@ libdevuansdk functions
Main function, goes through stages 1, 2, and 3 of debootstrap.
Other internal functions are prefixed with `config_` and `tar_`
### bootstrap_config_cleanup() ###
Final cleanup of the rootfs.
@ -25,6 +23,23 @@ Make a tarball of a base working system, ready to be worked on later.
Unpack the tarball of a base working system to the strapdir.
# zlibs/imaging
## img_mkimage() ##
Uses dd to dump zeroes into a raw .img of the preconfigured size.
## img_partimage_dos() ##
Partitions the raw image into dos format and formats (boot=ext2; root=ext4)
## img_partimage_gpt() ##
Partitions the raw image into gpt format and formats (boot=ext2; root=ext4)
## img_mountimage() ##
Mounts the root and boot partitions in `$workdir/rootp` in order to work on it.
## img_umountimage() ##
Undoes the above function.
# zlibs/helpers
## escalate()
@ -35,6 +50,10 @@ arguments, user and command in the style of:
escalate root "chroot /somewhere/where/i/want/to"
```
## findloopmapp()
For the raw image. Finds a free loopdevice and makes a /dev/mapper device which
is then kpartx-ed to give us partitions we can mount.
## mountdevproc()
Mounts `/dev`, `/dev/pts`, and `/proc` where needed. Takes one argument, which
is the path containing those. ex:
@ -46,6 +65,9 @@ mountdevproc /path/to/bootstrapped/chroot
## umountdevproc()
Does the opposite of `mountdevproc`.
## silly()
Because NSA
# zlibs/sysconf
NOTE: everything is printed to stdout. Pipe or redirect if you want to write on
storage.

View File

@ -57,6 +57,7 @@ vars+=(R H E)
source $E/config
source $R/zlibs/debootstrap
source $R/zlibs/helpers
source $R/zlibs/imaging
source $R/zlibs/sysconf
# conclude initialization

View File

@ -37,6 +37,23 @@ escalate() {
fi
}
findloopmapp() {
fn findloopmapp
req=(imgpath)
ckreq || return 1
loopdevice=`sudo losetup -f --show ${imgpath}`
mappdevice=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
func "Loop device: ::1 loopdev::" $loopdevice
func "Mapper device: ::1 mappdev::" $mappdevice
silly sleep
mappdevice="/dev/mapper/${mappdevice}"
bootpart=${mappdevice}p1
rootpart=${mappdevice}p2
}
mountdevproc() {
fn mountdevproc $@
local mntdir="$1"
@ -58,3 +75,44 @@ umountdevproc() {
escalate "root" "umount ${mntdir}/dev" && act "unmounted /dev" && sleep 2
escalate "root" "umount ${mntdir}/proc" && act "unmounted /proc" && sleep 2
}
silly() {
fn silly
# cheers mailpile!
funneh=("do not think of purple hippos"
"increasing entropy & scrambling bits"
"indexing kittens..."
"patching bugs..."
"spinning violently around the y-axis"
"warming up particle accelerator"
"this server is powered by a lemon and two electrodes"
"becoming self-aware"
"BCC-ing ALL THE SPIES!"
"all of your config settings & passwords are encrypted with AES-256"
"the most common e-mail password is 123456, hopefully yours is different"
"good things come to those who wait"
"Make Free Software and be happy"
"We like volcanos, do you like volcanos?"
"Crossing out swear words..."
"Informing David Cameron of suspicious ac^H^H^H ... naaah :)"
"Abandon all hope, ye who enter here"
"Compiling bullshit bingo grid..."
"Estimating chance of asteroid hitting Earth"
"Applying coupons..."
"Backing up the entire Internet..."
"Making you wait for no reason"
"Doing nothing"
"Pay no attention to the man behind the curtain"
"You are great just the way you are"
"Supplying monkeys with typewriters"
"Swapping time and space"
"Self potato"
"Hey, there is some Nigerian prince here who wants to give you twenty million dollars..."
"A million hamsters are spinning their wheels right now")
local rnd=`shuf -i1-30 -n 1`
act "${funneh[$rnd]}"
[[ $1 == "sleep" ]] && sleep 4
}

109
zlibs/imaging Normal file
View File

@ -0,0 +1,109 @@
#!/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/>.
## Imaging
vars+=(imgname imgpath)
img_mkimage() {
fn img_mkimage
imgpath=${strapdir}.img
req=(imgpath imgsize)
ckreq || return 1
imgname=`basename ${imgpath}`
notice "Creating raw image..."
dd if=/dev/zero \
of="${imgpath}" \
bs=1M count=${imgsize}
}
img_partimage_dos() {
fn img_partimage_dos
req=(imgname imgpath)
ckreq || return 1
notice "Partitioning with dos"
pushd ${workdir}
parted ${imgname} --script -- mklabel msdos
parted ${imgname} --script -- mkpart primary ${dos_boot_size}
parted ${imgname} --script -- mkpart primary ${dos_root_size}
# setup loopdevice and mappdevice (zlibs/helpers)
findloopmapp
notice "Formatting partitions..."
sudo mkfs.ext2 ${bootpart}
sudo mkfs.ext4 ${rootpart}
popd
}
img_partimage_gpt() {
fn img_partimage_gpt
req=(imgname imgpath)
ckreq || return 1
notice "Partitioning with gpt"
pushd ${workdir}
parted ${imgname} --script -- mklabel gpt
cgpt create -z ${imgname}
cgpt create ${imgname}
cgpt add -i 1 -t kernel -b 8192 -s 32768 -l kernel -S 1 -T 5 -P 10 ${imgname}
cgpt add -i 2 -t data -b 40960 -s `expr $(cgpt show ${imgname} \
| awk '/Sec GPT table/ {print \$1}') - 40960` -l Root ${imgname}
# setup loopdevice and mappdevice (zlibs/helpers)
findloopmapp
notice "Formatting partitions..."
sudo mkfs.ext2 -L bootfs $bootpart
sudo mkfs.ext4 -L rootfs $rootpart
popd
}
img_mountimage() {
fn img_mountimage
req=(bootpart rootpart workdir)
ckreq || return 1
mkdir -p ${workdir}/rootp
escalate root "mount ${rootpart} ${workdir}/rootp" && act "mounted root partition"
escalate root "mount ${bootpart} ${workdir}/rootp/boot" && act "mounted root partition"
}
img_umountimage() {
fn img_umountimage
req=(bootpart rootpart workdir)
ckreq || return 1
escalate root "umount ${workdir}/rootp/boot" && act "umounted boot partition"
escalate root "umount ${workdir}/rootp" && act "umounted root partition"
}