우산 프로젝트 : Chef Foundation
프로젝트 상태 : 활성
응답 시간을 최대 발행 : 14 일
요청 응답 시간 최대 값 : 14 일
다양한 플랫폼에서 프로젝트를위한 풀 스택 설치 업체를 쉽게 만들 수 있습니다.
Seth Chisamore와 Christopher Maier의 Christopher Maier는 Chefconf 2013에서 Omnibus에 대한 소개 연설을했습니다. Eat the Whole Bowl : Omnibus와 함께 전체 스택 설치 프로그램을 구축했습니다 .
이 프로젝트는 Chef Release Engineering 팀이 관리합니다. 릴리스 엔지니어링 팀의 기여, 심사 및 릴리스 프로세스에 대한 자세한 내용은 Chef Release Engineering OSS 관리 안내서를 참조하십시오.
옴니버스는 최소한의 전제 조건으로 운영되도록 설계되었습니다. 다음이 필요합니다.
Omnibus는 소프트웨어의 옴니버스 프로젝트를 정의하기위한 DSL과 해당 정의에서 설치 자 인공물을 생성하기위한 명령 줄 도구를 제공합니다.
시작하려면 워크 스테이션에 Omnibus를 로컬로 설치하십시오.
$ gem install omnibus
이제 프로젝트 생성기 기능을 사용하여 현재 디렉토리에서 옴니버스 프로젝트를 만들 수 있습니다.
$ omnibus new $MY_PROJECT_NAME
이것은 디렉토리 omnibus-$MY_PROJECT_NAME
에서 완전한 프로젝트 골격을 생성합니다.
기본적으로 이것은 옴니버스 구성을 repo와 별도로 유지하고 있다고 가정 할 때 omnibus-$MY_PROJECT_NAME
이라는 디렉토리를 만듭니다. 그러나 Repo 에 보관하는 것은 일반적인 관행 이므로이 디렉토리의 이름을 omnibus
로 바꾸고 프로젝트의 최상위 레벨 소스 레포에 배치하십시오.
$ cd omnibus- $MY_PROJECT_NAME
$ bundle install --binstubs
자세한 내용은 생성 된 프로젝트의 readme 파일에서 찾을 수 있습니다.
Omnibus는 현재 실행중인 플랫폼을 기반으로 설치 프로그램을 구축 할 플랫폼을 결정합니다. 즉, 데비안 기반 시스템에서 .deb
파일 만 생성 할 수 있습니다. 이 경고를 완화하기 위해 생성 된 프로젝트에는 일련의 옴니버스 프로젝트를 생성하는 데 적합한 테스트 키친 설정이 포함됩니다.
템플릿 프로젝트가 구축되지만 흥미 진진한 일을하지 않을 것입니다. 이를 위해서는 옴니버스 DSL을 사용하여 응용 프로그램의 세부 사항을 정의해야합니다.
존재하는 경우 Omnibus는 저장소의 루트에서 omnibus.rb
라는 최상위 구성 파일을 사용합니다. 이 파일은 런타임에로드되며 여러 구성 튜블이 포함되어 있습니다. 예는 다음과 같습니다.
# Build locally (instead of /var)
# -------------------------------
base_dir './local'
# Disable git caching
# ------------------------------
use_git_caching false
# Enable S3 asset caching
# ------------------------------
use_s3_caching true
s3_bucket ENV [ 'S3_BUCKET' ]
# There are three ways to authenticate to the S3 bucket
# 1. set `s3_access_key` and `s3_secret_key`
s3_access_key ENV [ 'S3_ACCESS_KEY' ]
s3_secret_key ENV [ 'S3_SECRET_KEY' ]
# 2. set `s3_profile` to use an AWS profile in the Shared Credentials files
#s3_profile ENV['S3_PROFILE']
# 3. set `s3_iam_role_arn` to use an AWS IAM role
#s3_iam_role_arn ENV['S3_IAM_ROLE_ARN']
자세한 내용은 Config
문서를 참조하십시오.
Omnibus에게 --config
옵션을 모든 명령에 전달하여 다른 구성 파일을로드하도록 지시 할 수 있습니다.
$ bin/omnibus --config /path/to/config.rb
마지막으로 --override
플래그를 사용하여 명령 줄에서 특정 구성 옵션을 재정의 할 수 있습니다. 이는 구성 파일 값보다 궁극적 인 우선 순위를 차지합니다.
$ bin/omnibus --override use_git_caching:false
프로젝트 DSL 파일은 실제 응용 프로그램을 정의합니다. 이것이 처음에 풀 스택 설치 프로그램을 만드는 것입니다. 프로젝트의 종속성을 정의하는 수단 (소프트웨어 DSL 정의 파일에 지정된대로)과 설치 프로그램 패키지 메타 데이터를 설정하는 방법을 제공합니다.
모든 프로젝트 정의는 옴니버스 저장소의 config/projects
디렉토리에 있어야합니다.
name "chef-full"
maintainer "YOUR NAME"
homepage "http://yoursite.com"
install_dir "/opt/chef"
build_version "0.10.8"
build_iteration 4
dependency "chef"
사용 가능한 일부 DSL 방법은 다음과 같습니다.
DSL 메소드 | 설명 |
---|---|
name | 프로젝트의 이름 |
install_dir | 패키지의 원하는 설치 위치 |
build_version | 패키지 버전 |
build_iteration | 패키지 반복 번호 |
dependency | 이 패키지에 포함 할 옴니버스 소프트웨어 정의 구성 요소 |
package | 패커-특이 적 DSL을 호출하십시오 |
compress | 압축기 별 DSL을 호출하십시오 |
기본적으로 타임 스탬프가 build_version에 추가됩니다. omnibus.rb
에서 append_timestamp
false
로 설정하거나 --override append_timestamp:false
사용 하여이 동작을 끄십시오.
자세한 내용은 Project
문서를 참조하십시오.
Omnibus "Software"파일 전체 패키지를 만드는 개별 소프트웨어 구성 요소를 정의합니다. 응용 프로그램의 빌딩 블록입니다. 소프트웨어 DSL은 소프트웨어 소스를 검색 할 위치, 구축 방법 및 어떤 의존성을 정의하는 방법을 제공합니다. 이러한 종속성은 또한 자체 소프트웨어 DSL 파일에 정의되므로 종속성 인식 빌드 순서의 기초를 형성합니다.
모든 소프트웨어 정의는 옴니버스 프로젝트 저장소의 config/software
디렉토리에 있어야합니다.
예는 다음과 같습니다.
name "ruby"
default_version "1.9.2-p290"
source url : "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby- #{ version } .tar.gz" ,
md5 : "604da71839a6ae02b5b5b5e1b792d5eb"
dependency "zlib"
dependency "ncurses"
dependency "openssl"
relative_path "ruby- #{ version } "
build do
command "./configure"
command "make"
command "make install"
end
사용 가능한 일부 DSL 방법에는 다음이 포함됩니다.
DSL 메소드 | 설명 |
---|---|
name | 소프트웨어 구성 요소의 이름 (이것은 먼저 나와야합니다) |
default_version | 소프트웨어 구성 요소의 버전 |
source | 소스의 위치로의 지시 |
dependency | 이 소프트웨어가 의존하는 옴니버스 소프트웨어 정의 구성 요소 |
relative_path | 추출 된 타르 볼의 상대 경로 |
build | 빌드 지침 |
더 많은 DSL 방법은 Software
문서를 참조하십시오.
또한 build
블록 내부에는 다양한 DSL 방법이 있습니다.
DSL 메소드 | 설명 |
---|---|
command | 단일 쉘 명령을 실행하십시오 |
make | 적절한 경우 gmake를 사용하여 Make (Args가 있거나없는)를 실행하십시오. |
patch | 디스크에서 패치를 적용하십시오 |
workers | 최대 건축업자 수 |
windows_safe_path | Windows에서 포격하기위한 안전한 경로를 형성하십시오. |
go | 내장 된 이동으로 코드를 실행하십시오 |
ruby | 코드를 내장 루비로 실행하십시오 |
gem | 코드를 내장 된 Rubygems로 실행하십시오 |
bundle | 포함 된 번들로 코드를 실행하십시오 |
rake | 코드를 내장 된 레이크 보석으로 실행하십시오 |
block | 빌드 타임에 루비 블록을 실행하십시오 |
erb | 주어진 ERB 템플릿을 렌더링하십시오 |
mkdir | 주어진 디렉토리를 만듭니다 |
touch | 주어진 빈 파일을 만듭니다 |
delete | 주어진 파일 또는 디렉토리를 제거하십시오 |
strip | 주어진 파일 또는 디렉토리의 바이너리의 기호를 스트립 |
copy | A를 복사하십시오 |
move | a를 b로 이동하십시오 |
link | a를 b에 링크합니다 |
sync | 모든 파일을 A에서 B로 복사하고 Union 파일 제거 |
더 많은 DSL 방법은 Builder
문서를 참조하십시오.
version
메소드를 사용하여 동일한 소프트웨어 정의 파일에서 동일한 소프트웨어의 여러 버전을 구축하고 블록을 제공 할 수 있습니다.
name "ruby"
default_version "1.9.2-p290"
version "1.9.2-p290" do
source url : "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby- #{ version } .tar.gz" ,
md5 : "604da71839a6ae02b5b5b5e1b792d5eb"
end
version "2.1.1" do
source url : "http://ftp.ruby-lang.org/pub/ruby/2.1/ruby- #{ version } .tar.gz" ,
md5 : "e57fdbb8ed56e70c43f39c79da1654b2"
end
소프트웨어 정의는 단순히 루비 코드이므로 버전 번호를 테스트하는 순수한 루비로 래핑하여 조건부로 실행할 수 있습니다.
조직 전체 소프트웨어를 공유하는 가장 쉬운 방법은 Bundler 및 Rubygems를 통한 것입니다. 소프트웨어 저장소를 예로 들어, Chef의 Omnibus-Software를보십시오. 자세한 내용은 RubyGems 문서를 참조하십시오.
Bundler를 사용 하여이 보석을 끌어내는 것이 좋습니다 (Bundler는 Github에서 직접 소프트웨어를 당기는 것을 허용 함).
gem 'my-company-omnibus-software'
gem 'omnibus-software' , github : 'my-company/omnibus-software'
그런 다음 옴니버스 구성의 software_gems
목록에 소프트웨어 이름을 추가하십시오.
software_gems %w( my-company-omnibus-software omnibus-software )
디스크에 로컬 경로를 지정할 수도 있습니다 (그러나 이것이 팀간에 프로젝트를 공유하기가 어려울 수 있음) :
local_software_dirs %w( /path/to/software /other/path/to/software )
이러한 모든 경로의 경우 주문 문제가 있으므로 원격 소프트웨어 repo를 유지하면서 로컬 소프트웨어 버전에 의존 할 수 있습니다. 위의 예가 주어지면 옴니버스는이 순서로 foo
라는 소프트웨어 정의를 검색합니다.
$PWD/config/software/foo.rb
/path/to/software/config/software/foo.rb
/other/path/to/software/config/software/foo.rb
/Users/sethvargo/.gems/.../my-company-omnibus-software/config/software/foo.rb
/Users/sethvargo/.gems/.../omnibus-software/config/software/foo.rb
foo.rb
의 첫 번째 인스턴스가 발생합니다. 로컬 (공급 된) 소프트라 정의가 우선합니다!
패키지 및 소프트웨어 정의를 만든 후에는 다음과 같이 구축 할 수 있습니다.
./bin/omnibus build $MY_PACKAGE_NAME
그러나 알고 있어야 할 몇 가지 경고가 있습니다.
omnibus.rb
의 base_dir
무너 뜨리거나, 최소한 cache_dir
및 build_dir
변경하려고합니다. 그렇지 않으면 루트가 필요한 /var/cache/omnibus
및 /opt/$MY_PROJECT_NAME
사용하려고합니다.config/projects/$MY_PROJECT_NAME.rb
. config/software
폴더에있는 소프트웨어 .rb
파일을 참조 할 수 있습니다.install_dir
일반적으로 빌드 시간에 root
권한이 필요합니다. root
로 달리는 것을 피하려면 "/tmp/#{name}"
과 같은 다른 위치를 변경하십시오.omnibus-software
보석에서 나오는 기본 구성에있는 많은 것들을 참조합니다. 그래서 당신은 당신이 Gemfile
에서 그것을 무의미하게하거나 포크로 만들어야하는 다음 자신의 것을 참조하는 데 필요한 것을 사용하려고합니다./opt/$project/bin
에서 binstubs를 원한다면, AppBundler를 사용해야하거나 해당 빙석을 만들려면 포스트 설치 단계가 필요합니다.ruby
버전의 재정의를 지정하면 rubygems
와 bundler
해당 ruby
버전의 버전과 일치시키기 위해 Bundler 버전의 불일치에 대한 실패를 얻을 수 있습니다. 위의 빌드 명령은 물론 로컬 호스트를 구축하므로 OS 및 기본 시스템에만 해당됩니다. 그러나 omnibus new
의 Skeleten Setup은 이미 다양한 OS를 위해 구축 할 수 있도록 이미 부엌을 설정할 수 있도록 이미 부엌을 설정할 수 있습니다. 자세한 내용은 생성 된 Omnibus 디렉토리의 README.md
를 참조하십시오.
GIT 기반 소프트웨어 정의는 분기를 Default_version으로 지정할 수 있습니다. 이 경우, 프로젝트 오버라이드 (아래 참조) 또는 외부 버전 Manifest가 사용되지 않는 한, 정확한 GIT 개정은 빌드 타임에 결정됩니다. 매니페스트 버전을 생성하려면 omnibus manifest
명령을 사용하십시오.
omnibus manifest PROJECT -l warn
이것은 모든 소프트웨어 정의의 해결 된 버전이 포함 된 JSON 형식 매니페스트를 출력합니다.
때로는 플랫폼에 HealthCheck가 통과 할 수 있도록 화이트리스트를 해야하는 라이브러리가 있습니다. HealthCheck 코드에서 발견 된 화이트리스트는 지원되는 플랫폼에서 성공적인 빌드에 필요한 최소한으로 구성됩니다.
자신의 화이트리스트 라이브러리를 추가하려면 다음과 같이 옴니버스 프로젝트에서 소프트웨어 정의에 Regex를 추가하십시오.
whitelist_file /libpcrecpp.so..+/
일반적으로 필요한 특정 플랫폼을 기반으로 화이트리스트에 조건부를 추가하는 것이 좋습니다.
경고 : 설치하는 시스템에 보장되는 화이트리스트에 라이브러리를 추가해야합니다. 라이브러리가 비 디폴트 패키지에서 나오면 대신 패키지에 빌드해야합니다.
상태 : 실험
omnibus changelog generate
Omnibus 프로젝트의 ChangElog를 생성합니다. 이 명령은 현재 다음을 가정합니다.
이러한 가정은 여러 프로젝트에 가장 적합한 것을 결정함에 따라 변경 될 것입니다 .
프로젝트 정의는 올바른 버전을 사용하기 위해 override
전달하여 특정 소프트웨어 종속성을 무시할 수 있습니다.
name "chef-full"
# <snip>
# This will override the default version of "chef"
override :chef , version : "2.1.1"
dependency "chef"
재정의 버전은 관련 소프트웨어에서 정의되어야합니다!
기본적으로 Omnibus는 warn
수준에 로그인합니다. --log-level
플래그를 옴니버스 호출로 전달하여이를 무시할 수 있습니다.
$ bin/omnibus build < project > --log-level info # or "debug"
기본적으로 Omnibus는 컴파일 된 소프트웨어 정의를 캐시하므로 N+1 Omnibus 프로젝트 빌드가 훨씬 빠릅니다. 이 기능은 omnibus.rb
에 다음을 추가하여 비활성화 할 수 있습니다.
use_git_caching false
이 프로젝트에 기여한 정보는 https://github.com/chef/chef/blob/master/contributing.md를 참조하십시오
Copyright 2012-2016 Chef Software, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.