Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:adrianSuSE
build
build-pkg-rpm
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File build-pkg-rpm of Package build
# # RPM specific functions. # ################################################################ # # Copyright (c) 1995-2014 SUSE Linux Products GmbH # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 or 3 as # published by the Free Software Foundation. # # This program 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 program (see the file COPYING); if not, write to the # Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # ################################################################ pkg_initdb_rpm() { echo "initializing rpm db..." mkdir -p $BUILD_ROOT/var/lib/rpm # rpm v5 does not have initdb if ! test -e $BUILD_ROOT/usr/lib/rpm/cpuinfo.yaml ; then if test -x $BUILD_ROOT/usr/bin/rpmdb ; then chroot $BUILD_ROOT /usr/bin/rpmdb --initdb || cleanup_and_exit 1 else chroot $BUILD_ROOT rpm --initdb || cleanup_and_exit 1 fi fi # hack: add nofsync to db config to speed up install mkdir -p $BUILD_ROOT/root DBI_OTHER=`chroot $BUILD_ROOT rpm --eval '%{?__dbi_other}'` echo "%__dbi_other $DBI_OTHER nofsync" > $BUILD_ROOT/.rpmmacros echo "%__dbi_other $DBI_OTHER nofsync" > $BUILD_ROOT/root/.rpmmacros } pkg_prepare_rpm() { rpm_set_checkopts rpm_init_cumulate } pkg_erase_rpm() { chroot $BUILD_ROOT rpm --nodeps -e $PKG 2>&1 | { local retry while read line; do case "$line" in r*failed:\ No\ such\ file\ or\ directory) ;; error:\ failed\ to\ stat\ *:\ No\ such\ file\ or\ directory) ;; error:\ *scriptlet\ failed*) echo "$line" retry=1 ;; *) echo "$line" ;; esac done if test -n "$retry" ; then echo "re-try deleting $PKG using --noscripts" chroot $BUILD_ROOT rpm --nodeps --noscripts -e $PKG || true fi } } rpm_set_checkopts() { RPMCHECKOPTS= # on Fedora 10 rpmbuild is in a separate package so we need something else to # detect rpm4 test -x $BUILD_ROOT/usr/bin/rpmquery && RPMCHECKOPTS="--nodigest --nosignature" } rpm_init_cumulate() { cumulate=-1 CUMULATED_LIST=() CUMULATED_PIDS=() CUMULATED_HMD5=() DO_CUMULATE= local cumulaterpms=$(queryconfig --dist "$BUILD_DIST" --configdir "$CONFIG_DIR" --archpath "$BUILD_ARCH" buildflags cumulaterpms) if test -n "$cumulaterpms" ; then test "$cumulaterpms" != 0 && DO_CUMULATE=true else # compatibility: auto-set cumulate for newer suse distros typeset -ri suse_version=$(queryconfig --dist "$BUILD_DIST" --configdir "$CONFIG_DIR" --archpath "$BUILD_ARCH" eval '%{?suse_version}') if ((suse_version > 1220)) ; then DO_CUMULATE=true fi fi } pkg_verify_installed_rpm() { chroot $BUILD_ROOT rpm --verify $PKG 2>&1 | tee $TMPFILE if grep ^missing $TMPFILE > /dev/null ; then return 1 fi return 0 } pkg_cumulate_rpm() { test "$DO_CUMULATE" = true || return 1 # work around for cross-build installs, we must not overwrite the running rpm if test "$PKG" = rpm ; then for i in $BUILD_ROOT/.init_b_cache/preinstalls/rpm-x86-* ; do test -e "$i" && return 1 done fi let cumulate++ CUMULATED_LIST[$cumulate]=".init_b_cache/$PKG.rpm" CUMULATED_PIDS[$cumulate]="$PKGID" CUMULATED_HMD5[$cumulate]="$PKG_HDRMD5" return 0 } pkg_install_rpm() { export ADDITIONAL_PARAMS= if test "$USE_FORCE" = true ; then export ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --force" fi # work around for cross-build installs, we must not overwrite the running rpm if test "$PKG" = rpm ; then for i in $BUILD_ROOT/.init_b_cache/preinstalls/rpm-x86-* ; do test -e "$i" && ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --justdb" done fi ( cd $BUILD_ROOT && chroot $BUILD_ROOT rpm --ignorearch --nodeps -U --oldpackage --ignoresize $RPMCHECKOPTS \ $ADDITIONAL_PARAMS .init_b_cache/$PKG.rpm 2>&1 || \ touch $BUILD_ROOT/exit ) | \ grep -v "^warning:.*saved as.*rpmorig$" } pkg_sysrootinstall_rpm() { if test "x$1" = "x--prepare" ; then assert_dir_path "$BUILD_SYSROOT" chroot $BUILD_ROOT mkdir -p "$BUILD_SYSROOT" chroot $BUILD_ROOT rpm --root "$BUILD_SYSROOT" --initdb local installed=$(chroot $BUILD_ROOT rpm --root "$BUILD_SYSROOT" -qa) test -n "$installed" && chroot $BUILD_ROOT rpm --root "$BUILD_SYSROOT" --nodeps --noscripts -e --allmatches $installed return fi if test "x$1" = "x--finalize" ; then return fi export ADDITIONAL_PARAMS= if test "$USE_FORCE" = true ; then export ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --force" fi ( cd $BUILD_ROOT && chroot $BUILD_ROOT rpm --ignorearch --nodeps -U --oldpackage --ignoresize $RPMCHECKOPTS \ $ADDITIONAL_PARAMS --noscripts --root "$BUILD_SYSROOT" .init_b_cache/$PKG.rpm 2>&1 || \ touch $BUILD_ROOT/exit ) | \ grep -v "^warning:.*saved as.*rpmorig$" } pkg_finalize_rpm() { if test -n "${CUMULATED_LIST[*]}" ; then echo "now installing cumulated packages" for ((num=0; num<=cumulate; num++)) ; do echo ${CUMULATED_LIST[$num]} PKG=${CUMULATED_LIST[$num]##*/} test "$BUILD_ROOT/.init_b_cache/rpms/$PKG" -ef "$BUILD_ROOT/${CUMULATED_LIST[$num]}" && continue cp --remove-destination $BUILD_ROOT/.init_b_cache/rpms/$PKG $BUILD_ROOT/${CUMULATED_LIST[$num]} || cleanup_and_exit 1 done > $BUILD_ROOT/.init_b_cache/manifest ( cd $BUILD_ROOT && chroot $BUILD_ROOT rpm --ignorearch --nodeps -Uh --oldpackage --ignoresize --verbose $RPMCHECKOPTS \ $ADDITIONAL_PARAMS .init_b_cache/manifest 2>&1 || touch $BUILD_ROOT/exit ) for ((num=0; num<=cumulate; num++)) ; do rm -f $BUILD_ROOT/${CUMULATED_LIST[$num]} done rm -f $BUILD_ROOT/.init_b_cache/manifest check_exit for ((num=0; num<=cumulate; num++)) ; do PKG=${CUMULATED_LIST[$num]##*/} echo "${CUMULATED_PIDS[$num]}" > $BUILD_ROOT/installed-pkg/${PKG%.rpm} test -n "${CUMULATED_HMD5[$num]}" || continue echo "${CUMULATED_HMD5[$num]} ${CUMULATED_PIDS[$num]}" > $BUILD_ROOT/.preinstall_image/${PKG%.rpm} done fi } RPM_PAYLOADDECOMPRESS_PROBED= probe_rpm_payloaddecompress() { local l RPM_PAYLOADDECOMPRESS_PROBED=true RPM_PAYLOADDECOMPRESS_LZMA="lzma -d" RPM_PAYLOADDECOMPRESS_XZ="xz -d" RPM_PAYLOADDECOMPRESS_ZSTD="zstd -d" while read l ; do case "$l" in *rpmlib\(PayloadIsLzma\)*) RPM_PAYLOADDECOMPRESS_LZMA=cat ;; *rpmlib\(PayloadIsXz\)*) RPM_PAYLOADDECOMPRESS_XZ=cat ;; *rpmlib\(PayloadIsZstd\)*) RPM_PAYLOADDECOMPRESS_ZSTD=cat ;; esac done < <(rpm --showrc) } check_rpm_decompressor() { if ! "$1" </dev/null >/dev/null 2>&1 ; then test -f "$BUILD_DIR/${1}dec.sh" || cleanup_and_exit 3 "no $1 decoder available in host system" PAYLOADDECOMPRESS="bash $BUILD_DIR/${1}dec.sh" fi } pkg_preinstall_rpm() { test -d "$BUILD_INIT_CACHE/scripts" || mkdir -p "$BUILD_INIT_CACHE/scripts" test -z "$RPM_PAYLOADDECOMPRESS_PROBED" && probe_rpm_payloaddecompress PAYLOADDECOMPRESS=cat # if our rpm can decompress everything, we don't need to probe what compression # we actually have if test "$RPM_PAYLOADDECOMPRESS_LZMA" != "cat" -o "$RPM_PAYLOADDECOMPRESS_XZ" != "cat" -o "$RPM_PAYLOADDECOMPRESS_ZSTD" != "cat"; then case $(rpm -qp --nodigest --nosignature --qf "%{PAYLOADCOMPRESSOR}\n" "$BUILD_INIT_CACHE/rpms/$PKG.rpm") in lzma) PAYLOADDECOMPRESS="$RPM_PAYLOADDECOMPRESS_LZMA" ;; xz) PAYLOADDECOMPRESS="$RPM_PAYLOADDECOMPRESS_XZ" ;; zstd) PAYLOADDECOMPRESS="$RPM_PAYLOADDECOMPRESS_ZSTD" ;; esac fi if test "$PAYLOADDECOMPRESS" = "cat" ; then rpm2cpio "$BUILD_INIT_CACHE/rpms/$PKG.rpm" | $CPIO || cleanup_and_exit 1 else test "$PAYLOADDECOMPRESS" = "lzma -d" && check_rpm_decompressor lzma test "$PAYLOADDECOMPRESS" = "xz -d" && check_rpm_decompressor xz test "$PAYLOADDECOMPRESS" = "zstd -d" && check_rpm_decompressor zstd rpm2cpio "$BUILD_INIT_CACHE/rpms/$PKG.rpm" | $PAYLOADDECOMPRESS | $CPIO || cleanup_and_exit 1 fi test -L "$BUILD_INIT_CACHE/scripts" && cleanup_and_exit 1 rm -rf "$BUILD_INIT_CACHE/scripts/$PKG.pre" "$BUILD_INIT_CACHE/scripts/$PKG.preprog" "$BUILD_INIT_CACHE/scripts/$PKG.post" "$BUILD_INIT_CACHE/scripts/$PKG.postprog" if test -e "$BUILD_INIT_CACHE/scripts/$PKG.run" ; then rpm -qp --nodigest --nosignature --qf "%{PREIN}" "$BUILD_INIT_CACHE/rpms/$PKG.rpm" > "$BUILD_INIT_CACHE/scripts/$PKG.pre" rpm -qp --nodigest --nosignature --qf "%{PREINPROG}" "$BUILD_INIT_CACHE/rpms/$PKG.rpm" > "$BUILD_INIT_CACHE/scripts/$PKG.preprog" rpm -qp --nodigest --nosignature --qf "%{POSTIN}" "$BUILD_INIT_CACHE/rpms/$PKG.rpm" > "$BUILD_INIT_CACHE/scripts/$PKG.post" rpm -qp --nodigest --nosignature --qf "%{POSTINPROG}" "$BUILD_INIT_CACHE/rpms/$PKG.rpm" > "$BUILD_INIT_CACHE/scripts/$PKG.postprog" rm -f "$BUILD_INIT_CACHE/scripts/.none" echo -n '(none)' > "$BUILD_INIT_CACHE/scripts/.none" cmp -s "$BUILD_INIT_CACHE/scripts/$PKG.pre" "$BUILD_INIT_CACHE/scripts/.none" && rm -f "$BUILD_INIT_CACHE/scripts/$PKG.pre" cmp -s "$BUILD_INIT_CACHE/scripts/$PKG.post" "$BUILD_INIT_CACHE/scripts/.none" && rm -f "$BUILD_INIT_CACHE/scripts/$PKG.post" rm -f "$BUILD_INIT_CACHE/scripts/.none" fi # hack for rpm erasures if test -d "$BUILD_ROOT/installed-pkg" -a -z "$PREPARE_VM" ; then # call for rpm-4.x and not rpm-devel test -z "${PKG##rpm-[0-9]*}" && chroot . rpm --rebuilddb # also exec for exchanged rpm ! naming is rpm-x86-<target>-<ver> test -z "${PKG##rpm-x86-*[0-9]*}" && chroot . rpm --rebuilddb fi } pkg_runscripts_rpm() { if test -e "$BUILD_ROOT/.init_b_cache/scripts/$PKG.pre" ; then echo "running $PKG preinstall script" local prog read prog < "$BUILD_ROOT/.init_b_cache/scripts/$PKG.preprog" (cd $BUILD_ROOT && chroot $BUILD_ROOT "${prog:-sh}" ".init_b_cache/scripts/$PKG.pre" 0) rm -f "$BUILD_ROOT/.init_b_cache/scripts/$PKG.pre" "$BUILD_ROOT/.init_b_cache/scripts/$PKG.preprog" fi if test -e "$BUILD_ROOT/.init_b_cache/scripts/$PKG.post" ; then echo "running $PKG postinstall script" local prog read prog < "$BUILD_ROOT/.init_b_cache/scripts/$PKG.postprog" (cd $BUILD_ROOT && chroot $BUILD_ROOT "${prog:-sh}" ".init_b_cache/scripts/$PKG.post" 1) rm -f "$BUILD_ROOT/.init_b_cache/scripts/$PKG.post" "$BUILD_ROOT/.init_b_cache/scripts/$PKG.postprog" fi }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor