From 54068c5c8f018e85d8bd48d2eedcd279a3c61969 Mon Sep 17 00:00:00 2001 From: Oscar Dominguez Date: Jul 04 2022 22:01:27 +0000 Subject: Change rpmdb verify --- diff --git a/Containerfile.c8s b/Containerfile.c8s index 71a1634..bcbdf95 100644 --- a/Containerfile.c8s +++ b/Containerfile.c8s @@ -15,7 +15,7 @@ ENV DATE="08:00 next Fri" RUN adduser build RUN dnf -y update -RUN dnf -y install vi buildah podman +RUN dnf -y install vi buildah RUN dnf -y clean all && \ rm -rf /var/cache /var/log/dnf* @@ -46,8 +46,10 @@ RUN mkdir -p /var/lib/shared/vfs-images \ COPY make-hyperscale-container.sh /home/build COPY runner.sh /home/build +COPY validate/verify_rpmdb.sh /home/build RUN chmod a+x /home/build/make-hyperscale-container.sh RUN chmod a+x /home/build/runner.sh +RUN chmod a+x /home/build/verify_rpmdb.sh RUN chown build:build -R /home/build diff --git a/Containerfile.c9s b/Containerfile.c9s index ae5d5a2..3533bb8 100644 --- a/Containerfile.c9s +++ b/Containerfile.c9s @@ -15,7 +15,7 @@ ENV DATE="08:00 next Fri" RUN adduser build RUN dnf -y update -RUN dnf -y install vi buildah +RUN dnf -y install vi buildah sqlite RUN dnf -y clean all && \ rm -rf /var/cache /var/log/dnf* @@ -46,8 +46,10 @@ RUN mkdir -p /var/lib/shared/vfs-images \ COPY make-hyperscale-container.sh /home/build COPY runner.sh /home/build +COPY validate/verify_rpmdb.sh /home/build RUN chmod a+x /home/build/make-hyperscale-container.sh RUN chmod a+x /home/build/runner.sh +RUN chmod a+x /home/build/verify_rpmdb.sh RUN chown build:build -R /home/build diff --git a/runner.sh b/runner.sh index fb5e2bb..11c9428 100644 --- a/runner.sh +++ b/runner.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -eu + export TZ='America/Los_Angeles' # Hyperscale Centos Stream version, default 8 @@ -18,6 +20,7 @@ Push () { # Always run once immediately for easy testing. ./make-hyperscale-container.sh $VERSION +./verify_rpmdb.sh Push while true; do @@ -26,6 +29,7 @@ while true; do sleep "$TIME" echo "Starting at $(date)" ./make-hyperscale-container.sh $VERSION + ./verify_rpmdb.sh Push echo "Done at $(date)" echo diff --git a/test_rpmdb.sh b/test_rpmdb.sh deleted file mode 100644 index 4814116..0000000 --- a/test_rpmdb.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -set -eu - -# rpmdb files for each rpmdb backend -declare -A RPMDB_FILES -RPMDB_FILES[ndb]="Packages.db" -RPMDB_FILES[sqlite]="rpmdb.sqlite" -RPMDB_FILES[bdb]="Packages" - -RPMDB_PATH=$(rpm -E "%{_dbpath}") -RPMDB_BACKEND=$(rpm -E "%{_db_backend}") -PARENT_DB_PATH=$(dirname "${RPMDB_PATH}") - -echo "using ${RPMDB_BACKEND} backend" - -# If correct rpmdb file for current backend does not exist, try to rebuild rpmdb to add the correct files -if [ ! -e "${RPMDB_PATH}/${RPMDB_FILES[${RPMDB_BACKEND}]}" ]; then - echo "${RPMDB_FILES[${RPMDB_BACKEND}]} does not exist" - echo "Rebuilding rpmdb..." - if ! rpmdb --rebuilddb; then - echo "Rebuild of rpmdb failed. Trying to rebuild manually..." - REBUILD_FOLDER="$(ls $(dirname "${RPMDB_PATH}") | grep -m 1 rpmrebuild)" - REBUILD_PATH="${PARENT_DB_PATH}/${REBUILD_FOLDER}" - rm -fr "${RPMDB_PATH}"/* - cp -a "${REBUILD_PATH}"/* "${RPMDB_PATH}"/ - rm -rf "${REBUILD_PATH}" - fi - - echo "Rebuild of rpmdb done" -fi - -# Simple rpmdb verification -if [ "${RPMDB_BACKEND}" == "sqlite" ]; then - sqlite3 "${RPMDB_PATH}"/rpmdb.sqlite "pragma integrity_check;" -fi - -if [ "${RPMDB_BACKEND}" == "bdb" ]; then - /usr/lib/rpm/rpmdb_verify "${RPMDB_PATH}"/Packages -fi - -rpmdb -vv --verifydb - -echo "DONE" - -exit 0 diff --git a/validate/verify_rpmdb.sh b/validate/verify_rpmdb.sh new file mode 100644 index 0000000..1dfa4bb --- /dev/null +++ b/validate/verify_rpmdb.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +set -eux + +# start container for testing +ctr=$(buildah from "centos-stream-hyperscale-${VERSION}") + +RPMDB_PATH=$(buildah run $ctr -- rpm -E "%{_dbpath}") +RPMDB_BACKEND=$(buildah run $ctr -- rpm -E "%{_db_backend}") + +# Check if the container is using sqlite or bdb backend +if [ "${RPMDB_BACKEND}" != "sqlite" ] && [ "${RPMDB_BACKEND}" != "bdb" ]; then + echo "script only works with sqlite or bdb rpmdb backend" + buildah rm $ctr + exit 1 +fi + +# Simple rpmdb verification +# for c9s mount container to avoid install sqlite every time +if [ "${RPMDB_BACKEND}" == "sqlite" ]; then + mnt=$(buildah unshare -- sh -c "buildah mount $ctr") + sqlite3 "$mnt${RPMDB_PATH}"/rpmdb.sqlite "pragma integrity_check;" + buildah unshare -- sh -c "buildah unmount $ctr" +else + buildah run $ctr -- /usr/lib/rpm/rpmdb_verify "${RPMDB_PATH}"/Packages +fi + +buildah run $ctr -- rpmdb -vv --verifydb + +# Query all headers in the DB +buildah run $ctr -- rpm -qa 1> /dev/null + +# Remove container +buildah rm $ctr + +exit 0