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"
}