[GRASS-dev] [GRASS GIS] #1568: 'make install' results in an installation dependent upon temporary build directories

#1568: 'make install' results in an installation dependent upon temporary build
directories
--------------------------+-------------------------------------------------
Reporter: helsene | Owner: grass-dev@…
     Type: defect | Status: new
Priority: normal | Milestone: 7.0.0
Component: Installation | Version: svn-trunk
Keywords: | Platform: Linux
      Cpu: x86-64 |
--------------------------+-------------------------------------------------
I did a compilation of GRASS from the SVN repo on 2.7.12 using Debian
Squeeze and the instructions given at
http://grass.osgeo.org/wiki/Compile_and_Install#GRASS_7_on_Debian_Squeeze.

After using 'sudo make install' and having the installation placed in
/usr/local/grass7.0.svn, the resulting installation still seems to require
libs in /<checkoutdir>/dist.x86_64-unknown-linux-gnu/lib/. Specifically,
launching the program causes it to look for libgrass_raster.7.0.svn.so in
the build directory and subsequently throw a 'permission denied' error
when using GRASS with a user other than the one who did the build.

This causes issues loading libraries for other users, who get 'permission
denied' errors when attempting to access the /<checkoutdir>/dist.x86_64
-unknown-linux-gnu/lib/ directory.

The workaround is to make the build dirs globally readable, but I'm pretty
sure this isn't intended behavior. I imagine building and deploying a deb
package would fail as the checkout directory wouldn't be present on a
system where the build did not occur.

--
Ticket URL: <http://trac.osgeo.org/grass/ticket/1568&gt;
GRASS GIS <http://grass.osgeo.org>

#1568: 'make install' results in an installation dependent upon temporary build
directories
--------------------------+-------------------------------------------------
Reporter: helsene | Owner: grass-dev@…
     Type: defect | Status: new
Priority: normal | Milestone: 7.0.0
Component: Installation | Version: svn-trunk
Keywords: | Platform: Linux
      Cpu: x86-64 |
--------------------------+-------------------------------------------------

Comment(by hamish):

Replying to [ticket:1568 helsene]:
> I did a compilation of GRASS from the SVN repo on
> 2.7.12 using Debian Squeeze and the instructions given
> at
>
http://grass.osgeo.org/wiki/Compile_and_Install#GRASS_7_on_Debian_Squeeze.
...
>
> I imagine building and deploying a deb package would
> fail as the checkout directory wouldn't be present on
> a system where the build did not occur.

please try the DebianGIS build instructions at
https://trac.osgeo.org/grass/browser/grass/trunk/debian/README.debian

perhaps no one has tried running 'make install' for grass7 before? (I
imagine most devs just run it out of the dist.x86*/ dir directly)

Hamish

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/1568#comment:1&gt;
GRASS GIS <http://grass.osgeo.org>

#1568: 'make install' results in an installation dependent upon temporary build
directories
--------------------------+-------------------------------------------------
Reporter: helsene | Owner: grass-dev@…
     Type: defect | Status: new
Priority: normal | Milestone: 7.0.0
Component: Installation | Version: svn-trunk
Keywords: | Platform: Linux
      Cpu: x86-64 |
--------------------------+-------------------------------------------------

Comment(by helsene):

I've tried the README.debian instructions, they require some extra
tinkering to get them going. Installing per the instructions requires
'tcl' >=8.5, the dependency check fails even when 'tcl8.5-dev' is
installed as the 'tcl' package either refers to 8.4 or is not installed.
'tcl' needs to be pulled from wheezy for the README.debian instructions to
proceed; but that's a separate issue.

The 'debuild -i -uc -us -b' step in README.debian fails when it tries to
run 'mkdir -p /usr/lib/bin' of all things.

{{{
/usr/bin/make real-install
make[2]: Entering directory `/home/helsene/src/g7_trunk'
mkdir -p -m 755 /home/helsene/src/g7_trunk/debian/tmp/usr/lib/grass70
mkdir -p -m 755 /usr/lib/bin
mkdir: cannot create directory `/usr/lib/bin': Permission denied
make[2]: *** [/usr/lib/bin] Error 1
make[2]: Leaving directory `/home/helsene/src/g7_trunk'
make[1]: *** [install] Error 2
make[1]: Leaving directory `/home/helsene/src/g7_trunk'
make: *** [install] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit
status 2
debuild: fatal error at line 1325:
dpkg-buildpackage -rfakeroot -D -us -uc -i -b failed
}}}

So far, two methods of compiling 7.0 for a multi-user Debian Squeeze
install are not working with the given instructions. This 'debuild' error
should probably be split into its own ticket depending on where the error
lies ('make real-install' or the debian packaging git repo's configs). I
don't know enough about the install scripts to judge that.

--
Ticket URL: <http://trac.osgeo.org/grass/ticket/1568#comment:2&gt;
GRASS GIS <http://grass.osgeo.org>

#1568: 'make install' results in an installation dependent upon temporary build
directories
--------------------------+-------------------------------------------------
Reporter: helsene | Owner: grass-dev@…
     Type: defect | Status: new
Priority: normal | Milestone: 7.0.0
Component: Installation | Version: svn-trunk
Keywords: make install | Platform: Linux
      Cpu: x86-64 |
--------------------------+-------------------------------------------------
Changes (by hamish):

  * keywords: => make install

Comment:

Replying to [comment:2 helsene]:
> I've tried the README.debian instructions, they require some
> extra tinkering to get them going.

(hmm, works for me..)

> Installing per the instructions requires 'tcl' >=8.5, the
> dependency check fails even when 'tcl8.5-dev' is installed as
> the 'tcl' package either refers to 8.4 or is not installed.
> 'tcl' needs to be pulled from wheezy for the README.debian
> instructions to proceed; but that's a separate issue.

? both tcl8.4-dev and tcl8.5-dev are in all debians from lenny to sid. no
need to pull anything in from another version.
  http://packages.debian.org/tcl8.4-dev
  http://packages.debian.org/tcl8.5-dev

GRASS will work with either version, if you have one installed already you
can edit the debian/control file to match it.

anyway, tcl/tk can be switched off in grass7 without too many ill effects.
(the main one is you lose access to classic nviz)

> The 'debuild -i -uc -us -b' step in README.debian fails when
> it tries to run 'mkdir -p /usr/lib/bin' of all things.
>
{{{
> /usr/bin/make real-install
> make[2]: Entering directory `/home/helsene/src/g7_trunk'
> mkdir -p -m 755 /home/helsene/src/g7_trunk/debian/tmp/usr/lib/grass70
> mkdir -p -m 755 /usr/lib/bin
> mkdir: cannot create directory `/usr/lib/bin': Permission denied
> make[2]: *** [/usr/lib/bin] Error 1
> make[2]: Leaving directory `/home/helsene/src/g7_trunk'
> make[1]: *** [install] Error 2
> make[1]: Leaving directory `/home/helsene/src/g7_trunk'
> make: *** [install] Error 2
> dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit
status 2
> debuild: fatal error at line 1325:
> dpkg-buildpackage -rfakeroot -D -us -uc -i -b failed
}}}

That is new to me and I don't understand the reason for it at all.

> So far, two methods of compiling 7.0 for a multi-user Debian
> Squeeze install are not working with the given instructions.

I build trunk all the time on a pretty vanilla squeeze, with no problems.
here's the build script I use:

(works on both grass 6.x and 7; change -march= to match your cpu model,
see the gcc man page for options; ./configure ignores any switch which
isn't relevant)

{{{
renice +17 -p $$

# AMD 64: -march=amdfam10

CFLAGS="-ggdb -march=amdfam10 -Wall -Werror-implicit-function-declaration"
\
   ./configure \
     --with-tcltk-includes=/usr/include/tcl8.5 --with-cairo \
     --with-motif --with-python=/usr/bin/python2.6-config \
     --with-readline --with-cxx --with-odbc --with-sqlite \
     --with-freetype --with-freetype-includes=/usr/include/freetype2 \
     --without-postgres --with-proj-share=/usr/share/proj \
     --enable-64bit --with-pthread -with-openmp \
     --with-wxwidgets=/usr/lib/wx/config/gtk2-unicode-release-2.8 \
     --with-geos \
     2>&1 | tee config_log.txt

time make -j 8
}}}

> This 'debuild' error should probably be split into its own
> ticket depending on where the error lies ('make real-install'
> or the debian packaging git repo's configs). I don't know enough
> about the install scripts to judge that.

I do a package build of 6.4.svn on sid fairly regularly (any time I/we
change the DebianGIS package files, and pre-release testing) and haven't
seen that. I've never tried to package grass/trunk though, so maybe
there's some patch it doesn't like.

can you run grass70 from the src/bin.x86_64-.../grass7 python script? if
so, try symlinking that into ~/bin/grass70

  * you need to edit that python script to set LD_LIBRARY_PATH to the right
place. `make install` should do that for you (in the
/usr/local/grass7.0.svn installed copy). wrt your original problem,
perhaps that replacement is faulty?

for the real-install make target's sed substitution, see
  trunk/include/Make/Install.make

Hamish

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/1568#comment:3&gt;
GRASS GIS <http://grass.osgeo.org>

#1568: 'make install' results in an installation dependent upon temporary build
directories
--------------------------+-------------------------------------------------
Reporter: helsene | Owner: grass-dev@…
     Type: defect | Status: new
Priority: normal | Milestone: 7.0.0
Component: Installation | Version: svn-trunk
Keywords: make install | Platform: Linux
      Cpu: x86-64 |
--------------------------+-------------------------------------------------

Comment(by hamish):

Replying to [comment:3 hamish]:
> you need to edit that python script to set LD_LIBRARY_PATH to
> the right place.

correction: edit /usr/local/grass7.0.svn/.../grass70 (or is that in
/usr/local/bin/?) and change `gisbase` to /usr/local/grass7.0.svn

Hamish

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/1568#comment:4&gt;
GRASS GIS <http://grass.osgeo.org>