Skip to content

Commit fd75274

Browse files
committed
Merge remote-tracking branch 'origin/pr/576'
* origin/pr/576: updater: install all scripts updater: split qubes-download-dom0-updates.sh Pull request description: Splitting the file allows for code reuse and improves readability
2 parents ab9f4b6 + 08476dc commit fd75274

6 files changed

Lines changed: 77 additions & 66 deletions

File tree

debian/qubes-core-agent-dom0-updates.install

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@ etc/qubes-rpc/qubes.TemplateSearch
22
etc/qubes-rpc/qubes.TemplateDownload
33
usr/lib/qubes/qvm-template-repo-query
44
usr/lib/qubes/qubes-download-dom0-updates.sh
5+
usr/lib/qubes/qubes-download-dom0-updates-init.sh
6+
usr/lib/qubes/qubes-download-dom0-updates-finish.sh
57
usr/lib/qubes/dnf-plugins/downloadurl.py

package-managers/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ install:
4949
install -d $(DESTDIR)$(QUBESLIBDIR)
5050
install -t $(DESTDIR)$(QUBESLIBDIR) \
5151
qubes-download-dom0-updates.sh \
52+
qubes-download-dom0-updates-finish.sh \
53+
qubes-download-dom0-updates-init.sh \
5254
upgrades-installed-check \
5355
upgrades-status-notify
5456
install -d -m 2775 $(DESTDIR)$(QUBESSTATEDIR)/dom0-updates
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/bin/bash
2+
3+
DOM0_UPDATES_DIR=/var/lib/qubes/dom0-updates
4+
5+
if ! [ -d "$DOM0_UPDATES_DIR" ]; then
6+
echo "Dom0 updates dir does not exists: $DOM0_UPDATES_DIR" >&2
7+
exit 1
8+
fi
9+
10+
mkdir -p "$DOM0_UPDATES_DIR/packages"
11+
12+
set -e
13+
14+
find "$DOM0_UPDATES_DIR/var/cache" -name '*.rpm' -print0 2>/dev/null |\
15+
xargs -0 -r ln -f -t "$DOM0_UPDATES_DIR/packages/"
16+
17+
if ls "$DOM0_UPDATES_DIR"/packages/*.rpm > /dev/null 2>&1; then
18+
cmd="/usr/lib/qubes/qrexec-client-vm dom0 qubes.ReceiveUpdates /usr/lib/qubes/qfile-agent"
19+
qrexec_exit_code=0
20+
$cmd "$DOM0_UPDATES_DIR"/packages/*.rpm || { qrexec_exit_code=$? ; true; };
21+
if [ ! "$qrexec_exit_code" = "0" ]; then
22+
echo "'$cmd $DOM0_UPDATES_DIR/packages/*.rpm' failed with exit code ${qrexec_exit_code}!" >&2
23+
exit "$qrexec_exit_code"
24+
fi
25+
else
26+
echo "No packages downloaded" >&2
27+
fi
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/bin/bash
2+
3+
DOM0_UPDATES_DIR=/var/lib/qubes/dom0-updates
4+
5+
if ! [ -d "$DOM0_UPDATES_DIR" ]; then
6+
echo "Dom0 updates dir does not exists: $DOM0_UPDATES_DIR" >&2
7+
exit 1
8+
fi
9+
10+
mkdir -p $DOM0_UPDATES_DIR/etc
11+
12+
# remove converted sqlite db if legacy db is newer, to force conversion again
13+
# legacy db could be only in the /var/lib/rpm location, but sqlite could be in any
14+
if [ -e "$DOM0_UPDATES_DIR/var/lib/rpm/rpmdb.sqlite" ] && \
15+
[ "$DOM0_UPDATES_DIR/var/lib/rpm/Packages" -nt "$DOM0_UPDATES_DIR/var/lib/rpm/rpmdb.sqlite" ]; then
16+
rm -f -- "$DOM0_UPDATES_DIR/var/lib/rpm/rpmdb.sqlite"*
17+
elif [ -e "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm/rpmdb.sqlite" ] && \
18+
[ "$DOM0_UPDATES_DIR/var/lib/rpm/Packages" -nt "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm/rpmdb.sqlite" ]; then
19+
# remove the whole directory, to make the logic below happy
20+
rm -rf -- "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm"
21+
fi
22+
23+
# Check if we need to copy rpmdb somewhere else
24+
DOM0_DBPATH=/var/lib/rpm
25+
if [ -d "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm" ] && ! [ -L "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm" ]; then
26+
DOM0_DBPATH=/usr/lib/sysimage/rpm
27+
fi
28+
DBPATH=$(rpm --eval '%{_dbpath}')
29+
if [ ! "$DBPATH" = "$DOM0_DBPATH" ]; then
30+
mkdir -p "$DOM0_UPDATES_DIR$DBPATH"
31+
rm -rf -- "$DOM0_UPDATES_DIR$DBPATH"
32+
cp -r "$DOM0_UPDATES_DIR$DOM0_DBPATH" "$DOM0_UPDATES_DIR$DBPATH"
33+
fi
34+
# Rebuild rpm database in case of different rpm version
35+
rm -f -- "$DOM0_UPDATES_DIR$DBPATH"/__*
36+
rpm --root=$DOM0_UPDATES_DIR --rebuilddb
37+
38+
exit 0

package-managers/qubes-download-dom0-updates.sh

Lines changed: 6 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ OPTS+=("--setopt=cachedir=$DOM0_UPDATES_DIR/var/cache/dnf")
1717
# Disarm protected packages mechanism, let dom0 evaluate it instead
1818
OPTS+=("--setopt=protected_packages=")
1919
CLEAN_OPTS=("${OPTS[@]}")
20-
# DNF verifies signatures implicitly, but yumdownloader does not.
21-
SIGNATURE_REGEX=""
2220
PKGLIST=()
2321

2422
# Executable (yum or dnf)
@@ -94,34 +92,12 @@ if ! [ -d "$DOM0_UPDATES_DIR" ]; then
9492
exit 1
9593
fi
9694

97-
mkdir -p $DOM0_UPDATES_DIR/etc
98-
99-
# remove converted sqlite db if legacy db is newer, to force conversion again
100-
# legacy db could be only in the /var/lib/rpm location, but sqlite could be in any
101-
if [ -e "$DOM0_UPDATES_DIR/var/lib/rpm/rpmdb.sqlite" ] && \
102-
[ "$DOM0_UPDATES_DIR/var/lib/rpm/Packages" -nt "$DOM0_UPDATES_DIR/var/lib/rpm/rpmdb.sqlite" ]; then
103-
rm -f -- "$DOM0_UPDATES_DIR/var/lib/rpm/rpmdb.sqlite"*
104-
elif [ -e "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm/rpmdb.sqlite" ] && \
105-
[ "$DOM0_UPDATES_DIR/var/lib/rpm/Packages" -nt "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm/rpmdb.sqlite" ]; then
106-
# remove the whole directory, to make the logic below happy
107-
rm -rf -- "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm"
95+
"$(dirname "$0")/qubes-download-dom0-updates-init.sh" ; RETCODE=$?
96+
if [ $RETCODE -ne 0 ]; then
97+
echo "qubes-download-dom0-updates-init.sh failed with exit code ${RETCODE}!" >&2
98+
exit $RETCODE
10899
fi
109100

110-
# Check if we need to copy rpmdb somewhere else
111-
DOM0_DBPATH=/var/lib/rpm
112-
if [ -d "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm" ] && ! [ -L "$DOM0_UPDATES_DIR/usr/lib/sysimage/rpm" ]; then
113-
DOM0_DBPATH=/usr/lib/sysimage/rpm
114-
fi
115-
DBPATH=$(rpm --eval '%{_dbpath}')
116-
if [ ! "$DBPATH" = "$DOM0_DBPATH" ]; then
117-
mkdir -p "$DOM0_UPDATES_DIR$DBPATH"
118-
rm -rf -- "$DOM0_UPDATES_DIR$DBPATH"
119-
cp -r "$DOM0_UPDATES_DIR$DOM0_DBPATH" "$DOM0_UPDATES_DIR$DBPATH"
120-
fi
121-
# Rebuild rpm database in case of different rpm version
122-
rm -f -- "$DOM0_UPDATES_DIR$DBPATH"/__*
123-
rpm --root=$DOM0_UPDATES_DIR --rebuilddb
124-
125101
if [ "$CLEAN" = "1" ]; then
126102
# shellcheck disable=SC2086
127103
$UPDATE_CMD clean all "${CLEAN_OPTS[@]}"
@@ -171,41 +147,5 @@ set -e
171147

172148
"${UPDATE_COMMAND[@]}" "${OPTS[@]}" "${PKGLIST[@]}"
173149

174-
find "$DOM0_UPDATES_DIR/var/cache" -name '*.rpm' -print0 2>/dev/null |\
175-
xargs -0 -r ln -f -t "$DOM0_UPDATES_DIR/packages/"
176-
177-
if ls "$DOM0_UPDATES_DIR"/packages/*.rpm > /dev/null 2>&1; then
178-
if [ -n "$SIGNATURE_REGEX" ]; then
179-
rpmkeys_error=0
180-
for pkg in "$DOM0_UPDATES_DIR"/packages/*.rpm; do
181-
rpmkeys_exit_code=0
182-
output="$(rpmkeys --root "$DOM0_UPDATES_DIR" --checksig "$pkg")" \
183-
|| rpmkeys_exit_code="$?"
184-
if [ ! "$rpmkeys_exit_code" = "0" ]; then
185-
echo "ERROR: could not verify $pkg" >&2
186-
rpmkeys_error=1
187-
rm "$pkg"
188-
elif ! echo "$output" |grep -Pq "$SIGNATURE_REGEX"; then
189-
echo "ERROR: missing or invalid signature for $pkg" >&2
190-
rpmkeys_error=1
191-
rm "$pkg"
192-
else
193-
echo "Successfully verified $pkg" >&2
194-
fi
195-
done
196-
if [ ! "$rpmkeys_error" = "0" ]; then
197-
echo "ERROR: could not verify one or more packages" >&2
198-
exit 1
199-
fi
200-
fi
201-
202-
cmd="/usr/lib/qubes/qrexec-client-vm dom0 qubes.ReceiveUpdates /usr/lib/qubes/qfile-agent"
203-
qrexec_exit_code=0
204-
$cmd "$DOM0_UPDATES_DIR"/packages/*.rpm || { qrexec_exit_code=$? ; true; };
205-
if [ ! "$qrexec_exit_code" = "0" ]; then
206-
echo "'$cmd $DOM0_UPDATES_DIR/packages/*.rpm' failed with exit code ${qrexec_exit_code}!" >&2
207-
exit "$qrexec_exit_code"
208-
fi
209-
else
210-
echo "No packages downloaded" >&2
211-
fi
150+
"$(dirname "$0")/qubes-download-dom0-updates-finish.sh" ; RETCODE=$?
151+
exit $RETCODE

rpm_spec/core-agent.spec.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,8 @@ rm -f %{name}-%{version}
11191119
%dir %attr(0775,root,qubes) /var/lib/qubes/dom0-updates
11201120
/usr/lib/qubes/qvm-template-repo-query
11211121
/usr/lib/qubes/qubes-download-dom0-updates.sh
1122+
/usr/lib/qubes/qubes-download-dom0-updates-init.sh
1123+
/usr/lib/qubes/qubes-download-dom0-updates-finish.sh
11221124
%dir /usr/lib/qubes/dnf-plugins
11231125
/usr/lib/qubes/dnf-plugins/downloadurl.py
11241126

0 commit comments

Comments
 (0)