[LU-3492] Lustre 2.4 SRPM Re-Build Fails Created: 21/Jun/13  Updated: 09/Oct/21  Resolved: 09/Oct/21

Status: Resolved
Project: Lustre
Component/s: None
Affects Version/s: Lustre 2.4.0
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Malcolm Cowe (Inactive) Assignee: WC Triage
Resolution: Low Priority Votes: 0
Labels: llnl

Issue Links:
Related
is related to LU-3464 Create lustre-client and lustre-serve... Closed
Severity: 3
Rank (Obsolete): 8778

 Description   

When attempting to build Lustre Client RPM packages for Lustre 2.4, the build fails with the following error:

...

Making all in utils
mount_lustre-mount_utils.o: In function `osd_is_lustre':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:461: undefined reference to `ldiskfs_is_lustre'
mount_lustre-mount_utils.o: In function `osd_fini':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:650: undefined reference to `ldiskfs_fini'
mount_lustre-mount_utils.o: In function `osd_init':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:632: undefined reference to `ldiskfs_init'
mount_lustre-mount_utils.o: In function `osd_enable_quota':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:607: undefined reference to `ldiskfs_enable_quota'
mount_lustre-mount_utils.o: In function `osd_label_lustre':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:577: undefined reference to `ldiskfs_label_lustre'
mount_lustre-mount_utils.o: In function `osd_tune_lustre':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:549: undefined reference to `ldiskfs_tune_lustre'
mount_lustre-mount_utils.o: In function `osd_prepare_lustre':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:517: undefined reference to `ldiskfs_prepare_lustre'
mount_lustre-mount_utils.o: In function `osd_make_lustre':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:487: undefined reference to `ldiskfs_make_lustre'
mount_lustre-mount_utils.o: In function `osd_read_ldd':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:436: undefined reference to `ldiskfs_read_ldd'
mount_lustre-mount_utils.o: In function `osd_write_ldd':
/root/rpmbuild/BUILD/lustre-2.4.0/lustre/utils/mount_utils.c:408: undefined reference to `ldiskfs_write_ldd'
collect2: ld returned 1 exit status
make[4]: *** [mount.lustre] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
error: Bad exit status from /var/tmp/rpm-tmp.YDhlxd (%build)

RPM build errors:
user jenkins does not exist - using root
group jenkins does not exist - using root
user jenkins does not exist - using root
group jenkins does not exist - using root
Bad exit status from /var/tmp/rpm-tmp.YDhlxd (%build)

The commands used are as follows:

wget -r -np --level=0 http://downloads.whamcloud.com/public/lustre/lustre-2.4.0/el6/client/SRPMS/

cd downloads.whamcloud.com/public/lustre/lustre-2.4.0/el6/client/SRPMS/

rpmbuild --rebuild --define 'lustre_name lustre-client' \
lustre-client-2.4.0-2.6.32_358.6.2.el6.x86_64_gd3f91c4.src.rpm

System is CentOS 6.4, running update kernel 2.6.32-358.6.2.el6.x86_64.

Any ideas? I've used an identically similar process for previous releases of Lustre without issue. I get a similar error when building from the v2_4_0 tag in Git, using ./configure ... && make.



 Comments   
Comment by Malcolm Cowe (Inactive) [ 24/Jun/13 ]

It appears that by explicitly requesting the server build to be disabled, that the SRPM rebuild can be completed. Similarly for running a build on master or the v2_4_0 tag on the Git source. The command line I used to verify is:

rpmbuild --rebuild --define 'lustre_name lustre-client' --define 'configure_args --disable-server' lustre-client-2.4.0-2.6.32_358.6.2.el6.x86_64_gd3f91c4.src.rpm

and also:

./configure --enable-client --disable-server

for a build of the Git source.

This is a change in behaviour compared with previous releases of Lustre.

Comment by Jodi Levi (Inactive) [ 24/Jun/13 ]

Brian,
Could you comment on this one?
Thank you!

Comment by Brian Murrell (Inactive) [ 24/Jun/13 ]

Not much to say without being able to dig into it, but it looks like trying to build the client is for some reason trying to build ldiskfs, which it shouldn't be.

There have been other reports of needing to explicitly set --disable-server which never used to be the case. At one time, configure figured out if the build was for server or client by itself, so some regression with that autodetection has been introduced.

Comment by Christopher Morrone [ 25/Jun/13 ]

The problem is that Intel is building a src rpm named lustre-client-<verion>.src.rpm, which is in reality almost exactly the same thing as lustre-<version>.src.rpm. But obviously, users of the rpms are going to think that the one with the name "lustre-client" is only the lustre client. This is bad by design, and needs to go away. There should be just one src rpm for each spec file, that can be rebuilt reasonably using good, clean options to rpmbuild --rebuild.

In other words, the "lustre-client" source rpm is not an rpm of the lustre client code. It is an rpm of all of lustre. So Malcolm, what you are doing right now is exactly correct, and expected.

But I too agree that this is bad, and I believe that this problem would be addressed by LU-1199 sub-task LU-3464. I have advocated that it be done in time for Lustre 2.5.0, but Intel has not yet agreed with me. With my suggested changes, the rpmbuild command line becomes much easier to use, and there are no duplicates of the src.rpm, with misleading names.

Generated at Sat Feb 10 01:34:23 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.