Merge lp:~annegentle/openstackbook/pomupdates into lp:openstackbook

Proposed by Anne Gentle
Status: Approved
Approved by: Kiran Murari
Approved revision: 21
Proposed branch: lp:~annegentle/openstackbook/pomupdates
Merge into: lp:openstackbook
Diff against target: 19537 lines (+1947/-16597)
63 files modified
Commands.xml (+139/-261)
Dashboard.xml (+295/-0)
Image.xml (+136/-210)
Installation.xml (+893/-586)
Instance.xml (+96/-69)
Introduction.xml (+137/-67)
Network.xml (+17/-13)
Openstackbook.xml (+22/-19)
README (+6/-6)
Security.xml (+23/-19)
Storage.xml (+84/-76)
pom.xml (+99/-73)
target/docbkx/fonts/CartoGothic-Std/FontSite License.txt (+0/-21)
target/docbkx/fonts/fontconfig.st (+0/-35)
target/docbkx/images/callouts/1.svg (+0/-15)
target/docbkx/images/callouts/10.svg (+0/-18)
target/docbkx/images/callouts/11.svg (+0/-16)
target/docbkx/images/callouts/12.svg (+0/-18)
target/docbkx/images/callouts/13.svg (+0/-20)
target/docbkx/images/callouts/14.svg (+0/-17)
target/docbkx/images/callouts/15.svg (+0/-19)
target/docbkx/images/callouts/16.svg (+0/-20)
target/docbkx/images/callouts/17.svg (+0/-17)
target/docbkx/images/callouts/18.svg (+0/-21)
target/docbkx/images/callouts/19.svg (+0/-20)
target/docbkx/images/callouts/2.svg (+0/-17)
target/docbkx/images/callouts/20.svg (+0/-20)
target/docbkx/images/callouts/21.svg (+0/-18)
target/docbkx/images/callouts/22.svg (+0/-20)
target/docbkx/images/callouts/23.svg (+0/-22)
target/docbkx/images/callouts/24.svg (+0/-19)
target/docbkx/images/callouts/25.svg (+0/-21)
target/docbkx/images/callouts/26.svg (+0/-22)
target/docbkx/images/callouts/27.svg (+0/-19)
target/docbkx/images/callouts/28.svg (+0/-23)
target/docbkx/images/callouts/29.svg (+0/-22)
target/docbkx/images/callouts/3.svg (+0/-19)
target/docbkx/images/callouts/30.svg (+0/-22)
target/docbkx/images/callouts/4.svg (+0/-16)
target/docbkx/images/callouts/5.svg (+0/-18)
target/docbkx/images/callouts/6.svg (+0/-19)
target/docbkx/images/callouts/7.svg (+0/-16)
target/docbkx/images/callouts/8.svg (+0/-20)
target/docbkx/images/callouts/9.svg (+0/-19)
target/docbkx/images/caution.svg (+0/-79)
target/docbkx/images/cc/by-nc-nd.svg (+0/-243)
target/docbkx/images/cc/by-nc-sa.svg (+0/-202)
target/docbkx/images/cc/by-nc.svg (+0/-190)
target/docbkx/images/cc/by-nd.svg (+0/-203)
target/docbkx/images/cc/by-sa.svg (+0/-199)
target/docbkx/images/cc/by.svg (+0/-155)
target/docbkx/images/cloud/cover.svg (+0/-1650)
target/docbkx/images/cloud/openstack-cover.st (+0/-5262)
target/docbkx/images/cloud/rackspace-cover.st (+0/-5147)
target/docbkx/images/home.svg (+0/-26)
target/docbkx/images/important.svg (+0/-79)
target/docbkx/images/next.svg (+0/-19)
target/docbkx/images/note.svg (+0/-108)
target/docbkx/images/prev.svg (+0/-19)
target/docbkx/images/tip.svg (+0/-115)
target/docbkx/images/up.svg (+0/-19)
target/docbkx/images/warning.svg (+0/-75)
target/docbkx/pdf/Openstackbook.fo (+0/-779)
To merge this branch: bzr merge lp:~annegentle/openstackbook/pomupdates
Reviewer Review Type Date Requested Status
Kiran Murari (community) Approve
Review via email: mp+105273@code.launchpad.net

Description of the change

Minor updates for tool chain needs and automation:
- Updated pom file to the latest doc tool snapshot, removing epub output goal for now.
- Validated all XML files.

To post a comment you must log in.
Revision history for this message
Kiran Murari (kiranm) :
review: Approve

Unmerged revisions

21. By Anne Gentle

Updates to pom and validation on all files; build test

20. By Anne Gentle

Updates to pom and validation on all files to test build

19. By Kiran Murari

Committing diagram changes for essex

18. By Kiran Murari

Commiting essex changes

17. By Kiran Murari

Changed version information

16. By Kiran Murari

Modified description on scheduler functionality

15. By Kiran Murari

Merge Lorin's glance changes

14. By Kiran Murari

Merge Annes's epub changes, fix typos

13. By Kiran Murari

Changed build date

12. By Kiran Murari

Minor edits to Introduction chapter

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Commands.xml'
2--- Commands.xml 2011-10-19 14:27:25 +0000
3+++ Commands.xml 2012-05-09 21:52:21 +0000
4@@ -1,265 +1,143 @@
5 <?xml version="1.0" encoding="UTF-8"?>
6 <chapter xmlns:db="http://docbook.org/ns/docbook" xmlns="http://docbook.org/ns/docbook" xml:id="OpenStack_Commands-d1e2584" version="5.0" xml:base="Commands.xml">
7 <title>OpenStack Commands</title>
8-<section xml:id="Nova_Manage_Commands-d1e2589">
9-<title>Nova Manage Commands</title>
10-<para>OpenStack provides commands for administrative tasks such as user/role management, network management etc. In all the examples we will use username as "novadmin" and project name as "proj". All the nova-manage commands will need to be run as "root". Either run them as root or run them under sudo.</para>
11-<section xml:id="User_Role_Management-d1e2597">
12-<title>User/Role Management</title>
13-<para>Add a new user</para>
14-<programlisting>
15-nova-manage user create --name=novaadmin
16-</programlisting>
17-<para>Add a user along with access and secret keys.</para>
18-<programlisting>
19-nova-manage user create --name=novaadmin --access=myaccess --secret=mysecret
20-</programlisting>
21-<para>Add a user with admin privileges</para>
22-<programlisting>
23-nova-manage user admin --name=novaadmin --access=myaccess --secret=mysecret
24-</programlisting>
25-
26-<para>List existing users</para>
27-<programlisting>
28-nova-manage user list
29-</programlisting>
30-
31-<para>Delete an existing user</para>
32-<programlisting>
33-nova-manage user delete --name=novaadmin
34-</programlisting>
35-
36-<para>Associate a user to a specific existing project</para>
37-<programlisting>
38-nova-manage project add --project=proj --user=novaadmin
39-</programlisting>
40-
41-<para>Remove a user from a specific existing project.</para>
42-<programlisting>
43-nova-manage project remove --project=proj --user=novaadmin
44-</programlisting>
45-
46-<para>View access key and secret keys of particular user.</para>
47-<programlisting>
48-nova-manage user exports --name=novaadmin
49-</programlisting>
50-
51-<para>Adding a user sitewide role.</para>
52-<programlisting>
53-nova-manage role add --user=novaadmin --role=netadmin
54-</programlisting>
55-
56-<para>Remove a sitewide role from a particular user</para>
57-<programlisting>
58-nova-manage role remove --user=novaadmin --role=netadmin
59-</programlisting>
60-<para>Adding a user project specific role.</para>
61-<programlisting>
62-nova-manage role add --user=novaadmin --role=netadmin --project=proj
63-</programlisting>
64-
65-<para>Remove a project specific role from a particular user</para>
66-<programlisting>
67-nova-manage role remove --user=novaadmin --role=netadmin --project=proj
68-</programlisting>
69-
70-<para>With the command below, you can change any or all of access key, secret key and admin role flag for a particular user.</para>
71-<programlisting>
72-Syntax:
73-nova-manage user modify username new_access_key new_secret_key admin_flag &lt;admin flag - T or F&gt;
74-
75-nova-manage user modify --name=novaadmin --access=mygreatnewaccesskey "" ""
76-
77-nova-manage user modify --name=novaadmin "" --secret=mygreatsecretkey "" ""
78-
79-nova-manage user modify --name=novaadmin "" "" --is_admin=T
80-</programlisting>
81-
82-<para>Check if a particular user has a specific role or not. The role can be either local or global. The output of the command will be True or False</para>
83-<programlisting>
84-nova-manage role has --user=novaadmin --role=cloudadmin
85-True
86-
87-nova-manage role has --role=novaadmin --role=netadmin --project=proj
88-False
89-</programlisting>
90-</section>
91-
92-<section xml:id="Project_Management-d1e2672">
93-<title>Project Management</title>
94-
95-<para>The following commands help you create and manage projects. "nova-manage account" command is an alias to "nova-manage project" and you can use them interchangeably.</para>
96-
97-<para>Create a project. It requires you to mention name of the project admin as well. css1 is the name of the project and user5 is the name of the project admin here.</para>
98-<programlisting>nova-manage project create --project=css1 --user=user5 --desc="My new project"</programlisting>
99-
100-<para>List the registered projects.</para>
101-<programlisting>
102-nova-manage project list
103-</programlisting>
104-
105-<para>Download the credentials and associated file for a specific project. Please refer to the chapter on "Installation &amp; Configuration" for more details.</para>
106-<programlisting>
107-nova-manage project zipfile --project=csscorp --user=user5 --file=/home/user5/mysec.zip
108-</programlisting>
109-
110-<para>Delete an existing project.</para>
111-<programlisting>
112-nova-manage project delete --project=css1
113-</programlisting>
114-
115-<para>Check the project wise resource allocation. The output will look like this:</para>
116-<programlisting>
117-nova-manage project quota --project=css1
118- metadata_items: 128
119- gigabytes: 1000
120- floating_ips: 10
121- instances: 10
122- volumes: 10
123- cores: 20
124-</programlisting>
125-</section>
126-
127-<section xml:id="Database_Management-d1e2713"><title>Database Management</title>
128-
129-<para>Nova stores the data related to the projects, users, resources etc. in a database, by default in a MySQL database.</para>
130-
131-<para>Print the current database version.</para>
132-<programlisting>
133-nova-manage db version
134-</programlisting>
135-
136-<para>Sync the DB schema to be in sync with the current configuration.</para>
137-<programlisting>
138-nova-manage db sync
139-</programlisting>
140-</section>
141-
142-<section xml:id="Instance_Type_Management-d1e2734"><title>Instance Type Management</title>
143-<para>Nova has the concept of instance types. Each instance type is defined with certain amount of RAM and certain size of the hard disk. When an instance is launched with a particular instance type, Nova resizes the disk image to suit the instance type and allocates the RAM as defined for the instance type chosen. Nova calls instance types as 'flavors' and lets you add to the list of flavors. By default Nova has 5 types - m1.tiny, m1.small, m1.medium, m1.large and m1.xlarge.</para>
144-
145-<para>List the current instance types</para>
146-<programlisting>
147-nova-manage flavor list
148- m1.medium: Memory: 4096MB, VCPUS: 2, Storage: 40GB, FlavorID: 3, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB
149- m1.large: Memory: 8192MB, VCPUS: 4, Storage: 80GB, FlavorID: 4, Swap: 0GB,
150-RXTX Quota: 0GB, RXTX Cap: 0MB
151- m1.tiny: Memory: 512MB, VCPUS: 1, Storage: 0GB, FlavorID: 1, Swap: 0GB,
152-RXTX Quota: 0GB, RXTX Cap: 0MB
153- m1.xlarge: Memory: 16384MB, VCPUS: 8, Storage: 160GB, FlavorID: 5, Swap: 0GB, RXTX Quota: 0GB, RXTX Cap: 0MB
154- m1.small: Memory: 2048MB, VCPUS: 1, Storage: 20GB, FlavorID: 2, Swap: 0GB,
155-RXTX Quota: 0GB, RXTX Cap: 0MB
156-</programlisting>
157-
158-<para>Define a new instance type</para>
159-<programlisting>
160-nova-manage flavor create --name=m1.miniscule --memory=128 --cpu=1 --local_gb=20 --flavor=6 --swap=0 --rxtx_quota=0 --rxtx_cap=0
161-</programlisting>
162-
163-<para>Remove an existing instance type.</para>
164-<programlisting>
165-nova-manage flavor delete --name=m1.miniscule
166-m1.miniscule deleted
167-</programlisting>
168-</section>
169-
170-<section xml:id="Service_Management-d1e2761"><title>Service Management</title>
171-
172-<para>Check state of available services.</para>
173-<programlisting>
174-nova-manage service list
175- server1 nova-scheduler enabled :- ) 2011-04-06 17:01:21
176- server1 nova-network enabled :- ) 2011-04-06 17:01:30
177- server1 nova-compute enabled :- ) 2011-04-06 17:01:22
178- server2 nova-compute enabled :- ) 2011-04-06 17:01:28
179-</programlisting>
180-
181-<para>Disable a running service</para>
182-<programlisting>
183-nova-manage service disable &lt;hostname&gt; &lt;service&gt;
184-nova-manage service disable --host=server2 --service=nova-compute
185-
186-nova-manage service list
187- server1 nova-network enabled :- ) 2011-04-06 17:05:11
188- server1 nova-compute enabled :- ) 2011-04-06 17:05:13
189- server1 nova-scheduler enabled :- ) 2011-04-06 17:05:17
190- server2 nova-compute disabled :- ) 2011-04-06 17:05:19
191-</programlisting>
192-
193-<para>Re-enable a service that is currently disabled</para>
194-<programlisting>
195-Syntax: nova-manage service enable &lt;hostname&gt; &lt;service&gt;
196-nova-manage service enable --host=server2 --service=nova-compute
197-
198-nova-manage service list
199- server1 nova-scheduler enabled :- ) 2011-04-06 17:08:23
200- server1 nova-network enabled :- ) 2011-04-06 17:08:22
201- server1 nova-compute enabled :- ) 2011-04-06 17:08:23
202- server2 nova-compute enabled :- ) 2011-04-06 17:08:19
203-</programlisting>
204-
205-<para>Get Information about resource utilization of the OpenStack components</para>
206-<programlisting>
207-Syntax: nova-manage service describe_resource &lt;hostname&gt;
208-
209-nova-manage service describe_resource --host=server1
210-HOST PROJECT cpu mem(mb) disk(gb)
211-server1(total) 2 3961 224
212-server1(used) 1 654 30
213-server1 proj 2 1024 0
214-</programlisting>
215-</section>
216-
217-<section xml:id="Euca2ools_Commands-d1e2791"><title>Euca2ools Commands</title>
218-
219-<para>euca2ools provide a set of commands to communicate with the cloud. All these commands require you to authenticate and this is done by sourcing novarc file as detailed in the chapter on "Installation &amp; Configuration"</para>
220-
221-<para>Most of the euca2ools command line utilities work with OpenStack, just as they work with EC2 of AWS. There may be some differences due to some of the functionality that is yet to be implemented in OpenStack. Help is available for each of these commands with the switch --help.</para>
222-
223-<itemizedlist>
224- <listitem><para>euca-add-group</para></listitem>
225- <listitem><para>euca-delete-bundle</para></listitem>
226- <listitem><para>euca-describe-instances</para></listitem>
227- <listitem><para>euca-register</para></listitem>
228- <listitem><para>euca-add-keypair</para></listitem>
229- <listitem><para>euca-delete-group</para></listitem>
230- <listitem><para>euca-describe-keypairs</para></listitem>
231- <listitem><para>euca-release-address</para></listitem>
232- <listitem><para>euca-allocate-address</para></listitem>
233- <listitem><para>euca-delete-keypair</para></listitem>
234- <listitem><para>euca-describe-regions</para></listitem>
235- <listitem><para>euca-reset-image-attribute</para></listitem>
236- <listitem><para>euca-associate-address</para></listitem>
237- <listitem><para>euca-delete-snapshot</para></listitem>
238- <listitem><para>euca-describe-snapshots</para></listitem>
239- <listitem><para>euca-revoke</para></listitem>
240- <listitem><para>euca-attach-volume</para></listitem>
241- <listitem><para>euca-delete-volume</para></listitem>
242- <listitem><para>euca-describe-volumes</para></listitem>
243- <listitem><para>euca-run-instances</para></listitem>
244- <listitem><para>euca-authorize</para></listitem>
245- <listitem><para>euca-deregister</para></listitem>
246- <listitem><para>euca-detach-volume</para></listitem>
247- <listitem><para>euca-terminate-instances</para></listitem>
248- <listitem><para>euca-bundle-image</para></listitem>
249- <listitem><para>euca-describe-addresses</para></listitem>
250- <listitem><para>euca-disassociate-address</para></listitem>
251- <listitem><para>euca-unbundle</para></listitem>
252- <listitem><para>euca-bundle-vol</para></listitem>
253- <listitem><para>euca-describe-availabity-zones</para></listitem>
254- <listitem><para>euca-download-bundle</para></listitem>
255- <listitem><para>euca-upload-bundle</para></listitem>
256- <listitem><para>euca-confirm-product-instance</para></listitem>
257- <listitem><para>euca-describe-groups</para></listitem>
258- <listitem><para>euca-get-console-output</para></listitem>
259- <listitem><para>euca-version</para></listitem>
260- <listitem><para>euca-create-snapshot</para></listitem>
261- <listitem><para>euca-describe-image-attribute</para></listitem>
262- <listitem><para>euca-modify-image-attribute</para></listitem>
263- <listitem><para>euca-create-volume</para></listitem>
264- <listitem><para>euca-describe-images</para></listitem>
265- <listitem><para>euca-reboot-instances</para></listitem>
266-</itemizedlist>
267-</section>
268-</section>
269+
270+<section xml:id="Nova_Commands-d1e2589">
271+<title>Nova Commands</title>
272+<para>nova is the command line interface for OpenStack Compute API.</para>
273+<programlisting>
274+Usage: nova command [options] [args]
275+
276+Commands:
277+ help Display help about this program or one of its subcommands.
278+ actions Retrieve server actions.
279+ backup-schedule Show or edit the backup schedule for a server.
280+ backup-schedule-delete Delete the backup schedule for a server.
281+ boot Boot a new server.
282+ delete Immediately shut down and delete a server.
283+ diagnostics Retrieve server diagnostics.
284+ flavor-list Print a list of available 'flavors' (sizes of servers).
285+ image-create Create a new image by taking a snapshot of a running server.
286+ image-delete Delete an image.
287+ image-list Print a list of available images to boot from.
288+ ip-share Share an IP address from the given IP group onto a server.
289+ ip-unshare Stop sharing an given address with a server.
290+ ipgroup-create Create a new IP group.
291+ ipgroup-delete Delete an IP group.
292+ ipgroup-list Show IP groups.
293+ ipgroup-show Show details about a particular IP group.
294+ list List active servers.
295+ pause Pause a server.
296+ reboot Reboot a server.
297+ rebuild Shutdown, re-image, and re-boot a server.
298+ rename Rename a server.
299+ rescue Rescue a server.
300+ resize Resize a server.
301+ resize-confirm Confirm a previous resize.
302+ resize-revert Revert a previous resize (and return to the previous VM).
303+ resume Resume a server.
304+ root-password Change the root password for a server.
305+ show Show details about the given server.
306+ suspend Suspend a server.
307+ unpause Unpause a server.
308+ unrescue Unrescue a server.
309+ zone Show or edit a child zone.
310+ zone-add Add a new child zone.
311+ zone-delete Delete a zone.
312+ zone-info Get this zones name and capabilities.
313+ zone-list List the children of a zone.
314+</programlisting>
315+</section>
316+
317+<section xml:id="Glance_Commands-d1e2672">
318+<title>Glance Commands</title>
319+<para>Glance is the command line interface for the OpenStack Imaging service.</para>
320+<programlisting>
321+Usage: glance command [options] [args]
322+
323+Commands:
324+ help command Output help for one of the commands below
325+ add Adds a new image to Glance
326+ update Updates an image's metadata in Glance
327+ delete Deletes an image from Glance
328+ index Return brief information about images in Glance
329+ details Return detailed information about images in
330+ Glance
331+ show Show detailed information about an image in
332+ Glance
333+ clear Removes all images and metadata from Glance
334+
335+Member Commands:
336+ image-members List members an image is shared with
337+ member-images List images shared with a member
338+ member-add Grants a member access to an image
339+ member-delete Revokes a member's access to an image
340+ members-replace Replaces all membership for an image
341+</programlisting>
342+</section>
343+
344+<section xml:id="Swift_Commands-d1e2713">
345+<title>Swift Commands</title>
346+<para>Swift is the command line interface for OpenStack Object Store service.</para>
347+<programlisting>
348+Usage: swift command [options] [args]
349+
350+Commands:
351+ stat Displays information for the account, container, or object depending
352+ on the args given (if any).
353+ list Lists the containers for the account or the objects for a container.
354+ upload Uploads to the given container the files and directories specified by
355+ the remaining args.
356+ post Updates meta information for the account, container, or object
357+ depending on the args given.
358+ download Downloads everything in the account (with --all), or everything in
359+ a container, or a list of objects depending on the args given.
360+ delete Deletes everything in the account (with --all), or everything in
361+ a container, or a list of objects depending on the args given.
362+</programlisting>
363+</section>
364+
365+<section xml:id="Keystone_Commands-d1e2734">
366+<title>Keystone Commands</title>
367+<para>Keystone is the command line interface to the OpenStack Identity service.</para>
368+<programlisting>
369+Usage: keystone command [options] [args]
370+
371+Commands:
372+ catalog List service catalog, possibly filtered by service.
373+ ec2-credentials-create Create EC2-compatibile credentials for user per tenant
374+ ec2-credentials-delete Delete EC2-compatibile credentials
375+ ec2-credentials-get Display EC2-compatibile credentials
376+ ec2-credentials-list List EC2-compatibile credentials for a user
377+ endpoint-create Create a new endpoint associated with a service
378+ endpoint-delete Delete a service endpoint
379+ endpoint-get Find endpoint filtered by a specific attribute or service type
380+ endpoint-list List configured service endpoints
381+ role-create Create new role
382+ role-delete Delete role
383+ role-get Display role details
384+ role-list List all roles, or only those granted to a user.
385+ service-create Add service to Service Catalog
386+ service-delete Delete service from Service Catalog
387+ service-get Display service from Service Catalog
388+ service-list List all services in Service Catalog
389+ tenant-create Create new tenant
390+ tenant-delete Delete tenant
391+ tenant-get Display tenant details
392+ tenant-list List all tenants
393+ tenant-update Update tenant name, description, enabled status
394+ token-get Display the current user token
395+ user-create Create new user
396+ user-delete Delete user
397+ user-get Display user details.
398+ user-list List users
399+ user-password-update Update user password
400+ user-role-add Add role to user
401+ user-role-remove Remove role from user
402+ user-update Update user's name, email, and enabled status
403+ discover Discover Keystone servers and show authentication protocols and
404+ help Display help about this program or one of its subcommands.
405+</programlisting>
406+</section>
407+
408 </chapter>
409\ No newline at end of file
410
411=== added file 'Dashboard.xml'
412--- Dashboard.xml 1970-01-01 00:00:00 +0000
413+++ Dashboard.xml 2012-05-09 21:52:21 +0000
414@@ -0,0 +1,295 @@
415+<?xml version="1.0" encoding="UTF-8"?><chapter xmlns:db="http://docbook.org/ns/docbook" xmlns="http://docbook.org/ns/docbook" xml:id="Storage_Management-d1e1995" version="5.0" xml:base="Dashboard.xml">
416+<title>OpenStack Dashboard (Horizon)</title>
417+<para>Using the OpenStack Dashboard, one can manage various OpenStack services. It may be used to manage instances and images, create keypairs, attach volumes to instances, manipulate Swift containers etc. The OpenStack Dashboard is accessible via http://&lt;ip_address&gt;</para>
418+
419+<section xml:id="Login-d1e5000">
420+<title>Login</title>
421+<para>Login to the dashboard with username "admin" and password "admin".</para>
422+<para>
423+<mediaobject>
424+ <imageobject role="fo">
425+ <imagedata fileref="images/dashboard/login.png"
426+ format="PNG" scale="50"/>
427+ </imageobject>
428+ <imageobject role="html">
429+ <imagedata fileref="images/dashboard/login.png"
430+ format="PNG" />
431+ </imageobject>
432+</mediaobject>
433+</para>
434+</section>
435+
436+<section xml:id="User_Overview-d1e5002">
437+<title>User Overview</title>
438+<para>After logging, depending on the access privileges, the user is allowed access to specific projects. The below is an overview page for a project belonging to the 'admin' user. One can view and download some basic usage metric reports here.</para>
439+<para>
440+<mediaobject>
441+ <imageobject role="fo">
442+ <imagedata fileref="images/dashboard/overview.png"
443+ format="PNG" scale="50"/>
444+ </imageobject>
445+ <imageobject role="html">
446+ <imagedata fileref="images/dashboard/overview.png"
447+ format="PNG" />
448+ </imageobject>
449+</mediaobject>
450+</para>
451+<section xml:id="Instances-d1e5003">
452+<title>Instances</title>
453+<para>The page lists currently running instances belonging to the user 'admin'. From this page, one can terminate, pause, reboot any running instances, connect to vnc console of the instance etc.</para>
454+<para>
455+<mediaobject>
456+ <imageobject role="fo">
457+ <imagedata fileref="images/dashboard/instances.png"
458+ format="PNG" scale="50"/>
459+ </imageobject>
460+ <imageobject role="html">
461+ <imagedata fileref="images/dashboard/instances.png"
462+ format="PNG" />
463+ </imageobject>
464+</mediaobject>
465+</para>
466+</section>
467+<section xml:id="Services-d1e5004">
468+<title>Services</title>
469+<para>The list of services defiend can be viewed on this page.</para>
470+<para>
471+<mediaobject>
472+ <imageobject role="fo">
473+ <imagedata fileref="images/dashboard/services.png"
474+ format="PNG" scale="50"/>
475+ </imageobject>
476+ <imageobject role="html">
477+ <imagedata fileref="images/dashboard/services.png"
478+ format="PNG" />
479+ </imageobject>
480+</mediaobject>
481+</para>
482+</section>
483+<section xml:id="Flavors-d1e5005">
484+<title>Flavors</title>
485+<para>This page lists the currently available flavors that can be used to launch an instance. One can also create custom flavors on this page.</para>
486+<para>
487+<mediaobject>
488+ <imageobject role="fo">
489+ <imagedata fileref="images/dashboard/flavors.png"
490+ format="PNG" scale="50"/>
491+ </imageobject>
492+ <imageobject role="html">
493+ <imagedata fileref="images/dashboard/flavors.png"
494+ format="PNG" />
495+ </imageobject>
496+</mediaobject>
497+</para>
498+</section>
499+<section xml:id="Images-d1e5006">
500+<title>Images</title>
501+<para>This page lists the available images for the 'admin' user. One can also delete any images, if they are not required.</para>
502+<para>
503+<mediaobject>
504+ <imageobject role="fo">
505+ <imagedata fileref="images/dashboard/images.png"
506+ format="PNG" scale="50"/>
507+ </imageobject>
508+ <imageobject role="html">
509+ <imagedata fileref="images/dashboard/images.png"
510+ format="PNG" />
511+ </imageobject>
512+</mediaobject>
513+</para>
514+</section>
515+<section xml:id="Projects-d1e5007">
516+<title>Projects</title>
517+<para>This page lists the available projects (tenants) that have been created. One can also create new projects, assign users to the projects etc.</para>
518+<para>
519+<mediaobject>
520+ <imageobject role="fo">
521+ <imagedata fileref="images/dashboard/projects.png"
522+ format="PNG" scale="50"/>
523+ </imageobject>
524+ <imageobject role="html">
525+ <imagedata fileref="images/dashboard/projects.png"
526+ format="PNG" />
527+ </imageobject>
528+</mediaobject>
529+</para>
530+</section>
531+<section xml:id="Users-d1e5008">
532+<title>Users</title>
533+<para>This page lists the users that have been created. One can also create new users, disable/delete existing users.</para>
534+<para>
535+<mediaobject>
536+ <imageobject role="fo">
537+ <imagedata fileref="images/dashboard/users.png"
538+ format="PNG" scale="50"/>
539+ </imageobject>
540+ <imageobject role="html">
541+ <imagedata fileref="images/dashboard/users.png"
542+ format="PNG" />
543+ </imageobject>
544+</mediaobject>
545+</para>
546+</section>
547+<section xml:id="Quotas-d1e5008">
548+<title>Users</title>
549+<para>This page lists the quota of resources allocated to a user; number of CPUs, amount of RAM, diskspace, max. number of instances that can be raised etc.</para>
550+<para>
551+<mediaobject>
552+ <imageobject role="fo">
553+ <imagedata fileref="images/dashboard/quotas.png"
554+ format="PNG" scale="50"/>
555+ </imageobject>
556+ <imageobject role="html">
557+ <imagedata fileref="images/dashboard/quotas.png"
558+ format="PNG" />
559+ </imageobject>
560+</mediaobject>
561+</para>
562+</section>
563+</section>
564+
565+<section xml:id="Project_Overview-d1e5009">
566+<title>Project Overview</title>
567+<para>This page shows an overview of the project 'admin'. One can view and download some basic usage metric reports here.</para>
568+<para>
569+<mediaobject>
570+ <imageobject role="fo">
571+ <imagedata fileref="images/dashboard/overview2.png"
572+ format="PNG" scale="50"/>
573+ </imageobject>
574+ <imageobject role="html">
575+ <imagedata fileref="images/dashboard/overview2.png"
576+ format="PNG" />
577+ </imageobject>
578+</mediaobject>
579+</para>
580+<section xml:id="Instances_Volumes-d1e5009">
581+<title>Instances &amp; Volumes</title>
582+<para>This page lists all the instances belonging to various users of the project, instance properties etc. It also list all the volumes that have been created and their status; whether available or attached to any running instances. One can also create new volumes and attach them to the instances on this page.</para>
583+<para>
584+<mediaobject>
585+ <imageobject role="fo">
586+ <imagedata fileref="images/dashboard/instances_volumes.png"
587+ format="PNG" scale="50"/>
588+ </imageobject>
589+ <imageobject role="html">
590+ <imagedata fileref="images/dashboard/instances_volumes.png"
591+ format="PNG" />
592+ </imageobject>
593+</mediaobject>
594+</para>
595+</section>
596+<section xml:id="Instances_VNC-d1e5016">
597+<title>Instances - VNC Console</title>
598+<para>For a running instance, one can connect to the instance console via VNC.</para>
599+<para>
600+<mediaobject>
601+ <imageobject role="fo">
602+ <imagedata fileref="images/dashboard/vnc1.png"
603+ format="PNG" scale="50"/>
604+ </imageobject>
605+ <imageobject role="html">
606+ <imagedata fileref="images/dashboard/vnc1.png"
607+ format="PNG" />
608+ </imageobject>
609+</mediaobject>
610+</para>
611+<para>
612+<mediaobject>
613+ <imageobject role="fo">
614+ <imagedata fileref="images/dashboard/vnc2.png"
615+ format="PNG" scale="50"/>
616+ </imageobject>
617+ <imageobject role="html">
618+ <imagedata fileref="images/dashboard/vnc2.png"
619+ format="PNG" />
620+ </imageobject>
621+</mediaobject>
622+</para>
623+</section>
624+<section xml:id="Images_Snapshots-d1e5009">
625+<title>Images &amp; Snapshots</title>
626+<para>This page lists the custom images that have been uploaded. One can edit the image properties, delete and launch new instances of the images. This page also lists the snapshots taken from instances and volumes.</para>
627+<para>
628+<mediaobject>
629+ <imageobject role="fo">
630+ <imagedata fileref="images/dashboard/images_snapshots.png"
631+ format="PNG" scale="50"/>
632+ </imageobject>
633+ <imageobject role="html">
634+ <imagedata fileref="images/dashboard/images_snapshots.png"
635+ format="PNG" />
636+ </imageobject>
637+</mediaobject>
638+</para>
639+</section>
640+<section xml:id="Access_Security-d1e5010">
641+<title>Access &amp; Security</title>
642+<para>On this page, one can allocate and release floating ip addresses, associate and dissociate them to instances. New security groups can be created and one can modify the rules belonging to each security group.</para>
643+<para>
644+<mediaobject>
645+ <imageobject role="fo">
646+ <imagedata fileref="images/dashboard/access_security.png"
647+ format="PNG" scale="50"/>
648+ </imageobject>
649+ <imageobject role="html">
650+ <imagedata fileref="images/dashboard/access_security.png"
651+ format="PNG" />
652+ </imageobject>
653+</mediaobject>
654+</para>
655+<para>
656+<mediaobject>
657+ <imageobject role="fo">
658+ <imagedata fileref="images/dashboard/edit_security_securitygp.png"
659+ format="PNG" scale="50"/>
660+ </imageobject>
661+ <imageobject role="html">
662+ <imagedata fileref="images/dashboard/edit_security_securitygp.png"
663+ format="PNG" />
664+ </imageobject>
665+</mediaobject>
666+</para>
667+<para>
668+<mediaobject>
669+ <imageobject role="fo">
670+ <imagedata fileref="images/dashboard/create_keypair.png"
671+ format="PNG" scale="50"/>
672+ </imageobject>
673+ <imageobject role="html">
674+ <imagedata fileref="images/dashboard/create_keypair.png"
675+ format="PNG" />
676+ </imageobject>
677+</mediaobject>
678+</para>
679+</section>
680+</section>
681+<section xml:id="Containers_Objects-d1e5011">
682+<title>Containers &amp; Objects</title>
683+<para>On this page, one can create/delete containers, lists objects, upload/download objects and delete objects.</para>
684+<para>
685+<mediaobject>
686+ <imageobject role="fo">
687+ <imagedata fileref="images/dashboard/containers.png"
688+ format="PNG" scale="50"/>
689+ </imageobject>
690+ <imageobject role="html">
691+ <imagedata fileref="images/dashboard/containers.png"
692+ format="PNG" />
693+ </imageobject>
694+</mediaobject>
695+</para>
696+<para>
697+<mediaobject>
698+ <imageobject role="fo">
699+ <imagedata fileref="images/dashboard/objects.png"
700+ format="PNG" scale="50"/>
701+ </imageobject>
702+ <imageobject role="html">
703+ <imagedata fileref="images/dashboard/objects.png"
704+ format="PNG" />
705+ </imageobject>
706+</mediaobject>
707+</para>
708+</section>
709+</chapter>
710
711=== modified file 'Image.xml'
712--- Image.xml 2011-10-19 14:27:25 +0000
713+++ Image.xml 2012-05-09 21:52:21 +0000
714@@ -1,55 +1,48 @@
715-<?xml version="1.0" encoding="UTF-8"?><chapter xmlns:db="http://docbook.org/ns/docbook" xmlns="http://docbook.org/ns/docbook" xml:id="Image_Management-d1e1252" version="5.0" xml:base="Image.xml">
716- <title>Image Management</title>
717+<?xml version="1.0" encoding="UTF-8"?>
718+<chapter xmlns:db="http://docbook.org/ns/docbook"
719+ xmlns="http://docbook.org/ns/docbook"
720+ xmlns:xi="http://www.w3.org/2001/XInclude"
721+ xmlns:xlink="http://www.w3.org/1999/xlink"
722+ xml:id="Image_Management-d1e1252" version="5.0"
723+ xml:base="Image.xml">
724+<title>Image Management</title>
725 <section xml:id="Introduction-d1e1257">
726 <title>Introduction</title>
727-<para> There are several pre-built images for OpenStack available from various sources. You can download such images and use them to get familiar with OpenStack. You can refer to http://docs.openstack.org/cactus/openstack-compute/admin/content/starting-images.html for details on using such images.</para>
728-<para>For any production deployment, you may like to have the ability to bundle custom images, with a custom set of applications or configuration. This chapter will guide you through the process of creating Linux images of Debian and RedHat based distributions from scratch. We have also covered an approach to bundling Windows images.
729- </para>
730- <para>There are some minor differences in the way you would bundle a Linux image, based on the distribution. Ubuntu makes it very easy by providing cloud-init package, which can be used to take care of the instance configuration at the time of launch. cloud-init handles importing ssh keys for password-less login, setting host name etc. The instance acquires the instance specific configuration from Nova-compute by connecting to a meta data interface running on 169.254.169.254.</para>
731- <para>While creating the image of a distro that does not have cloud-init or an equivalent package, you may need to take care of importing the keys etc. by running a set of commands at boot time from rc.local.</para>
732- <para>The process used for Ubuntu and Fedora is largely the same with a few minor differences, which are explained below.</para>
733- <para>In both cases, the documentation below assumes that you have a working KVM installation to use for creating the images. We are using the machine called 'client1' as explained in the chapter on "Installation and Configuration" for this purpose.</para>
734- <para>The approach explained below will give you disk images that represent a disk without any partitions. Nova-compute can resize such disks ( including resizing the file system) based on the instance type chosen at the time of launching the instance. These images cannot have 'bootable' flag and hence it is mandatory to have associated kernel and ramdisk images. These kernel and ramdisk images need to be used by nova-compute at the time of launching the instance.</para>
735- <para>However, we have also added a small section towards the end of the chapter about creating bootable images with multiple partitions that can be used by nova to launch an instance without the need for kernel and ramdisk images. The caveat is that while nova-compute can re-size such disks at the time of launching the instance, the file system size is not altered and hence, for all practical purposes, such disks are not re-sizable.</para></section>
736-<section xml:id="Creating_a_Linux_Image_-_Ubuntu_Fedora-d1e1287">
737-<title>Creating a Linux Image - Ubuntu &amp; Fedora</title>
738-<para>The first step would be to create a raw image on Client1. This will represent the main HDD of the virtual machine, so make sure to give it as much space as you will need.</para>
739-
740+<para> There are several pre-built images for OpenStack available from various sources. You can download such images and use them to get familiar with OpenStack.</para>
741+<para>For any production deployment, you may like to have the ability to bundle custom images, with a custom set of applications or configuration. This chapter will guide you through the process of creating Linux images of popular distributions from scratch. We have also covered an approach to bundling Windows images.</para>
742+<para>There are some minor differences in the way you would bundle a Linux image, based on the distribution. Ubuntu makes it very easy by providing cloud-init package, which can be used to take care of the instance configuration at the time of launch. cloud-init handles importing ssh keys for password-less login, setting host name etc. The instance acquires the instance specific configuration from Nova-compute by connecting to a meta data interface running on 169.254.169.254.</para>
743+<para>While creating the image of a distro that does not have cloud-init or an equivalent package, you may need to take care of importing the keys etc. by running a set of commands at boot time from rc.local.</para>
744+<para>The process used for creating the Linux images of different distributions is largely the same with a few minor differences, which is explained below.</para>
745+<para>In all the cases, the documentation below assumes that you have a working KVM installation to use for creating the images. We are using the machine called 'client1' as explained in the chapter on "Installation and Configuration" for this purpose.</para>
746+<para>The approach explained below will generate disk images that represent a disk without any partitions.</para>
747+</section>
748+<section xml:id="Creating_a_Linux_Image-d1e1287">
749+<title>Creating a Linux Image</title>
750+<para>The first step would be to create an image on Client1. This will represent the main HDD of the virtual machine, so make sure to give it as much space as you will need.</para>
751 <programlisting>
752-kvm-img create -f raw server.img 5G
753+kvm-img create -f qcow2 server.img 5G
754 </programlisting>
755-
756 <section xml:id="OS_Installation-d1e1298">
757 <title>OS Installation</title>
758-
759-<para>Download the iso file of the Linux distribution you want installed in the image. The instructions below are tested on Ubuntu 11.10 Oneiric Ocelot 64-bit server and Fedora 14 64-bit. Most of the instructions refer to Ubuntu. The points of difference between Ubuntu and Fedora are mentioned wherever required.</para>
760-<programlisting>
761-wget http://releases.ubuntu.com/oneiric/ubuntu-11.10-server-amd64.iso
762- </programlisting>
763-
764+ <para>Download the iso file of the Linux distribution you want to install in the image. For Ubuntu, you can download the iso from <link xlink:href="http://releases.ubuntu.com">http://releases.ubuntu.com</link> using 'wget' or with the help of a browser</para>
765 <para>Boot a KVM instance with the OS installer ISO in the virtual CD-ROM. This will start the installation process. The command below also sets up a VNC display at port 0</para>
766 <programlisting>
767-sudo kvm -m 256 -cdrom ubuntu-11.10-server-amd64.iso -drive file=server.img,if=scsi,index=0 -boot d -net nic -net user -nographic  -vnc :0
768+sudo kvm -m 256 -cdrom ubuntu-12.04-server-amd64.iso -drive file=server.img,if=virtio,index=0 -boot d -net nic -net user -nographic  -vnc :0
769 </programlisting>
770-
771 <para>Connect to the VM through VNC (use display number :0) and finish the installation.</para>
772 <para>For Example, where 10.10.10.4 is the IP address of client1:</para>
773-
774 <programlisting>
775 vncviewer 10.10.10.4 :0
776 </programlisting>
777-<para>During the installation of Ubuntu, create a single ext4 partition mounted on '/'. Do not create a swap partition.</para>
778-<para>In the case of Fedora 14, the installation will not progress unless you create a swap partition. Please go ahead and create a swap partition.</para>
779+<para>During creation of Linux images , create a single ext4 partition mounted on a swap partition.</para>
780 <para>After finishing the installation, relaunch the VM by executing the following command.</para>
781-
782 <programlisting>
783-sudo kvm -m 256 -drive file=server.img,if=scsi,index=0,boot=on -boot c -net nic -net user -nographic -vnc :0
784+sudo kvm -m 256 -drive file=server.img,if=virtio,index=0 -boot c -net nic -net user -nographic -vnc :0
785 </programlisting>
786-
787-
788 <para>At this point, you can add all the packages you want to have installed, update the installation, add users and make any configuration changes you want in your image.</para>
789-<para>At the minimum, for Ubuntu you may run the following commands</para>
790
791+<section xml:id="Ubuntu-d1e1386">
792+<title>Ubuntu</title>
793 <programlisting>
794 sudo apt-get update
795 </programlisting>
796@@ -58,8 +51,14 @@
797 </programlisting>
798 <programlisting>
799 sudo apt-get install openssh-server cloud-init
800-</programlisting>
801-<para>For Fedora run the following commands as root</para>
802+</programlisting>
803+<para>Remove the network persistence rules from /etc/udev/rules.d as their presence will result in the network interface in the instance coming up as an interface other than eth0.</para>
804+<programlisting>
805+sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
806+</programlisting>
807+</section>
808+<section xml:id="Fedora-d1e1585">
809+<title>Fedora</title>
810 <programlisting>
811 yum update
812 </programlisting>
813@@ -68,105 +67,21 @@
814 </programlisting>
815 <programlisting>
816 chkconfig sshd on
817-</programlisting>
818-
819-<section xml:id="Tweaking_etc_fstab-d1e1463">
820-<title>Tweaking /etc/fstab</title>
821-<para>You will need to tweak /etc/fstab to make it suitable for a cloud instance. Nova-compute may resize the disk at the time of launching instances based on the instance type chosen. This can make the UUID of the disk invalid. Hence we have to use file system label as the identifier for the partition instead of the UUID. Edit /etc/fstab and change the following line from</para>
822-<programlisting>
823-UUID=e7f5af8d-5d96-45cc-a0fc-d0d1bde8f31c / ext4 errors=remount-ro 0 1
824-</programlisting>
825-<para>to</para>
826-<programlisting>
827-LABEL=uec-rootfs / ext4 defaults 0 0
828-</programlisting>
829-</section>
830-<para>Also remove the network persistence rules from /etc/udev/rules.d as their presence will result in the network interface in the instance coming up as an interface other than eth0.</para>
831-
832+</programlisting>
833+<para>Edit the file /etc/sysconfig/network-scripts/ifcfg-eth0 to look like this</para>
834+<programlisting>
835+DEVICE="eth0"
836+BOOTPROTO=dhcp
837+NM_CONTROLLED="yes"
838+ONBOOT="yes"
839+</programlisting>
840+<para>Remove the network persistence rules from /etc/udev/rules.d as their presence will result in the network interface in the instance coming up as an interface other than eth0.</para>
841 <programlisting>
842 sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules
843 </programlisting>
844-<para>Shutdown the virtual machine and proceed with the next steps.</para>
845-</section>
846-<section xml:id="Extracting_the_EXT4_partition-d1e1377">
847-<title>Extracting the EXT4 partition</title>
848-<para>The image that needs to be uploaded to OpenStack needs to be an ext4 filesystem image. Here are the steps to create a ext4 filesystem image from the raw image i.e server.img</para>
849-<programlisting>
850-sudo losetup -f server.img
851-</programlisting>
852-<programlisting>
853-sudo losetup -a
854-</programlisting>
855-<para>You should see an output like this:</para>
856-
857-<programlisting>
858-/dev/loop0: [0801]:16908388 ($filepath)
859-</programlisting>
860-
861-<para>Observe the name of the loop device ( /dev/loop0 in our setup) when $filepath is the path to the mounted .raw file.</para>
862-
863- <para>Now we need to find out the starting sector of the partition. Run:</para>
864-
865-<programlisting>
866-sudo fdisk -cul /dev/loop0
867-</programlisting>
868-<para>You should see an output like this:</para>
869-<programlisting>
870-Disk /dev/loop0: 5368 MB, 5368709120 bytes
871-</programlisting>
872-
873-<programlisting>
874-149 heads, 8 sectors/track, 8796 cylinders, total 10485760 sectors
875-Units = sectors of 1 * 512 = 512 bytes
876-Sector size (logical/physical): 512 bytes / 512 bytes
877-I/O size (minimum/optimal): 512 bytes / 512 bytes
878-Disk identifier: 0x00072bd4
879-Device Boot Start End Blocks Id System
880-/dev/loop0p1 * 2048 10483711 5240832 83 Linux
881-</programlisting>
882-
883-
884-<para>Make a note of the starting sector of the /dev/loop0p1 partition i.e the partition whose ID is 83. This number should be multiplied by 512 to obtain the correct value. In this case: 2048 x 512 = 1048576</para>
885-<para>Unmount the loop0 device:</para>
886-
887-<programlisting>
888-sudo losetup -d /dev/loop0
889-</programlisting>
890-
891-<para>Now mount only the partition(/dev/loop0p1) of server.img which we had previously noted down, by adding the -o parameter with value previously calculated value</para>
892-
893-<programlisting>
894-sudo losetup -f -o 1048576 server.img
895-</programlisting>
896-
897-<programlisting>
898-sudo losetup -a
899-</programlisting>
900-<para>You'll see a message like this:</para>
901-<programlisting>
902-/dev/loop0: [0801]:16908388 ($filepath) offset 1048576
903-</programlisting>
904-<para>Make a note of the mount point of our device(/dev/loop0 in our setup) when $filepath is the path to the mounted .raw file.</para>
905-
906-<para>Copy the entire partition to a new .raw file</para>
907-<programlisting>
908-sudo dd if=/dev/loop0 of=serverfinal.img
909-</programlisting>
910-
911-<para>Now we have our ext4 filesystem image i.e serverfinal.img</para>
912-
913-<para>Unmount the loop0 device</para>
914-
915-<programlisting>
916-sudo losetup -d /dev/loop0
917-</programlisting>
918-</section>
919-<section xml:id="Fetching_Metadata_in_Fedora-d1e1488">
920-<title>Fetching Metadata in Fedora</title>
921-
922+<para>Shutdown the virtual machine.</para>
923 <para>Since, Fedora does not ship with cloud-init or an equivalent, you will need to take a few steps to have the instance fetch the meta data like ssh keys etc.</para>
924- <para>Edit the /etc/rc.local file and add the following lines before the line "touch /var/lock/subsys/local"</para>
925-
926+<para>Edit the /etc/rc.local file and add the following lines before the line "touch /var/lock/subsys/local"</para>
927 <programlisting>
928 depmod -a
929 modprobe acpiphp
930@@ -180,88 +95,99 @@
931 echo "************************"
932 </programlisting>
933 </section>
934-<para>Unmount the Loop partition</para>
935-
936-<programlisting>
937-sudo umount /mnt
938-</programlisting>
939-<para>Change the filesystem label of serverfinal.img to 'uec-rootfs'</para>
940-<programlisting>
941-sudo tune2fs -L uec-rootfs serverfinal.img
942-</programlisting>
943-
944-<para>Now, we have all the components of the image ready to be uploaded to OpenStack imaging server.</para>
945-</section>
946-<section xml:id="Uploading_to_OpenStack-d1e1534">
947-<title>Uploading to OpenStack</title>
948-<para>The last step would be to upload the images to OpenStack Imaging Server glance. The files that need to be uploaded for the above sample setup of Ubuntu are: vmlinuz-2.6.38-7-server, initrd.img-2.6.38-7-server, serverfinal.img</para>
949-<para>Run the following command</para>
950-
951-<programlisting>
952-uec-publish-image amd64 serverfinal.img bucket1
953-</programlisting>
954-
955-<para>For Fedora, the process will be similar. Make sure that you use the right kernel and initrd files extracted above.</para>
956-<para>uec-publish-image, like several other commands from euca2ools, returns the prompt back immediately. However, the upload process takes some time and the images will be usable only after the process is complete. You can keep checking the status using the command 'euca-describe-images' as mentioned below.</para>
957-
958-<para>You can upload bootable disk images without associating kernel and ramdisk images. When you do not want the flexibility of using the same disk image with different kernel/ramdisk images, you can go for bootable disk images. This greatly simplifies the process of bundling and uploading the images. However, the caveats mentioned in the introduction to this chapter apply. Please note that the instructions below use server.img and you can skip all the cumbersome steps related to extracting the single ext4 partition.</para>
959-
960-<programlisting>
961-euca-bundle-image -i server.img
962-</programlisting>
963-<programlisting>
964-euca-upload-bundle -b mybucket -m /tmp/server.img.manifest.xml
965-</programlisting>
966-<programlisting>
967-euca-register mybucket/server.img.manifest.xml
968-</programlisting>
969-</section>
970-<section xml:id="Image_Listing-d1e1568">
971-<title>Image Listing</title>
972-
973-<para>The status of the images that have been uploaded can be viewed by using euca-describe-images command. The output should like this:</para>
974-
975-<programlisting>
976-localadmin@client1:~$ euca-describe-images
977-</programlisting>
978-<programlisting>
979-IMAGE ami-00000003 mybucket9/Fedora14Nova.img.manifest.xml available private x86_64 machine instance-store
980-</programlisting>
981-</section>
982+<section xml:id="OpenSUSE-de1590">
983+<title>OpenSUSE</title>
984+<para>Select ssh server, curl and other packages needed.</para>
985+<para>Install ssh server.</para>
986+<programlisting>zypper install openssh</programlisting>
987+<para>Install curl.</para>
988+<programlisting>zypper install curl</programlisting>
989+<para>For ssh key injection into the instance use the following steps:</para>
990+<para>Create a file /etc/init.d/sshkey and add the following lines</para>
991+<programlisting>
992+echo >> /root/.ssh/authorized_keys
993+curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
994+echo "AUTHORIZED_KEYS:"
995+echo "************************"
996+cat /root/.ssh/authorized_keys
997+echo "************************"
998+</programlisting>
999+<para>Change the permissions for the file.</para>
1000+<programlisting>chmod 755 /etc/init.d/sshkey</programlisting>
1001+<para>Configure the service to start automatically while booting.</para>
1002+<programlisting>chkconfig sshkey on</programlisting>
1003+<para>Configure the firewall (not iptables) using the following command and allow ssh service</para>
1004+<programlisting>yast2</programlisting>
1005+<para>Also remove the network persistence rules from /etc/udev/rules.d as their presence will result in the network interface in the instance coming up as an interface other than eth0.</para>
1006+<programlisting>rm -rf /etc/udev/rules.d/70-persistent-net.rules</programlisting>
1007+</section>
1008+<section xml:id="Debian-de1591">
1009+<title>Debian</title>
1010+<para>Select SSH server, Curl and other packages needed.</para>
1011+<para>Do the necessary changes needed for the image. For key injection add the following lines in the file /etc/rc.local.</para>
1012+<programlisting>
1013+echo >> /root/.ssh/authorized_keys
1014+curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
1015+echo "AUTHORIZED_KEYS:"
1016+echo "************************"
1017+cat /root/.ssh/authorized_keys
1018+echo "************************"
1019+</programlisting>
1020+<para>Also remove the network persistence rules from /etc/udev/rules.d as their presence will result in the network interface in the instance coming up as an interface other than eth0.</para>
1021+<programlisting>rm -rf /etc/udev/rules.d/70-persistent-net.rules</programlisting>
1022+</section>
1023+<section xml:id="CentOS-de1592">
1024+<title>CentOS 6 and RHEL 6</title>
1025+<para>Select SSH server, Curl and other packages needed.</para>
1026+<para>Do the necessary changes needed for the image. For key injection add the following lines in the file /etc/rc.local.</para>
1027+<programlisting>
1028+echo >> /root/.ssh/authorized_keys
1029+curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys
1030+echo "AUTHORIZED_KEYS:"
1031+echo "************************"
1032+cat /root/.ssh/authorized_keys
1033+echo "************************"
1034+</programlisting>
1035+<para>Edit the file /etc/sysconfig/network-scripts/ifcfg-eth0 to look like this</para>
1036+<programlisting>
1037+DEVICE="eth0"
1038+BOOTPROTO=dhcp
1039+NM_CONTROLLED="yes"
1040+ONBOOT="yes"
1041+</programlisting>
1042+<para>Remove the network persistence rules from /etc/udev/rules.d as their presence will result in the network interface in the instance coming up as an interface other than eth0.</para>
1043+<programlisting>rm -rf /etc/udev/rules.d/70-persistent-net.rules</programlisting>
1044+</section>
1045+</section>
1046+<section xml:id="Uploading_the_Linux_Image-de1593">
1047+<title>Uploading the Linux image</title>
1048+<para>Upload the image</para>
1049+<programlisting>glance add name="&lt;Image name&gt;" is_public=true container_format=ovf disk_format=qcow2 &lt; &lt;filename&gt;.img</programlisting>
1050+</section>
1051+</section>
1052+
1053 <section xml:id="Creating_a_Windows_Image-d1e1594">
1054 <title>Creating a Windows Image</title>
1055-<para>The first step would be to create a raw image on Client1, this will represent the main HDD of the virtual machine, so make sure to give it as much space as you will need.</para>
1056-
1057-<programlisting>
1058-kvm-img create -f raw windowsserver.img 20G
1059-</programlisting>
1060-
1061-<para>OpenStack presents the disk using aVIRTIO interface while launching the instance. Hence the OS needs to have drivers for VIRTIO. By default, the Windows Server 2008 ISO does not have the drivers for VIRTIO. Download the virtual floppy drive containing VIRTIO drivers from the following location</para>
1062- <para>
1063- http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/
1064- </para>
1065- <para>and attach it during the installation</para>
1066- <para>Start the installation by running</para>
1067-
1068-<programlisting>
1069-sudo kvm -m 1024 -cdrom win2k8_dvd.iso -drive file=windowsserver.img,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -boot d -nographic -vnc :0
1070-</programlisting>
1071-
1072-<para>When the installation prompts you to choose a hard disk device you won't see any devices available. Click on "Load drivers" at the bottom left and load the drivers from A:\i386\Win2008</para>
1073- <para>After the Installation is over, boot into it once and install any additional applications you need to install and make any configuration changes you need to make. Also ensure that RDP is enabled as that would be the only way you can connect to a running instance of Windows. Windows firewall needs to be configured to allow incoming ICMP and RDP connections.</para>
1074- <para>For OpenStack to allow incoming RDP Connections, use euca-authorize command to open up port 3389 as described in the chapter on "Security".</para>
1075+<para>The first step would be to create an image on Client1, this will represent the main HDD of the virtual machine, so make sure to give it as much space as you will need.</para>
1076+<programlisting>
1077+kvm-img create -f qcow2 windowsserver.img 20G
1078+</programlisting>
1079+<section xml:id="OS_Installation-d1e1596">
1080+<title>OS Installation</title>
1081+ <para>OpenStack presents the disk using a virtio interface while launching the instance. Hence the OS needs to have drivers for virtio. By default, the Windows Server 2008 ISO does not have the drivers for virtio. Download the iso image containing virtio drivers from the following location <link xlink:href="http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin">http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin</link> and attach it during the installation</para>
1082+<para>Start the installation by executing:</para>
1083+<programlisting>
1084+sudo kvm -m 1024 -cdrom windows2008.iso -drive file=windowsserver1.img,if=virtio -boot d -drive file=virtio-win-0.1-22.iso,index=3,media=cdrom -device virtio-net-pci -net nic -net user -nographic -vnc :5
1085+</programlisting>
1086+<para>When the installation prompts you to choose a hard disk device you won't see any devices available. Click on "Load drivers" at the bottom left and load the drivers by browsing the secondary CDROM in which the virtio driver disk is loaded</para>
1087+<para>After the installation is over, boot into it once and install any additional applications you need to install and make any configuration changes you need to make. Also ensure that RDP is enabled as that would be the only way you can connect to a running instance of Windows. Windows firewall needs to be configured to allow incoming ICMP and RDP connections.</para>
1088+<section xml:id="Uploading_the_Windows_Image-de1599">
1089+<title>Uploading the Windows image</title>
1090 <para>Shut-down the VM and upload the image to OpenStack</para>
1091-
1092-<programlisting>
1093-euca-bundle-image -i windowsserver.img
1094-</programlisting>
1095-
1096-<programlisting>
1097-euca-upload-bundle -b mybucket -m /tmp/windowsserver.img.manifest.xml
1098-</programlisting>
1099-
1100-<programlisting>
1101-euca-register mybucket/windowsserver.img.manifest.xml
1102+<programlisting>
1103+glance add name="windows" is_public=true container_format=ovf disk_format=qcow2 &lt; windowsserver.img
1104 </programlisting>
1105 </section>
1106-</chapter>
1107\ No newline at end of file
1108+</section>
1109+</section>
1110+</chapter>
1111
1112=== modified file 'Installation.xml'
1113--- Installation.xml 2011-10-19 14:27:25 +0000
1114+++ Installation.xml 2012-05-09 21:52:21 +0000
1115@@ -2,95 +2,94 @@
1116 <title>Installation and Configuration</title>
1117 <section xml:id="Introduction-d1e390">
1118 <title>Introduction</title>
1119-<para>The following section describes how to set up a minimal cloud infrastructure based on OpenStack using 3 machines. These machines are referred to in this and subsequent chapters as Server1 and Server2 and Client1. Server1 runs all the components of Nova as well as Glance and Swift. Server2 runs only nova-compute. Since OpenStack components follow a shared-nothing policy, each component or any group of components can be installed on any server.</para>
1120-<para>Client1 is not a required component. In our sample setup, it is used for bundling images, as a client to the web interface, and to run euca commands to manage the infrastructure. Having this client ensures that you do not need to meddle with the servers for tasks such as bundling. Also, bundling of Desktop Systems including Windows will require a GUI and it is better to have a dedicated machine for this purpose. We would recommend this machine to be VT-Enabled so that KVM can be run which allows for Windows VMs during image creation for bundling.</para>
1121+<para>The following section describes how to set up a minimal cloud infrastructure based on OpenStack using 3 machines. These machines are referred to in this and subsequent chapters as Server1, Server2 and Client1. Server1 runs all the components of Nova, Glance, Swift, Keystone and Horizon (OpenStack Dashboard). Server2 runs only nova-compute. Since OpenStack components follow a shared-nothing policy, each component or any group of components can be installed on any server.</para>
1122+<para>Client1 is not a required component. In our sample setup, it is used for bundling images, as a client to the web interface and to run OpenStack commands to manage the infrastructure. Having this client ensures that you do not need to meddle with the servers for tasks such as bundling. Also, bundling of desktop Systems including Windows will require a GUI and it is better to have a dedicated machine for this purpose. We would recommend this machine to be VT-Enabled so that KVM can be run which allows launching of VMs during image creation for bundling.</para>
1123 <para>
1124 <mediaobject>
1125 <imageobject role="fo">
1126- <imagedata fileref="images/openstackv5.png"
1127- format="PNG" scale="60"/>
1128+ <imagedata fileref="images/setup.png"
1129+ format="PNG" scale="15"/>
1130 </imageobject>
1131 <imageobject role="html">
1132- <imagedata fileref="images/openstackv5html.png"
1133+ <imagedata fileref="images/setuphtml.png"
1134 format="PNG" />
1135 </imageobject>
1136 </mediaobject>
1137 </para>
1138
1139 <para>The installation steps use certain specifics such as host names/IP addresses etc. Modify them to suit your environment before using them. The following table summarizes these specifics.</para>
1140-<table xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:html="http://www.w3.org/1999/xhtml" frame="all">
1141-<title>Configuration</title>
1142-<tgroup cols="4">
1143+<table rules="all">
1144+<caption>Configuration</caption>
1145+
1146 <thead>
1147-<row>
1148-<entry/>
1149-<entry>Server1</entry>
1150-<entry>Server2</entry>
1151-<entry>Client1</entry>
1152-</row>
1153+<tr>
1154+<td>Server1</td>
1155+<td>Server2</td>
1156+<td>Client1</td>
1157+</tr>
1158 </thead>
1159 <tbody>
1160-<row>
1161-<entry>Functionality</entry>
1162-<entry>All components of OpenStack including nova-compute</entry>
1163-<entry>nova-compute</entry>
1164-<entry>Client</entry>
1165-</row>
1166-<row>
1167-<entry>Network Interfaces</entry>
1168-<entry>eth0 - Public N/W, eth1 - Private N/W</entry>
1169-<entry>eth0 - Public N/W, eth1 - Private N/W</entry>
1170-<entry>eth0 - Public N/W</entry>
1171-</row>
1172-<row>
1173-<entry>IP addresses</entry>
1174-<entry>eth0 - 10.10.10.2, eth1 - 192.168.3.1</entry>
1175-<entry>eth0 - 10.10.10.3, eth1 - 192.168.3.2</entry>
1176-<entry>eth0 - 10.10.10.4</entry>
1177-</row>
1178-<row>
1179-<entry>Hostname</entry>
1180-<entry>server1.example.com</entry>
1181-<entry>server2.example.com</entry>
1182-<entry>client.example.com</entry>
1183-</row>
1184-<row>
1185-<entry>DNS servers</entry>
1186-<entry>10.10.10.3</entry>
1187-<entry>10.10.10.3</entry>
1188-<entry>10.10.10.3</entry>
1189-</row>
1190-<row>
1191-<entry>Gateway IP</entry>
1192-<entry>10.10.10.1</entry>
1193-<entry>10.10.10.1</entry>
1194-<entry>10.10.10.1</entry>
1195-</row>
1196+<tr>
1197+<td>Functionality</td>
1198+<td>All components of OpenStack including nova-compute</td>
1199+<td>nova-compute</td>
1200+<td>Client</td>
1201+</tr>
1202+<tr>
1203+<td>Network Interfaces</td>
1204+<td>eth0 - Public N/W, eth1 - Private N/W</td>
1205+<td>eth0 - Public N/W, eth1 - Private N/W</td>
1206+<td>eth0 - Public N/W</td>
1207+</tr>
1208+<tr>
1209+<td>IP addresses</td>
1210+<td>eth0 - 10.10.10.2, eth1 - 192.168.3.1</td>
1211+<td>eth0 - 10.10.10.3, eth1 - 192.168.3.2</td>
1212+<td>eth0 - 10.10.10.4</td>
1213+</tr>
1214+<tr>
1215+<td>Hostname</td>
1216+<td>server1.example.com</td>
1217+<td>server2.example.com</td>
1218+<td>client.example.com</td>
1219+</tr>
1220+<tr>
1221+<td>DNS servers</td>
1222+<td>10.10.8.3</td>
1223+<td>10.10.8.3</td>
1224+<td>10.10.8.3</td>
1225+</tr>
1226+<tr>
1227+<td>Gateway IP</td>
1228+<td>10.10.10.1</td>
1229+<td>10.10.10.1</td>
1230+<td>10.10.10.1</td>
1231+</tr>
1232 </tbody>
1233-</tgroup>
1234+
1235 </table>
1236 </section>
1237 <section xml:id="Server1-d1e537">
1238 <title>Server1</title>
1239- <para>As shown in the figure above, Server1 contains all nova- services including nova-compute, nova-api, nova-volume, nova-network, as well as the Image Service Glance and Swift. It contains two Network Interface Cards (NICs).</para>
1240+ <para>As shown in the figure above, Server1 contains all nova- services including nova-compute, nova-api, nova-volume, nova-network, Glance, Swift, Keystone and Horizon. It contains two network interface cards (NICs).</para>
1241 <section xml:id="Base_OS-d1e542">
1242 <title>Base OS</title>
1243-<para>Install 64 bit version of Ubuntu server 11.10 keeping the following configurations in mind.</para>
1244+<para>Install 64 bit version of Ubuntu server 12.04 keeping the following configurations in mind.</para>
1245 <itemizedlist>
1246 <listitem><para>Create the first user with the name 'localadmin' .</para></listitem>
1247 <listitem><para>Installation lets you setup the IP address for the first interface i.e. eth0. Set the IP address details.</para></listitem>
1248 <listitem><para>During installation select only Openssh-server in the packages menu.</para></listitem>
1249 </itemizedlist>
1250-<para>We will also be running nova-volume on this server and it is ideal to have a dedicated partition for the use of nova-volume. So, ensure that you choose manual partitioning scheme while installing Ubuntu Server and create a dedicated partition with adequate amount of space for this purpose. We have referred to this partition in the rest of the chapter as /dev/sda6. You can substitute the correct device name of this dedicated partition based on your local setup while following the instructions. Also ensure that the partition type is set as Linux LVM (8e) using fdisk either during install or immediately after installation is over.</para>
1251+<para>We will also be running nova-volume on this server and it is ideal to have a dedicated partition for the use of nova-volume. So, ensure that you choose manual partitioning scheme while installing Ubuntu Server and create a dedicated partition with adequate amount of space for this purpose. We have referred to this partition in the rest of the chapter as /dev/sda6. You can substitute the correct device name of this dedicated partition based on your local setup while following the instructions. Also ensure that the partition type is set as Linux LVM (8e) using fdisk either during install or immediately after installation is over. If you also plan to use a dedicated partition as Swift backend, create another partition for this purpose and follow the instructions in "Swift Installation" section below.</para>
1252 <para>Update the machine using the following commands.</para>
1253-<programlisting>sudo apt-get update</programlisting>
1254-<programlisting>sudo apt-get upgrade</programlisting>
1255+<programlisting>sudo apt-get update
1256+sudo apt-get upgrade
1257+</programlisting>
1258 <para>Install bridge-utils:</para>
1259-<programlisting>sudo apt-get install -y bridge-utils</programlisting>
1260-<para>Reboot the server and login as the admin user(localadmin) created during the OS installation.</para>
1261+<programlisting>sudo apt-get install bridge-utils</programlisting>
1262 </section>
1263-<section xml:id="Networking_Configuration-d1e591">
1264-<title>Networking Configuration</title>
1265+<section xml:id="Network_Configuration-d1e591">
1266+<title>Network Configuration</title>
1267 <para>Edit the /etc/network/interfaces file so as to looks like this:</para>
1268 <programlisting>
1269 auto lo
1270@@ -102,7 +101,7 @@
1271 netmask 255.255.255.0
1272 broadcast 10.10.10.255
1273 gateway 10.10.10.1
1274- dns-nameservers 10.10.10.100
1275+ dns-nameservers 10.10.8.3
1276
1277 auto eth1
1278 iface eth1 inet static
1279@@ -116,142 +115,299 @@
1280 </section>
1281 <section xml:id="NTP_Server-d1e609">
1282 <title>NTP Server</title>
1283-<para>Install NTP package. This server is going to act as an NTP server for the nodes. The time on all components of OpenStack will have to be in sync. We can run NTP server on this and have other components sync to it.</para>
1284-<programlisting>sudo apt-get install -y ntp</programlisting>
1285-<para>Open the file /etc/ntp.conf and add the following lines to make sure that the time of the server is in sync with an external server and in case Internet connectivity is down, NTP server uses its own hardware clock as the fallback.</para>
1286+<para>Install NTP package. This server shall act as the NTP server for the nodes. The time on all components of OpenStack will have to be in sync. We can run NTP server on server1 and have other servers/nodes sync to it.</para>
1287+<programlisting>sudo apt-get install ntp</programlisting>
1288+<para>Open the file /etc/ntp.conf and add the following lines to make sure that the time on the server stays in sync with an external server. If the Internet connectivity is down, the NTP server uses its own hardware clock as the fallback.</para>
1289 <programlisting>
1290 server ntp.ubuntu.com
1291 server 127.127.1.0
1292 fudge 127.127.1.0 stratum 10
1293 </programlisting>
1294-<para>Restart NTP service to make the changes effective</para>
1295-<programlisting>sudo /etc/init.d/ntp restart</programlisting>
1296+<para>Restart the NTP server</para>
1297+<programlisting>sudo service ntp restart</programlisting>
1298+<para>Ensure that, IP addresses of the servers are resolvable by the DNS. If not, include the hostnames in /etc/hosts file.</para>
1299 </section>
1300
1301 <section xml:id="Database_Server-d1e657"><title>Databases</title>
1302 <para>You can use MySQL, PostgreSQL or SQLite for Nova and Glance. Depending upon your choice of database, you will need to install the necessary packages and configure the database server.</para>
1303 <section xml:id="MySQL-d1e856">
1304 <title>MySQL</title>
1305-<para>Install mysql-server package</para>
1306-<programlisting>sudo apt-get install -y mysql-server
1307+<para>Install mysql-server and python-mysqldb package</para>
1308+<programlisting>sudo apt-get install mysql-server python-mysqldb
1309 </programlisting>
1310-<para>Create the root password for mysql. The password here is "mygreatsecret"</para>
1311-<para>Change the bind address from 127.0.0.1 to 0.0.0.0 in /etc/mysql/my.cnf and it will look like this:</para>
1312+<para>Create the root password for mysql. The password used in this guide is "mygreatsecret"</para>
1313+<para>Change the bind address from 127.0.0.1 to 0.0.0.0 in /etc/mysql/my.cnf. It should be identical to this:</para>
1314 <programlisting>bind-address = 0.0.0.0
1315 </programlisting>
1316 <para>Restart MySQL server to ensure that it starts listening on all interfaces.</para>
1317 <programlisting>sudo restart mysql
1318 </programlisting>
1319 </section>
1320-<section xml:id="PostgreSQL-dle678">
1321-<title>PostgreSQL</title>
1322-<para>Install PostgreSQL and the python driver for PostgreSQL</para>
1323-<programlisting>sudo apt-get install -y postgresql python-psycopg2</programlisting>
1324-<para>Setup PostgreSQL to listen on all interfaces by editing /etc/postgresql/9.1/main/postgresql.conf and uncommenting and modifying the relevant line. Look for the right file if you have a different version of PostgreSQL</para>
1325-<programlisting>listen_addresses = '*'</programlisting>
1326-<para>Restart PostgreSQL server to ensure that it starts listening on all interfaces.</para>
1327-<programlisting>sudo /etc/init.d/postgresql restart</programlisting>
1328-</section>
1329-<section xml:id="SQLite-dle899">
1330-<title>SQLite</title>
1331-<para>Install SQLite</para>
1332-<programlisting>sudo apt-get install -y sqlite</programlisting>
1333-</section>
1334-</section>
1335-
1336-<section xml:id="Glance-d1e634">
1337-<title>Glance</title>
1338-<para>Nova can use Glance service to manage Operating System images that it needs for bringing up instances. Glance can use several types of storage backends such as filestore, s3 etc.</para>
1339-<programlisting>sudo apt-get install -y glance
1340-</programlisting>
1341-<para>The default config file at /etc/glance/glance.conf is good to use for a simple file store as the storage backend. Glance can be configured to use other storage backends such as Swift.</para>
1342-<para>Glance uses sqlite as the default database backend. While sqlite offers a quick and easy way to get started, for production use, you may consider a database such as MySQL or PostgreSQL.</para>
1343-<para>Glance has two components - glance-api and glance-registry. These can be controlled using the concerned upstart jobs.</para>
1344-<section xml:id="Glancedb-d1a734">
1345-<title>Database Configuration</title>
1346-<para>Glance uses SQLite by default. MySQL and PostgreSQL can also be configured to work with Glance.</para>
1347-<section xml:id="GlanceMS-d2s21">
1348-<title>MySQL</title>
1349-<para>Create a database named glance</para>
1350+<section xml:id="Creating_Databases-d1e921">
1351+<title>Creating Databases</title>
1352+<para>Create MySQL databases to be used with nova, glance and keystone.</para>
1353+<para>Create a database named nova.</para>
1354+<programlisting>sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'</programlisting>
1355+<para>Create a user named novadbadmin.</para>
1356+<programlisting>sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'</programlisting>
1357+<para>Grant all privileges for novadbadmin on the database "nova".</para>
1358+<programlisting>sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"</programlisting>
1359+<para>Create a password for the user "novadbadmin".</para>
1360+<programlisting>sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"</programlisting>
1361+<para>Create a database named glance.</para>
1362 <programlisting>sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'</programlisting>
1363-<para>Create a user named glancedbadmin</para>
1364+<para>Create a user named glancedbadmin.</para>
1365 <programlisting>sudo mysql -uroot -pmygreatsecret -e 'CREATE USER glancedbadmin;'</programlisting>
1366-<para>Grant all privileges for glancedbadmin on the Database "glance".</para>
1367-<programlisting>sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%' ;"</programlisting>
1368-<para>Create a password for the user "glanceadmin"</para>
1369+<para>Grant all privileges for glancedbadmin on the database "glance".</para>
1370+<programlisting>sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%';"</programlisting>
1371+<para>Create a password for the user "glancedbadmin".</para>
1372 <programlisting>sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'glancedbadmin'@'%' = PASSWORD('glancesecret');"</programlisting>
1373-<para>Edit the file /etc/glance/glance-registry.conf and edit the line which contains the option "sql_connection =" to this:</para>
1374+<para>Create a database named keystone.</para>
1375+<programlisting>sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'</programlisting>
1376+<para>Create a user named keystonedbadmin.</para>
1377+<programlisting>sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'</programlisting>
1378+<para>Grant all privileges for keystonedbadmin on the database "keystone".</para>
1379+<programlisting>sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"</programlisting>
1380+<para>Create a password for the user "keystonedbadmin".</para>
1381+<programlisting>sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret');"</programlisting>
1382+</section>
1383+</section>
1384+
1385+<section xml:id="Keystone-d1e456">
1386+<title>Keystone</title>
1387+<para>Keystone is the identity service used by OpenStack. Install Keystone using the following command.</para>
1388+<programlisting>sudo apt-get install keystone python-keystone python-keystoneclient
1389+</programlisting>
1390+<para>Open /etc/keystone/keystone.conf and change the line</para>
1391+<programlisting>admin_token = ADMIN</programlisting>
1392+<para>so that it looks like the following:</para>
1393+<programlisting>admin_token = admin</programlisting>
1394+<para>(We have used 'admin' as the token in this book.)</para>
1395+<para>Since MySQL database is used to store keystone configuration, replace the following line in /etc/keystone/keystone.conf </para>
1396+<programlisting>connection = sqlite:////var/lib/keystone/keystone.db</programlisting>
1397+<para>with</para>
1398+<programlisting>connection = mysql://keystonedbadmin:keystonesecret@10.10.10.2/keystone</programlisting>
1399+<para>Restart Keystone:</para>
1400+<programlisting>sudo service keystone restart</programlisting>
1401+<para>Run the following command to synchronise the database:</para>
1402+<programlisting>sudo keystone-manage db_sync</programlisting>
1403+<para>Export environment variables which are required while working with OpenStack.</para>
1404+<programlisting>
1405+export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
1406+export SERVICE_TOKEN=admin
1407+</programlisting>
1408+<para>You can also add these variables to ~/.bashrc, so that you need not have to export them everytime.</para>
1409+<section xml:id="Creating_Keystone_Tenants-d1e458">
1410+<title>Creating Tenants</title>
1411+<para>Create the tenants by executing the following commands. In this case, we are creating two tenants - admin and service.</para>
1412+<programlisting>
1413+keystone tenant-create --name admin
1414+keystone tenant-create --name service
1415+</programlisting>
1416+</section>
1417+<section xml:id="Creating_Keystone_Users-d1e459">
1418+<title>Creating Users</title>
1419+<para>Create the users by executing the following commands. In this case, we are creating four users - admin, nova, glance and swift</para>
1420+<programlisting>
1421+keystone user-create --name admin --pass admin --email admin@foobar.com
1422+keystone user-create --name nova --pass nova --email nova@foobar.com
1423+keystone user-create --name glance --pass glance --email glance@foobar.com
1424+keystone user-create --name swift --pass swift --email swift@foobar.com
1425+</programlisting>
1426+</section>
1427+<section xml:id="Creating_Keystone_Roles-d1e460">
1428+<title>Creating Roles</title>
1429+<para>Create the roles by executing the following commands. In this case, we are creating two roles - admin and Member.</para>
1430+<programlisting>
1431+keystone role-create --name admin
1432+keystone role-create --name Member
1433+</programlisting>
1434+</section>
1435+<section xml:id="Listing_Tenants_Users_Roles-d1e462">
1436+<title>Listing Tenants, Users and Roles</title>
1437+<para>The tenants, users and roles that have been created above can be listed by following commands:</para>
1438+<para>List Tenants:</para>
1439+<programlisting>
1440+keystone tenant-list
1441++----------------------------------+--------------------+---------+
1442+| id | name | enabled |
1443++----------------------------------+--------------------+---------+
1444+| 7f95ae9617cd496888bc412efdceabfd | admin | True |
1445+| c7970080576646c6959ee35970cf3199 | service | True |
1446++----------------------------------+--------------------+---------+
1447+</programlisting>
1448+<para>List Users:</para>
1449+<programlisting>
1450+keystone user-list
1451++----------------------------------+---------+-------------------+--------+
1452+| id | enabled | email | name |
1453++----------------------------------+---------+-------------------+--------+
1454+| 1b986cca67e242f38cd6aa4bdec587ca | True | swift@foobar.com | swift |
1455+| 518b51ea133c4facadae42c328d6b77b | True | glance@foobar.com | glance |
1456+| b3de3aeec2544f0f90b9cbfe8b8b7acd | True | admin@foobar.com | admin |
1457+| ce8cd56ca8824f5d845ba6ed015e9494 | True | nova@foobar.com | nova |
1458++----------------------------------+---------+-------------------+--------+
1459+</programlisting>
1460+<para>List Roles:</para>
1461+<programlisting>
1462+keystone role-list
1463++----------------------------------+----------------------+
1464+| id | name |
1465++----------------------------------+----------------------+
1466+| 2bbe305ad531434991d4281aaaebb700 | admin |
1467+| d983800dd6d54ee3a1b1eb9f2ae3291f | Member |
1468++----------------------------------+----------------------+
1469+</programlisting>
1470+<para>Please note that the values of the 'id' column, would be required later when we associate a role to a user in a particular tenant.</para>
1471+</section>
1472+<section xml:id="Adding_Roles_to_Users-d1e465">
1473+<title>Adding Roles to Users in Tenants</title>
1474+<para>Now we add roles to the users that have been created. A role to a specific user in a specific tenant can be assigned with the following command:</para>
1475+<programlisting>keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID
1476+</programlisting>
1477+<para>The required 'id' can be obtained from the commands - keystone user-list, keystone tenant-list, keystone role-list.</para>
1478+<para>To add a role of 'admin' to the user 'admin' of the tenant 'admin'.</para>
1479+<programlisting>
1480+keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role 2bbe305ad531434991d4281aaaebb700 --tenant_id 7f95ae9617cd496888bc412efdceabfd
1481+</programlisting>
1482+<para>The following commands will add a role of 'admin' to the users 'nova', 'glance' and 'swift' of the tenant 'service'.</para>
1483+<programlisting>
1484+keystone user-role-add --user ce8cd56ca8824f5d845ba6ed015e9494 --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
1485+keystone user-role-add --user 518b51ea133c4facadae42c328d6b77b --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
1486+keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
1487+</programlisting>
1488+<para>The 'Member' role is used by Horizon and Swift. So add the 'Member' role accordingly.</para>
1489+<programlisting>
1490+keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd
1491+</programlisting>
1492+<para>Replace the id appropriately as listed by keystone user-list, keystone role-list, keystone tenant-list.</para>
1493+</section>
1494+<section xml:id="Creating_Services-d1e467">
1495+<title>Creating Services</title>
1496+<para>Now we need to create the required services which the users can authenticate with. nova-compute, nova-volume, glance, swift, keystone and ec2 are some of the services that we create.</para>
1497+<programlisting>keystone service-create --name service_name --type service_type --description 'Description of the service'</programlisting>
1498+<programlisting>
1499+keystone service-create --name nova --type compute --description 'OpenStack Compute Service'
1500+keystone service-create --name volume --type volume --description 'OpenStack Volume Service'
1501+keystone service-create --name glance --type image --description 'OpenStack Image Service'
1502+keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'
1503+keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'
1504+keystone service-create --name ec2 --type ec2 --description 'EC2 Service'
1505+</programlisting>
1506+<para>Each of the services that have been created above will be identified with a unique id which can be obtained from the following command:</para>
1507+<programlisting>
1508+keystone service-list
1509++----------------------------------+----------+--------------+----------------------------+
1510+| id | name | type | description |
1511++----------------------------------+----------+--------------+----------------------------+
1512+| 1e93ee6c70f8468c88a5cb1b106753f3 | nova | compute | OpenStack Compute Service |
1513+| 28fd92ffe3824004996a3e04e059d875 | ec2 | ec2 | EC2 Service |
1514+| 7d4ec192dfa1456996f0f4c47415c7a7 | keystone | identity | OpenStack Identity Service |
1515+| 96f35e1112b143e59d5cd5d0e6a8b22d | swift | object-store | OpenStack Storage Service |
1516+| f38f4564ff7b4e43a52b2f5c1b75e5fa | volume | volume | OpenStack Volume Service |
1517+| fbafab6edcab467bb734380ce6be3561 | glance | image | OpenStack Image Service |
1518++----------------------------------+----------+--------------+----------------------------+
1519+</programlisting>
1520+<para>The 'id' will be used in defining the endpoint for that service.</para>
1521+</section>
1522+<section xml:id="Creating_Endpoints-d1e469">
1523+<title>Creating Endpoints</title>
1524+<para>Create endpoints for each of the services that have been created above.</para>
1525+<programlisting>
1526+keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url --internalurl internal_url
1527+</programlisting>
1528+<para>For creating an endpoint for nova-compute, execute the following command:</para>
1529+<programlisting>
1530+keystone endpoint-create --region myregion --service_id 1e93ee6c70f8468c88a5cb1b106753f3 --publicurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --adminurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --internalurl 'http://10.10.10.2:8774/v2/$(tenant_id)s'
1531+</programlisting>
1532+<para>For creating an endpoint for nova-volume, execute the following command:</para>
1533+<programlisting>
1534+keystone endpoint-create --region myregion --service_id f38f4564ff7b4e43a52b2f5c1b75e5fa --publicurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --adminurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --internalurl 'http://10.10.10.2:8776/v1/$(tenant_id)s'
1535+</programlisting>
1536+<para>For creating an endpoint for glance, execute the following command:</para>
1537+<programlisting>
1538+keystone endpoint-create --region myregion --service_id fbafab6edcab467bb734380ce6be3561 --publicurl 'http://10.10.10.2:9292/v1' --adminurl 'http://10.10.10.2:9292/v1' --internalurl 'http://10.10.10.2:9292/v1'
1539+</programlisting>
1540+<para>For creating an endpoint for swift, execute the following command:</para>
1541+<programlisting>
1542+keystone endpoint-create --region myregion --service_id 96f35e1112b143e59d5cd5d0e6a8b22d --publicurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s' --adminurl 'http://10.10.10.2:8080/v1' --internalurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s'
1543+</programlisting>
1544+<para>For creating an endpoint for keystone, execute the following command:</para>
1545+<programlisting>
1546+keystone endpoint-create --region myregion --service_id 7d4ec192dfa1456996f0f4c47415c7a7 --publicurl http://10.10.10.2:5000/v2.0 --adminurl http://10.10.10.2:35357/v2.0 --internalurl http://10.10.10.2:5000/v2.0
1547+</programlisting>
1548+<para>For creating an endpoint for ec2, execute the following command:</para>
1549+<programlisting>
1550+keystone endpoint-create --region myregion --service_id 28fd92ffe3824004996a3e04e059d875 --publicurl http://10.10.10.2:8773/services/Cloud --adminurl http://10.10.10.2:8773/services/Admin --internalurl http://10.10.10.2:8773/services/Cloud
1551+</programlisting>
1552+</section>
1553+</section>
1554+
1555+<section xml:id="Glance-d1a732">
1556+<title>Glance</title>
1557+<para>Install glance using the following command:</para>
1558+<programlisting>
1559+sudo apt-get install glance glance-api glance-client glance-common glance-registry python-glance
1560+</programlisting>
1561+<section xml:id="Glance_Config-d1a734">
1562+<title>Glance Configuration</title>
1563+<para>Glance uses SQLite by default. MySQL and PostgreSQL can also be configured to work with Glance.</para>
1564+<para>Open /etc/glance/glance-api-paste.ini and at the end of the file, edit the following lines:</para>
1565+<programlisting>
1566+admin_tenant_name = %SERVICE_TENANT_NAME%
1567+admin_user = %SERVICE_USER%
1568+admin_password = %SERVICE_PASSWORD%
1569+</programlisting>
1570+<para>These values have to be modified as per the configurations made earlier. The admin_tenant_name will be 'service', admin_user will be 'glance' and admin_password is 'glance'.</para>
1571+<para>After editing, the lines should be as follows:</para>
1572+<programlisting>
1573+admin_tenant_name = service
1574+admin_user = glance
1575+admin_password = glance
1576+</programlisting>
1577+<para>Now open /etc/glance/glance-registry-paste.ini and make similar changes at the end of the file.</para>
1578+<para>Open the file /etc/glance/glance-registry.conf and edit the line which contains the option "sql_connection =" to this:</para>
1579 <programlisting>sql_connection = mysql://glancedbadmin:glancesecret@10.10.10.2/glance</programlisting>
1580-<para>Restart glance-registry after making changes to /etc/glance/glance-registry.conf</para>
1581-<programlisting>sudo restart glance-registry</programlisting>
1582-</section>
1583-<section xml:id="GlancePS-d1f234">
1584-<title>PostgreSQL</title>
1585-<para>Create a user called 'glancedbadmin' with password 'glancesecret', create the database 'glance' and give 'glancedbadmin' all privileges on that database.</para>
1586-<programlisting>
1587-sudo su - postgres
1588-psql
1589-CREATE user glancedbadmin;
1590-ALTER user glancedbadmin with password 'glancesecret';
1591-CREATE DATABASE glance;
1592-GRANT ALL PRIVILEGES ON database glance TO glancedbadmin;
1593-\q
1594-exit
1595-</programlisting>
1596-<para>Edit the file /etc/glance/glance-registry.conf and edit the line which contains the option "sql_connection =" to this:</para>
1597-<programlisting>sql_connection = postgresql://glancedbadmin:glancesecret@10.10.10.2/glance</programlisting>
1598-<para>Restart glance-registry after making changes to /etc/glance/glance-registry.conf</para>
1599-<programlisting>sudo restart glance-registry</programlisting>
1600-</section>
1601-</section>
1602-</section>
1603-<section xml:id="Nova-d1e718">
1604+<para>In order to tell glance to use keystone for authentication, add the following lines at the end of the file.</para>
1605+<programlisting>
1606+[paste_deploy]
1607+flavor = keystone
1608+</programlisting>
1609+<para>Open /etc/glance/glance-api.conf and add the following lines at the end of the document.</para>
1610+<programlisting>
1611+[paste_deploy]
1612+flavor = keystone
1613+</programlisting>
1614+<para>Create glance schema in the MySQL database.:</para>
1615+<programlisting>
1616+sudo glance-manage version_control 0
1617+sudo glance-manage db_sync
1618+</programlisting>
1619+<para>Restart glance-api and glance-registry after making the above changes.</para>
1620+<programlisting>sudo restart glance-api</programlisting>
1621+<programlisting>sudo restart glance-registry</programlisting>
1622+<para>Export the following environment variables.</para>
1623+<programlisting>
1624+export SERVICE_TOKEN=admin
1625+export OS_TENANT_NAME=admin
1626+export OS_USERNAME=admin
1627+export OS_PASSWORD=admin
1628+export OS_AUTH_URL="http://localhost:5000/v2.0/"
1629+export SERVICE_ENDPOINT=http://localhost:35357/v2.0
1630+</programlisting>
1631+<para>Alternatively, you can add these variables to ~/.bashrc.</para>
1632+<para>To test if glance is setup correectly execute the following command.</para>
1633+<programlisting>glance index</programlisting>
1634+<para>The above command will not return any output. The output of the last command executed can be known from its return code - echo $?. If the return code is zero, then glance is setup properly and connects with Keystone.</para>
1635+<para>With glance configured properly and using keystone as the authentication mechanism, now we can upload images to glance. This has been explained in detail in "Image Management" chapter.</para>
1636+</section>
1637+</section>
1638+
1639+<section xml:id="Nova-d1a736">
1640 <title>Nova</title>
1641-<para>Install the messaging queue server, RabbitMQ and various nova components.</para>
1642-<programlisting>sudo apt-get install -y rabbitmq-server nova-common nova-doc python-nova nova-api nova-network nova-volume nova-objectstore nova-scheduler nova-compute</programlisting>
1643-<para>Install euca2ools package for command line tools to interact with nova.</para>
1644-<programlisting>sudo apt-get install -y euca2ools
1645-</programlisting>
1646-<para>Install unzip for extracting archives.</para>
1647-<programlisting>sudo apt-get install -y unzip
1648-</programlisting>
1649-<section xml:id="NovaDB-d2s241">
1650-<title>Database Configuration</title>
1651-<para>Nova can use MySQL or PostgreSQL for storing its data. For non-production use, sqlite is also an option.</para>
1652-<section xml:id="MySQL_Server-d1e657"><title>MySQL</title>
1653-<para>Create a database named nova.</para>
1654-<programlisting>sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'
1655-</programlisting>
1656-<para>Create a user named novadbadmin which has access to nova related databases.</para>
1657-<programlisting>sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'</programlisting>
1658-<para>Grant all privileges for novadbadmin on the Database "nova".</para>
1659-<programlisting>sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%' ;"</programlisting>
1660-<para>Set password for novadbadmin.</para>
1661-<programlisting>sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"</programlisting>
1662-</section>
1663-<section xml:id="PostgreSQL-d2s315">
1664-<title>PostgreSQL</title>
1665-<para>Create a user called 'novadbadmin' with password 'novasecret', create the database 'nova' and give 'novadbadmin' all privileges on that database.</para>
1666-<programlisting>
1667-sudo su - postgres
1668-psql
1669-CREATE user novadbadmin;
1670-ALTER user novadbadmin with password 'novasecret';
1671-CREATE DATABASE nova;
1672-GRANT ALL PRIVILEGES ON database nova TO novadbadmin;
1673-\q
1674-exit
1675-</programlisting>
1676-<para>Configure Postgresql to accept connections from users from any machine on 10.10.10.0/24 and 192.168.3.0/24 by adding the following line to /etc/postgresql/9.1/main/pg_hba.conf.</para>
1677-<programlisting>
1678-host all all 10.10.10.0/24 md5
1679-host all all 192.168.3.0/24 md5
1680-</programlisting>
1681-<para>Restart PostgreSQL.</para>
1682-<programlisting>/etc/init.d/postgresql restart</programlisting>
1683-</section>
1684-</section>
1685-<section xml:id="Nova_conf-d2s367">
1686+<para>Install nova using the following commands:</para>
1687+<programlisting>sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth</programlisting>
1688+<section xml:id="Nova_Conf-d2s738">
1689 <title>Nova Configuration</title>
1690 <para>Edit the /etc/nova/nova.conf file to look like this.</para>
1691 <programlisting>
1692@@ -259,319 +415,419 @@
1693 --dhcpbridge=/usr/bin/nova-dhcpbridge
1694 --logdir=/var/log/nova
1695 --state_path=/var/lib/nova
1696---lock_path=/var/lock/nova
1697---state_path=/var/lib/nova
1698---verbose
1699+--lock_path=/run/lock/nova
1700+--allow_admin_api=true
1701+--use_deprecated_auth=false
1702+--auth_strategy=keystone
1703+--scheduler_driver=nova.scheduler.simple.SimpleScheduler
1704 --s3_host=10.10.10.2
1705+--ec2_host=10.10.10.2
1706 --rabbit_host=10.10.10.2
1707 --cc_host=10.10.10.2
1708---ec2_url=http://10.10.10.2:8773/services/Cloud
1709 --nova_url=http://10.10.10.2:8774/v1.1/
1710---fixed_range=192.168.0.0/16
1711---network_size=8
1712---FAKE_subdomain=ec2
1713 --routing_source_ip=10.10.10.2
1714+--glance_api_servers=10.10.10.2:9292
1715+--image_service=nova.image.glance.GlanceImageService
1716+--iscsi_ip_prefix=192.168.4
1717 --sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova
1718---glance_api_servers=192.168.3.2:9292
1719---image_service=nova.image.glance.GlanceImageService
1720---iscsi_ip_prefix=192.168.
1721---vlan_interface=eth1
1722+--ec2_url=http://10.10.10.2:8773/services/Cloud
1723+--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens
1724+--api_paste_config=/etc/nova/api-paste.ini
1725+--libvirt_type=kvm
1726+--libvirt_use_virtio_for_bridges=true
1727+--start_guests_on_host_boot=true
1728+--resume_guests_state_on_host_boot=true
1729+# vnc specific configuration
1730+--novnc_enabled=true
1731+--novncproxy_base_url=http://10.10.10.2:6080/vnc_auto.html
1732+--vncserver_proxyclient_address=10.10.10.2
1733+--vncserver_listen=10.10.10.2
1734+# network specific settings
1735+--network_manager=nova.network.manager.FlatDHCPManager
1736 --public_interface=eth0
1737+--flat_interface=eth1
1738+--flat_network_bridge=br100
1739+--fixed_range=192.168.4.1/27
1740+--floating_range=10.10.10.2/27
1741+--network_size=32
1742+--flat_network_dhcp_start=192.168.4.33
1743+--flat_injected=False
1744+--force_dhcp_release
1745+--iscsi_helper=tgtadm
1746+--connection_type=libvirt
1747+--root_helper=sudo nova-rootwrap
1748+--verbose
1749 </programlisting>
1750-<para>For configuring with PostgreSQL change the line with --sql_connection to:</para>
1751-<programlisting>--sql_connection=postgresql://novadbadmin:novasecret@10.10.10.2/nova</programlisting>
1752-<para>For configuring with SQLite change the line with --sql_connection to:</para>
1753-<programlisting>--sql_connection=sqlite:////var/lib/nova/nova.sqlite</programlisting>
1754-<para>Install iscsitarget</para>
1755-<programlisting>sudo apt-get -y install iscsitarget iscsitarget-dkms</programlisting>
1756-<para>Enable iscsitarget.</para>
1757-<programlisting>sudo sed -i 's/false/true/g' /etc/default/iscsitarget</programlisting>
1758-<para>Restart the iscsitarget service</para>
1759-<programlisting>sudo service iscsitarget restart</programlisting>
1760 <para>Create a Physical Volume.</para>
1761-<programlisting>sudo pvcreate /dev/sda6
1762+<programlisting>
1763+sudo pvcreate /dev/sda6
1764 </programlisting>
1765 <para>Create a Volume Group named nova-volumes.</para>
1766-<programlisting>sudo vgcreate nova-volumes /dev/sda6
1767+<programlisting>
1768+sudo vgcreate nova-volumes /dev/sda6
1769 </programlisting>
1770 <para>Change the ownership of the /etc/nova folder and permissions for /etc/nova/nova.conf:</para>
1771 <programlisting>
1772-sudo chown -R root:nova /etc/nova
1773+sudo chown -R nova:nova /etc/nova
1774 sudo chmod 644 /etc/nova/nova.conf
1775 </programlisting>
1776-<para>Restart all the nova related services.</para>
1777-<programlisting>sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry</programlisting>
1778-<para>Create nova schema in the MySQL Database.</para>
1779+<para>Open /etc/nova/api-paste.ini and at the end of the file, edit the following lines:</para>
1780+<programlisting>
1781+admin_tenant_name = %SERVICE_TENANT_NAME%
1782+admin_user = %SERVICE_USER%
1783+admin_password = %SERVICE_PASSWORD%
1784+</programlisting>
1785+<para>These values have to be modified conforming to configurations made earlier. The admin_tenant_name will be 'service', admin_user will be 'nova' and admin_password is 'nova'.</para>
1786+<para>After editing, the lines should be as follows:</para>
1787+<programlisting>
1788+admin_tenant_name = service
1789+admin_user = nova
1790+admin_password = nova
1791+</programlisting>
1792+<para>Create nova schema in the MySQL database.</para>
1793 <programlisting>sudo nova-manage db sync</programlisting>
1794-<para>Provide a range of IPs to be attached to the instances.</para>
1795-<programlisting>sudo nova-manage network create private 192.168.4.0/24 1 256
1796-</programlisting>
1797-<para>Allocate 32 pubic IP addresses for use with the instances starting from 10.10.10.225.</para>
1798-<programlisting>sudo nova-manage floating create --ip_range=10.10.10.224/27
1799-</programlisting>
1800-<para>Create a user with admin rights on nova.</para>
1801-<programlisting>sudo nova-manage user admin novaadmin
1802-</programlisting>
1803-<para>Create a project named proj.</para>
1804-<programlisting>sudo nova-manage project create proj novaadmin
1805-</programlisting>
1806-<para>Restart all the nova related services.</para>
1807-<programlisting>sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart glance-api; sudo restart glance-registry</programlisting>
1808-<para>Create a directory to download nova credentials and download the zip file.</para>
1809-<programlisting>mkdir /home/localadmin/creds
1810-</programlisting>
1811-<para>Generate and save credentials for accessing/managing the nova cloud.</para>
1812-<programlisting>sudo nova-manage project zipfile proj novaadmin /home/localadmin/creds/novacreds.zip
1813-</programlisting>
1814-<para>Contents of novacreds.zip are required to use euca2ools to manage the cloud infrastructure and you will need to transfer this zip file to any machine from where you want to run the commands from euca2ools. We will be using these credentials from client1 as well.
1815-</para>
1816-<para>Navigate in to the folder created and extract the files and change their ownership.</para>
1817-<programlisting>
1818-cd /home/localadmin/creds
1819-unzip novacreds.zip
1820-sudo chown localadmin:localadmin /home/localadmin/creds/ -R
1821-</programlisting>
1822-<para>Here are the files extracted:</para>
1823-<para>cacert.pem, cert.pem, novarc, pk.pem</para>
1824-<para>novarc contains several environmental variables including your nova credentials to be set before you can use the commands from euca2ools such euca-describe-images, euca-describe-instances etc. these variables can be set by sourcing novarc file.</para>
1825-<para>In Diablo, by default novarc file contains EC2_ACCESS_KEY in a format that is not usable by euca-* commands. To fix this:</para>
1826-<programlisting>sudo nova-manage user exports novaadmin</programlisting>
1827-<para>The output will be something like:</para>
1828-<programlisting>
1829-export EC2_ACCESS_KEY=c043916c-9a0c-4f91-ad6c-4b30908b6c77
1830-export EC2_SECRET_KEY=d0ac688e-02f3-48f3-b758-96d886461ace
1831-</programlisting>
1832-<para>Open the novarc file and replace the line</para>
1833-<programlisting>export EC2_ACCESS_KEY="novaadmin:proj"</programlisting>
1834-<para>with</para>
1835-<programlisting>export EC2_ACCESS_KEY="c043916c-9a0c-4f91-ad6c-4b30908b6c77:proj"</programlisting>
1836-<programlisting>source /home/localadmin/creds/novarc
1837-</programlisting>
1838-<para>Check if the credentials are working and if nova has been setup properly by running:</para>
1839-<programlisting>euca-describe-availability-zones verbose
1840-</programlisting>
1841-<para>If you see something like the following with all components happy, it means that the set up is ready to be used.</para>
1842-<programlisting>
1843-AVAILABILITYZONE nova available
1844-AVAILABILITYZONE |- server1
1845-AVAILABILITYZONE | |- nova-compute enabled :-) 2011-09-29 07:26:04
1846-AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-09-29 07:26:04
1847-AVAILABILITYZONE | |- nova-network enabled :-) 2011-09-29 07:26:07
1848-AVAILABILITYZONE | |- nova-volume enabled :-) 2011-09-29 07:26:06
1849-</programlisting>
1850-</section>
1851-</section>
1852-<section xml:id="Swift_install">
1853+<para>Provide a range of IPs to be associated to the instances.</para>
1854+<programlisting>
1855+nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32
1856+</programlisting>
1857+<para>Export the following environment variables.</para>
1858+<programlisting>
1859+export OS_TENANT_NAME=admin
1860+export OS_USERNAME=admin
1861+export OS_PASSWORD=admin
1862+export OS_AUTH_URL="http://localhost:5000/v2.0/"
1863+</programlisting>
1864+<para>Restart nova services.</para>
1865+<programlisting>
1866+sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart nova-consoleauth;
1867+</programlisting>
1868+<para>To test if nova is setup correctly run the following command.</para>
1869+<programlisting>
1870+sudo nova-manage service list
1871+Binary Host Zone Status State Updated_At
1872+nova-network server1 nova enabled :-) 2012-04-20 08:58:43
1873+nova-scheduler server1 nova enabled :-) 2012-04-20 08:58:44
1874+nova-volume server1 nova enabled :-) 2012-04-20 08:58:44
1875+nova-compute server1 nova enabled :-) 2012-04-20 08:58:45
1876+nova-cert server1 nova enabled :-) 2012-04-20 08:58:43
1877+</programlisting>
1878+<para>If the output is similar to the above with all components happy, your setup is ready to be used.</para>
1879+</section>
1880+
1881+<section xml:id="Openstack_Dashboard-d2s740">
1882+<title>OpenStack Dashboard</title>
1883+<para>Install OpenStack Dashboard by executing the following command:</para>
1884+<programlisting>
1885+sudo apt-get install openstack-dashboard
1886+</programlisting>
1887+<para>Restart apache with the following command:</para>
1888+<programlisting>service apache2 restart</programlisting>
1889+<para>Open a browser and enter IP address of the server1. You should see the OpenStack Dashboard login prompt. Login with username 'admin' and password 'admin'. From the dashboard, you can create keypairs, create/edit security groups, raise new instances, attach volumes etc. which are explained in "OpenStack Dashboard" chapter.</para>
1890+</section>
1891+
1892+<section xml:id="Swift-d2s742">
1893 <title>Swift</title>
1894-<para>Install Swift via apt-get:</para>
1895-<programlisting>
1896-sudo apt-get install swift swift-proxy memcached swift-account swift-container swift-object
1897-</programlisting>
1898-<para>Install Swift via apt-get:</para>
1899-<programlisting>sudo apt-get install xfsprogs curl</programlisting>
1900-<section xml:id="Swift_configuration">
1901-<title>Swift Configuration</title>
1902-<para>There are two methods to configure the storage backend for use by Swift.</para>
1903-<section xml:id="Physical_device_as_storage">
1904-<title>Physical Device (Partition) as a storage</title>
1905-<para>A physical device is partitioned and used as storage. Assuming there is a secondary disk /dev/sdb :</para>
1906+<section xml:id="Swift_Installation-d2s744">
1907+<title>Swift Installation</title>
1908+<para>The primary components are the proxy, account, container and object servers.</para>
1909+<programlisting>
1910+sudo apt-get install swift swift-proxy swift-account swift-container swift-object
1911+</programlisting>
1912+<para>Other components that might be xfsprogs (for dealing with XFS filesystem), python.pastedeploy (for keystone access), curl (to test swift).</para>
1913+<programlisting>
1914+sudo apt-get install xfsprogs curl python-pastedeploy
1915+</programlisting>
1916+</section>
1917+<section xml:id="Swift_Storage_Backends-d2s746">
1918+<title>Swift Storage Backends</title>
1919+<para>There are two methods one can try to create/prepare the storage backend. One is to use an existing partition/volume as the storage device. The other is to create a loopback file and use it as the storage device. Use the appropriate method as per your setup.</para>
1920+<section xml:id="Partition_as_Storage-d2s748">
1921+<title>Partition as a storage device</title>
1922+<para>If you had set aside a partition for Swift during the installation of the OS, you can use it directly. If you have an unused/unpartitioned physical partition (e.g. /dev/sdb3), you have to format it to xfs filesystem using parted or fdisk and use it as the backend. You need to specify the mount point in /etc/fstab.</para>
1923+<programlisting>
1924+CAUTION: Replace /dev/sdb to your appropriate device. I'm assuming that there is an unused/un-formatted partition section in /dev/sdb
1925+</programlisting>
1926 <programlisting>
1927 sudo fdisk /dev/sdb
1928-</programlisting>
1929-<para>Press m for help; n for new partition; p to view the partition table; w to write changes to disk once you are done. You should now have a partiton /dev/sda1.</para>
1930+
1931+ Type n for new partition
1932+ Type e for extended partion
1933+ Choose appropriate partition number ( or go with the default )
1934+ Choose first and last sectors to set the hard disk size (or go with defaults)
1935+ Note that 83 is the partition type number for Linux
1936+ Type w to write changes to the disk
1937+</programlisting>
1938+<para>This would have created a partition (something like /dev/sdb3) that we can now format to XFS filesystem. Do 'sudo fdisk -l' in the terminal to view and verify the partion table. Find the partition Make sure that the one that you want to use is listed there. This would work only if you have xfsprogs installed.</para>
1939+<programlisting>
1940+sudo mkfs.xfs -i size=1024 /dev/sdb3
1941+sudo tune2fs -l /dev/sdb3 |grep -i inode
1942+</programlisting>
1943+<para>Create a directory /mnt/swift_backend that can be used as a mount point to the partion tha we created.</para>
1944+<programlisting>
1945+sudo mkdir /mnt/swift_backend
1946+</programlisting>
1947+<para>Now edit /etc/fstab and append the following line to mount the partition automatically everytime the system restarts.</para>
1948+<programlisting>
1949+/dev/sdb3 /mnt/swift_backend xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
1950+</programlisting>
1951 </section>
1952-<section xml:id="Loopback_device_as_storage">
1953-<title>Loopback Device (File) as storage</title>
1954-<para>We create a zero filled file for use as a loopback device for the Swift storage backend. Here we use the disk copy command to create a file named swift-disk and allocate a million 1KiB blocks (976.56 MiB) to it. So we have a loopback disk of approximately 1GiB. We can increase this size by modifying the seek value.</para>
1955+<section xml:id="Loopback_File_as_Storage-d2s748">
1956+<title>Loopback File as a storage device</title>
1957+<para>We create a zero filled file for use as a loopback device for the Swift storage backend. Here we use the disk copy command to create a file named swift-disk and allocate a million 1KiB blocks (976.56 MiB) to it. So we have a loopback disk of approximately 1GiB. We can increase this size by modifying the seek value. The disk is then formated to XFS filesystem. The file command can be used to verify if it worked.</para>
1958 <programlisting>
1959 sudo dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=1000000
1960-</programlisting>
1961-</section>
1962-<para>We now create an xfs filesystem out of the partition or the loopback device we just created. For the loopback file, doing "file swift-disk" will give the details of the device. For the partition details, tune2fs utility can be used with "l" parameter.</para>
1963-<para>For the physical partition:</para>
1964-<programlisting>
1965-sudo mkfs.xfs -i size=1024 /dev/sdb1
1966-sudo tune2fs -l /dev/sdb1 |grep -i inode
1967-</programlisting>
1968-<para> For the loopback file:</para>
1969-<programlisting>
1970 sudo mkfs.xfs -i size=1024 /srv/swift-disk
1971 file /srv/swift-disk
1972 swift-disk1: SGI XFS filesystem data (blksz 4096, inosz 1024, v2 dirs)
1973 </programlisting>
1974-
1975-<para>The storage device we created has to be mounted automatically everytime the system starts. Lets create an arbitrary mountpoint /mnt/sdb1.
1976-</para>
1977-<programlisting>
1978-sudo mkdir /mnt/sdb1
1979-</programlisting>
1980-<para>Edit /etc/fstab and append the following line:</para>
1981-<para>For the physical partiton</para>
1982-<programlisting>
1983-/dev/sdb1 /mnt/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0
1984-</programlisting>
1985-<para>If you have a loopback file</para>
1986-<programlisting>
1987-/srv/swift-disk /mnt/sdb1 xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0
1988-</programlisting>
1989-<para>Let's now mount the storage device and create directories (which would act as storage nodes) and provide appropriate permissions and ownerships (user:group format) for them. I have set the ownership to swift:swift for all relevant files.</para>
1990-<programlisting>
1991-sudo mount /mnt/sdb1
1992-sudo mkdir /mnt/sdb1/1 /mnt/sdb1/2 /mnt/sdb1/3 /mnt/sdb1/4
1993-sudo chown swift:swift /mnt/sdb1/*
1994-sudo ln -s /mnt/sdb1/1 /srv/1
1995-sudo ln -s /mnt/sdb1/2 /srv/2
1996-sudo ln -s /mnt/sdb1/3 /srv/3
1997-sudo ln -s /mnt/sdb1/4 /srv/4
1998-sudo mkdir -p /etc/swift/object-server /etc/swift/container-server /etc/swift/account-server /srv/1/node/sdb1 /srv/2/node/sdb2 /srv/3/node/sdb3 /srv/4/node/sdb4 /var/run/swift
1999-sudo chown -R swift:swift /etc/swift /srv/[1-4]/
2000-</programlisting>
2001-<para>Append the following lines to /etc/rc.local just before the "exit 0":</para>
2002-<programlisting>
2003-mkdir /var/run/swift
2004-chown swift:swift /var/run/swift
2005-</programlisting>
2006-</section>
2007-<section xml:id="Configuring_rsync">
2008-<title>Configuring Rsync</title>
2009-<para>Rsync is responsible for maintaining object replicas. It is used by various swift services to maintain consistency of objects and perform updation operations. It is configured for all the storage nodes.</para>
2010-<para>Create /etc/rsyncd.conf file and add the following lines to it:</para>
2011-<programlisting>
2012+<para>Create a directory /mnt/swift_backend that can be used as a mount point to the partion tha we created.</para>
2013+<programlisting>
2014+sudo mkdir /mnt/swift_backend
2015+</programlisting>
2016+<para>Make it mount on boot by appending this to /etc/fstab.</para>
2017+<programlisting>
2018+/srv/swift-disk /mnt/swift_backend xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0
2019+</programlisting>
2020+</section>
2021+<section xml:id="Using_the_backend-d2s750">
2022+<title>Using the backend</title>
2023+<para>Now before mounting the backend that will be used, create some nodes to be used as storage devices and set ownership to 'swift' user and group.</para>
2024+<programlisting>
2025+sudo mount /mnt/swift_backend
2026+pushd /mnt/swift_backend
2027+sudo mkdir node1 node2 node3 node4
2028+popd
2029+</programlisting>
2030+<programlisting>
2031+sudo chown swift.swift /mnt/swift_backend/*
2032+</programlisting>
2033+<programlisting>
2034+for i in {1..4}; do sudo ln -s /mnt/swift_backend/node$i /srv/node$i; done;
2035+</programlisting>
2036+<programlisting>
2037+sudo mkdir -p /etc/swift/account-server /etc/swift/container-server /etc/swift/object-server /srv/node1/device /srv/node2/device /srv/node3/device /srv/node4/device
2038+sudo mkdir /run/swift
2039+sudo chown -L -R swift.swift /etc/swift /srv/node[1-4]/ /run/swift
2040+</programlisting>
2041+<para>Append the following lines in /etc/rc.local just before "exit 0";. This will be run everytime the system starts.</para>
2042+<programlisting>
2043+mkdir /run/swift
2044+chown swift.swift /run/swift
2045+</programlisting>
2046+</section>
2047+</section>
2048+<section xml:id="Configure_Rsync-d2s750">
2049+<title>Configure Rsync</title>
2050+<para>Rsync is responsible for maintaining object replicas. It is used by various swift services to maintain consistency of objects and perform updation operations. It is configured for all the storage nodes.</para>
2051+<para>Set RSYNC_ENABLE=true in /etc/default/rsync.</para>
2052+<para>Modify /etc/rsyncd.conf as follows:</para>
2053+<programlisting>
2054+# General stuff
2055 uid = swift
2056 gid = swift
2057 log file = /var/log/rsyncd.log
2058-pid file = /var/run/rsyncd.pid
2059+pid file = /run/rsyncd.pid
2060 address = 127.0.0.1
2061
2062+# Account Server replication settings
2063+
2064 [account6012]
2065 max connections = 25
2066-path = /srv/1/node/
2067+path = /srv/node1/
2068 read only = false
2069-lock file = /var/lock/account6012.lock
2070+lock file = /run/lock/account6012.lock
2071
2072 [account6022]
2073 max connections = 25
2074-path = /srv/2/node/
2075+path = /srv/node2/
2076 read only = false
2077-lock file = /var/lock/account6022.lock
2078+lock file = /run/lock/account6022.lock
2079
2080 [account6032]
2081 max connections = 25
2082-path = /srv/3/node/
2083+path = /srv/node3/
2084 read only = false
2085-lock file = /var/lock/account6032.lock
2086+lock file = /run/lock/account6032.lock
2087
2088 [account6042]
2089 max connections = 25
2090-path = /srv/4/node/
2091+path = /srv/node4/
2092 read only = false
2093-lock file = /var/lock/account6042.lock
2094+lock file = /run/lock/account6042.lock
2095
2096+# Container server replication settings
2097
2098 [container6011]
2099 max connections = 25
2100-path = /srv/1/node/
2101+path = /srv/node1/
2102 read only = false
2103-lock file = /var/lock/container6011.lock
2104+lock file = /run/lock/container6011.lock
2105
2106 [container6021]
2107 max connections = 25
2108-path = /srv/2/node/
2109+path = /srv/node2/
2110 read only = false
2111-lock file = /var/lock/container6021.lock
2112+lock file = /run/lock/container6021.lock
2113
2114 [container6031]
2115 max connections = 25
2116-path = /srv/3/node/
2117+path = /srv/node3/
2118 read only = false
2119-lock file = /var/lock/container6031.lock
2120+lock file = /run/lock/container6031.lock
2121
2122 [container6041]
2123 max connections = 25
2124-path = /srv/4/node/
2125+path = /srv/node4/
2126 read only = false
2127-lock file = /var/lock/container6041.lock
2128+lock file = /run/lock/container6041.lock
2129
2130+# Object Server replication settings
2131
2132 [object6010]
2133 max connections = 25
2134-path = /srv/1/node/
2135+path = /srv/node1/
2136 read only = false
2137-lock file = /var/lock/object6010.lock
2138+lock file = /run/lock/object6010.lock
2139
2140 [object6020]
2141 max connections = 25
2142-path = /srv/2/node/
2143+path = /srv/node2/
2144 read only = false
2145-lock file = /var/lock/object6020.lock
2146+lock file = /run/lock/object6020.lock
2147
2148 [object6030]
2149 max connections = 25
2150-path = /srv/3/node/
2151+path = /srv/node3/
2152 read only = false
2153-lock file = /var/lock/object6030.lock
2154+lock file = /run/lock/object6030.lock
2155
2156 [object6040]
2157 max connections = 25
2158-path = /srv/4/node/
2159+path = /srv/node4/
2160 read only = false
2161-lock file = /var/lock/object6040.lock
2162+lock file = /run/lock/object6040.lock
2163 </programlisting>
2164-<para>Set RSYNC_ENABLE=true in /etc/default/rsync and then restart the rsync service.</para>
2165+<para>Restart rsync.</para>
2166 <programlisting>
2167-service rsync restart
2168+sudo service rsync restart
2169 </programlisting>
2170 </section>
2171-<section xml:id="Swift_hash_configuration">
2172-<title>Swift Configuration</title>
2173+<section xml:id="Configure_Swift_Components-d2s752">
2174+<title>Configure Swift Components</title>
2175+<para>General server configuration options can be found in http://swift.openstack.org/deployment_guide.html. If the swift-doc package is installed it can also be viewed in the /usr/share/doc/swift-doc/html directory. Python uses paste.deploy to manage configuration. Default configuration options are set in the [DEFAULT] section, and any options specified there can be overridden in any of the other sections BUT ONLY BY USING THE SYNTAX set option_name = value.</para>
2176+<para>Here is a sample paste.deploy configuration for reference:</para>
2177+<programlisting>
2178+[DEFAULT]
2179+name1 = globalvalue
2180+name2 = globalvalue
2181+name3 = globalvalue
2182+set name4 = globalvalue
2183+
2184+[pipeline:main]
2185+pipeline = myapp
2186+
2187+[app:myapp]
2188+use = egg:mypkg#myapp
2189+name2 = localvalue
2190+set name3 = localvalue
2191+set name5 = localvalue
2192+name6 = localvalue
2193+</programlisting>
2194 <para>Create and edit /etc/swift/swift.conf and add the following lines to it:</para>
2195 <programlisting>
2196 [swift-hash]
2197-# random unique (preferably alphanumeric) string that can never change (DO NOT LOSE)
2198-swift_hash_path_suffix = {place_random_unique_string_here}
2199+# random unique string that can never change (DO NOT LOSE). I'm using 03c9f48da2229770.
2200+# od -t x8 -N 8 -A n &lt; /dev/random
2201+# The above command can be used to generate random a string.
2202+swift_hash_path_suffix = 03c9f48da2229770
2203 </programlisting>
2204-<para>You will need the random string when you add more nodes to the setup. So never loose the string.</para>
2205+<para>You will need the random string when you add more nodes to the setup. So never lose the string.</para>
2206 <para>You can generate a random string by running the following command:</para>
2207 <programlisting>
2208 od -t x8 -N 8 -A n &lt; /dev/random
2209 </programlisting>
2210-</section>
2211-<section xml:id="Proxy_server_configuration">
2212-<title>Proxy Server Configuration</title>
2213-<para>Create and edit /etc/swift/proxy-server.conf and add the following lines to the file:</para>
2214+<section xml:id="Configure_Swift_Proxy_Server-d2s752">
2215+<title>Configure Swift Proxy Server</title>
2216+<para>Proxy server acts as the gatekeeper to swift. It takes the responsibility of authenticating the user. Authentication verifies that a request actually comes from who it says it does. Authorization verifies the ‘who’ has access to the resource(s) the request wants. Authorization is done by identity services like keystone. Create and edit /etc/swift/proxy-server.conf and add the following lines.</para>
2217 <programlisting>
2218 [DEFAULT]
2219 bind_port = 8080
2220 user = swift
2221-log_facility = LOG_LOCAL1
2222+swift_dir = /etc/swift
2223
2224 [pipeline:main]
2225-pipeline = healthcheck cache tempauth proxy-server
2226+# Order of execution of modules defined below
2227+pipeline = catch_errors healthcheck cache authtoken keystone proxy-server
2228
2229 [app:proxy-server]
2230 use = egg:swift#proxy
2231 allow_account_management = true
2232 account_autocreate = true
2233-
2234-[filter:tempauth]
2235-use = egg:swift#tempauth
2236-user_admin_admin = admin .admin .reseller_admin
2237-user_test_tester = testing .admin
2238+set log_name = swift-proxy
2239+set log_facility = LOG_LOCAL0
2240+set log_level = INFO
2241+set access_log_name = swift-proxy
2242+set access_log_facility = SYSLOG
2243+set access_log_level = INFO
2244+set log_headers = True
2245+account_autocreate = True
2246
2247 [filter:healthcheck]
2248 use = egg:swift#healthcheck
2249
2250+[filter:catch_errors]
2251+use = egg:swift#catch_errors
2252+
2253 [filter:cache]
2254 use = egg:swift#memcache
2255+set log_name = cache
2256+
2257+[filter:authtoken]
2258+paste.filter_factory = keystone.middleware.auth_token:filter_factory
2259+auth_protocol = http
2260+auth_host = 127.0.0.1
2261+auth_port = 35357
2262+auth_token = admin
2263+service_protocol = http
2264+service_host = 127.0.0.1
2265+service_port = 5000
2266+admin_token = admin
2267+admin_tenant_name = service
2268+admin_user = swift
2269+admin_password = swift
2270+delay_auth_decision = 0
2271+
2272+[filter:keystone]
2273+paste.filter_factory = keystone.middleware.swift_auth:filter_factory
2274+operator_roles = admin, swiftoperator
2275+is_admin = true
2276 </programlisting>
2277-<para>Note: You can find sample configuration files at the "etc" directory in the source. If you used apt-get to install swift, the configuration samples can be found at "/usr/share/doc/swift/"</para>
2278+<para>Note: You can find sample configuration files at the "etc" directory in the source. Some documentation can be found under "/usr/share/doc/swift-doc/html" if you had installed the swift-doc package using apt-get.</para>
2279 </section>
2280-<section xml:id="Account_server_configuration">
2281-<title>Account Server Configuration</title>
2282-<para>Create an account server configuration file for node #1: /etc/swift/account-server/1.conf and add the following lines to the file</para>
2283-<programlisting>
2284-[DEFAULT]
2285-devices = /srv/1/node
2286+<section xml:id="Configure_Swift_Account_Server-d2s752">
2287+<title>Configure Swift Account Server</title>
2288+<para>The default swift account server configuration is /etc/swift/account-server.conf.</para>
2289+<programlisting>
2290+[DEFAULT]
2291+bind_ip = 0.0.0.0
2292+workers = 2
2293+
2294+[pipeline:main]
2295+pipeline = account-server
2296+
2297+[app:account-server]
2298+use = egg:swift#account
2299+
2300+[account-replicator]
2301+
2302+[account-auditor]
2303+
2304+[account-reaper]
2305+</programlisting>
2306+<para>Account server configuration files are also looked up under /etc/swift/account-server.conf. Here we can create several account server configuration files each of which would correspond to a device under /srv. The files can be named 1.conf, 2.conf and so on. Here are the contents of /etc/swift/account-server/1.conf:</para>
2307+<programlisting>
2308+[DEFAULT]
2309+devices = /srv/node1
2310 mount_check = false
2311 bind_port = 6012
2312 user = swift
2313@@ -584,26 +840,46 @@
2314 use = egg:swift#account
2315
2316 [account-replicator]
2317-vm_test_mode = yes
2318+vm_test_mode = no
2319
2320 [account-auditor]
2321
2322 [account-reaper]
2323 </programlisting>
2324-<para>We need to create the configuration for the rest of the three virtual nodes (/srv/2/node, /srv/3/node, /srv/4/node ) as well. So we simply make three more copies of 1.conf and set unique bind ports for the rest of the nodes (6022. 6032 and 6042) and different local log values (LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5).</para>
2325+<para>For the other devices, (/srv/node2, /srv/node3, /srv/node4), we create 2.conf, 3.conf and 4.conf. So we make three more copies of 1.conf and set unique bind ports for the rest of the nodes (6022, 6032 and 6042) and different local log values (LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5).</para>
2326 <programlisting>
2327 sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/2.conf
2328 sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/3.conf
2329 sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/4.conf
2330+sudo sed -i 's/6012/6022/g;s/LOCAL2/LOCAL3/g;s/node1/node2/g' /etc/swift/account-server/2.conf
2331+sudo sed -i 's/6012/6032/g;s/LOCAL2/LOCAL4/g;s/node1/node3/g' /etc/swift/account-server/3.conf
2332+sudo sed -i 's/6012/6042/g;s/LOCAL2/LOCAL5/g;s/node1/node4/g' /etc/swift/account-server/4.conf
2333 </programlisting>
2334-<para>Now we need to edit the files 2.conf, etc. created by the above command and edit the bind port number and local log values.</para>
2335 </section>
2336-<section xml:id="Container_server_configuration">
2337-<title>Container Server Configuration</title>
2338-<para>Create a container server configuration file for node #1: /etc/swift/container-server/1.conf and add the following lines to the file</para>
2339-<programlisting>
2340-[DEFAULT]
2341-devices = /srv/1/node
2342+<section xml:id="Configure_Swift_Container_Server-d2s754">
2343+<title>Configure Swift Container Server</title>
2344+<para>The default swift container server configuration is /etc/swift/container-server.conf.</para>
2345+<programlisting>
2346+[DEFAULT]
2347+bind_ip = 0.0.0.0
2348+workers = 2
2349+
2350+[pipeline:main]
2351+pipeline = container-server
2352+
2353+[app:container-server]
2354+use = egg:swift#container
2355+
2356+[container-replicator]
2357+
2358+[container-updater]
2359+
2360+[container-auditor]
2361+</programlisting>
2362+<para>Container server configuration files are also looked up under /etc/swift/container-server.conf. Here we can create several container server configuration files each of which would correspond to a device under /srv. The files can be named 1.conf, 2.conf and so on. Here are the contents of /etc/swift/container-server/1.conf:</para>
2363+<programlisting>
2364+[DEFAULT]
2365+devices = /srv/node1
2366 mount_check = false
2367 bind_port = 6011
2368 user = swift
2369@@ -616,28 +892,39 @@
2370 use = egg:swift#container
2371
2372 [container-replicator]
2373-vm_test_mode = yes
2374+vm_test_mode = no
2375
2376 [container-updater]
2377
2378 [container-auditor]
2379-
2380 [container-sync]
2381 </programlisting>
2382-<para>We need to create the configuration for the rest of the three virtual nodes (/srv/2/node, /srv/3/node, /srv/4/node ) as well. So we simply make three more copies of 1.conf and set unique bind ports for the rest of the nodes (6021, 6031 and 6041) and different local log values (LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5).</para>
2383-<programlisting>
2384-sudo cp /etc/swift/container-server/1.conf /etc/swift/container-server/2.conf
2385-sudo cp /etc/swift/container-server/1.conf /etc/swift/container-server/3.conf
2386-sudo cp /etc/swift/container-server/1.conf /etc/swift/container-server/4.conf
2387-</programlisting>
2388-<para>Now we need to edit the files 2.conf, etc. created by the above command and edit the bind port number and local log values.</para>
2389+<para>For the other devices, (/srv/node2, /srv/node3, /srv/node4), we create 2.conf, 3.conf and 4.conf. So we make three more copies of 1.conf and set unique bind ports for the rest of the nodes (6021, 6031 and 6041) and different local log values (LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5).</para>
2390 </section>
2391-<section xml:id="Object_server_configuration">
2392-<title>Object Server Configuration</title>
2393-<para>Create an object server configuration file for node #1: /etc/swift/object-server/1.conf and add the following lines to the file</para>
2394-<programlisting>
2395-[DEFAULT]
2396-devices = /srv/1/node
2397+<section xml:id="Configure_Swift_Object_Server-d2s756">
2398+<title>Configure Swift Object Server</title>
2399+<para>The default swift object server configuration is /etc/swift/object-server.conf.</para>
2400+<programlisting>
2401+[DEFAULT]
2402+bind_ip = 0.0.0.0
2403+workers = 2
2404+
2405+[pipeline:main]
2406+pipeline = object-server
2407+
2408+[app:object-server]
2409+use = egg:swift#object
2410+
2411+[object-replicator]
2412+
2413+[object-updater]
2414+
2415+[object-auditor]
2416+</programlisting>
2417+<para>Object server configuration files are also looked up under /etc/swift/object-server.conf. Here we can create several object server configuration files each of which would correspond to a device under /srv. The files can be named 1.conf, 2.conf and so on. Here are the contents of /etc/swift/object-server/1.conf:</para>
2418+<programlisting>
2419+[DEFAULT]
2420+devices = /srv/node1
2421 mount_check = false
2422 bind_port = 6010
2423 user = swift
2424@@ -650,123 +937,90 @@
2425 use = egg:swift#object
2426
2427 [object-replicator]
2428-vm_test_mode = yes
2429+vm_test_mode = no
2430
2431 [object-updater]
2432
2433 [object-auditor]
2434 </programlisting>
2435-<para>We need to create the configuration for the rest of the three virtual nodes (/srv/2/node, /srv/3/node, /srv/4/node ) as well. So we simply make three more copies of 1.conf and set unique bind ports for the rest of the nodes (6020, 6030 and 6040) and different local log values (LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5).</para>
2436-<programlisting>
2437-sudo cp /etc/swift/object-server/1.conf /etc/swift/object-server/2.conf
2438-sudo cp /etc/swift/object-server/1.conf /etc/swift/object-server/3.conf
2439-sudo cp /etc/swift/object-server/1.conf /etc/swift/object-server/4.conf
2440-</programlisting>
2441-<para>Now we need to edit the files 2.conf, etc. created by the above command and edit the bind port number and local log values.</para>
2442+<para>For the other devices, (/srv/node2, /srv/node3, /srv/node4), we create 2.conf, 3.conf and 4.conf. So we make three more copies of 1.conf and set unique bind ports for the rest of the nodes (6020, 6030 and 6040) and different local log values (LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5).</para>
2443 </section>
2444-<section xml:id="Building_the_rings">
2445-<title>Building the rings</title>
2446-<para>Rings are important components of Swift. Run the following commands in the same order for building the rings:</para>
2447+<section xml:id="Configure_Swift_Rings-d2s758">
2448+<title>Configure Swift Rings</title>
2449+<para>Ring is an important component of swift. It maintains the information about the physical location of objects, their replicas and devices. We now create the ring builder files corresponding to object service, container service and account service.</para>
2450+<para>NOTE: We need to be in the /etc/swift directory when executing the following commands.</para>
2451 <programlisting>
2452 pushd /etc/swift
2453 sudo swift-ring-builder object.builder create 18 3 1
2454-sudo swift-ring-builder object.builder add z1-127.0.0.1:6010/sdb1 1
2455-sudo swift-ring-builder object.builder add z2-127.0.0.1:6020/sdb2 1
2456-sudo swift-ring-builder object.builder add z3-127.0.0.1:6030/sdb3 1
2457-sudo swift-ring-builder object.builder add z4-127.0.0.1:6040/sdb4 1
2458+sudo swift-ring-builder container.builder create 18 3 1
2459+sudo swift-ring-builder account.builder create 18 3 1
2460+</programlisting>
2461+<para>The numbers indicate the desired number of partitions, replicas and the time in hours to restrict moving a partition more than once. See the man page for swift-ring-builder for more information.</para>
2462+<para>Now we add zones and balance the rings. The syntax is as follows:</para>
2463+<programlisting>
2464+swift-ring-builder &lt;builder_file&gt; add &lt;zone&gt;-&lt;ip_address&gt;:&lt;port&gt;/&lt;device&gt; &lt;weight&gt;
2465+</programlisting>
2466+<para>Execute the following commands to add the zones and rebalance the ring.</para>
2467+<programlisting>
2468+sudo swift-ring-builder object.builder add z1-127.0.0.1:6010/device 1
2469+sudo swift-ring-builder object.builder add z2-127.0.0.1:6020/device 1
2470+sudo swift-ring-builder object.builder add z3-127.0.0.1:6030/device 1
2471+sudo swift-ring-builder object.builder add z4-127.0.0.1:6040/device 1
2472 sudo swift-ring-builder object.builder rebalance
2473-sudo swift-ring-builder container.builder create 18 3 1
2474-sudo swift-ring-builder container.builder add z1-127.0.0.1:6011/sdb1 1
2475-sudo swift-ring-builder container.builder add z2-127.0.0.1:6021/sdb2 1
2476-sudo swift-ring-builder container.builder add z3-127.0.0.1:6031/sdb3 1
2477-sudo swift-ring-builder container.builder add z4-127.0.0.1:6041/sdb4 1
2478+sudo swift-ring-builder container.builder add z1-127.0.0.1:6011/device 1
2479+sudo swift-ring-builder container.builder add z2-127.0.0.1:6021/device 1
2480+sudo swift-ring-builder container.builder add z3-127.0.0.1:6031/device 1
2481+sudo swift-ring-builder container.builder add z4-127.0.0.1:6041/device 1
2482 sudo swift-ring-builder container.builder rebalance
2483-sudo swift-ring-builder account.builder create 18 3 1
2484-sudo swift-ring-builder account.builder add z1-127.0.0.1:6012/sdb1 1
2485-sudo swift-ring-builder account.builder add z2-127.0.0.1:6022/sdb2 1
2486-sudo swift-ring-builder account.builder add z3-127.0.0.1:6032/sdb3 1
2487-sudo swift-ring-builder account.builder add z4-127.0.0.1:6042/sdb4 1
2488+sudo swift-ring-builder account.builder add z1-127.0.0.1:6012/device 1
2489+sudo swift-ring-builder account.builder add z2-127.0.0.1:6022/device 1
2490+sudo swift-ring-builder account.builder add z3-127.0.0.1:6032/device 1
2491+sudo swift-ring-builder account.builder add z4-127.0.0.1:6042/device 1
2492 sudo swift-ring-builder account.builder rebalance
2493 </programlisting>
2494 </section>
2495-<section xml:id="Running_Swift_services">
2496-<title>Running_Swift_Services</title>
2497+</section>
2498+<section xml:id="Starting_Swift_services-d2s760">
2499+<title>Starting Swift services</title>
2500+<para>To start swift and the REST API, run the following commands.</para>
2501 <programlisting>
2502 sudo swift-init main start
2503-</programlisting>
2504-<para>To start the REST API do the following:</para>
2505-<programlisting>
2506 sudo swift-init rest start
2507 </programlisting>
2508 </section>
2509-<section xml:id="Testing_Swift">
2510+<section xml:id="Testing_Swift-d2s762">
2511 <title>Testing Swift</title>
2512-<para>As normal user, execute the following command</para>
2513-<programlisting>
2514-curl -v -H 'X-Storage-User: admin:admin' -H 'X-Storage-Pass: admin' http://127.0.0.1:8080/auth/v1.0
2515-</programlisting>
2516-<para>The output should look like:</para>
2517-<programlisting>
2518-* About to connect() to 127.0.0.1 port 8080 (#0)
2519-* Trying 127.0.0.1... connected
2520-* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
2521-&gt; GET /auth/v1.0 HTTP/1.1
2522-&gt; User-Agent: curl/7.21.6 (i686-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3
2523-&gt; Host: 127.0.0.1:8080
2524-&gt; Accept: */*
2525-&gt; X-Storage-User: admin:admin
2526-&gt; X-Storage-Pass: admin
2527-&gt;
2528-&lt; HTTP/1.1 200 OK
2529-&lt; X-Storage-Url: http://127.0.0.1:8080/v1/AUTH_admin
2530-&lt; X-Storage-Token: AUTH_tk441617bc550f4bb7bf51b4dc16800900
2531-&lt; X-Auth-Token: AUTH_tk441617bc550f4bb7bf51b4dc16800900
2532-&lt; Content-Length: 0
2533-&lt; Date: Fri, 14 Oct 2011 15:25:15 GMT
2534-&lt;
2535-* Connection #0 to host 127.0.0.1 left intact
2536-* Closing connection #0
2537-</programlisting>
2538-<para>If the above command did not throw any error and gave you an output similar to the one above, then the user accounts are being authenticated fine. Make note of the X-Auth-Token and the X-Storage-Url. Then give the following command to check if you can perform a GET operation successfully:</para>
2539-<programlisting>
2540-curl -v -H 'X-Auth-Token: AUTH_tk441617bc550f4bb7bf51b4dc16800900' http://127.0.0.1:8080/v1/AUTH_admin
2541-</programlisting>
2542-<para>The output should be similar as follows:</para>
2543-<programlisting>
2544-* About to connect() to 127.0.0.1 port 8080 (#0)
2545-* Trying 127.0.0.1... connected
2546-* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
2547-&gt; GET /v1/AUTH_admin HTTP/1.1
2548-&gt; User-Agent: curl/7.21.6 (i686-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3
2549-&gt; Host: 127.0.0.1:8080
2550-&gt; Accept: */*
2551-&gt; X-Auth-Token: AUTH_tk441617bc550f4bb7bf51b4dc16800900
2552-&gt;
2553-&lt; HTTP/1.1 204 No Content
2554-&lt; X-Account-Object-Count: 0
2555-&lt; X-Account-Bytes-Used: 0
2556-&lt; X-Account-Container-Count: 0
2557-&lt; Accept-Ranges: bytes
2558-&lt; Content-Length: 0
2559-&lt; Date: Fri, 14 Oct 2011 15:28:15 GMT
2560-&lt;
2561-* Connection #0 to host 127.0.0.1 left intact
2562-* Closing connection #0
2563-</programlisting>
2564-</section>
2565-</section>
2566-</section>
2567-<section xml:id="Server_2-d1e1059">
2568+<para>Swift can be tested using the swift command or the dashboard web interface (Horizon). Firstly, make sure that the ownership for /etc/swift directory is set to swift.swift.</para>
2569+<programlisting>
2570+sudo chown -R swift.swift /etc/swift
2571+</programlisting>
2572+<para>Then run the following command and verify if you get the appropriate account information. The number of containers and objects stored within are displayed as well.</para>
2573+<programlisting>
2574+swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swift -K swift stat
2575+StorageURL: http://127.0.0.1:8080/v1/AUTH_c7970080576646c6959ee35970cf3199
2576+Auth Token: ba9df200a92d4a5088dcd6b7dcc19c0d
2577+ Account: AUTH_c7970080576646c6959ee35970cf3199
2578+Containers: 1
2579+ Objects: 1
2580+ Bytes: 77
2581+Accept-Ranges: bytes
2582+X-Trans-Id: tx11c64e218f984749bc3ec37ea46280ee
2583+</programlisting>
2584+</section>
2585+</section>
2586+</section>
2587+
2588+<section xml:id="Server_2-d2s762">
2589 <title>Server2</title>
2590- <para>This server runs nova-compute and all the virtual machines and hypervisor. You can also bundle images on Server2.</para>
2591+<para>This server runs only nova-compute service.</para>
2592 <section xml:id="BaseOS-d1e1064">
2593 <title>BaseOS</title>
2594-<para>Install 64-bit version of Oneiric Server</para>
2595+<para>Install 64 bit version of Ubuntu server 12.04</para>
2596 </section>
2597-<section xml:id="Networking_Configuration-d1e1073">
2598-<title>Networking Configuration</title>
2599+<section xml:id="Network_Configuration-d1e1073">
2600+<title>Network Configuration</title>
2601 <para>Install bridge-utils:</para>
2602-<programlisting>sudo apt-get install -y bridge-utils</programlisting>
2603+<programlisting>sudo apt-get install bridge-utils</programlisting>
2604 <para>Edit the /etc/network/interfaces file so as to looks like this:</para>
2605 <programlisting>
2606 auto lo
2607@@ -778,7 +1032,7 @@
2608 netmask 255.255.255.0
2609 broadcast 10.10.10.255
2610 gateway 10.10.10.1
2611- dns-nameservers 10.10.10.100
2612+ dns-nameservers 10.10.8.3
2613
2614 auto eth1
2615 iface eth1 inet static
2616@@ -787,129 +1041,182 @@
2617 network 192.168.3.0
2618 broadcast 192.168.3.255
2619 </programlisting>
2620-<para>Restart the network now</para>
2621+<para>Restart the network.</para>
2622 <programlisting>sudo /etc/init.d/networking restart</programlisting>
2623 </section>
2624 <section xml:id="NTP_Client-d1e1098">
2625 <title>NTP Client</title>
2626 <para>Install NTP package.</para>
2627-<programlisting>sudo apt-get install -y ntp</programlisting>
2628+<programlisting>sudo apt-get install ntp</programlisting>
2629 <para>Open the file /etc/ntp.conf and add the following line to sync to server1.</para>
2630 <programlisting>server 10.10.10.2</programlisting>
2631 <para>Restart NTP service to make the changes effective</para>
2632-<programlisting>sudo /etc/init.d/ntp restart</programlisting>
2633+<programlisting>sudo service ntp restart</programlisting>
2634 </section>
2635 <section xml:id="Nova_Components_nova-compute_alone_-d1e1123">
2636 <title>Nova Components (nova-compute alone)</title>
2637 <para>Install the nova-components and dependencies.</para>
2638 <programlisting>
2639-sudo apt-get install -y nova-common python-nova nova-compute vlan
2640-</programlisting>
2641-<para>Install euca tools, for command line tools</para>
2642-<programlisting>sudo apt-get install -y euca2ools</programlisting>
2643-<para>Install unzip for extracting archives</para>
2644-<programlisting>
2645-sudo apt-get install -y unzip
2646-</programlisting>
2647-<para>Edit the /etc/nova/nova.conf file to look like this. This file is essentially similar to the configuration file (/etc/nova/nova.conf) of Server1</para>
2648+sudo apt-get install nova-compute
2649+</programlisting>
2650+<para>Edit the /etc/nova/nova.conf file to look like this. This file is identical to the configuration file (/etc/nova/nova.conf) of Server1</para>
2651 <programlisting>
2652 --dhcpbridge_flagfile=/etc/nova/nova.conf
2653 --dhcpbridge=/usr/bin/nova-dhcpbridge
2654 --logdir=/var/log/nova
2655 --state_path=/var/lib/nova
2656---lock_path=/var/lock/nova
2657---state_path=/var/lib/nova
2658---verbose
2659+--lock_path=/run/lock/nova
2660+--allow_admin_api=true
2661+--use_deprecated_auth=false
2662+--auth_strategy=keystone
2663+--scheduler_driver=nova.scheduler.simple.SimpleScheduler
2664 --s3_host=10.10.10.2
2665+--ec2_host=10.10.10.2
2666 --rabbit_host=10.10.10.2
2667 --cc_host=10.10.10.2
2668---ec2_url=http://10.10.10.2:8773/services/Cloud
2669---network_size=8
2670---FAKE_subdomain=ec2
2671+--nova_url=http://10.10.10.2:8774/v1.1/
2672 --routing_source_ip=10.10.10.2
2673+--glance_api_servers=10.10.10.2:9292
2674+--image_service=nova.image.glance.GlanceImageService
2675+--iscsi_ip_prefix=192.168.4
2676 --sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova
2677---glance_api_servers=192.168.3.1:9292
2678---image_service=nova.image.glance.GlanceImageService
2679---iscsi_ip_prefix=192.168.
2680---vlan_interface=eth1
2681+--ec2_url=http://10.10.10.2:8773/services/Cloud
2682+--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens
2683+--api_paste_config=/etc/nova/api-paste.ini
2684+--libvirt_type=kvm
2685+--libvirt_use_virtio_for_bridges=true
2686+--start_guests_on_host_boot=true
2687+--resume_guests_state_on_host_boot=true
2688+# vnc specific configuration
2689+--novnc_enabled=true
2690+--novncproxy_base_url=http://10.10.10.2:6080/vnc_auto.html
2691+--vncserver_proxyclient_address=10.10.10.2
2692+--vncserver_listen=10.10.10.2
2693+# network specific settings
2694+--network_manager=nova.network.manager.FlatDHCPManager
2695+--public_interface=eth0
2696+--flat_interface=eth1
2697+--flat_network_bridge=br100
2698+--fixed_range=192.168.4.1/27
2699+--floating_range=10.10.10.2/27
2700+--network_size=32
2701+--flat_network_dhcp_start=192.168.4.33
2702+--flat_injected=False
2703+--force_dhcp_release
2704+--iscsi_helper=tgtadm
2705+--connection_type=libvirt
2706+--root_helper=sudo nova-rootwrap
2707+--verbose
2708 </programlisting>
2709 <para>Restart nova-compute on Server2.</para>
2710 <programlisting>sudo service restart nova-compute</programlisting>
2711-<para>On Server1, check if the second compute node (Server2) is detected by running:</para>
2712-<programlisting>euca-describe-availability-zones verbose</programlisting>
2713-<para>If you see something like the following with all components happy, it means that the set up is ready to be used.</para>
2714+<para>Check if the second compute node (Server2) is detected by running:</para>
2715+<programlisting>sudo nova-manage service list</programlisting>
2716+<para>If you see an output similar to the following, it means that the set up is ready to be used.</para>
2717 <programlisting>
2718-AVAILABILITYZONE nova available
2719-AVAILABILITYZONE |- server1
2720-AVAILABILITYZONE | |- nova-compute enabled :-) 2011-09-30 09:26:04
2721-AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-09-30 09:26:04
2722-AVAILABILITYZONE | |- nova-network enabled :-) 2011-09-30 09:26:07
2723-AVAILABILITYZONE | |- nova-volume enabled :-) 2011-09-30 09:26:06
2724-AVAILABILITYZONE |- server2
2725-AVAILABILITYZONE | |- nova-compute enabled :-) 2011-09-30 09:26:05
2726+sudo nova-manage service list
2727+Binary Host Zone Status State Updated_At
2728+nova-network server1 nova enabled :-) 2012-04-20 08:58:43
2729+nova-scheduler server1 nova enabled :-) 2012-04-20 08:58:44
2730+nova-volume server1 nova enabled :-) 2012-04-20 08:58:44
2731+nova-compute server1 nova enabled :-) 2012-04-20 08:58:45
2732+nova-cert server1 nova enabled :-) 2012-04-20 08:58:43
2733+nova-compute server2 nova enabled :-) 2012-04-21 10:22:27
2734 </programlisting>
2735-<para>Sometimes you may have XXX instead of the smiley. The XXX are displayed when the components are not time-synced. Ensure time synchronization across all components of your OpenStack deployment.</para>
2736-</section>
2737-</section>
2738-<section xml:id="Client1-d1e1155">
2739-<title>Client1</title>
2740-<section xml:id="BaseOS-d1e1160">
2741-<title>BaseOS</title>
2742-<para>Install 64-bit version of Oneiric Desktop</para>
2743-</section>
2744-<section xml:id="Networking_Configuration-d1e1169">
2745-<title>Networking Configuration</title>
2746-<para>Edit the /etc/network/interfaces file so as to looks like this:</para>
2747-<programlisting>
2748+</section>
2749+</section>
2750+
2751+ <section xml:id="Client1-d1e1155">
2752+ <title>Client1</title>
2753+ <section xml:id="BaseOS-d1e1160">
2754+ <title>BaseOS</title>
2755+ <para>Install 64-bit version of Ubuntu 12.04 Desktop</para>
2756+ </section>
2757+ <section xml:id="Networking_Configuration-d1e1169">
2758+ <title>Networking Configuration</title>
2759+ <para>Edit the /etc/network/interfaces file so as to looks
2760+ like this:</para>
2761+ <programlisting>
2762 auto lo
2763- iface lo inet loopback
2764+ iface lo inet loopback
2765 auto eth0
2766- iface eth0 inet static
2767- address 10.10.10.4
2768- netmask 255.255.255.0
2769- broadcast 10.10.10.255
2770- gateway 10.10.10.1
2771- dns-nameservers 10.10.10.100
2772-</programlisting>
2773-</section>
2774-<section xml:id="NTP_Client-d1e1181">
2775-<title>NTP Client</title>
2776-<para>Install NTP package.</para>
2777-<programlisting>sudo apt-get install -y ntp
2778-</programlisting>
2779-<para>Open the file /etc/ntp.conf and add the following line to sync to server1.</para>
2780-<programlisting>
2781+ iface eth0 inet static
2782+ address 10.10.10.4
2783+ netmask 255.255.255.0
2784+ broadcast 10.10.10.255
2785+ gateway 10.10.10.1
2786+ dns-nameservers 10.10.8.3
2787+</programlisting>
2788+ </section>
2789+
2790+ <section xml:id="NTP_Client-d1e1181">
2791+ <title>NTP Client</title>
2792+ <para>Install NTP package.</para>
2793+ <programlisting>sudo apt-get install -y ntp
2794+</programlisting>
2795+ <para>Open the file /etc/ntp.conf and add the following line
2796+ to sync to server1.</para>
2797+ <programlisting>
2798 server 10.10.10.2
2799 </programlisting>
2800-<para>Restart NTP service to make the changes effective</para>
2801-<programlisting>
2802-sudo /etc/init.d/ntp restart
2803-</programlisting>
2804-</section>
2805-<section xml:id="Client_Tools-d1e1206">
2806-<title>Client Tools</title>
2807-<para>As mentioned above, this is a desktop installation of Oneiric to be used for tasks such as bundling of images. It will also be used for managing the cloud infrastructure using euca2ools.</para>
2808-<para>Install euca tools, for command line tools</para>
2809-<programlisting>sudo apt-get install -y euca2ools</programlisting>
2810-<para>Install qemu-kvm</para>
2811-<programlisting>sudo apt-get install -y qemu-kvm</programlisting>
2812-<para>Download the credentials we created for localadmin to this machine:</para>
2813-<programlisting>
2814-mkdir /home/localadmin/creds
2815-cd /home/localadmin/creds
2816-scp localadmin@10.10.10.2:/home/localadmin/creds/novacreds.zip .
2817-unzip creds.zip
2818-</programlisting>
2819-<para>Source novarc file and see if connectivity to api server is working correctly:</para>
2820-<programlisting>
2821-source novarc
2822-euca-describe-availability-zones verbose
2823-</programlisting>
2824-<para>The output should be similar to what is shown above in the configuration section for Server1.</para>
2825-<para>Note: If you want to avoid manually sourcing the novarc file every time, the user can add the following line to the .profile file in his home directory:</para>
2826-<programlisting>
2827-source /home/localadmin/creds/novarc
2828-</programlisting>
2829-</section>
2830-</section>
2831-</chapter>
2832\ No newline at end of file
2833+ <para>Restart NTP service to make the changes effective</para>
2834+ <programlisting>
2835+sudo service ntp restart
2836+</programlisting>
2837+ </section>
2838+ <section xml:id="Client_Tools-d1e1206">
2839+ <title>Client Tools</title>
2840+ <para>As mentioned above, this is a desktop installation of
2841+ Ubuntu 12.04 to be used for tasks such as bundling of
2842+ images. It will also be used for managing the cloud
2843+ infrastructure using nova, glance and swift commandline
2844+ tools.</para>
2845+ <para>Install the required command line tools with the
2846+ following command:</para>
2847+ <programlisting>sudo apt-get install python-novaclient glance-client swift</programlisting>
2848+ <para>Install qemu-kvm</para>
2849+ <programlisting>sudo apt-get install qemu-kvm</programlisting>
2850+ <para>Export the following environment variables or add them
2851+ to your ~/.bashrc.</para>
2852+ <programlisting>
2853+export SERVICE_TOKEN=admin
2854+export OS_TENANT_NAME=admin
2855+export OS_USERNAME=admin
2856+export OS_PASSWORD=admin
2857+export OS_AUTH_URL="http://10.10.10.2:5000/v2.0/"
2858+export SERVICE_ENDPOINT=http://10.10.10.2:35357/v2.0
2859+</programlisting>
2860+ <para>Execute nova and glance commands to check the
2861+ connectivity to OpenStack setup.</para>
2862+ <programlisting>
2863+nova list
2864++--------------------------------------+------------+--------+----------------------+
2865+| ID | Name | Status | Networks |
2866++--------------------------------------+------------+--------+----------------------+
2867+| 25ee9230-6bb5-4eca-8808-e6b4e0348362 | myinstance | ACTIVE | private=192.168.4.35 |
2868+| c939cb2c-e662-46e5-bc31-453007442cf9 | myinstance1| ACTIVE | private=192.168.4.36 |
2869++--------------------------------------+------------+--------+----------------------+
2870+</programlisting>
2871+ <programlisting>
2872+glance index
2873+ID Name Disk Container Size
2874+ Format Format
2875+------------------------------------ ------------------------------ ----------------
2876+65b9f8e1-cde8-40e7-93e3-0866becfb9d4 windows qcow2 ovf 7580745728
2877+f147e666-990c-47e2-9caa-a5a21470cc4e debian qcow2 ovf 932904960
2878+f3a8e689-02ed-460f-a587-dc868576228f opensuse qcow2 ovf 1072300032
2879+aa362fd9-7c28-480b-845c-85a5c38ccd86 centoscli qcow2 ovf 1611530240
2880+49f0ec2b-26dd-4644-adcc-2ce047e281c5 ubuntuimage qcow2 ovf 1471807488
2881+</programlisting>
2882+ </section>
2883+ <section xml:id="Dashboard-d1e1208">
2884+ <title>OpenStack Dashboard</title>
2885+ <para>Start a browser and type the ip address of Server1 i.e,
2886+ http://10.10.10.2. You should see the dashboard login
2887+ screen. Login with the credentials username - admin and
2888+ password - admin to manage the OpenStack setup.</para>
2889+ </section>
2890+ </section>
2891+</section>
2892+</chapter>
2893+
2894
2895=== modified file 'Instance.xml'
2896--- Instance.xml 2011-10-19 14:27:25 +0000
2897+++ Instance.xml 2012-05-09 21:52:21 +0000
2898@@ -3,14 +3,14 @@
2899 <section xml:id="Introduction-d1e1651">
2900 <title>Introduction</title>
2901 <para>An instance is a virtual machine provisioned by OpenStack on one of the nova-compute servers.
2902-When you launch an instance, a series of steps are triggered on various components of the OpenStack.
2903+When you launch an instance, a series of actions is triggered on various components of the OpenStack.
2904 During the life cycles of an instance, it moves through various stages as shown in the diagram below:
2905 </para>
2906 <para>
2907 <mediaobject>
2908 <imageobject role="fo">
2909 <imagedata fileref="images/lifecycle.png"
2910- format="PNG" scale="60"/>
2911+ format="PNG" scale="15"/>
2912 </imageobject>
2913 <imageobject role="html">
2914 <imagedata fileref="images/lifecyclehtml.png"
2915@@ -19,93 +19,120 @@
2916 </mediaobject></para>
2917 <para>The following interfaces can be used for managing instances in nova.</para>
2918 <itemizedlist>
2919-<listitem><para>Command line tools like euca2ools</para></listitem>
2920+<listitem><para>Nova commands</para></listitem>
2921+<listitem><para>Custom applications developed using Nova APIs</para></listitem>
2922 <listitem><para>Custom applications developed using EC2 APIs</para></listitem>
2923 </itemizedlist>
2924 </section>
2925-<section xml:id="Euca2ools-Command_Line_Tools-d1e1828">
2926-<title>Euca2ools-Command Line Tools</title>
2927-<para>Euca2ools from Eucalyptus provide a bunch of command line tools to manage the eucalyptus setup. These commands help you manage images, instances, storage, networking etc. A few commands related to managing the instances are given below.</para>
2928-<para>For a complete list of commands, see Appendix.</para>
2929-<section xml:id="Installation-d1e1839">
2930-
2931-<title>Installation</title>
2932-
2933-<programlisting>
2934-sudo apt-get install euca2ools
2935-</programlisting>
2936-</section>
2937+<section xml:id="OpenStack-Command_Line_Tools-d1e1828">
2938+<title>Openstack Command Line Tools</title>
2939+<para>Nova has a bunch of command line tools to manage the OpenStack setup. These commands help you manage images, instances, storage, networking etc. A few commands related to managing the instances are given below.</para>
2940+
2941
2942 <section xml:id="Creation_of_Key_Pairs-d1e1848">
2943 <title>Creation of Key Pairs</title>
2944-<para>OpenStack expects the client tools to use 2 kinds of credentials. One set of credentials are called Access Key and Secret Key that all clients would need to use to make any requests to the Cloud Controller. Each user registered on the web interface has this set created for him. You can download it from the web interface as mentioned in the chapter on "Web Interface".</para>
2945+<para>OpenStack services are authenticated and authorized against keystone identity server. Keystone provides a token and a service catolog containing information about the endpoints of services to which a user is authorized. Each user has a token and service catalog created for them. This can be downloaded from the OpenStack Dashboard.</para>
2946
2947-<para>You will also need to generate a keypair consisting of private key/public key to be able to launch instances on Eucalyptus. These keys are injected into the instances to make password-less SSH access to the instance possible. This depends on the way the necessary tools are bundled into the images. Please refer to the chapter on Image Management for more details. </para>
2948+<para>You will also need to generate a keypair consisting of private key/public key to be able to launch instances on OpenStack. These keys are injected into the instances to make password-less SSH access to the instance. This depends on the way the necessary tools are bundled into the images. Please refer to the chapter on "Image Management" for more details. </para>
2949
2950 <para>Keypairs can also be generated using the following commands.</para>
2951 <programlisting>
2952-cd ~/creds
2953-euca-add-keypair mykey &gt; mykey.priv
2954-chmod 600 mykey.priv
2955+ssh-keygen
2956+cd .ssh
2957+nova keypair-add --pub_key id_rsa.pub mykey
2958 </programlisting>
2959-<para>This creates a new keypair called mykey. The private key mykey.priv is saved locally which can be used to connect to an instance launched with mykey as the keypair. euca-describe-keypairs command to list the available keypairs.</para><para>The output should like this:
2960-</para>
2961+<para>This creates a new keypair called mykey. The private key id_rsa is saved locally in ~/.ssh which can be used to connect to an instance launched using mykey as the keypair. You can see the available keypairs with nova keypair-list command.</para>
2962 <programlisting>
2963-uecadmin@client1:~$ euca-describe-keypairs
2964-KEYPAIR mykey f7:ac:8e:f5:05:19:2b:31:28:8c:9b:d7:b8:07:0c:3c:b6:34:8f:79
2965-KEYPAIR helloworld 12:96:b3:21:34:8d:6a:3f:92:2e:2b:70:23:ff:7f:51:b5:b7:ad:37
2966-KEYPAIR ubuntu f6:af:9a:59:65:35:32:c4:3a:c4:62:0e:e1:44:0f:71:29:03:2d:91
2967-KEYPAIR lucid 74:04:70:33:ed:57:7a:30:36:1f:ca:c6:ec:d5:4f:10:34:1a:52:51
2968-KEYPAIR karmic 01:f9:aa:5f:4d:20:e2:53:d1:29:d0:0f:e2:f3:8c:21:91:70:7e:c8
2969+nova keypair-list
2970++-------+-------------------------------------------------+
2971+| Name | Fingerprint |
2972++-------+-------------------------------------------------+
2973+| mykey | b0:18:32:fa:4e:d4:3c:1b:c4:6c:dd:cb:53:29:13:82 |
2974+| mykey2 | b0:18:32:fa:4e:d4:3c:1b:c4:6c:dd:cb:53:29:13:82 |
2975++-------+-------------------------------------------------+
2976 </programlisting>
2977+<para>Also while executing 'ssh-keygen' you can specify a custom location and custom file names for the keypairs that you want to create.</para>
2978 <para>To delete an existing keypair:</para>
2979 <programlisting>
2980-euca-delete-keypair helloworld
2981+nova keypair-delete mykey2
2982 </programlisting>
2983-<para>The above tasks can be achieved using Hybridfox from the "Keypairs" tab.</para>
2984 </section>
2985 <section xml:id="Launch_and_manage_instances-d1e1885">
2986 <title>Launch and manage instances</title>
2987 <para>There are several commands that help in managing the instances. Here are a few examples:</para>
2988 <programlisting>
2989-$ euca-run-instances ami-00000003 -k mykey -t m1.tiny
2990-
2991-RESERVATION r-f1ek1ojb proj default
2992-INSTANCE i-00000005 ami-00000003 pending mykey (proj, None) 0 m1.tiny 2011-10-19T12:48:04Z unknown zone ami-00000000 ami-00000000
2993-</programlisting>
2994-<programlisting>
2995-$ euca-describe-instances
2996-
2997-RESERVATION r-f1ek1ojb proj default
2998-INSTANCE i-00000005 ami-00000003 192.168.4.3 192.168.4.3 running mykey (proj, Openstackvalidationserver1) 0 m1.tiny 2011-10-19T12:48:04Z nova ami-00000000 ami-00000000
2999-</programlisting>
3000-<programlisting>
3001-$ euca-reboot-instances i-00000005
3002-</programlisting>
3003-<programlisting>
3004-$ euca-terminate-instances i-00000005
3005-</programlisting>
3006-<programlisting>
3007-$ euca-run-instances ami-XXXXXXXX -k mykey
3008-</programlisting>
3009-<programlisting>
3010-$ euca-get-console-output i-00000005
3011-
3012-i-00000005
3013-2011-10-07T07:22:40.795Z
3014-[ 0.000000] Initializing cgroup subsys cpuset
3015-[ 0.000000] Initializing cgroup subsys cpu
3016-[ 0.000000] Linux version 2.6.32-21-server (buildd@yellow) (gcc version 4.
3017-4.3 (Ubuntu 4.4.3-4ubuntu5) ) #32-Ubuntu SMP Fri Oct 07 09:17:34 UTC 2011 (Ub
3018-untu 2.6.32-21.32-server 2.6.32.11+drm33.2)
3019-.............
3020-</programlisting>
3021-<para>You can make password less ssh access to the instance as follows:</para>
3022-<programlisting>
3023-ssh -i mykey.priv user@192.168.4.3
3024+$ nova boot --flavor 1 --image 9bab7ce7-7523-4d37-831f-c18fbc5cb543 --key_name mykey myinstance
3025++-------------------------------------+--------------------------------------+
3026+| Property | Value |
3027++-------------------------------------+--------------------------------------+
3028+| OS-DCF:diskConfig | MANUAL |
3029+| OS-EXT-SRV-ATTR:host | None |
3030+| OS-EXT-SRV-ATTR:hypervisor_hostname | None |
3031+| OS-EXT-SRV-ATTR:instance_name | instance-00000002 |
3032+| OS-EXT-STS:power_state | 0 |
3033+| OS-EXT-STS:task_state | scheduling |
3034+| OS-EXT-STS:vm_state | building |
3035+| accessIPv4 | |
3036+| accessIPv6 | |
3037+| adminPass | FaUPM6EEBT8F |
3038+| config_drive | |
3039+| created | 2012-05-02T19:29:59Z |
3040+| flavor | m1.tiny |
3041+| hostId | |
3042+| id | 25ee9230-6bb5-4eca-8808-e6b4e0348362 |
3043+| image | ubuntu |
3044+| key_name | mykey |
3045+| metadata | {} |
3046+| name | myinstance |
3047+| progress | 0 |
3048+| status | BUILD |
3049+| tenant_id | 24da687e5d844657996bd5e93d06cb89 |
3050+| updated | 2012-05-02T19:29:59Z |
3051+| user_id | 2b64e5ed949145ce92e1fb47224740fe |
3052++-------------------------------------+--------------------------------------+
3053+</programlisting>
3054+<programlisting>
3055+$ nova list
3056++--------------------------------------+------------+--------+----------------------+
3057+| ID | Name | Status | Networks |
3058++--------------------------------------+------------+--------+----------------------+
3059+| 25ee9230-6bb5-4eca-8808-e6b4e0348362 | myinstance | ACTIVE | private=192.168.4.35 |
3060+| c939cb2c-e662-46e5-bc31-453007442cf9 | myinstance1| ACTIVE | private=192.168.4.36 |
3061++--------------------------------------+------------+--------+----------------------+
3062+</programlisting>
3063+<programlisting>
3064+$ nova reboot 25ee9230-6bb5-4eca-8808-e6b4e0348362
3065+$ nova list
3066++--------------------------------------+------------+--------+----------------------+
3067+| ID | Name | Status | Networks |
3068++--------------------------------------+------------+--------+----------------------+
3069+| 25ee9230-6bb5-4eca-8808-e6b4e0348362 | myinstance | REBOOT | private=192.168.4.35 |
3070+| c939cb2c-e662-46e5-bc31-453007442cf9 | myinstance1| ACTIVE | private=192.168.4.34 |
3071++--------------------------------------+------------+--------+----------------------+
3072+</programlisting>
3073+<programlisting>
3074+$ nova delete 25ee9230-6bb5-4eca-8808-e6b4e0348362
3075+$ nova list
3076++--------------------------------------+------------+--------+----------------------+
3077+| ID | Name | Status | Networks |
3078++--------------------------------------+------------+--------+----------------------+
3079+| c939cb2c-e662-46e5-bc31-453007442cf9 | myinstance1| ACTIVE | private=192.168.4.34 |
3080++--------------------------------------+------------+--------+----------------------+
3081+
3082+</programlisting>
3083+<programlisting>
3084+$ nova console-log myinstance
3085+</programlisting>
3086+<para>For passwordless ssh access to the instance:</para>
3087+<programlisting>
3088+ssh -i &lt;private_key&gt; username@&lt;ip_address&gt;
3089 </programlisting>
3090 <para>VM type has implications for harddisk size, amount of RAM and number of CPUs allocated to the instance. Check the VM types available.</para>
3091-<programlisting>sudo nova-manage instance_type list</programlisting>
3092-</section>
3093-</section>
3094-</chapter>
3095\ No newline at end of file
3096+<programlisting>nova flavor-list</programlisting>
3097+<para>New flavours can be created with the command.</para>
3098+<programlisting>sudo nova-manage flavor create &lt;args&gt; [options]</programlisting>
3099+<para>A flavour can be deleted with the command.</para>
3100+<programlisting>sudo nova-manage flavor delete &lt;args&gt; [options]</programlisting>
3101+</section>
3102+</section>
3103+</chapter>
3104
3105=== modified file 'Introduction.xml'
3106--- Introduction.xml 2011-10-19 14:27:25 +0000
3107+++ Introduction.xml 2012-05-09 21:52:21 +0000
3108@@ -9,21 +9,47 @@
3109 <listitem><para>Platform as a Service (PaaS)</para></listitem>
3110 <listitem><para>Software as a Service (SaaS)</para></listitem>
3111 </itemizedlist>
3112- <para>Amazon Web Services (AWS) is one of the major players providing IAAS. They have two popular services - Elastic Compute Cloud (EC2) and Simple Storage Service (S3). These services are available through web services.</para>
3113 </section>
3114 <section xml:id="OpenStack-d1e94">
3115 <title>OpenStack</title>
3116- <para>OpenStack is a collection of open source software projects that enterprises/service providers can use to setup and run their cloud compute and storage infrastructure. Rackspace and NASA are the key initial contributors to the stack. Rackspace contributed their "Cloud Files" platform to power the Object Storage part of the OpenStack, while NASA contributed their "Nebula" code to power the Compute part. OpenStack consortium has managed to have more than 100 members including Canonical, Dell, Citrix etc. in less than a year.</para>
3117- <para>OpenStack makes its services available through Amazon EC2/S3 compatible APIs and hence the client tools written for AWS can be used with OpenStack as well.</para>
3118- <para>There are 3 main service families under OpenStack</para>
3119+ <para>OpenStack is a collection of open source software projects that enterprises/service providers can use to setup and run their cloud compute and storage infrastructure. Rackspace and NASA are the key initial contributors to the stack. Rackspace contributed their "Cloud Files" platform (code) to power the Object Storage part of the OpenStack, while NASA contributed their "Nebula" platform (code) to power the Compute part. OpenStack consortium has managed to have more than 150 members including Canonical, Dell, Citrix etc.</para>
3120+ <para>There are 5 main service families under OpenStack</para>
3121 <itemizedlist>
3122- <listitem><para>Compute Infrastructure (Nova)</para></listitem>
3123- <listitem><para>Storage Infrastructure (Swift)</para></listitem>
3124- <listitem><para>Imaging Service (Glance)</para></listitem>
3125- </itemizedlist>
3126+ <listitem><para>Nova - Compute Service</para></listitem>
3127+ <listitem><para>Swift - Storage Service</para></listitem>
3128+ <listitem><para>Glance - Imaging Service</para></listitem>
3129+ <listitem><para>Keystone - Identity Service</para></listitem>
3130+ <listitem><para>Horizon - UI Service</para></listitem>
3131+ </itemizedlist>
3132+<para>
3133+<mediaobject>
3134+ <imageobject role="fo">
3135+ <imagedata fileref="images/architecture.png"
3136+ format="PNG" scale="12"/>
3137+ </imageobject>
3138+ <imageobject role="html">
3139+ <imagedata fileref="images/architecturehtml.png"
3140+ format="PNG" />
3141+ </imageobject>
3142+</mediaobject>
3143+</para>
3144+<para>The below diagram shows a simple representation of interaction between keystone and dashboard with the remaining OpenStack components.</para>
3145+<para>
3146+<mediaobject>
3147+ <imageobject role="fo">
3148+ <imagedata fileref="images/keystone_dashboard.png"
3149+ format="PNG" scale="9"/>
3150+ </imageobject>
3151+ <imageobject role="html">
3152+ <imagedata fileref="images/keystone_dashboardhtml.png"
3153+ format="PNG" />
3154+ </imageobject>
3155+</mediaobject>
3156+</para>
3157+
3158 <section xml:id="Open_Stack_Compute_Infrastructure_Nova_-d1e124">
3159- <title>Open Stack Compute Infrastructure ( Nova )</title>
3160- <para>Nova is the underlying cloud computing fabric controller for the OpenStack cloud. All activities needed to support the life cycle of instances within the OpenStack cloud are handled by Nova. It manages all the compute resources, networking, authorization, and scalability needs of the OpenStack cloud. Nova is a management platform and does not provide any virtualization capabilities by itself; instead, it uses libvirt APIs to interact with the supported hypervisors. Nova exposes its capabilities through a web services API that is compatible with that of EC2 of Amazon Web Services.</para>
3161+ <title>Open Stack Compute Infrastructure (Nova)</title>
3162+ <para>Nova is the Computing Fabric controller for the OpenStack Cloud. All activities needed to support the life cycle of instances within the OpenStack cloud are handled by Nova. This makes Nova a Management Platform that manages compute resources, networking, authorization, and scalability needs of the OpenStack cloud. But, Nova does not provide any virtualization capabilities by itself; instead, it uses libvirt API to interact with supported hypervisors. Nova exposes all its capabilities through a web services API that is compatible with the EC2 API of Amazon Web Services.</para>
3163 <section xml:id="Functions_and_Features-d1e132">
3164 <title>Functions and Features:</title>
3165 <itemizedlist>
3166@@ -39,49 +65,37 @@
3167 <title>Components of OpenStack Compute</title>
3168 <para>Nova Cloud Fabric is composed of the following major components:</para>
3169 <itemizedlist>
3170- <listitem><para>API Server ( nova-api )</para></listitem>
3171- <listitem><para>Message Queue ( rabbit-mq server )</para></listitem>
3172- <listitem><para>Compute Workers ( nova-compute )</para></listitem>
3173- <listitem><para>Network Controller ( nova-network )</para></listitem>
3174- <listitem><para>Volume Worker ( nova-volume )</para></listitem>
3175- <listitem><para>Scheduler ( nova-scheduler )</para></listitem>
3176+ <listitem><para>API Server (nova-api)</para></listitem>
3177+ <listitem><para>Message Queue (rabbit-mq server)</para></listitem>
3178+ <listitem><para>Compute Workers (nova-compute)</para></listitem>
3179+ <listitem><para>Network Controller (nova-network)</para></listitem>
3180+ <listitem><para>Volume Worker (nova-volume)</para></listitem>
3181+ <listitem><para>Scheduler (nova-scheduler)</para></listitem>
3182 </itemizedlist>
3183-<para>
3184-<mediaobject>
3185- <imageobject role="fo">
3186- <imagedata fileref="images/Arch.png"
3187- format="PNG" scale="60"/>
3188- </imageobject>
3189- <imageobject role="html">
3190- <imagedata fileref="images/Archhtml.png"
3191- format="PNG" />
3192- </imageobject>
3193-</mediaobject>
3194-</para>
3195 <section xml:id="API_Server_nova-api_-d1e213">
3196- <title>API Server ( nova-api )</title>
3197- <para>The API Server provides an interface to the outside world to interact with the cloud infrastructure. API server is the only component that the outside world uses to manage the infrastructure. The management is done through web services calls using EC2 API. The API Server then, in turn, communicates with the relevant components of the cloud infrastructure through the Message Queue. Also there is an OpenStack API as well now, as an alternative to the EC2 API.</para>
3198+ <title>API Server (nova-api)</title>
3199+ <para>The API Server provides an interface for the outside world to interact with the cloud infrastructure. API server is the only component that the outside world uses to manage the infrastructure. The management is done through web services calls using EC2 API. The API Server then, in turn, communicates with the relevant components of the cloud infrastructure through the Message Queue. As an alternative to EC2 API, OpenStack also provides a native API called "OpenStack API".</para>
3200 </section>
3201 <section xml:id="Message_Queue_Rabbit_MQ_Server_-d1e223">
3202- <title>Message Queue ( Rabbit MQ Server )</title>
3203- <para>The OpenStack Cloud Controller communicates with other nova components such as the Scheduler, Network Controller, and Volume Controller via AMQP(Advanced Message Queue Protocol). Nova uses asynchronous calls for request response, with a call-back that gets triggered once a response is received. Since asynchronous communication is used, none of the end points get stuck for long in a waiting state. This is especially true since many actions expected by the API calls such as launching an instance or uploading an image are time consuming.</para>
3204+ <title>Message Queue (Rabbit MQ Server)</title>
3205+ <para>OpenStack communicates among themselves using the message queue via AMQP(Advanced Message Queue Protocol). Nova uses asynchronous calls for request response, with a call-back that gets triggered once a response is received. Since asynchronous communication is used, none of the user actions get stuck for long in a waiting state. This is effective since many actions expected by the API calls such as launching an instance or uploading an image are time consuming.</para>
3206 </section>
3207 <section xml:id="Compute_Worker_nova-compute_-d1e232">
3208- <title>Compute Worker ( nova-compute )</title>
3209- <para>Compute workers deal with instance management life cycle. they receive the requests for life cycle management via the Message Queue and carry out operations. There are several Compute Workers in a typical production cloud deployment. An instance is deployed on any of the available compute worker based on the scheduling algorithm used.</para>
3210+ <title>Compute Worker (nova-compute)</title>
3211+ <para>Compute workers deal with instance management life cycle. They receive the requests for instance life cycle management via the Message Queue and carry out operations. There are several compute workers in a typical production cloud deployment. An instance is deployed on any of the available compute worker based on the scheduling algorithm used.</para>
3212 </section>
3213 <section xml:id="Network_Controller_nova-network_-d1e241">
3214- <title>Network Controller ( nova-network )</title>
3215+ <title>Network Controller (nova-network)</title>
3216 <para>The Network Controller deals with the network configuration of host machines. It does operations like allocating IP addresses, configuring VLANs for projects, implementing security groups and configuring networks for compute nodes.</para>
3217 </section>
3218 <section xml:id="Volume_Workers_nova-volume_-d1e250">
3219- <title>Volume Workers ( nova-volume )</title>
3220- <para>Volume workers are used for the management of LVM-based instance volumes. Volume Workers perform volume related functions such as creation, deletion, attaching a volume to an instance, and detaching a volume from an instance. Volumes provide a way of providing persistent storage for use by instances, as the main disk attached to an instance is non-persistent and any changes made to it are lost when the volume is detached or the instance is terminated. When a volume is detached from an instance or when an instance, to which the volume is attached, is terminated, it retains the data that was stored on it when it was attached to an instance earlier. This data can be accessed by reattaching the volume to the same instance or by attaching it to another instances.</para>
3221- <para>Any valuable data that gets accumulated during the life cycle of an instance should be written to a volume, so that it can be accessed later. This typically applies to the storage needs of database servers etc.</para>
3222+ <title>Volume Workers (nova-volume)</title>
3223+ <para>Volume workers are used for management of LVM-based instance volumes. Volume Workers perform volume related functions such as creation, deletion, attaching a volume to an instance, and detaching a volume from an instance. Volumes provide a way of providing persistent storage for the instances, as the root partition is non-persistent and any changes made to it are lost when an instance is terminated. When a volume is detached from an instance or when an instance, to which the volume is attached, is terminated, it retains the data that was stored on it. This data can be accessed by re-attaching the volume to the same instance or by attaching it to other instances.</para>
3224+ <para>Critical data in an instance must always be written to a volume, so that it can be accessed later. This typically applies to the storage needs of database servers etc.</para>
3225 </section>
3226 <section xml:id="Scheduler_nova-scheduler_-d1e262">
3227 <title>Scheduler (nova-scheduler)</title>
3228- <para>The scheduler maps the nova-API calls to the appropriate openstack components. It runs as a daemon named nova-schedule and picks up a compute/network/volume server from a pool of available resources depending upon the scheduling algorithm in place. A scheduler can base its decisions on various factors such as load, memory, physical distance of the availability zone, CPU architecture, etc. The nova scheduler implements a pluggable architecture.</para>
3229+ <para>The scheduler maps the nova-API calls to the appropriate OpenStack components. It runs as a daemon named nova-schedule and picks up a compute server from a pool of available resources depending on the scheduling algorithm in place. A scheduler can base its decisions on various factors such as load, memory, physical distance of the availability zone, CPU architecture, etc. The nova scheduler implements a pluggable architecture.</para>
3230 <para>Currently the nova-scheduler implements a few basic scheduling algorithms:</para>
3231 <itemizedlist>
3232 <listitem><para>chance: In this method, a compute host is chosen randomly across availability zones.</para></listitem>
3233@@ -91,9 +105,35 @@
3234 </section>
3235 </section>
3236 </section>
3237+
3238+<section xml:id="OpenStack_Imaging_Service_Glance_-d1e329">
3239+ <title>OpenStack Imaging Service (Glance)</title>
3240+ <para>OpenStack Imaging Service is a lookup and retrieval system for virtual machine images. It can be configured to use any one of the following storage backends:</para>
3241+ <itemizedlist>
3242+ <listitem><para>Local filesystem (default)</para></listitem>
3243+ <listitem><para>OpenStack Object Store to store images</para></listitem>
3244+ <listitem><para>S3 storage directly</para></listitem>
3245+ <listitem><para>S3 storage with Object Store as the intermediate for S3 access.</para></listitem>
3246+ <listitem><para>HTTP (read-only)</para></listitem>
3247+ </itemizedlist>
3248+ <section xml:id="Functions_and_Features_Glance_-d1e352">
3249+ <title>Functions and Features</title>
3250+ <itemizedlist>
3251+ <listitem><para>Provides imaging service</para></listitem>
3252+ </itemizedlist>
3253+ </section>
3254+ <section xml:id="Components_of_OpenStack_Imaging_Service_Glance_-d1e365">
3255+ <title>Components of Glance</title>
3256+ <itemizedlist>
3257+ <listitem><para>Glance-control</para></listitem>
3258+ <listitem><para>Glance-registry</para></listitem>
3259+ </itemizedlist>
3260+ </section>
3261+</section>
3262+
3263 <section xml:id="OpenStack_Storage_Infrastructure_Swift_-d1e271">
3264 <title>OpenStack Storage Infrastructure (Swift)</title>
3265- <para>Swift provides a distributed, eventually consistent virtual object store for OpenStack. It is analogous to Amazon Web Services - Simple Storage Service (S3). Swift is capable of storing billions of objects distributed across nodes. Swift has built-in redundancy and failover management and is capable of archiving and media streaming. It is extremely scalable in terms of both size (Several petabytes) and capacity (Number of objects).</para>
3266+ <para>Swift provides a distributed, eventually consistent virtual object store for OpenStack. It is analogous to Amazon Web Services - Simple Storage Service (S3). Swift is capable of storing billions of objects distributed across nodes. Swift has built-in redundancy and failover management and is capable of archiving and media streaming. It is extremely scalable in terms of both size (several petabytes) and capacity (number of objects).</para>
3267 <section xml:id="Functions_and_Features-d1e279">
3268 <title>Functions and Features</title>
3269 <itemizedlist>
3270@@ -101,7 +141,7 @@
3271 <listitem><para>Storage of large sized objects</para></listitem>
3272 <listitem><para>Data Redundancy</para></listitem>
3273 <listitem><para>Archival capabilities - Work with large datasets</para></listitem>
3274- <listitem><para>Data container for virtial machines and cloud apps</para></listitem>
3275+ <listitem><para>Data container for virtual machines and cloud apps</para></listitem>
3276 <listitem><para>Media Streaming capabilities</para></listitem>
3277 <listitem><para>Secure storage of objects</para></listitem>
3278 <listitem><para>Backup and archival</para></listitem>
3279@@ -125,7 +165,7 @@
3280 <para>The proxy server also handles failures of entities by rerouting requests to failover entities (handoff entities)</para>
3281 </section>
3282
3283- <section xml:id="Swift_Object_Server-d1e291">
3284+<section xml:id="Swift_Object_Server-d1e291">
3285 <title>Swift Object Server</title>
3286 <para>The Object server is a blob store. It's responsibility is to handle storage, retrieval and deletion of objects stored in the local storage. Objects are typically binary files stored in the filesystem with metadata contained as extended file attributes (xattr).</para>
3287
3288@@ -143,28 +183,58 @@
3289 <title>The Ring</title>
3290 <para>The ring contains information about the physical location of the objects stored inside Swift. It is a virtual representation of mapping of names of entities to their real physical location. It is analogous to an indexing service that various processes use to lookup and locate the real physical location of entities within the cluster. Entities like Accounts, Containers, Objects have their own seperate rings.</para>
3291 </section>
3292- </section>
3293- <section xml:id="OpenStack_Imaging_Service_Glance_-d1e329">
3294- <title>OpenStack Imaging Service ( Glance )</title>
3295- <para>OpenStack Imaging Service is a lookup and retrieval system for virtual machine images. It can be configured to use any one of the following 3 storage backends:</para>
3296- <itemizedlist>
3297- <listitem><para>OpenStack Object Store to store images</para></listitem>
3298- <listitem><para>S3 storage directly</para></listitem>
3299- <listitem><para>S3 storage with Object Store as the intermediate for S3 access.</para></listitem>
3300- </itemizedlist>
3301- <section xml:id="Functions_and_Features_Glance_-d1e352">
3302- <title>Functions and Features ( Glance )</title>
3303- <itemizedlist>
3304- <listitem><para>Provides imaging service</para></listitem>
3305- </itemizedlist>
3306- </section>
3307- <section xml:id="Components_of_OpenStack_Imaging_Service_Glance_-d1e365">
3308- <title>Components of OpenStack Imaging Service ( Glance )</title>
3309- <itemizedlist>
3310- <listitem><para>Glance-control</para></listitem>
3311- <listitem><para>Glance-registry</para></listitem>
3312- </itemizedlist>
3313- </section>
3314- </section>
3315-</section>
3316-</chapter>
3317\ No newline at end of file
3318+</section>
3319+
3320+<section xml:id="Openstack_Identity_server-d1e325">
3321+ <title>OpenStack Identity Service (Keystone)</title>
3322+ <para>Keystone provides identity and access policy services for all components in the OpenStack family. It implements it's own REST based API (Identity API). It provides authentication and authorization for all components of OpenStack including (but not limited to) Swift, Glance, Nova. Authentication verifies that a request actually comes from who it says it does. Authorization is verifying whether the authenticated user has access to the services he/she is requesting for.</para>
3323+<para>
3324+<mediaobject>
3325+ <imageobject role="fo">
3326+ <imagedata fileref="images/keystone.png"
3327+ format="PNG" scale="15"/>
3328+ </imageobject>
3329+ <imageobject role="html">
3330+ <imagedata fileref="images/keystonehtml.png"
3331+ format="PNG" />
3332+ </imageobject>
3333+</mediaobject>
3334+</para>
3335+ <para>Keystone provides two ways of authentication. One is username/password based and the other is token based. Apart from that, keystone provides the following services:</para>
3336+ <itemizedlist>
3337+ <listitem><para>Token Service (that carries authorization information about an authenticated user)</para></listitem>
3338+ <listitem><para>Catalog Service (that contains a list of available services at the users' disposal)</para></listitem>
3339+ <listitem><para>Policy Service (that let's keystone manage access to specific services by specific users or groups).</para></listitem>
3340+ </itemizedlist>
3341+ <section xml:id="OpenStack_Identity_server_components-d1e328">
3342+ <title>Components of Identity Service</title>
3343+ <itemizedlist>
3344+ <listitem><para>Endpoints - Every OpenStack service (Nova, Swift, Glance) runs on a dedicated port and on a dedicated URL(host), we call them endpoints.</para></listitem>
3345+ <listitem><para>Regions - A region defines a dedicated physical location inside a data centre. In a typical cloud setup, most if not all services are distributed across data centers/servers which are also called regions</para></listitem>
3346+ <listitem><para>User - A keystone authenticated user.</para></listitem>
3347+ <listitem><para>Services - Each component that is being connected to or being administered via keystone can be called a service. For example, we can call Glance a keystone service.</para></listitem>
3348+ <listitem><para>Role - In order to maintain restrictions as to what a particular user can do inside cloud infrastructure it is important to have a role associated.</para></listitem>
3349+ <listitem><para>Tenant - A tenant is a project with all the service endpoint and a role associated to user who is member of that particular tenant.</para></listitem>
3350+ </itemizedlist>
3351+ </section>
3352+</section>
3353+
3354+<section xml:id="Openstack_Web_Interface-d1e340">
3355+ <title>Openstack Administrative Web-Interface (Horizon)</title>
3356+ <para>Horizon the web based dashboard can be used to manage /administer OpenStack services. It can be used to manage instances and images, create keypairs, attach volumes to instances, manipulate Swift containers etc. Apart from this, dashboard even gives the user access to instance console and can connect to an instance through VNC. Overall, Horizon features the following:</para>
3357+ <itemizedlist>
3358+ <listitem><para>Instance Management - Create or terminate instance, view console logs and connect through VNC, Attaching volumes, etc.</para></listitem>
3359+ <listitem><para>Access and Security Management - Create security groups, manage keypairs, assign floating IPs, etc.</para></listitem>
3360+ <listitem><para>Flavor Management - Manage different flavors or instance virtual hardware templates.</para></listitem>
3361+ <listitem><para>Image Management - Edit or delete images.</para></listitem>
3362+ <listitem><para>View service catalog.</para></listitem>
3363+ <listitem><para>Manage users, quotas and usage for projects.</para></listitem>
3364+ <listitem><para>User Management - Create user, etc.</para></listitem>
3365+ <listitem><para>Volume Management - Creating Volumes and snapshots.</para></listitem>
3366+ <listitem><para>Object Store Manipulation - Create, delete containers and objects.</para></listitem>
3367+ <listitem><para>Downloading environment variables for a project.</para></listitem>
3368+ </itemizedlist>
3369+</section>
3370+
3371+</section>
3372+</chapter>
3373
3374=== modified file 'Network.xml'
3375--- Network.xml 2011-10-19 14:27:25 +0000
3376+++ Network.xml 2012-05-09 21:52:21 +0000
3377@@ -3,15 +3,15 @@
3378 <title>Network Management</title>
3379 <section xml:id="Introduction-d1e2084">
3380 <title>Introduction</title>
3381- <para>In OpenStack, the networking is managed by a component called "nova-network". This interacts with nova-compute to ensure that the instances have the right kind of networking setup for them to communicate among themselves as well as with the outside world. Just as in Eucalyptus or AWS, each OpenStack instance can have 2 IP addresses attached to it. One is the private IP address and the other called Public IP address. The private IP address is typically used for communication between instances and the public IP is used for communication of instances with the outside world. The so called public IP address need not be a public IP address route-able on the Internet ; it can even be an address on the corporate LAN.</para>
3382- <para>The network configuration inside the instance is done with the private IP address in view. The association between the private IP and the public IP and necessary routing is handled by nova-network and the instances need not be aware of it.</para>
3383+ <para>In OpenStack, the networking is managed by a component called "nova-network". This interacts with nova-compute to ensure that the instances have the right kind of networking setup for them to communicate among themselves as well as with the outside world. OpenStack instances can have 2 types of IP addresses associated to it: Private IP address (fixed) and Public IP address (floating). Private IP addresses are typically used for communication between instances (internal) and public IP addresses are used for communication of instances with the outside world (external or Internet). The so-called public IP addresses need not necessarily be IP addresses route-able on the Internet ; they can even be addresses on a corporate LAN.</para>
3384+ <para>The network configurations inside the instances are done with private IP addresses in view. The association between the private IP and the public IP addresses and necessary routing are handled by nova-network and the instances need not be aware of them.</para>
3385 <para>nova-network provides 3 different network management options. Currently you can only choose one of these 3 options for your network management.</para>
3386 <itemizedlist>
3387 <listitem><para>Flat Network</para></listitem>
3388 <listitem><para>Flat DHCP Network</para></listitem>
3389 <listitem><para>VLAN Network</para></listitem>
3390 </itemizedlist>
3391- <para>VLAN Network is the most feature rich and is the idea choice for a production deployment, while the other modes can be used while getting familiar with OpenStack and when you do not have VLAN Enabled switches to connect different components of the OpenStack infrastructure.</para>
3392+ <para>VLAN Network is the most feature rich and is the ideal choice for a production deployment, while the other modes can be used while getting familiar with OpenStack and when you do not have VLAN Enabled switches to connect different components of the OpenStack infrastructure.</para>
3393 <para>The network type is chosen by using one of the following configuration options in nova.conf file. If no network manager is specified explicitly, the default network manager, VLANManager is used.</para>
3394 <programlisting>
3395 --network_manager = nova.network.manager.FlatManager
3396@@ -20,17 +20,21 @@
3397 </programlisting>
3398 <para>In each of these cases, run the following commands to set up private and public IP addresses for use by the instances:</para>
3399 <programlisting>
3400- sudo nova-manage network create private 192.168.4.0/24 1 256
3401+ sudo nova-manage network create private --fixed_range_v4=192.168.4.3/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32
3402 sudo nova-manage floating create --ip_range=10.10.10.224/27
3403 </programlisting>
3404- <para>The public IP which you are going to associate with an instance needs to be allocated first by using "euca-allocate-address" command:</para>
3405- <programlisting>
3406- euca-allocate-address 10.10.2.225
3407- </programlisting>
3408- <para>You can then associate a public IP to a running instance by using "euca-associate-address" command:</para>
3409- <programlisting>
3410- euca-associate-address -i i-0000008 10.10.2.225
3411- </programlisting>
3412- <para>Please refer to http://docs.openstack.org/openstack-compute/admin/content/ch04.html for more details about each of the networking types.</para>
3413+ <para>The public IP which you are going to associate with an instance needs to be allocated first by using the command:</para>
3414+ <programlisting>
3415+ nova floating-ip-create
3416+ +----------------+-------------+----------+------+
3417+ | Ip | Instance Id | Fixed Ip | Pool |
3418+ +----------------+-------------+----------+------+
3419+ | 10.10.10.225 | None | None | nova |
3420+ +----------------+-------------+----------+------+
3421+ </programlisting>
3422+ <para>You can then associate a public IP to a running instance by using the command:</para>
3423+ <programlisting>
3424+ nova add-floating-ip &lt;instance-name&gt; 10.10.2.225
3425+ </programlisting>
3426 </section>
3427 </chapter>
3428
3429=== modified file 'Openstackbook.xml'
3430--- Openstackbook.xml 2011-10-19 14:27:25 +0000
3431+++ Openstackbook.xml 2012-05-09 21:52:21 +0000
3432@@ -3,9 +3,8 @@
3433 xmlns:xlink="http://www.w3.org/1999/xlink"
3434 xmlns:xi="http://www.w3.org/2001/XInclude"
3435 xmlns:svg="http://www.w3.org/2000/svg"
3436- xmlns:html="http://www.w3.org/1999/xhtml"
3437- version="5.0"
3438- >
3439+ xmlns:html="http://www.w3.org/1999/xhtml" version="5.0"
3440+ xml:id="book_ygy_znp_2g">
3441 <title>OpenStack Compute Starter Guide</title>
3442 <info>
3443 <author>
3444@@ -18,29 +17,33 @@
3445 </affiliation>
3446 </author>
3447 <copyright>
3448- <year>2011</year>
3449- <holder>CSS Corp Private Limited ( http://www.csscorp.com/ )</holder>
3450+ <year>2012</year>
3451+ <holder>CSS Corp Private Limited
3452+ (http://www.csscorp.com/)</holder>
3453 </copyright>
3454- <releaseinfo>diablo</releaseinfo>
3455+ <releaseinfo>essex</releaseinfo>
3456 <productname>OpenStack Compute</productname>
3457- <pubdate>2011-10-19</pubdate>
3458+ <pubdate>2012-05-04</pubdate>
3459 <legalnotice role="cc-by-nc-sa">
3460 <annotation>
3461- <remark>Remaining licensing details are filled in by the template.</remark>
3462+ <remark>Rest of the licensing details are filled in by the
3463+ template.</remark>
3464 </annotation>
3465 </legalnotice>
3466 <abstract>
3467- <para>This is a tutorial style beginner's guide for OpenStack™ on Ubuntu 11.10, Oneiric Ocelot.
3468- The aim is to help the reader in setting up a minimal installation of OpenStack. </para>
3469+ <para>This is a tutorial style beginner's guide for OpenStack™
3470+ on Ubuntu 12.04, Precise Pangolin. The aim is to help the
3471+ reader in setting up a minimal installation of OpenStack.
3472+ </para>
3473 </abstract>
3474 </info>
3475-<xi:include href="Introduction.xml" />
3476-<xi:include href="Installation.xml"/>
3477-<xi:include href="Image.xml"/>
3478-<xi:include href="Instance.xml"/>
3479-<xi:include href="Storage.xml"/>
3480-<xi:include href="Network.xml"/>
3481-<xi:include href="Security.xml"/>
3482-<xi:include href="Commands.xml"/>
3483-
3484+ <xi:include href="Introduction.xml"/>
3485+ <xi:include href="Installation.xml"/>
3486+ <xi:include href="Image.xml"/>
3487+ <xi:include href="Instance.xml"/>
3488+ <xi:include href="Dashboard.xml"/>
3489+ <xi:include href="Storage.xml"/>
3490+ <xi:include href="Network.xml"/>
3491+ <xi:include href="Security.xml"/>
3492+ <xi:include href="Commands.xml"/>
3493 </book>
3494
3495=== modified file 'README'
3496--- README 2011-09-27 13:32:13 +0000
3497+++ README 2012-05-09 21:52:21 +0000
3498@@ -1,9 +1,9 @@
3499-OpenStack Beginner's Guide for Ubuntu 11.10, Oneiric Ocelot
3500-===========================================================
3501-
3502-Copy Right: CSS Corp Private Limited ( http://www.csscorp.com/ ), 2011
3503-
3504-This is a tutorial style Beginner's guide for OpenStack on Ubuntu 11.04.
3505+OpenStack Beginner's Guide for Ubuntu 12.04, Precise Pangolin
3506+=============================================================
3507+
3508+Copy Right: CSS Corp Private Limited ( http://www.csscorp.com/ ), 2012
3509+
3510+This is a tutorial style Beginner's guide for OpenStack on Ubuntu 12.04.
3511 The aim is to help the reader in setting up a minimal installation of OpenStack.
3512 The content is released under Creative Commons - Share Alike Attribution License.
3513
3514
3515=== modified file 'Security.xml'
3516--- Security.xml 2011-10-19 14:27:25 +0000
3517+++ Security.xml 2012-05-09 21:52:21 +0000
3518@@ -2,51 +2,55 @@
3519 <title>Security</title>
3520 <section xml:id="Security_Overview-d1e2505">
3521 <title>Security Overview</title>
3522-<para>OpenStack provides ingress filtering for the instances based on the concept of security groups. OpenStack accomplishes ingress filtering by creating suitable IP Tables rules. A Security Group is a named set of rules that get applied to the incoming packets for the instances. You can specify a security group while launching an instance. Each security group can have multiple rules associated with it. Each rule specifies the source IP/network, protocol type, destination ports etc. Any packet matching these parameters specified in a rule is allowed in. Rest of the packets are blocked.</para>
3523-<para>A security group that does not have any rules associated with it causes blocking of all incoming traffic. The mechanism only provides ingress filtering and does not provide any egress filtering. As a result all outbound traffic is allowed. If you need to implement egress filtering, you will need to implement that inside the instance using a firewall.</para>
3524-<para>Tools like Hybridfox let you manage security groups and also let you specify a security group while launching an instance. You can also use command line tools from euca2ools package such as euca-authorize for this purpose.</para>
3525-<para>Here are a few euca commands to manage security groups. Like in our earlier chapters, the project name is "proj"</para>
3526+<para>OpenStack provides ingress filtering for the instances based on the concept of security groups. OpenStack accomplishes ingress filtering by creating suitable iptables rules. A Security Group is a named set of rules that get applied to the incoming packets for the instances. You can specify a security group while launching an instance. Each security group can have multiple rules associated with it. Each rule specifies the source IP/network, protocol type, destination ports etc. Any packet matching these parameters specified in a rule is allowed in. Rest of the packets are blocked.</para>
3527+<para>A security group that does not have any rules associated with it causes blocking of all incoming traffic. The mechanism only provides ingress filtering and does not provide any egress filtering. As a result all outbound traffic is allowed. If you need to implement egress filtering, you will need to implement that inside the instance (during bundling process) using a firewall.</para>
3528+<para>The OpenStack Dashboard lets you manage security groups and also let you specify a security group while launching an instance. You can also use commands like 'nova secgroup-add-rule' etc. for this purpose.</para>
3529+<para>Here are a few nova commands to manage security groups.</para>
3530
3531 <para>Create a security group named "myservers".</para>
3532 <programlisting>
3533-euca-add-group -d "My Servers" myservers
3534+nova secgroup-create &lt;name&gt; &lt;description&gt;
3535+nova secgroup-create myservers my-default-server-group
3536 </programlisting>
3537
3538 <para>Add a rule to the security group "myservers" allowing icmp and tcp traffic from 192.168.1.1.</para>
3539 <programlisting>
3540-euca-authorize -P tcp -s 192.168.1.1 -p 22 myservers
3541-euca-authorize -P icmp -s 192.168.1.1 -t -1:-1 myservers
3542+nova secgroup-add-rule myservers tcp 22 22 192.168.1.1/0
3543+nova secgroup-add-rule myservers icmp -1 -1 192.168.1.1/0
3544 </programlisting>
3545
3546 <para>For a Windows instance, add a rule to accept incoming RDP connections</para>
3547 <programlisting>
3548-euca-authorize -P tcp -s 192.168.1.1 -p 3389 myservers
3549+nova secgroup-add-rule myservers tcp 3389 3389 192.168.1.1/0
3550 </programlisting>
3551
3552-<para>Rules can be viewed with euca-describe-groups command.</para>
3553+<para>Rules can be viewed with the command.</para>
3554 <programlisting>
3555-$ euca-describe-groups
3556-GROUP proj myservers my servers
3557-PERMISSION proj myservers ALLOWS tcp 22 22 FROM CIDR 192.168.1.1
3558-PERMISSION proj myservers ALLOWS icmp -1 -1 FROM CIDR 192.168.1.1
3559-PERMISSION proj myservers ALLOWS tcp 3389 3389 FROM CIDR 192.168.1.1
3560+$ nova secgroup-list-rules myservers
3561++-------------+-----------+---------+--------------+--------------+
3562+| IP Protocol | From Port | To Port | IP Range | Source Group |
3563++-------------+-----------+---------+--------------+--------------+
3564+| | | | | |
3565+| icmp | -1 | -1 |192.168.1.1/0 | myservers |
3566+| tcp | 22 | 22 |192.168.1.1/0 | myservers |
3567++-------------+-----------+---------+--------------+--------------+
3568 </programlisting>
3569
3570 <para>Remove the rule for ssh traffic from the source ip 192.168.1.1 from the security group "myservers"</para>
3571 <programlisting>
3572-euca-revoke -P tcp -s 192.168.1.1 -p 22 myservers
3573+nova secgroup-delete-rule myservers ssh 22 22 192.168.1.1
3574 </programlisting>
3575
3576 <para>Delete the security group "myservers"</para>
3577 <programlisting>
3578-euca-delete-group myservers
3579+nova secgroup-delete myservers
3580 </programlisting>
3581
3582 <para>Launch an instance associated with the security group "myservers".</para>
3583 <programlisting>
3584-euca-run-instances ami-XXXXXXXX -k mykey -g myservers
3585+nova boot --flavor 1 --image 9bab7ce7-7523-4d37-831f-c18fbc5cb543 --key_name mykey myinstance --security_groups myservers
3586 </programlisting>
3587
3588-<para>When you do not specify a security group, the instance gets associated with an inbuilt security group called "default". The rules for this security group can also be modified using euca-add, euca-revoke commands.</para>
3589+<para>When you do not specify a security group, the instance gets associated with an inbuilt security group called "default". The rules for this security group can also be modified using nova secgroup-add-rule , nova secgroup-delete-rule commands.</para>
3590 </section>
3591-</chapter>
3592\ No newline at end of file
3593+</chapter>
3594
3595=== modified file 'Storage.xml'
3596--- Storage.xml 2011-10-19 14:27:25 +0000
3597+++ Storage.xml 2012-05-09 21:52:21 +0000
3598@@ -1,91 +1,99 @@
3599-<?xml version="1.0" encoding="UTF-8"?><chapter xmlns:db="http://docbook.org/ns/docbook" xmlns="http://docbook.org/ns/docbook" xml:id="Storage_Management-d1e1995" version="5.0" xml:base="Storage.xml">
3600+<?xml version="1.0" encoding="UTF-8"?>
3601+<chapter xmlns:db="http://docbook.org/ns/docbook" xmlns="http://docbook.org/ns/docbook" xml:id="Storage_Management-chapter" version="5.0" xml:base="Storage.xml">
3602 <title>Storage Management</title>
3603 <section xml:id="Nova-volume-d1e2000">
3604 <title>Nova-volume</title>
3605-<para>Nova-volume provides persistent block storage compatible with Amazon's Elastic Block Store. The storage on the instances is non persistent in nature and hence any data that you generate and store on the file system on the first disk of the instance gets lost when the instance is terminated. You will need to use persistent volumes provided by nova-volume if you want any data generated during the life of the instance to persist after the instance is terminated.</para>
3606-<para>Commands from euca2ools package can be used to manage these volumes.</para>
3607+<para>Nova-volume provides persistent block storage compatible with Amazon's Elastic Block Store. The storage on the instances is non-persistent by nature and hence any data that are generated and stored on the file system on the first disk of the instance are lost when the instance is terminated. You will need to use persistent volumes provided by nova-volume if you want any data generated during the life of the instance to persist after the instance is terminated.</para>
3608+<para>Nova commands can be used to manage these volumes.</para>
3609 <para>Here are a few examples:</para>
3610 <section xml:id="Interacting_with_Storage_Controller-d1e2014">
3611 <title>Interacting with Storage Controller</title>
3612 <para>Make sure that you have sourced novarc before running any of the following commands. The following commands refer to a zone called 'nova', which we created in the chapter on "Installation and Configuration". The project is 'proj' as referred to in the other chapters.</para>
3613 <para>Create a 10 GB volume</para>
3614-<programlisting>euca-create-volume -s 10 -z nova</programlisting>
3615-<para>You should see an output like:</para>
3616-<programlisting>VOLUME vol-00000002 1 creating (proj, None, None, None) 2011-04-21T07:19:52Z</programlisting>
3617+<programlisting>nova volume-create --display_name myvolume 10</programlisting>
3618 <para>List the volumes</para>
3619-<programlisting>euca-describe-volumes</programlisting>
3620+<programlisting>nova volume-list</programlisting>
3621 <para>You should see an output like this:</para>
3622-<programlisting>VOLUME vol-00000001 1 nova available (proj, server1, None, None) 2011-04-21T05:11:22Z</programlisting>
3623-<programlisting>VOLUME vol-00000002 1 nova available (proj, server1, None, None) 2011-04-21T07:19:52Z</programlisting>
3624+<programlisting>
3625++----+-----------+--------------+------+-------------+--------------------------------------+
3626+| ID | Status | Display Name | Size | Volume Type | Attached to |
3627++----+-----------+--------------+------+-------------+--------------------------------------+
3628+| 1 | in-use | New Volume | 20 | None | 7db4cb64-7f8f-42e3-9f58-e59c9a31827d |
3629+| 4 | available | volume1 | 10 | None | |
3630+| 5 | available | myvolume | 10 | None | |
3631+| 6 | available | myvolume1 | 10 | None | |
3632++----+-----------+--------------+------+-------------+--------------------------------------+
3633+</programlisting>
3634 <para>Attach a volume to a running instance</para>
3635-<programlisting>euca-attach-volume -i i-00000009 -d /dev/vdb vol-00000002</programlisting>
3636-<para>A volume can only be attached to one instance at a time. When euca-describe-volumes shows the status of a volume as 'available', it means it is not attached to any instance and ready to be used. If you run euca-describe-volumes, you can see that the status changes from "available" to "in-use" if it is attached to an instance successfully.</para>
3637-<para>When a volume is attached to an instance, it shows up as an additional SCSI disk on the instance. You can login to the instance and mount the disk, format it and use it.</para>
3638+<programlisting>nova volume-attach 857d70e4-35d5-4bf6-97ed-bf4e9a4dcf5a &lt;volume-id&gt; /dev/vdb</programlisting>
3639+<para>A volume can only be attached to one instance at a time. When nova volume-list shows the status of a volume as 'available', it means it is not attached to any instance and ready to be used. If you run nova volume-list, you can see that the status changes from "available" to "in-use" if it is attached to an instance successfully.</para>
3640+<para>When a volume is attached to an instance, it shows up as an additional disk on the instance. You can login to the instance and mount the disk, format it and use it.</para>
3641 <para>Detach a volume from an instance.</para>
3642-<programlisting>euca-detach-volume vol-00000002</programlisting>
3643-<para>The data on the volume persists even after the volume is detached from an instance. You can see the data on reattaching the volume to another instance.</para>
3644+<programlisting>nova volume-detach 857d70e4-35d5-4bf6-97ed-bf4e9a4dcf5a &lt;volume-id&gt;</programlisting>
3645+<para>The data on the volume persists even after the volume is detached from an instance or after the instance is terminated. You can view the data after attaching the volume to another instance.</para>
3646 <para>Even though you have indicated /dev/vdb as the device on the instance, the actual device name created by the OS running inside the instance may differ. You can find the name of the device by looking at the device nodes in /dev or by watching the syslog when the volume is being attached.</para>
3647 </section>
3648-<section>
3649+<section xml:id="Swift_storage_operations--d1e2125">
3650 <title>Swift</title>
3651-<para>Swift is a storage service that can be used for storage and archival of objects. Swift provides a REST interface. You can use 'curl' command to get familiar with the service. All requests to Swift service need an authentication token. This authentication token can be obtained by providing your user credentials on Swift. For more details refer to the Swift section in the "Installation &amp; Configuration" chapter.</para>
3652-<para>Execute the following command and make a note of X-Auth-Token. You will need this token to use in all subsequent commands.</para>
3653-<programlisting>
3654-curl -v -H 'X-Storage-User: admin:admin' -H 'X-Storage-Pass: admin' http://10.10.10.2:8080/auth/v1.0
3655-</programlisting>
3656-<para>In the following command examples we are using 'AUTH_tk3bb59eda987446c79160202d4dfbdc8c' as the X-Auth-Token. Replace this with the appropriate token you obtained in the above step.</para>
3657-<para>To create a container:</para>
3658-<programlisting>
3659-curl -X PUT -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer
3660-</programlisting>
3661-<para>To list all containers in current account:</para>
3662-<programlisting>
3663-curl -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/
3664-</programlisting>
3665-<para>Uploading a file "file1" to container "mycontainer"</para>
3666-<programlisting>
3667-curl -X PUT -T file1 -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer/
3668-</programlisting>
3669-<para>To list all objects in a container:</para>
3670-<programlisting>
3671-curl -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer
3672-</programlisting>
3673-<para>To list all objects in a container that starts with a particular prefix "fi":</para>
3674-<programlisting>
3675-curl -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer/?prefix=fi
3676-</programlisting>
3677-<para>To download a particular file "file1" from the container "mycontainer":</para>
3678-<programlisting>
3679-curl -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer/file1
3680-</programlisting>
3681-<para>To download file1 and save it locally as localfile1:</para>
3682-<programlisting>
3683-curl -o localfile1 -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer/file1
3684-</programlisting>
3685-<para>To delete a container "mycontainer"</para>
3686-<programlisting>
3687-curl -X DELETE -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer
3688-</programlisting>
3689-<para>To delete a specific file "file1" from the container:</para>
3690-<programlisting>
3691-curl -X DELETE -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer/file1
3692-</programlisting>
3693-<para>To get metadata associated with a Swift account:</para>
3694-<programlisting>
3695-curl -v -X HEAD -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/
3696-</programlisting>
3697-<para>To get metadata associated with a container:</para>
3698-<programlisting>
3699-curl -v -X HEAD -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/mycontainer
3700-</programlisting>
3701-<para>You can request the data from Swift in XML or JSON format by specifying the "format" paramater. This parameter can be applied to any of the above requests. Here are a few examples:</para>
3702-<programlisting>
3703-curl -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/?format=json
3704-</programlisting>
3705-<programlisting>
3706-curl -H 'X-Auth-Token: AUTH_tk3bb59eda987446c79160202d4dfbdc8c' http://10.10.10.2:8080/v1/AUTH_admin/?format=xml
3707-</programlisting>
3708-<para>The above operations can also be done using 'swift' command. For instructions on using 'swift' command, please refer to "swift --help".</para>
3709-</section>
3710-</section>
3711-</chapter>
3712\ No newline at end of file
3713+<para>Swift is a reliable, distributed, massively scalable blob storage service that can be used for storage and archival of objects. Swift provides a REST interface. You can use Swift commandline which is an interface for the OpenStack object store service.</para>
3714+<para>To get the information about swift account, container and objects.</para>
3715+<programlisting>
3716+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd stat
3717+Account: AUTH_43b42dae-dc0b-4a4b-ac55-97de614d6e6e
3718+Containers: 1
3719+Objects: 1
3720+Bytes: 1124
3721+Accept-Ranges: bytes
3722+X-Trans-Id: txb21186a9eef64ed295a1e95896a0fc72
3723+</programlisting>
3724+<para>To get information about a particular container (mycontainer):</para>
3725+<programlisting>
3726+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd stat mycontainer
3727+</programlisting>
3728+<para>To get information about an object (abc123.txt) within container (mycontainer):</para>
3729+<programlisting>
3730+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd stat mycontainer abc123.txt
3731+</programlisting>
3732+<para>To list available containers in account:</para>
3733+<programlisting>
3734+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd list
3735+</programlisting>
3736+<para>To list all containers whose names begin with 'my':</para>
3737+<programlisting>
3738+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd --prefix=my list
3739+</programlisting>
3740+<para>To list all objects within container 'mycontainer':</para>
3741+<programlisting>
3742+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd --prefix=my list mycontainer
3743+</programlisting>
3744+<para>To upload files 'abc.txt' and 'xyz.txt' to 'mycontainer':</para>
3745+<programlisting>
3746+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd upload mycontainer /path/abc.txt /path/xyz.txt
3747+</programlisting>
3748+<para>To download all the objects from all containers:</para>
3749+<programlisting>
3750+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd --all download
3751+</programlisting>
3752+<para>To download all objects from container 'mycontainer':</para>
3753+<programlisting>
3754+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd download mycontainer
3755+</programlisting>
3756+<para>To download 'abc.txt' and 'xyz.txt' from container 'mycontainer':</para>
3757+<programlisting>
3758+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd download mycontainer abc.txt xyz.txt
3759+</programlisting>
3760+<para>To delete all objects in all containers:</para>
3761+<programlisting>
3762+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd --all delete
3763+</programlisting>
3764+<para>To delete all objects in container 'mycontainer':</para>
3765+<programlisting>
3766+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd delete mycontainer
3767+</programlisting>
3768+<para>To delete files 'abc.txt' and 'xyz.txt' from container 'mycontainer':</para>
3769+<programlisting>
3770+$ swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swiftuser -K swiftpasswd delete mycontainer abc.txt xyz.txt
3771+</programlisting>
3772+</section>
3773+</section>
3774+</chapter>
3775
3776=== removed file 'images/Arch.png'
3777Binary files images/Arch.png 2011-10-11 13:49:47 +0000 and images/Arch.png 1970-01-01 00:00:00 +0000 differ
3778=== removed file 'images/Archhtml.png'
3779Binary files images/Archhtml.png 2011-10-11 13:49:47 +0000 and images/Archhtml.png 1970-01-01 00:00:00 +0000 differ
3780=== added file 'images/architecture.png'
3781Binary files images/architecture.png 1970-01-01 00:00:00 +0000 and images/architecture.png 2012-05-09 21:52:21 +0000 differ
3782=== added file 'images/architecturehtml.png'
3783Binary files images/architecturehtml.png 1970-01-01 00:00:00 +0000 and images/architecturehtml.png 2012-05-09 21:52:21 +0000 differ
3784=== removed file 'images/ckeypairs.png'
3785Binary files images/ckeypairs.png 2011-09-16 11:05:01 +0000 and images/ckeypairs.png 1970-01-01 00:00:00 +0000 differ
3786=== removed file 'images/coutput.png'
3787Binary files images/coutput.png 2011-09-16 11:05:01 +0000 and images/coutput.png 1970-01-01 00:00:00 +0000 differ
3788=== added directory 'images/dashboard'
3789=== added file 'images/dashboard/access_security.png'
3790Binary files images/dashboard/access_security.png 1970-01-01 00:00:00 +0000 and images/dashboard/access_security.png 2012-05-09 21:52:21 +0000 differ
3791=== added file 'images/dashboard/access_security_securitygp.png'
3792Binary files images/dashboard/access_security_securitygp.png 1970-01-01 00:00:00 +0000 and images/dashboard/access_security_securitygp.png 2012-05-09 21:52:21 +0000 differ
3793=== added file 'images/dashboard/containers.png'
3794Binary files images/dashboard/containers.png 1970-01-01 00:00:00 +0000 and images/dashboard/containers.png 2012-05-09 21:52:21 +0000 differ
3795=== added file 'images/dashboard/create_keypair.png'
3796Binary files images/dashboard/create_keypair.png 1970-01-01 00:00:00 +0000 and images/dashboard/create_keypair.png 2012-05-09 21:52:21 +0000 differ
3797=== added file 'images/dashboard/edit_security_securitygp.png'
3798Binary files images/dashboard/edit_security_securitygp.png 1970-01-01 00:00:00 +0000 and images/dashboard/edit_security_securitygp.png 2012-05-09 21:52:21 +0000 differ
3799=== added file 'images/dashboard/flavors.png'
3800Binary files images/dashboard/flavors.png 1970-01-01 00:00:00 +0000 and images/dashboard/flavors.png 2012-05-09 21:52:21 +0000 differ
3801=== added file 'images/dashboard/images.png'
3802Binary files images/dashboard/images.png 1970-01-01 00:00:00 +0000 and images/dashboard/images.png 2012-05-09 21:52:21 +0000 differ
3803=== added file 'images/dashboard/images_snapshots.png'
3804Binary files images/dashboard/images_snapshots.png 1970-01-01 00:00:00 +0000 and images/dashboard/images_snapshots.png 2012-05-09 21:52:21 +0000 differ
3805=== added file 'images/dashboard/instances.png'
3806Binary files images/dashboard/instances.png 1970-01-01 00:00:00 +0000 and images/dashboard/instances.png 2012-05-09 21:52:21 +0000 differ
3807=== added file 'images/dashboard/instances_volumes.png'
3808Binary files images/dashboard/instances_volumes.png 1970-01-01 00:00:00 +0000 and images/dashboard/instances_volumes.png 2012-05-09 21:52:21 +0000 differ
3809=== added file 'images/dashboard/login.png'
3810Binary files images/dashboard/login.png 1970-01-01 00:00:00 +0000 and images/dashboard/login.png 2012-05-09 21:52:21 +0000 differ
3811=== added file 'images/dashboard/objects.png'
3812Binary files images/dashboard/objects.png 1970-01-01 00:00:00 +0000 and images/dashboard/objects.png 2012-05-09 21:52:21 +0000 differ
3813=== added file 'images/dashboard/overview.png'
3814Binary files images/dashboard/overview.png 1970-01-01 00:00:00 +0000 and images/dashboard/overview.png 2012-05-09 21:52:21 +0000 differ
3815=== added file 'images/dashboard/overview2.png'
3816Binary files images/dashboard/overview2.png 1970-01-01 00:00:00 +0000 and images/dashboard/overview2.png 2012-05-09 21:52:21 +0000 differ
3817=== added file 'images/dashboard/projects.png'
3818Binary files images/dashboard/projects.png 1970-01-01 00:00:00 +0000 and images/dashboard/projects.png 2012-05-09 21:52:21 +0000 differ
3819=== added file 'images/dashboard/quotas.png'
3820Binary files images/dashboard/quotas.png 1970-01-01 00:00:00 +0000 and images/dashboard/quotas.png 2012-05-09 21:52:21 +0000 differ
3821=== added file 'images/dashboard/services.png'
3822Binary files images/dashboard/services.png 1970-01-01 00:00:00 +0000 and images/dashboard/services.png 2012-05-09 21:52:21 +0000 differ
3823=== added file 'images/dashboard/users.png'
3824Binary files images/dashboard/users.png 1970-01-01 00:00:00 +0000 and images/dashboard/users.png 2012-05-09 21:52:21 +0000 differ
3825=== added file 'images/dashboard/vnc1.png'
3826Binary files images/dashboard/vnc1.png 1970-01-01 00:00:00 +0000 and images/dashboard/vnc1.png 2012-05-09 21:52:21 +0000 differ
3827=== added file 'images/dashboard/vnc2.png'
3828Binary files images/dashboard/vnc2.png 1970-01-01 00:00:00 +0000 and images/dashboard/vnc2.png 2012-05-09 21:52:21 +0000 differ
3829=== added file 'images/keystone.png'
3830Binary files images/keystone.png 1970-01-01 00:00:00 +0000 and images/keystone.png 2012-05-09 21:52:21 +0000 differ
3831=== added file 'images/keystone_dashboard.png'
3832Binary files images/keystone_dashboard.png 1970-01-01 00:00:00 +0000 and images/keystone_dashboard.png 2012-05-09 21:52:21 +0000 differ
3833=== added file 'images/keystone_dashboardhtml.png'
3834Binary files images/keystone_dashboardhtml.png 1970-01-01 00:00:00 +0000 and images/keystone_dashboardhtml.png 2012-05-09 21:52:21 +0000 differ
3835=== added file 'images/keystonehtml.png'
3836Binary files images/keystonehtml.png 1970-01-01 00:00:00 +0000 and images/keystonehtml.png 2012-05-09 21:52:21 +0000 differ
3837=== modified file 'images/lifecycle.png'
3838Binary files images/lifecycle.png 2011-09-16 11:05:01 +0000 and images/lifecycle.png 2012-05-09 21:52:21 +0000 differ
3839=== modified file 'images/lifecyclehtml.png'
3840Binary files images/lifecyclehtml.png 2011-09-16 11:05:01 +0000 and images/lifecyclehtml.png 2012-05-09 21:52:21 +0000 differ
3841=== removed file 'images/linstance.png'
3842Binary files images/linstance.png 2011-09-16 11:05:01 +0000 and images/linstance.png 1970-01-01 00:00:00 +0000 differ
3843=== removed file 'images/openstackv5.png'
3844Binary files images/openstackv5.png 2011-10-19 14:27:25 +0000 and images/openstackv5.png 1970-01-01 00:00:00 +0000 differ
3845=== removed file 'images/openstackv5html.png'
3846Binary files images/openstackv5html.png 2011-10-19 14:27:25 +0000 and images/openstackv5html.png 1970-01-01 00:00:00 +0000 differ
3847=== removed file 'images/security1.png'
3848Binary files images/security1.png 2011-09-16 11:05:01 +0000 and images/security1.png 1970-01-01 00:00:00 +0000 differ
3849=== removed file 'images/security1html.png'
3850Binary files images/security1html.png 2011-09-16 11:05:01 +0000 and images/security1html.png 1970-01-01 00:00:00 +0000 differ
3851=== added file 'images/setup.png'
3852Binary files images/setup.png 1970-01-01 00:00:00 +0000 and images/setup.png 2012-05-09 21:52:21 +0000 differ
3853=== added file 'images/setuphtml.png'
3854Binary files images/setuphtml.png 1970-01-01 00:00:00 +0000 and images/setuphtml.png 2012-05-09 21:52:21 +0000 differ
3855=== removed file 'images/tinstance.png'
3856Binary files images/tinstance.png 2011-09-16 11:05:01 +0000 and images/tinstance.png 1970-01-01 00:00:00 +0000 differ
3857=== modified file 'pom.xml'
3858--- pom.xml 2011-10-20 14:44:13 +0000
3859+++ pom.xml 2012-05-09 21:52:21 +0000
3860@@ -46,100 +46,126 @@
3861 </resource>
3862 </resources>
3863 <plugins>
3864- <!--<plugin>
3865- <groupId>org.codehaus.mojo</groupId>
3866- <artifactId>batik-maven-plugin</artifactId>
3867- <version>1.0-beta-1</version>
3868-
3869- <executions>
3870- <execution>
3871- <goals>
3872- <goal>rasterize</goal>
3873- </goals>
3874- <phase>generate-sources</phase>
3875- <configuration>
3876- <srcDir>${basedir}/source/docbkx/openstack-api-extensions/figures</srcDir>
3877- <destDir>${basedir}/target/docbkx/webhelp/apix-intro-proposal/content/figures</destDir>
3878- </configuration>
3879- </execution>
3880- </executions>
3881- </plugin>-->
3882+
3883 <plugin>
3884 <groupId>com.rackspace.cloud.api</groupId>
3885 <artifactId>clouddocs-maven-plugin</artifactId>
3886- <version>1.0.4</version>
3887+ <version>1.2.0</version>
3888 <executions>
3889 <execution>
3890+ <id>goal1</id>
3891 <goals>
3892 <goal>generate-pdf</goal>
3893+ </goals>
3894+ <phase>generate-sources</phase>
3895+ <configuration>
3896+ <highlightSource>false</highlightSource>
3897+ <!-- The following elements sets the autonumbering of sections in output for chapter numbers but no numbered sections-->
3898+ <sectionAutolabel>0</sectionAutolabel>
3899+ <sectionLabelIncludesComponentLabel>0</sectionLabelIncludesComponentLabel>
3900+ </configuration>
3901+ </execution>
3902+ <execution>
3903+ <id>goal2</id>
3904+ <goals>
3905 <goal>generate-webhelp</goal>
3906 </goals>
3907 <phase>generate-sources</phase>
3908+ <configuration>
3909+ <!-- These parameters only apply to webhelp -->
3910+ <enableDisqus>1</enableDisqus>
3911+ <disqusShortname>openstackstarterdoc</disqusShortname>
3912+ <enableGoogleAnalytics>1</enableGoogleAnalytics>
3913+ <googleAnalyticsId>UA-17511903-6</googleAnalyticsId>
3914+ <generateToc>
3915+ appendix toc,title
3916+ article/appendix nop
3917+ article toc,title
3918+ book title,figure,table,example,equation
3919+ chapter toc,title
3920+ part toc,title
3921+ preface toc,title
3922+ qandadiv toc
3923+ qandaset toc
3924+ reference toc,title
3925+ set toc,title
3926+ </generateToc>
3927+ <!-- The following elements sets the autonumbering of sections in output for chapter numbers but no numbered sections-->
3928+ <sectionAutolabel>0</sectionAutolabel>
3929+ <sectionLabelIncludesComponentLabel>0</sectionLabelIncludesComponentLabel>
3930+ <postProcess>
3931+ <!-- Copies the figures to the correct location for webhelp -->
3932+
3933+ <copy todir="${basedir}/target/docbkx/webhelp/OpenStackbook/content/images">
3934+ <fileset dir="${basedir}/images">
3935+ <include name="**/*.*" />
3936+ </fileset>
3937+ </copy>
3938+
3939+ <!-- Copies webhelp (HTML output) to desired URL location on docs.openstack.org -->
3940+
3941+ <copy
3942+ todir="${basedir}/target/docbkx/webhelp/openstack-compute/starter">
3943+ <fileset
3944+ dir="${basedir}/target/docbkx/webhelp/Openstackbook/">
3945+ <include name="**/*" />
3946+ </fileset>
3947+ </copy>
3948+
3949+ <!--Moves PDFs to the needed placement -->
3950+
3951+ <move failonerror="false"
3952+ file="${basedir}/target/docbkx/pdf/Openstackbook.pdf"
3953+ tofile="${basedir}/target/docbkx/webhelp/openstack-compute/starter/os-compute-starterguide-trunk.pdf"/>
3954+
3955+ <!--Deletes leftover uneeded directories -->
3956+
3957+ <delete dir="${basedir}/target/docbkx/webhelp/Openstackbook"/>
3958+
3959+ </postProcess>
3960+ </configuration>
3961+ </execution>
3962+ <execution>
3963+ <id>goal3</id>
3964+ <goals>
3965+ <goal>generate-epub</goal>
3966+ </goals>
3967+ <!--<phase>generate-sources</phase>-->
3968+ <configuration>
3969+ <highlightSource>true</highlightSource>
3970+ <!-- The following elements sets the autonumbering of sections in output for chapter numbers but no numbered sections-->
3971+ <sectionAutolabel>0</sectionAutolabel>
3972+ <sectionLabelIncludesComponentLabel>0</sectionLabelIncludesComponentLabel>
3973+ <postProcess>
3974+ <!-- Copies the figures to the correct location for epub -->
3975+ <mkdir dir="${basedir}/target/docbkx/epub/Openstackbook/images"/>
3976+ <copy todir="${basedir}/target/docbkx/epub/Openstackbook/images">
3977+ <fileset dir="${basedir}/images">
3978+ <include name="**/*.png" />
3979+ </fileset>
3980+ </copy>
3981+
3982+ <!-- Rezip now that the figures are in the correct location -->
3983+ <zip
3984+ destfile="${basedir}/target/docbkx/webhelp/openstack-compute/starter/os-compute-starterguide.epub"
3985+ basedir="${basedir}/target/docbkx/epub/Openstackbook/"
3986+ update="true"
3987+ excludes="**/*.epub"/>
3988+
3989+ </postProcess>
3990+ </configuration>
3991 </execution>
3992 </executions>
3993- <dependencies>
3994- <dependency>
3995- <groupId>org.docbook</groupId>
3996- <artifactId>docbook-xml</artifactId>
3997- <version>4.4</version>
3998- <scope>runtime</scope>
3999- </dependency>
4000- </dependencies>
4001 <configuration>
4002+ <!-- These parameters apply to all the goals -->
4003 <xincludeSupported>true</xincludeSupported>
4004 <sourceDirectory>.</sourceDirectory>
4005 <includes>
4006 Openstackbook.xml
4007 </includes>
4008- <highlightSource>false</highlightSource>
4009 <profileSecurity>reviewer</profileSecurity>
4010 <branding>openstack</branding>
4011- <enableDisqus>1</enableDisqus>
4012- <disqusShortname>openstackstarterdoc</disqusShortname>
4013- <enableGoogleAnalytics>1</enableGoogleAnalytics>
4014- <googleAnalyticsId>UA-17511903-6</googleAnalyticsId>
4015- <generateToc>
4016- appendix toc,title
4017- article/appendix nop
4018- article toc,title
4019- book title,figure,table,example,equation
4020- chapter toc,title
4021- part toc,title
4022- preface toc,title
4023- qandadiv toc
4024- qandaset toc
4025- reference toc,title
4026- set toc,title
4027- </generateToc>
4028- <!-- The following elements sets the autonumbering of sections in output for chapter numbers but no numbered sections-->
4029- <sectionAutolabel>0</sectionAutolabel>
4030- <sectionLabelIncludesComponentLabel>0</sectionLabelIncludesComponentLabel>
4031- <postProcess>
4032- <!-- Copies the figures to the correct location for webhelp -->
4033- <copy todir="${basedir}/target/docbkx/webhelp/Openstackbook/content/images">
4034- <fileset dir="${basedir}/images">
4035- <include name="**/*.png"/>
4036- </fileset>
4037- </copy>
4038-
4039- <!-- Moves HTML of Starter Guide to diablo directory -->
4040- <copy todir="${basedir}/target/docbkx/webhelp/diablo/openstack-compute/starter/">
4041- <fileset
4042- dir="${basedir}/target/docbkx/webhelp/Openstackbook">
4043- <include name="**/*" />
4044- </fileset>
4045- </copy>
4046-
4047- <!--Moves PDFs to the needed placement -->
4048- <move failonerror="false"
4049- file="${basedir}/target/docbkx/pdf/Openstackbook.pdf"
4050- tofile="${basedir}/target/docbkx/webhelp/diablo/openstack-compute/starter/openstack-starter-guide-diablo.pdf"/>
4051- <!--Deletes leftover uneeded directories -->
4052- <!--<delete
4053- dir="${basedir}/target/docbkx/pdf"/>-->
4054- </postProcess>
4055 </configuration>
4056-
4057 </plugin>
4058
4059 </plugins>
4060
4061=== removed directory 'target'
4062=== removed directory 'target/docbkx'
4063=== removed directory 'target/docbkx/fonts'
4064=== removed directory 'target/docbkx/fonts/CartoGothic-Std'
4065=== removed file 'target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf'
4066Binary files target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf 2011-09-16 11:05:01 +0000 and target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Bold.ttf 1970-01-01 00:00:00 +0000 differ
4067=== removed file 'target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf'
4068Binary files target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf 2011-09-16 11:05:01 +0000 and target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-BoldItalic.ttf 1970-01-01 00:00:00 +0000 differ
4069=== removed file 'target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf'
4070Binary files target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf 2011-09-16 11:05:01 +0000 and target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Book.ttf 1970-01-01 00:00:00 +0000 differ
4071=== removed file 'target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf'
4072Binary files target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf 2011-09-16 11:05:01 +0000 and target/docbkx/fonts/CartoGothic-Std/CartoGothicStd-Italic.ttf 1970-01-01 00:00:00 +0000 differ
4073=== removed file 'target/docbkx/fonts/CartoGothic-Std/FontSite License.txt'
4074--- target/docbkx/fonts/CartoGothic-Std/FontSite License.txt 2011-09-16 11:05:01 +0000
4075+++ target/docbkx/fonts/CartoGothic-Std/FontSite License.txt 1970-01-01 00:00:00 +0000
4076@@ -1,21 +0,0 @@
4077-This typeface software ("SOFTWARE") is the property of FontSite Inc. Its
4078-use by you is covered under the terms of an End-User License Agreement
4079-("EULA"). By exercising your rights to make and use copies of this SOFTWARE,
4080-you agree to be bound by the terms of this EULA. If you do not agree to the
4081-terms of this EULA, you may not use the SOFTWARE.
4082-
4083-This SOFTWARE is a valuable asset of FontSite Inc. which is protected by
4084-copyright laws and international copyright treaties, as well as other
4085-intellectual property laws and treaties. The typeface software is licensed,
4086-not sold.
4087-
4088-This EULA grants you the following rights:
4089-
4090-You may install and use an unlimited number of copies of this SOFTWARE.
4091-
4092-You may reproduce and distribute an unlimited number of copies of this
4093-SOFTWARE, provided that each copy shall be a true and complete copy,
4094-including all copyright and trademark notices, electronic documentation
4095-(user guide in PDF format, etc.), and shall be accompanied by a copy of this
4096-EULA. Copies of the SOFTWARE may not be distributed for profit either on a
4097-standalone basis or included as part of your own product.
4098\ No newline at end of file
4099
4100=== removed file 'target/docbkx/fonts/fontconfig.st'
4101--- target/docbkx/fonts/fontconfig.st 2011-09-16 11:05:01 +0000
4102+++ target/docbkx/fonts/fontconfig.st 1970-01-01 00:00:00 +0000
4103@@ -1,35 +0,0 @@
4104-<?xml version="1.0" encoding="UTF-8"?>
4105-
4106-<fop version="1.0">
4107- <!-- Base URL for resolving relative URLs -->
4108- <base>.</base>
4109-
4110- <!-- Source resolution in dpi (dots/pixels per inch) for determining the size of pixels in SVG and bitmap images, default: 72dpi -->
4111- <source-resolution>90</source-resolution>
4112- <!-- Target resolution in dpi (dots/pixels per inch) for specifying the target resolution for generated bitmaps, default: 72dpi -->
4113- <target-resolution>90</target-resolution>
4114-
4115- <!-- Default page-height and page-width, in case
4116- value is specified as auto -->
4117- <default-page-settings height="11in" width="8.26in"/>
4118-
4119- <renderers>
4120- <renderer mime="application/pdf">
4121- <filterList>
4122- <!-- provides compression using zlib flate (default is on) -->
4123- <value>flate</value>
4124-
4125- <!-- encodes binary data into printable ascii characters (default off)
4126- This provides about a 4:5 expansion of data size -->
4127- <!-- <value>ascii-85</value> -->
4128-
4129- <!-- encodes binary data with hex representation (default off)
4130- This filter is not recommended as it doubles the data size -->
4131- <!-- <value>ascii-hex</value> -->
4132- </filterList>
4133- <fonts>
4134- <directory recursive="true">$fontPath$</directory>
4135- </fonts>
4136- </renderer>
4137- </renderers>
4138-</fop>
4139
4140=== removed directory 'target/docbkx/images'
4141=== removed directory 'target/docbkx/images/callouts'
4142=== removed file 'target/docbkx/images/callouts/1.svg'
4143--- target/docbkx/images/callouts/1.svg 2011-09-16 11:05:01 +0000
4144+++ target/docbkx/images/callouts/1.svg 1970-01-01 00:00:00 +0000
4145@@ -1,15 +0,0 @@
4146-<?xml version="1.0" encoding="utf-8"?>
4147-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4148-<!DOCTYPE svg [
4149- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4150- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4151-]>
4152-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4153- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4154-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4155-<g>
4156- <g style="enable-background:new ;">
4157- <path style="fill:#FFFFFF;" d="M10.428,10.411h0.56c3.78,0,4.788-1.96,4.872-3.444h3.22v19.88h-3.92V13.154h-4.732V10.411z"/>
4158- </g>
4159-</g>
4160-</svg>
4161
4162=== removed file 'target/docbkx/images/callouts/10.svg'
4163--- target/docbkx/images/callouts/10.svg 2011-09-16 11:05:01 +0000
4164+++ target/docbkx/images/callouts/10.svg 1970-01-01 00:00:00 +0000
4165@@ -1,18 +0,0 @@
4166-<?xml version="1.0" encoding="utf-8"?>
4167-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4168-<!DOCTYPE svg [
4169- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4170- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4171-]>
4172-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4173- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4174-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4175-<g>
4176- <g style="enable-background:new ;">
4177- <path style="fill:#FFFFFF;" d="M3.815,10.758h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76v17.04h-3.36V13.11H3.815V10.758z"/>
4178- <path style="fill:#FFFFFF;" d="M22.175,7.806c4.009,0,5.904,2.76,5.904,8.736c0,5.975-1.896,8.76-5.904,8.76
4179- c-4.008,0-5.904-2.785-5.904-8.76C16.271,10.566,18.167,7.806,22.175,7.806z M22.175,22.613c1.921,0,2.448-1.68,2.448-6.071
4180- c0-4.393-0.527-6.049-2.448-6.049c-1.92,0-2.448,1.656-2.448,6.049C19.727,20.934,20.255,22.613,22.175,22.613z"/>
4181- </g>
4182-</g>
4183-</svg>
4184
4185=== removed file 'target/docbkx/images/callouts/11.svg'
4186--- target/docbkx/images/callouts/11.svg 2011-09-16 11:05:01 +0000
4187+++ target/docbkx/images/callouts/11.svg 1970-01-01 00:00:00 +0000
4188@@ -1,16 +0,0 @@
4189-<?xml version="1.0" encoding="utf-8"?>
4190-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4191-<!DOCTYPE svg [
4192- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4193- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4194-]>
4195-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4196- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4197-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4198-<g>
4199- <g style="enable-background:new ;">
4200- <path style="fill:#FFFFFF;" d="M5.209,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H5.209V10.412z"/>
4201- <path style="fill:#FFFFFF;" d="M18.553,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.359V12.764h-4.056V10.412z"/>
4202- </g>
4203-</g>
4204-</svg>
4205
4206=== removed file 'target/docbkx/images/callouts/12.svg'
4207--- target/docbkx/images/callouts/12.svg 2011-09-16 11:05:01 +0000
4208+++ target/docbkx/images/callouts/12.svg 1970-01-01 00:00:00 +0000
4209@@ -1,18 +0,0 @@
4210-<?xml version="1.0" encoding="utf-8"?>
4211-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4212-<!DOCTYPE svg [
4213- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4214- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4215-]>
4216-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4217- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4218-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4219-<g>
4220- <g style="enable-background:new ;">
4221- <path style="fill:#FFFFFF;" d="M4.813,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H4.813V10.412z"/>
4222- <path style="fill:#FFFFFF;" d="M17.316,13.484c0-5.545,4.056-6.024,5.568-6.024c3.265,0,5.856,1.92,5.856,5.376
4223- c0,2.928-1.896,4.416-3.553,5.544c-2.256,1.584-3.432,2.353-3.815,3.145h7.392V24.5h-11.64c0.12-1.992,0.264-4.08,3.96-6.768
4224- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.353-2.424c-2.352,0-2.423,1.944-2.447,3.192H17.316z"/>
4225- </g>
4226-</g>
4227-</svg>
4228
4229=== removed file 'target/docbkx/images/callouts/13.svg'
4230--- target/docbkx/images/callouts/13.svg 2011-09-16 11:05:01 +0000
4231+++ target/docbkx/images/callouts/13.svg 1970-01-01 00:00:00 +0000
4232@@ -1,20 +0,0 @@
4233-<?xml version="1.0" encoding="utf-8"?>
4234-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4235-<!DOCTYPE svg [
4236- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4237- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4238-]>
4239-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4240- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4241-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4242-<g>
4243- <g style="enable-background:new ;">
4244- <path style="fill:#FFFFFF;" d="M3.813,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H3.813V10.412z"/>
4245- <path style="fill:#FFFFFF;" d="M20.611,14.636h0.529c1.008,0,2.855-0.096,2.855-2.304c0-0.624-0.288-2.185-2.137-2.185
4246- c-2.303,0-2.303,2.185-2.303,2.784h-3.12c0-3.191,1.8-5.472,5.64-5.472c2.279,0,5.279,1.152,5.279,4.752
4247- c0,1.728-1.08,2.808-2.039,3.24V15.5c0.6,0.168,2.568,1.056,2.568,3.96c0,3.216-2.377,5.496-5.809,5.496
4248- c-1.607,0-5.928-0.36-5.928-5.688h3.288l-0.024,0.024c0,0.912,0.24,2.976,2.496,2.976c1.344,0,2.52-0.911,2.52-2.808
4249- c0-2.328-2.256-2.424-3.816-2.424V14.636z"/>
4250- </g>
4251-</g>
4252-</svg>
4253
4254=== removed file 'target/docbkx/images/callouts/14.svg'
4255--- target/docbkx/images/callouts/14.svg 2011-09-16 11:05:01 +0000
4256+++ target/docbkx/images/callouts/14.svg 1970-01-01 00:00:00 +0000
4257@@ -1,17 +0,0 @@
4258-<?xml version="1.0" encoding="utf-8"?>
4259-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4260-<!DOCTYPE svg [
4261- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4262- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4263-]>
4264-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4265- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4266-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4267-<g>
4268- <g style="enable-background:new ;">
4269- <path style="fill:#FFFFFF;" d="M4.146,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H4.146V10.412z"/>
4270- <path style="fill:#FFFFFF;" d="M28.457,20.732h-1.896V24.5h-3.36v-3.768h-6.72v-2.904L22.746,7.46h3.815v10.656h1.896V20.732z
4271- M23.201,18.116c0-4.128,0.072-6.792,0.072-7.32h-0.048l-4.272,7.32H23.201z"/>
4272- </g>
4273-</g>
4274-</svg>
4275
4276=== removed file 'target/docbkx/images/callouts/15.svg'
4277--- target/docbkx/images/callouts/15.svg 2011-09-16 11:05:01 +0000
4278+++ target/docbkx/images/callouts/15.svg 1970-01-01 00:00:00 +0000
4279@@ -1,19 +0,0 @@
4280-<?xml version="1.0" encoding="utf-8"?>
4281-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4282-<!DOCTYPE svg [
4283- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4284- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4285-]>
4286-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4287- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4288-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4289-<g>
4290- <g style="enable-background:new ;">
4291- <path style="fill:#FFFFFF;" d="M3.479,11.079h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76v17.04h-3.36V13.43H3.479V11.079z"/>
4292- <path style="fill:#FFFFFF;" d="M19.342,14.943c0.625-0.433,1.392-0.937,3.048-0.937c2.279,0,5.16,1.584,5.16,5.496
4293- c0,2.328-1.176,6.121-6.192,6.121c-2.664,0-5.376-1.584-5.544-5.016h3.36c0.144,1.391,0.888,2.326,2.376,2.326
4294- c1.607,0,2.544-1.367,2.544-3.191c0-1.512-0.72-3.047-2.496-3.047c-0.456,0-1.608,0.023-2.256,1.223l-3-0.143l1.176-9.361h9.36
4295- v2.832h-6.937L19.342,14.943z"/>
4296- </g>
4297-</g>
4298-</svg>
4299
4300=== removed file 'target/docbkx/images/callouts/16.svg'
4301--- target/docbkx/images/callouts/16.svg 2011-09-16 11:05:01 +0000
4302+++ target/docbkx/images/callouts/16.svg 1970-01-01 00:00:00 +0000
4303@@ -1,20 +0,0 @@
4304-<?xml version="1.0" encoding="utf-8"?>
4305-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4306-<!DOCTYPE svg [
4307- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4308- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4309-]>
4310-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4311- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4312-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4313-<g>
4314- <g style="enable-background:new ;">
4315- <path style="fill:#FFFFFF;" d="M3.813,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H3.813V10.412z"/>
4316- <path style="fill:#FFFFFF;" d="M24.309,11.78c-0.097-0.96-0.721-1.633-1.969-1.633c-2.184,0-2.688,2.496-2.808,4.704L19.58,14.9
4317- c0.456-0.624,1.296-1.416,3.191-1.416c3.529,0,5.209,2.712,5.209,5.256c0,3.72-2.28,6.216-5.568,6.216
4318- c-5.16,0-6.168-4.32-6.168-8.568c0-3.24,0.432-8.928,6.336-8.928c0.695,0,2.641,0.264,3.48,1.104
4319- c0.936,0.912,1.271,1.416,1.584,3.217H24.309z M22.172,16.172c-1.271,0-2.568,0.792-2.568,2.928c0,1.849,1.056,3.168,2.664,3.168
4320- c1.225,0,2.353-0.936,2.353-3.239C24.62,16.868,23.229,16.172,22.172,16.172z"/>
4321- </g>
4322-</g>
4323-</svg>
4324
4325=== removed file 'target/docbkx/images/callouts/17.svg'
4326--- target/docbkx/images/callouts/17.svg 2011-09-16 11:05:01 +0000
4327+++ target/docbkx/images/callouts/17.svg 1970-01-01 00:00:00 +0000
4328@@ -1,17 +0,0 @@
4329-<?xml version="1.0" encoding="utf-8"?>
4330-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4331-<!DOCTYPE svg [
4332- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4333- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4334-]>
4335-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4336- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4337-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4338-<g>
4339- <g style="enable-background:new ;">
4340- <path style="fill:#FFFFFF;" d="M3.479,11.079h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76v17.04h-3.36V13.43H3.479V11.079z"/>
4341- <path style="fill:#FFFFFF;" d="M27.838,11.006c-1.631,1.776-5.807,6.816-6.215,14.16h-3.457c0.36-6.816,4.632-12.24,6.072-13.776
4342- h-8.472l0.072-2.976h12V11.006z"/>
4343- </g>
4344-</g>
4345-</svg>
4346
4347=== removed file 'target/docbkx/images/callouts/18.svg'
4348--- target/docbkx/images/callouts/18.svg 2011-09-16 11:05:01 +0000
4349+++ target/docbkx/images/callouts/18.svg 1970-01-01 00:00:00 +0000
4350@@ -1,21 +0,0 @@
4351-<?xml version="1.0" encoding="utf-8"?>
4352-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4353-<!DOCTYPE svg [
4354- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4355- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4356-]>
4357-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4358- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4359-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4360-<g>
4361- <g style="enable-background:new ;">
4362- <path style="fill:#FFFFFF;" d="M4.813,10.412h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76V24.5h-3.36V12.764H4.813V10.412z"/>
4363- <path style="fill:#FFFFFF;" d="M23.172,24.956c-4.392,0-5.904-2.856-5.904-5.185c0-0.863,0-3.119,2.592-4.319
4364- c-1.344-0.672-2.064-1.752-2.064-3.336c0-2.904,2.328-4.656,5.304-4.656c3.528,0,5.4,2.088,5.4,4.44
4365- c0,1.464-0.6,2.712-1.968,3.432c1.632,0.815,2.544,1.896,2.544,4.104C29.076,21.596,27.684,24.956,23.172,24.956z M23.124,16.916
4366- c-1.224,0-2.4,0.792-2.4,2.64c0,1.632,0.936,2.712,2.472,2.712c1.752,0,2.424-1.512,2.424-2.688
4367- C25.62,18.38,24.996,16.916,23.124,16.916z M25.284,12.26c0-1.296-0.888-2.112-1.968-2.112c-1.512,0-2.305,0.864-2.305,2.112
4368- c0,1.008,0.744,2.112,2.185,2.112C24.516,14.372,25.284,13.484,25.284,12.26z"/>
4369- </g>
4370-</g>
4371-</svg>
4372
4373=== removed file 'target/docbkx/images/callouts/19.svg'
4374--- target/docbkx/images/callouts/19.svg 2011-09-16 11:05:01 +0000
4375+++ target/docbkx/images/callouts/19.svg 1970-01-01 00:00:00 +0000
4376@@ -1,20 +0,0 @@
4377-<?xml version="1.0" encoding="utf-8"?>
4378-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4379-<!DOCTYPE svg [
4380- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4381- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4382-]>
4383-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4384- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4385-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4386-<g>
4387- <g style="enable-background:new ;">
4388- <path style="fill:#FFFFFF;" d="M4.146,10.746h0.48c3.24,0,4.104-1.681,4.176-2.952h2.76v17.041h-3.36V13.097H4.146V10.746z"/>
4389- <path style="fill:#FFFFFF;" d="M20.225,20.898v0.023c0.192,1.176,0.936,1.68,1.968,1.68c1.392,0,2.783-1.176,2.808-4.752
4390- l-0.048-0.049c-0.768,1.152-2.088,1.441-3.24,1.441c-3.264,0-5.16-2.473-5.16-5.329c0-4.176,2.472-6.12,5.808-6.12
4391- c5.904,0,6,6.36,6,8.76c0,6.601-3.12,8.736-6.192,8.736c-2.904,0-4.992-1.68-5.28-4.391H20.225z M22.434,16.553
4392- c1.176,0,2.472-0.84,2.472-2.855c0-1.944-0.841-3.145-2.568-3.145c-0.864,0-2.424,0.433-2.424,2.88
4393- C19.913,16.001,21.161,16.553,22.434,16.553z"/>
4394- </g>
4395-</g>
4396-</svg>
4397
4398=== removed file 'target/docbkx/images/callouts/2.svg'
4399--- target/docbkx/images/callouts/2.svg 2011-09-16 11:05:01 +0000
4400+++ target/docbkx/images/callouts/2.svg 1970-01-01 00:00:00 +0000
4401@@ -1,17 +0,0 @@
4402-<?xml version="1.0" encoding="utf-8"?>
4403-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4404-<!DOCTYPE svg [
4405- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4406- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4407-]>
4408-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4409- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4410-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4411-<g>
4412- <g style="enable-background:new ;">
4413- <path style="fill:#FFFFFF;" d="M9.668,12.328c0-6.469,4.732-7.028,6.496-7.028c3.808,0,6.833,2.24,6.833,6.271
4414- c0,3.416-2.213,5.152-4.145,6.469c-2.632,1.848-4.004,2.744-4.452,3.668h8.624v3.472H9.444c0.14-2.324,0.308-4.76,4.62-7.896
4415- c3.584-2.604,5.012-3.612,5.012-5.853c0-1.315-0.84-2.828-2.744-2.828c-2.744,0-2.828,2.269-2.856,3.725H9.668z"/>
4416- </g>
4417-</g>
4418-</svg>
4419
4420=== removed file 'target/docbkx/images/callouts/20.svg'
4421--- target/docbkx/images/callouts/20.svg 2011-09-16 11:05:01 +0000
4422+++ target/docbkx/images/callouts/20.svg 1970-01-01 00:00:00 +0000
4423@@ -1,20 +0,0 @@
4424-<?xml version="1.0" encoding="utf-8"?>
4425-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4426-<!DOCTYPE svg [
4427- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4428- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4429-]>
4430-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4431- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4432-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4433-<g>
4434- <g style="enable-background:new ;">
4435- <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4436- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
4437- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
4438- <path style="fill:#FFFFFF;" d="M23.172,7.46c4.008,0,5.904,2.76,5.904,8.736c0,5.976-1.896,8.76-5.904,8.76
4439- s-5.904-2.784-5.904-8.76C17.268,10.22,19.164,7.46,23.172,7.46z M23.172,22.268c1.92,0,2.448-1.68,2.448-6.071
4440- c0-4.393-0.528-6.049-2.448-6.049s-2.448,1.656-2.448,6.049C20.724,20.588,21.252,22.268,23.172,22.268z"/>
4441- </g>
4442-</g>
4443-</svg>
4444
4445=== removed file 'target/docbkx/images/callouts/21.svg'
4446--- target/docbkx/images/callouts/21.svg 2011-09-16 11:05:01 +0000
4447+++ target/docbkx/images/callouts/21.svg 1970-01-01 00:00:00 +0000
4448@@ -1,18 +0,0 @@
4449-<?xml version="1.0" encoding="utf-8"?>
4450-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4451-<!DOCTYPE svg [
4452- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4453- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4454-]>
4455-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4456- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4457-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4458-<g>
4459- <g style="enable-background:new ;">
4460- <path style="fill:#FFFFFF;" d="M5.306,13.151c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4461- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392v2.976H5.114c0.12-1.992,0.264-4.08,3.96-6.768
4462- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H5.306z"/>
4463- <path style="fill:#FFFFFF;" d="M19.49,10.079h0.48c3.239,0,4.104-1.681,4.176-2.952h2.761v17.04h-3.361V12.431H19.49V10.079z"/>
4464- </g>
4465-</g>
4466-</svg>
4467
4468=== removed file 'target/docbkx/images/callouts/22.svg'
4469--- target/docbkx/images/callouts/22.svg 2011-09-16 11:05:01 +0000
4470+++ target/docbkx/images/callouts/22.svg 1970-01-01 00:00:00 +0000
4471@@ -1,20 +0,0 @@
4472-<?xml version="1.0" encoding="utf-8"?>
4473-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4474-<!DOCTYPE svg [
4475- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4476- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4477-]>
4478-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4479- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4480-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4481-<g>
4482- <g style="enable-background:new ;">
4483- <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4484- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
4485- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
4486- <path style="fill:#FFFFFF;" d="M17.316,13.484c0-5.545,4.056-6.024,5.568-6.024c3.265,0,5.856,1.92,5.856,5.376
4487- c0,2.928-1.896,4.416-3.553,5.544c-2.256,1.584-3.432,2.353-3.815,3.145h7.392V24.5h-11.64c0.12-1.992,0.264-4.08,3.96-6.768
4488- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.353-2.424c-2.352,0-2.423,1.944-2.447,3.192H17.316z"/>
4489- </g>
4490-</g>
4491-</svg>
4492
4493=== removed file 'target/docbkx/images/callouts/23.svg'
4494--- target/docbkx/images/callouts/23.svg 2011-09-16 11:05:01 +0000
4495+++ target/docbkx/images/callouts/23.svg 1970-01-01 00:00:00 +0000
4496@@ -1,22 +0,0 @@
4497-<?xml version="1.0" encoding="utf-8"?>
4498-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4499-<!DOCTYPE svg [
4500- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4501- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4502-]>
4503-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4504- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4505-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4506-<g>
4507- <g style="enable-background:new ;">
4508- <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4509- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
4510- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
4511- <path style="fill:#FFFFFF;" d="M21.612,14.636h0.528c1.008,0,2.855-0.096,2.855-2.304c0-0.624-0.287-2.185-2.136-2.185
4512- c-2.304,0-2.304,2.185-2.304,2.784h-3.12c0-3.191,1.8-5.472,5.64-5.472c2.28,0,5.28,1.152,5.28,4.752
4513- c0,1.728-1.08,2.808-2.04,3.24V15.5c0.6,0.168,2.568,1.056,2.568,3.96c0,3.216-2.377,5.496-5.809,5.496
4514- c-1.607,0-5.928-0.36-5.928-5.688h3.288l-0.024,0.024c0,0.912,0.24,2.976,2.496,2.976c1.344,0,2.521-0.911,2.521-2.808
4515- c0-2.328-2.257-2.424-3.816-2.424V14.636z"/>
4516- </g>
4517-</g>
4518-</svg>
4519
4520=== removed file 'target/docbkx/images/callouts/24.svg'
4521--- target/docbkx/images/callouts/24.svg 2011-09-16 11:05:01 +0000
4522+++ target/docbkx/images/callouts/24.svg 1970-01-01 00:00:00 +0000
4523@@ -1,19 +0,0 @@
4524-<?xml version="1.0" encoding="utf-8"?>
4525-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4526-<!DOCTYPE svg [
4527- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4528- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4529-]>
4530-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4531- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4532-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4533-<g>
4534- <g style="enable-background:new ;">
4535- <path style="fill:#FFFFFF;" d="M4.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4536- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H4.78c0.12-1.992,0.264-4.08,3.96-6.768
4537- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H4.972z"/>
4538- <path style="fill:#FFFFFF;" d="M30.124,20.732h-1.896V24.5h-3.36v-3.768h-6.72v-2.904L24.412,7.46h3.816v10.656h1.896V20.732z
4539- M24.868,18.116c0-4.128,0.071-6.792,0.071-7.32h-0.047l-4.272,7.32H24.868z"/>
4540- </g>
4541-</g>
4542-</svg>
4543
4544=== removed file 'target/docbkx/images/callouts/25.svg'
4545--- target/docbkx/images/callouts/25.svg 2011-09-16 11:05:01 +0000
4546+++ target/docbkx/images/callouts/25.svg 1970-01-01 00:00:00 +0000
4547@@ -1,21 +0,0 @@
4548-<?xml version="1.0" encoding="utf-8"?>
4549-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4550-<!DOCTYPE svg [
4551- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4552- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4553-]>
4554-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4555- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4556-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4557-<g>
4558- <g style="enable-background:new ;">
4559- <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4560- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
4561- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
4562- <path style="fill:#FFFFFF;" d="M20.676,14.276c0.624-0.433,1.393-0.937,3.049-0.937c2.279,0,5.16,1.584,5.16,5.496
4563- c0,2.328-1.177,6.12-6.193,6.12c-2.664,0-5.375-1.584-5.543-5.016h3.36c0.144,1.392,0.889,2.327,2.376,2.327
4564- c1.608,0,2.544-1.367,2.544-3.191c0-1.513-0.72-3.048-2.496-3.048c-0.455,0-1.607,0.023-2.256,1.224l-3-0.144l1.176-9.36h9.36
4565- v2.832h-6.937L20.676,14.276z"/>
4566- </g>
4567-</g>
4568-</svg>
4569
4570=== removed file 'target/docbkx/images/callouts/26.svg'
4571--- target/docbkx/images/callouts/26.svg 2011-09-16 11:05:01 +0000
4572+++ target/docbkx/images/callouts/26.svg 1970-01-01 00:00:00 +0000
4573@@ -1,22 +0,0 @@
4574-<?xml version="1.0" encoding="utf-8"?>
4575-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4576-<!DOCTYPE svg [
4577- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4578- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4579-]>
4580-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4581- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4582-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4583-<g>
4584- <g style="enable-background:new ;">
4585- <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4586- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
4587- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
4588- <path style="fill:#FFFFFF;" d="M25.309,11.78c-0.097-0.96-0.721-1.633-1.969-1.633c-2.184,0-2.688,2.496-2.808,4.704L20.58,14.9
4589- c0.456-0.624,1.296-1.416,3.191-1.416c3.529,0,5.209,2.712,5.209,5.256c0,3.72-2.28,6.216-5.568,6.216
4590- c-5.16,0-6.168-4.32-6.168-8.568c0-3.24,0.432-8.928,6.336-8.928c0.695,0,2.641,0.264,3.48,1.104
4591- c0.936,0.912,1.271,1.416,1.584,3.217H25.309z M23.172,16.172c-1.271,0-2.568,0.792-2.568,2.928c0,1.849,1.056,3.168,2.664,3.168
4592- c1.225,0,2.353-0.936,2.353-3.239C25.62,16.868,24.229,16.172,23.172,16.172z"/>
4593- </g>
4594-</g>
4595-</svg>
4596
4597=== removed file 'target/docbkx/images/callouts/27.svg'
4598--- target/docbkx/images/callouts/27.svg 2011-09-16 11:05:01 +0000
4599+++ target/docbkx/images/callouts/27.svg 1970-01-01 00:00:00 +0000
4600@@ -1,19 +0,0 @@
4601-<?xml version="1.0" encoding="utf-8"?>
4602-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4603-<!DOCTYPE svg [
4604- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4605- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4606-]>
4607-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4608- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4609-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4610-<g>
4611- <g style="enable-background:new ;">
4612- <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4613- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
4614- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
4615- <path style="fill:#FFFFFF;" d="M29.172,10.34c-1.632,1.776-5.808,6.816-6.216,14.16H19.5c0.36-6.816,4.632-12.24,6.072-13.776
4616- H17.1l0.072-2.976h12V10.34z"/>
4617- </g>
4618-</g>
4619-</svg>
4620
4621=== removed file 'target/docbkx/images/callouts/28.svg'
4622--- target/docbkx/images/callouts/28.svg 2011-09-16 11:05:01 +0000
4623+++ target/docbkx/images/callouts/28.svg 1970-01-01 00:00:00 +0000
4624@@ -1,23 +0,0 @@
4625-<?xml version="1.0" encoding="utf-8"?>
4626-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4627-<!DOCTYPE svg [
4628- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4629- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4630-]>
4631-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4632- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4633-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4634-<g>
4635- <g style="enable-background:new ;">
4636- <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4637- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
4638- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
4639- <path style="fill:#FFFFFF;" d="M23.172,24.956c-4.392,0-5.904-2.856-5.904-5.185c0-0.863,0-3.119,2.592-4.319
4640- c-1.344-0.672-2.064-1.752-2.064-3.336c0-2.904,2.328-4.656,5.304-4.656c3.528,0,5.4,2.088,5.4,4.44
4641- c0,1.464-0.6,2.712-1.968,3.432c1.632,0.815,2.544,1.896,2.544,4.104C29.076,21.596,27.684,24.956,23.172,24.956z M23.124,16.916
4642- c-1.224,0-2.4,0.792-2.4,2.64c0,1.632,0.936,2.712,2.472,2.712c1.752,0,2.424-1.512,2.424-2.688
4643- C25.62,18.38,24.996,16.916,23.124,16.916z M25.284,12.26c0-1.296-0.888-2.112-1.968-2.112c-1.512,0-2.305,0.864-2.305,2.112
4644- c0,1.008,0.744,2.112,2.185,2.112C24.516,14.372,25.284,13.484,25.284,12.26z"/>
4645- </g>
4646-</g>
4647-</svg>
4648
4649=== removed file 'target/docbkx/images/callouts/29.svg'
4650--- target/docbkx/images/callouts/29.svg 2011-09-16 11:05:01 +0000
4651+++ target/docbkx/images/callouts/29.svg 1970-01-01 00:00:00 +0000
4652@@ -1,22 +0,0 @@
4653-<?xml version="1.0" encoding="utf-8"?>
4654-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4655-<!DOCTYPE svg [
4656- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4657- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4658-]>
4659-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4660- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4661-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4662-<g>
4663- <g style="enable-background:new ;">
4664- <path style="fill:#FFFFFF;" d="M3.972,13.484c0-5.545,4.056-6.024,5.568-6.024c3.264,0,5.856,1.92,5.856,5.376
4665- c0,2.928-1.896,4.416-3.552,5.544c-2.256,1.584-3.432,2.353-3.816,3.145h7.392V24.5H3.78c0.12-1.992,0.264-4.08,3.96-6.768
4666- c3.072-2.232,4.296-3.097,4.296-5.017c0-1.128-0.72-2.424-2.352-2.424c-2.352,0-2.424,1.944-2.448,3.192H3.972z"/>
4667- <path style="fill:#FFFFFF;" d="M20.893,20.564v0.023c0.191,1.176,0.936,1.68,1.967,1.68c1.393,0,2.785-1.176,2.809-4.752
4668- l-0.048-0.048c-0.769,1.152-2.088,1.44-3.24,1.44c-3.264,0-5.16-2.473-5.16-5.328c0-4.176,2.472-6.12,5.807-6.12
4669- c5.904,0,6.001,6.36,6.001,8.76c0,6.601-3.12,8.736-6.192,8.736c-2.904,0-4.992-1.68-5.28-4.392H20.893z M23.1,16.22
4670- c1.176,0,2.473-0.84,2.473-2.855c0-1.944-0.84-3.145-2.568-3.145c-0.863,0-2.424,0.433-2.424,2.88
4671- C20.58,15.668,21.828,16.22,23.1,16.22z"/>
4672- </g>
4673-</g>
4674-</svg>
4675
4676=== removed file 'target/docbkx/images/callouts/3.svg'
4677--- target/docbkx/images/callouts/3.svg 2011-09-16 11:05:01 +0000
4678+++ target/docbkx/images/callouts/3.svg 1970-01-01 00:00:00 +0000
4679@@ -1,19 +0,0 @@
4680-<?xml version="1.0" encoding="utf-8"?>
4681-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4682-<!DOCTYPE svg [
4683- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4684- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4685-]>
4686-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4687- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4688-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4689-<g>
4690- <g style="enable-background:new ;">
4691- <path style="fill:#FFFFFF;" d="M15.127,14.005h0.616c1.176,0,3.332-0.112,3.332-2.688c0-0.728-0.336-2.548-2.492-2.548
4692- c-2.688,0-2.688,2.548-2.688,3.248h-3.64c0-3.724,2.1-6.384,6.58-6.384c2.66,0,6.16,1.344,6.16,5.544
4693- c0,2.016-1.261,3.276-2.38,3.78v0.056c0.699,0.196,2.996,1.232,2.996,4.62c0,3.752-2.772,6.412-6.776,6.412
4694- c-1.876,0-6.916-0.42-6.916-6.636h3.836l-0.028,0.027c0,1.064,0.28,3.473,2.912,3.473c1.568,0,2.94-1.064,2.94-3.276
4695- c0-2.716-2.632-2.828-4.452-2.828V14.005z"/>
4696- </g>
4697-</g>
4698-</svg>
4699
4700=== removed file 'target/docbkx/images/callouts/30.svg'
4701--- target/docbkx/images/callouts/30.svg 2011-09-16 11:05:01 +0000
4702+++ target/docbkx/images/callouts/30.svg 1970-01-01 00:00:00 +0000
4703@@ -1,22 +0,0 @@
4704-<?xml version="1.0" encoding="utf-8"?>
4705-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4706-<!DOCTYPE svg [
4707- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4708- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4709-]>
4710-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4711- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4712-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4713-<g>
4714- <g style="enable-background:new ;">
4715- <path style="fill:#FFFFFF;" d="M8.268,14.636h0.528c1.008,0,2.856-0.096,2.856-2.304c0-0.624-0.288-2.185-2.136-2.185
4716- c-2.304,0-2.304,2.185-2.304,2.784h-3.12c0-3.191,1.8-5.472,5.64-5.472c2.28,0,5.28,1.152,5.28,4.752
4717- c0,1.728-1.08,2.808-2.04,3.24V15.5c0.6,0.168,2.568,1.056,2.568,3.96c0,3.216-2.376,5.496-5.808,5.496
4718- c-1.608,0-5.928-0.36-5.928-5.688h3.288l-0.024,0.024c0,0.912,0.24,2.976,2.496,2.976c1.344,0,2.52-0.911,2.52-2.808
4719- c0-2.328-2.256-2.424-3.816-2.424V14.636z"/>
4720- <path style="fill:#FFFFFF;" d="M23.172,7.46c4.008,0,5.904,2.76,5.904,8.736c0,5.976-1.896,8.76-5.904,8.76
4721- s-5.904-2.784-5.904-8.76C17.268,10.22,19.164,7.46,23.172,7.46z M23.172,22.268c1.92,0,2.448-1.68,2.448-6.071
4722- c0-4.393-0.528-6.049-2.448-6.049s-2.448,1.656-2.448,6.049C20.724,20.588,21.252,22.268,23.172,22.268z"/>
4723- </g>
4724-</g>
4725-</svg>
4726
4727=== removed file 'target/docbkx/images/callouts/4.svg'
4728--- target/docbkx/images/callouts/4.svg 2011-09-16 11:05:01 +0000
4729+++ target/docbkx/images/callouts/4.svg 1970-01-01 00:00:00 +0000
4730@@ -1,16 +0,0 @@
4731-<?xml version="1.0" encoding="utf-8"?>
4732-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4733-<!DOCTYPE svg [
4734- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4735- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4736-]>
4737-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4738- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4739-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4740-<g>
4741- <g style="enable-background:new ;">
4742- <path style="fill:#FFFFFF;" d="M21.891,20.784h-2.212v4.396h-3.92v-4.396h-7.84v-3.389L15.227,5.3h4.452v12.432h2.212V20.784z
4743- M15.759,17.731c0-4.815,0.084-7.924,0.084-8.54h-0.056l-4.984,8.54H15.759z"/>
4744- </g>
4745-</g>
4746-</svg>
4747
4748=== removed file 'target/docbkx/images/callouts/5.svg'
4749--- target/docbkx/images/callouts/5.svg 2011-09-16 11:05:01 +0000
4750+++ target/docbkx/images/callouts/5.svg 1970-01-01 00:00:00 +0000
4751@@ -1,18 +0,0 @@
4752-<?xml version="1.0" encoding="utf-8"?>
4753-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4754-<!DOCTYPE svg [
4755- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4756- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4757-]>
4758-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4759- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4760-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4761-<g>
4762- <g style="enable-background:new ;">
4763- <path style="fill:#FFFFFF;" d="M14.035,14.252c0.728-0.504,1.624-1.092,3.556-1.092c2.66,0,6.02,1.848,6.02,6.411
4764- c0,2.717-1.372,7.141-7.224,7.141c-3.108,0-6.272-1.849-6.468-5.853h3.92c0.168,1.624,1.036,2.717,2.772,2.717
4765- c1.876,0,2.968-1.597,2.968-3.725c0-1.764-0.839-3.556-2.912-3.556c-0.532,0-1.876,0.028-2.632,1.428l-3.5-0.168l1.372-10.92
4766- h10.919v3.304h-8.092L14.035,14.252z"/>
4767- </g>
4768-</g>
4769-</svg>
4770
4771=== removed file 'target/docbkx/images/callouts/6.svg'
4772--- target/docbkx/images/callouts/6.svg 2011-09-16 11:05:01 +0000
4773+++ target/docbkx/images/callouts/6.svg 1970-01-01 00:00:00 +0000
4774@@ -1,19 +0,0 @@
4775-<?xml version="1.0" encoding="utf-8"?>
4776-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4777-<!DOCTYPE svg [
4778- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4779- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4780-]>
4781-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4782- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4783-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4784-<g>
4785- <g style="enable-background:new ;">
4786- <path style="fill:#FFFFFF;" d="M19.106,10.673c-0.112-1.12-0.84-1.904-2.296-1.904c-2.548,0-3.136,2.912-3.276,5.488l0.056,0.056
4787- c0.532-0.728,1.512-1.651,3.724-1.651c4.116,0,6.077,3.164,6.077,6.131c0,4.34-2.66,7.252-6.497,7.252
4788- c-6.02,0-7.196-5.039-7.196-9.996c0-3.78,0.504-10.416,7.392-10.416c0.812,0,3.08,0.308,4.061,1.288
4789- c1.092,1.063,1.483,1.652,1.848,3.752H19.106z M16.614,15.797c-1.484,0-2.996,0.924-2.996,3.416c0,2.156,1.232,3.697,3.108,3.697
4790- c1.428,0,2.745-1.094,2.745-3.781C19.471,16.609,17.846,15.797,16.614,15.797z"/>
4791- </g>
4792-</g>
4793-</svg>
4794
4795=== removed file 'target/docbkx/images/callouts/7.svg'
4796--- target/docbkx/images/callouts/7.svg 2011-09-16 11:05:01 +0000
4797+++ target/docbkx/images/callouts/7.svg 1970-01-01 00:00:00 +0000
4798@@ -1,16 +0,0 @@
4799-<?xml version="1.0" encoding="utf-8"?>
4800-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4801-<!DOCTYPE svg [
4802- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4803- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4804-]>
4805-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4806- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4807-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4808-<g>
4809- <g style="enable-background:new ;">
4810- <path style="fill:#FFFFFF;" d="M24.28,9.66c-1.904,2.071-6.776,7.951-7.252,16.52h-4.032c0.42-7.952,5.404-14.28,7.084-16.072
4811- h-9.884l0.084-3.472h14V9.66z"/>
4812- </g>
4813-</g>
4814-</svg>
4815
4816=== removed file 'target/docbkx/images/callouts/8.svg'
4817--- target/docbkx/images/callouts/8.svg 2011-09-16 11:05:01 +0000
4818+++ target/docbkx/images/callouts/8.svg 1970-01-01 00:00:00 +0000
4819@@ -1,20 +0,0 @@
4820-<?xml version="1.0" encoding="utf-8"?>
4821-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4822-<!DOCTYPE svg [
4823- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4824- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4825-]>
4826-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4827- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4828-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4829-<g>
4830- <g style="enable-background:new ;">
4831- <path style="fill:#FFFFFF;" d="M16.28,26.712c-5.124,0-6.888-3.332-6.888-6.048c0-1.009,0-3.641,3.024-5.04
4832- c-1.568-0.784-2.408-2.044-2.408-3.893c0-3.388,2.716-5.432,6.188-5.432c4.116,0,6.3,2.436,6.3,5.18
4833- c0,1.708-0.7,3.164-2.296,4.004c1.903,0.952,2.968,2.212,2.968,4.788C23.168,22.792,21.544,26.712,16.28,26.712z M16.224,17.332
4834- c-1.428,0-2.8,0.924-2.8,3.08c0,1.903,1.092,3.164,2.884,3.164c2.043,0,2.829-1.765,2.829-3.137
4835- C19.137,19.04,18.408,17.332,16.224,17.332z M18.744,11.899c0-1.512-1.036-2.464-2.296-2.464c-1.764,0-2.688,1.008-2.688,2.464
4836- c0,1.177,0.868,2.464,2.548,2.464C17.848,14.363,18.744,13.328,18.744,11.899z"/>
4837- </g>
4838-</g>
4839-</svg>
4840
4841=== removed file 'target/docbkx/images/callouts/9.svg'
4842--- target/docbkx/images/callouts/9.svg 2011-09-16 11:05:01 +0000
4843+++ target/docbkx/images/callouts/9.svg 1970-01-01 00:00:00 +0000
4844@@ -1,19 +0,0 @@
4845-<?xml version="1.0" encoding="utf-8"?>
4846-<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
4847-<!DOCTYPE svg [
4848- <!ENTITY ns_svg "http://www.w3.org/2000/svg">
4849- <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
4850-]>
4851-<svg version="1.0" id="Layer_1" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="33" height="33" viewBox="0 0 33 33"
4852- style="overflow:visible;enable-background:new 0 0 33 33;" xml:space="preserve">
4853-<circle style="stroke:#000000;" cx="16.5" cy="16.5" r="16"/>
4854-<g>
4855- <g style="enable-background:new ;">
4856- <path style="fill:#FFFFFF;" d="M13.953,21.921v0.027c0.224,1.372,1.092,1.961,2.296,1.961c1.624,0,3.248-1.372,3.276-5.545
4857- l-0.057-0.056c-0.896,1.344-2.436,1.68-3.78,1.68c-3.808,0-6.02-2.884-6.02-6.216c0-4.872,2.884-7.14,6.776-7.14
4858- c6.888,0,7,7.42,7,10.22c0,7.7-3.641,10.192-7.224,10.192c-3.388,0-5.824-1.96-6.16-5.124H13.953z M16.529,16.853
4859- c1.372,0,2.884-0.979,2.884-3.332c0-2.268-0.98-3.668-2.996-3.668c-1.008,0-2.828,0.504-2.828,3.36
4860- C13.589,16.209,15.045,16.853,16.529,16.853z"/>
4861- </g>
4862-</g>
4863-</svg>
4864
4865=== removed file 'target/docbkx/images/caution.svg'
4866--- target/docbkx/images/caution.svg 2011-09-16 11:05:01 +0000
4867+++ target/docbkx/images/caution.svg 1970-01-01 00:00:00 +0000
4868@@ -1,79 +0,0 @@
4869-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
4870-<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
4871-
4872-<svg
4873- xmlns:dc="http://purl.org/dc/elements/1.1/"
4874- xmlns:cc="http://creativecommons.org/ns#"
4875- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
4876- xmlns:svg="http://www.w3.org/2000/svg"
4877- xmlns="http://www.w3.org/2000/svg"
4878- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
4879- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
4880- width="48pt"
4881- height="48pt"
4882- viewBox="0 0 48 48"
4883- xml:space="preserve"
4884- id="svg4202"
4885- version="1.1"
4886- inkscape:version="0.48.0 r9654"
4887- sodipodi:docname="caution.svg"><metadata
4888- id="metadata4224"><rdf:RDF><cc:Work
4889- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
4890- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
4891- id="defs4222">
4892-
4893-
4894-
4895-
4896-
4897-
4898- </defs><sodipodi:namedview
4899- pagecolor="#ffffff"
4900- bordercolor="#666666"
4901- borderopacity="1"
4902- objecttolerance="10"
4903- gridtolerance="10"
4904- guidetolerance="10"
4905- inkscape:pageopacity="0"
4906- inkscape:pageshadow="2"
4907- inkscape:window-width="1306"
4908- inkscape:window-height="784"
4909- id="namedview4220"
4910- showgrid="false"
4911- inkscape:zoom="14.373972"
4912- inkscape:cx="31.692308"
4913- inkscape:cy="30"
4914- inkscape:window-x="49"
4915- inkscape:window-y="50"
4916- inkscape:window-maximized="0"
4917- inkscape:current-layer="svg4202" />
4918- <path
4919- style="fill-rule:nonzero;stroke:#ffffff;stroke-width:6.61119986;stroke-miterlimit:4"
4920- d="M 41.7,35.3 26.6,9.4 C 26,8.4 24.9,7.7 23.7,7.8 22.5,7.8 21.4,8.5 20.8,9.5 L 6.3,35.4 c -0.6,1 -0.6,2.3 0,3.3 0.6,1 1.7,1.6 2.9,1.6 h 29.6 c 1.2,0 2.3,-0.6 2.9,-1.7 0.6,-1 0.6,-2.3 0,-3.3 z"
4921- id="path4207"
4922- inkscape:connector-curvature="0" /><path
4923- style="fill:#ffffff;fill-rule:nonzero;stroke:#c40022;stroke-width:6.61119986000000015;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
4924- d="M 23.7,11 9.2,37 H 38.8 L 23.7,11 z"
4925- id="path4209"
4926- inkscape:connector-curvature="0" /><path
4927- style="fill:#ffffff;fill-rule:nonzero;stroke:none"
4928- d="M 23.7,11.9 10.3,36.1 H 37.8 L 23.8,12 z"
4929- id="path4211"
4930- inkscape:connector-curvature="0" /><g
4931- style="fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
4932- id="g4213">
4933- <path
4934- style="stroke:none"
4935- d="m 24.1,34 c -1.1,0 -1.8,-0.8 -1.8,-1.8 0,-1.1 0.7,-1.8 1.8,-1.8 1.1,0 1.8,0.7 1.8,1.8 0,1 -0.7,1.8 -1.8,1.8 h 0 z m -1.2,-4.7 -0.4,-9.1 h 3.2 l -0.4,9.1 H 23 z"
4936- id="path4215"
4937- inkscape:connector-curvature="0" />
4938- </g>
4939- <g
4940- id="crop_x0020_marks"
4941- style="fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
4942- <path
4943- style="fill:none;stroke:none;"
4944- d="M48,48H0V0h48v48z"
4945- id="path4218" />
4946- </g>
4947-</svg>
4948\ No newline at end of file
4949
4950=== removed directory 'target/docbkx/images/cc'
4951=== removed file 'target/docbkx/images/cc/by-nc-nd.svg'
4952--- target/docbkx/images/cc/by-nc-nd.svg 2011-09-16 11:05:01 +0000
4953+++ target/docbkx/images/cc/by-nc-nd.svg 1970-01-01 00:00:00 +0000
4954@@ -1,243 +0,0 @@
4955-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
4956-<!-- Created with Inkscape (http://www.inkscape.org/) -->
4957-<svg
4958- xmlns:dc="http://purl.org/dc/elements/1.1/"
4959- xmlns:cc="http://web.resource.org/cc/"
4960- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
4961- xmlns:svg="http://www.w3.org/2000/svg"
4962- xmlns="http://www.w3.org/2000/svg"
4963- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
4964- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
4965- width="120"
4966- height="42"
4967- id="svg2759"
4968- sodipodi:version="0.32"
4969- inkscape:version="0.45+devel"
4970- version="1.0"
4971- sodipodi:docname="by-nc-nd.svg"
4972- inkscape:output_extension="org.inkscape.output.svg.inkscape">
4973- <defs
4974- id="defs2761" />
4975- <sodipodi:namedview
4976- id="base"
4977- pagecolor="#ffffff"
4978- bordercolor="#8b8b8b"
4979- borderopacity="1"
4980- gridtolerance="10000"
4981- guidetolerance="10"
4982- objecttolerance="10"
4983- inkscape:pageopacity="0.0"
4984- inkscape:pageshadow="2"
4985- inkscape:zoom="1"
4986- inkscape:cx="179"
4987- inkscape:cy="89.569904"
4988- inkscape:document-units="px"
4989- inkscape:current-layer="layer1"
4990- width="120px"
4991- height="42px"
4992- inkscape:showpageshadow="false"
4993- inkscape:window-width="1198"
4994- inkscape:window-height="624"
4995- inkscape:window-x="488"
4996- inkscape:window-y="401" />
4997- <metadata
4998- id="metadata2764">
4999- <rdf:RDF>
5000- <cc:Work
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches