그래서 GIT에서 VMAF를 컴파일하는 스크립트를 작성하려고 하는데 PYTHONPATH 위치를 설치 디렉터리로 변경해야 합니다. 스크립트가 제대로 실행되고 VMAF가 설치되고 있지만 문제는 .bashrc를 변경할 때 bash 스크립트가 완료될 때까지 작동하고 전역적으로 변경하고 싶다는 것입니다. Bash 프로세스가 변경 사항을 격리하고 있다는 것을 알고 있지만 스크립트 실행을 유지하기 위해 소스를 실행하는 방법이 있습니까? 이것은 내 코드입니다.
#!/bin/bash
mkdir $HOME/install
sudo apt-get install python-dev python-pip python-tk -y
sudo pip install --upgrade scikit-learn h5py numpy scipy matplotlib pandas
cd $HOME/install
git clone https://github.com/Netflix/vmaf.git
cd $HOME/install/vmaf
make
echo "export PYTHONPATH=$HOME/install/vmaf/python:\$PYTHONPATH" | sudo tee -a $HOME/.bashrc
echo "alias ll='ls -al --color'" | sudo tee -a $HOME/.bashrc
source $HOME/.bashrc
./unittest
답변1
아마도 가장 우아한 해결책은 아니지만 /etc/bash.bashrc에 전역 변수를 정의하고 bash -c unittest
.
이런 종류의 작업을 자동화하도록 설계된 Chef 및 Puppet과 같은 무료 오픈 소스 소프트웨어가 있다는 점을 지적하지 않을 수 없습니다. 극복해야 할 학습 곡선이 있지만 둘 다 잘 문서화된 튜토리얼이 있습니다. 나는 Chef를 좋아하고 당신이 여기서 하려는 일을 내가 해야 한다면 그것을 사용할 것입니다.
보세요https://learn.chef.io/tutorials/learn-the-basics/ubuntu/free/configure-a-resource/로컬 모드에서 Chef를 사용하는 방법에 대한 느낌을 얻기 위해 이 상황에서 수행할 작업은 다음과 같습니다. 이것은 여러분이 시작할 수 있도록 제가 작성한 Chef 스크립트입니다. 그러나 사용에 따른 책임은 본인에게 있습니다. 아직 테스트하지 않았습니다. install_vmaf.rb와 같은 파일로 저장합니다.
include_recipe 'python'
include_recipe 'python::pip'
['python-dev','python-pip','python-tk'].each do |p|
package p do
action :install
end
end
['scikit-learn','h5py','numpy','scipy','matplotlib','pandas'].each do |p|
python_pip p do
action :install
end
end
git "/path/to/check/out/to" do
repository "https://github.com/Netflix/vmaf.git"
reference "master"
action :sync
end
이는 불완전하므로 빌드 프로세스를 처리하려면 리소스 블록을 추가해야 합니다. 몇년이 지났는데도 아직도 보고있네요https://serverfault.com/questions/298013/installing-something-from-source-using-chef-should-i-be-doing-some-checks이를 수행하는 방법에 대한 몇 가지 지침.
마지막으로 chef-client
루트로 실행해야 하므로 "git" 리소스 블록의 "user" 속성을 사용하여 복제된 vmaf 저장소의 소유권을 올바르게 설정해야 합니다. 바라보다https://docs.chef.io/resource_git.html더 많은 정보를 알고 싶습니다.