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
输出的最后几行包含在下面,脚本在这之前。
脚本无法成功完成或如何更正权限问题的任何想法?
额外详情
我不确定这些是否相关,但当我深入研究问题时,我将更新此部分
- cmake 版本 2.8
- Makerfile 提到 # shell 在其中执行 make 规则。 SHELL
= /bin/sh 但我的终端报告回显 $0 为 bash
- 当我 运行
make install V=1
它构建 100% 但随后报告
-- 安装配置:"RELEASE" cmake_install.cmake:36 (FILE) 处的 CMake 错误:文件无法创建目录:/usr/local/include/opencv2。可能需要管理员权限
- 但是当我 运行
sudo make install V=1
我得到 can't cd 上面的错误
- 将 Shebang
#!/bin/bash
添加到我的脚本的开头并没有解决问题
- 运行 新 ubuntu 本地机器上的脚本允许脚本 运行 但我需要在托管虚拟机 运行 上获取它
umask
设置文件夹(其中脚本 运行s 和创建目录是 0022
。设置文件夹的权限是 755
,组 = Domain Users
, Owner = myaccount
那是创建源文件文件夹的地方,也是创建后 755
的构建文件夹
脚本
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 是否需要任何这样的步骤。
我已经修改了 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
输出的最后几行包含在下面,脚本在这之前。
脚本无法成功完成或如何更正权限问题的任何想法?
额外详情
我不确定这些是否相关,但当我深入研究问题时,我将更新此部分
- cmake 版本 2.8
- Makerfile 提到 # shell 在其中执行 make 规则。 SHELL = /bin/sh 但我的终端报告回显 $0 为 bash
- 当我 运行
make install V=1
它构建 100% 但随后报告 -- 安装配置:"RELEASE" cmake_install.cmake:36 (FILE) 处的 CMake 错误:文件无法创建目录:/usr/local/include/opencv2。可能需要管理员权限 - 但是当我 运行
sudo make install V=1
我得到 can't cd 上面的错误 - 将 Shebang
#!/bin/bash
添加到我的脚本的开头并没有解决问题 - 运行 新 ubuntu 本地机器上的脚本允许脚本 运行 但我需要在托管虚拟机 运行 上获取它
umask
设置文件夹(其中脚本 运行s 和创建目录是0022
。设置文件夹的权限是755
,组 =Domain Users
, Owner =myaccount
那是创建源文件文件夹的地方,也是创建后755
的构建文件夹
脚本
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 是否需要任何这样的步骤。