Florian Festi [Fri, 30 Mar 2012 12:27:51 +0000 (14:27 +0200)]
Drop no longer needed include of fsm.h
Florian Festi [Thu, 29 Mar 2012 13:49:51 +0000 (15:49 +0200)]
Kill FSM: Remove remains
Florian Festi [Thu, 29 Mar 2012 13:49:11 +0000 (15:49 +0200)]
Kill FSM: Make FSM_PKGBUILD a function
Florian Festi [Thu, 29 Mar 2012 13:47:41 +0000 (15:47 +0200)]
Kill FSM: Make FSM_PKGERASE a function
Florian Festi [Thu, 29 Mar 2012 13:44:40 +0000 (15:44 +0200)]
Kill FSM: Make FSM_PKGINSTALL a function
Florian Festi [Thu, 29 Mar 2012 12:15:16 +0000 (14:15 +0200)]
Prepare for killing the fsm: Move initial call to FSM from fsmSetup to rpmfsmRun. Make fsm FSM_t.
Florian Festi [Wed, 28 Mar 2012 10:43:13 +0000 (12:43 +0200)]
Prepare for killing the fsm: Inline FSM_UNDO; Remove FSM_UNDO calls were fsm->postpone is set and FSM_UNDO doesn't do anything.
Florian Festi [Wed, 28 Mar 2012 10:30:01 +0000 (12:30 +0200)]
Prepare for killing the fsm: Inline remaining FSM_PROCESS code in FSM_PKGINSTALL
Florian Festi [Wed, 28 Mar 2012 10:12:42 +0000 (12:12 +0200)]
Prepare for killing the fsm: Remove superfluous check for being in FSM_PROCESS to allow killing FSM_PROCESS. fsmVerify is only called while being in FSM_PROCESS.
Florian Festi [Wed, 28 Mar 2012 08:05:21 +0000 (10:05 +0200)]
Prepare for killing the fsm: Make FSM_COMMIT a function
Florian Festi [Wed, 28 Mar 2012 07:34:05 +0000 (09:34 +0200)]
Prepare for killing the fsm: Move build code from PSM_PROCESS to FSM_PKGBUILD
Florian Festi [Wed, 28 Mar 2012 07:19:15 +0000 (09:19 +0200)]
Prepare for killing the fsm: Move code for erasing files from FSM_COMMIT to FSM_ERASE
Florian Festi [Tue, 27 Mar 2012 15:52:13 +0000 (17:52 +0200)]
Prepare for killing the fsm: Inline FSM_DESTROY in fsmTeardown()
Florian Festi [Tue, 27 Mar 2012 15:26:49 +0000 (17:26 +0200)]
Prepare for killing the fsm: Inline FSM_FINI code.
Move cleaning the stat_s structs to fsmInit() (beginning of the loop instead of the end)
Drop freeing fsm->path as this is done in fsmInit() and fsmTeardown()
Florian Festi [Tue, 27 Mar 2012 15:03:04 +0000 (17:03 +0200)]
Prepare for killing the fsm: Inline the FSM_NOTIFY code
Ales Kozumplik [Tue, 3 Jan 2012 15:04:18 +0000 (16:04 +0100)]
rpmbuild: warn if header color differs from color of the package architecture.
- For example, warn when building an x86_64 package that only contains 32
bit binaries.
- This should indicate to the maintainers that they might have gotten the
architecture wrong.
- Introduces 'archcolor' in rpmrc so we can map architectures to colors.
- Related: RhBug:713323
Panu Matilainen [Fri, 30 Mar 2012 06:56:43 +0000 (09:56 +0300)]
Axe leftover CANONARCH assignment messing up our "base" archs (RhBug:808250)
- This should've been in commit
2a8d03669732f68f02fa7b21ec87ee3f65d11e5b,
the leftover CANONARCH resets the "base arch" we just set to a wrong
value.
Panu Matilainen [Thu, 29 Mar 2012 08:26:57 +0000 (11:26 +0300)]
Accept files as command line arguments again in rpmdeps (RhBug:807767)
- Commit
a25c3c7bac95ab7eb55f0ecf0b8793d8da341611 removed what was
supposedly a non-supported method of passing files as arguments
(instead of the normal stdin method) to rpmdeps. Turns out
rpmdeps is even documented to take files as cli args, and that's
how Fedora's %filter_setup macros are calling it...
- Allow files as arguments again, but in a way that doesn't cause
argvFoo() vs popt crash-n-burn.
Florian Festi [Tue, 27 Mar 2012 12:22:46 +0000 (14:22 +0200)]
Inline FSM_NEXT
Florian Festi [Tue, 27 Mar 2012 12:31:50 +0000 (14:31 +0200)]
Remove left over debugging code
Florian Festi [Tue, 27 Mar 2012 09:25:49 +0000 (11:25 +0200)]
Move fsm_s to fsm.c and remove fsmNext() from fsm.h
Florian Festi [Tue, 27 Mar 2012 09:09:45 +0000 (11:09 +0200)]
Remove Fseek() code from rpmcpioHeaderRead for now
Fseek() does not return a proper error code. This needs to be fixed before we can use it as most comprssed files do not support seeking and we need to be able to detect this reliably
Florian Festi [Thu, 22 Mar 2012 12:58:02 +0000 (13:58 +0100)]
Untangle lib/fsm.c and lib/cpio.c
Create cpio_t data type that holds the underlaying FD_t instance
Move padding and position handling and trailer generation into cpio.c
Use only one buffer in the fsm (merging the read and write buffer)
Replace the FSM_EAT, FSM_POS, FSM_PAD, FSM_DREAD, FSM_DWRITE states with cpio functions
Prepend "rpm" to the cpio function names
Panu Matilainen [Mon, 26 Mar 2012 10:03:03 +0000 (13:03 +0300)]
Dont bother building internal versions of db utilities we dont need
- rpmdb_dump, load, recover, verify, stat etc are useful at times,
but these are not. This also fixes build with internal db for
more recent versions of Berkeley DB.
Panu Matilainen [Fri, 23 Mar 2012 12:17:47 +0000 (14:17 +0200)]
Eliminate broken data end calculation in dataLength()
- If the caller doesn't know the end pointer, we dont have a whole lot
of chance to come up with a reasonable one either. Just assume
the terminating \0's are there when end boundary is not specified:
when this happens we're dealing with relatively "trusted" data
anyway, the more critical case of reading in unknown headers does
always pass end pointers.
- While capping the end pointer to HEADER_DATA_MAX seems like a
reasonable thing to do (as was done in commit
f79909d04e43cbfbbcdc588530a8c8033c5e0a7c), it doesn't really help
(bad data would likely run past bounds anyway), and it's not right
either: the pointer can be to a stack address, and the stack can be
near the top of addressable range, and ptr + HEADER_DATA_MAX can
cause pointer wraparound. Notably that's exactly what happens
when running 32bit personality process on 64bit system on Linux,
at least in case of i386 process on x86_64, causing all sorts of
breakage..
Panu Matilainen [Thu, 22 Mar 2012 10:24:55 +0000 (12:24 +0200)]
Oops, "magic eight" is necessary here afterall
- Fix regression from commit
807b402d95702f3f91e9e2bfbd2b5ca8c9964ed9,
the array gets passed as a pointer (how else would it work at all),
so despite having seemingly correct type, sizeof(keyid) depends
on the pointer size. This happens to be 8 on x86_64 and friends
but breaks pgp fingerprint calculation on eg i386.
- Also return the explicit size from pgpExtractPubkeyFingerprint(),
this has been "broken" for much longer but then all callers should
really care about is -1 for error.
Panu Matilainen [Wed, 21 Mar 2012 08:04:14 +0000 (10:04 +0200)]
Add test case for scriptlet behavior
- The test-root has a shell but rpm doesn't know about it, add a
fakeshell metapackage that provides it. Should come in handy for
other cases as well, up to now we've been limited to lua scripts only.
- Test that all the "normal" scripts get executed, in expected order
and with expected arguments, on install, upgrade and erase.
- This would've saved the rather embarrassing breakage with commit
274dbf557d1cac90f7c278f9b6d6af05997d92df at least, but better
late than never as they say... It also serves to highlight and
document the arguably broken arguments to %pre- and %posttrans
scripts (ie always 0)
Panu Matilainen [Wed, 21 Mar 2012 07:07:21 +0000 (09:07 +0200)]
Transaction element file info can be legally NULL in some cases
- rpmteClose() will wipe out the file info to free memory, we only
should care whether we failed to (re)load the file info. This
thinko in commit
06a2f1269b035a3a76464149834f2a5a8c4e89f2
broke %posttrans scriptlets (and without commit
274dbf557d1cac90f7c278f9b6d6af05997d92df, %pretrans in other
circumstances), whoopsie *blush*. Now, off to write a test-case
for our scriptlet behavior...
Panu Matilainen [Tue, 20 Mar 2012 14:32:54 +0000 (16:32 +0200)]
Don't free up file info sets on transaction test-runs, take II
- Despite commit
cef18c94807af0935b7796c462aab8ed39f0f376, we'd still
end up freeing the file info sets via rpmteClose() while going
through the test-transaction packages. This together with commit
06a2f1269b035a3a76464149834f2a5a8c4e89f2 caused install failures
on packages which have %pretrans scriptlets, if a test-transaction
was first performed on the same transaction set that gets used
for the "real" transaction as well. How wonderfully obscure...
Panu Matilainen [Tue, 20 Mar 2012 08:05:49 +0000 (10:05 +0200)]
Bump version to appear newer than 4.10.x branch
Panu Matilainen [Tue, 20 Mar 2012 08:00:06 +0000 (10:00 +0200)]
Update translations from Transifex
Panu Matilainen [Tue, 20 Mar 2012 07:46:42 +0000 (09:46 +0200)]
Bump library sonames in preparation for new release
- This is stupid... only librpm and librpmio actually need the bump due
to ABI breakage, librpmbuild and librpmsign are unchanged and could
use just a revision bump. But just incrementing the revision (or age)
would set us on collision course with maintenance updates to 4.9.x.
Then again its not like you can actually use librpmbuild or librpmsign
without also linking to librpm(io) so from everything needs rebuilding
anyway. This all also pretty much makes the whole libtool library
versioning a bit moot. Bah.
Panu Matilainen [Mon, 19 Mar 2012 14:54:34 +0000 (16:54 +0200)]
Look up obsoletes both ways on dependency checking (RhBug:804069)
- "pure install" like 'rpm -i' never removes anything (long-standing
behavior that we dont want to change), but that causes us to allow
installing obsoleting packages without removing what they obsolete,
which in turn causes errors on verify. Not good.
- This (together with commit
9fb81eac0bcd239e46459f72916099f1adfc5cb9)
makes obsoletes behave like conflicts in such a case, preventing
the inconsistency from taking place. Also verify will now whine
on all the involved packages on inconsistencies.
Panu Matilainen [Mon, 19 Mar 2012 14:51:11 +0000 (16:51 +0200)]
Handle obsoletes (more) correctly in rpmdbProvides()
- Obsoletes should only be matched against package names, not provides,
or file names for that matter. This hasn't really mattered so far
due to the way rpmdbProvides() gets called currently, but there's
a missing case that requires this...
Panu Matilainen [Mon, 19 Mar 2012 10:41:12 +0000 (12:41 +0200)]
Fixup couple of md5/digest references regarding verify in the manual
- '5' in verify stands for digest nowadays, keep the md5 reference to
explain why 5 is for digest though (related to RhBug:804049)
- In --dump query everything relates to files, refer to the attribute
in question ie 'digest' instead of 'filedigest'
Vincent Untz [Tue, 13 Mar 2012 15:27:01 +0000 (16:27 +0100)]
Fix find-lang to correctly detect all translations for new gnome help
This was not working for locales with a territory (fr_FR, for instance).
Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Panu Matilainen [Mon, 19 Mar 2012 06:43:58 +0000 (08:43 +0200)]
Include more package information in the progress output
- For non-hashed mode, dump the full NEVRA string. This might break
programs that are parsing the --percent format, but such programs
almost certainly need adjusting for the added erasure progress anyway.
- For hashed mode, show package NEVR instead of just name. Otherwise
somebody will sooner or later file a bug on "confusing output"
as it might seem it's removing what it just installed in upgrade-mode.
Full NEVRA would be better still but screen estate is tight as it is...
- Also get rid of headerFormat() call here, use RPMTAG_NEVR(A) extensions
instead.
Panu Matilainen [Mon, 19 Mar 2012 06:21:17 +0000 (08:21 +0200)]
Make a bit more room for names in progress output (cosmetics)
Panu Matilainen [Thu, 15 Mar 2012 09:41:40 +0000 (11:41 +0200)]
Fix rpm2cpio.sh error exit on unrecognized compression
- This is not a function so it needs to be exit, not return.
Reported as a side-note in RhBug:803421.
Panu Matilainen [Wed, 14 Mar 2012 09:30:34 +0000 (11:30 +0200)]
Unbreak lua's base64 encode/decode extensions
- Commit
70f063cb773bedb7d336429d9bc8ed1d4e5d18f4 accidentally
changed lua's base64 encode/decode interface too, ugh. Dangers of
search-and-replace... Only the function name string exported to
lua matters but renaming the internal functions back as well
for naming consistency.
Panu Matilainen [Wed, 14 Mar 2012 08:09:35 +0000 (10:09 +0200)]
Make rpm2cpio exit code accurate for large packages and partial copy
- Grab the uncompressed payload size from header and compare number
of bytes copied to that for exit code. Previously, truncated
payloads could have returned with success. This also fixes the
exit code for large payloads (RhBug:790396)
Panu Matilainen [Wed, 14 Mar 2012 08:05:32 +0000 (10:05 +0200)]
Fix ufdCopy() for large (> 2GB) files
- Files can be (much) larger than INT32_MAX, change the return
type to off_t and fix + simplify the calculations. Fixes the other
half of RhBug:790396 and makes ufdCopy() usable for other purposes too.
Panu Matilainen [Mon, 12 Mar 2012 13:25:12 +0000 (15:25 +0200)]
Teach rpm2cpio.sh about xz compression (RhBug:674348 & others)
Panu Matilainen [Fri, 9 Mar 2012 11:13:25 +0000 (13:13 +0200)]
Eliminate rpmSetTable() from the API
- Presumably the rpmrc internals still need the magic table tennis
but nobody else should want to mess with this, reconfiguration
for another (build) arch is done through rpmReadConfigFiles().
Panu Matilainen [Fri, 9 Mar 2012 11:05:38 +0000 (13:05 +0200)]
rpmSetTables() call in rpmbuild has been dying long enough by now
- The call to rpmSetTables() from rpmbuild is simply redundant for
all I can tell, it gets called from inside rpmrc/config processing
with the same values and the extra call here never changes anything
as the tables have already been set through rpmReadConfigFiles()
whether building for several targets or not.
Panu Matilainen [Fri, 9 Mar 2012 10:16:11 +0000 (12:16 +0200)]
Allow silent build on automake versions that support it
Panu Matilainen [Thu, 8 Mar 2012 13:12:33 +0000 (15:12 +0200)]
Whoops, dont make install progress callbacks on erasure
Panu Matilainen [Thu, 8 Mar 2012 08:17:47 +0000 (10:17 +0200)]
Optimize python db index instances list generation and fix related leak
- The number of entries is well know, allocate the entire list at
once and set instead of appending one by one. Also cures a leak from
created tuples not being decref'ed before - list set steals the
reference whereas append requires an additional decref to transfer
the ownership to the list.
Panu Matilainen [Thu, 8 Mar 2012 08:02:51 +0000 (10:02 +0200)]
Optimize header data python conversion for array tags a bit
- We know the array size beforehand, allocate the entire array
at once and set the elements instead of appending one by one.
This is (an obvious) and well-measurable, if not a huge, win.
Panu Matilainen [Wed, 7 Mar 2012 13:02:54 +0000 (15:02 +0200)]
Pull updated translations from Transifex
Panu Matilainen [Wed, 7 Mar 2012 12:31:42 +0000 (14:31 +0200)]
Revert to former spec query behavior + comment
- Various tools expect to get the full package list, not just those
that would actually be built. There are of just as valid reasons
for only wanting the packages that would be built, but we need
to make this caller specifiable, just changing the behavior breaks
existing tools unnecessarily. Add reminder comment why the thing
is the way it is...
Ville SkyttƤ [Sun, 19 Apr 2009 20:51:19 +0000 (23:51 +0300)]
Add --disable-dependency-tracking to %configure options.
autotools dependency tracking isn't generally useful in rpm builds;
disabling it results in cleaner build logs and possibly slight build
speedups.
Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Panu Matilainen [Wed, 7 Mar 2012 11:47:09 +0000 (13:47 +0200)]
Warn but dont fail the build on STABS debuginfo (RhBug:725378, others)
- debugedit doesn't support STABS but there are some crazy cases
like PPC Linux kernel which contains both STABS and DWARF debuginfo
sections, manually added. A better fix would be erroring out
if we didn't find any usable debuginfo and warning otherwise but
this at least folks get their kernels built.
Panu Matilainen [Wed, 7 Mar 2012 11:40:08 +0000 (13:40 +0200)]
Disable source fetch on build by default (for now) + comment
- We need to grow some digest (and why not external signature as well)
validation mechanism before we can let rpmbuild download + execute
arbitrary content from the internet, at least by default.
Panu Matilainen [Wed, 7 Mar 2012 09:31:15 +0000 (11:31 +0200)]
Teach find-lang about the new gnome help layout (RhBug:736523)
Jan Kratochvil [Wed, 7 Mar 2012 09:30:19 +0000 (11:30 +0200)]
Generate debug symlinks for all filenames sharing a build-id (RhBug:641377)
Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Richard W.M. Jones [Wed, 22 Feb 2012 11:46:16 +0000 (11:46 +0000)]
Correctly quote tr [:blank:] in OCaml dependency scripts.
This fixes: https://bugzilla.redhat.com/show_bug.cgi?id=796149
Signed-off-by: Panu Matilainen <pmatilai@redhat.com>
Panu Matilainen [Wed, 29 Feb 2012 09:04:25 +0000 (11:04 +0200)]
Explicitly remap device numbers along with inodes at build
- Buildroot cannot cross filesystem boundaries without evil tricks,
which is what the fs boundary sanity check from commit
7a9a5505667c681044bacb21c9b84ac66c062fe7 was intended to catch.
However in the case of source rpms, spec and sources can legitimately
reside on different filesystems (one case of this is rpmbuild -ts
from cwd on different fs than the %_topdir) and needs to be permitted.
- Since we flatten the inodes to appear from a single filesystem,
we need to also flatten the device numbers to match this. Turns
out handling this is simpler than trying to prevent it :) Oh well...
As we use the actual fs values for build-time hardlink discovery
this should correctly handle hardlinks even if packaging crosses
fs boundaries.
- Device number 1 which we use is probably equally bogus on all
platforms, but this is irrelevant as the device and inode numbers
are only used for hardlink discovery.
Panu Matilainen [Tue, 28 Feb 2012 13:22:32 +0000 (15:22 +0200)]
Only consider rpmdb growth for added packages
- Blargh, dumb thinko in previous commit: removed packages wont
necessarily decrease the rpmdb size, but they dont increase it
either.
Panu Matilainen [Tue, 28 Feb 2012 12:53:29 +0000 (14:53 +0200)]
Fix invalid memory access from rpmdb growth estimation (RhBug:766260)
- The dsi retrieved from rpmtsDbDSI() would become invalid whenever
ts->dsi structure got realloced, ie anytime when disk space is
calculated for a different fs than where the rpmdb resides. This
is likely to be the real issue behind RhBug:766260 and also RhBug:671056.
Just call rpmtsUpdateDSI() directly with suitable arguments for the
rpmdb to avoid the special (re)alloc paths.
- In addition, consider the db growth for packages with no files too.
Panu Matilainen [Tue, 28 Feb 2012 10:18:10 +0000 (12:18 +0200)]
Don't process spec %include in false branch of %if clauses (RhBug:782970)
Panu Matilainen [Tue, 28 Feb 2012 08:31:28 +0000 (10:31 +0200)]
Unbreak rpm -V output (RhBug:797964)
- Commit
ac0ab016a5ec31e65eb0c0910a5a6f1199aae3e7 unintentionally
changed the order of the problems shown in verify strings due to
a dumb oversight (greetings to self, duh). In other words, this
fixes a verify output regression in rpm >= 4.9.x by restoring
the long-standing (and documented) order of the verify output chars.
- Also fix the testcase which unfortunately was only added after
the output-changing commit so it didn't catch the breakage either :-/
Panu Matilainen [Tue, 21 Feb 2012 14:51:08 +0000 (16:51 +0200)]
Add a testcase for tag extension bad file name triplet detection
Panu Matilainen [Tue, 21 Feb 2012 14:49:51 +0000 (16:49 +0200)]
Raise exception in python on headerGet() invalid data failure
Panu Matilainen [Tue, 21 Feb 2012 14:24:18 +0000 (16:24 +0200)]
Test for file data tag sanity in fnTag() extensions
- Basename and dirindex counts must be equal, dirnames count must be
larger than zero and no larger than number of basenames. Check
that directory indexes are within range. Additionally file states
array size, if used, must equal to the genaral file count.
Panu Matilainen [Tue, 21 Feb 2012 13:59:34 +0000 (15:59 +0200)]
Fix crash on INSTFILENAMES extension on non-installed package
- Packages with no RPMTAG_FILESTATES cannot have installed files
from our POV, just exit early in that case.
- Rerrange the exit path a bit and only call rpmtdFreeData() on
file states if the corresponding headerGet() call was actually
made. Wont make any difference yet, but once we have other jumps
to exit it will.
Panu Matilainen [Tue, 21 Feb 2012 12:34:57 +0000 (14:34 +0200)]
Sanitize filename tag extension handling
- Rename rpmfiBuildFNames() to fnTag() and push all the td manipulation
there, making all the various different fn-related tags differ by
just the arguments to fnTag() and allowing central error etc
handling. No functional changes (yet) though.
Panu Matilainen [Tue, 21 Feb 2012 12:14:09 +0000 (14:14 +0200)]
Flag error in tag container for non-extension tag retrieval
- This should mostly be a can't happen case, but at least in theory
region retrieval could fail. So could unknown data type, but a header
with unknown data types shouldn't even load... Anyway, there could
be further error cases we might be able to flag here.
Panu Matilainen [Tue, 21 Feb 2012 11:52:18 +0000 (13:52 +0200)]
Add error indicator flag for tag data containers
- Tag retrieval can in some cases fail, especially so for tag
extensions. The headerGet() interface doesn't directly allow
distinguishing between non-existent tag and existent but invalid,
but we can sneak in that information through in the tag data flags.
Panu Matilainen [Tue, 21 Feb 2012 11:50:34 +0000 (13:50 +0200)]
Add getter for rpmtd flags
- While these are mostly of rpmtd-internal interest only, there are
cases when caller might want to know...
Panu Matilainen [Fri, 10 Feb 2012 08:40:45 +0000 (10:40 +0200)]
Remap inode numbers to fit into 32bit integer space on build (RhBug:714678)
- 64bit inode numbers lose their uniquity when brutally truncated
to 32bit integers as we've done so far. This can and will cause rpm
(and cpio) to mix up arbitrary file entries as hardlinks and vice versa.
- As the only interesting aspect of inode numbers is whether they're
equal to something else or not, we dont have to carry the "physical"
on-disk value to preserve semantics. So we can just remap the
inode numbers to something that fits our 32bit integer tags
without causing compatibility complexies with older rpms and
cpio (and since we can't handle more than INT32_MAX files in a package
anyway, breaking compatibility for this would be just braindead dumb).
An extremely simple way to achieve this is to use our
build-time file list index as the basis of stored inode number.
- In theory this breaks inode-device pairing, but as the buildroot
cannot span across filesystems in any remotely normal conditions,
just add a sanity check to catch the dirty tricksters...
- Based on a patch by Zdenek Pavlas, just further simplified and
buildroot fs boundary sanity check added.
Panu Matilainen [Thu, 9 Feb 2012 12:16:29 +0000 (14:16 +0200)]
Also test that total size is calculated correctly wrt hardlinks
Panu Matilainen [Wed, 8 Feb 2012 15:45:34 +0000 (17:45 +0200)]
Add a rough-cut testcase for hardlink handling
- Check that we get expected number of links in package generation,
that all the files got installed and that the linked files are
actually hardlinks (for our purposes, plain inode suffices)
Panu Matilainen [Wed, 8 Feb 2012 13:40:02 +0000 (15:40 +0200)]
Add tag extension to calculate hardlink count for files
Panu Matilainen [Wed, 8 Feb 2012 08:56:09 +0000 (10:56 +0200)]
Switch back to former, much smaller BDB memory pool size (RhBug:752897)
- A larger cache is beneficial in various scenarios, but triggers
horrible worst-case performance under memory pressure (or so my
current theory goes, there might be other factors too). The
worst-case degration is orders of magnitude bigger than the best-case
improvements from the larger cache and for many use-cases doesn't
make a whole lot difference. We could/should tune the cache with
priorizing indexes and all, and perhaps dynamically select the
cache size but for now, the 1Mb cache size is known to "just work".
Panu Matilainen [Fri, 3 Feb 2012 10:46:22 +0000 (12:46 +0200)]
Add --test option to rpmkeys
- Allows, well, testing whether a key could be imported before actually
doing it
Panu Matilainen [Fri, 3 Feb 2012 10:23:31 +0000 (12:23 +0200)]
Honor RPMTRANS_FLAG_TEST in rpmtsImportPubkey()
Panu Matilainen [Thu, 2 Feb 2012 17:13:03 +0000 (19:13 +0200)]
Remove the arbitrary limitation on transaction keyring change
- There are some situations where switching keyrings might be wanted,
especially as long as we dont export a way to pass keyring as
an argument to package reading/verification functions. Since thereƤs
no technical reason to disallow it, might as well allow it...
Panu Matilainen [Thu, 2 Feb 2012 12:36:41 +0000 (14:36 +0200)]
Disable signature checking during database rebuild by default
- While it would be perfectly reasonable to perform signature
checking during db rebuild, this is problematic as long as our
keys live in the same database we're rebuilding: the environment
might be paniced, the indexes required for key lookups might be
corrupt or non-existent etc - one would assume there's a reason for
the db is getting rebuilt in the first place. When signature checking
is enabled, we're forced to generate missing indexes on the potentially
borked database we're just about to rebuild, which might not go very
well, and since they keyring loading has no clue its getting called
from middle of db rebuild it'll try to use a shared environment
which might be broken ... etc.
Panu Matilainen [Thu, 2 Feb 2012 12:31:17 +0000 (14:31 +0200)]
Use private environment for database rebuilds too, document
- One of the more common reasons for users to do --rebuilddb is
a paniced environment. Throwing DB_RUNRECOVER errors at the user
who is trying to recover by rebuilding the db isn't terribly
productive (RhBug:590710). Use a private environment while
rebuilding for both the original and new database, and dont bother
with CDB which only slows things down when there are no other
players present.
- Verify wants the same flags but for different reasons...
Panu Matilainen [Thu, 2 Feb 2012 11:53:38 +0000 (13:53 +0200)]
Never load ts keyring if signature checking is disabled
- Loading the pubkeys from database numerous often unwanted side-effects,
if signature checking is disabled then there's no point loading
the keys either.
- Commit
cad147070e5513312d851f44998012e8f0cdf1e3 did this for
rpmReadPackageFile() specifically but we really want it honored
for all operations including headerCheck() and friends, handle
it centrally in loadKeys() for simplicity.
Panu Matilainen [Wed, 1 Feb 2012 15:48:20 +0000 (17:48 +0200)]
Don't free up file info sets on transaction test-runs
- We'd like to get rid of the potentially huge amounts of memory
eaten by file info sets as early as possible, but when there's a
chance that we'll get called again with either added transacation
elements or on-disk changes, such as %pretrans changing something
underneath us, we need to (be able to) recalculate everything
from scratch. Only free up the memory when we know we dont need
it anymore, ie on an actual transaction run.
- This doesn't change anything for rpm itself, for yum and others
which do a separate test-transaction first, it means %pretrans
directory<->symlink replacement hacks and the like have a chance
of working again. I'm sure there's a bug filed on this somewhere but...
Panu Matilainen [Mon, 30 Jan 2012 08:23:51 +0000 (10:23 +0200)]
Use rpmReadHeader() on signature checking path too
- rpmReadHeader() performs far more initial sanity checks on the header
than headerRead() does, and makes behavior consistent with eg query
and install paths. As an added bonus we'll get more detailed
error messages too.
Panu Matilainen [Sat, 28 Jan 2012 16:03:42 +0000 (18:03 +0200)]
Add a basic testcase for bogus filename triplet detection
Panu Matilainen [Sat, 28 Jan 2012 15:53:11 +0000 (17:53 +0200)]
Test for filename triplet sanity in rpmfiNew()
- Basename and dirindex counts must be equal, dirnames count must be
larger than zero and no larger than number of basenames. Check
that directory indexes are within range.
- There are mountains of further checks to be added here (and elsewhere)
but we gotta start somewhere... and filename triplets are one of the more
critical elements we got.
Panu Matilainen [Sat, 28 Jan 2012 15:23:16 +0000 (17:23 +0200)]
xcalloc() cannot return NULL, remove redundant check
Panu Matilainen [Sat, 28 Jan 2012 15:07:42 +0000 (17:07 +0200)]
Don't assume rpmfiNew() always succeeds
- Add NULL checks and add/adjust comments where appropriate.
- The remaining callers should handle NULL fi gracefully if not
entirely correctly: rpmfiFC() returns 0 on NULL fi, so these
callers just see the erronous file info set as "no files" case.
Something to fine-tune later...
Panu Matilainen [Sat, 28 Jan 2012 13:54:40 +0000 (15:54 +0200)]
Add a basic testcase for bogus (incomplete) header detection
Panu Matilainen [Sat, 28 Jan 2012 13:20:48 +0000 (15:20 +0200)]
Add some basic sanity checks to rpmte creation, allow rpmteNew() to fail
- Verify that a header at least has the very basic elements like
name, version, release, os and arch (except for gpg-pubkeys which
dont have the latter two, sigh), fail if not.
- rpmfiNew() cannot currently fail but handling this error will allow
sanity checking the file metadata which can be inconsistent even if
a header is "physically" consistent.
- We'll eventually want to have sanity checks on dependency sets too, but
unlike rpmfiNew(), rpmdsNew() currently returns NULL for non-existent
dependencies (eg most packages do not have conflicts or obsoletes) to
save memory. Either that needs to change or we'll need to check
for tag existence for the meaning of a returned NULL here.
Panu Matilainen [Sat, 28 Jan 2012 13:17:02 +0000 (15:17 +0200)]
Don't assume rpmteNew() always succeeds, part III
- Return error from verifyscript if rpmteNew() fails. This can't
currently happen but handling this error makes it possible to
do sanity checks on the header contents, such as file list integrity etc.
Unlikely to occur for installed packages, but verify can be run
on non-installed packages as well, where failure is more of a possibility.
Panu Matilainen [Sat, 28 Jan 2012 12:50:16 +0000 (14:50 +0200)]
Move TR_ADDED file size init into addTE()
- No functional changes, just stuffing it there along with most
other rpmte init work and remove the pointless switch-case while at it
Panu Matilainen [Sat, 28 Jan 2012 12:18:35 +0000 (14:18 +0200)]
Don't assume rpmteNew() always succeeds, part II
- Return error from rpmtsAddInstallElement() if rpmteNew() fails. This
can't currently happen, but handling this error makes it possible
to do sanity checks on the header contents, such as file list integrity.
Panu Matilainen [Sat, 28 Jan 2012 12:11:08 +0000 (14:11 +0200)]
Error out early if rpmdb open fails on upgrade element addition
- If we can't open the rpmdb then we cannot correctly process the
upgrade, error out early. Mostly a "can't happen" case though.
Also makes the logic a bit clearer, hopefully.
Panu Matilainen [Sat, 28 Jan 2012 11:18:53 +0000 (13:18 +0200)]
Don't assume rpmteNew() always succeeds, part I
- Return error from removePackage() if rpmteNew() fails. This can't
currently happen and is unlikely anyway on already installed
packages (this is more interesting for added packages) but
just in case...
- Handling failure from upgrade- and obsoletes erasures is trickier
both can add any number of erasure elements, and if one of them
fails we'd need to undo all the erasures caused by this element.
Just add a reminder comment for now.
Panu Matilainen [Tue, 17 Jan 2012 11:17:31 +0000 (13:17 +0200)]
Axe unused cruft
Panu Matilainen [Tue, 17 Jan 2012 10:50:51 +0000 (12:50 +0200)]
Kill off yet more repackage remnants from fsm
- CPIO_ALL_HARDLINKS flag and related code has been unused and dead
since rpm >= 4.6.x
Panu Matilainen [Tue, 17 Jan 2012 10:33:26 +0000 (12:33 +0200)]
Lift hard-link payload writing to helper function, fsmStage is big enough
Panu Matilainen [Tue, 17 Jan 2012 09:03:27 +0000 (11:03 +0200)]
Eliminate FSM_WOPEN, FSM_WRITE and FSM_WCLOSE stages
- These are nothing but unnecessarily specialized Fopen(), Fwrite() and
Fclose() for what is a purely local need in expandRegular(). Move
the local stuff where it belongs.
Panu Matilainen [Tue, 17 Jan 2012 08:52:46 +0000 (10:52 +0200)]
Eliminate FSM_ROPEN, FSM_READ and FSM_RCLOSE stages
- These are nothing but unnecessarily specialized Fopen(), Fread() and
Fclose() for what is a purely local need in writeFile(). Move
the local stuff where it belongs.
Panu Matilainen [Tue, 17 Jan 2012 07:01:38 +0000 (09:01 +0200)]
Eliminate file digest related members from fsm struct
- Both digest algo and the current file digest from header are
only needed inside expandRegular(), push the stuff down there.