![Vagrant 구성을 사용하여 다운로드하지 않고 패키지를 설치하는 방법은 무엇입니까?](https://linux55.com/image/74684/Vagrant%20%EA%B5%AC%EC%84%B1%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%ED%8C%A8%ED%82%A4%EC%A7%80%EB%A5%BC%20%EC%84%A4%EC%B9%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
저는 Vagrant 박스를 다양한 목적으로 사용하는데, 대부분의 경우 다운로드할 수 있는 기성품 박스만으로도 충분합니다. 그러나 때로는 일회성 사용이 아닌 일상적인 활동을 위해 상자에 하나 또는 몇 개의 추가 패키지를 설치해야 할 때도 있습니다.
예를 들어, 내 Mac에 Vagrant 상자가 있고(Mac 호스트의 Linux 게스트) 주로 내장된 Linux 문서( man
페이지, info
페이지 등)에 쉽게 액세스할 수 있기를 원합니다. 그런데 제가 사용하고 있는 상자에는 man
처음 설치할 때 설치했던 패키지가 없습니다 vagrant up
.
패키지를 수동으로 설치하면 다음 패키지까지만 지속됩니다 vagrant destroy
. 이를 사용하면 vagrant halt
시스템에 몇 가지 버그가 생겨 vagrant
애초에 Virtual Box를 사용하는 목적이 무산됩니다.
알아요일반적인대답은 단일 명령을 사용하는 스크립트만큼 간단할 수 있는 방랑 구성입니다 sudo yum install man
. (실제로는 정확히 어떻게 해야 하는지조차 모릅니다.) 그러나 vagrant box를 시작할 때마다 man 패키지와 모든 종속성을 다운로드하는 것보다 이러한 패키지를 다운로드하는 것이 좋습니다.한 번, 호스트 시스템에 저장하고 매번 가상 머신에 로드합니다 vagrant up
.
필요한 패키지를 가져오고 패키지 파일을 호스트에 sudo yum install man --downloadonly
넣기 위해 게스트에서 이것을 실행했습니다 .sudo cp -r /var/cache/yum/x86_64/6/base/packages/ /vagrant/
그래서 내 질문은 실제로 두 가지입니다.
sudo yum install man
(a) 스크립트(Vagrantfile과 동일한 디렉터리에 저장됨)를 호출하거나 (b) 가능한 경우 Vagrantfile에 단일 명령(예: )을 삽입하기 위한 방랑 구성 구문은 무엇입니까 ?yum
로컬 디렉터리에서 패키지를 설치하는 데 필요한 옵션 플래그를 제공하는 방법 (/vagrant
)그리고온라인 저장소 대신 동일한 로컬 디렉터리에서 필수 종속성을 설치하시겠습니까?
답변1
예를 들어 Mac에 Vagrant 상자가 있습니다(Mac 호스트의 Linux 게스트).
이것이 어떤 배포판인지 아는 것은 흥미로울 것입니다... 당신이 그것을 사용하려고 하는 것을 보면 yum
그것이 RH/CentOS/.. 물건이라고 가정합니까?
저는 주로 내장된 Linux 문서(man 페이지, 정보 페이지 등)에 쉽게 액세스하고 싶습니다. 그러나 처음 방황했을 때 내가 사용하고 있던 상자에는 man 패키지가 설치되어 있지 않았습니다.
man
이것이 기본적으로 설치되는 배포판을 모르겠습니다 .
내가 당신이라면 ATLAS의 공식 상자 중 하나를 사용할 것입니다. 데비안이 떠오를 것입니다:https://vagrantcloud.com/debian/
질문 1에 답하세요
이것을 vagrantfile에 추가하십시오:
$script = <<SCRIPT
echo I am provisioning...
date > /etc/vagrant_provisioned_at
SCRIPT
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: $script
end
에서 가져온 예 http://docs.vagrantup.com/v2/provisioning/shell.html#inline-scripts
그러면 상단의 스크립트가 실행되어 생성됩니다./etc/vagrant_provisioned_at
문제를 추가로 조정하려면 다음을 수행하십시오.
$script = <<SCRIPT
yum install man
SCRIPT
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: $script
end
구성 스크립트는 UID0으로 실행되므로 필요하지 않습니다 sudo
.
질문 2에 답하세요.
저는 Debian 사용자이므로 RedHat은 문맹입니다 ;-)
rpm -hiv <filename>
IMHO는 ( i
=installation, h
=hashtag, =verbose) 입니다 v
.
답변2
방금 이 사용 사례를 다시 발견했습니다. 여기서는 이를 어떻게 처리했는지 간략하게 설명하겠습니다.
Git 및 PostgreSQL을 다운로드(설치는 아님)한 다음 방랑 구성 중에 설치하고 싶습니다.
새 가상 머신에서 다음 명령을 사용하여 모든 종속성이 포함된 패키지를 다운로드합니다(나중에 sudo mkdir /vagrant/packages
).
sudo yumdownloader --destdir=/vagrant/packages/ --resolve -y git postgresql
이 명령의 비결은 너무 많은 것을 다운로드한다는 것입니다. 다음 단계는 내가 사용하는 RPM을 설정하는 것입니다.실제로설치가 필요합니다. 나는 다음을 시도하여 이 작업을 수행했습니다.
sudo yum install /vagrant/packages/git-1.7.1-4.el6_7.1.x86_64.rpm /vagrant/packages/postgresql-8.4.20-6.el6.x86_64.rpm
종속성을 다운로드할 계획이므로 확인 프롬프트에서 "아니요"를 누르세요. 나열된 종속성을 가져와 내 명령에 추가했습니다.
sudo yum install /vagrant/packages/git-1.7.1-4.el6_7.1.x86_64.rpm /vagrant/packages/postgresql-8.4.20-6.el6.x86_64.rpm /vagrant/packages/perl-* /vagrant/packages/postgresql-libs-8.4.20-6.el6.x86_64.rpm
아무것도 다운로드하지 않고도 성공적으로 작동했기 때문에 다음을 실행했습니다.
cd /vagrant/packages/
mkdir save
mv /vagrant/packages/git-1.7.1-4.el6_7.1.x86_64.rpm /vagrant/packages/postgresql-8.4.20-6.el6.x86_64.rpm /vagrant/packages/perl-* /vagrant/packages/postgresql-libs-8.4.20-6.el6.x86_64.rpm save/
rm *.rpm
mv save/* .
rmdir save
결과: "패키지" 디렉터리오직새로운 Vagrant 이미지에 실제로 필요한 종속성입니다.
그런 다음 my 에 쉘 구성 명령을 추가하십시오 Vagrantfile
.
config.vm.provision "shell", inline: <<-SHELL
yum install -C -y /vagrant/packages/*
SHELL
...Git와 PostgreSQL을 설치했는데 실행 중이 vagrant up
더라도 언제든지 작동합니다 .vagrant destroy