Rpmbuild problem summary for building local yum source, and rpmbuild summary for yum Source

Source: Internet
Author: User
Tags rpmbuild

Rpmbuild problem summary for building local yum source, and rpmbuild summary for yum Source

-Check-rpaths

During the compilation of varnish today, the following error occurs:

...
+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot********************************************************************************* WARNING: 'check-rpaths' detected a broken RPATH and will cause 'rpmbuild'* to fail. To ignore these errors, you can set the '$QA_RPATHS'* environment variable which is a bitmask allowing the values* below. The current value of QA_RPATHS is 0x0000.** 0x0001 ... standard RPATHs (e.g. /usr/lib); such RPATHs are a minor* issue but are introducing redundant searchpaths without* providing a benefit. They can also cause errors in multilib* environments.* 0x0002 ... invalid RPATHs; these are RPATHs which are neither absolute* nor relative filenames and can therefore be a SECURITY risk* 0x0004 ... insecure RPATHs; these are relative RPATHs which are a* SECURITY risk* 0x0008 ... the special '$ORIGIN' RPATHs are appearing after other* RPATHs; this is just a minor issue but usually unwanted* 0x0010 ... the RPATH is empty; there is no reason for such RPATHs* and they cause unneeded work while loading libraries* 0x0020 ... an RPATH references '..' of an absolute path; this will break* the functionality when the path before '..' is a symlink* ** Examples:* - to ignore standard and empty RPATHs, execute 'rpmbuild' like* $ QA_RPATHS=$[ 0x0001|0x0010 ] rpmbuild my-package.src.rpm* - to check existing files, set $RPM_BUILD_ROOT and execute check-rpaths like* $ RPM_BUILD_ROOT=<top-dir> /usr/lib/rpm/check-rpaths* *******************************************************************************ERROR 0002: file 'xxx.so' contains an invalid rpath 'xxx' in [xxx]
...

REFERENCE The https://fedoraproject.org/wiki/Packaging:Guidelines, which says:

Sometimes, code will hardcode specific library paths when linking binaries (using the -rpath or -R flag). This is commonly referred to as an rpath. Normally, the dynamic linker and loader (ld.so) resolve the executable's dependencies on shared libraries and load what is required. However, when -rpath or -R is used, the location information is then hardcoded into the binary and is examined by ld.so in the beginning of the execution. Since the Linux dynamic linker is usually smarter than a hardcoded path, we usually do not permit the use of rpath in Fedora.There is a tool called check-rpaths which is included in the rpmdevtools package. It is a good idea to add it to the %__arch_install_post macro in your ~/.rpmmacros config file:

From this we can see that this step is only a way to check whether rpath is used in the code, so we can simply comment out rpath detection. The specific approach is:

Vi ~ /. Rpmmacros

%_topdir      %(echo $HOME)/rpmbuild%_smp_mflags  -j3#%__arch_install_post   /usr/lib/rpm/check-rpaths   /usr/lib/rpm/check-buildroot

Compilation will be successful later.

 

-Problems with pkgconfig, ldconfig, and ldd

Let's take a look at the following description:

1. the pkgconfig package contains tools for passing the include path and/or library paths to build tools during the make file execution. pkg-config is a function that returns meta information for the specified library. the default setting for PKG_CONFIG_PATH is/usr/lib/pkgconfig because of the prefix we use to install pkgconfig. you may add to PKG_CONFIG_PATH by exporting additional paths on your sy Stem where pkgconfig files are installed. note that PKG_CONFIG_PATH is only needed when compiling packages, not during run-time. the above explanation is clear enough that pkg-config is used to specify the path of the header file and library file when executing makefile. It goes to the path specified by the Environment Variable PKG_CONFIG_PATH (/usr/lib/config by default) to find the corresponding library *. pc file ,*. the pc file records the dependency between packages, header files and Library File Inclusion paths, versions, and other information.
2./etc/ld. so. conf. d/* or/etc/ld. so. conf and ldconfig.
/Etc/ld. so. conf. d/* directory and/etc/ld. so. conf records the path of the Dynamic Link Library. The system searches for/lib and/usr/lib by default. The library files in other paths must be specified in these files. Alternatively, you can set the LD_LIBRARY_PATH environment variable and add other paths separated.
Ldconfig is used to set/etc/ld. so. conf. d/* h and/etc/ld. so. the library listed in conf is cached in/etc/ld. so. the cache file is used. Therefore, some libraries or update/etc/ld are installed. so. run the/sbin/ldconfig command in the conf file.

When you run./configure to generate Makefile, pkg-config has a problem or cannot find the corresponding lib file.

You may wish to reset the two variables of pkgconfig:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG=/usr/bin/pkg-config

And reload the dynamic link library.

ldconfig

Another very practical debugging script is ldd:

[root@xx pcre-8.34]# ldd /bin/ls    linux-vdso.so.1 =>  (0x00007fff2a5ff000)    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fec45edf000)    librt.so.1 => /lib64/librt.so.1 (0x00007fec45cd7000)    libcap.so.2 => /lib64/libcap.so.2 (0x00007fec45ad2000)    libacl.so.1 => /lib64/libacl.so.1 (0x00007fec458ca000)    libc.so.6 => /lib64/libc.so.6 (0x00007fec45536000)    libdl.so.2 => /lib64/libdl.so.2 (0x00007fec45331000)    /lib64/ld-linux-x86-64.so.2 (0x00007fec46105000)    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fec45114000)    libattr.so.1 => /lib64/libattr.so.1 (0x00007fec44f0f000)[root@xx pcre-8.34]# 

The essence is to set environment variables such as LD_DEBUG, and print the dynamic link library of the call when the program is running.

  

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.