Ryan R. Rosario
Ryan R. Rosario

Reputation: 5234

What files did `make install` copy, and where?

Is there a way to get a list of filenames/paths that make install copies to the filesystem? Some packages come with a MANIFEST file, but not the ones that I am working with.

Upvotes: 15

Views: 14450

Answers (6)

aerkenemesis
aerkenemesis

Reputation: 672

  1. Take a snapshot of the contents of the install location before installing
  2. Install
  3. Compare the current contents with the old contents.

Example:

./configure --prefix /usr/local
make -j`nproc`

find /usr/local | sort -u > /tmp/snapshot1
make install
find /usr/local | sort -u > /tmp/snapshot2
comm -3 /tmp/snapshot{1,2} # this prints the files added by `make install` to stdout

Upvotes: 2

Todd Partridge
Todd Partridge

Reputation: 694

make uninstall might show the files as it removes them if the author of the compiling instructions provides the information to allow an uninstall (it has been awhile since I have done one so I can't say for sure).

Also make -n install will do a "dry run" of the install process and it may be reasonable to extract the information from its results.

Upvotes: 8

Chrest
Chrest

Reputation: 1786

If the install program you're using doesn't support DESTDIR or --prefix (or an equivalent), I have found that it may be possible to identify new files as follows:

  1. Start with as clean a system as possible (a fresh VM image is preferable)
  2. Compile the software, wait a few minutes.
  3. Install the software package.
  4. Find files modified within the past 5 minutes: sudo find / -mmin -5 -type f (the find command has a ton of parameters for querying based on file modification / creation times, but this worked pretty well for me; you just need to narrow the time span so that you pick up the files created by the installer but nothing else).

Upvotes: -1

Steve
Steve

Reputation: 1459

I was just investigating this myself while compiling a custom version of QEMU. I used the following method to work out what was installed and where (as well as using it as a basis for a .deb file):

mkdir /tmp/installer
./configure --target-list=i386-softmmu
make
sudo make install DESTDIR=/tmp/installer
cd /tmp/installer
tree .

Tree is a utility that recursively displays the contents of a directory in a visually appealing manner - sudo apt-get install tree for Debian / Ubuntu users

Hope that helps someone... it took me a bit of poking around to nut it out, but I found it quite a useful way of visualising what was going on.

Upvotes: 20

Martin v. Löwis
Martin v. Löwis

Reputation: 127537

The most fool-proof way is to use chroot: have "make install" run inside a chroot jail; compute a list of the files that you had before the installation, and compare that to the list of files after the installation.

Many installations will support either a --prefix configuration option, and/or a DESTDIR environment variable. You can use those for a lighter-wait version of chroot (trusting that the installation will fail if it tries to write to a location outside these if you run installation as a fairly unprivileged user).

Another approach is to replace the install program. Many packages support an INSTALL environment variable that, well, is the install program to use; there are tracing versions of install around.

Upvotes: 16

Will Bickford
Will Bickford

Reputation: 5386

It differs for every project that you run 'make install' on. The files which are installed are controlled by the install target in the Makefile being used. Your best bet is to open the Makefile and search for 'install:' - from there you can see what files will be copied out to your system.

Upvotes: 4

Related Questions