Il a été développé sous le nom omnibus-ruby pour fournir le temps et les gemmes Ruby en tant que package [^ 1] pour différents systèmes d'exploitation (?) Chef / omnibus omnibus), mais cela ressemble à un framework d'empaquetage multiplateforme qui peut être utilisé [^ 2] quelle que soit la langue.
Cependant, même si je googlé, il y a peu de gens qui utilisent omnibus lui-même et la plupart des exemples sont Ruby, mais cette fois j'ai eu l'occasion de conditionner le runtime Python et la bibliothèque pypi, donc je vais laisser les informations. Je le pense.
De plus, j'en ai beaucoup parlé dans la mise en œuvre. Merci beaucoup. http://qiita.com/sawanoboly/items/0902a97ef71d99ad60a6
Ceci est également intégré dans l'environnement Docker comme l'article présenté ci-dessus, mais cette fois aussi. Cependant, la façon de créer une image Docker est un peu différente (plus d'omission w)
Tout d'abord, le moyen le plus rapide de créer un environnement de construction omnibus est d'exécuter le livre de recettes omnibus officiellement préparé. https://github.com/chef-cookbooks/omnibus
omnibus Officiellement, il est introduit pour créer un environnement de construction en utilisant kitchen-vagrant
et kitchen-docker
, mais je veux le faire sur CircleCI, donc kitchen -vagrant
est NG, kitchen-docker
est une mauvaise pratique dans Docker, vous pouvez donc mettre ʻopensshpour vous connecter avec SSH, créer un utilisateur supplémentaire pour la connexion SSH et faire diverses choses supplémentaires, de sorte que Utilisez le pilote Test-Kitchen appelé
kitchen-docker_cli`, qui a été créé pour éviter et utiliser Docker de manière native autant que possible.
https://github.com/marcy-terui/kitchen-docker_cli
Alors, réglez-le comme ça.
yaml:.kitchen.yml
driver:
name: docker_cli
transport:
name: docker_cli
provisioner:
name: chef_zero
platforms:
- name: centos-6.6
driver_config:
image: centos:centos6.6
run_list:
- yum-epel::default
- omnibus::default
- omnibus-lamvery::yum_clean
- name: ubuntu-14.04
run_list:
- apt::default
- omnibus::default
- omnibus-lamvery::apt_clean
suites:
- name: default
attributes:
omnibus:
build_user: root
build_user_group: root
build_user_home: /root
install_dir: /opt/lamvery
ʻOmnibus-lamvery :: yum_clean, ʻapt_clean
est une recette de malchance presque dénuée de sens, tout comme ʻapt-get clean,
yum clean all` pour réduire la capacité même un peu w
Il ne vous reste plus qu'à faire ce qui suit:
bundle exec kitchen converge
Vérifiez avec le conteneur Docker cuit et docker ps
, et enregistrez-le dans Docker Hub.
docker commit <container-id> <username>/<image>
docker push <username>/<image>
Cliquez ici pour le résultat https://hub.docker.com/r/marcy/omnibus-ubuntu-14/ https://hub.docker.com/r/marcy/omnibus-centos-6/
C'est comme faire un docker pull
sur CircleCI et exécuter une compilation avec docker run
.
Ci-dessous, je vais tout expliquer car il n'y a pas de netteté.
Cliquez ici pour voir la source pour voir l'image entière.
https://github.com/willyworks/omnibus-lamvery/tree/master/omnibus
Montez ceci avec -v
lors du démarrage du conteneur Docker pour build ( docker run
) et construisez-le.
Python
Sauf si vous êtes particulier sur les options au moment de la construction, une collection de recettes (?) Pour construire divers logiciels avec omnibus appelé omnibus-software Il y a du Python à l'intérieur, donc si vous l'incluez dans le Gemfile
et bundle
, vous devriez pouvoir l'utiliser.
Gemfile
source 'https://rubygems.org'
gem 'omnibus', github: 'chef/omnibus'
gem 'omnibus-software', github: 'opscode/omnibus-software'
Cette fois, je voulais changer les options, donc je l'ai défini à portée de main.
Par précaution lors de la spécification des options, bien qu'il ne soit pas unique à Python, omnibus est un framework pour créer un package full-stack qui est complété par lui-même, donc il est NG s'il dépend de bibliothèques globales du système.
À propos, la vérification s'exécute à la fin de la construction, elle se termine donc par une erreur.
En Python, si vous spécifiez une option de configuration comme --with-system-ffi
, ce sera NG.
C'est facile. Tout d'abord, installez pip
en utilisant le Python fourni par le paquet comme indiqué ci-dessous.
software/pypi.rb
name "pypi"
build do
command "curl -kL https://bootstrap.pypa.io/get-pip.py | #{install_dir}/embedded/bin/python"
command "ln -fs #{install_dir}/embedded/bin/pip #{install_dir}/bin/pip"
end
Ensuite, tout ce que vous avez à faire est d'installer la bibliothèque avec la commande pip
créée par celui-ci.
software/lamvery.rb
name "lamvery"
build do
command "#{install_dir}/embedded/bin/pip install lamvery==#{version}"
command "ln -fs #{install_dir}/embedded/bin/lamvery #{install_dir}/bin/lamvery"
end
En passant, vous pouvez obtenir la dernière version de la bibliothèque fournie à ce moment-là comme suit.
require 'rexml/document'
require 'open-uri'
doc = REXML::Document.new(open('https://pypi.python.org/pypi?:action=doap&name=lamvery').read)
p doc.elements['rdf:RDF/Project/release/Version/revision'].text #=> "0.14.0"
Cette fois, je l'ai téléchargé sur Bintray. L'exemple auquel j'ai fait référence utilise un client CLI créé par Go, mais j'ai essayé de frapper directement l'API REST. L'API REST de Bintray est simple et agréable. Le code de réponse était étrange et j'en étais un peu accro. .. .. Je n'ai pas trouvé de bijou qui serait agréable à utiliser à l'avenir, alors ce serait peut-être une bonne idée d'en faire un.
Pour référence, le code de la tâche de rake approximative téléchargée sur Bintray ressemble à ceci. https://github.com/willyworks/omnibus-lamvery/blob/master/Rakefile
Si vous essayez de faire quelque chose ici, il y a de fortes chances que sawanoboly le fasse en premier et il sera enregistré (republication)
[^ 1]: rpm
, deb
, etc. Il semble que vous puissiez également créer pkg
pour Mac et msi
pour Win (je ne fais que rpm et deb)
[^ 2]: c'est plutôt OK même si la langue n'est pas incluse
Recommended Posts