Статьи

Устанавливаемые Бродячие Коробки

Мы раздаем vagrantbox людям, демонстрирующим наш проект. Это сложная задача для установки всей установки для людей, не являющихся ИТ-специалистами. Следующее является доказательством концепции создания самоустанавливающейся бродячей машины.

Для создания коробки вам нужно:

  • Джруби установлен

Чтобы запустить окно:

Получить Jruby и все драгоценные камни установлены

$ rvm install jruby
$ rvm use jruby
$ mkdir shrinkwrap
$ cd shrinkwrap
$ cat <EOF > Gemfile
source 'http://rubygems.org'

gem 'vagrant', '0.7.2'
gem 'warbler'
gem 'sinatra'
gem 'jruby-openssl'
gem 'jruby-win32ole'
EOF

$ gem install bundler
$ bundle install

Подготовьте бродячий файл

Мы создаем простой vagrantfile, который загружает коробку с Ubuntu

$ mkdir lib
$ cat <EOF > lib/Vagrantfile
Vagrant::Config.run do |config|
  config.vm.box = "shrinkwrap"
  config.vm.box_url = "http://opscode-vagrant-boxes.s3.amazonaws.com/ubuntu10.04-gems.box"
  config.vm.boot_mode = :gui
  config.vm.customize do |vm|
          vm.memory_size = 384
          vm.name = "Shrinkwrap"
  end
  config.vm.forward_port "http", 80,  9000
end
EOF

Добавить Синатра в смесь

Чтобы дать пользователю графический интерфейс для запуска виртуальной машины , мы предоставляем простой URL с помощью sinatra

$ cat <EOF > lib/shrinkwrap.rb
#!/usr/bin/env ruby
require 'rubygems'
require 'sinatra'
require 'vagrant'
require 'vagrant/cli'
require 'pp'

class Shrinkwrap < Sinatra::Application 
  get '/up' do
    body "We do an up"
        vagrant_dir=File.expand_path(File.dirname(__FILE__))
        puts "we are loading the config file"
        @vagrant_env=Vagrant::Environment.new(:cwd => vagrant_dir)
        pp @vagrant_env
        @vagrant_env.load!
        puts "we are uping the machine, please wait..."
        Vagrant::CLI.start(["up"], :env => @vagrant_env)
        body "We are up"
  end
end
EOF

$ cat <EOF > config.ru
require "lib/shrinkwrap"
run Shrinkwrap.new
EOF

 

Пакет проекта Синатра с камышевкой

Славка позволяет упаковать проекты sinatra. Он упаковывает версию jruby в warfile, поэтому ему нужна только установленная java.

Чтобы упаковать текущую синатру, просто запустите в каталог, где вы создали файл config.ru

$ warble

должно привести к shrinkwrap.war

Сделать военный файл исполняемым

Следующий шаг — сделать исполняемый файл. Подобно Дженкинсу, мы хотим создать файл войны. Winstone — это инструмент, который делает это возможным

Теперь можно использовать winstone, чтобы сделать боевой файл автономным исполняемым файлом. Для окон нам нужно упаковать «jruby-openssl», «jruby-win32ole», чтобы мы создали файл конфигурации warble.

Мы вставляем наш предыдущий файл create war в jar-файл warbler, сначала распаковывая его, добавляя его как embedded.war и упаковывая обратно.

$ mkdir config
$ cat <EOF > config/warble.rb
Warbler::Config.new do |config|
     config.gems += ["jruby-openssl","jruby-win32ole"]
end
EOF
$ wget "http://sourceforge.net/projects/winstone/files/winstone/v0.9.10/winstone-0.9.10.jar/download"
$ mkdir extract
$ cd extract
$ jar -xvf ../winstone-0.9.10.jar
$ cp ../shrinkwrap.war embedded.war
$ jar cvfm ../ubuntu10-04.jar META-INF/MANIFEST.MF .
$ cd .. 

 

Готовы к взлету

Теперь вы можете начать создание нового файла с помощью

$ java -jar ubuntu10-04.jar

И когда вы переходите на http: // localhost: 8080 / up. Он загрузит коробку с S3, и через некоторое время вы увидите раскрутку виртуальной коробки!

Вывод

Точка доказана. Я думаю, что эта концепция имеет большой потенциал, вы просто скачиваете jar и poof, которые выполняются самостоятельно, у вас установлена ​​среда. Смешайте это с рынком для виртуальных машин или поставщиков, упаковывающих демонстрацию своих продуктов.

В двух словах! Будущее здесь 🙂

Мне было бы интересно услышать, как вы будете использовать эту идею в своей повседневной жизни!

Теперь перейдем к следующей идее!

дальнейшее чтение