Proyek Payung : Chef Foundation
Status Proyek : Aktif
Masalah Waktu Respons Maksimal : 14 Hari
Tarik Permintaan Waktu Respons Maksimal : 14 Hari
Dengan mudah membuat penginstal ruang penuh untuk proyek Anda di berbagai platform.
Seth Chisamore dan Christopher Maier dari Chef memberikan pembicaraan pengantar tentang Omnibus di ChefConf 2013, berjudul Eat the Whole Bowl: Membangun penginstal tumpukan penuh dengan Omnibus :
Proyek ini dikelola oleh tim rekayasa rilis koki. Untuk informasi lebih lanjut tentang kontribusi tim rekayasa rilis, triase, dan proses rilis, silakan berkonsultasi dengan Panduan Manajemen Rilis Rilis OSS Chef.
Omnibus dirancang untuk berjalan dengan satu set prasyarat minimal. Anda akan membutuhkan yang berikut:
Omnibus menyediakan DSL untuk mendefinisikan proyek omnibus untuk perangkat lunak Anda, serta alat baris perintah untuk menghasilkan artefak penginstal dari definisi itu.
Untuk memulai, instal Omnibus secara lokal di workstation Anda.
$ gem install omnibus
Anda sekarang dapat membuat proyek Omnibus di direktori Anda saat ini dengan menggunakan fitur Project Generator.
$ omnibus new $MY_PROJECT_NAME
Ini akan menghasilkan kerangka proyek lengkap di direktori omnibus-$MY_PROJECT_NAME
Secara default ini akan membuat direktori yang disebut omnibus-$MY_PROJECT_NAME
dengan asumsi Anda menjaga konfigurasi omnibus Anda terpisah dari repo. Namun, menyimpannya di repo Anda adalah praktik umum, jadi rasakan untuk mengganti nama direktori ini menjadi omnibus
dan letakkan di tingkat atas sumber proyek Anda repo.
$ cd omnibus- $MY_PROJECT_NAME
$ bundle install --binstubs
Rincian lebih lanjut dapat ditemukan di file readme proyek yang dihasilkan.
Omnibus menentukan platform untuk membangun installer berdasarkan platform yang sedang dijalankannya . Artinya, Anda hanya dapat menghasilkan file .deb
pada sistem berbasis Debian. Untuk mengurangi peringatan ini, proyek yang dihasilkan mencakup pengaturan dapur uji yang cocok untuk menghasilkan serangkaian proyek omnibus.
Meskipun proyek template akan dibangun, itu tidak akan melakukan sesuatu yang menarik. Untuk itu, Anda perlu menggunakan Omnibus DSL untuk menentukan spesifik aplikasi Anda.
Jika ada, Omnibus akan menggunakan file konfigurasi tingkat atas bernama omnibus.rb
di root repositori Anda. File ini dimuat saat runtime dan mencakup sejumlah tunable konfigurasi. Inilah contohnya:
# 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']
Untuk informasi lebih lanjut, silakan lihat dokumentasi Config
.
Anda dapat memberi tahu Omnibus untuk memuat file konfigurasi yang berbeda dengan memberikan opsi --config
ke perintah apa pun:
$ bin/omnibus --config /path/to/config.rb
Akhirnya, Anda dapat mengganti opsi konfigurasi tertentu di baris perintah menggunakan bendera --override
. Ini membutuhkan lebih banyak nilai file konfigurasi:
$ bin/omnibus --override use_git_caching:false
File DSL Proyek mendefinisikan aplikasi Anda yang sebenarnya; Ini adalah hal yang Anda buat installer full-stack di tempat pertama. Ini menyediakan sarana untuk mendefinisikan dependensi proyek (sekali lagi, sebagaimana ditentukan dalam file definisi DSL perangkat lunak), serta cara untuk mengatur metadata paket penginstal.
Semua definisi proyek harus ada di direktori config/projects
dari repositori omnibus Anda.
name "chef-full"
maintainer "YOUR NAME"
homepage "http://yoursite.com"
install_dir "/opt/chef"
build_version "0.10.8"
build_iteration 4
dependency "chef"
Beberapa metode DSL yang tersedia meliputi:
Metode DSL | Keterangan |
---|---|
name | Nama proyek |
install_dir | Lokasi pemasangan paket yang diinginkan |
build_version | Versi paket |
build_iteration | Nomor iterasi paket |
dependency | Komponen yang ditentukan oleh perangkat lunak omnibus untuk dimasukkan dalam paket ini |
package | Memohon DSL spesifik packager |
compress | Memohon DSL spesifik kompresor |
Secara default, cap waktu ditambahkan ke build_version. Anda dapat mematikan perilaku ini dengan mengatur append_timestamp
ke false
di omnibus.rb
Anda atau menggunakan --override append_timestamp:false
pada baris perintah.
Untuk informasi lebih lanjut, silakan lihat dokumentasi Project
.
File "perangkat lunak" omnibus menentukan komponen perangkat lunak individual yang digunakan untuk membuat paket keseluruhan Anda. Mereka adalah blok bangunan dari aplikasi Anda. Perangkat lunak DSL menyediakan cara untuk mendefinisikan tempat untuk mengambil sumber perangkat lunak, cara membangunnya, dan ketergantungan apa yang mereka miliki. Ketergantungan ini juga didefinisikan dalam file DSL perangkat lunak mereka sendiri, sehingga membentuk dasar untuk pemesanan build yang sadar ketergantungan.
Semua definisi perangkat lunak harus masuk dalam direktori config/software
repositori proyek Omnibus Anda.
Inilah contohnya:
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
Beberapa metode DSL yang tersedia meliputi:
Metode DSL | Keterangan |
---|---|
name | Nama komponen perangkat lunak (ini harus didahulukan) |
default_version | Versi komponen perangkat lunak |
source | Petunjuk arah ke lokasi sumber |
dependency | Komponen yang ditentukan perangkat lunak omnibus yang bergantung pada perangkat lunak ini |
relative_path | Jalur relatif dari tarball yang diekstraksi |
build | Instruksi pembuatan |
Untuk lebih banyak metode DSL, silakan berkonsultasi dengan dokumentasi Software
.
Selain itu, ada sejumlah metode DSL yang tersedia di dalam blok build
:
Metode DSL | Keterangan |
---|---|
command | Jalankan perintah shell tunggal |
make | Jalankan make (dengan atau tanpa arg), menggunakan gmake bila perlu |
patch | Terapkan tambalan dari disk |
workers | Jumlah maksimum pembangun |
windows_safe_path | Format jalur untuk aman untuk ditembakkan di jendela |
go | Jalankan kode sebagai pergi yang tertanam |
ruby | Menjalankan kode sebagai ruby tertanam |
gem | Menjalankan kode sebagai rubygems tertanam |
bundle | Menjalankan kode sebagai bundler tertanam |
rake | Menjalankan kode sebagai permata rake tertanam |
block | Jalankan Blok Ruby di Bangun Waktu |
erb | Membuat template ERB yang diberikan |
mkdir | Buat direktori yang diberikan |
touch | Buat file kosong yang diberikan |
delete | Hapus file atau direktori yang diberikan |
strip | Simbol strip dari binari pada file atau direktori yang diberikan |
copy | Salin A ke B |
move | Pindahkan A ke B |
link | Tautan ke b |
sync | Salin semua file dari A ke B, menghapus file serikat |
Untuk lebih banyak metode DSL, silakan berkonsultasi dengan dokumentasi Builder
.
Anda dapat mendukung membangun beberapa versi dari perangkat lunak yang sama dalam file definisi perangkat lunak yang sama menggunakan metode version
dan memberikan blok:
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
Karena definisi perangkat lunak hanyalah kode ruby, Anda dapat secara kondisional menjalankan apa pun dengan membungkusnya dengan Ruby murni yang menguji nomor versi.
Cara termudah untuk berbagi perangkat lunak di seluruh organisasi adalah melalui Bundler dan Rubygems. Sebagai contoh repositori perangkat lunak, lihatlah omnibus-software Chef. Untuk informasi lebih lanjut, silakan lihat dokumentasi Rubygems.
Dianjurkan Anda menggunakan Bundler untuk menarik permata ini (karena Bundler juga memungkinkan penarik perangkat lunak langsung dari GitHub):
gem 'my-company-omnibus-software'
gem 'omnibus-software' , github : 'my-company/omnibus-software'
Kemudian tambahkan nama perangkat lunak ke daftar software_gems
di konfigurasi omnibus Anda:
software_gems %w( my-company-omnibus-software omnibus-software )
Anda juga dapat menentukan jalur lokal pada disk (tetapi diperingatkan ini dapat membuat berbagi proyek di antara tim -tim menjadi sulit):
local_software_dirs %w( /path/to/software /other/path/to/software )
Untuk semua jalur ini, pesanan penting , jadi dimungkinkan untuk bergantung pada versi perangkat lunak lokal sambil tetap mempertahankan repo perangkat lunak jarak jauh. Dengan contoh di atas, Omnibus akan mencari definisi perangkat lunak bernama foo
dalam urutan ini:
$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
Contoh pertama foo.rb
yang ditemui akan digunakan. Harap dicatat bahwa definisi softare lokal (vendored) diutamakan!
Setelah Anda membuat definisi paket dan perangkat lunak yang dapat Anda bangun dengan:
./bin/omnibus build $MY_PACKAGE_NAME
Namun ada beberapa peringatan yang harus diperhatikan:
base_dir
di omnibus.rb
, atau paling tidak mengubah cache_dir
dan build_dir
karena sebaliknya ia akan mencoba menggunakan /var/cache/omnibus
dan /opt/$MY_PROJECT_NAME
, membutuhkan root.config/projects/$MY_PROJECT_NAME.rb
. Anda dapat merujuk file perangkat lunak .rb
yang ada di folder config/software
.install_dir
yang ditentukan dalam file proyek biasanya membutuhkan hak istimewa root
pada waktu pembuatan. Ubah lokasi lain seperti "/tmp/#{name}"
untuk menghindari berjalan sebagai root
.omnibus-software
. Jadi, Anda ingin menggunakan orang -orang yang Anda perlukan untuk membatalkan komentar di Gemfile
, atau garpu, dan kemudian merujuk pada Anda sendiri/opt/$project/bin
, Anda harus menggunakan AppBundler, atau Anda harus memiliki langkah instalasi pasca untuk membuat binstub tersebut.ruby
, Anda juga perlu mengganti rubygems
dan bundler
untuk mencocokkan versi dalam versi ruby
atau Anda akan mendapatkan kegagalan di sekitar ketidakcocokan versi Bundler. Perintah build di atas tentu saja akan dibangun di atas host lokal Anda sehingga spesifik untuk OS dan sistem dasar yang Anda hadapi. Tetapi pengaturan kerangka oleh omnibus new
yang sudah disiapkan dapur untuk Anda sehingga mudah dibangun untuk berbagai OS, lihat README.md
di direktori omnibus yang Anda hasilkan untuk detailnya.
Definisi perangkat lunak berbasis GIT dapat menentukan cabang sebagai default_version mereka. Dalam hal ini, revisi GIT yang tepat untuk digunakan akan ditentukan pada waktu build kecuali jika proyek override (lihat di bawah) atau manifes versi eksternal digunakan. Untuk menghasilkan versi manifes, gunakan perintah omnibus manifest
:
omnibus manifest PROJECT -l warn
Ini akan menghasilkan manifes yang diformat JSON yang berisi versi terselesaikan dari setiap definisi perangkat lunak.
Terkadang sebuah platform memiliki perpustakaan yang perlu dimasukkan ke dalam daftar putih agar healthcheck dapat lewat. Daftar putih yang ditemukan dalam kode HealthCheck terdiri dari minimal yang diperlukan untuk keberhasilan bangunan pada platform yang didukung.
Untuk menambahkan perpustakaan Anda sendiri, cukup tambahkan regex ke definisi perangkat lunak Anda dalam proyek omnibus Anda sebagai berikut:
whitelist_file /libpcrecpp.so..+/
Biasanya merupakan ide yang baik untuk menambahkan daftar putih ke WhiteList berdasarkan platform spesifik yang memerlukannya.
PERINGATAN: Anda hanya harus menambahkan pustaka ke daftar putih yang dijamin berada di sistem yang Anda instal; Jika perpustakaan berasal dari paket non-default, Anda harus membangunnya ke dalam paket.
Status: Eksperimental
omnibus changelog generate
akan menghasilkan perubahan untuk proyek omnibus. Perintah ini saat ini mengasumsikan:
Asumsi -asumsi ini akan berubah karena kami menentukan apa yang paling cocok untuk sejumlah proyek kami.
Definisi proyek dapat mengganti dependensi perangkat lunak tertentu dengan memberikan override
untuk menggunakan versi yang benar:
name "chef-full"
# <snip>
# This will override the default version of "chef"
override :chef , version : "2.1.1"
dependency "chef"
Versi yang ditimpa harus didefinisikan dalam perangkat lunak terkait!
Secara default, Omnibus akan masuk pada level warn
. Anda dapat mengesampingkan ini dengan meneruskan bendera- --log-level
ke panggilan omnibus Anda:
$ bin/omnibus build < project > --log-level info # or "debug"
Secara default, cache omnibus yang dikompilasi definisi perangkat lunak, jadi pembuatan proyek omnibus n+1 jauh lebih cepat. Fungsionalitas ini dapat dinonaktifkan dengan menambahkan yang berikut ini ke omnibus.rb
Anda:
use_git_caching false
Untuk informasi tentang berkontribusi pada proyek ini, lihat 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.