Обсуждение: weird bug in rebuilding RPMs
Hello, I'm a long time user and I had always installed postgres by compiling from source. I recently moved to a new environment where everything is installed as rpm and plus I need to install a newer postgres for testing while keeping the existing version in place. That leads me to repackage postgres rpm. Because I will eventually be installing red hat rpm I take their latest srpm and modify their rpm spec file in order to let me install rpm. After trials and errors I have managed to rebuild rpm to my satisfaction but would like to report a minor bug. I can now rebuild rpms so that all files go under a specific directory specified by _prefix directive in ~/.rpmmacros Forgetting lots of other bugs that I managed to fix, this weird bug is making me use _prefix that does not include the word "pgsql" in the path name any where. For example if _prefix path has the word pgsqL or pgsq or pgsqA then rebuilding is successful but if the path includes the word pgsql or pgsql-8.1.18 or pgsqll then rebuilding breaks down. It is failing at install stage. This is the command. $ rpmbuild --bi spec I always do "rpmbuild --clean spec" before any rebuilding. What follows is the error message before it quits (prefix is /usr/local/pgsql/bla) ------------- make: Leaving directory `/home/me/build/BUILD/postgresql-8.1.18/contrib/xml2' + case `uname -i` in ++ uname -i ++ uname -i + mv /var/tmp/postgresql-8.1.18-2.1-root//usr/local/pgsql/bla/include/pg_config.h /var/tmp/postgresql-8.1.18-2.1-root//usr/local/pgsql/bla/include/pg_config _x86_64.h + install -m 644 /home/me/build/SOURCES/pg_config.h /var/tmp/postgresql-8.1.18-2.1-root//usr/local/pgsql/bla/include ++ uname -i + mv /var/tmp/postgresql-8.1.18-2.1-root//usr/local/pgsql/bla/include/pgsql/server/pg_config.h /var/tmp/postgresql-8.1.18-2.1-root//usr/local/pgsql/bla/incl ude/pgsql/server/pg_config_x86_64.h mv: cannot stat `/var/tmp/postgresql-8.1.18-2.1-root//usr/local/pgsql/bla/include/pgsql/server/pg_config.h': No such file or directory error: Bad exit status from /var/tmp/rpm-tmp.56667 (%install) RPM build errors: Bad exit status from /var/tmp/rpm-tmp.56667 (%install) ------------- If any one else would find it useful, I can also post a diff of the spec file which will make it possible for repackaging and including renaming so that it does not override the existing version. Most bugs I encountered are of the nature: paths that should not be hard-coded are hard-coded and vice versa. Thanks mr.wu
zhong ming wu escribió: > I can now rebuild rpms so that all files go under a specific directory > specified by _prefix directive in ~/.rpmmacros Forgetting lots of > other bugs that I managed to fix, this weird bug is making me use > _prefix that does not include the word "pgsql" in the path name any > where. For example if _prefix path has the word pgsqL or pgsq > or pgsqA then rebuilding is successful but if the path includes the > word pgsql or pgsql-8.1.18 or pgsqll then rebuilding breaks down. Yeah, the Makefiles contain a trick to put append "/pgsql" to the include dir (and others) if the prefix does not already contain "pgsql" or "postgresql" or similar. This is probably what is causing the build to fail. See src/Makefile.global.in: ########################################################################## # # Installation directories # # These are set by the equivalent --xxxdir configure options. We # append "postgresql" to some of them, if the string does not already # contain "pgsql" or "postgres", in order to avoid directory clutter. -- Alvaro Herrera http://www.CommandPrompt.com/ The PostgreSQL Company - Command Prompt, Inc.
Alvaro Herrera <alvherre@commandprompt.com> writes: > zhong ming wu escribi�: >> I can now rebuild rpms so that all files go under a specific directory >> specified by _prefix directive in ~/.rpmmacros Forgetting lots of >> other bugs that I managed to fix, this weird bug is making me use >> _prefix that does not include the word "pgsql" in the path name any >> where. > Yeah, the Makefiles contain a trick to put append "/pgsql" to the > include dir (and others) if the prefix does not already contain "pgsql" > or "postgresql" or similar. This is probably what is causing the build > to fail. See src/Makefile.global.in: Yeah, I suspect that the RPMs depend in various ways on the assumption that those pathname substitutions will happen. I haven't got round to testing, but it might be a good idea to change rpm-pgsql.patch to make the substitutions unconditional, so that the file layout below the _prefix is fixed regardless of what the _prefix is. But having said that, I don't get the point of trying to build a nonstandard installation from the RPM. That seems more or less antithetical to most of the design concepts of RPM-based distros; and it certainly seems pretty silly if your intent is to transition to the standard RPM later. regards, tom lane
On Mon, 2010-02-08 at 10:33 -0500, Tom Lane wrote: > But having said that, I don't get the point of trying to build a > nonstandard installation from the RPM. That seems more or less > antithetical to most of the design concepts of RPM-based distros; > and it certainly seems pretty silly if your intent is to transition > to the standard RPM later. Right. Also, I think using _prefix is not supported? Isn't it considered as relocation of postgresql rpm? -- Devrim GÜNDÜZ Professional PostgreSQL Services, Training, 24x7 Support Authors: PostgreSQL RPMs, PITRTools, PostgreSQL Replicator http://www.commandprompt.com/ XMPP: dgunduz@jabber.commandprompt.com Twitter: http://twitter.com/devrimgunduz