Vagrant設定を使用してダウンロードせずにパッケージをインストールする方法は?

Vagrant設定を使用してダウンロードせずにパッケージをインストールする方法は?

私はさまざまな目的でVagrantボックスを使用していますが、ほとんどの場合ダウンロード可能な既製のボックスだけで十分です。しかし、時には、単回使用ではなく、日常的な活動のためにボックスに1つまたはいくつかの追加パッケージをインストールする必要があります。

たとえば、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/

だから私の質問は実際には2つです。

  1. sudo yum install man(a)スクリプト(Vagrantfileと同じディレクトリに保存されている)を呼び出すか(b)可能であれば、Vagrantfileに単一のコマンド(たとえば)を挿入するための放浪設定構文は何ですか?

  2. yumローカルディレクトリからパッケージをインストールするために必要なオプションフラグを提供する方法(/vagrantそしてオンラインストアの代わりに同じローカルディレクトリに必要な依存関係をインストールしますか?

答え1

たとえば、MacにVagrantボックスがあります(MacホストのLinuxゲスト)。

これがどのディストリビューションかを知ることは興味深いでしょう...あなたがそれを使用しようとしているのを見れば、yumそれがRH / CentOS / ..ものだと思いますか?

私は主に組み込みのLinuxドキュメント(manページ、情報ページなど)に簡単にアクセスしたいと思います。しかし、私が最初にさまよったときに私が使っていたボックスにはmanパッケージがインストールされていませんでした。

manこれがデフォルトでインストールされているディストリビューションを知りません。

私があなたなら、ATLASの公式ボックスの1つを使用します。 Debian が思い浮かぶでしょう: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

関連情報