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)
@@ -76,8 +74,8 @@ if type dnf >/dev/null 2>&1 || type dnf5 >/dev/null 2>&1; then
7674 fi
7775 UPDATE_ARGUMENTS+=(--noplugins -y)
7876 CLEAN_OPTS+=(--noplugins -y)
79- " $UPDATE_CMD " " ${OPTS[@]} " " $UPDATE_ACTION " --help | grep -q best && UPDATE_ARGUMENTS+=(--best)
80- " $UPDATE_CMD " " ${OPTS[@]} " " $UPDATE_ACTION " --help | grep -q allowerasing && UPDATE_ARGUMENTS+=(--allowerasing)
77+ " $UPDATE_CMD " " ${OPTS[@]} " " $UPDATE_ACTION " --help 2> /dev/null | grep -q best && UPDATE_ARGUMENTS+=(--best)
78+ " $UPDATE_CMD " " ${OPTS[@]} " " $UPDATE_ACTION " --help 2> /dev/null | grep -q allowerasing && UPDATE_ARGUMENTS+=(--allowerasing)
8179 if [ " $UPDATE_CMD " = " dnf5" ] && [ " $CHECK_ONLY " = " 1" ]; then
8280 UPDATE_ACTION=check-upgrade
8381 fi
@@ -91,34 +89,12 @@ if ! [ -d "$DOM0_UPDATES_DIR" ]; then
9189 exit 1
9290fi
9391
94- mkdir -p $DOM0_UPDATES_DIR /etc
95-
96- # remove converted sqlite db if legacy db is newer, to force conversion again
97- # legacy db could be only in the /var/lib/rpm location, but sqlite could be in any
98- if [ -e " $DOM0_UPDATES_DIR /var/lib/rpm/rpmdb.sqlite" ] && \
99- [ " $DOM0_UPDATES_DIR /var/lib/rpm/Packages" -nt " $DOM0_UPDATES_DIR /var/lib/rpm/rpmdb.sqlite" ]; then
100- rm -f -- " $DOM0_UPDATES_DIR /var/lib/rpm/rpmdb.sqlite" *
101- elif [ -e " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm/rpmdb.sqlite" ] && \
102- [ " $DOM0_UPDATES_DIR /var/lib/rpm/Packages" -nt " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm/rpmdb.sqlite" ]; then
103- # remove the whole directory, to make the logic below happy
104- rm -rf -- " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm"
92+ " $( dirname " $0 " ) /qubes-download-dom0-updates-init.sh" ; RETCODE=$?
93+ if [ $RETCODE -ne 0 ]; then
94+ echo " qubes-download-dom0-updates-init.sh failed with exit code ${RETCODE} !" >&2
95+ exit $RETCODE
10596fi
10697
107- # Check if we need to copy rpmdb somewhere else
108- DOM0_DBPATH=/var/lib/rpm
109- if [ -d " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm" ] && ! [ -L " $DOM0_UPDATES_DIR /usr/lib/sysimage/rpm" ]; then
110- DOM0_DBPATH=/usr/lib/sysimage/rpm
111- fi
112- DBPATH=$( rpm --eval ' %{_dbpath}' )
113- if [ ! " $DBPATH " = " $DOM0_DBPATH " ]; then
114- mkdir -p " $DOM0_UPDATES_DIR$DBPATH "
115- rm -rf -- " $DOM0_UPDATES_DIR$DBPATH "
116- cp -r " $DOM0_UPDATES_DIR$DOM0_DBPATH " " $DOM0_UPDATES_DIR$DBPATH "
117- fi
118- # Rebuild rpm database in case of different rpm version
119- rm -f -- " $DOM0_UPDATES_DIR$DBPATH " /__*
120- rpm --root=$DOM0_UPDATES_DIR --rebuilddb
121-
12298if [ " $CLEAN " = " 1" ]; then
12399 # shellcheck disable=SC2086
124100 $UPDATE_CMD clean all " ${CLEAN_OPTS[@]} "
@@ -168,41 +144,5 @@ set -e
168144
169145" ${UPDATE_COMMAND[@]} " " ${OPTS[@]} " " ${PKGLIST[@]} "
170146
171- find " $DOM0_UPDATES_DIR /var/cache" -name ' *.rpm' -print0 2> /dev/null | \
172- xargs -0 -r ln -f -t " $DOM0_UPDATES_DIR /packages/"
173-
174- if ls " $DOM0_UPDATES_DIR " /packages/* .rpm > /dev/null 2>&1 ; then
175- if [ -n " $SIGNATURE_REGEX " ]; then
176- rpmkeys_error=0
177- for pkg in " $DOM0_UPDATES_DIR " /packages/* .rpm; do
178- rpmkeys_exit_code=0
179- output=" $( rpmkeys --root " $DOM0_UPDATES_DIR " --checksig " $pkg " ) " \
180- || rpmkeys_exit_code=" $? "
181- if [ ! " $rpmkeys_exit_code " = " 0" ]; then
182- echo " ERROR: could not verify $pkg " >&2
183- rpmkeys_error=1
184- rm " $pkg "
185- elif ! echo " $output " | grep -Pq " $SIGNATURE_REGEX " ; then
186- echo " ERROR: missing or invalid signature for $pkg " >&2
187- rpmkeys_error=1
188- rm " $pkg "
189- else
190- echo " Successfully verified $pkg " >&2
191- fi
192- done
193- if [ ! " $rpmkeys_error " = " 0" ]; then
194- echo " ERROR: could not verify one or more packages" >&2
195- exit 1
196- fi
197- fi
198-
199- cmd=" /usr/lib/qubes/qrexec-client-vm dom0 qubes.ReceiveUpdates /usr/lib/qubes/qfile-agent"
200- qrexec_exit_code=0
201- $cmd " $DOM0_UPDATES_DIR " /packages/* .rpm || { qrexec_exit_code=$? ; true ; };
202- if [ ! " $qrexec_exit_code " = " 0" ]; then
203- echo " '$cmd $DOM0_UPDATES_DIR /packages/*.rpm' failed with exit code ${qrexec_exit_code} !" >&2
204- exit " $qrexec_exit_code "
205- fi
206- else
207- echo " No packages downloaded" >&2
208- fi
147+ " $( dirname " $0 " ) /qubes-download-dom0-updates-finish.sh" ; RETCODE=$?
148+ exit $RETCODE
0 commit comments