[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Installing Intel compiler RPMs on Debian



Charlie Zender wrote:

> 2. Creating a new partition with RedHat just for this is the software
> equivalent of building a second Taj Mahal because your wife does not
> like the color of the first one.

You don't need a partition.  Just a copy of the directory structure.
These are the directories that you need.  If I got the list right.

  bin dev etc lib opt root sbin tmp usr var root

Copy those from your RH machine to your Debian machine and put them in
an area to be chroot'd into.  Say /rharea or some such.  At that time
you can install normally.  After you are done you can copy the bits
out.  (This also works in reverse.  You can have a Debian chroot area
on the RH machine.  But that is another story.)

  chroot /rharea
  rpm -qa

But since you already have the bits installed on your other RH
machines you can just copy the data over from there.

> 3. I asked Intel if they would supply Debian-compatible compilers
> to their customers. FYI, their rather helpful reply is below. Basically
> they seem to be saying that I can do a manual install along the lines
> of what I tried but using rpm2cpio instead of alien. Maybe this will 
> work better, I have not tried it yet.

Using this information posted by Intel I can post more details of my
own process.

Because they wrap the rpm installer with their own script installer it
is not even possible to create a rpm database and install it using
rpm.  There will be unsatisified dependencies.  You can't even force
the installation because the script installer isolates you from the
rpm installer.

> What is the recommended way to install the Intel Fortran and C/C++
> compilers on Debian?

I have not yet seen much discussion on the lists specifically
concerning the Intel compilers.  Unfortunately you want to install one
of the most confusing packages.  I have installed the Intel compiler
several times.  PITA.

> I suppose I could try to find where the RPMs want to install their
> contents, and then try to install them myself manually.  This sounds
> dangerous and error-prone, however.

Actually it is not so dangerous.  This is basically what the alien
program does.  It takes apart the rpm and puts it back together again
as a deb.  I created my own debs this way manually.

I am only commenting on their packaging of their compiler and not the
compiler itself.  The compiler software itself seems of fine quality.
But they wrapped it in a burlap bag and threw it off of the delivery
truck onto the doorstep without stopping the truck.  The overall
impression the user is left with is less than good.

Okay, enough ranting.  Here are the details.  The compilers arrive as
a compressed tar file.  This is how the installation goes on an rpm
based system.  Untar the file into a directory.  There you will see
many files including install scripts, release notes and rpm files.
They expect you to run the 'install' script.  That script will install
the rpm files onto your system using rpm.  Okay so far.  Then the
install script will walk through a series of files and scripts which
were installed and *edit them after the rpm installation*.  This step
renders the installation impossible to verify on an rpm system.  The
checksums are now different than the install database thinks they
should be.  They are really just using rpm as a tarfile style file
splat onto your system and then doing fixup later outside of the
install system.  But the installation should still work regardless.

Therefore if you have a RH system and have previously installed the
compilers there you can simply copy the directory /opt/intel from that
machine over to your Debian machine.  You can make a snapshot of it
with 'tar cvzf' and then untar it in place on the other system.  That
should work for the most painless way to transfer the bits.  But if
you do not have a RH machine at all nor a RH chroot area to unpack
this in then you can pick things apart on your Debian system manually
and achieve a working result.

[This looks basically like what Intel has recommended that you do in
the note that you posted.  But perhaps I have a little more detail
here.  Note that I have been working with ia64 and not ia32 and
therefore there may be some differences.]

Here is what I recommend that you do on Debian.  The compilers arrive
as a compressed tar file.  Untar the file into a directory.  Then use
rpm2cpio to extract the files that you need manually.  You will want
to unpack the three rpm files that match your architecture.

  for file in *.i386.rpm; do
    rpm2cpio < $file | cpio -idvm
  done

That will unpack all of the files into a ./opt/ directory.  You will
now need to do what the script installer does.

Decide where you are going to install the compiler.  That could be the
default /opt/intel directory.  Or it could be /usr/local/ someplace.
Here is the instructions in more script form.  I install them in /opt
but the normal recommendation is to install one off software in
/usr/local someplace.  In this case /opt/intel is the default and
probably the best answer.

Look for all files that have this installation directory tag in the
script.

  find ./opt -type f -print0 | xargs -r0 grep -l INSTALLDIR

That wil generate a list of files that need to be edited.  You can
edit them by hand.  Or here is a script snippet which should do the
right things to install the software.

  DESTINATION=/opt/intel
  for FILE in $(find ./opt -type f -print0 | xargs -r0 grep -l INSTALLDIR); do
    sed s@\<INSTALLDIR\>@$DESTINATION@g $FILE > $FILE.tmp
    mv $FILE.tmp $FILE
    chmod 0755 $FILE
  done

They include an uninstall script.  In all three rpm packages!  That
script tries to do several things including using 'rpm -e' which won't
work since we are not using rpm.  Find that script and remove it.  It
will eliminate confusion later.

  find ./opt -name uninstall -print0 | xargs -r0 rm -f

They want to document what version you are using in a documentation
file.  This is not strictly required but does finish the installation
off.

  COMBOPACKAGEID=$(grep COMBOPACKAGEID install | sed -e "s/ *#.*//" -e "s/^[^=]*=//")
  for FILE in $(find ./opt -name csupport -print); do
    sed 's@<INSTALLTIMECOMBOPACKAGEID>@$COMBOPACKAGEID@g' \
      $FILE > $FILE.tmp
    mv $FILE.tmp $FILE
    chmod 644 $FILE
  done

Done.  Almost.  Lastly there are several shared libraries shipped as
part of the package.  It is *completely up to you* but I did not want
to create DLL hell by creating binaries with unmanaged shared
libraries.  Therefore on my installation I disabled those shared
libraries.  The compiled bits will use the archive files instead.
This makes the compiled binaries executable on systems without those
shared libraries installed and avoids many problems.  If you do not do
this then compiled binaries will not run systems other than the one on
which you installed the compiler.  However, if you have already
compiled binaries that require these shared libraries then you will
need them to run those programs.  In which case it is too late and you
cannot do this step.  So whatever you do don't get rid of them
entirely!
  
  # Only if you wish to globally disable the shared libraries.
  # for FILE in $(find ./opt -name '*.so' -o -name '*.so.[0-9]*'); do
  #   mv $FILE $FILE.disabled
  # done

Done.  Almost.  Copy that directory to $DESTINATION, wherever you
decided to put it.  There are some other finishing touches if this
were really going to be a package.  But this is Good Enough.  The
compiler is in $DESTINATION/$compilerdir/$arch/bin/$compiler where the
following applies.  You will want the compiler in your path.  Create a
symlink from that location to /usr/bin so that it will be found in
path.  One for the compiler.  One for the debugger if you desire.  The
debugger is called either 'ldb' or 'idb' depending on the version and
time of day.

  $DESTINATION/$compilerdir/$arch/bin/$compiler
  DESTINATION -- where you installed it
  compilerdir -- compiler60 for the 6.0 compiler, compiler70 for the
                 7.0 compiler, etc.
  arch -- i386, ia64
  compiler -- ecc on ia64, icc on i386

Done.  Well, almost.  Did you want the man pages available for the
compiler?  Create symlinks for that man page too.  For some reason 7.0
did not ship with a man page for the debugger.  But 6.0 did.  If you
have the 6.0 version around, keep it and use it for 7.0.

Did I say done?  Sorry.  You still need a license file.  Place your
license file for the compiler in your $DESTINATION/licenses
directory.  The software will not operate without a proper license
file.

After doing all of this you should have a working compiler on your
system.  Go take a break.

Bob



Reply to: