Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Zero-dependency, reproducible build
environments
Yan Vugenfirer - yan@rbld.io, +972-54-4758084
Dmitry Fleytman, PhD - dmitr...
The knowledge centre for cloud technologies
We feel developers’ pain
Build environments frustration
Conflicts
Toolchains
PackagesVersions
Compilers
Updates
Build environments frustration
It works on my machine!!!
Solution
Leverages containers technology
Seamless usage of multiple
environments
Environments are easily created and
share...
Underlying magic
Leverages lightweight
virtualisation
Enables correct file
permission and
ownership
Works on any modern OS
What are containers?
Linux Containers - is an operating-system-level
virtualization method for running multiple isolated
L...
What is container’s image?
A lightweight, stand-alone, executable package
that includes everything needed to run a piece o...
Docker is an open-source project
that enables an application and its
dependencies to be packaged as a
container.
What is D...
https://github.com/rbld/
rebuild
Architecture
Environments
registry
Rebuild native
registry
DockerHubDocker private
registry
Rebuild CLI
Docker Engine
Rebuild CLI
CLI concepts
Seamless usage for developer
No knowledge of Docker, Docker files or other
container technologies is needed
CLI concepts: Manage local
environments
Manage environments on local machine
List - lists local environments
Remove (rm) -...
CLI concepts: Environment
names and versioning
name:tag
Name - environment ID
Tag - should be used for tracking the versio...
CLI concepts: Deploy
Deploy environment from remote registry to local
machine
Search repository for environments
Need to b...
CLI concepts: Run
Run the environment
Environment doesn’t change in the process of
running
Can be used in interactive mode...
CLI concepts: Create
Create new environment
From base image from DockerHub
From archive of a file system
CLI concepts: Modify, status
and commit
Change existing environment
Modify - instructs rebuild to track changes in existin...
CLI concepts: Publish
Share your work
“Pushes” the environment to repository
Images saved to public cloud
Images can be shared with everybody
Images from official repositories can be used as base
imag...
Registry: Docker private registry
Docker enterprise or community addition of private
registry
Internal to your organisatio...
Registry: Rebuild Native registry
Easy to deploy and use in production
Lightweight
Internal for your organisation
No config...
Supported OSes
Installation
Installation - dependencies
Docker engine
Ruby 2.0+
Installation
Quick start
Run: rbld help
Already configured to deploy environments from
Rebuild DockerHub repositories
Can create environ...
Get Help
$HOME/.rbld/rebuild.conf
#DockerHub
REMOTE_NAME=origin
REMOTE_TYPE_origin="dockerhub"
REMOTE_origin="<NAMESPACE>/<REPOSITO...
Configuration: Rebuild registry
$HOME/.rbld/rebuild.conf
#Rebuild registry
REMOTE_NAME=origin
REMOTE_TYPE_origin="rebuild"
...
$HOME/.rbld/rebuild.conf
#Docker registry
REMOTE_NAME=origin
REMOTE_TYPE_origin="docker"
REMOTE_origin="<REGISTRY IP>:<POR...
Environment deployment
Environment deployment - search in
registry
Environment deployment
Environment deployment
Usage
Usage - single command
Usage - interactive
Environment creation
Environment creation
[test@rebuild-fedora23-1	~]$	rbld	create	--base	ubuntu:
15.10	ubuntu1510	
Downloading	the	base	image....
Environment creation
[test@rebuild-fedora23-1	~]$	rbld	create	--basefile	
alpine34.tar.gz	alpine34	
Building	environment.....
Environment modification
Modify
[test@rebuild-fedora23-1	~]$	rbld	modify	ubuntu1510	--		
																																									"sudo	apt-get	upd...
Modify - interactive mode
[test@rebuild-fedora23-1	~]$	rbld	modify	
ubuntu1510:initial	
Initializing	environment	[.....]	
...
Get status
[test@rebuild-fedora23-1	~]$	rbld	status	
								modified:	ubuntu1510:initial
Commit changes to
environment
[test@rebuild-fedora23-1	~]$	rbld	commit	--tag	v001
Revert changes
[test@rebuild-fedora23-1	~]$	rbld	checkout	ubuntu1510:initial
Environment-wide variables
[test@rebuild-fedora23-1	~]$	rbld	modify	ubuntu1510:initial	
Initializing	environment	[.....]	
...
git	clone	git://github.com/raspberrypi/tools.git	rpi-tools	
rbld	create	--base	ubuntu:16.04	rpi-raspbian	
rbld	modify	rpi-...
Sharing environments -
publishing to registry
[test@rebuild-fedora23-1	~]$	rbld	publish	qemu-fc22:v001	
Checking	for	colli...
Sharing environments -
saving and loading from file
[test@rebuild-fedora23-1	~]$	rbld	save	qemu-fc20:v001	
Successfully	sav...
Debugging
Rebuild CLI
RBLD_LOG_LEVEL - info, warn, error and fatal
RBLD_LOG_FILE - save logs to file
Environment bootstrap ...
https://github.com/rbld/
rebuild
Summary
Seamless usage
Isolated environments
Easy to share the environments between team
members
Multiple registries support
Support for additional image registries
USB redirection for non-Linux hosts
Enterprise Dashboa...
rbld@rbld.io www.rbld.io
https://github.com/rbld/rebuild
Contact us
Rebuild presentation - IoT Israel MeetUp
Rebuild presentation - IoT Israel MeetUp
Upcoming SlideShare
Loading in …5
×

Rebuild presentation - IoT Israel MeetUp

673 views

Published on

Presenting Rebuild project that simplifies the development of IoT and embedded devices

Published in: Software
  • Be the first to comment

  • Be the first to like this

Rebuild presentation - IoT Israel MeetUp

  1. 1. Zero-dependency, reproducible build environments Yan Vugenfirer - yan@rbld.io, +972-54-4758084 Dmitry Fleytman, PhD - dmitry@rbld.io, +972-54-2819481
  2. 2. The knowledge centre for cloud technologies
  3. 3. We feel developers’ pain
  4. 4. Build environments frustration Conflicts Toolchains PackagesVersions Compilers Updates
  5. 5. Build environments frustration It works on my machine!!!
  6. 6. Solution Leverages containers technology Seamless usage of multiple environments Environments are easily created and shared No more “works on my machine”
  7. 7. Underlying magic Leverages lightweight virtualisation Enables correct file permission and ownership Works on any modern OS
  8. 8. What are containers? Linux Containers - is an operating-system-level virtualization method for running multiple isolated Linux systems (containers) on a control host using a single Linux kernel.
  9. 9. What is container’s image? A lightweight, stand-alone, executable package that includes everything needed to run a piece of software, including the code, a runtime, libraries, environment variables and config files.
  10. 10. Docker is an open-source project that enables an application and its dependencies to be packaged as a container. What is Docker?
  11. 11. https://github.com/rbld/ rebuild
  12. 12. Architecture Environments registry Rebuild native registry DockerHubDocker private registry Rebuild CLI Docker Engine
  13. 13. Rebuild CLI
  14. 14. CLI concepts Seamless usage for developer No knowledge of Docker, Docker files or other container technologies is needed
  15. 15. CLI concepts: Manage local environments Manage environments on local machine List - lists local environments Remove (rm) - deletes local environment Saveload - saves or loads tofrom container image
  16. 16. CLI concepts: Environment names and versioning name:tag Name - environment ID Tag - should be used for tracking the version of the environment
  17. 17. CLI concepts: Deploy Deploy environment from remote registry to local machine Search repository for environments Need to be done once Environment can be instantly used after deployment
  18. 18. CLI concepts: Run Run the environment Environment doesn’t change in the process of running Can be used in interactive mode or to run just one command Changes to local files are preserved with correct permissions and ownership
  19. 19. CLI concepts: Create Create new environment From base image from DockerHub From archive of a file system
  20. 20. CLI concepts: Modify, status and commit Change existing environment Modify - instructs rebuild to track changes in existing environment Status - shows environments’ status Commit - saves the changes and create new tag for the environment
  21. 21. CLI concepts: Publish Share your work “Pushes” the environment to repository
  22. 22. Images saved to public cloud Images can be shared with everybody Images from official repositories can be used as base images for new environments Registry: DockerHub
  23. 23. Registry: Docker private registry Docker enterprise or community addition of private registry Internal to your organisation Might need additional configurations
  24. 24. Registry: Rebuild Native registry Easy to deploy and use in production Lightweight Internal for your organisation No configuration is needed
  25. 25. Supported OSes
  26. 26. Installation
  27. 27. Installation - dependencies Docker engine Ruby 2.0+
  28. 28. Installation
  29. 29. Quick start Run: rbld help Already configured to deploy environments from Rebuild DockerHub repositories Can create environments based on DockerHub
  30. 30. Get Help
  31. 31. $HOME/.rbld/rebuild.conf #DockerHub REMOTE_NAME=origin REMOTE_TYPE_origin="dockerhub" REMOTE_origin="<NAMESPACE>/<REPOSITORY>" Configuration: DockerHub
  32. 32. Configuration: Rebuild registry $HOME/.rbld/rebuild.conf #Rebuild registry REMOTE_NAME=origin REMOTE_TYPE_origin="rebuild" REMOTE_origin="<ABSOLUTE PATH TO REGISTRY ROOT DIRECTORY>"
  33. 33. $HOME/.rbld/rebuild.conf #Docker registry REMOTE_NAME=origin REMOTE_TYPE_origin="docker" REMOTE_origin="<REGISTRY IP>:<PORT>" Configuration: Docker Registry
  34. 34. Environment deployment
  35. 35. Environment deployment - search in registry
  36. 36. Environment deployment
  37. 37. Environment deployment
  38. 38. Usage
  39. 39. Usage - single command
  40. 40. Usage - interactive
  41. 41. Environment creation
  42. 42. Environment creation [test@rebuild-fedora23-1 ~]$ rbld create --base ubuntu: 15.10 ubuntu1510 Downloading the base image... Trying to pull repository docker.io/library/ubuntu ... 15.10: Pulling from library/ubuntu ... Successfully created ubuntu1510:initial
  43. 43. Environment creation [test@rebuild-fedora23-1 ~]$ rbld create --basefile alpine34.tar.gz alpine34 Building environment... ... Successfully created alpine34:initial
  44. 44. Environment modification
  45. 45. Modify [test@rebuild-fedora23-1 ~]$ rbld modify ubuntu1510 -- "sudo apt-get update && sudo apt-get install -y gcc" Initializing environment [.....] >>> rebuild env ubuntu1510:initial-M >>> sudo apt-get update && sudo apt-get install -y gcc Hit http://archive.ubuntu.com wily InRelease ... Processing triggers for libc-bin (2.21-0ubuntu4.3) ... <<< rebuild env ubuntu1510:initial-M
  46. 46. Modify - interactive mode [test@rebuild-fedora23-1 ~]$ rbld modify ubuntu1510:initial Initializing environment [.....] >>> rebuild env ubuntu1510:initial-M interactive >>> Press CTRL-D do leave test@ubuntu1510:initial-M:~$
  47. 47. Get status [test@rebuild-fedora23-1 ~]$ rbld status modified: ubuntu1510:initial
  48. 48. Commit changes to environment [test@rebuild-fedora23-1 ~]$ rbld commit --tag v001
  49. 49. Revert changes [test@rebuild-fedora23-1 ~]$ rbld checkout ubuntu1510:initial
  50. 50. Environment-wide variables [test@rebuild-fedora23-1 ~]$ rbld modify ubuntu1510:initial Initializing environment [.....] >>> rebuild env ubuntu1510:initial-M interactive >>> Press CTRL-D do leave test@ubuntu1510:initial-M:~$ sudo vi /rebuild/rebuild.rc test@ubuntu1510:initial-M:~$ cat /rebuild/rebuild.rc # This is the rebuild environment definition file. # Define required environment variables here. # # NOTE: Make sure to prefix definitions with # 'export' directive, i.e. #export MY_PATH=/path/to/some/location export CC=clang test@ubuntu1510:initial-M:~$ exit <<< rebuild env ubuntu1510:initial-M
  51. 51. git clone git://github.com/raspberrypi/tools.git rpi-tools rbld create --base ubuntu:16.04 rpi-raspbian rbld modify rpi-raspbian:initial >> sudo apt-get update >> sudo apt-get install -y make >> TOOLCHAIN=gcc-linaro-arm-linux-gnueabihf-raspbian-x64 >> sudo cp -r rpi-tools/arm-bcm2708/$TOOLCHAIN / >> echo export CC=/$TOOLCHAIN/bin/arm-linux-gnueabihf- | sudo tee -a /rebuild/rebuild.rc >> exit rbld commit rpi-raspbian --tag v001 Putting all together
  52. 52. Sharing environments - publishing to registry [test@rebuild-fedora23-1 ~]$ rbld publish qemu-fc22:v001 Checking for collisions... Publishing at 10.0.110.110:5000... ... Successfully published qemu-fc22:v001
  53. 53. Sharing environments - saving and loading from file [test@rebuild-fedora23-1 ~]$ rbld save qemu-fc20:v001 Successfully saved environment qemu-fc20:v001 to qemu- fc20-v001.rbld [test@rebuild-fedora23-1 ~]$ rbld load qemu-fc20-v001.rbld Successfully loaded environment from qemu-fc20-v001.rbld
  54. 54. Debugging Rebuild CLI RBLD_LOG_LEVEL - info, warn, error and fatal RBLD_LOG_FILE - save logs to file Environment bootstrap tracing RBLD_BOOTSTRAP_TRACE - set to 1 to enable environment startup tracing for rbld run and rbld modify.
  55. 55. https://github.com/rbld/ rebuild
  56. 56. Summary Seamless usage Isolated environments Easy to share the environments between team members
  57. 57. Multiple registries support Support for additional image registries USB redirection for non-Linux hosts Enterprise Dashboard with role management
  58. 58. rbld@rbld.io www.rbld.io https://github.com/rbld/rebuild Contact us

×