File functions of Package image-qemu

#!/bin/sh

do_usrmerge() {
	for d in bin sbin lib; do
		find "$d" -not -type d -printf "/%P\n" | while read -r f; do
			mkdir -p "usr/$d/${f%/*}"
			mv "$d/$f" "usr/$d/$f"
		done
		rm -rvf "$d"
		ln -s "usr/$d" "$d"
	done
}

makesolv() {
	solv="${1:?}"
	pkgdir="${2:?}"
	nevradir="$PWD/nevra"
	rm -rf "$nevradir"
	mkdir -p "$nevradir"

	if [ -e "$pkgdir/rpm.rpm" ]; then
#		for pkg in "$pkgdir"/*.rpm; do
#			ln -s "$pkg" "$nevradir/$(rpm -qp --qf '%{nevra}.rpm\n' $pkg)"
#		done
		rpms2solv "$pkgdir"/*.rpm > "$solv"
	else
#		for pkg in "$pkgdir"/*.deb; do
#			ln -s "$pkg" "$nevradir/$(dpkg-deb -W --showformat '${Package}-${Version}.${Architecture}.deb\n' $pkg)"
#		done
		deb2solv "$pkgdir"/*.deb > "$solv"
	fi
	dumpsolv -j packages.solv |jq '.repositories[]|.solvables[]|[."solvable:name",."solvable:evr",."solvable:arch",."solvable:mediadir", ."solvable:mediafile"]|join(" ")' -r > "$nevradir/.data"
	while read -r name version arch dn fn; do
		ln -s "$dn/$fn" "$nevradir/$name-$version.$arch.${fn##*.}"
	done < "$nevradir/.data"
}

solve() {
	job="${1:?}"
	pkgdir="${2:?}"
	nevradir="$PWD/nevra"
	testsolv "$job.t" > "$job.result"
	if grep -q "Found.*problems" "$job.result" >&2; then
		return 1
	fi

	if [ -e "$pkgdir/rpm.rpm" ]; then
		while read -r dash nevra; do
			[ "$dash" = '-' ] || continue
			rpm -qp --qf '%{name}\n' "$nevradir/$nevra.rpm"
		done < "$job.result"
	else
		while read -r dash nevra; do
			[ "$dash" = '-' ] || continue
			dpkg-deb -W --showformat '${Package}\n' "$nevradir/$nevra.deb"
		done < "$job.result"
	fi
}

_extract_rpm() {
  rpm2cpio "$1" | cpio -id
  find . -type d -print0 -not -perm '/0200' | xargs -0 --no-run-if-empty chmod u+w
  mkdir -p usr/lib/sysimage/rpm-headers
  dd if="$1" of="usr/lib/sysimage/rpm-headers/${1##*/}" bs=96 count=1
}

_extract_deb() {
  dpkg-deb -x "$1" .
  mkdir -p var/lib/dpkg
  dpkg-deb -f "$1" | sed '/^Package:/{a Status: installed ok installed
}' >> var/lib/dpkg/status
  echo >> var/lib/dpkg/status
  find . -type d -print0 -not -perm '/0200' | xargs -0 --no-run-if-empty chmod u+w
}

extract() {
	pkgdir="${1:?}"
	pfile="${2:?}"
	if [ -e "$pkgdir/filesystem.rpm" ]; then
		x=_extract_rpm
		$x "$pkgdir"/filesystem.rpm
		sfx=rpm
	elif [ -e "$pkgdir"/base-files.deb ]; then
		x=_extract_deb
		"$x" "$pkgdir"/base-files.deb
		sfx=deb
	else
		echo "unknown distro" >&2
		return 1
	fi
	while read -r p; do
		[ "$p" != "base-files" ] || continue
		"$x" "$pkgdir/$p.$sfx"
	done < "$pfile"
}
openSUSE Build Service is sponsored by