With the packages installed, I did a strace while running RPM to see what I could find. Here is an excerpt of the results:
open("/etc/rpm/macros.python3.rh-python36", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=1879, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76efb000 read(3, "# define these macros in a way w"..., 4096) = 1879 open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4 fstat64(4, {st_mode=S_IFREG|0644, st_size=2502, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76efa000 read(4, "# Locale name alias data base.\n#"..., 4096) = 2502 read(4, "", 4096) = 0 close(4) = 0 munmap(0x76efa000, 4096) = 0 open("/usr/share/locale/en_US.utf8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en_US/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en.utf8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/share/locale/en/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) write(2, "error: ", 7error: ) = 7 write(2, "Macro % has illegal name (%defin"..., 35Macro % has illegal name (%define) It appears that once RPM reads the line "# define these amcros in a way..." it runs into something it doesn't like, then it attempts to generate an error message using the correct locale and LC_MESSAGES. Failing that it spits out the default message. I went to the offending file (macros.python3.rh-python36) and removed the comment, with the same result. Where should I look next? On Sat, Jun 9, 2018 at 2:33 PM, Joshua Kramer <joskra42.l...@gmail.com> wrote: > I had actually attempted to do just that, and ran into another > interesting problem. When I install rh-python36-python-devel package, > it breaks the RPM database in some way. With that package installed, > every time I do anything with RPM, I get several instances of this > error message: "error: Macro % has illegal name (%define)" > > This error does not interfere with the ability of RPM to install or > remove packages. However, as part of the rpmbuild process, > dependencies of RPM packages are checked. When this occurs, some > program spits out several instances of that error message, and the > program returns with an error. RPMBUILD then aborts the build when it > detects the error. > > I know the error is a bash shell error, but I have not yet determined > what in the -devel package is broken in such a way to cause that error > to occur whenever RPM is run. > > On Sat, Jun 9, 2018 at 12:03 PM, Charalampos Stratakis > <cstra...@redhat.com> wrote: >> >> >> ----- Original Message ----- >>> From: "Joshua Kramer" <joskra42.l...@gmail.com> >>> To: "Charalampos Stratakis" <cstra...@redhat.com>, sclorg@redhat.com >>> Sent: Saturday, June 9, 2018 4:47:43 PM >>> Subject: Re: [scl.org] rh-python36 SPEC file question (circular dependency) >>> >>> > Long story short: >>> > 1. Build python with rehweel set to 0. >>> ..... >>> >>> I got further with these steps, but there are some omissions. I >>> attempted to build python.spec as the first step (after setting >>> with_rewheel to 0), but it complained about a missing dependency of >>> rh-python36. So I then built the rh-python36 metapackage first, and I >>> had to install that as root. The first pass of python.spec then built >>> successfully. >>> >>> I then modified python-setuptools.spec to disable build_wheel, and >>> attempted to build. It failed because it requires rh-python36-devel. >>> So I attempt to install that package as root, and there are additional >>> dependency issues: >>> /opt/rh/rh-python36/root/usr/bin/python3.6m is needed by >>> rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl >>> libpython3.6m.so.rh-python36-1.0 is needed by >>> rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl >>> python(abi) = 3.6 is needed by >>> rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl >>> rh-python36-python(armv7hnl-32) = 3.6.3-3.el7.centos is needed >>> by rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl >>> rh-python36-python-libs(armv7hnl-32) = 3.6.3-3.el7.centos is >>> needed by rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl >>> >>> I've attempted various combinations of force-installing the packages I >>> have, with various other issues. So what is the correct next step in >>> getting the setuptools package to build? >>> >>> >> >> Without something which contains a dependency solver you will have to >> manually install the packages at your system. >> >> At this point it seems that you will have to install the python-devel, >> python and python-libs. >> >> You can check the dependencies of each rpm by invoking 'rpm -qp --requires >> <rpm>', or by examining the %package >> directives at the SPEC file of python. Although without doing it in some >> sort of build system (e.g. centos/fedora builds system), >> you will have to manually inspect what the dependencies are each time. >> >> Please let me know if that worked for you. >> >>> >>> >>> On Fri, Jun 8, 2018 at 12:10 PM, Charalampos Stratakis >>> <cstra...@redhat.com> wrote: >>> > >>> > >>> > ----- Original Message ----- >>> >> From: "Joshua Kramer" <joskra42.l...@gmail.com> >>> >> To: "Neal Gompa" <ngomp...@gmail.com> >>> >> Cc: sclorg@redhat.com >>> >> Sent: Thursday, June 7, 2018 2:22:56 PM >>> >> Subject: Re: [scl.org] rh-python36 SPEC file question (circular >>> >> dependency) >>> >> >>> >> Thanks, Neal! That got me a little farther. Per the comments at the >>> >> top of they python.spec file, I set with_rewheel to 0, then I built >>> >> the Python RPM. That seems to have worked. >>> >> >>> >> Now, when I attempt to build setuptools, using this command: >>> >> rpmbuild -ba ./python-setuptools.spec --define 'scl rh-python36' > >>> >> python-setuptools-build.log 2>&1 >>> >> >>> >> ...the build command fails with these errors: >>> >> error: Failed build dependencies: >>> >> rh-python36-python-devel is needed by >>> >> rh-python36-python-setuptools-36.5.0-1.el7.centos.noarch >>> >> rh-python36-python-pip is needed by >>> >> rh-python36-python-setuptools-36.5.0-1.el7.centos.noarch >>> >> rh-python36-python-wheel is needed by >>> >> rh-python36-python-setuptools-36.5.0-1.el7.centos.noarch >>> >> >>> >> Attempting to build the python-pip package results in similar errors. >>> >> >>> >> I have the following packages installed: >>> >> rh-python36-2.0-1.el7.src.rpm >>> >> rh-python36-python-3.6.3-3.el7.src.rpm >>> >> rh-python36-python-pip-9.0.1-2.el7.src.rpm >>> >> rh-python36-python-psycopg2-2.7.3-1.el7.src.rpm >>> >> rh-python36-python-setuptools-36.5.0-1.el7.src.rpm >>> >> rh-python36-python-virtualenv-15.1.0-2.el7.src.rpm >>> >> rh-python36-python-wheel-0.30.0a0-1.el7.src.rpm >>> >> rh-python36-scipy-0.19.1-2.el7.src.rpm >>> >> >>> >> What should I look for next? >>> >> >>> >> Thanks! >>> >> >>> > >>> > Hello. I am one of the maintainers for that collection so feel free to >>> > ping >>> > me >>> > directly, either on IRC or mail. >>> > >>> > Sorry for the complications you are facing, bootstrapping the interpreter >>> > to an rpm >>> > is indeed a quite complex procedure and it could be documented better. >>> > >>> > I will try to outline the steps with some explanations. >>> > >>> > Firstly, python bundles pip and setuptools, so ideally we'd like python to >>> > utilize the system >>> > installed packages instead of the bundled ones. What happens is that we >>> > first compile python >>> > including the bundled wheels (that's when we set the 'rewheel' macro to >>> > 0). >>> > >>> > Then we'd like to build pip and setuptools in the wheel [0] format so they >>> > can be utilized by python. >>> > However we still do not have the 'wheel' package built in order to do >>> > that, >>> > so we'll have to (byte)compile >>> > them the usual way, then compile wheel, and then build again python and >>> > setuptools as wheels. >>> > >>> > So you should set the build_wheel macro in python-pip's and >>> > python-setuptools' SPEC file to 0, build them and then >>> > build the python-wheel package. >>> > >>> > Then after you have built python-wheel, rebuild python-pip and >>> > python-setuptools with the build_wheel macro macro set to 1, >>> > as we can create the wheel format now since we have the wheel package on >>> > our system. >>> > >>> > Finally rebuild python with rewheel set to 1 in order for python to strip >>> > the bundled wheels and utilize the system installed >>> > ones (with a little bit of magic [1]. >>> > >>> > Long story short: >>> > 1. Build python with rehweel set to 0. >>> > 2. Build python-setuptools and python-pip with build_wheel set to 0. >>> > 3. Build python-wheel. >>> > 4. Build python-setuptools and python-pip with build_wheel set to 1. >>> > 5. Build python with rehweel set to 1. >>> > >>> > I hope that helps (and I hope I didn't forget any steps :) ). >>> > >>> > [0] https://pythonwheels.com/ >>> > [1] >>> > https://github.com/fedora-python/rewheel/blob/master/rewheel/__init__.py >>> > >>> >> On Mon, Jun 4, 2018 at 10:23 PM, Neal Gompa <ngomp...@gmail.com> wrote: >>> >> > On Mon, Jun 4, 2018 at 9:38 PM Joshua Kramer <joskra42.l...@gmail.com> >>> >> > wrote: >>> >> >> >>> >> >> Hello, >>> >> >> >>> >> >> I am trying to compile rh-python36 to use with CentOS on a Raspberry >>> >> >> Pi. >>> >> >> >>> >> >> On line 192 of the SPEC file are these lines: >>> >> >> %if 0%{?with_rewheel} >>> >> >> BuildRequires: %{?scl_prefix}python-setuptools >>> >> >> BuildRequires: %{?scl_prefix}python-pip >>> >> >> %endif >>> >> >> >>> >> >> What is this supposed to do? It prevents the package from building, >>> >> >> because there is a circular dependency- if I try to build python36, it >>> >> >> complains that python36-setuptools and python36-pip are not >>> >> >> installed... but I can't install those without having Python installed >>> >> >> first. If I comment those lines out I get no error and the build >>> >> >> almost completes. (It then fails the "multiprocessing" test, but >>> >> >> that's beside the point.) However, I don't want to break something by >>> >> >> commenting them out... so is there a better or "right" way to get rid >>> >> >> of the circular dependency? >>> >> >> >>> >> > >>> >> > Python is a two-cycle build. You build the first time with rewheel >>> >> > disabled (that removes those BRs), then after that's successfully >>> >> > built, you use those artifacts to build again with rewheel enabled. >>> >> > >>> >> > >>> >> > -- >>> >> > 真実はいつも一つ!/ Always, there's only one truth! >>> >> >>> >> _______________________________________________ >>> >> SCLorg mailing list >>> >> SCLorg@redhat.com >>> >> https://www.redhat.com/mailman/listinfo/sclorg >>> >> >>> > >>> > -- >>> > Regards, >>> > >>> > Charalampos Stratakis >>> > Software Engineer >>> > Python Maintenance Team, Red Hat >>> >> >> -- >> Regards, >> >> Charalampos Stratakis >> Software Engineer >> Python Maintenance Team, Red Hat _______________________________________________ SCLorg mailing list SCLorg@redhat.com https://www.redhat.com/mailman/listinfo/sclorg