2016-11-14 20:07:43 +03:00
#!/bin/bash
set -euo pipefail
# Execute this code path on the host
2016-11-22 06:22:51 +03:00
if test -z " ${ INSIDE_VM :- } " ; then
2016-11-14 20:07:43 +03:00
. ${ commondir } /libvm.sh
2016-11-22 06:22:51 +03:00
vm_setup
if ! vm_ssh_wait 30; then
echo "ERROR: A running VM is required for 'make vmcheck'."
exit 1
fi
2016-11-14 20:07:43 +03:00
vm_rsync
2017-07-27 17:16:23 +03:00
vm_cmd env INSIDE_VM = 1 /var/roothome/sync/tests/vmcheck/overlay.sh
2016-11-22 06:22:51 +03:00
vm_reboot
2016-11-14 20:07:43 +03:00
exit 0
fi
set -x
# And then this code path in the VM
2018-01-12 23:55:34 +03:00
# get details from the current default deployment
rpm-ostree status --json > json.txt
json_field( ) {
field = $1 ; shift;
python -c "
2016-11-14 20:07:43 +03:00
import sys, json;
2018-01-12 23:55:34 +03:00
deployment = json.load( open( 'json.txt' ) ) [ 'deployments' ] [ 0]
print deployment.get( '$field' , '' )
exit( ) "
}
commit = $( json_field checksum)
origin = $( json_field origin)
version = $( json_field version)
timestamp = $( json_field timestamp)
[ -n " $timestamp " ]
timestamp = $( date -d " @ $timestamp " "+%b %d %Y" )
rm -f json.txt
2016-11-14 20:07:43 +03:00
if [ [ -z $commit ] ] || ! ostree rev-parse $commit ; then
echo "Error while determining current commit" >& 2
exit 1
fi
cd /ostree/repo/tmp
rm vmcheck -rf
ostree checkout $commit vmcheck --fsync= 0
2017-04-13 17:52:04 +03:00
rm vmcheck/etc -rf
2017-07-27 18:25:38 +03:00
# Now, overlay our built binaries & config files
INSTTREE = /var/roothome/sync/insttree
rsync -rlv $INSTTREE /usr/ vmcheck/usr/
if [ -d $INSTTREE /etc ] ; then # on CentOS, the dbus service file is in /usr
rsync -rlv $INSTTREE /etc/ vmcheck/usr/etc/
fi
2017-09-01 23:35:52 +03:00
2018-01-12 23:55:34 +03:00
# ✀✀✀ BEGIN hack to get --keep-metadata
if ! ostree commit --help | grep -q -e --keep-metadata; then
# this is fine, rsync doesn't modify in place
mount -o rw,remount /usr
# don't overwrite /etc/ to not mess up 3-way merge
rsync -rlv --exclude '/etc/' vmcheck/usr/ /usr/
fi
# ✀✀✀ END hack to get --keep-metadata ✀✀✀
2017-12-22 10:50:19 +03:00
commit_opts =
for opt in --consume --no-bindings; do
if ostree commit --help | grep -q -e " ${ opt } " ; then
commit_opts = " ${ commit_opts } ${ opt } "
fi
done
2017-11-29 05:37:06 +03:00
2018-01-12 23:55:34 +03:00
source_opt = # make this its own var since it contains spaces
if [ $origin != vmcheck ] ; then
source_title = " ${ origin } "
if [ -n " $version " ] ; then
source_title = " ${ source_title } ( ${ version } ; $timestamp ) "
else
source_title = " ${ source_title } ( $timestamp ) "
fi
source_opt = " --add-metadata-string=ostree.source-title=Dev overlay on ${ source_title } "
commit_opts = " ${ commit_opts } --add-metadata-string=rpmostree.original-origin= ${ origin } "
2018-01-12 23:55:34 +03:00
else
2018-01-12 23:55:34 +03:00
source_opt = "--keep-metadata=ostree.source-title"
commit_opts = " ${ commit_opts } --keep-metadata=rpmostree.original-origin "
2018-01-12 23:55:34 +03:00
fi
2018-01-12 23:55:34 +03:00
ostree commit --parent= $commit -b vmcheck \
--link-checkout-speedup ${ commit_opts } " ${ source_opt } " \
2017-11-29 05:37:06 +03:00
--selinux-policy= vmcheck --tree= dir = vmcheck
2016-11-14 20:07:43 +03:00
ostree admin deploy vmcheck