105 Commits

Author SHA1 Message Date
Panu Matilainen
0bf0dd0809 Do not record directory sizes in packages
Directory size is an install-time filesystem specific implementation
detail, build-time just doesn't have a clue. If we want to try taking
directory sizes into account, this needs to happen in the disk space
checking at install time.

It also helps making builds a bit more reproducable (PR #229)

(cherry picked from commit 2cf7096ba534b065feb038306c792784458ac9c7)
2021-07-06 16:17:15 +03:00
62037838a4 build: canonicalise symlink destinations
The canonicalization is based on the code lifted from tools/debugedit.c

The new behaviour is enabled by default and controlled by
%_canonicalize_symlinks macro.
2020-08-24 19:38:47 +00:00
Panu Matilainen
5f7fe6577f Warn on absolute symlinks at build-time
While supported of course, absolute symlinks are nasty in many ways
so issue a warning to packagers. Update two affected test-cases.
Related to #668.

(cherry picked from rpm.org commit 8359ded6784579b9f2527a09888132034783e1de)
2020-08-24 19:38:47 +00:00
Bernhard M. Wiedemann
7dba4f2bba Do not store digests of ghost files
when the files exist during build time.
The hash will never be used for verification anyway.

This helps making packages build more reproducibly.

(cherry picked from rpm.org commit 8cda485e1150dc6be990a7aa4496da848154cf55)
2020-08-24 19:38:47 +00:00
Panu Matilainen
308bc34ea9 Handle readlink() failure in genCpioListAndHeader() correctly
It might be a rare condition but it /can/ happen, and previously that would cause '\0' written out of bounds (at negative array offset). Also leave room for the terminating '\0' at the end of buffer when calling readlink(), previously a link exactly the size of buffer would've been silently truncated.

(cherry picked from rpm.org commit c499a0b912629eeeabc3554d3e3a95c088e96422)
2020-08-24 19:38:47 +00:00
Colin Walters
8e0d85c61e Add 'VCS' key
Spec files have a lot of metadata about a project.  However one of the
most key components is the upstream version control system which was
notably lacking.

Resolve this by adding a "VCS" key.  There is no specification
for contents of this key, given that the set of version control
systems (and features thereof) are not well-defined.  However,
recommendations are:

 * git: This URL should be in a form that can be passed to "git clone",
   with the additional feature that an optional fragment identifier "#foo"
   denotes a branch or tag.
2019-11-01 16:16:23 +00:00
Ivan Zakharyaschev
6be20da468 headerNVR() replaced by the new header{NVRD,Name{,Version}}() in trivial cases
These are the cases where even the release was not needed (so, the
disttag is not needed, too), or one case where the filename is
contructed (and it doesn't include the disttag).

Now grep -Ee 'headerNVR[^D]' will show the remaining non-trivial
cases, where adapting to disttags may be needed.
2019-02-26 23:16:13 +03:00
Ivan Zakharyaschev
eddfb9267b don't touch unrealistic deps, when filling insignificant disttags for compatibility
Not touched:

Requires: x < E:V-R[:D]
Obsoletes: x > E:V-R[:D]
Requires: x > E:V-R:D (with a disttag)

There are actually no such dependencies in Sisyphus now.
2019-02-22 15:59:27 +03:00
a5bed9a6e4 Rewrite "x < E:V-R[:D]" and "x > E:V-R[:D]" deps for compatibility with disttag-unaware tools
With this change, there are not so many failing tests from
rpminstall-tests-1.0-alt4 (or equivalently from the predisttag branch
there) when run in a system with an "old" rpm and the "new" rpm-build

$ rpm -q rpm --lastchange
* Пт окт 05 2018 Gleb F-Malinovskiy <glebfm@> 4.13.0.1-alt4
- Add _allow_deps_with_beginning_dot macro to allow dependencies
  beginning with a dot character in spec file (vseleznv@).
$ ./makeme.sh -j4 SHORT=1
...
XFailed tests:
installable_dummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg)
noninstallable_dummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg)
installable_virtDummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg)
noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg)
installable_dummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg)
noninstallable_dummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg)
installable_virtDummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg)
noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg)
obsoleted_dummyDisttag_with_obsolEqualEpochDisttag (unrealistic obsoleting disttag)
obsoleted_dummyDisttag_with_obsolEqualDisttag (unrealistic obsoleting disttag)
installable_provVR3Disttag_with_reqEq_VR3 (elusive external/strict-old-old dep & future pkg)
Failed tests:
noninstallable_provOnlyV_with_reqVR
noninstallable_provOnlyV_before_reqVR
installable_provOnlyV_with_conflVR
installable_provOnlyV_before_conflVR

Except for the underspecified Provides problem, the insteresting cases
are the cases of a = dependency.

We can think of a Conflicts: subpkg = E:V-R, which wouldn't work,
but many such cases (if there are any) must be mitigated by the change
of the value of %%EVR to include the disttag (in another commit).

So, the "old" and "new" rpm behave much more similar w.r.t. to the
packages built by the new rpm-build. (This is what we wanted.)
2019-02-22 13:55:30 +03:00
Ivan Zakharyaschev
e3b9fe1253 files.c: more const qualifiers at appropriate places 2019-02-21 14:18:39 +03:00
efc8d3637c Drop %__find_prereq support
It has never been used anyway, and now it stands in the way of replacing
deprecated PreReq with Requires(pre,postun).
2019-01-14 20:56:55 +00:00
fa25b864cd Revert "build/interdep.c: add upgradeInterdep function"
This kind of interpackage dependencies appeared to be problematic.

This reverts commit f4d876f9353c851e0f1bef3c44c7efe998bf59ce.
2019-01-10 23:20:03 +00:00
e048944ef8 Use xasprintf 2019-01-10 23:20:03 +00:00
Alexey Tourbin
72ad101add 4.0.4-alt113
- Implemented limited support for large files: a 2GB+ file can now be packaged,
  but the total size of uncompressed cpio payload is capped at 4 GB.
- Automatically downgrade LZMA compression levels 7-9 -> 6 on small payloads.
2018-06-26 13:03:42 +03:00
Alexey Tourbin
4d777d01d2 changed a few more vars int -> uint32_t/size_t
This is probably the last change of such kind.  There are many other
instances left, and fixing them all is hopeless.  On the other hand,
the way mod 2^32 arithmetic works, although technically not always
well defined, is to our advantage.  I suggest that only user-visible
discrepancies further be fixed.

The following comparison to st_size looks particularly bad.
The code turns out to be unused!

lib/signature.c:
> verifySizeSignature(const char * datafile, int_32 size, /*@out@*/ char * result)
> [...]
>     if (size != st.st_size) {
>         sprintf(result, "Header+Archive size mismatch.\n"
2018-06-26 12:42:44 +03:00
Alexey Tourbin
d410a87e93 configure.ac: enabled large-file support
This turns out to be a bit easier than I thought yesterday.  When mmap
fails in lib/fsm.c, it falls back to file descriptor IO.  So by simply
enabling AC_SYS_LARGEFILE, I'm already able to package a 3G file, which
can be written like this:

perl -e 'seek STDOUT,3<<30,0 and print 1 or die' >out
2018-06-26 12:42:44 +03:00
Alexey Tourbin
d85641818b build/pack.c: pre-calculate cpio archive size, fail gracefully on >= 4G
The nearest goal is to be able to package files up to 4G, on both 32-bit
64-bit architectures, provided that cpio payload size also does not
exceed 4G.  More specifically, the limit is 2^32-2, while 2^32-1 remains
special (this is not my own invention, I adopt it from rpm.org).

If the limit is exceeded, rpmbuild should fail gracefully instead of
writing malformed packages with truncated integer tags.

(Supporting 4G+ files is a distant goal - neither rpm-4.0 nor apt-rpm
can handle them yet.  Besides, it's not clear if producing such big
packages is even a good idea, unless one wishes to package p0rn.)
2018-06-26 12:42:44 +03:00
Ivan Zakharyaschev
4347c5f9d0 turn on running %%__find_{conflicts,obsoletes} if they are defined 2018-05-23 17:00:54 +03:00
f4d876f935 build/interdep.c: add upgradeInterdep function
If RPM_STRICT_INTERDEPS environment variable is set and not empty, this
function replaces every strict requirement on NEVR with
".${RPM_STRICT_INTERDEPS}-NEVR", and adds to every package which
provides NEVR ".${RPM_STRICT_INTERDEPS}-NEVR" provide if some other
package requires this ".${RPM_STRICT_INTERDEPS}-NEVR".

This is needed to able to build a source package to different repo
branches with the same NEVR, and to rebuild the source package as well
with same NEVR within one branch and avoid interdep collisions.
2018-04-18 22:51:40 +03:00
7161802b38
respect device ID when remap inodes
The inode collision probably would never have happened (especially in
chroot environment), but this make the code more correct.
2018-03-27 20:37:22 +03:00
d6fec7f8ea genCpioListAndHeader: remap device and inode numbers (ALT#34398)
Inspired by rpm.org commits rpm-4.10.0-beta1~80 and rpm-4.10.0-beta1~67.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
2018-01-05 23:20:22 +00:00
55b07cb0ff Add support for SOURCE_DATE_EPOCH environment variable (ALT#34200)
This allows rpmbuild to override file timestamps.

Based on rpm.org commit 8d84878ee05b2e63858af3a5a49d98e9e2933b1b.
2017-11-15 15:29:28 +00:00
cd742a2959 processBinaryFiles: check provides of generated binary packages 2013-01-26 22:32:11 +00:00
Alexey Tourbin
f491d6e6c4 build/files.c: fixed SIGPIPE to avoid "broken pipe" messages in scripts
SIGPIPE SIG_IGN handler was installed before the fork, which means that,
in autodep scripts, SIGPIPE was ignored as well.  This is why in
commands like

	cmd1 | cmd2

cmd1 was not killed graceully with SIGPIPE, but instead writing to cmd2
resulted in EPIPE.  For which some commands apparently were not ready.

This fixes messages like
/usr/lib/rpm/files.req: line 33: echo: write error: Broken pipe
2011-10-03 06:11:54 +04:00
Alexey Tourbin
57ecc37f6f build/files.c: fixed RPMTAG_SIZE for src.rpm packages 2011-02-09 14:15:54 +03:00
Alexey Tourbin
a7b7111110 build/files.c (processBinaryFiles): fixed return after find-requires failure 2011-02-05 09:22:40 +03:00
Alexey Tourbin
e061586385 build/files.c (finalizePkg): calculate RPMTAG_SIZE after optimizations
Note that checkHardLinks function is now removed.  It was unclear
whether it was supposed to verify %lang attributes (returning non-zero
on error) or indicate if all hardlinks are packaged within the package.

It turns out that only a single package in our repo has
PartialHardlinkSets dependency:

$ cd /ALT/Sisyphus/files/x86_64/RPMS/
$ rpm -qp --qf '[%{NAME}\t%{REQUIRENAME}\n]' *.rpm |fgrep 'PartialHardlinkSets'
$ cd /ALT/Sisyphus/files/noarch/RPMS/
$ rpm -qp --qf '[%{NAME}\t%{REQUIRENAME}\n]' *.rpm |fgrep 'PartialHardlinkSets'
freeciv-common  rpmlib(PartialHardlinkSets)
$

This probably means that freeciv-common has hardlinks with different
%lang attributes (which probably was supposed to be an error).  So
the whole issue should be reconsidered.  A leave XXX marks in the
code and suggest new PartialHardlinkSets implementation (however,
the dependency is not being added yet).
2011-02-05 03:49:54 +03:00
Alexey Tourbin
83147e6c03 implemented debuginfo.req and debuginfo.prov 2011-02-04 02:55:25 +03:00
Alexey Tourbin
2c673900ce build/interdep.c: initial revision 2011-01-31 04:53:26 +03:00
Alexey Tourbin
818e61d012 build/files.c (makeDebugInfo): implemented automatic *-debuginfo packages 2011-01-31 03:23:32 +03:00
Alexey Tourbin
2c2529cf98 build/files.c (runPkgScript): new helper function for autodep-like scripts 2011-01-31 03:02:36 +03:00
Alexey Tourbin
5a1601ed3d build/checkFiles.c: fixed %exclude vs unpackaged regression 2011-01-21 20:48:10 +03:00
Alexey Tourbin
252c8b7aed build/checkFiles.c: reimplemented checkIntersect() using fiIntersect() 2011-01-15 11:49:07 +03:00
Alexey Tourbin
d3c57d3ee4 build/checkFiles.c: reimplemented checkFiles() using fts(3) 2011-01-15 11:48:33 +03:00
Alexey Tourbin
6528547c06 build/files.c: warn on fts error 2011-01-15 10:58:11 +03:00
Alexey Tourbin
324d08015d build/files.c (addFile): factored addFile1 to save lstat calls
When addFile() is called with file path obtained from specfile,
various checks must be performed, so that only valid paths can
enter the package.  However, when a path is passed down to fts,
it is no longer possible to obtain ill-formed paths.  So a lot
of lstat calls for intermediate path components can be saved.
2011-01-15 10:36:01 +03:00
Alexey Tourbin
161864908a build/files.c (addFile): replaced myftw() with fts(3) 2011-01-15 10:35:58 +03:00
Alexey Tourbin
d3842e8715 build/files.c (addFile): updated from rpm.org 2011-01-15 10:35:18 +03:00
Alexey Tourbin
592b51b3a3 build/files.c: removed ancient fl->prefix stuff 2011-01-14 22:11:52 +03:00
Alexey Tourbin
00ec5a8146 build/files.c: removed obsolete parseForRegexLang 2011-01-14 21:51:45 +03:00
cb105c88c8 build/files.c (parseForSimple): Fix potential NULL pointer dereference (ALT#23813) 2010-07-27 18:12:41 +00:00
Alexey Tourbin
58fdd159bc build/files.c (checkHdrIntersect): avoid quadratic behaviour
Since the list of files is sorted, it is possible to avoid quadratic
behaviour by implementing merge-like intersection.

However note that directory names are not sorted (this is why it is
needed to build full file name for strcmp).

Tested with gnome-icon-themes-oxygen-refit2-2.3-alt1.src.rpm,
3 subpackages each 13-16K files.  Old behaviour: 18 seconds,
new behaviour: less than 1 second.
2010-03-26 19:00:43 +03:00
Alexey Tourbin
fbac8f2ea4 4.0.4-alt95.M41.21
- Removed _noDirTokens support (producing legacy filelist format).
- Disabled rpmlib(PayloadFilesHavePrefix), rpmlib(CompressedFileNames),
  and rpmlib(VersionedDependencies) dependencies.
- Disabled versioning for rpmlib(PayloadIsBzip2) and rpmlib(PayloadIsLzma)
  dependencies.
2009-06-17 06:42:20 +04:00
Alexey Tourbin
35ca8f78ab disabled rpmlib(PayloadFilesHavePrefix) and rpmlib(CompressedFileNames) dependencies 2009-06-17 06:32:19 +04:00
Alexey Tourbin
23317f11b7 removed _noDirTokens (producing legacy filelist format)
Some code (e.g. apt/genpkglist) explicitly relies on the fact that
header file list is represented with baseNames+dirNames+dirIndexes
arrays.  Thus, generating legacy headers might have issues, and should
be disabled.
2009-06-17 06:32:18 +04:00
Alexey Tourbin
3995f6a271 4.0.4-alt95.M41.14
- Removed prehistoric multilib support.
2009-03-10 14:37:49 +03:00
Alexey Tourbin
aebc9a42dd removed prehistoric multilib support 2009-03-10 14:27:38 +03:00
Alexey Tourbin
82d6fbdfe6 4.0.4-alt95.M41.8
- fixed crash in previous release (Dmitry V. Levin)
2008-11-13 07:12:42 +03:00
3d4f77766e rpmmacro.h (rpmGetPath, rpmExpand): Add __attribute__ ((sentinel))
(cherry picked from commit 328d65def9a8271cb3415fb07c92b5c63aebf87d)
2008-11-13 06:46:42 +03:00
Alexey Tourbin
4acd4051a0 4.0.4-alt95.M41.6+
- implemented post-transaction filetriggers, loosely based on filetriggers.patch
  from Mandriva Linux (see %_rpmlibdir/posttrans-filetriggers for details)
- implemented %_rpmlibdir/0ldconfig.filetrigger, so that packages with
  shared libraries need not to invoke ldconfig(1) in they %%post-scriptlets
2008-11-13 00:55:42 +03:00