Ubuntu 14.04 上的 Sudo 安装权限问题

Sudo make install permissions issue on Ubuntu 14.04

我已经修改了 https://github.com/jayrambhia/Install-OpenCV/blob/master/Ubuntu/2.4/opencv2_4_10.sh 中的脚本,以尝试将 OpenCV 2.4.13 安装到我具有 sudo 权限的 vm 运行ning Ubuntu 14.04 上。我是 openCV、cmake 和 make 的新手,因此我将不胜感激,因为我必须将它安装在 20 个虚拟机上。

在 运行 脚本 returns 几分钟后出现错误,提示不能

/bin/sh: 1: cd: can't cd to /home/myaccount/setups/OpenCV/opencv-2.4.13/build

make[2]: *** [3rdparty/libtiff/CMakeFiles/libtiff.dir/depend] Error 2
make[1]: *** [3rdparty/libtiff/CMakeFiles/libtiff.dir/all] Error 2

输出的最后几行包含在下面,脚本在这之前。

脚本无法成功完成或如何更正权限问题的任何想法?

额外详情

我不确定这些是否相关,但当我深入研究问题时,我将更新此部分

脚本

arch=$(uname -m)
if [ "$arch" == "i686" -o "$arch" == "i386" -o "$arch" == "i486" -o "$arch" == "i586" ]; then
flag=1
else  
flag=0
fi
echo "Installing OpenCV 2.4.13"
mkdir OpenCV
cd OpenCV
echo "Removing any pre-installed ffmpeg and x264"
sudo apt-get -y remove ffmpeg x264 libx264-dev
echo "Installing unzip"
sudo apt-get -y install unzip
echo "Installing Dependenices"
sudo apt-get -y install libopencv-dev
sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm
sudo apt-get -y install libtiff4-dev libjpeg-dev libjasper-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev
sudo apt-get -y install python-dev python-numpy
sudo apt-get -y install libtbb-dev libeigen3-dev
sudo apt-get -y install libqt4-dev libgtk2.0-dev
sudo apt-get -y install libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-core-dev
sudo apt-get -y install x264 v4l-utils ffmpeg
sudo apt-get -y install libgtk2.0-dev
echo "Downloading OpenCV 2.4.13"
if ! [ -f "OpenCV-2.4.13.zip" ]; then
  wget -O OpenCV-2.4.13.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.13/opencv-2.4.13.zip/download
fi
echo "Installing OpenCV 2.4.13"
if ! [ -d "opencv-2.4.13" ]; then
  unzip OpenCV-2.4.13.zip
fi
rm OpenCV-2.4.13.zip
cd opencv-2.4.13
rm -rf build
mkdir build
cd build
cmake -D CUDA_ARCH_BIN=3.2 -D CUDA_ARCH_PTX=3.2 -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D BUILD_TIFF=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
make -j$(nproc)
sudo make install
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
echo "OpenCV 2.4.13 ready to be used"

命令输出

[100%] Build Java tests
Buildfile: /home/myaccount/setups/OpenCV/opencv-2.4.13/build/modules/java/test/.build/build.xml

build:

compile:
    [mkdir] Created dir: /home/myaccount/setups/OpenCV/opencv-2.4.13/build/modules/java/test/.build/build/classes
    [javac] Compiling 104 source files to /home/myaccount/setups/OpenCV/opencv-2.4.13/build/modules/java/test/.build/build/classes

jar:
    [mkdir] Created dir: /home/myaccount/setups/OpenCV/opencv-2.4.13/build/modules/java/test/.build/build/jar
      [jar] Building jar: /home/myaccount/setups/OpenCV/opencv-2.4.13/build/modules/java/test/.build/build/jar/opencv-test.jar

BUILD SUCCESSFUL
Total time: 6 seconds
[100%] Built target opencv_test_java
[sudo] password for myaccount: 
Sorry, try again.
[sudo] password for myaccount: 
/bin/sh: 1: cd: can't cd to /home/myaccount/setups/OpenCV/opencv-2.4.13/build
make[2]: *** [3rdparty/libtiff/CMakeFiles/libtiff.dir/depend] Error 2
make[1]: *** [3rdparty/libtiff/CMakeFiles/libtiff.dir/all] Error 2
make: *** [all] Error 2
OpenCV 2.4.13 ready to be used
myaccount@vm-20161023-002:~/setups$

我脑子里突然想到什么来解释权限不足的问题:如果你的 /home 在 NFS 上,root 可能对那里的文件有 nobody 的权限。有好几个related questions on StackExchange.

我的解决方案是首先不要尝试将第三方软件安装为 root。作为 root 执行,您的 make install 可以做 任何事情,包括添加或覆盖已经由您的软件包管理器管理的文件。这可能会使包管理器感到困惑,甚至使您的系统无法使用。最好把软件安装到别的地方; /usr/local/opt 就是为此目的而创建的。为了确保你的安装过程不偏离这个,你可以创建一个不同的用户(我称之为local),chown -R这些目录给那个用户,然后使用[=20=安装] 而不是 sudo 到 root。这对大多数安装来说都很好,如果你 运行 尝试做一些需要 root 权限的事情(例如将文件写入 /etc/usr/bin,重新启动系统服务,使用权限做棘手的事情等),它将失败并显示一条错误消息,允许您在它发生之前决定是否要这样做。我不知道 OpenCV 是否需要任何这样的步骤。