1414# DNF uses /etc/yum.repos.d, even when --installroot is specified
1515OPTS+=(" --setopt=reposdir=$DOM0_UPDATES_DIR /etc/yum.repos.d" )
1616CLEAN_OPTS=(" ${OPTS[@]} " )
17- # DNF verifies signatures implicitly, but yumdownloader does not.
18- SIGNATURE_REGEX=" "
1917PKGLIST=()
2018
2119# Executable (yum or dnf)
@@ -72,9 +70,9 @@ if type dnf >/dev/null 2>&1; then
7270 UPDATE_CMD=dnf
7371 UPDATE_ARGUMENTS+=(--noplugins -y)
7472 CLEAN_OPTS+=(--noplugins -y)
75- " $UPDATE_CMD " " ${OPTS[@]} " " $UPDATE_ACTION " --help | grep -q best && UPDATE_ARGUMENTS+=(--best)
76- " $UPDATE_CMD " " ${OPTS[@]} " " $UPDATE_ACTION " --help | grep -q allowerasing && UPDATE_ARGUMENTS+=(--allowerasing)
77- if " $UPDATE_CMD " --version | grep -q dnf5 && [ " $CHECK_ONLY " = " 1" ]; then
73+ " $UPDATE_CMD " " ${OPTS[@]} " " $UPDATE_ACTION " --help 2> /dev/null | grep -q best && UPDATE_ARGUMENTS+=(--best)
74+ " $UPDATE_CMD " " ${OPTS[@]} " " $UPDATE_ACTION " --help 2> /dev/null | grep -q allowerasing && UPDATE_ARGUMENTS+=(--allowerasing)
75+ if " $UPDATE_CMD " --version 2> /dev/null | grep -q dnf5 && [ " $CHECK_ONLY " = " 1" ]; then
7876 UPDATE_ACTION=check-upgrade
7977 fi
8078else
@@ -87,34 +85,12 @@ if ! [ -d "$DOM0_UPDATES_DIR" ]; then
8785 exit 1
8886fi
8987
90- mkdir -p $DOM0_UPDATES_DIR /etc
91-
92- # remove converted sqlite db if legacy db is newer, to force conversion again
93- # legacy db could be only in the /var/lib/rpm location, but sqlite could be in any
94- if [ -e " $DOM0_UPDATES_DIR /var/lib/rpm/rpmdb.sqlite" ] && \
95- [ " $DOM0_UPDATES_DIR /var/lib/rpm/Packages" -nt " $DOM0_UPDATES_DIR /var/lib/rpm/rpmdb.sqlite" ]; then
96- rm -f -- " $DOM0_UPDATES_DIR /var/lib/rpm/rpmdb.sqlite" *
97- elif [ -e " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm/rpmdb.sqlite" ] && \
98- [ " $DOM0_UPDATES_DIR /var/lib/rpm/Packages" -nt " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm/rpmdb.sqlite" ]; then
99- # remove the whole directory, to make the logic below happy
100- rm -rf -- " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm"
88+ " $( dirname " $0 " ) /qubes-download-dom0-updates-init.sh" ; RETCODE=$?
89+ if [ $RETCODE -ne 0 ]; then
90+ echo " qubes-download-dom0-updates-init.sh failed with exit code ${RETCODE} !" >&2
91+ exit $RETCODE
10192fi
10293
103- # Check if we need to copy rpmdb somewhere else
104- DOM0_DBPATH=/var/lib/rpm
105- if [ -d " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm" ] && ! [ -L " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm" ]; then
106- DOM0_DBPATH=/usr/lib/sysimage/rpm
107- fi
108- DBPATH=$( rpm --eval ' %{_dbpath}' )
109- if [ ! " $DBPATH " = " $DOM0_DBPATH " ]; then
110- mkdir -p " $DOM0_UPDATES_DIR$DBPATH "
111- rm -rf -- " $DOM0_UPDATES_DIR$DBPATH "
112- cp -r " $DOM0_UPDATES_DIR$DOM0_DBPATH " " $DOM0_UPDATES_DIR$DBPATH "
113- fi
114- # Rebuild rpm database in case of different rpm version
115- rm -f -- " $DOM0_UPDATES_DIR$DBPATH " /__*
116- rpm --root=$DOM0_UPDATES_DIR --rebuilddb
117-
11894if [ " $CLEAN " = " 1" ]; then
11995 # shellcheck disable=SC2086
12096 $UPDATE_CMD clean all " ${CLEAN_OPTS[@]} "
@@ -164,41 +140,5 @@ set -e
164140
165141" ${UPDATE_COMMAND[@]} " " ${OPTS[@]} " " ${PKGLIST[@]} "
166142
167- find " $DOM0_UPDATES_DIR /var/cache" -name ' *.rpm' -print0 2> /dev/null | \
168- xargs -0 -r ln -f -t " $DOM0_UPDATES_DIR /packages/"
169-
170- if ls " $DOM0_UPDATES_DIR " /packages/* .rpm > /dev/null 2>&1 ; then
171- if [ -n " $SIGNATURE_REGEX " ]; then
172- rpmkeys_error=0
173- for pkg in " $DOM0_UPDATES_DIR " /packages/* .rpm; do
174- rpmkeys_exit_code=0
175- output=" $( rpmkeys --root " $DOM0_UPDATES_DIR " --checksig " $pkg " ) " \
176- || rpmkeys_exit_code=" $? "
177- if [ ! " $rpmkeys_exit_code " = " 0" ]; then
178- echo " ERROR: could not verify $pkg " >&2
179- rpmkeys_error=1
180- rm " $pkg "
181- elif ! echo " $output " | grep -Pq " $SIGNATURE_REGEX " ; then
182- echo " ERROR: missing or invalid signature for $pkg " >&2
183- rpmkeys_error=1
184- rm " $pkg "
185- else
186- echo " Successfully verified $pkg " >&2
187- fi
188- done
189- if [ ! " $rpmkeys_error " = " 0" ]; then
190- echo " ERROR: could not verify one or more packages" >&2
191- exit 1
192- fi
193- fi
194-
195- cmd=" /usr/lib/qubes/qrexec-client-vm dom0 qubes.ReceiveUpdates /usr/lib/qubes/qfile-agent"
196- qrexec_exit_code=0
197- $cmd " $DOM0_UPDATES_DIR " /packages/* .rpm || { qrexec_exit_code=$? ; true ; };
198- if [ ! " $qrexec_exit_code " = " 0" ]; then
199- echo " '$cmd $DOM0_UPDATES_DIR /packages/*.rpm' failed with exit code ${qrexec_exit_code} !" >&2
200- exit " $qrexec_exit_code "
201- fi
202- else
203- echo " No packages downloaded" >&2
204- fi
143+ " $( dirname " $0 " ) /qubes-download-dom0-updates-finish.sh" ; RETCODE=$?
144+ exit $RETCODE
0 commit comments