logical-construct 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/bin/flight-deck +3 -0
  2. data/doc/DESIGN +48 -0
  3. data/doc/EC2-baking-notes +70 -0
  4. data/doc/ExampleStartupRakefile +152 -0
  5. data/doc/ExampleTargetRakefile +4 -0
  6. data/doc/TODO +148 -0
  7. data/doc/Vb-EC2-translation-notes +96 -0
  8. data/doc/hating-chef +32 -0
  9. data/lib/logical-construct/archive-tasks.rb +307 -0
  10. data/lib/logical-construct/ground-control.rb +4 -1
  11. data/lib/logical-construct/ground-control/build-plan.rb +95 -0
  12. data/lib/logical-construct/ground-control/core.rb +1 -1
  13. data/lib/logical-construct/ground-control/generate-manifest.rb +67 -0
  14. data/lib/logical-construct/ground-control/provision.rb +73 -168
  15. data/lib/logical-construct/ground-control/run-on-target.rb +1 -1
  16. data/lib/logical-construct/ground-control/setup.rb +1 -4
  17. data/lib/logical-construct/ground-control/setup/copy-files.rb +2 -2
  18. data/lib/logical-construct/ground-control/tools.rb +66 -0
  19. data/lib/logical-construct/node-client.rb +112 -0
  20. data/lib/logical-construct/plan.rb +2 -0
  21. data/lib/logical-construct/plan/core.rb +45 -0
  22. data/lib/logical-construct/plan/standalone-bundle.rb +80 -0
  23. data/lib/logical-construct/port-open-check.rb +41 -0
  24. data/lib/logical-construct/protocol.rb +2 -0
  25. data/lib/logical-construct/protocol/plan-validation.rb +46 -0
  26. data/lib/logical-construct/protocol/ssh-tunnel.rb +127 -0
  27. data/lib/logical-construct/protocol/vocabulary.rb +8 -0
  28. data/lib/logical-construct/target/Implement.rake +8 -0
  29. data/lib/logical-construct/target/command-line.rb +90 -0
  30. data/lib/logical-construct/target/flight-deck.rb +341 -0
  31. data/lib/logical-construct/target/implementation.rb +33 -0
  32. data/lib/logical-construct/target/plan-records.rb +317 -0
  33. data/lib/logical-construct/target/resolution-server.rb +153 -0
  34. data/lib/logical-construct/target/{unpack-cookbook.rb → unpack-plan.rb} +8 -4
  35. data/lib/logical-construct/template-file.rb +41 -0
  36. data/lib/templates/Rakefile.erb +8 -0
  37. data/spec/ground-control/smoke-test.rb +8 -7
  38. data/spec/node_resolution.rb +62 -0
  39. data/spec/target/plan-records.rb +142 -0
  40. data/spec/target/provisioning.rb +21 -0
  41. data/spec_help/file-sandbox.rb +12 -6
  42. data/spec_help/fixtures/Manifest +1 -0
  43. data/spec_help/fixtures/source/one.tbz +1 -0
  44. data/spec_help/fixtures/source/three.tbz +1 -0
  45. data/spec_help/fixtures/source/two.tbz +1 -0
  46. data/spec_help/spec_helper.rb +5 -7
  47. metadata +165 -72
  48. data/lib/logical-construct/ground-control/setup/build-files.rb +0 -93
  49. data/lib/logical-construct/ground-control/setup/create-construct-directory.rb +0 -22
  50. data/lib/logical-construct/ground-control/setup/install-init.rb +0 -32
  51. data/lib/logical-construct/resolving-task.rb +0 -141
  52. data/lib/logical-construct/satisfiable-task.rb +0 -87
  53. data/lib/logical-construct/target.rb +0 -4
  54. data/lib/logical-construct/target/chef-solo.rb +0 -37
  55. data/lib/logical-construct/target/platforms.rb +0 -51
  56. data/lib/logical-construct/target/platforms/aws.rb +0 -8
  57. data/lib/logical-construct/target/platforms/default/chef-config.rb +0 -134
  58. data/lib/logical-construct/target/platforms/default/resolve-configuration.rb +0 -44
  59. data/lib/logical-construct/target/platforms/default/volume.rb +0 -11
  60. data/lib/logical-construct/target/platforms/virtualbox.rb +0 -8
  61. data/lib/logical-construct/target/platforms/virtualbox/volume.rb +0 -15
  62. data/lib/logical-construct/target/provision.rb +0 -36
  63. data/lib/logical-construct/target/sinatra-resolver.rb +0 -99
  64. data/lib/logical-construct/testing/resolve-configuration.rb +0 -32
  65. data/lib/logical-construct/testing/resolving-task.rb +0 -15
  66. data/lib/templates/chef.rb.erb +0 -9
  67. data/lib/templates/construct.init.d.erb +0 -18
  68. data/lib/templates/resolver/finished.html.erb +0 -1
  69. data/lib/templates/resolver/index.html.erb +0 -17
  70. data/lib/templates/resolver/task-file-form.html.erb +0 -6
  71. data/lib/templates/resolver/task-form.html.erb +0 -6
  72. data/spec/resolution.rb +0 -147
  73. data/spec/target/chef-config.rb +0 -67
  74. data/spec/target/chef-solo.rb +0 -55
  75. data/spec/target/platforms.rb +0 -36
  76. data/spec/target/smoke-test.rb +0 -45
  77. data/spec_help/ungemmer.rb +0 -36
@@ -0,0 +1,3 @@
1
+ require 'logical-construct/target/command-line'
2
+
3
+ LogicalConstruct::Target::CommandLine.new(ARGV).go
@@ -0,0 +1,48 @@
1
+ After consideration:
2
+
3
+ This is not a cloud server manager. Those exist already.
4
+
5
+ This is a cloud deployment manager. Write one description of how your cloud is built, deploy it whereever.
6
+
7
+ Puppet/chef handle like 90% of that, but before either can run, network has to
8
+ be configured, and persistent/extra volumes need to be mounted.
9
+
10
+ "Blessing" deploys is another thing - snapshot/repackage a currently running
11
+ instance so that we can shortcut deploy next time.
12
+
13
+ Things Ground control should be able to do:
14
+
15
+ * Survey Target hosts and make sure they have the configs they need.
16
+
17
+ * Given a target server with Ruby and SSH, set it up as a particular role.
18
+ * (I.e: SSH and deliver files, install gems, locked to GC version)
19
+
20
+ Three basic tools:
21
+
22
+ Construct: delivers and executes provisioning plans (which themselves may be "use Chef to...")
23
+ (coupling point: construct manifest)
24
+
25
+ AWS toolkit: scripts for handling a bunch of instances, including:
26
+ * starting with user data
27
+ * expanding credentials (i.e. from u/p to full set of keypairs and
28
+ certs and things)
29
+ * baking and migrating images
30
+ * putting instances into and out of LB.
31
+
32
+ (coupling point: server database - consider (initialially) SQLite)
33
+
34
+ Remote management: run (command) with (set of servers) as targets. Including
35
+ curl/rsync or ssh -c "(command)" - cap or vlad may be Good Enough for this
36
+ already?
37
+ * servers: an address + metadata
38
+ * metadata:
39
+ - hosting environment (AWS/vbox)
40
+ - deployment type (prod/staging/etc)
41
+ - deployment role (app/db/etc)
42
+ - ...
43
+ * metadata used to:
44
+ - select servers to run commands against
45
+ - restrict command that can be run against a server
46
+ - included into command template
47
+ (coupling point (to construct): construct <role>:provision[<server from
48
+ set>])
@@ -0,0 +1,70 @@
1
+ ALWAYS check the ec2-api and ec2-ami tools versions
2
+
3
+ Outstanding issues:
4
+ Where is the ephemeral storage mounted? Probably needs to start as a config, maybe detect later
5
+
6
+ Data required:
7
+ Three categories: arbitrary (merely shared), task parameters, configuations
8
+
9
+ Task params:
10
+ Target machine
11
+ AMI name
12
+
13
+ Configurations:
14
+ Ephemeral storage mount
15
+ Private Key File
16
+ Certificate File
17
+ User ID
18
+ (bundle options, like includes)
19
+ Upload bucket
20
+ S3 access key
21
+ S3 secret key
22
+
23
+ Arbitrary:
24
+ Manifest path
25
+ Credential file paths
26
+
27
+ From the EC2 user guide:
28
+
29
+ [Provisioned]
30
+ Upload EC2 credentials to ephemeral storage (i.e. pk.pem + cert.pem, AWS creds)
31
+ [end provisioned]
32
+
33
+ [Local to baked machine - should be in target rakefile]
34
+ Write access needed on instance store (/mnt or /media/ephemeral0)
35
+ ec2-bundle-vol -k <private_keyfile> -c <certificate_file> -u <user_id> --destination <somewhere ephemeral> --prefix <something unique - not 'image'> --arch x86_64 -i /etc/ec2/amitools/cert-ec2.pem -i $(ls /etc/ssl/certs/*.pem | tr \\n ,) --ec2cert /etc/ec2/amitools/cert-ec2.pem
36
+ ec2-upload-bundle -b <bucket> -m <manifest_path> -a <access_key> -s <secret_key> --retry
37
+ ec2-register <your-s3-bucket>/<prefix>.manifest.xml -n image_name --aws-access-key <access_key> --aws-secret-key <secret_key>
38
+ [end local]
39
+
40
+ (Commands that have worked:)
41
+ ec2-bundle-vol -k /mnt/pk.pem -c /mnt/cert.pem -u 180593873119 -d /mnt/bundling/ -r x86_64 -p nascent-042513 -i /etc/ec2/amitools/cert-ec2.pem -i $(ls /etc/ssl/certs/*.pem | tr \\n ,) --ec2cert /etc/ec2/amitools/cert-ec2.pem
42
+
43
+ ec2-upload-bundle -b sbmp-instances -m /mnt/bundling/nascent-042513.manifest.xml -a <access key> -s <secret key>
44
+
45
+ (For some reason this didn't:)
46
+ ec2-register sbmp-instances/nascent-042513.manifest.xml -n Nascent042513 #but web console worked fine
47
+
48
+
49
+ So, if provision, needs to be something like:
50
+
51
+ GC:
52
+ rake bake[target,ami_name]
53
+ -> ssh target rake bake (can return 13:"Target incapable", but if 0:...)
54
+ Important here - on success, there needs to be a long-running process on target
55
+ So: background self? Fork new process and return "We're good to go?"
56
+ -> build json configs
57
+ -> ssh tunnel'd provision (target wants creds, configs)
58
+ "Baking initialized"
59
+
60
+ (Pattern to be repeated in remote re-provisioning, too)
61
+
62
+ How to tell when done, where it's at?
63
+
64
+ Target rake task needs to log process, so reviewing/tailing logs lets us answer
65
+ the question "is it done yet." SNS/SES/other email when done? Maybe something
66
+ simple like "mail" command - if set up, bully, otherwise, you're on your own
67
+
68
+
69
+ Of note: there is a ec2-migrate-manifest command that has the basis of regenerating a manifest for a bundle (it's Ruby)
70
+ The right solution to multiple-client AMIs is LRD hosting the bundles on our S3, give permissions on them, and let clients register the AMIs that way. -- I think. Sorted this out with Locaverse, but the details are fuzzy atm.
@@ -0,0 +1,152 @@
1
+ # vim: set ft=ruby:
2
+ =begin
3
+
4
+ Of note:
5
+
6
+ /etc/chef/solo.rb:
7
+ file_cache_path "/var/chef-solo"
8
+ cookbook_path "/var/chef-solo/cookbooks"
9
+ json_attribs "http://www.example.com/node.json"
10
+ recipe_url "http://www.example.com/chef-solo.tar.gz
11
+
12
+ Means that "chef-solo" will work ootb
13
+
14
+ So: packaging cookbooks, and putting them places (VM dir + unpack, S3) is a
15
+ thing
16
+
17
+ Leaning towards: not using S3 as a webserver, since it makes cookbooks public
18
+ (ish)
19
+ Also, adds variation to VM/AMI cases - S3get with perms needs to pull/unpack
20
+ tgz. Then the solo runs on unpacked cookbooks in both cases
21
+
22
+ First feature after "it works": rollback. It was just working - make it work again.
23
+
24
+ Running specs on VM. Auto-mount of code directory a la Vagrant...
25
+
26
+ Checkpointing stuff - snapshot VM, bundling EC2 - after setup, after provision
27
+
28
+
29
+ Fundamental goal:
30
+
31
+ Two orthagonal configurations:
32
+
33
+ 1) What my hosting environment looks like
34
+ 2) Where my hosting environment lives.
35
+
36
+ I should be able to describe 1 and make it happen on different 2s.
37
+
38
+ Scenarios:
39
+
40
+ Dev in VM, deploy to EC2 (or ideally, any Fog target)
41
+
42
+ Deploy a monolith ->
43
+ deploy simple cluster ->
44
+ deploy autoscaling worldbeater
45
+
46
+ Clear already that there are cases where a particular action needs to
47
+ happen in different places - Maybe special cases ignore configs they don't
48
+ handle?
49
+
50
+ Only trouble is the possiblity of ball-dropping: "I don't do that, and neither
51
+ do I"
52
+
53
+
54
+ Version 1:
55
+ Everything possible is "chef'll do it"
56
+ "Target Configuration" is: write your Rakefile that way.
57
+ "Env Configuration" is: write your cookbook/attrs
58
+ Ideally: that's enough.
59
+
60
+ =end
61
+
62
+ #Parent/host system
63
+ module Construction
64
+
65
+ #setup => rake bootstrap[address]
66
+ setup = Setup.new
67
+
68
+ setup.in_namespace do
69
+ #create chef config dir on server
70
+ dir = CreateDirectory.new(setup) #needs server, dir
71
+
72
+ #template Rakefile
73
+ rakefile = BuildRakefile.new(setup)
74
+
75
+ #scp Gemfile to server
76
+ #scp Rakefile to server
77
+ copyfiles = CopyFiles.new(setup, rakefile, dir)
78
+
79
+ #bundle setup config dir
80
+ bundler = BundleSetup.new(setup, dir)
81
+ end
82
+
83
+ #Construct bootstrap:
84
+ #
85
+ #VM mode:
86
+ #
87
+ #
88
+ #EC2
89
+
90
+ configs = ChefConfigs.new #data for precursor
91
+
92
+ vbox = Launch::VirtualBox.new(configs) #vbox instance?
93
+
94
+ #launch VM
95
+ vbox.in_namespace do
96
+ #scp json precursor to VM
97
+ #scp chef cookbook to config dir
98
+ scp_files = CopyFiles.new(vbox) #cookbook, attributes
99
+ #ssh rake constuct:provision
100
+ run_provision = RemoteProvision.new(vbox)
101
+ end
102
+
103
+ #launch AMI w/ user metadata - json precusor
104
+ ec2 = Launch::EC2.new(server_configs)
105
+ end
106
+
107
+ =begin
108
+ rake launch =>
109
+
110
+ AMI mode:
111
+
112
+ run on start
113
+ /etc/rc.d/local => rake startup
114
+
115
+ get chef.json precursor from instance metadata
116
+ s3 get chef cookbook into config dir
117
+
118
+ rake construct:provision
119
+
120
+ Launch tasks (rake construct:provision)
121
+
122
+ build chef json config
123
+ build chef rb config
124
+ run chef solo
125
+
126
+ =end
127
+ #Target/child
128
+ module Construction
129
+ provision = Provision.new do |prov|
130
+ prov.attr_source = ""
131
+ prov.cookbook_path = ""
132
+ prov.config_path = ""
133
+ end
134
+
135
+ ec2_start = EC2Boot.new(provision)
136
+ ec2_start.in_namespace do
137
+ metadata = RetrieveMetadata.new(ec2_start) #url path => filesystem path
138
+ cookbook = GetCookbook.new(ec2_start) do
139
+ source_url = "s3://..."
140
+ end
141
+ end
142
+
143
+ provision.in_namespace do
144
+ attrs = BuildAttributes.new(provision) do |attrs|
145
+ attrs.destination_path = ""
146
+ end
147
+ unpack = UnpackCookbook.new(provision)
148
+ #location of precursor
149
+ chef = RunChef.new(attrs, provision) #loc of json, rc, cookbook
150
+ end
151
+ task :launch => [ec2_start[:run], provision[:run]]
152
+ end
@@ -0,0 +1,4 @@
1
+ # vim: set ft=ruby :
2
+ require 'logical-construct/target'
3
+
4
+ include LogicalConstruct
@@ -0,0 +1,148 @@
1
+ --- Current showstoppers (pre-share with Evan/LRD)
2
+
3
+ Current provisioning can't handle symlink for cookbooks dir
4
+
5
+ [written] SSH tunnelling for provision - ideally including a local HTTP proxy of all servers in need
6
+
7
+ Chef: multiple cookbooks (e.g. LRD base + Client deploy)
8
+ Manifest patching (the Stanford NLP problem)
9
+
10
+ [written] Bless(/bake) instances
11
+
12
+ [written] Logging provisioning stuff - especially the chef output. rake provision outputs nothing until done. Logging or output would be handy.
13
+
14
+ --- 1= known showstoppers fixed. Other bugs:
15
+
16
+ Check fixed: Bug: /etc/init.d/logical-construct is generated once and never rebuilt, so the LC_DP variable isn't set per rake setup.
17
+
18
+ [written] Unpack needs (at least the option) to clobber target directory - otherwise
19
+ "bad" files that are just deleted poison the directory.
20
+
21
+ [written] Pack needs (something) to handle deleted files in the source directory - so
22
+ file-style + archive index - we need to recreate an archive if a file has been
23
+ deleted
24
+
25
+ The ephemeral mounts task mounts and remounts (... and remounts) directories in
26
+ the /mnt directory. Should be able to re-run chef without duplicating mounts
27
+
28
+ --- Features
29
+
30
+ Quick target management tasks:
31
+ Collect server IPs into file(s)
32
+ template shell scripts in related files/dirs
33
+ rake target_management:restart_sidekiq <- auto from script name
34
+
35
+ Also: Some tasks might amount to "run same task name on target"
36
+ (Most should migrate there.) So: see if it's there, and run it if it is.
37
+ (Instead of local?) Hm. Would be exposed as form on the LC web service
38
+
39
+ VBox provisioning test mode - normally vbox should be === normal deploy. Also
40
+ good would be a mode where cookbooks dirs from host machine are mounted at
41
+ client so that they can be edited locally vagrant style
42
+ Once you start down that path, might as well look into mounting code
43
+ directory as well...
44
+
45
+ Like to do smaller provisioning chunks. SB has 100+MB files in their cookbooks,
46
+ and transmitting the whole thing is torturous.
47
+ One solution would be multiple cookbook-things that get fused somehow A tool
48
+ to produce those things (basically an install pack) would be helpful.
49
+ I think git could be used to produce them without having to be the distribution
50
+ channel - basically diff the last one etc.
51
+
52
+ Separate provision volumes makes sense from the perspective of bridging
53
+ projects (i.e. the LRD base volume, the LRD NLP volume, the SB special
54
+ volume) and then patches for each.
55
+
56
+ Distinct packages (filelists intersections are empty sets)
57
+ Ensure a "rakelib" dir exists.
58
+ Target: `rake provision` pulls in package rake tasks - standard hooks
59
+ Means: a "chef" package to make sure gems are installed, and set up chef hooks
60
+ Then "cookbook" packages hook into the chef stuff to configure chef in memory before the chef tasks write configs and run
61
+
62
+
63
+ Non-file platform provisioning requirements of the server-
64
+ notably volumes: perhaps "I need X GB with on (device/label)"
65
+ The userdata solution ... change the instance device mapping config
66
+ At which point, a chef recipe could mount them on the right place
67
+ maybe extra NICs? GPU?
68
+ "this OS installed. portage version=..."
69
+ listed on the provisioning web service, and PUT means "check again"
70
+
71
+ Arrange deployment vs. application code... related at all?
72
+ related to:
73
+ "Compile" (rails) app into deployable - assets:precompile on deployment servers is silly.
74
+
75
+ AWS resolutions:
76
+ from user_data (or other instance metadata)
77
+ from S3?
78
+
79
+ Resolution chains - "look at instance metadata, then S3, then start Sinatra"
80
+ Needs to also be "loops" - "Sinatra got a resolution, but that changed the needs list - recheck"
81
+
82
+ Resolution manifests - all Satisfiables "needed" unless they match the manifest (if the manifest task is present...)
83
+
84
+ "Promote" VBox instances to AWS (generally: convert instances between platforms)
85
+ (Therefore likewise: translate AWS to VBox)
86
+
87
+ Something to handle private keys - an -i option to the SSH commands, basically,
88
+ but it needs to be per-project, and not in the Rakefile. There's the
89
+ user-configuration, which'll make sense for a lot of things
90
+ (Time being: Judson is using Host *.compute-1.amazonaws.com in .ssh/config)
91
+
92
+ Switchable identities - there's some baking needs to happen for LRD, and then some for SB
93
+
94
+ GC provision WebConfigure: output re: uploads
95
+
96
+ Integrate with ... something for instance management
97
+ Should completely replace current workflow of: start Instance, record IP, later:
98
+ for s in $(cat <some ip files>); do <management>; done
99
+
100
+ Update LC on provisioned box (aot go back to nascent and re-setup)
101
+
102
+ Cascading rakelib dirs - especially for the case of adding commands that loop on/pick a server.
103
+
104
+ git management for plan dirs: commit to a local branch-name (e.g.
105
+ "jdl-deployed") with a tag of the Manifest ID, push to repo, so that others
106
+ able to reproduce the details of a deploy. Obviously would need a "don't git
107
+ publish" for "secret plans" e.g. github secret keys etc.
108
+
109
+ --- Nice to have (usually easy)
110
+
111
+ [written] Decompose into 2 tasklibs the ChefConfig tasklib - something like UnpackTarballs and ConfigureChef
112
+
113
+ Bug: why do we emit several "tar" commands for the cookbook directory?
114
+
115
+ Descriptions: need for setup, provision tasks - not sub tasks of setup
116
+
117
+ [written] Move /var/logical-construct to /var/run/lc or /opt/bin/lc or ...
118
+
119
+ provision namespace needs a "list roles" task
120
+
121
+ LC should echo local IP (at least) on failure
122
+
123
+ LC init task should start a "status/report" server on complete - maybe just single page of "success/fail" and chef log
124
+
125
+ --- Gentoo related
126
+
127
+ After initial deploy, /usr/src/linux not needed
128
+
129
+ sqlite version of md5cache
130
+
131
+ /usr/portage should be an external mount (not just distfiles/packages) because the md5cache is huge.
132
+
133
+ Consider S3 as a PORTAGE_BINHOST - should be possible to do installs on a machine, then mirror /usr/portage/packages to S3, especially if the metadata in S3 is such that we don't re-upload packages we pulled down to do the build.
134
+
135
+ Binhost needs to be related to arch, CHOST, CFLAGS, processor USE flags (MXX, SSE, ???)
136
+
137
+ How to deal with portage? Open questions:
138
+ eix-sync
139
+ & syncing /usr/portage
140
+ & updating portage
141
+ I think the real answer here is that "version of portage" is a non-file provisioning requirement. U2D system is really a not a touchless problem, IMO. Does imply a smaller/staged deployment, if only to get mounts.
142
+ Maybe: "how long since last sync? and if more than (days) sync, update portage"
143
+ man emerge: "emerge-webrsync pulls one tbz which is faster for first-time"
144
+ How long to last: emerge --info includes "Timestamp of tree"
145
+
146
+ --- Bluesky wishlist
147
+
148
+ Hypermedia client in Ruby for provisioning
@@ -0,0 +1,96 @@
1
+ VERY IMPORTANT:
2
+ Version of the ec2-ami-tools MUST BE UP TO DATE.
3
+ Otherwise bundling will be buggy and waste lots of time.
4
+
5
+
6
+ Determine size of Vbox instance
7
+ exclude some dirs?
8
+ df/du
9
+ Create disk image of appropriate size (+wiggle room - 10-20%)
10
+ `dd if=/dev/zero of=aws-nascent.img bs=1M count=5000`
11
+ Format image
12
+ gotcha: tunefs to never fsck
13
+ gotcha: keep sparse
14
+ `/sbin/mke2fs -j aws-nascent.img`
15
+ `/sbin/tune2fs -c 0 -e continue -i 0 aws-nascent.img`
16
+ Mount image
17
+ sudo mkdir /mnt/nascent_vm
18
+ sudo mount aws-nascent.img /mnt/nascent_vm/
19
+ Copy data from vm
20
+ cd /mnt/nascent_vm
21
+ (ensure /boot is mounted on vbox)
22
+ ssh root@lrd-aws-nascent 'find / -regextype posix-egrep -depth \! -regex "/(proc|sys|dev).*" -print0 | cpio -o -0a' | sudo cpio -i -dumv --no-absolute-filenames
23
+
24
+ FYI
25
+ ec2-bundle-vol excludes:
26
+ /proc
27
+ /proc/xen
28
+ /sys
29
+ /sys/kernel/debug
30
+ /sys/fs/cgroup/cpuset
31
+ /sys/fs/cgroup/cpu
32
+ /sys/fs/cgroup/cpuacct
33
+ /sys/fs/cgroup/freezer
34
+ /dev/pts
35
+ /proc/sys/fs/binfmt_misc
36
+ /dev
37
+ /media
38
+ /mnt
39
+ /proc
40
+ /sys
41
+ /mnt/ami/lc-setup
42
+ /mnt/img-mnt
43
+
44
+
45
+ Additions to EC2 pre-bundle
46
+ Update /etc/ssh/sshd_config - RootLogin without-password
47
+ Add lrd_rsa.pub to root authorized_keys
48
+ Add ec2-init script to /etc/init.d
49
+ add ec2-init to boot runlevel with softlinks
50
+ check /etc/fstab
51
+ Change fstab and /boot/grub/menu.lst to refer to /dev/xvda
52
+ ensure /proc /sys /dev exist
53
+ ---
54
+
55
+ Unmount bundle image
56
+ umount /mnt/nascent_vm
57
+
58
+ Bundle for EC2
59
+ #This does happen at volume bundle time
60
+ block mapping: /dev/sda2=swap /dev/sda3=ephemeral0 #if fails, /etc/fstab
61
+ Minimal options on bundle
62
+ Must include arch - don't include kernel
63
+
64
+ Upload to EC2
65
+ Remember --retry
66
+ Register AMI
67
+ Register with instance options (kernel, etc)
68
+
69
+ *********
70
+
71
+ Set up AWS credentials:
72
+
73
+ openssl genrsa 1024 > aws-creds/pk.pem
74
+ openssl req -new -x509 -nodes -sha1 -days 3650 -key aws-creds/pk.pem -outform PEM > aws-creds/cert.pem
75
+
76
+ vim aws-creds/AwsCredentialFile
77
+ """
78
+ AWSAccessKeyId=<Write your AWS access key ID>
79
+ AWSSecretKey=<Write your AWS secret key>
80
+ """
81
+ vim aws-creds/establish-certs
82
+ """
83
+ export AWS_CREDENTIAL_FILE=aws-creds/AwsCredentialFile
84
+ export EC2_CERT=aws-certs/cert.pem
85
+ export EC2_PRIVATE_KEY=aws-certs/pk.pem
86
+ """
87
+
88
+ source aws-creds/establish-certs
89
+ iam-useraddcert -f aws-creds/cert.pem
90
+
91
+
92
+ **** related to baking EC2 images:
93
+ default ec2-bundle-vol excludes all .pem files by default. Including files required to re-bundle. Explicit include required.
94
+ includes required on:
95
+ /opt/ec2-ami-tools/etc/ec2/amitools/cert-ec2.pem
96
+ /etc/ssl/