1.1 --- a/openpkg/rpmdb Tue Jul 31 12:12:54 2012 +0200 1.2 +++ b/openpkg/rpmdb Tue Jul 31 12:23:42 2012 +0200 1.3 @@ -1,15 +1,14 @@ 1.4 #!@l_prefix@/lib/openpkg/bash 1.5 ## 1.6 ## rpmdb -- OpenPKG RPM Database Administration Utility 1.7 -## Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/> 1.8 -## Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/> 1.9 +## Copyright (c) 2000-2012 OpenPKG GmbH <http://openpkg.com/> 1.10 ## 1.11 -## Permission to use, copy, modify, and distribute this software for 1.12 -## any purpose with or without fee is hereby granted, provided that 1.13 -## the above copyright notice and this permission notice appear in all 1.14 -## copies. 1.15 +## This software is property of the OpenPKG GmbH, DE MUC HRB 160208. 1.16 +## All rights reserved. Licenses which grant limited permission to use, 1.17 +## copy, modify and distribute this software are available from the 1.18 +## OpenPKG GmbH. 1.19 ## 1.20 -## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 1.21 +## THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED 1.22 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1.23 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1.24 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR 1.25 @@ -30,6 +29,8 @@ 1.26 help="" 1.27 prefix="@l_prefix@" 1.28 dbpath="" 1.29 +dbapi="" 1.30 +tmpdir="" 1.31 rpm="" 1.32 musr="@l_musr@" 1.33 mgrp="@l_mgrp@" 1.34 @@ -42,6 +43,7 @@ 1.35 ## 1.36 1.37 # iterate over argument line 1.38 +args="" 1.39 for opt 1.40 do 1.41 case $opt in 1.42 @@ -51,6 +53,7 @@ 1.43 case $opt in 1.44 -h|--help ) help="Usage" ;; 1.45 -B|--build ) mode=build ;; 1.46 + -M|--migrate ) mode=migrate ;; 1.47 -R|--rebuild ) mode=rebuild ;; 1.48 -C|--cleanup ) mode=cleanup ;; 1.49 -F|--fixate ) mode=fixate ;; 1.50 @@ -60,14 +63,19 @@ 1.51 -v|--verbose ) verbose=`expr $verbose + 1` ;; 1.52 --prefix=* ) prefix=$arg ;; 1.53 --dbpath=* ) dbpath=$arg ;; 1.54 + --dblib=* ) dblib=$arg ;; 1.55 + --tmpdir=* ) tmpdir=$arg ;; 1.56 --rpm=* ) rpm=$arg ;; 1.57 --musr=* ) musr=$arg ;; 1.58 --mgrp=* ) mgrp=$arg ;; 1.59 - * ) help="Invalid option \`$opt'"; break ;; 1.60 + -- ) ;; 1.61 + -* ) help="Invalid option \`$opt'"; break ;; 1.62 + * ) args="$args \"$opt\"" ;; 1.63 esac 1.64 done 1.65 +eval "set -- $args" 1.66 1.67 -# makre sure exactly one run-time mode is specified 1.68 +# make sure exactly one run-time mode is specified 1.69 if [ ".$mode" = . ]; then 1.70 help="No or invalid run-time mode specified" 1.71 fi 1.72 @@ -82,6 +90,7 @@ 1.73 1.74 -h, --help print usage message (this one) 1.75 -B, --build build new RPM database from scratch 1.76 + -M, --migrate migrate RPM database to new format 1.77 -R, --rebuild rebuild new from old RPM database 1.78 -C, --cleanup cleanup existing RPM database 1.79 -F, --fixate fixate existing RPM database 1.80 @@ -91,12 +100,14 @@ 1.81 -v, --verbose operate in more verbose mode (increase verbose level) 1.82 --prefix=PREFIX use OpenPKG instance under PREFIX 1.83 --dbpath=PATH use OpenPKG RPM database under PATH 1.84 + --dblib=LIB use OpenPKG RPM database backend library ("db" or "sqlite") 1.85 + --tmpdir=PATH use OpenPKG temporary directory under PATH 1.86 --rpm=PROG use OpenPKG RPM executable PROG 1.87 --musr=USERNAME use OpenPKG management user USERNAME 1.88 --mgrp=GROUPNAME use OpenPKG management group GROUPNAME 1.89 1.90 This is OpenPKG rpmdb, an RPM database administration utility, providing 1.91 -lower-level maintainance functions for the Berkeley-DB 4.1 based RPM 4.2 1.92 +lower-level maintainance functions for the Berkeley-DB based RPM 1.93 database. It allows building new RPM databases from scratch, rebuilding 1.94 a new from an old RPM database (content dumping and reloading), 1.95 cleaning up problems on an existing RPM database (removal of DB region 1.96 @@ -115,6 +126,12 @@ 1.97 if [ ".$dbpath" = . ]; then 1.98 dbpath="$prefix/RPM/DB" 1.99 fi 1.100 +if [ ".$dblib" = . ]; then 1.101 + dblib="${1-db}" 1.102 +fi 1.103 +if [ ".$tmpdir" = . ]; then 1.104 + tmpdir="$prefix/RPM/TMP" 1.105 +fi 1.106 if [ ".$rpm" = . ]; then 1.107 rpm="$prefix/bin/openpkg rpm" 1.108 fi 1.109 @@ -124,32 +141,61 @@ 1.110 ## 1.111 1.112 dbfiles=" 1.113 - hash:Basenames 1.114 - hash:Conflictname 1.115 - hash:Depends 1.116 - btree:Dirnames 1.117 - hash:Filemd5s 1.118 - hash:Group 1.119 - btree:Installtid 1.120 - hash:Name 1.121 - hash:Packages 1.122 - hash:Providename 1.123 - btree:Provideversion 1.124 - hash:Pubkeys 1.125 - hash:Requirename 1.126 - btree:Requireversion 1.127 - hash:Sha1header 1.128 - hash:Sigmd5 1.129 - hash:Triggername 1.130 - region:__db.001 1.131 - region:__db.002 1.132 - region:__db.003 1.133 - region:__db.004 1.134 - region:__db.005 1.135 - region:__db.006 1.136 - region:__db.007 1.137 - region:__db.008 1.138 - region:__db.009 1.139 + 3:btree:Basenames 1.140 + 3:btree:Conflictname 1.141 + 3:temporary:Depends 1.142 + 3:btree:Dirnames 1.143 + 3:btree:Filedigests 1.144 + 3:btree:Filepaths 1.145 + 3:btree:Group 1.146 + 3:btree:Installtid 1.147 + 3:btree:Name 1.148 + 3:hash:Packagecolor 1.149 + 3:btree:Packages 1.150 + 3:btree:Providename 1.151 + 3:btree:Provideversion 1.152 + 3:hash:Pubkeys 1.153 + 3:btree:Requirename 1.154 + 3:btree:Requireversion 1.155 + 3:hash:Sha1header 1.156 + 3:hash:Sigmd5 1.157 + 3:btree:Triggername 1.158 + 3:btree:Obsoletename 1.159 + 3:btree:Nvra 1.160 + 3:btree:Sourcepkgid 1.161 + 3:btree:BuildEnvironment 1.162 + 3:region:__db.001 1.163 + 3:region:__db.002 1.164 + 3:region:__db.003 1.165 + 3:region:__db.004 1.166 + 3:region:__db.005 1.167 + 3:region:__db.006 1.168 + 3:region:__db.007 1.169 + 3:region:__db.008 1.170 + 3:region:__db.009 1.171 + 4:*:Basenames 1.172 + 4:*:Conflictname 1.173 + 4:temporary:Depends 1.174 + 4:*:Dirnames 1.175 + 4:*:Filedigests 1.176 + 4:*:Filepaths 1.177 + 4:*:Group 1.178 + 4:*:Installtid 1.179 + 4:*:Name 1.180 + 4:*:Packagecolor 1.181 + 4:*:Packages 1.182 + 4:*:Providename 1.183 + 4:*:Provideversion 1.184 + 4:*:Pubkeys 1.185 + 4:*:Requirename 1.186 + 4:*:Requireversion 1.187 + 4:*:Sha1header 1.188 + 4:*:Sigmd5 1.189 + 4:*:Triggername 1.190 + 4:*:Obsoletename 1.191 + 4:*:Nvra 1.192 + 4:*:Sourcepkgid 1.193 + 4:*:BuildEnvironment 1.194 " 1.195 1.196 ## 1.197 @@ -180,8 +226,45 @@ 1.198 fi 1.199 } 1.200 1.201 +rpmdb_version_load () { 1.202 + if [ -f $dbpath/VERSION ]; then 1.203 + eval `(. $dbpath/VERSION || exit $?; echo "DBAPI=\"$DBAPI\"; DBLIB=\"$DBLIB\"; DBVER=\"$DBVER\"")` 1.204 + fi 1.205 + if [ ".$DBAPI" = . ]; then DBAPI="3"; fi 1.206 + if [ ".$DBLIB" = . ]; then DBLIB="db"; fi 1.207 + if [ ".$DBVER" = . ]; then DBVER="4.1.2"; fi 1.208 +} 1.209 + 1.210 +rpmdb_version_save () { 1.211 + if [ ".$DBAPI" = .3 ]; then 1.212 + DBLIB="db" 1.213 + DBVER=`$rpmdb_load -V 2>&1 |\ 1.214 + grep 'Berkeley DB [0-9][0-9]*\.[0-9][0-9]*' |\ 1.215 + sed -e 's;^;X;' \ 1.216 + -e 's;^X[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$;\1;' \ 1.217 + -e 's;^X[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1.0;' \ 1.218 + -e 's;^X.*$;0.0.0;'` 1.219 + elif [ ".$DBAPI" = .4 ]; then 1.220 + DBLIB="sqlite" 1.221 + DBVER=`$rpmdb_sqlite --version 2>&1 |\ 1.222 + grep '^[0-9][0-9]*\.[0-9][0-9]*' |\ 1.223 + sed -e 's;^;X;' \ 1.224 + -e 's;^X[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$;\1;' \ 1.225 + -e 's;^X[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1.0;' \ 1.226 + -e 's;^X.*$;0.0.0;'` 1.227 + fi 1.228 + ( echo "DBAPI=$DBAPI" 1.229 + echo "DBLIB=$DBLIB" 1.230 + echo "DBVER=$DBVER" 1.231 + ) >$dbpath/VERSION.new || exit $? 1.232 + mv $dbpath/VERSION.new $dbpath/VERSION || exit $? 1.233 + chown $musr:$mgrp $dbpath/VERSION 2>/dev/null || true 1.234 + chmod 644 $dbpath/VERSION 2>/dev/null || true 1.235 +} 1.236 + 1.237 rpm () { 1.238 - local opts="--dbpath `echo $dbpath | sed -e 's;/*$;;' -e 's;$;/;'`" 1.239 + local opts="--define '_dbpath `echo $dbpath | sed -e 's;/*$;;' -e 's;$;/;'`'" 1.240 + opts="$opts --define '_repackage_all_erasures 0'" 1.241 if [ ".$force" = .yes ]; then 1.242 opts="$opts --define '__dbi_private yes'" 1.243 fi 1.244 @@ -189,13 +272,9 @@ 1.245 eval "$rpm $opts \"\$@\"" 1.246 } 1.247 1.248 -rpmdb_load () { 1.249 - $prefix/lib/openpkg/rpmdb_load ${1+"$@"} 1.250 -} 1.251 - 1.252 -rpmdb_dump () { 1.253 - $prefix/lib/openpkg/rpmdb_dump ${1+"$@"} 1.254 -} 1.255 +rpmdb_load="$prefix/lib/openpkg/db_tool load" 1.256 +rpmdb_dump="$prefix/lib/openpkg/db_tool dump" 1.257 +rpmdb_sqlite="$prefix/lib/openpkg/sqlite3" 1.258 1.259 ## 1.260 ## RPM DATABASE OPERATIONS 1.261 @@ -225,60 +304,61 @@ 1.262 # remove all known files 1.263 verbose 2 "removing (possibly existing) old RPM database DB files" 1.264 for dbfile in $dbfiles; do 1.265 - eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\)$/dbtype="\1"; dbfile="\2";/'` 1.266 - verbose 3 "removing database file: $dbpath/$dbfile ($dbtype)" 1.267 + eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\):\(.*\)$/dbapi="\1"; dbtype="\2"; dbfile="\3";/'` 1.268 + verbose 3 "removing database file: $dbpath/$dbfile ($dbapi:$dbtype)" 1.269 rm -f $dbpath/$dbfile 1.270 done 1.271 } 1.272 1.273 db_init () { 1.274 # perform official "initdb" operation 1.275 - # (is mostly a no-operation in RPM 4.2, but anyway) 1.276 verbose 2 "creating new RPM database (built-in RPM procedure)" 1.277 rpm --initdb 1.278 - 1.279 - # perform some real RPM work, so more database files 1.280 - # magically spring into existence 1.281 - verbose 2 "operating on new RPM database" 1.282 - rpm --import $prefix/etc/openpkg/openpkg.org.pgp || true 1.283 - rpm -e gpg-pubkey-63c4cb9f-3c591eda --allmatches || true 1.284 - 1.285 - # perform official "rebuilddb" operation in the hope it 1.286 - # creates even more database files now that we have some content 1.287 - verbose 2 "rebuilding new RPM database (built-in RPM procedure)" 1.288 - rpm --rebuilddb 1.289 + rpmdb_version_save 1.290 } 1.291 1.292 db_unbreak () { 1.293 - # cleanup DB region files 1.294 - verbose 2 "cleaning up RPM database DB region files" 1.295 + # cleanup DB files 1.296 + verbose 2 "cleaning up RPM database DB files" 1.297 for dbfile in $dbfiles; do 1.298 - eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\)$/dbtype="\1"; dbfile="\2";/'` 1.299 - if [ ".$dbtype" = .region ]; then 1.300 - verbose 3 "cleaning up DB file: $dbpath/$dbfile ($dbtype)" 1.301 - rm -f $dbpath/$dbfile || true 1.302 - touch $dbpath/$dbfile || true 1.303 + eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\):\(.*\)$/dbapi="\1"; dbtype="\2"; dbfile="\3";/'` 1.304 + if [ -f $dbpath/$dbfile ]; then 1.305 + if [ ".$dbapi" = .3 -a ".$dbtype" = .region ]; then 1.306 + verbose 3 "cleaning up DB file: $dbpath/$dbfile ($dbapi:$dbtype)" 1.307 + rm -f $dbpath/$dbfile || true 1.308 + elif [ ".$dbtype" = .temporary ]; then 1.309 + verbose 3 "cleaning up DB file: $dbpath/$dbfile ($dbapi:$dbtype)" 1.310 + rm -f $dbpath/$dbfile || true 1.311 + fi 1.312 fi 1.313 done 1.314 } 1.315 1.316 -db_extend () { 1.317 - # make sure all RPM database DB files are present 1.318 - verbose 2 "making sure RPM database contains all possible DB files" 1.319 +db_convert () { 1.320 + # make sure all RPM database DB files have the correct type 1.321 + # (as the type can be different during upgrading from RPM 4 to RPM 5) 1.322 + verbose 2 "making sure RPM database are of the correct type" 1.323 for dbfile in $dbfiles; do 1.324 - eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\)$/dbtype="\1"; dbfile="\2";/'` 1.325 - if [ ! -f $dbpath/$dbfile ]; then 1.326 - verbose 3 "creating DB file: $dbpath/$dbfile ($dbtype)" 1.327 - if [ ".$dbtype" = .hash -o ".$dbtype" = .btree ]; then 1.328 - ( echo "VERSION=3" 1.329 - echo "format=bytevalue" 1.330 - echo "type=$dbtype" 1.331 - echo "db_pagesize=16384" 1.332 - echo "HEADER=END" 1.333 - echo "DATA=END" 1.334 - ) | rpmdb_load $dbpath/$dbfile || true 1.335 - else 1.336 - touch $dbpath/$dbfile || true 1.337 + eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\):\(.*\)$/dbapi="\1"; dbtype="\2"; dbfile="\3";/'` 1.338 + if [ ".$dbapi" != ".$DBAPI" ]; then 1.339 + continue 1.340 + fi 1.341 + if [ -f $dbpath/$dbfile ]; then 1.342 + if [ ".$dbapi" = .3 ] && [ ".$dbtype" = .hash -o ".$dbtype" = .btree ]; then 1.343 + dbtype_old="`$rpmdb_dump -h $tmpdir -r $dbpath/$dbfile | grep '^type=' | sed -e 'q' | sed -e 's/^type=//'`" 1.344 + if [ ".$dbtype_old" != ".$dbtype" ]; then 1.345 + verbose 3 "converting DB file: $dbpath/$dbfile ($dbtype_old -> $dbtype)" 1.346 + rm -f $dbpath/$dbfile.new 1.347 + $rpmdb_dump -h $tmpdir -r $dbpath/$dbfile |\ 1.348 + sed -e "s/^type=.*/type=$dbtype/" -e '/^h_nelem=.*/d' |\ 1.349 + $rpmdb_load -h $tmpdir $dbpath/$dbfile.new 1.350 + if $rpmdb_dump -h $tmpdir -r $dbpath/$dbfile.new >/dev/null 2>&1; then 1.351 + rm -f $dbpath/$dbfile 1.352 + mv $dbpath/$dbfile.new $dbpath/$dbfile 1.353 + else 1.354 + warning "failed to convert RPM DB file \"$dbfile\"" 1.355 + fi 1.356 + fi 1.357 fi 1.358 fi 1.359 done 1.360 @@ -289,26 +369,75 @@ 1.361 # reloading their entire content 1.362 verbose 2 "dumping and reloading RPM database DB file contents" 1.363 for dbfile in $dbfiles; do 1.364 - eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\)$/dbtype="\1"; dbfile="\2";/'` 1.365 - verbose 3 "dumping and reloading DB file: $dbpath/$dbfile ($dbtype)" 1.366 + eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\):\(.*\)$/dbapi="\1"; dbtype="\2"; dbfile="\3";/'` 1.367 + if [ ".$dbapi" != ".$DBAPI" ]; then 1.368 + continue 1.369 + fi 1.370 if [ -f $dbpath/$dbfile ]; then 1.371 - if [ ".$dbtype" = .hash -o ".$dbtype" = .btree ]; then 1.372 - rpmdb_dump $dbpath/$dbfile |\ 1.373 - rpmdb_load $dbpath/$dbfile.new 1.374 - rm -f $dbpath/$dbfile 1.375 - mv $dbpath/$dbfile.new $dbpath/$dbfile 1.376 - else 1.377 - rm -f $dbpath/$dbfile || true 1.378 - touch $dbpath/$dbfile || true 1.379 + if [ ".$dbapi" = .3 ]; then 1.380 + verbose 3 "dumping and reloading DB file: $dbpath/$dbfile ($dbtype)" 1.381 + if [ ".$dbtype" = .hash -o ".$dbtype" = .btree ]; then 1.382 + rm -f $dbpath/$dbfile.new 1.383 + $rpmdb_dump -h $tmpdir -r $dbpath/$dbfile |\ 1.384 + $rpmdb_load -h $tmpdir $dbpath/$dbfile.new 1.385 + if $rpmdb_dump -h $tmpdir -r $dbpath/$dbfile.new >/dev/null 2>&1; then 1.386 + rm -f $dbpath/$dbfile 1.387 + mv $dbpath/$dbfile.new $dbpath/$dbfile 1.388 + else 1.389 + warning "failed to reload RPM DB file \"$dbfile\"" 1.390 + fi 1.391 + elif [ ".$dbtype" = .region ]; then 1.392 + rm -f $dbpath/$dbfile || true 1.393 + elif [ ".$dbtype" = .temporary ]; then 1.394 + rm -f $dbpath/$dbfile || true 1.395 + fi 1.396 + elif [ ".$dbapi" = .4 ]; then 1.397 + verbose 3 "dumping and reloading DB file: $dbpath/$dbfile ($dbtype)" 1.398 + rm -f $dbpath/$dbfile.new 1.399 + $rpmdb_sqlite $dbpath/$dbfile .dump |\ 1.400 + $rpmdb_sqlite $dbpath/$dbfile.new 1.401 + if $rpmdb_sqlite $dbpath/$dbfile.new >/dev/null 2>&1; then 1.402 + rm -f $dbpath/$dbfile 1.403 + mv $dbpath/$dbfile.new $dbpath/$dbfile 1.404 + else 1.405 + warning "failed to reload RPM DB file \"$dbfile\"" 1.406 + fi 1.407 fi 1.408 fi 1.409 done 1.410 + rpmdb_version_save 1.411 +} 1.412 + 1.413 +db_migrate () { 1.414 + # perform database migration 1.415 + if [ ".$1" != . ]; then 1.416 + dblib="$1" 1.417 + fi 1.418 + dbapi_old="$DBAPI" 1.419 + if [ ".$dblib" = .db ]; then 1.420 + dbapi_new="3" 1.421 + elif [ ".$dblib" = .sqlite ]; then 1.422 + dbapi_new="4" 1.423 + else 1.424 + error "unknown RPM database backend library \"$dblib\"" 1.425 + fi 1.426 + if [ ".$dbapi_new" = ".$dbapi_old" ]; then 1.427 + error "RPM database already uses requested backend ($DBAPI:$DBLIB:$DBVER)" 1.428 + fi 1.429 + verbose 2 "migrating RPM database" 1.430 + rpm --rebuilddb --dbapi "$dbapi_old" --rebuilddbapi "$dbapi_new" 1.431 + verbose 3 "old RPM database format: $DBAPI:$DBLIB:$DBVER" 1.432 + DBAPI="$dbapi_new" 1.433 + rpmdb_version_save 1.434 + rpmdb_version_load 1.435 + verbose 3 "new RPM database format: $DBAPI:$DBLIB:$DBVER" 1.436 } 1.437 1.438 db_rebuild () { 1.439 # perform official "rebuilddb" operation 1.440 verbose 2 "rebuilding RPM database (built-in RPM procedure)" 1.441 rpm --rebuilddb 1.442 + rpmdb_version_save 1.443 } 1.444 1.445 db_operate () { 1.446 @@ -333,17 +462,30 @@ 1.447 # RPM database files to make sure they are consistent 1.448 verbose 2 "making sure RPM database files have consistent attributes" 1.449 for dbfile in $dbfiles; do 1.450 - eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\)$/dbtype="\1"; dbfile="\2";/'` 1.451 + eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\):\(.*\)$/dbapi="\1"; dbtype="\2"; dbfile="\3";/'` 1.452 + if [ ".$dbapi" != ".$DBAPI" ]; then 1.453 + continue 1.454 + fi 1.455 verbose 3 "fixating DB file: $dbpath/$dbfile ($dbtype)" 1.456 - chown $musr:$mgrp $dbpath/$dbfile 2>/dev/null || true 1.457 - chmod 644 $dbpath/$dbfile 2>/dev/null || true 1.458 + if [ -f $dbpath/$dbfile ]; then 1.459 + chown $musr:$mgrp $dbpath/$dbfile 2>/dev/null || true 1.460 + chmod 644 $dbpath/$dbfile 2>/dev/null || true 1.461 + fi 1.462 done 1.463 + chown $musr:$mgrp $dbpath/VERSION 2>/dev/null || true 1.464 + chmod 644 $dbpath/VERSION 2>/dev/null || true 1.465 } 1.466 1.467 db_list () { 1.468 # list all database files 1.469 for dbfile in $dbfiles; do 1.470 - eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\)$/dbtype="\1"; dbfile="\2";/'` 1.471 + eval `echo $dbfile | sed -e 's/^\(.*\):\(.*\):\(.*\)$/dbapi="\1"; dbtype="\2"; dbfile="\3";/'` 1.472 + if [ ".$dbapi" != ".$DBAPI" ]; then 1.473 + continue 1.474 + fi 1.475 + if [ ! -f "$dbpath/$dbfile" ]; then 1.476 + continue 1.477 + fi 1.478 if [ $verbose -eq 0 ]; then 1.479 echo "$dbfile" 1.480 elif [ $verbose -eq 1 ]; then 1.481 @@ -380,6 +522,9 @@ 1.482 error "OpenPKG RPM database directory \"$dbpath\" not writable" 1.483 fi 1.484 1.485 +# load database information 1.486 +rpmdb_version_load 1.487 + 1.488 ## 1.489 ## DISPATCH INTO COMMANDS 1.490 ## 1.491 @@ -389,7 +534,15 @@ 1.492 verbose 1 "BUILDING NEW RPM DATABASE FROM SCRATCH ($dbpath)" 1.493 db_remove 1.494 db_init 1.495 - db_extend 1.496 + db_fixate 1.497 + db_operate 1.498 + ;; 1.499 + 1.500 + migrate ) 1.501 + verbose 1 "MIGRATING RPM DATABASE FORMAT ($dbpath)" 1.502 + db_unbreak 1.503 + db_convert 1.504 + db_migrate 1.505 db_rebuild 1.506 db_fixate 1.507 db_operate 1.508 @@ -398,7 +551,7 @@ 1.509 rebuild ) 1.510 verbose 1 "REBUILDING NEW FROM OLD RPM DATABASE ($dbpath)" 1.511 db_unbreak 1.512 - db_extend 1.513 + db_convert 1.514 db_reload 1.515 db_rebuild 1.516 db_fixate 1.517 @@ -408,7 +561,7 @@ 1.518 cleanup ) 1.519 verbose 1 "CLEANING UP EXISTING RPM DATABASE ($dbpath)" 1.520 db_unbreak 1.521 - db_extend 1.522 + db_convert 1.523 db_rebuild 1.524 db_fixate 1.525 db_operate 1.526 @@ -416,9 +569,7 @@ 1.527 1.528 fixate ) 1.529 verbose 1 "FIXATING EXISTING RPM DATABASE ($dbpath)" 1.530 - db_extend 1.531 db_fixate 1.532 - db_operate 1.533 ;; 1.534 1.535 list )