]>
Commit | Line | Data |
---|---|---|
5e7538d0 ER |
1 | --- util-vserver-0.30.215/scripts/pkgmgmt 2008-11-17 22:47:02.486514626 +0200 |
2 | +++ util-vserver-0.30.216-r2844/scripts/pkgmgmt 2009-11-05 14:27:48.753407445 +0200 | |
a4e6abac | 3 | @@ -185,6 +185,47 @@ |
6a6b3452 ER |
4 | test -n "$is_ok" |
5 | } | |
6 | ||
7 | +## Usage: verifyDBTools <vdir> <type> <host_tool> <guest_tool> | |
8 | +function verifyDBTools | |
9 | +{ | |
10 | + local vdir="$1" | |
11 | + local type="$2" | |
12 | + local host_tool="$3" | |
13 | + local guest_tool="$4" | |
14 | + local res=0 | |
a4e6abac JR |
15 | + local hostbdb |
16 | + local guestbdb | |
6a6b3452 | 17 | + |
a4e6abac JR |
18 | + hostbdb=$(ldd /bin/rpm | awk '/libdb-[0-9\.]+.so/ { sub(/libdb-/, "", $1); sub(/.so/, "", $1); print $1 }') |
19 | + guestbdb=$(ldd "$vdir"/bin/rpm | awk '/libdb-[0-9\.]+.so/ { sub(/libdb-/, "", $1); sub(/.so/, "", $1); print $1 }') | |
6a6b3452 ER |
20 | + local i host_path guest_path |
21 | + for i in /bin /usr/bin /usr/lib/rpm /usr/local/bin; do | |
a4e6abac | 22 | + test ! -x "$i"/$host_tool || { host_path="$i"/"db${hostbdb}_${host_tool}"; break; } |
6a6b3452 ER |
23 | + done |
24 | + for i in /bin /usr/bin /usr/lib/rpm /usr/local/bin; do | |
a4e6abac | 25 | + test ! -x "$vdir$i"/$guest_tool || { guest_path="$i"/"db${guestbdb}_${guest_tool}"; break; } |
6a6b3452 ER |
26 | + done |
27 | + | |
28 | + test -n "$host_path" || { | |
29 | + warning " | |
a4e6abac | 30 | +* The host does not seem to have the 'db${hostbdb}_${host_tool}' program which is required |
6a6b3452 ER |
31 | + for $type package management. It is suggested to install it before |
32 | + continuing." | |
33 | + res=1 | |
34 | + } | |
35 | + test -n "$guest_path" || { | |
36 | + warning " | |
a4e6abac | 37 | +* The vserver guest does not seem to have the '"db${guestbdb}_${guest_tool}"' program which is required |
6a6b3452 ER |
38 | + for $type package management. It is suggested to install it before |
39 | + continuing." | |
40 | + res=1 | |
41 | + } | |
42 | + | |
43 | + eval $host_tool=$host_path | |
44 | + eval $guest_tool=$guest_path | |
45 | + return $res | |
46 | +} | |
47 | + | |
48 | # Usage: verifyInternalPackages <vserver> <style> | |
49 | function verifyInternalPackages() | |
50 | { | |
51 | @@ -392,7 +429,12 @@ | |
52 | verifyInternalPackages "$vserver" RH || test -n "$IS_FORCE" || | |
53 | panic " | |
54 | Can not continue; use '--force' to override this check" | |
55 | + | |
a4e6abac | 56 | + verifyDBTools "$vdir" 'internal' dump load || test -n "$IS_FORCE" || |
6a6b3452 ER |
57 | + panic " |
58 | +Can not continue; use '--force' to override this check" | |
59 | ||
60 | + | |
61 | pushd "$vdir" >/dev/null | |
62 | ||
63 | test ! -L var/lib/rpm || { | |
64 | @@ -416,6 +458,10 @@ | |
65 | findDir RPMETCDIR "$cfgdir"/rpmetc "$cfgdir"/base/rpm/etc /etc/rpm / | |
66 | findDir RPMSTATEDIR "$cfgdir"/rpmstate "$cfgdir"/base/rpm/state | |
67 | else | |
a4e6abac | 68 | + verifyDBTools "$vdir" 'external' load dump || test -n "$IS_FORCE" || |
6a6b3452 ER |
69 | + panic " |
70 | +Can not continue; use '--force' to override this check" | |
71 | + | |
72 | mkdir -m755 -p "$cfgdir" | |
73 | local need_base= | |
74 | ||
5e7538d0 | 75 | @@ -460,8 +506,41 @@ |
6a6b3452 ER |
76 | pushd "$vdir" >/dev/null |
77 | ## remove %_dbpath settings | |
78 | _substFile /etc/rpm/macros '/^%_dbpath[ \t].*/D' | |
79 | + | |
5e7538d0 ER |
80 | + ## remove vserver-packages ignore |
81 | + _substFile /etc/poldek/poldek.conf '/^ignore[ \t]*=/s/vserver-packages//' | |
82 | + | |
6a6b3452 ER |
83 | + # dump and reload rpmdb to overcome db version mismatch problems |
84 | + if [ "$db_load" -a "$db_dump" ]; then | |
a4e6abac | 85 | + # dump with host db_dump |
6a6b3452 ER |
86 | + $db_dump var/lib/rpm/Packages > var/lib/rpm/.Packages.dump |
87 | + | |
a4e6abac | 88 | + # load with guest db_load. |
6a6b3452 ER |
89 | + $_RM -f var/lib/rpm/__db.* |
90 | + mv var/lib/rpm/{Packages,.Packages.ORIG} | |
91 | + chroot . $db_load var/lib/rpm/Packages < var/lib/rpm/.Packages.dump | |
92 | + chroot . bin/rpm --rebuilddb 2>/dev/null | |
93 | + rm -f var/lib/rpm/.Packages.* | |
94 | + fi | |
95 | + | |
96 | popd >/dev/null | |
97 | else | |
98 | + | |
99 | + pushd "$vdir" >/dev/null | |
100 | + if [ "$db_load" -a "$db_dump" ]; then | |
101 | + # dump and reload rpmdb to overcome db version mismatch problems | |
102 | + | |
a4e6abac | 103 | + # dump with guest db_dump |
6a6b3452 ER |
104 | + $_RM -f var/lib/rpm/__db.* |
105 | + chroot . $db_dump var/lib/rpm/Packages > var/lib/rpm/.Packages.dump | |
106 | + | |
a4e6abac | 107 | + # load with host db_load |
6a6b3452 ER |
108 | + mv var/lib/rpm/{Packages,.Packages.ORIG} |
109 | + $db_load var/lib/rpm/Packages < var/lib/rpm/.Packages.dump | |
110 | + rm -f var/lib/rpm/.Packages.* | |
111 | + fi | |
112 | + popd >/dev/null | |
113 | + | |
114 | if test -n "$have_poldek"; then | |
115 | _copySecureRev "$vdir" /etc/poldek "$POLDEKETCDIR" | |
116 | _unhashAuto "$POLDEKETCDIR"/poldek.conf '/' |