Commit d9cc7a194df497cd417cdc15f0a389c66b1add68

Authored by Antonio Terceiro
2 parents 9b521d8c 6f79024c
Exists in master and in 90 other branches 3.x, add_sisp_to_chef, add_super_archives_plugin, api_for_colab, automates_core_packing, backup, backup_not_prod, cdtc_configuration, changes_in_buttons_on_content_panel, colab_automated_login, colab_spb_plugin_recipe, colab_widgets_settings, design_validation, dev-lappis, dev_env_minimal, disable_email_dev, docs, fix_breadcrumbs_position, fix_categories_software_link, fix_edit_institution, fix_edit_software_with_another_license, fix_get_license_info, fix_gitlab_assets_permission, fix_list_style_inside_article, fix_list_style_on_folder_elements, fix_members_pagination, fix_merge_request_url, fix_models_translations, fix_no_license, fix_software_api, fix_software_block_migration, fix_software_communities_translations, fix_software_communities_unit_test, fix_style_create_institution_admin_panel, fix_superarchives_imports, fix_sym_links_noosfero, focus_search_field_theme, gov-user-refactoring, gov-user-refactoring-rails4, header_fix, institution_modal_on_rating, kalibro-conf-refactoring, kalibro-processor-package, lxc_settings, margin_fix, mezuro_cookbook, performance, prezento, r3, refactor_download_block, refactor_software_communities, refactor_software_for_sisp, register_page, release-process, release-process-v2, remove-unused-images, remove_backup_emails, remove_broken_theme, remove_secondary_email_from_user, remove_sisp_buttons, removing_super_archives_email, review_message, scope2method, signals_user_noosfero, sisp_catalog_header, sisp_colab_config, sisp_dev, sisp_dev_master, sisp_simple_version, software_as_organization, software_catalog_style_fix, software_communities_html_refactor, software_infos_api, spb_minimal_env, spb_to_rails4, spec_refactor, stable-4.1, stable-4.2, stable-4.x, stable-devel, support_docs, syslog, temp_soft_comm_refactoring, theme_header, theme_javascript_refactory, thread_dropdown, thread_page, update_search_by_categories, update_software_api, update_softwares_boxes

Merge branch 'doc'

@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 /.tmp 4 /.tmp
5 /tmp 5 /tmp
6 /docs/_build 6 /docs/_build
  7 +/docs/dns.rst
7 /.*.html 8 /.*.html
8 /local.rake 9 /local.rake
9 *.swp 10 *.swp
@@ -98,3 +98,5 @@ task :preconfig => ssh_config_file do @@ -98,3 +98,5 @@ task :preconfig => ssh_config_file do
98 end 98 end
99 end 99 end
100 end 100 end
  101 +
  102 +Dir.glob('tasks/*.rake').each { |f| load f }
config/homologa/config.yaml 0 → 100644
@@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
  1 +admins:
  2 + - ["Nayanne Araújo", "nayanne.bonifacio@planejamento.gov.br"]
  3 + - ["Marisa Souza dos Santos", "marisa.santos@planejamento.gov.br"]
  4 +external_hostname: homologa.softwarepublico.gov.br
  5 +external_ip: 189.9.151.65
  6 +site_url: https://homologa.softwarepublico.gov.br
  7 +colab_from_address: '"Portal do Software Publico (homologação)" <noreply@homologa.softwarepublico.gov.br>'
  8 +server_email: '"Portal do Software Publico (homologação)" <noreply@homologa.softwarepublico.gov.br>'
  9 +email_subject_prefix: '[spb]'
  10 +lists_hostname: listas.homologa.softwarepublico.gov.br
  11 +lists_admin: nayanne.bonifacio@planejamento.gov.br
  12 +relay_hostname: relay.homologa.softwarepublico.gov.br
  13 +relay_ip: 189.9.151.66
  14 +alt_ssh_port: 55555
  15 +from_address: noreply@homologa.softwarepublico.gov.br
config/homologa/ips.yaml 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +reverseproxy: 10.0.13.2
  2 +database: 10.0.13.6
  3 +social: 10.0.13.4
  4 +email: 10.0.13.5
  5 +integration: 10.0.13.7
config/homologa/iptables-filter-rules 0 → 100644
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +# nothing yet
config/homologa/ssh_config 0 → 100644
@@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
  1 +Host *
  2 + ForwardAgent yes
  3 +
  4 +Host reverseproxy
  5 + Hostname 164.41.9.49
  6 + Port 55555
  7 +
  8 +Host reverseproxy.unconfigured
  9 + Hostname 164.41.9.49
  10 +
  11 +Host database
  12 + Hostname 10.10.40.47
  13 + Port 55555
  14 + # connect via reverseproxy host
  15 + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22
  16 +
  17 +Host social
  18 + Hostname 10.10.40.46
  19 + Port 55555
  20 + # connect via reverseproxy host
  21 + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22
  22 +
  23 +Host email
  24 + Hostname 10.10.40.48
  25 + Port 55555
  26 + # connect via reverseproxy host
  27 + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22
  28 +
  29 +Host integration
  30 + Hostname 10.10.40.45
  31 + Port 55555
  32 + # connect via reverseproxy host
  33 + ProxyCommand ssh 164.41.9.49 -p %p nc %h 22
config/local/config.yaml
1 admins: 1 admins:
2 - -  
3 - - Paulo Meirelles  
4 - - paulo@softwarelivre.org  
5 -external_hostname: softwarepublico.dev 2 + - ["Paulo Meirelles", "paulo@softwarelivre.org"]
6 site_url: https://softwarepublico.dev 3 site_url: https://softwarepublico.dev
  4 +external_hostname: softwarepublico.dev
  5 +external_ip: 10.10.10.6
7 colab_from_address: '"Portal do Software Publico" <noreply@softwarepublico.dev>' 6 colab_from_address: '"Portal do Software Publico" <noreply@softwarepublico.dev>'
8 server_email: '"Portal do Software Publico" <noreply@softwarepublico.dev>' 7 server_email: '"Portal do Software Publico" <noreply@softwarepublico.dev>'
9 email_subject_prefix: '[spb]' 8 email_subject_prefix: '[spb]'
10 lists_hostname: listas.softwarepublico.dev 9 lists_hostname: listas.softwarepublico.dev
11 lists_admin: paulo@softwarelivre.org 10 lists_admin: paulo@softwarelivre.org
12 relay_hostname: relay.softwarepublico.dev 11 relay_hostname: relay.softwarepublico.dev
  12 +relay_ip: 10.10.10.3
13 alt_ssh_port: 5555 13 alt_ssh_port: 5555
14 from_address: noreply@softwarepublico.dev 14 from_address: noreply@softwarepublico.dev
config/production/config.yaml
1 admins: 1 admins:
2 - -  
3 - - Paulo Meirelles  
4 - - paulo@softwarelivre.org 2 + - ["Paulo Meirelles", "paulo@softwarelivre.org"]
5 external_hostname: beta.softwarepublico.gov.br 3 external_hostname: beta.softwarepublico.gov.br
  4 +external_ip: 164.41.9.49
6 site_url: https://beta.softwarepublico.gov.br 5 site_url: https://beta.softwarepublico.gov.br
7 colab_from_address: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>' 6 colab_from_address: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>'
8 server_email: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>' 7 server_email: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>'
@@ -10,5 +9,6 @@ email_subject_prefix: &#39;[spb]&#39; @@ -10,5 +9,6 @@ email_subject_prefix: &#39;[spb]&#39;
10 lists_hostname: listas.softwarepublico.gov.br 9 lists_hostname: listas.softwarepublico.gov.br
11 lists_admin: paulo@softwarelivre.org 10 lists_admin: paulo@softwarelivre.org
12 relay_hostname: relay.softwarepublico.gov.br 11 relay_hostname: relay.softwarepublico.gov.br
  12 +relay_ip: 164.41.9.48
13 alt_ssh_port: 55555 13 alt_ssh_port: 55555
14 from_address: noreply@softwarepublico.gov.br 14 from_address: noreply@softwarepublico.gov.br
docs/.gitignore 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +architecture.png
  2 +*.rst
  3 +conf.py
@@ -46,132 +46,135 @@ help: @@ -46,132 +46,135 @@ help:
46 @echo " linkcheck to check all external links for integrity" 46 @echo " linkcheck to check all external links for integrity"
47 @echo " doctest to run all doctests embedded in the documentation (if enabled)" 47 @echo " doctest to run all doctests embedded in the documentation (if enabled)"
48 48
  49 +include local.mk
  50 +
49 clean: 51 clean:
50 rm -rf $(BUILDDIR)/* 52 rm -rf $(BUILDDIR)/*
  53 + rm -rf $(CLEAN_FILES)
51 54
52 -html: 55 +html: $(BUILT)
53 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html 56 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
54 @echo 57 @echo
55 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." 58 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
56 59
57 -dirhtml: 60 +dirhtml: $(BUILT)
58 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml 61 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
59 @echo 62 @echo
60 @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." 63 @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
61 64
62 -singlehtml: 65 +singlehtml: $(BUILT)
63 $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml 66 $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
64 @echo 67 @echo
65 @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." 68 @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
66 69
67 -pickle: 70 +pickle: $(BUILT)
68 $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle 71 $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
69 @echo 72 @echo
70 @echo "Build finished; now you can process the pickle files." 73 @echo "Build finished; now you can process the pickle files."
71 74
72 -json: 75 +json: $(BUILT)
73 $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json 76 $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
74 @echo 77 @echo
75 @echo "Build finished; now you can process the JSON files." 78 @echo "Build finished; now you can process the JSON files."
76 79
77 -htmlhelp: 80 +htmlhelp: $(BUILT)
78 $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp 81 $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
79 @echo 82 @echo
80 @echo "Build finished; now you can run HTML Help Workshop with the" \ 83 @echo "Build finished; now you can run HTML Help Workshop with the" \
81 ".hhp project file in $(BUILDDIR)/htmlhelp." 84 ".hhp project file in $(BUILDDIR)/htmlhelp."
82 85
83 -qthelp: 86 +qthelp: $(BUILT)
84 $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp 87 $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
85 @echo 88 @echo
86 @echo "Build finished; now you can run "qcollectiongenerator" with the" \ 89 @echo "Build finished; now you can run "qcollectiongenerator" with the" \
87 - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" 90 + ".qhcp project file in $(BUILDDIR)/qthelp, like this: $(BUILT)"
88 @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/softwarepublico.qhcp" 91 @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/softwarepublico.qhcp"
89 - @echo "To view the help file:" 92 + @echo "To view the help file: $(BUILT)"
90 @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/softwarepublico.qhc" 93 @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/softwarepublico.qhc"
91 94
92 -devhelp: 95 +devhelp: $(BUILT)
93 $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp 96 $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
94 @echo 97 @echo
95 @echo "Build finished." 98 @echo "Build finished."
96 - @echo "To view the help file:" 99 + @echo "To view the help file: $(BUILT)"
97 @echo "# mkdir -p $$HOME/.local/share/devhelp/softwarepublico" 100 @echo "# mkdir -p $$HOME/.local/share/devhelp/softwarepublico"
98 @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/softwarepublico" 101 @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/softwarepublico"
99 @echo "# devhelp" 102 @echo "# devhelp"
100 103
101 -epub: 104 +epub: $(BUILT)
102 $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub 105 $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
103 @echo 106 @echo
104 @echo "Build finished. The epub file is in $(BUILDDIR)/epub." 107 @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
105 108
106 -latex: 109 +latex: $(BUILT)
107 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 110 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
108 @echo 111 @echo
109 @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." 112 @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
110 @echo "Run \`make' in that directory to run these through (pdf)latex" \ 113 @echo "Run \`make' in that directory to run these through (pdf)latex" \
111 "(use \`make latexpdf' here to do that automatically)." 114 "(use \`make latexpdf' here to do that automatically)."
112 115
113 -latexpdf: 116 +latexpdf: $(BUILT)
114 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 117 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
115 @echo "Running LaTeX files through pdflatex..." 118 @echo "Running LaTeX files through pdflatex..."
116 $(MAKE) -C $(BUILDDIR)/latex all-pdf 119 $(MAKE) -C $(BUILDDIR)/latex all-pdf
117 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 120 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
118 121
119 -latexpdfja: 122 +latexpdfja: $(BUILT)
120 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 123 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
121 @echo "Running LaTeX files through platex and dvipdfmx..." 124 @echo "Running LaTeX files through platex and dvipdfmx..."
122 $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja 125 $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
123 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 126 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
124 127
125 -text: 128 +text: $(BUILT)
126 $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text 129 $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
127 @echo 130 @echo
128 @echo "Build finished. The text files are in $(BUILDDIR)/text." 131 @echo "Build finished. The text files are in $(BUILDDIR)/text."
129 132
130 -man: 133 +man: $(BUILT)
131 $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man 134 $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
132 @echo 135 @echo
133 @echo "Build finished. The manual pages are in $(BUILDDIR)/man." 136 @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
134 137
135 -texinfo: 138 +texinfo: $(BUILT)
136 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 139 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
137 @echo 140 @echo
138 @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." 141 @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
139 @echo "Run \`make' in that directory to run these through makeinfo" \ 142 @echo "Run \`make' in that directory to run these through makeinfo" \
140 "(use \`make info' here to do that automatically)." 143 "(use \`make info' here to do that automatically)."
141 144
142 -info: 145 +info: $(BUILT)
143 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo 146 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
144 @echo "Running Texinfo files through makeinfo..." 147 @echo "Running Texinfo files through makeinfo..."
145 make -C $(BUILDDIR)/texinfo info 148 make -C $(BUILDDIR)/texinfo info
146 @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." 149 @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
147 150
148 -gettext: 151 +gettext: $(BUILT)
149 $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale 152 $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
150 @echo 153 @echo
151 @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." 154 @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
152 155
153 -changes: 156 +changes: $(BUILT)
154 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes 157 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
155 @echo 158 @echo
156 @echo "The overview file is in $(BUILDDIR)/changes." 159 @echo "The overview file is in $(BUILDDIR)/changes."
157 160
158 -linkcheck: 161 +linkcheck: $(BUILT)
159 $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck 162 $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
160 @echo 163 @echo
161 @echo "Link check complete; look for any errors in the above output " \ 164 @echo "Link check complete; look for any errors in the above output " \
162 "or in $(BUILDDIR)/linkcheck/output.txt." 165 "or in $(BUILDDIR)/linkcheck/output.txt."
163 166
164 -doctest: 167 +doctest: $(BUILT)
165 $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest 168 $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
166 @echo "Testing of doctests in the sources finished, look at the " \ 169 @echo "Testing of doctests in the sources finished, look at the " \
167 "results in $(BUILDDIR)/doctest/output.txt." 170 "results in $(BUILDDIR)/doctest/output.txt."
168 171
169 -xml: 172 +xml: $(BUILT)
170 $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml 173 $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
171 @echo 174 @echo
172 @echo "Build finished. The XML files are in $(BUILDDIR)/xml." 175 @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
173 176
174 -pseudoxml: 177 +pseudoxml: $(BUILT)
175 $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml 178 $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
176 @echo 179 @echo
177 @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." 180 @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
docs/architecture.dot
@@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
1 -digraph architecture {  
2 -  
3 - subgraph cluster_0 {  
4 - style=filled;  
5 - color="#d3d7cf";  
6 - label = "Local network";  
7 - node [style=filled,fillcolor=white];  
8 -  
9 - reverseproxy [shape=box];  
10 - social [shape=box];  
11 - email [shape=box];  
12 - integration [shape=box];  
13 - database [shape=box];  
14 -  
15 - reverseproxy -> social [label="HTTP"];  
16 - social -> integration [label="HTTP"];  
17 - social -> database [label="PostgreSQL (5432)"];  
18 - integration -> database [label="PostgreSQL (5432)"];  
19 - email -> integration [label="SMTP"];  
20 -  
21 - }  
22 -  
23 - internet -> reverseproxy [label="HTTP"];  
24 - internet -> email [label="SMTP"];  
25 - email -> internet [label="SMTP"];  
26 -  
27 -}  
docs/arquitetura.png 0 → 100644

40.7 KB

docs/arquitetura.rst.in 0 → 100644
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
  1 +Arquitetura
  2 +===========
  3 +
  4 +A arquitetura do SPB consiste em 5 servidores, representados na figura
  5 +a seguir.
  6 +
  7 +.. image:: arquitetura.png
  8 +
  9 +Servidores e serviços
  10 +---------------------
  11 +
  12 +*Esta seção é um trabalho em andamento. Ela cobrirá:*
  13 +
  14 +* descrever arquitetura
  15 +* descrever papel de cada máquina
  16 +* descrever conexões
  17 +
  18 +Gestão de configuração
  19 +----------------------
  20 +
  21 +*Esta seção é um trabalho em andamento. Ela cobrirá:*
  22 +
  23 +* adicionar links com o repositório de gestão de configuração
  24 +* descrever repositório de gestão de configuração
  25 +* descrever como o chake funciona
docs/arquitetura.svg 0 → 100644
@@ -0,0 +1,818 @@ @@ -0,0 +1,818 @@
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<!-- Created with Inkscape (http://www.inkscape.org/) -->
  3 +
  4 +<svg
  5 + xmlns:dc="http://purl.org/dc/elements/1.1/"
  6 + xmlns:cc="http://creativecommons.org/ns#"
  7 + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  8 + xmlns:svg="http://www.w3.org/2000/svg"
  9 + xmlns="http://www.w3.org/2000/svg"
  10 + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  11 + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  12 + width="1052.3622"
  13 + height="744.09448"
  14 + id="svg2"
  15 + version="1.1"
  16 + inkscape:version="0.91 r13725"
  17 + sodipodi:docname="arquitetura.svg">
  18 + <defs
  19 + id="defs4">
  20 + <marker
  21 + inkscape:stockid="Arrow2Lend"
  22 + orient="auto"
  23 + refY="0.0"
  24 + refX="0.0"
  25 + id="Arrow2Lend"
  26 + style="overflow:visible;">
  27 + <path
  28 + id="path4235"
  29 + style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
  30 + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
  31 + transform="scale(1.1) rotate(180) translate(1,0)" />
  32 + </marker>
  33 + <marker
  34 + inkscape:stockid="Arrow1Lend"
  35 + orient="auto"
  36 + refY="0.0"
  37 + refX="0.0"
  38 + id="Arrow1Lend"
  39 + style="overflow:visible;">
  40 + <path
  41 + id="path4217"
  42 + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
  43 + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;"
  44 + transform="scale(0.8) rotate(180) translate(12.5,0)" />
  45 + </marker>
  46 + <marker
  47 + inkscape:stockid="Arrow2Lstart"
  48 + orient="auto"
  49 + refY="0.0"
  50 + refX="0.0"
  51 + id="Arrow2Lstart"
  52 + style="overflow:visible">
  53 + <path
  54 + id="path4232"
  55 + style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
  56 + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
  57 + transform="scale(1.1) translate(1,0)" />
  58 + </marker>
  59 + <marker
  60 + inkscape:stockid="Arrow2Lstart"
  61 + orient="auto"
  62 + refY="0"
  63 + refX="0"
  64 + id="Arrow2Lstart-4"
  65 + style="overflow:visible">
  66 + <path
  67 + inkscape:connector-curvature="0"
  68 + id="path4232-0"
  69 + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
  70 + d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
  71 + transform="matrix(1.1,0,0,1.1,1.1,0)" />
  72 + </marker>
  73 + </defs>
  74 + <sodipodi:namedview
  75 + id="base"
  76 + pagecolor="#ffffff"
  77 + bordercolor="#666666"
  78 + borderopacity="1.0"
  79 + inkscape:pageopacity="0.0"
  80 + inkscape:pageshadow="2"
  81 + inkscape:zoom="0.65045503"
  82 + inkscape:cx="526.18109"
  83 + inkscape:cy="372.04724"
  84 + inkscape:document-units="px"
  85 + inkscape:current-layer="layer6"
  86 + showgrid="false"
  87 + inkscape:window-width="1366"
  88 + inkscape:window-height="702"
  89 + inkscape:window-x="0"
  90 + inkscape:window-y="27"
  91 + inkscape:window-maximized="1" />
  92 + <metadata
  93 + id="metadata7">
  94 + <rdf:RDF>
  95 + <cc:Work
  96 + rdf:about="">
  97 + <dc:format>image/svg+xml</dc:format>
  98 + <dc:type
  99 + rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  100 + <dc:title />
  101 + </cc:Work>
  102 + </rdf:RDF>
  103 + </metadata>
  104 + <g
  105 + inkscape:label="Camada 1"
  106 + inkscape:groupmode="layer"
  107 + id="layer1"
  108 + transform="translate(0,-308.2677)"
  109 + style="display:inline">
  110 + <g
  111 + inkscape:groupmode="layer"
  112 + id="layer4"
  113 + inkscape:label="Release 1"
  114 + style="display:inline">
  115 + <text
  116 + xml:space="preserve"
  117 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  118 + x="642.34241"
  119 + y="491.6839"
  120 + id="text5794"
  121 + sodipodi:linespacing="125%"><tspan
  122 + style="font-size:16.46647072px"
  123 + id="tspan5796"
  124 + sodipodi:role="line"
  125 + x="642.34241"
  126 + y="491.6839">HTTP</tspan><tspan
  127 + style="font-size:16.46647072px"
  128 + id="tspan5798"
  129 + sodipodi:role="line"
  130 + x="642.34241"
  131 + y="512.26697">reverse proxy</tspan></text>
  132 + <g
  133 + id="g4382"
  134 + transform="matrix(0.68610294,0,0,0.68610294,325.50286,328.94289)">
  135 + <g
  136 + transform="translate(-104.51642,-10.919621)"
  137 + id="g4315">
  138 + <rect
  139 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  140 + id="rect4317"
  141 + width="703.53589"
  142 + height="193.43335"
  143 + x="45.238449"
  144 + y="819.93018"
  145 + rx="24.959101"
  146 + ry="24.959101" />
  147 + <text
  148 + xml:space="preserve"
  149 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  150 + x="62.26289"
  151 + y="991.02106"
  152 + id="text4319"
  153 + sodipodi:linespacing="125%"><tspan
  154 + sodipodi:role="line"
  155 + id="tspan4321"
  156 + x="62.26289"
  157 + y="991.02106"
  158 + style="font-size:22.5px;fill:#555753">database</tspan></text>
  159 + </g>
  160 + <g
  161 + style="display:inline"
  162 + id="g4246"
  163 + transform="matrix(1.0487632,0,0,1.0487632,-73.081866,298.25531)">
  164 + <rect
  165 + transform="translate(0,308.2677)"
  166 + ry="24.959145"
  167 + rx="24.959145"
  168 + y="205.91293"
  169 + x="99.836578"
  170 + height="106.07636"
  171 + width="215.27261"
  172 + id="rect4248"
  173 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate" />
  174 + <text
  175 + sodipodi:linespacing="125%"
  176 + id="text4250"
  177 + y="575.53479"
  178 + x="143.37675"
  179 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  180 + xml:space="preserve"><tspan
  181 + y="575.53479"
  182 + x="143.37675"
  183 + id="tspan4252"
  184 + sodipodi:role="line">PostgreSQL</tspan></text>
  185 + </g>
  186 + <g
  187 + transform="matrix(1.0487632,0,0,1.0487632,218.62813,298.25532)"
  188 + id="g4263"
  189 + style="display:inline">
  190 + <rect
  191 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  192 + id="rect4265"
  193 + width="215.27261"
  194 + height="106.07636"
  195 + x="99.836578"
  196 + y="205.91293"
  197 + rx="24.959145"
  198 + ry="24.959145"
  199 + transform="translate(0,308.2677)" />
  200 + <text
  201 + xml:space="preserve"
  202 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  203 + x="178.57445"
  204 + y="575.53479"
  205 + id="text4267"
  206 + sodipodi:linespacing="125%"><tspan
  207 + sodipodi:role="line"
  208 + id="tspan4269"
  209 + x="178.57445"
  210 + y="575.53479">Redis</tspan></text>
  211 + </g>
  212 + </g>
  213 + <g
  214 + id="g4396"
  215 + transform="matrix(0.68610294,0,0,0.68610294,548.29673,158.97368)">
  216 + <g
  217 + id="g4307"
  218 + transform="translate(-73.317486,-262.07101)">
  219 + <rect
  220 + ry="24.959101"
  221 + rx="24.959101"
  222 + y="819.93018"
  223 + x="45.238449"
  224 + height="385.60645"
  225 + width="641.40228"
  226 + id="rect4309"
  227 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
  228 + <text
  229 + sodipodi:linespacing="125%"
  230 + id="text4311"
  231 + y="1185.0211"
  232 + x="62.26289"
  233 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  234 + xml:space="preserve"><tspan
  235 + style="font-size:22.5px;fill:#555753"
  236 + y="1185.0211"
  237 + x="62.26289"
  238 + id="tspan4313"
  239 + sodipodi:role="line">integration</tspan></text>
  240 + </g>
  241 + <g
  242 + transform="matrix(1.0487632,0,0,1.0487632,-79.431935,244.40644)"
  243 + id="g3018"
  244 + style="display:inline">
  245 + <rect
  246 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  247 + id="rect3020"
  248 + width="215.27261"
  249 + height="106.07636"
  250 + x="99.836578"
  251 + y="205.91293"
  252 + transform="translate(0,308.2677)"
  253 + rx="24.959145"
  254 + ry="24.959145" />
  255 + <text
  256 + xml:space="preserve"
  257 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  258 + x="175.63876"
  259 + y="575.49884"
  260 + id="text3022"
  261 + sodipodi:linespacing="125%"><tspan
  262 + sodipodi:role="line"
  263 + id="tspan3024"
  264 + x="175.63876"
  265 + y="575.49884">Gitlab</tspan></text>
  266 + </g>
  267 + <g
  268 + transform="matrix(1.0487632,0,0,1.0487632,-80.194985,44.124888)"
  269 + id="g3034"
  270 + style="display:inline">
  271 + <rect
  272 + transform="translate(0,308.2677)"
  273 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  274 + id="rect3036"
  275 + width="215.27261"
  276 + height="106.07636"
  277 + x="99.836578"
  278 + y="205.91293"
  279 + rx="24.959145"
  280 + ry="24.959145" />
  281 + <text
  282 + xml:space="preserve"
  283 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  284 + x="169.5842"
  285 + y="575.53479"
  286 + id="text3038"
  287 + sodipodi:linespacing="125%"><tspan
  288 + sodipodi:role="line"
  289 + id="tspan3040"
  290 + x="169.5842"
  291 + y="575.53479">COLAB</tspan></text>
  292 + </g>
  293 + <g
  294 + transform="matrix(1.0487632,0,0,1.0487632,226.64988,243.33747)"
  295 + id="g4271"
  296 + style="display:inline">
  297 + <rect
  298 + transform="translate(0,308.2677)"
  299 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  300 + id="rect4273"
  301 + width="215.27261"
  302 + height="106.07636"
  303 + x="99.836578"
  304 + y="205.91293"
  305 + rx="24.959145"
  306 + ry="24.959145" />
  307 + <text
  308 + xml:space="preserve"
  309 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  310 + x="163.01907"
  311 + y="575.53479"
  312 + id="text4275"
  313 + sodipodi:linespacing="125%"><tspan
  314 + sodipodi:role="line"
  315 + id="tspan4277"
  316 + x="163.01907"
  317 + y="575.53479">Mailman</tspan></text>
  318 + </g>
  319 + <g
  320 + style="display:inline"
  321 + id="g4288"
  322 + transform="matrix(1.0487632,0,0,1.0487632,226.64988,125.74526)">
  323 + <rect
  324 + ry="24.959145"
  325 + rx="24.959145"
  326 + y="205.91293"
  327 + x="99.836578"
  328 + height="106.07636"
  329 + width="215.27261"
  330 + id="rect4290"
  331 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  332 + transform="translate(0,308.2677)" />
  333 + <text
  334 + sodipodi:linespacing="125%"
  335 + id="text4292"
  336 + y="575.53479"
  337 + x="140.90532"
  338 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  339 + xml:space="preserve"><tspan
  340 + y="575.53479"
  341 + x="140.90532"
  342 + id="tspan4294"
  343 + sodipodi:role="line">Mailman-API</tspan></text>
  344 + </g>
  345 + </g>
  346 + <text
  347 + sodipodi:linespacing="125%"
  348 + id="text4541"
  349 + y="619.28687"
  350 + x="457.85617"
  351 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  352 + xml:space="preserve"><tspan
  353 + y="619.28687"
  354 + x="457.85617"
  355 + sodipodi:role="line"
  356 + id="tspan4543"
  357 + style="font-size:16.46647072px">HTTP</tspan><tspan
  358 + y="639.86993"
  359 + x="457.85617"
  360 + sodipodi:role="line"
  361 + id="tspan4545"
  362 + style="font-size:16.46647072px">reverse proxy</tspan></text>
  363 + <text
  364 + xml:space="preserve"
  365 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  366 + x="649.13086"
  367 + y="657.7215"
  368 + id="text4547"
  369 + sodipodi:linespacing="125%"><tspan
  370 + style="font-size:16.46647072px;text-align:start;text-anchor:start"
  371 + id="tspan4549"
  372 + sodipodi:role="line"
  373 + x="649.13086"
  374 + y="657.7215">HTTP</tspan><tspan
  375 + style="font-size:16.46647072px;text-align:start;text-anchor:start"
  376 + id="tspan4551"
  377 + sodipodi:role="line"
  378 + x="649.13086"
  379 + y="678.30457">reverse proxy</tspan></text>
  380 + <text
  381 + sodipodi:linespacing="125%"
  382 + id="text4553"
  383 + y="566.24707"
  384 + x="769.04694"
  385 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  386 + xml:space="preserve"><tspan
  387 + y="566.24707"
  388 + x="769.04694"
  389 + sodipodi:role="line"
  390 + id="tspan4557"
  391 + style="font-size:16.46647072px;text-align:start;text-anchor:start">HTTP</tspan></text>
  392 + <text
  393 + xml:space="preserve"
  394 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  395 + x="345.62704"
  396 + y="851.43207"
  397 + id="text4561"
  398 + sodipodi:linespacing="125%"><tspan
  399 + style="font-size:16.46647072px"
  400 + id="tspan4565"
  401 + sodipodi:role="line"
  402 + x="345.62704"
  403 + y="851.43207">SQL</tspan></text>
  404 + <text
  405 + sodipodi:linespacing="125%"
  406 + id="text4569"
  407 + y="753.59344"
  408 + x="485.86237"
  409 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  410 + xml:space="preserve"><tspan
  411 + y="753.59344"
  412 + x="485.86237"
  413 + sodipodi:role="line"
  414 + id="tspan4571"
  415 + style="font-size:16.46647072px">SQL</tspan></text>
  416 + <text
  417 + xml:space="preserve"
  418 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  419 + x="513.03973"
  420 + y="822.08044"
  421 + id="text4573"
  422 + sodipodi:linespacing="125%"><tspan
  423 + style="font-size:16.46647072px"
  424 + id="tspan4575"
  425 + sodipodi:role="line"
  426 + x="513.03973"
  427 + y="822.08044">SQL</tspan></text>
  428 + <text
  429 + sodipodi:linespacing="125%"
  430 + id="text4577"
  431 + y="850.34491"
  432 + x="643.99384"
  433 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  434 + xml:space="preserve"><tspan
  435 + y="850.34491"
  436 + x="643.99384"
  437 + sodipodi:role="line"
  438 + id="tspan4579"
  439 + style="font-size:16.46647072px;text-align:start;text-anchor:start">Protocolo</tspan><tspan
  440 + y="870.92798"
  441 + x="643.99384"
  442 + sodipodi:role="line"
  443 + style="font-size:16.46647072px;text-align:start;text-anchor:start"
  444 + id="tspan4581">nativo</tspan></text>
  445 + <text
  446 + sodipodi:linespacing="125%"
  447 + id="text4589"
  448 + y="556.0722"
  449 + x="177.66902"
  450 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  451 + xml:space="preserve"><tspan
  452 + y="556.0722"
  453 + x="177.66902"
  454 + sodipodi:role="line"
  455 + id="tspan4591"
  456 + style="font-size:16.46647072px">SMTP</tspan></text>
  457 + <text
  458 + sodipodi:linespacing="125%"
  459 + id="text4597"
  460 + y="505.26852"
  461 + x="432.2182"
  462 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.06708527px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;display:inline;fill:#000000;fill-opacity:1;stroke:none"
  463 + xml:space="preserve"><tspan
  464 + y="505.26852"
  465 + x="432.2182"
  466 + sodipodi:role="line"
  467 + id="tspan4599"
  468 + style="font-size:16.46647072px">SMTP</tspan></text>
  469 + </g>
  470 + <g
  471 + inkscape:groupmode="layer"
  472 + id="layer5"
  473 + inkscape:label="Release 2"
  474 + style="display:inline">
  475 + <g
  476 + id="g4372"
  477 + transform="matrix(0.68610294,0,0,0.68610294,-257.62288,142.05473)">
  478 + <g
  479 + id="g4323"
  480 + transform="translate(471.10384,-45.23844)"
  481 + style="display:inline">
  482 + <rect
  483 + ry="24.959101"
  484 + rx="24.959101"
  485 + y="819.93018"
  486 + x="45.238449"
  487 + height="193.43336"
  488 + width="491.38315"
  489 + id="rect4325"
  490 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
  491 + <text
  492 + sodipodi:linespacing="125%"
  493 + id="text4327"
  494 + y="991.02106"
  495 + x="62.26289"
  496 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  497 + xml:space="preserve"><tspan
  498 + style="font-size:22.5px;fill:#555753"
  499 + y="991.02106"
  500 + x="62.26289"
  501 + id="tspan4329"
  502 + sodipodi:role="line">social</tspan></text>
  503 + </g>
  504 + <g
  505 + id="g3042"
  506 + transform="matrix(1.0487632,0,0,1.0487632,544.44394,276.5302)"
  507 + style="display:inline">
  508 + <rect
  509 + ry="24.959145"
  510 + rx="24.959145"
  511 + transform="translate(0,308.2677)"
  512 + y="205.91293"
  513 + x="99.836578"
  514 + height="106.07636"
  515 + width="215.27261"
  516 + id="rect3044"
  517 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate" />
  518 + <text
  519 + sodipodi:linespacing="125%"
  520 + id="text3046"
  521 + y="575.46283"
  522 + x="157.44057"
  523 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  524 + xml:space="preserve"><tspan
  525 + y="575.46283"
  526 + x="157.44057"
  527 + id="tspan3048"
  528 + sodipodi:role="line">Noosfero</tspan></text>
  529 + </g>
  530 + </g>
  531 + <g
  532 + id="g4343"
  533 + transform="matrix(0.68610294,0,0,0.68610294,-313.27764,36.270151)">
  534 + <g
  535 + transform="translate(552.22106,-389.98662)"
  536 + id="g4331"
  537 + style="display:inline">
  538 + <rect
  539 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  540 + id="rect4333"
  541 + width="491.38315"
  542 + height="193.43336"
  543 + x="45.238449"
  544 + y="819.93018"
  545 + rx="24.959101"
  546 + ry="24.959101" />
  547 + <text
  548 + xml:space="preserve"
  549 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  550 + x="62.26289"
  551 + y="991.02106"
  552 + id="text4335"
  553 + sodipodi:linespacing="125%"><tspan
  554 + sodipodi:role="line"
  555 + id="tspan4337"
  556 + x="62.26289"
  557 + y="991.02106"
  558 + style="font-size:22.5px;fill:#555753">email</tspan></text>
  559 + </g>
  560 + <g
  561 + transform="translate(277.45747,43.873309)"
  562 + id="g4240">
  563 + <g
  564 + id="g4232"
  565 + transform="matrix(1.0487632,0,0,1.0487632,348.10369,-112.09129)"
  566 + style="display:inline">
  567 + <rect
  568 + ry="24.959145"
  569 + rx="24.959145"
  570 + transform="translate(0,308.2677)"
  571 + y="205.91293"
  572 + x="99.836578"
  573 + height="106.07636"
  574 + width="215.27261"
  575 + id="rect4234"
  576 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate" />
  577 + <text
  578 + sodipodi:linespacing="125%"
  579 + id="text4236"
  580 + y="575.46283"
  581 + x="170.96269"
  582 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  583 + xml:space="preserve"><tspan
  584 + y="575.46283"
  585 + x="170.96269"
  586 + id="tspan4238"
  587 + sodipodi:role="line">Postfix</tspan></text>
  588 + </g>
  589 + </g>
  590 + </g>
  591 + <g
  592 + transform="matrix(0.68610294,0,0,0.68610294,-326.80522,364.9756)"
  593 + id="g4449">
  594 + <rect
  595 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d3d7cf;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#babdb6;stroke-width:2.91501451;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  596 + id="rect4531"
  597 + width="257.68625"
  598 + height="245.36218"
  599 + x="494.24698"
  600 + y="743.06433"
  601 + rx="9.5793791"
  602 + ry="9.5793791" />
  603 + <g
  604 + style="display:inline"
  605 + transform="translate(471.03,-45.23844)"
  606 + id="g4451">
  607 + <rect
  608 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  609 + id="rect4453"
  610 + width="213.55743"
  611 + height="65.710571"
  612 + x="45.238449"
  613 + y="947.65295"
  614 + rx="15.452409"
  615 + ry="15.452409" />
  616 + <text
  617 + xml:space="preserve"
  618 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  619 + x="62.26289"
  620 + y="991.02106"
  621 + id="text4455"
  622 + sodipodi:linespacing="125%"><tspan
  623 + sodipodi:role="line"
  624 + id="tspan4457"
  625 + x="62.26289"
  626 + y="991.02106"
  627 + style="font-size:22.5px;fill:#555753">servidor</tspan></text>
  628 + </g>
  629 + <g
  630 + style="display:inline"
  631 + transform="matrix(1.0487632,0,0,1.0487632,410.82571,289.93364)"
  632 + id="g4459">
  633 + <rect
  634 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  635 + id="rect4461"
  636 + width="106.31865"
  637 + height="52.388897"
  638 + x="99.836578"
  639 + y="205.91293"
  640 + transform="translate(0,308.2677)"
  641 + rx="6.5724359"
  642 + ry="6.5724359" />
  643 + <text
  644 + xml:space="preserve"
  645 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  646 + x="112.57272"
  647 + y="546.08508"
  648 + id="text4463"
  649 + sodipodi:linespacing="125%"><tspan
  650 + sodipodi:role="line"
  651 + id="tspan4465"
  652 + x="112.57272"
  653 + y="546.08508">Serviço</tspan></text>
  654 + </g>
  655 + <g
  656 + id="g4526"
  657 + transform="translate(0,3.0637686e-6)">
  658 + <path
  659 + sodipodi:nodetypes="cc"
  660 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart-4);enable-background:accumulate"
  661 + d="m 615.18822,805.26531 -99.9181,0.22208"
  662 + id="path4467"
  663 + inkscape:connector-curvature="0" />
  664 + <text
  665 + sodipodi:linespacing="125%"
  666 + id="text4522"
  667 + y="794.6015"
  668 + x="515.53412"
  669 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20.40509987px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  670 + xml:space="preserve"><tspan
  671 + y="794.6015"
  672 + x="515.53412"
  673 + id="tspan4524"
  674 + sodipodi:role="line">conexão</tspan></text>
  675 + </g>
  676 + <text
  677 + xml:space="preserve"
  678 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20.40509987px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
  679 + x="665.66437"
  680 + y="769.95325"
  681 + id="text4533"
  682 + sodipodi:linespacing="125%"><tspan
  683 + sodipodi:role="line"
  684 + id="tspan4535"
  685 + x="665.66437"
  686 + y="769.95325"
  687 + style="-inkscape-font-specification:'Cantarell Bold';font-family:Cantarell;font-weight:bold;font-style:normal;font-stretch:normal;font-variant:normal;fill:#555753;">Legenda</tspan></text>
  688 + </g>
  689 + </g>
  690 + <g
  691 + inkscape:groupmode="layer"
  692 + id="layer6"
  693 + inkscape:label="Release 3"
  694 + style="display:inline">
  695 + <g
  696 + id="g4358"
  697 + transform="matrix(0.68610294,0,0,0.68610294,499.06367,112.26031)">
  698 + <g
  699 + transform="translate(-1.5599465,-500.74283)"
  700 + id="g4302"
  701 + style="display:inline">
  702 + <rect
  703 + style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#babdb6;fill-opacity:0.61568627;fill-rule:nonzero;stroke:#2e3436;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
  704 + id="rect4296"
  705 + width="491.38315"
  706 + height="193.43336"
  707 + x="45.238449"
  708 + y="819.93018"
  709 + rx="24.959101"
  710 + ry="24.959101" />
  711 + <text
  712 + xml:space="preserve"
  713 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.92820835px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  714 + x="62.26289"
  715 + y="991.02106"
  716 + id="text4298"
  717 + sodipodi:linespacing="125%"><tspan
  718 + sodipodi:role="line"
  719 + id="tspan4300"
  720 + x="62.26289"
  721 + y="991.02106"
  722 + style="font-size:22.5px;fill:#555753">reverseproxy</tspan></text>
  723 + </g>
  724 + <g
  725 + id="g3987"
  726 + transform="matrix(1.0487632,0,0,1.0487632,71.78015,-178.97419)"
  727 + style="display:inline">
  728 + <rect
  729 + ry="24.959145"
  730 + rx="24.959145"
  731 + y="205.91293"
  732 + x="99.836578"
  733 + height="106.07636"
  734 + width="215.27261"
  735 + id="rect3989"
  736 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.55984557;marker:none;enable-background:accumulate"
  737 + transform="translate(0,308.2677)" />
  738 + <text
  739 + sodipodi:linespacing="125%"
  740 + id="text3991"
  741 + y="575.11481"
  742 + x="126.62383"
  743 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
  744 + xml:space="preserve"><tspan
  745 + y="575.11481"
  746 + x="126.62383"
  747 + id="tspan3993"
  748 + sodipodi:role="line">Frontend HTTP</tspan></text>
  749 + </g>
  750 + </g>
  751 + <path
  752 + inkscape:connector-curvature="0"
  753 + id="path5590"
  754 + d="m 634.01413,553.48165 c -0.36236,-61.8148 62.32682,-56.21368 62.508,-114.76719"
  755 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  756 + sodipodi:nodetypes="cc" />
  757 + <path
  758 + sodipodi:nodetypes="cc"
  759 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  760 + d="m 642.85409,689.15591 0.62824,-49.04397"
  761 + id="path4433"
  762 + inkscape:connector-curvature="0" />
  763 + <path
  764 + sodipodi:nodetypes="cc"
  765 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  766 + d="M 859.12722,609.13106 C 829.91865,575.18646 753.05114,554.30963 723.07388,599.54037"
  767 + id="path4437"
  768 + inkscape:connector-curvature="0" />
  769 + <path
  770 + inkscape:connector-curvature="0"
  771 + id="path4439"
  772 + d="m 271.00931,696.41651 c -0.36236,-61.8148 48.40654,-100.93072 283.89148,-100.93072"
  773 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  774 + sodipodi:nodetypes="cc" />
  775 + <path
  776 + inkscape:connector-curvature="0"
  777 + id="path4441"
  778 + d="m 630.55501,896.50178 c -2.09667,-64.00693 20.40483,-66.51846 19.07686,-115.92023"
  779 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  780 + sodipodi:nodetypes="cc" />
  781 + <path
  782 + sodipodi:nodetypes="cc"
  783 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  784 + d="M 397.48723,898.80785 C 397.78887,788.16087 262.61615,877.38604 264.36295,782.88763"
  785 + id="path4443"
  786 + inkscape:connector-curvature="0" />
  787 + <path
  788 + inkscape:connector-curvature="0"
  789 + id="path4445"
  790 + d="m 424.41946,896.50178 c -1.80573,-37.68499 12.38386,-120.28208 48.96766,-120.62805 38.60999,-0.36513 5.96395,-98.15121 42.04501,-99.61416 86.6488,-3.51329 82.65006,9.13901 86.41488,-35.58008"
  791 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  792 + sodipodi:nodetypes="cssc" />
  793 + <path
  794 + sodipodi:nodetypes="cc"
  795 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  796 + d="M 450.58299,896.50178 C 451.5611,765.36235 628.56982,888.6602 627.24185,779.81286"
  797 + id="path4447"
  798 + inkscape:connector-curvature="0" />
  799 + <path
  800 + sodipodi:nodetypes="cc"
  801 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  802 + d="m 260.24762,444.28533 c 2.71241,99.61065 -131.46755,100.46675 -126.5904,221.92019"
  803 + id="path4583"
  804 + inkscape:connector-curvature="0" />
  805 + <path
  806 + inkscape:connector-curvature="0"
  807 + id="path4585"
  808 + d="m 301.98953,444.28533 c -11.02329,92.39356 107.94916,65.41353 177.6501,74.78698 29.8001,4.00755 50.59374,14.66025 48.37091,44.1284"
  809 + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1.02915442;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:url(#Arrow2Lstart);enable-background:accumulate"
  810 + sodipodi:nodetypes="csc" />
  811 + </g>
  812 + </g>
  813 + <g
  814 + inkscape:groupmode="layer"
  815 + id="layer2"
  816 + inkscape:label="Manutenção"
  817 + style="display:inline" />
  818 +</svg>
docs/backup.rst.in 0 → 100644
@@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
  1 +Backup
  2 +======
  3 +
  4 +O SPB possui rotinas automatizadas para backup e restore dos dados de
  5 +todos os seus componentes. As seções a seguir descrevem estas rotinas.
  6 +Ambos os procedimentos devem ser realizados num *shell* onde o diretório
  7 +atual é o repositório de controle de versão do SPB.
  8 +
  9 +Procedimento de backup
  10 +----------------------
  11 +
  12 +Suponha que estamos realizando um backup do ambiente de produção,
  13 +chamado de ``prod``; o comando para realizar um *backup* é o seguinte
  14 +(note ``SPB_ENV=prod``)::
  15 +
  16 + $ rake backup SPB_ENV=prod
  17 +
  18 +Esta operação vai copiar arquivos e *dumps* dos bancos de dados do
  19 +Noosfero, GitLab, Colab e Mailman, e copiá-los para um subdiretório
  20 +chamado ``backups`` na sua estação de trabalho.
  21 +
  22 +Procedimento de restauração
  23 +---------------------------
  24 +
  25 +**Importante:** o procedimento de restauração é suportado apenas para uma
  26 +versão idêntica da plataforma, ou seja, não é suportado fazer um *backup*
  27 +de uma versão mais antiga da plataforma e restaurar esse *backup* numa
  28 +versão mais recente da plataforma, e nem vice-versa.
  29 +
  30 +O comando para restaurar um backup no ambiente **@@SPB_ENV@@** é o seguinte::
  31 +
  32 + $ rake restore SPB_ENV=@@SPB_ENV@@
  33 +
  34 +Esta operação vai restaurar o último backup realizado no ambiente
  35 +chamado **@@SPB_ENV@@**.
  36 +
  37 +**Importante:** a restauração do backup irá apagar os dados existes no
  38 +ambiente @@SPB_ENV@@. Confira duas vezes antes de iniciar o
  39 +procedimento.
docs/build.rb 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +$SPB_ENV = ENV.fetch('SPB_ENV', 'local')
  2 +
  3 +$_.gsub!('@@SPB_ENV@@', $SPB_ENV)
  4 +
  5 +$_.gsub!(/@@config\(([^\)]*)\)@@/) do |f|
  6 + lines = File.read("../config/#{$SPB_ENV}/#{$1}").lines
  7 + lines.shift + lines.map do |line|
  8 + ' ' + line
  9 + end.join
  10 +end
docs/conf.py
@@ -1,331 +0,0 @@ @@ -1,331 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -#  
3 -# softwarepublico documentation build configuration file, created by  
4 -# sphinx-quickstart on Thu Nov 6 15:48:07 2014.  
5 -#  
6 -# This file is execfile()d with the current directory set to its  
7 -# containing dir.  
8 -#  
9 -# Note that not all possible configuration values are present in this  
10 -# autogenerated file.  
11 -#  
12 -# All configuration values have a default; values that are commented out  
13 -# serve to show the default.  
14 -  
15 -import sys  
16 -import os  
17 -  
18 -# If extensions (or modules to document with autodoc) are in another directory,  
19 -# add these directories to sys.path here. If the directory is relative to the  
20 -# documentation root, use os.path.abspath to make it absolute, like shown here.  
21 -#sys.path.insert(0, os.path.abspath('.'))  
22 -  
23 -# -- General configuration ------------------------------------------------  
24 -  
25 -# If your documentation needs a minimal Sphinx version, state it here.  
26 -#needs_sphinx = '1.0'  
27 -  
28 -# Add any Sphinx extension module names here, as strings. They can be  
29 -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom  
30 -# ones.  
31 -extensions = []  
32 -  
33 -# Add any paths that contain templates here, relative to this directory.  
34 -templates_path = ['_templates']  
35 -  
36 -# The suffix of source filenames.  
37 -source_suffix = '.rst'  
38 -  
39 -# The encoding of source files.  
40 -#source_encoding = 'utf-8-sig'  
41 -  
42 -# The master toctree document.  
43 -master_doc = 'index'  
44 -  
45 -# General information about the project.  
46 -project = u'softwarepublico'  
47 -copyright = u'2014, Universidade de Brasília - UnB. Documentação licenciada sob a Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional'  
48 -  
49 -# The version info for the project you're documenting, acts as replacement for  
50 -# |version| and |release|, also used in various other places throughout the  
51 -# built documents.  
52 -#  
53 -# The short X.Y version.  
54 -version = '2.0'  
55 -# The full version, including alpha/beta/rc tags.  
56 -release = '2.0'  
57 -  
58 -# The language for content autogenerated by Sphinx. Refer to documentation  
59 -# for a list of supported languages.  
60 -#language = None  
61 -  
62 -# There are two options for replacing |today|: either, you set today to some  
63 -# non-false value, then it is used:  
64 -#today = ''  
65 -# Else, today_fmt is used as the format for a strftime call.  
66 -#today_fmt = '%B %d, %Y'  
67 -  
68 -# List of patterns, relative to source directory, that match files and  
69 -# directories to ignore when looking for source files.  
70 -exclude_patterns = ['_build']  
71 -  
72 -# The reST default role (used for this markup: `text`) to use for all  
73 -# documents.  
74 -#default_role = None  
75 -  
76 -# If true, '()' will be appended to :func: etc. cross-reference text.  
77 -#add_function_parentheses = True  
78 -  
79 -# If true, the current module name will be prepended to all description  
80 -# unit titles (such as .. function::).  
81 -#add_module_names = True  
82 -  
83 -# If true, sectionauthor and moduleauthor directives will be shown in the  
84 -# output. They are ignored by default.  
85 -#show_authors = False  
86 -  
87 -# The name of the Pygments (syntax highlighting) style to use.  
88 -pygments_style = 'sphinx'  
89 -  
90 -# A list of ignored prefixes for module index sorting.  
91 -#modindex_common_prefix = []  
92 -  
93 -# If true, keep warnings as "system message" paragraphs in the built documents.  
94 -#keep_warnings = False  
95 -  
96 -  
97 -# -- Options for HTML output ----------------------------------------------  
98 -  
99 -# The theme to use for HTML and HTML Help pages. See the documentation for  
100 -# a list of builtin themes.  
101 -html_theme = 'default'  
102 -  
103 -# Theme options are theme-specific and customize the look and feel of a theme  
104 -# further. For a list of options available for each theme, see the  
105 -# documentation.  
106 -#html_theme_options = {}  
107 -  
108 -# Add any paths that contain custom themes here, relative to this directory.  
109 -#html_theme_path = []  
110 -  
111 -# The name for this set of Sphinx documents. If None, it defaults to  
112 -# "<project> v<release> documentation".  
113 -#html_title = None  
114 -  
115 -# A shorter title for the navigation bar. Default is the same as html_title.  
116 -#html_short_title = None  
117 -  
118 -# The name of an image file (relative to this directory) to place at the top  
119 -# of the sidebar.  
120 -#html_logo = None  
121 -  
122 -# The name of an image file (within the static path) to use as favicon of the  
123 -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32  
124 -# pixels large.  
125 -#html_favicon = None  
126 -  
127 -# Add any paths that contain custom static files (such as style sheets) here,  
128 -# relative to this directory. They are copied after the builtin static files,  
129 -# so a file named "default.css" will overwrite the builtin "default.css".  
130 -html_static_path = ['_static']  
131 -  
132 -# Add any extra paths that contain custom files (such as robots.txt or  
133 -# .htaccess) here, relative to this directory. These files are copied  
134 -# directly to the root of the documentation.  
135 -#html_extra_path = []  
136 -  
137 -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,  
138 -# using the given strftime format.  
139 -#html_last_updated_fmt = '%b %d, %Y'  
140 -  
141 -# If true, SmartyPants will be used to convert quotes and dashes to  
142 -# typographically correct entities.  
143 -#html_use_smartypants = True  
144 -  
145 -# Custom sidebar templates, maps document names to template names.  
146 -#html_sidebars = {}  
147 -  
148 -# Additional templates that should be rendered to pages, maps page names to  
149 -# template names.  
150 -#html_additional_pages = {}  
151 -  
152 -# If false, no module index is generated.  
153 -#html_domain_indices = True  
154 -  
155 -# If false, no index is generated.  
156 -#html_use_index = True  
157 -  
158 -# If true, the index is split into individual pages for each letter.  
159 -#html_split_index = False  
160 -  
161 -# If true, links to the reST sources are added to the pages.  
162 -#html_show_sourcelink = True  
163 -  
164 -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.  
165 -#html_show_sphinx = True  
166 -  
167 -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.  
168 -#html_show_copyright = True  
169 -  
170 -# If true, an OpenSearch description file will be output, and all pages will  
171 -# contain a <link> tag referring to it. The value of this option must be the  
172 -# base URL from which the finished HTML is served.  
173 -#html_use_opensearch = ''  
174 -  
175 -# This is the file name suffix for HTML files (e.g. ".xhtml").  
176 -#html_file_suffix = None  
177 -  
178 -# Output file base name for HTML help builder.  
179 -htmlhelp_basename = 'softwarepublicodoc'  
180 -  
181 -  
182 -# -- Options for LaTeX output ---------------------------------------------  
183 -  
184 -latex_elements = {  
185 -# The paper size ('letterpaper' or 'a4paper').  
186 -#'papersize': 'letterpaper',  
187 -  
188 -# The font size ('10pt', '11pt' or '12pt').  
189 -#'pointsize': '10pt',  
190 -  
191 -# Additional stuff for the LaTeX preamble.  
192 -#'preamble': '',  
193 -}  
194 -  
195 -# Grouping the document tree into LaTeX files. List of tuples  
196 -# (source start file, target name, title,  
197 -# author, documentclass [howto, manual, or own class]).  
198 -latex_documents = [  
199 - ('index', 'softwarepublico.tex',  
200 - u'Documentação - Software Público Brasileiro (SPB)',  
201 - u'Universidade de Brasília', 'manual'),  
202 -]  
203 -  
204 -# The name of an image file (relative to this directory) to place at the top of  
205 -# the title page.  
206 -#latex_logo = None  
207 -  
208 -# For "manual" documents, if this is true, then toplevel headings are parts,  
209 -# not chapters.  
210 -#latex_use_parts = False  
211 -  
212 -# If true, show page references after internal links.  
213 -#latex_show_pagerefs = False  
214 -  
215 -# If true, show URL addresses after external links.  
216 -#latex_show_urls = False  
217 -  
218 -# Documents to append as an appendix to all manuals.  
219 -#latex_appendices = []  
220 -  
221 -# If false, no module index is generated.  
222 -#latex_domain_indices = True  
223 -  
224 -  
225 -# -- Options for manual page output ---------------------------------------  
226 -  
227 -# One entry per manual page. List of tuples  
228 -# (source start file, name, description, authors, manual section).  
229 -man_pages = [  
230 - ('index', 'softwarepublico',  
231 - u'Documentação - Software Público Brasileiro (SPB)',  
232 - [u'Universidade de Brasília'], 1)  
233 -]  
234 -  
235 -# If true, show URL addresses after external links.  
236 -#man_show_urls = False  
237 -  
238 -  
239 -# -- Options for Texinfo output -------------------------------------------  
240 -  
241 -# Grouping the document tree into Texinfo files. List of tuples  
242 -# (source start file, target name, title, author,  
243 -# dir menu entry, description, category)  
244 -texinfo_documents = [  
245 - ('index', 'softwarepublico',  
246 - u'Documentação - Software Público Brasileiro (SPB)',  
247 - u'Universidade de Brasília', 'softwarepublico', 'One line description of project.',  
248 - 'Miscellaneous'),  
249 -]  
250 -  
251 -# Documents to append as an appendix to all manuals.  
252 -#texinfo_appendices = []  
253 -  
254 -# If false, no module index is generated.  
255 -#texinfo_domain_indices = True  
256 -  
257 -# How to display URL addresses: 'footnote', 'no', or 'inline'.  
258 -#texinfo_show_urls = 'footnote'  
259 -  
260 -# If true, do not generate a @detailmenu in the "Top" node's menu.  
261 -#texinfo_no_detailmenu = False  
262 -  
263 -  
264 -# -- Options for Epub output ----------------------------------------------  
265 -  
266 -# Bibliographic Dublin Core info.  
267 -epub_title = u'softwarepublico'  
268 -epub_author = u'Universidade de Brasília'  
269 -epub_publisher = u'Universidade de Brasília'  
270 -epub_copyright = u'2014, Universidade de Brasília. Documentação licenciada sob a Licença Crea tive Commons Atribuição-CompartilhaIgual 4.0 Internacional'  
271 -  
272 -# The basename for the epub file. It defaults to the project name.  
273 -#epub_basename = u'softwarepublico'  
274 -  
275 -# The HTML theme for the epub output. Since the default themes are not optimized  
276 -# for small screen space, using the same theme for HTML and epub output is  
277 -# usually not wise. This defaults to 'epub', a theme designed to save visual  
278 -# space.  
279 -#epub_theme = 'epub'  
280 -  
281 -# The language of the text. It defaults to the language option  
282 -# or en if the language is not set.  
283 -#epub_language = ''  
284 -  
285 -# The scheme of the identifier. Typical schemes are ISBN or URL.  
286 -#epub_scheme = ''  
287 -  
288 -# The unique identifier of the text. This can be a ISBN number  
289 -# or the project homepage.  
290 -#epub_identifier = ''  
291 -  
292 -# A unique identification for the text.  
293 -#epub_uid = ''  
294 -  
295 -# A tuple containing the cover image and cover page html template filenames.  
296 -#epub_cover = ()  
297 -  
298 -# A sequence of (type, uri, title) tuples for the guide element of content.opf.  
299 -#epub_guide = ()  
300 -  
301 -# HTML files that should be inserted before the pages created by sphinx.  
302 -# The format is a list of tuples containing the path and title.  
303 -#epub_pre_files = []  
304 -  
305 -# HTML files shat should be inserted after the pages created by sphinx.  
306 -# The format is a list of tuples containing the path and title.  
307 -#epub_post_files = []  
308 -  
309 -# A list of files that should not be packed into the epub file.  
310 -epub_exclude_files = ['search.html']  
311 -  
312 -# The depth of the table of contents in toc.ncx.  
313 -#epub_tocdepth = 3  
314 -  
315 -# Allow duplicate toc entries.  
316 -#epub_tocdup = True  
317 -  
318 -# Choose between 'default' and 'includehidden'.  
319 -#epub_tocscope = 'default'  
320 -  
321 -# Fix unsupported image types using the PIL.  
322 -#epub_fix_images = False  
323 -  
324 -# Scale large images.  
325 -#epub_max_image_width = 0  
326 -  
327 -# How to display URL addresses: 'footnote', 'no', or 'inline'.  
328 -#epub_show_urls = 'inline'  
329 -  
330 -# If false, no index is generated.  
331 -#epub_use_index = True  
docs/conf.py.in 0 → 100644
@@ -0,0 +1,331 @@ @@ -0,0 +1,331 @@
  1 +# -*- coding: utf-8 -*-
  2 +#
  3 +# softwarepublico documentation build configuration file, created by
  4 +# sphinx-quickstart on Thu Nov 6 15:48:07 2014.
  5 +#
  6 +# This file is execfile()d with the current directory set to its
  7 +# containing dir.
  8 +#
  9 +# Note that not all possible configuration values are present in this
  10 +# autogenerated file.
  11 +#
  12 +# All configuration values have a default; values that are commented out
  13 +# serve to show the default.
  14 +
  15 +import sys
  16 +import os
  17 +
  18 +# If extensions (or modules to document with autodoc) are in another directory,
  19 +# add these directories to sys.path here. If the directory is relative to the
  20 +# documentation root, use os.path.abspath to make it absolute, like shown here.
  21 +#sys.path.insert(0, os.path.abspath('.'))
  22 +
  23 +# -- General configuration ------------------------------------------------
  24 +
  25 +# If your documentation needs a minimal Sphinx version, state it here.
  26 +#needs_sphinx = '1.0'
  27 +
  28 +# Add any Sphinx extension module names here, as strings. They can be
  29 +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
  30 +# ones.
  31 +extensions = []
  32 +
  33 +# Add any paths that contain templates here, relative to this directory.
  34 +templates_path = ['_templates']
  35 +
  36 +# The suffix of source filenames.
  37 +source_suffix = '.rst'
  38 +
  39 +# The encoding of source files.
  40 +#source_encoding = 'utf-8-sig'
  41 +
  42 +# The master toctree document.
  43 +master_doc = 'index'
  44 +
  45 +# General information about the project.
  46 +project = u'softwarepublico'
  47 +copyright = u'2014-2015, Universidade de Brasília - UnB. Documentação licenciada sob a Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional'
  48 +
  49 +# The version info for the project you're documenting, acts as replacement for
  50 +# |version| and |release|, also used in various other places throughout the
  51 +# built documents.
  52 +#
  53 +# The short X.Y version.
  54 +version = '3'
  55 +# The full version, including alpha/beta/rc tags.
  56 +release = '3'
  57 +
  58 +# The language for content autogenerated by Sphinx. Refer to documentation
  59 +# for a list of supported languages.
  60 +language = 'pt_BR'
  61 +
  62 +# There are two options for replacing |today|: either, you set today to some
  63 +# non-false value, then it is used:
  64 +#today = ''
  65 +# Else, today_fmt is used as the format for a strftime call.
  66 +#today_fmt = '%B %d, %Y'
  67 +
  68 +# List of patterns, relative to source directory, that match files and
  69 +# directories to ignore when looking for source files.
  70 +exclude_patterns = ['_build']
  71 +
  72 +# The reST default role (used for this markup: `text`) to use for all
  73 +# documents.
  74 +#default_role = None
  75 +
  76 +# If true, '()' will be appended to :func: etc. cross-reference text.
  77 +#add_function_parentheses = True
  78 +
  79 +# If true, the current module name will be prepended to all description
  80 +# unit titles (such as .. function::).
  81 +#add_module_names = True
  82 +
  83 +# If true, sectionauthor and moduleauthor directives will be shown in the
  84 +# output. They are ignored by default.
  85 +#show_authors = False
  86 +
  87 +# The name of the Pygments (syntax highlighting) style to use.
  88 +pygments_style = 'sphinx'
  89 +
  90 +# A list of ignored prefixes for module index sorting.
  91 +#modindex_common_prefix = []
  92 +
  93 +# If true, keep warnings as "system message" paragraphs in the built documents.
  94 +#keep_warnings = False
  95 +
  96 +
  97 +# -- Options for HTML output ----------------------------------------------
  98 +
  99 +# The theme to use for HTML and HTML Help pages. See the documentation for
  100 +# a list of builtin themes.
  101 +html_theme = 'default'
  102 +
  103 +# Theme options are theme-specific and customize the look and feel of a theme
  104 +# further. For a list of options available for each theme, see the
  105 +# documentation.
  106 +#html_theme_options = {}
  107 +
  108 +# Add any paths that contain custom themes here, relative to this directory.
  109 +#html_theme_path = []
  110 +
  111 +# The name for this set of Sphinx documents. If None, it defaults to
  112 +# "<project> v<release> documentation".
  113 +#html_title = None
  114 +
  115 +# A shorter title for the navigation bar. Default is the same as html_title.
  116 +#html_short_title = None
  117 +
  118 +# The name of an image file (relative to this directory) to place at the top
  119 +# of the sidebar.
  120 +#html_logo = None
  121 +
  122 +# The name of an image file (within the static path) to use as favicon of the
  123 +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
  124 +# pixels large.
  125 +#html_favicon = None
  126 +
  127 +# Add any paths that contain custom static files (such as style sheets) here,
  128 +# relative to this directory. They are copied after the builtin static files,
  129 +# so a file named "default.css" will overwrite the builtin "default.css".
  130 +html_static_path = ['_static']
  131 +
  132 +# Add any extra paths that contain custom files (such as robots.txt or
  133 +# .htaccess) here, relative to this directory. These files are copied
  134 +# directly to the root of the documentation.
  135 +#html_extra_path = []
  136 +
  137 +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
  138 +# using the given strftime format.
  139 +#html_last_updated_fmt = '%b %d, %Y'
  140 +
  141 +# If true, SmartyPants will be used to convert quotes and dashes to
  142 +# typographically correct entities.
  143 +#html_use_smartypants = True
  144 +
  145 +# Custom sidebar templates, maps document names to template names.
  146 +#html_sidebars = {}
  147 +
  148 +# Additional templates that should be rendered to pages, maps page names to
  149 +# template names.
  150 +#html_additional_pages = {}
  151 +
  152 +# If false, no module index is generated.
  153 +#html_domain_indices = True
  154 +
  155 +# If false, no index is generated.
  156 +#html_use_index = True
  157 +
  158 +# If true, the index is split into individual pages for each letter.
  159 +#html_split_index = False
  160 +
  161 +# If true, links to the reST sources are added to the pages.
  162 +#html_show_sourcelink = True
  163 +
  164 +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
  165 +#html_show_sphinx = True
  166 +
  167 +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
  168 +#html_show_copyright = True
  169 +
  170 +# If true, an OpenSearch description file will be output, and all pages will
  171 +# contain a <link> tag referring to it. The value of this option must be the
  172 +# base URL from which the finished HTML is served.
  173 +#html_use_opensearch = ''
  174 +
  175 +# This is the file name suffix for HTML files (e.g. ".xhtml").
  176 +#html_file_suffix = None
  177 +
  178 +# Output file base name for HTML help builder.
  179 +htmlhelp_basename = 'softwarepublicodoc'
  180 +
  181 +
  182 +# -- Options for LaTeX output ---------------------------------------------
  183 +
  184 +latex_elements = {
  185 +# The paper size ('letterpaper' or 'a4paper').
  186 +#'papersize': 'letterpaper',
  187 +
  188 +# The font size ('10pt', '11pt' or '12pt').
  189 +#'pointsize': '10pt',
  190 +
  191 +# Additional stuff for the LaTeX preamble.
  192 +#'preamble': '',
  193 +}
  194 +
  195 +# Grouping the document tree into LaTeX files. List of tuples
  196 +# (source start file, target name, title,
  197 +# author, documentclass [howto, manual, or own class]).
  198 +latex_documents = [
  199 + ('index', 'softwarepublico.tex',
  200 + u'Software Público Brasileiro: Manual de Operação (@@SPB_ENV@@)',
  201 + u'Universidade de Brasília', 'manual'),
  202 +]
  203 +
  204 +# The name of an image file (relative to this directory) to place at the top of
  205 +# the title page.
  206 +#latex_logo = None
  207 +
  208 +# For "manual" documents, if this is true, then toplevel headings are parts,
  209 +# not chapters.
  210 +#latex_use_parts = False
  211 +
  212 +# If true, show page references after internal links.
  213 +#latex_show_pagerefs = False
  214 +
  215 +# If true, show URL addresses after external links.
  216 +#latex_show_urls = False
  217 +
  218 +# Documents to append as an appendix to all manuals.
  219 +#latex_appendices = []
  220 +
  221 +# If false, no module index is generated.
  222 +#latex_domain_indices = True
  223 +
  224 +
  225 +# -- Options for manual page output ---------------------------------------
  226 +
  227 +# One entry per manual page. List of tuples
  228 +# (source start file, name, description, authors, manual section).
  229 +man_pages = [
  230 + ('index', 'softwarepublico',
  231 + u'Documentação - Software Público Brasileiro (SPB)',
  232 + [u'Universidade de Brasília'], 1)
  233 +]
  234 +
  235 +# If true, show URL addresses after external links.
  236 +#man_show_urls = False
  237 +
  238 +
  239 +# -- Options for Texinfo output -------------------------------------------
  240 +
  241 +# Grouping the document tree into Texinfo files. List of tuples
  242 +# (source start file, target name, title, author,
  243 +# dir menu entry, description, category)
  244 +texinfo_documents = [
  245 + ('index', 'softwarepublico',
  246 + u'Documentação - Software Público Brasileiro (SPB)',
  247 + u'Universidade de Brasília', 'softwarepublico', 'One line description of project.',
  248 + 'Miscellaneous'),
  249 +]
  250 +
  251 +# Documents to append as an appendix to all manuals.
  252 +#texinfo_appendices = []
  253 +
  254 +# If false, no module index is generated.
  255 +#texinfo_domain_indices = True
  256 +
  257 +# How to display URL addresses: 'footnote', 'no', or 'inline'.
  258 +#texinfo_show_urls = 'footnote'
  259 +
  260 +# If true, do not generate a @detailmenu in the "Top" node's menu.
  261 +#texinfo_no_detailmenu = False
  262 +
  263 +
  264 +# -- Options for Epub output ----------------------------------------------
  265 +
  266 +# Bibliographic Dublin Core info.
  267 +epub_title = u'softwarepublico'
  268 +epub_author = u'Universidade de Brasília'
  269 +epub_publisher = u'Universidade de Brasília'
  270 +epub_copyright = u'2014, Universidade de Brasília. Documentação licenciada sob a Licença Crea tive Commons Atribuição-CompartilhaIgual 4.0 Internacional'
  271 +
  272 +# The basename for the epub file. It defaults to the project name.
  273 +#epub_basename = u'softwarepublico'
  274 +
  275 +# The HTML theme for the epub output. Since the default themes are not optimized
  276 +# for small screen space, using the same theme for HTML and epub output is
  277 +# usually not wise. This defaults to 'epub', a theme designed to save visual
  278 +# space.
  279 +#epub_theme = 'epub'
  280 +
  281 +# The language of the text. It defaults to the language option
  282 +# or en if the language is not set.
  283 +#epub_language = ''
  284 +
  285 +# The scheme of the identifier. Typical schemes are ISBN or URL.
  286 +#epub_scheme = ''
  287 +
  288 +# The unique identifier of the text. This can be a ISBN number
  289 +# or the project homepage.
  290 +#epub_identifier = ''
  291 +
  292 +# A unique identification for the text.
  293 +#epub_uid = ''
  294 +
  295 +# A tuple containing the cover image and cover page html template filenames.
  296 +#epub_cover = ()
  297 +
  298 +# A sequence of (type, uri, title) tuples for the guide element of content.opf.
  299 +#epub_guide = ()
  300 +
  301 +# HTML files that should be inserted before the pages created by sphinx.
  302 +# The format is a list of tuples containing the path and title.
  303 +#epub_pre_files = []
  304 +
  305 +# HTML files shat should be inserted after the pages created by sphinx.
  306 +# The format is a list of tuples containing the path and title.
  307 +#epub_post_files = []
  308 +
  309 +# A list of files that should not be packed into the epub file.
  310 +epub_exclude_files = ['search.html']
  311 +
  312 +# The depth of the table of contents in toc.ncx.
  313 +#epub_tocdepth = 3
  314 +
  315 +# Allow duplicate toc entries.
  316 +#epub_tocdup = True
  317 +
  318 +# Choose between 'default' and 'includehidden'.
  319 +#epub_tocscope = 'default'
  320 +
  321 +# Fix unsupported image types using the PIL.
  322 +#epub_fix_images = False
  323 +
  324 +# Scale large images.
  325 +#epub_max_image_width = 0
  326 +
  327 +# How to display URL addresses: 'footnote', 'no', or 'inline'.
  328 +#epub_show_urls = 'inline'
  329 +
  330 +# If false, no index is generated.
  331 +#epub_use_index = True
docs/dependencies.rst
@@ -1,96 +0,0 @@ @@ -1,96 +0,0 @@
1 -  
2 -.. _dependencies:  
3 -  
4 -Dependências  
5 -============  
6 -  
7 -O repositório do SPB contém os pacotes que não são nativos do Sistema  
8 -Operacional onde o mesmo o sistema do Portal do Software Público deve ser  
9 -instalado. Esse repositório contém os pacotes referentes ao Bottle, Mailman-api,  
10 -Solr, Colab e às dependências do Colab (pacote Colab-deps).  
11 -  
12 -Colab  
13 -----------  
14 -Esse pacote, contém o sistema Colab. O processo de  
15 -criação desse pacote depende do pacote `python-virtualenv`, além de um  
16 -conjunto de dependências python, contidos no pacote `colab-deps`, descrito na  
17 -próxima seção. O processo de instalação desse pacote requer uma instalação  
18 -prévia do pacote `colab-deps`, que é instalado automaticamente se o repositório  
19 -do mesmo estiver disponível no conjunto de repositórios do `yum`.  
20 -  
21 -Colab-deps  
22 -----------  
23 -Este pacote contém as dependências *python* do Colab. Tais dependências foram  
24 -encapsuladas em um ambiente virtual python (`python-virtualenv`), permitindo uma  
25 -maior independência e, consequentemente, compatibilidade com o Sistema  
26 -Operacional no qual o pacote seja instalado. Esse pacote é composto pelas  
27 -ferramentas listadas a seguir.  
28 -  
29 -* Chardet  
30 -* Django  
31 -* Django-browserid  
32 -* Django-cliauth  
33 -* Django-common  
34 -* Django-conversejs  
35 -* Django-haystack  
36 -* Django-hitcounter  
37 -* Django-i18n-model  
38 -* Django-mobile  
39 -* Django-mptt  
40 -* Django-piston  
41 -* Django-revproxy  
42 -* Django-taggit  
43 -* Django-tastypie  
44 -* Dpaste  
45 -* Etiquetando  
46 -* Eventlet  
47 -* Fancy_tag  
48 -* Feedzilla  
49 -* Grab  
50 -* Gunicorn  
51 -* Html2text  
52 -* Lorem-ipsum-generator  
53 -* Lxml  
54 -* Paste  
55 -* Pip  
56 -* Poster  
57 -* Psycopg2  
58 -* Pure-sasl  
59 -* Pygments  
60 -* Pysolr  
61 -* Python-dateutil  
62 -* Python-memcached  
63 -* Python-mimeparse  
64 -* PyYAML  
65 -* Raven  
66 -* Repoze.lru  
67 -* Requests  
68 -* Setuptools  
69 -* Six  
70 -* Sleekxmpp  
71 -* South  
72 -* Stemming  
73 -* Tornado  
74 -* Transliterate  
75 -  
76 -  
77 -Mailman-api  
78 ------------  
79 -  
80 -Esse pacote contém o Mailman-api. Esta ferramenta python possui como  
81 -dependência os pacotes Bottle e python. Como o Bottle não é provido  
82 -nativamente pelo CentOS 7, foi necessário empacotá-lo separadamente.  
83 -  
84 -Bottle  
85 ------------  
86 -  
87 -Esse pacote contém a ferramenta Bottle, um framowork web escrito em  
88 -python, e requisito para a utilização da ferramenta Mailman-api. Este pacote  
89 -possui como dependência o pacote python, que está disponível nativamente no  
90 -CentOS.  
91 -  
92 -Solr  
93 -----  
94 -Esse pacote contém a ferramenta python Bottle, e integra o conjunto de  
95 -ferramentas do SPB. Sua instalação requer o pacote Java, que já existe  
96 -nativamente no CentOS.  
docs/firewall.rst.in 0 → 100644
@@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
  1 +Gestão do Firewall
  2 +==================
  3 +
  4 +Firewall Interno
  5 +-----------------
  6 +
  7 +O Portal do Software Público atualmente é composto por diversos serviços
  8 +funcionando em diferentes servidores. Para o seu correto funcionamento é
  9 +esperado que estes serviços se comuniquem através de TCP/IP.
  10 +
  11 +Os scripts de instalação do Portal do Software Público também cuidam da
  12 +manutenção das regras de firewall. Cada máquina possui um firewall
  13 +(iptables) local que por padrão nega todos os tipos de conexão de
  14 +entrada em todas as portas (INPUT rules) mas permite conexões de saída
  15 +(OUTPUT rules).
  16 +
  17 +Todas as regras de firewall são definidas no cookbook ``firewall``. Para
  18 +definir regras de comunidacação entre hosts locais, válidas para todos
  19 +os ambientes (local, produção, homologação, testes, etc) são utilizados
  20 +templates que podem ser encontrados em
  21 +``cookbooks/firewall/templates/``. Para regras de filtro utilize o
  22 +arquivo ``iptables-filter.erb`` e para regras de `NAT` o arquivo
  23 +``iptables-nat.erb``.
  24 +
  25 +Para adicionar regras específicas de cada ambiente (por exemplo, abrir
  26 +uma porta diferente em homologação) utilize o arquivo
  27 +``config/@@SPB_ENV@@/iptables-filter-rules``. Este arquivo aceita apenas
  28 +regras de filtro do tipo INPUT.
  29 +
  30 +
  31 +Comunicação Entre Serviços
  32 +++++++++++++++++++++++++++++
  33 +
  34 +Os serviços que compõe o portal e suas portas de entrada são descritos
  35 +na tabela a seguir:
  36 +
  37 +============= ============= ============== =====
  38 +Destino Origem Serviço Porta
  39 +============= ============= ============== =====
  40 +database integration Redis 6379
  41 +database integration PostgreSQL 5432
  42 +database social PostgreSQL 5432
  43 +social reverseproxy Nginx 80
  44 +social reverseproxy Nginx 443
  45 +integration reverseproxy Nginx 80
  46 +integration reverseproxy Nginx 443
  47 +email externa Postfix 25
  48 +reverseproxy externa Nginx 80
  49 +reverseproxy externa Nginx 443
  50 +reverseproxy externa OpenSSH (git) 22
  51 +============= ============= ============== =====
  52 +
  53 +
  54 +Comunicação externa
  55 +-------------------
  56 +
  57 +============ ============= =====
  58 +Destino Serviço Porta
  59 +============ ============= =====
  60 +email Postfix 25
  61 +reverseproxy Nginx 80
  62 +reverseproxy Nginx 443
  63 +reverseproxy OpenSSH (git) 22
  64 +============ ============= =====
  65 +
  66 +**Outros firewalls da rede:**
  67 +
  68 +Além do firewall local é importante que os serviços com origem
  69 +``externa`` tenham suas portas de INPUT abertas em todos os firewalls da
  70 +rede. No caso do host ``email`` a porta **25** também deve estar aberta
  71 +para OUTPUT (alternativamente o Postfix pode ser configurado para enviar
  72 +e-mails utilizando um relay interno).
docs/firewall.rstin 0 → 100644
@@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
  1 +Gestão do Firewall
  2 +==================
  3 +
  4 +Firewall Interno
  5 +-----------------
  6 +
  7 +O Portal do Software Público atualmente é composto por diversos serviços funcionando em diferentes servidores. Para o seu correto funcionamento é esperado que estes serviços se comuniquem através de TCP/IP.
  8 +
  9 +Os scripts de instalação do Portal do Software Público também cuidam da manutenção das regras de firewall. Cada máquina possui um firewall (iptables) local que por padrão nega todos os tipos de conexão de entrada em todas as portas (INPUT rules) mas permite conexões de saída (OUTPUT rules).
  10 +
  11 +Todas as regras de firewall são definidas no cookbook ``firewall``. Para definir regras de comunidacação entre hosts locais, válidas para todos os ambientes (local, produção, homologação, testes, etc) são utilizados templates que podem ser encontrados em ``cookbooks/firewall/templates/``. Para regras de filtro utilize o arquivo ``iptables-filter.erb`` e para regras de nat o arquivo ``iptables-nat.erb``.
  12 +
  13 +Para adicionar regras específicas de cada ambiente (por exemplo, abrir uma porta diferente em homologação) utilize o arquivo ``config/<nome_do_ambiente>/iptables-filter-rules``. Este arquivo aceita apenas regras de filtro do tipo INPUT.
  14 +
  15 +
  16 +Comunicação Entre Serviços
  17 +++++++++++++++++++++++++++++
  18 +
  19 +Os serviços que compõe o portal e suas portas de entrada são descritos na tabela a seguir:
  20 +
  21 ++--------------+--------------+---------------+--------+
  22 +| Destino | Origem + Serviço | Porta |
  23 ++==============+==============+===============+========+
  24 +| database | integration | Redis | 6379 |
  25 ++--------------+--------------+---------------+--------+
  26 +| database | integration | PostgreSQL | 5432 |
  27 ++--------------+--------------+---------------+--------+
  28 +| database | social | PostgreSQL | 5432 |
  29 ++--------------+--------------+---------------+--------+
  30 +| social | reverseproxy | Nginx | 80 |
  31 ++--------------+--------------+---------------+--------+
  32 +| social | reverseproxy | Nginx | 443 |
  33 ++--------------+--------------+---------------+--------+
  34 +| integration | reverseproxy | Nginx | 80 |
  35 ++--------------+--------------+---------------+--------+
  36 +| integration | reverseproxy | Nginx | 443 |
  37 ++--------------+--------------+---------------+--------+
  38 +| email | externa | Postfix | 25 |
  39 ++--------------+--------------+---------------+--------+
  40 +| reverseproxy | externa | Nginx | 80 |
  41 ++--------------+--------------+---------------+--------+
  42 +| reverseproxy | externa | Nginx | 443 |
  43 ++--------------+--------------+---------------+--------+
  44 +| reverseproxy | externa | OpenSSH (git) | 22 |
  45 ++--------------+--------------+---------------+--------+
  46 +
  47 +
  48 +Comunicação externa
  49 +-------------------
  50 +
  51 ++--------------+---------------+--------+
  52 +| Destino | Serviço | Porta |
  53 ++==============+===============+========+
  54 +| email | Postfix | 25 |
  55 ++--------------+---------------+--------+
  56 +| reverseproxy | Nginx | 80 |
  57 ++--------------+---------------+--------+
  58 +| reverseproxy | Nginx | 443 |
  59 ++--------------+---------------+--------+
  60 +| reverseproxy | OpenSSH (git) | 22 |
  61 ++--------------+---------------+--------+
  62 +
  63 +**Outros firewalls da rede:**
  64 +
  65 +Além do firewall local é importante que os serviços com origem ``externa`` tenham suas portas de INPUT abertas em todos os firewalls da rede. No caso do host ``email`` a porta **25** também deve estar aberta para OUTPUT (alternativamente o Postfix pode ser configurado para enviar e-mails utilizando um relay interno).
docs/implantacao.rst.in 0 → 100644
@@ -0,0 +1,202 @@ @@ -0,0 +1,202 @@
  1 +Implantação
  2 +===========
  3 +
  4 +Preparação da estação de trabalho
  5 +---------------------------------
  6 +
  7 +Para gerenciar o SPB, é necessária uma estação de trabalho GNU/Linux,
  8 +que pode ser Debian 8 ou posterior, Ubuntu 14.04 ou superior, ou CentOS
  9 +7 ou superior (e equivalentes como RHEL 7 ou superior, ou Fedora). O
  10 +processo também pode ser feito em outros sistemas, desde que os pacotes
  11 +equivalentes estejam instalados.
  12 +
  13 +As seguintes ferramentas serão necessárias:
  14 +
  15 +* git_: ferramenta de controle de versão.
  16 +* chake_: ferramenta de gestão de configuração.
  17 +
  18 +.. _chake: https://gitlab.com/terceiro/chake
  19 +.. _git: http://git-scm.com/
  20 +
  21 +Para instalar em Debian/Ubuntu::
  22 +
  23 + $ sudo apt-get install git ruby
  24 + $ sudo gem install chake
  25 +
  26 +Para instalar em CentOS/RHEL/Fedora::
  27 +
  28 + $ sudo yum install git ruby
  29 + $ sudo gem install chake
  30 +
  31 +Além dessas ferramentas, será necessário um emulador de terminal. O
  32 +emulador de terminal padrão do seu ambiente de trabalho, ou qualquer
  33 +outro, vai servir.
  34 +
  35 +Obtendo o repositório de configuração
  36 +-------------------------------------
  37 +
  38 +Para iniciar, é necessário uma conta e usuário no SPB, com uma chave SSH
  39 +configurada.
  40 +
  41 +Para obter o repositório de configuração, é necessário clonar o
  42 +repositório com ``git``::
  43 +
  44 + $ git clone git@beta.softwarepublico.gov.br:softwarepublico/softwarepublico.git
  45 +
  46 +A partir daqui, todos os passos serão executados de dentro do
  47 +repositório, então se certifique que o seu *shell* está no diretório
  48 +onde foi clonado o repositório::
  49 +
  50 + $ cd softwarepublico/
  51 +
  52 +
  53 +Preparação dos servidores
  54 +-------------------------
  55 +
  56 +* Os servidores precisam estar acessíveis por SSH. Caso necessário,
  57 + podem ser feitas configurações do SSH em
  58 + ``config/@@SPB_ENV@@/ssh_config`` para isso.
  59 +* O usuário que vai conectar via SSH nos servidores precisa:
  60 + * ter acesso SSH configurado via chave SSH para evitar digitar senha.
  61 + * ter permissão de usar ``sudo`` sem a necessidade de digitar senha.
  62 +
  63 +Configuração do ambiente alvo
  64 +-----------------------------
  65 +
  66 +O SPB tem o conceito de "ambientes", que são diferentes instalações da
  67 +mesma plataforma. Todas as informações específicas sobre um determinado
  68 +ambiente estão centralizadas em arquivos dentro do diretório
  69 +``config/${ambiente}/``. Por exemplo, o ambiente "local", que se destina
  70 +ao uso para desenvolvimento local com máquinas virtuais, possui o
  71 +seguinte conteúdo::
  72 +
  73 + $ find config/local/ | sort
  74 + config/local/config.yaml
  75 + config/local/ips.yaml
  76 + config/local/ssh_config
  77 +
  78 +Estes arquivos possuem a seguinte finalidade:
  79 +
  80 +* ``config.yaml``: Parâmetros gerais de configuração
  81 +* ``ips.yaml``: Tabela de IP's (na rede local) das máquinas que compõem
  82 + o ambiente.
  83 +* ``ssh_config``: Configuração necessária para o SSH. Pode ser um
  84 + arquivo caso não seja necessária nenhuma configuração especial para
  85 + acessar as máquinas (e.g. se você está na mesma rede local que elas.
  86 +
  87 +Vamos agora verificar o conteúdo de cada arquivo no ambiente
  88 +**@@SPB_ENV@@**. Primeiro, ``config.yaml``:
  89 +
  90 +.. code-block:: yaml
  91 +
  92 + @@config(config.yaml)@@
  93 +
  94 +Para nossa sorte, o significado de cada um dos campo acima deve ser
  95 +autoexplicativo.
  96 +
  97 +O arquivo ``ips.yaml`` contém uma tabela com os endereços IP de cada
  98 +servidor da plataforma na rede local. Exemplo:
  99 +
  100 +.. code-block:: yaml
  101 +
  102 + @@config(ips.yaml)@@
  103 +
  104 +Já o arquivo ``ssh_config`` contém opções padrão de configuração do
  105 +``ssh`` para conexão às máquinas::
  106 +
  107 + @@config(ssh_config)@@
  108 +
  109 +Configuração do DNS
  110 +-------------------
  111 +
  112 +A tabela a seguir foi gerada dinamicamente a partir da configuração do
  113 +ambiente **@@SPB_ENV@@**. As seguintes entradas precisam ser configuradas no
  114 +DNS:
  115 +
  116 +.. include:: dns.rst
  117 +
  118 +Verificando o ambiente
  119 +----------------------
  120 +
  121 +Para listar as máquinas do ambiente::
  122 +
  123 + $ rake nodes SPB_ENV=@@SPB_ENV@@
  124 +
  125 +O comando acima deve dar o seguinte resultado::
  126 +
  127 + integration ssh
  128 + email ssh
  129 + social ssh
  130 + database ssh
  131 + reverseproxy ssh
  132 +
  133 +Note que todas as vezes que formos chamar ``rake``, será preciso
  134 +informar sobre qual ambiente desejamos operar (``SPB_ENV=@@SPB_ENV@@``).
  135 +Caso você for operar sobre apenas um ambiente, ou caso você queira
  136 +evitar digitação, você pode criar um arquivo ``local.rake`` na raiz do
  137 +repositório com o seguinte conteúdo::
  138 +
  139 + ENV['SPB_ENV'] ||= '@@SPB_ENV@@'
  140 +
  141 +Isto fará com que o valor e ``SPB_ENV`` seja sempre ``@@SPB_ENV@@``, a
  142 +não ser que você informe na linha de comando. Daqui para frente, vamos
  143 +sempre exibir o parâmetro ``SPB_ENV=@@SPB_ENV@@``, mas lembre-se que ele pode ser omitido se você tiver configurado o *default* em ``local.rake``.
  144 +
  145 +Para testar a conectividade às máquinas, podemos executar um comando
  146 +nelas::
  147 +
  148 + $ rake nodes SPB_ENV=@@SPB_ENV@@
  149 + $ <PROMPT PARA VOCÊ DIGITAR>
  150 +
  151 +No prompt, entre um comando simples como ``sudo date``. O resultado deve ser
  152 +parecido com o seguinte::
  153 +
  154 + $ rake run
  155 + $ sudo date
  156 + integration: $ sudo date
  157 + integration: Qui Mai 14 18:59:19 BRT 2015
  158 + email: $ sudo date
  159 + email: Qui Mai 14 18:59:22 BRT 2015
  160 + social: $ sudo date
  161 + social: Qui Mai 14 18:59:24 BRT 2015
  162 + database: $ sudo date
  163 + database: Qui Mai 14 18:59:27 BRT 2015
  164 + reverseproxy: $ sudo date
  165 + reverseproxy: Qui Mai 14 18:59:28 BRT 2015
  166 +
  167 +Se o resultado se parece com o exemplo acima, e você não precisou digitar a sua
  168 +senha nehuma vez, significa que 1) você conseguiu conectar em todas as máquinas
  169 +e 2) o sudo sem senha está configurado corretamente. Está tudo certo para
  170 +começar!
  171 +
  172 +Primeira instalação
  173 +-------------------
  174 +
  175 +Uma vez configurados os parâmetros em ``config/@@SPB_ENV@@/``, podemos
  176 +dar início à instalação. O primeiro passo é uma preconfiguração que
  177 +precisamos fazer::
  178 +
  179 + $ rake preconfig SPB_ENV=@@SPB_ENV@@
  180 +
  181 +
  182 +Este comando vai fazer uma configuração inicial que é necessária para o
  183 +resto do processo, e **só é necessária fazer uma vez**.
  184 +
  185 +Depois de completo o procedimento acima, para aplicar as configurações a
  186 +todos os servidores basta executar::
  187 +
  188 + $ rake converge SPB_ENV=@@SPB_ENV@@
  189 +
  190 +O comando ``converge`` na verdade é o *default*, então o seguinte é
  191 +equivalente::
  192 +
  193 + $ rake SPB_ENV=@@SPB_ENV@@
  194 +
  195 +Se você tiver configurado o ambiente **@@SPB_ENV@@** no ``local.rake``
  196 +(ver instruções acima), então o comando seguinte, também equivalente, é
  197 +muito mais simples::
  198 +
  199 + $ rake
  200 +
  201 +Todas as possibilidades de comandos serão listados se você executar
  202 +``rake -T``. Consulte também a documentação do chake_.
docs/index.rst
@@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
1 -  
2 -Documentação do Software Público Brasileiro (SPB)  
3 -=================================================  
4 -  
5 -Introdução  
6 -----------  
7 -  
8 -Bem-vindo a documentação do Portal do Software Público Brasileiro.  
9 -  
10 -O Portal do Software Público Brasileiro (SPB), na prática, é um sistema Web  
11 -que se consolidou como um ambiente de compartilhamento de softwares. O projeto  
12 -de evolução deste portal está sendo desenvolvido pela Universidade de Brasília.  
13 -  
14 -Hoje o SPB é um sistema Web composto por ferramentas livres integradas porém com  
15 -desenvolvimento e comunidades independentes.  
16 -  
17 -As ferramentas que compõe o Software Público são:  
18 -  
19 -* **Mailman**: Para lista de e-mail estamos utilizando o Mailman na versão 2, que é um software gratuito para gerenciamento de discussão eletrônica de e-mail e listas *e-newsletter*;  
20 -  
21 -* **Noosfero**: Para rede social estamos utilizando o Noosfero que é uma plataforma web livre para criação de redes sociais com blog, e-Portifólios, CMS, RSS, discussão temática, agenda de eventos, galeria de imagens, chat, entre outros. Ele foi desenvolvido pela Cooperativa de Tecnologias Livres – Colivre 3 em 2007, sob a licença AGPL v.3, com a proposta de permitir ao usuário criar sua própria rede social personalizada, livre e autônoma;  
22 -  
23 -* **Gitlab**: Para Forge para Git estamos utilizando o GitLab, que é um software livre de colaboração de código *online* que utiliza a ferramenta de gerência de código fonte Git;  
24 -  
25 -* **Solr**: Para Plataforma de Buscas estamos utilizando Apache Solr, que é uma plataforma de busca open source da Apache Lucene escrita em Java;  
26 -  
27 -* **Persona**: Para suporte a autentição Federada estamos utilizando o Mozilla Persona, que foi desenvolvido pela Mozilla Foundation.  
28 -  
29 -* **Colab**: Para integrar todas estas ferramentas estamos utilizando o Colab, que é uma plataforma de integração de ferramentas. Nele, são também integradas as interfaces das ferramentas para que, ao navegar, o usuário tenha a sensação de estar navegando em uma única ferramenta.  
30 -  
31 -  
32 -Conteúdos  
33 -----------  
34 -  
35 -.. toctree::  
36 - :maxdepth: 3  
37 -  
38 - install  
39 - dependencies  
docs/index.rst.in 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +Software Público Brasileiro: Manual de Operação (@@SPB_ENV@@)
  2 +*******************************************************************************
  3 +
  4 +.. toctree::
  5 + :maxdepth: 1
  6 +
  7 + introducao
  8 + arquitetura
  9 + implantacao
  10 + manutencao
  11 + backup
  12 + firewall
docs/install.rst
@@ -1,403 +0,0 @@ @@ -1,403 +0,0 @@
1 -Instalação  
2 -==========  
3 -  
4 -.. Descrição dos pacotes e listagem das dependências de cada pacote  
5 -  
6 -Para instalação das ferramentas que compõem o Software Público, é necessária a  
7 -instalação de um conjunto de pacotes RPM. Um pacote RPM consiste em uma coleção  
8 -de uma ou mais ferramentas que permite um meio automático de instalação,  
9 -atualização, configuração e remoção de softwares.  
10 -  
11 -O processo de instalação aqui descrito permite a instalação e configuração  
12 -desses pacotes em uma máquina com o Sistema Operacional CentOS 7 instalado e  
13 -atualizado. Os pacotes a seguir já são fornecidos nativamente pelo Sistema  
14 -Operacional, não sendo necessária uma configuração adicional para a  
15 -instalação dos mesmos.  
16 -  
17 -* Mailman  
18 -* Nginx  
19 -* PostgreSQL Server  
20 -  
21 -Somados a esses, alguns pacotes não fornecidos nativamente também são  
22 -necessários. Os mesmos estão listados a seguir.  
23 -  
24 -* Noosfero  
25 -* Gitlab  
26 -* Gitlab-deps  
27 -* Solr  
28 -* Colab  
29 -* Colab-deps  
30 -* Mailman-api  
31 -  
32 -Para disponibilizar cada pacote não nativo do CentOS 7, fez-se um levantamento  
33 -das dependências de cada ferramenta empacotada, bem como do processo de  
34 -instalação de cada uma, de modo a automatizar esse processo.  
35 -A seção :ref:`dependencies` descreve brevemente o levantamento de dependências  
36 -feito.  
37 -  
38 -  
39 -Repositório do SPB  
40 --------------------  
41 -  
42 -.. Configuração do repositório yum em /etc/yum.repos.d  
43 -  
44 -Para instalação dos pacotes existentes no repositório do SPB através do  
45 -gerenciador de instalação e remoção de pacotes do CentOS (o *Yum*), é preciso  
46 -adicionar o arquivo de configuração desse repositório no diretório  
47 -`/etc/yum.repos.d/` do Sistema Operacional onde o Portal do Software Público deve  
48 -Procedimento:  
49 -  
50 -Os comandos a seguir devem ser executados via terminal, com permissões de super  
51 -usuário do sistema.  
52 -  
53 -1. Instalar (caso não esteja instalado) o programa `wget`, para download das  
54 - configurações de repositório  
55 -  
56 -::  
57 -  
58 - yum install -y wget  
59 -  
60 -2. Ir para o diretório `/etc/yum.repos.d/`  
61 -  
62 -::  
63 -  
64 - cd /etc/yum.repos.d/  
65 -  
66 -3. Fazer o *download* dos arquivos de configuração nesse diretório:  
67 -  
68 -::  
69 -  
70 - wget http://download.opensuse.org/repositories/isv:/spb:/colab/CentOS_7/isv:spb:colab.repo  
71 - wget http://download.opensuse.org/repositories/isv:/spb:/mailman-api/CentOS_7/isv:spb:mailman-api.repo  
72 - wget http://download.opensuse.org/repositories/isv:/spb:/gitlab/CentOS_7/isv:spb:gitlab.repo  
73 -  
74 -4. Instalar repositório para instalação do servidor web Nginx:  
75 -  
76 -::  
77 -  
78 - rpm -i http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm  
79 -  
80 -  
81 -Instalação das Ferramentas (via pacote)  
82 ----------------------------------------  
83 -  
84 -.. Instalação dos pacotes via yum  
85 -  
86 -Após a configuração do repositório do SPB, todos os pacotes deverão estar  
87 -disponíveis através do *yum*. Ainda que algumas dependências sejam tratadas  
88 -automaticamente, o comportamento de alguns pacotes é dependente da ordem em que  
89 -os mesmos são instalados. Portanto, deve-se executar a instalação na ordem  
90 -especificada a seguir.  
91 -Os comandos a seguir devem ser executados via terminal, com permissões de super  
92 -usuário do sistema.  
93 -  
94 -Procedimento:  
95 -  
96 -1. Instalar o pacote PostreSQL Server  
97 -  
98 -::  
99 -  
100 - yum install -y postgresql-server  
101 -  
102 -2. Instalar o pacote do servidor de estrutura de dados Redis  
103 -  
104 -::  
105 -  
106 - yum install -y redis  
107 -  
108 -3. Instalar os pacotes do source forge Gitlab e gerenciador de repositórios  
109 - Gitlab-shell  
110 -  
111 -::  
112 -  
113 - yum install -y gitlab gitlab-shell  
114 -  
115 -4. Instalar o pacote da ferramenta Noosfero  
116 -  
117 -::  
118 -  
119 - yum install -y noosfero  
120 -  
121 -5. Instalar o pacote da ferramenta de integração Colab  
122 -  
123 -::  
124 -  
125 - yum install -y colab  
126 -  
127 -6. Instalar o pacote do servidor web Nginx  
128 -  
129 -::  
130 -  
131 - yum install -y nginx  
132 -  
133 -Configurações  
134 ---------------  
135 -  
136 -  
137 -Nginx  
138 -+++++  
139 -  
140 -Para configurar o Nginx crie o arquivo ``/etc/nginx/conf.d/colab.conf`` com o conteúdo abaixo:  
141 -  
142 -.. code-block:: nginx  
143 -  
144 - upstream colab {  
145 - server 127.0.0.1:8001 fail_timeout=10s;  
146 - }  
147 -  
148 - server {  
149 - listen *:80;  
150 -  
151 - server_name beta.softwarepublico.gov.br;  
152 - return 301 https://$server_name$request_uri;  
153 - }  
154 -  
155 - server {  
156 - listen *:443 ssl;  
157 -  
158 - server_name beta.softwarepublico.gov.br;  
159 -  
160 - ssl on;  
161 -  
162 - ssl_certificate /etc/nginx/colab.crt;  
163 - ssl_certificate_key /etc/nginx/colab.key;  
164 - ssl_session_cache shared:SSL:10m;  
165 - ssl_session_timeout 5m;  
166 - ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;  
167 - ssl_ciphers HIGH:!aNULL:!MD5;  
168 - ssl_prefer_server_ciphers on;  
169 -  
170 - access_log /var/log/nginx/ssl-colab.access.log;  
171 - error_log /var/log/nginx/ssl-colab.error.log;  
172 -  
173 - location /gitlab/assets/ {  
174 - alias /var/lib/gitlab-assets/;  
175 - }  
176 -  
177 - location / {  
178 - root /usr/share/nginx/colab;  
179 - try_files $uri @colab-app;  
180 - }  
181 -  
182 - location @colab-app {  
183 - proxy_pass http://colab;  
184 - proxy_read_timeout 90;  
185 - proxy_connect_timeout 90;  
186 - proxy_redirect off;  
187 - proxy_set_header Host $host;  
188 - proxy_set_header X-Real-IP $remote_addr;  
189 - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
190 - proxy_set_header X-Forwarded-Proto https;  
191 - }  
192 - }  
193 -  
194 -  
195 -Substitua o domínio de exemplo ``beta.softwarepublico.gov.br`` pelo domínio  
196 -desejado.  
197 -  
198 -Certifique-se de instalar o certificado SSL (``/etc/nginx/colab.crt``) e sua  
199 -chave privada (``/etc/nginx/colab.key``).  
200 -  
201 -Reinicie o serviço do Nginx com o comando: ``sudo service nginx restart``.  
202 -  
203 -  
204 -Colab  
205 -+++++  
206 -  
207 -Edite o arquivo ``/etc/colab/settings.yaml`` e adicione o nome e e-mail dos administradores do sistema:  
208 -  
209 -.. code-block:: yaml  
210 -  
211 - ## System admins  
212 - ADMINS: &admin  
213 - -  
214 - - John Foo  
215 - - john@example.com  
216 - -  
217 - - Mary Bar  
218 - - mary@example.com  
219 -  
220 - MANAGERS: *admin  
221 -  
222 -  
223 -Edite o arquivo ``/etc/colab/settings.yaml`` e configure a URL principal da aplicação, quais hosts deverão aceitar requisições e quais hosts poderão ser utilizadas para que o login seja efetuado. Exemplo:  
224 -  
225 -.. code-block:: yaml  
226 -  
227 - SITE_URL: 'https://beta.softwarepublico.gov.br'  
228 -  
229 - ALLOWED_HOSTS:  
230 - - beta.softwarepublico.gov.br  
231 -  
232 - BROWSERID_AUDIENCES:  
233 - - http://beta.softwarepublico.gov.br  
234 - - https://beta.softwarepublico.gov.br  
235 -  
236 -  
237 -Edite o arquivo ``/etc/colab/settings.yaml`` e configure o endereço que será utilizado no FROM dos e-mails enviados pelo Colab. Veja o exemplo:  
238 -  
239 -.. code-block:: yaml  
240 -  
241 - COLAB_FROM_ADDRESS: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>'  
242 - SERVER_EMAIL: '"Portal do Software Publico" <noreply@beta.softwarepublico.gov.br>'  
243 -  
244 -  
245 -Edite o arquivo ``/etc/colab/settings.yaml`` e configure o endereço das ferramentas a serem integradas ao Colab. Veja o exemplo:  
246 -  
247 -.. code-block:: yaml  
248 -  
249 - PROXIED_APPS:  
250 - gitlab:  
251 - upstream: 'http://localhost:8080/gitlab'  
252 - noosfero:  
253 - upstream: 'http://localhost:8090/noosfero'  
254 -  
255 -  
256 -Após editar todos os arquivos desejados reinicie o processo do Colab com  
257 -utilizando o comando ``service colab restart``.  
258 -  
259 -  
260 -Gitlab  
261 -++++++  
262 -  
263 -Edite o arquivo ``/etc/gitlab/gitlab.yml`` acrescentando o atributo  
264 -relative_url_root após a linha ``email_from: example@example.com``.  
265 -Veja o exemplo a seguir:  
266 -  
267 -.. code-block:: yaml  
268 -  
269 - email_from:example@example.com  
270 - relative_url_root: /gitlab  
271 -  
272 -  
273 -Descomente a linha a seguir no arquivo ``/etc/gitlab/unicorn.rb``, veja o exemplo:  
274 -  
275 -.. code-block:: ruby  
276 -  
277 - ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"  
278 -  
279 -  
280 -Altere o atributo gitlab_url no arquivo ``/etc/gitlab-shell/config.yml``, acrescentando /gitlab a url existente. Veja o exemplo:  
281 -  
282 -.. code-block:: yaml  
283 -  
284 - gitlab_url: "http://localhost:8080/gitlab"  
285 -  
286 -  
287 -Descomente a linha a seguir no arquivo ``/usr/lib/gitlab/config/application.rb``, veja o exemplo:  
288 -  
289 -.. code-block:: ruby  
290 -  
291 - config.relative_url_root = "/gitlab"  
292 -  
293 -  
294 -Após a configuração acima ter sido feita o serviço do gitlab precisa ser reiniciado utilizando o comando ``service gitlab restart``.  
295 -  
296 -Noosfero  
297 -++++++++  
298 -  
299 -Edite o arquivo ``/etc/noosfero/thin.yml``, e adicione uma linha com o  
300 -seguinte conteúdo:  
301 -  
302 -.. code-block:: yaml  
303 -  
304 - prefix: /social  
305 -  
306 -Crie/edite o arquivo ``/etc/default/noosfero`` e adicione a seguinte  
307 -linha:  
308 -  
309 -.. code-block:: ruby  
310 -  
311 - export RAILS_RELATIVE_URL_ROOT=/social  
312 -  
313 -Reinicie o serviço:  
314 -  
315 -.. code-block:: sh  
316 -  
317 - $ sudo service noosfero restart  
318 -  
319 -Mailman  
320 -+++++++  
321 -  
322 -Edite o arquivo de configuração do `mailman` em  
323 -``/etc/mailman/mm_cfg.py``, e ajuste os seguintes valores:  
324 -  
325 -.. code-block:: python  
326 -  
327 - DEFAULT_EMAIL_HOST = 'listas.softwarepublico.gov.br'  
328 - MTA = None  
329 - POSTFIX_STYLE_VIRTUAL_DOMAINS = ['listas.softwarepublico.gov.br']  
330 -  
331 -Crie a lista de discussão default, necessária para a inicialização do  
332 -serviço. Substitua ``USER@DOMAIN.COM`` pelo email a ser usado como  
333 -administrador do `mailman`, e ``PASSWORD`` pela senha de administração do  
334 -`mailman`.  
335 -  
336 -.. code-block:: sh  
337 -  
338 - $ sudo -u mailman /usr/lib/mailman/bin/newlist --quiet mailman USER@DOMAIN.COM PASSWORD  
339 - $ sudo service mailman restart  
340 -  
341 -  
342 -Postfix  
343 -+++++++  
344 -  
345 -Configure o postfix:  
346 -  
347 -.. code-block:: sh  
348 -  
349 - $ sudo postconf relay_domains=listas.softwarepublico.gov.br  
350 - $ sudo postconf transport_maps=hash:/etc/postfix/transport  
351 -  
352 -Crie/edite ``/etc/postfix/transport`` com o seguinte conteúdo:  
353 -  
354 -.. code-block:: sh  
355 -  
356 - listas.softwarepublico.gov.br mailman:  
357 -  
358 -  
359 -Faça o download do arquivo :download:`postfix-to-mailman-centos.py` e salve no  
360 -diretório ``/etc/postfix``, e altere as permissões para tornar o arquivo  
361 -executável:  
362 -  
363 -.. code-block:: sh  
364 -  
365 - $ sudo chmod +x /etc/postfix/postfix-to-mailman-centos.py  
366 -  
367 -Adicione o seguinte conteúdo no final do arquivo ``/etc/postfix/master.cf``:  
368 -  
369 -::  
370 -  
371 - mailman unix - n n - - pipe  
372 - flags=FR user=mailman:mailman  
373 - argv=/etc/postfix/postfix-to-mailman-centos.py ${nexthop} ${user}  
374 -  
375 -Gere o banco de dados para consulta, e reinicie o serviço:  
376 -  
377 -.. code-block:: sh  
378 -  
379 - $ sudo postmap /etc/postfix/transport  
380 - $ sudo service postfix restart  
381 -  
382 -Inicie o serviço do mailman-api:  
383 -  
384 -.. code-block:: sh  
385 -  
386 - $ sudo service mailman-api start  
387 -  
388 -  
389 -Habilitar inicialização automática dos serviços  
390 -+++++++++++++++++++++++++++++++++++++++++++++++  
391 -  
392 -Para permitir que os serviços iniciem automaticamente, execute os comandos  
393 -abaixo:  
394 -  
395 -.. code-block:: sh  
396 -  
397 - $ sudo systemctl enable mailman  
398 - $ sudo systemctl enable mailman-api  
399 - $ sudo systemctl enable nginx  
400 - $ sudo systemctl enable colab  
401 - $ sudo systemctl enable noosfero  
402 - $ sudo chkconfig --add gitlab  
403 - $ sudo chkconfig --add solr  
docs/introducao.rst.in 0 → 100644
@@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
  1 +Introdução
  2 +==========
  3 +
  4 +Bem-vindo a documentação do Portal do Software Público Brasileiro.
  5 +
  6 +O Portal do Software Público Brasileiro (SPB) é uma plataforma de
  7 +compartilhamento e colaboração no desenvolvimento de softwares. O
  8 +projeto de evolução deste portal está sendo desenvolvido pela
  9 +Universidade de Brasília.
  10 +
  11 +O SPB é composto de um conjunto de ferramentas com funcionalidades
  12 +complementares, que são desenvolvidas de forma independentes pelas suas
  13 +respectivas comunidades. Estas ferramentas estão sendo integradas pela
  14 +nossa equipe de forma a apresentar uma experiência de usuário
  15 +consistente.
  16 +
  17 +* O Colab_ é uma ferramenta especializada na integração de outras
  18 + ferramentas. O Colab fornece um ponto central de autenticação de
  19 + usuários para as demais ferramentas da plataforma, indexa informações
  20 + das demais ferramentas para busca e gamificação, e fornece integração
  21 + visual entre as diferentes ferramentas que compõem o SOB. O Colab é um
  22 + software livre criado no Brasil, que teve sua origem no
  23 + Programa `Interlegis` do Senado Federal.
  24 +
  25 +.. _Colab: https://github.com/colab-community
  26 +.. _`Programa Interlegis do Senado Federal`: http://www.interlegis.leg.br/
  27 +
  28 +* O Noosfero_ é uma plataforma para criação de redes sociais que conta com
  29 + diversas funcionalidades de gestão de conteúdo como blogs, galeria de
  30 + imagens e vídeos, entre outros. O Noosfero também é um software livre
  31 + criado no Brasil, iniciado em 2007 pela COLIVRE_ e que hoje conta com
  32 + uma comunidade de desenvolvimento que inclui o SERPRO, a Universidade de
  33 + Brasília e o Fórum Brasileiro de Economia Solidária.
  34 +
  35 +.. _Noosfero: http://www.noosfero.org/
  36 +.. _COLIVRE: http://www.colivre.coop.br/
  37 +
  38 +* O Gitlab_ é uma plataforma para desenvolvimento colaborativo. Projetos
  39 + no gitlab são mantidos em repositorios ``git``, com gestão de tarefas
  40 + (*issue tracker*), *merge requests*, gestão de marcos (*milestones*),
  41 + suporte a integração com plataformas de integração contínua e
  42 + notificações.
  43 +
  44 +.. _Gitlab: https://www.gitlab.com/
  45 +
  46 +* O `GNU Mailman`_ é uma gerenciador de listas de email tradicionalmente
  47 + usado por diversas organizações no Brasil e no mundo.
  48 +
  49 +.. _`GNU Mailman`: http://www.gnu.org/software/mailman/
  50 +
  51 +O restando deste manual descreve a arquitetura do SPB bem como os
  52 +procedimentos necessários para sua implantação, manutenção, backup e
  53 +restauração e gestão de firewall.
  54 +
  55 +
docs/local.mk 0 → 100644
@@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
  1 +# autogenerated DNS documentation
  2 +
  3 +SPB_ENV ?= local
  4 +
  5 +BUILT += dns.rst
  6 +dns.rst: ../test/dns_test.sh
  7 + (cd .. && sh test/dns_test.sh --doc) > $@
  8 +
  9 +BUILT += arquitetura.png
  10 +%.png: %.svg
  11 + inkscape --export-area-page --export-width=800 --export-width=600 --export-png=$@ $<
  12 +
  13 +BUILT += $(patsubst %.in, %, $(wildcard *.in))
  14 +%: %.in build.rb
  15 + ruby -p build.rb $< > $@ || ($(RM) $@; false)
  16 +
  17 +CLEAN_FILES += $(BUILT)
docs/manutencao.rst.in 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +Manutenção
  2 +==========
  3 +
  4 +Mantendo o sistema atualizado
  5 +-----------------------------
  6 +
  7 +*Esta seção é um trabalho em andamento.*
  8 +
  9 +Modificando configurações
  10 +-------------------------
  11 +
  12 +*Esta seção é um trabalho em andamento.*
docs/postfix-to-mailman-centos.py
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -../cookbooks/mailman/files/centos/postfix-to-mailman-centos.py  
2 \ No newline at end of file 0 \ No newline at end of file
tasks/doc.rake 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +desc 'Builds documentation (HTML)'
  2 +task :doc do
  3 + sh 'make -C docs/ html'
  4 +end
  5 +
  6 +desc 'Builds documentation (PDF)'
  7 +task :pdf do
  8 + sh 'make -C docs/ latexpdf'
  9 +end
  10 +
  11 +desc 'Opens PDF documentation'
  12 +task :viewpdf => :pdf do
  13 + sh 'xdg-open', 'docs/_build/latex/softwarepublico.pdf'
  14 +end
  15 +
  16 +desc 'Removes generated files'
  17 +task :clean do
  18 + sh 'make -C docs/ clean'
  19 +end
test/config_helper.sh 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +# exports all configuration variables into the environment with a config_
  2 +# prefix, e.g.
  3 +#
  4 +# external_hostname → $config_external_hostname
  5 +
  6 +eval $(sed -e '/^\S*:\s*\S\+/!d; s/^/config_/; s/:\s*/=/' ${ROOTDIR:-.}/config/${SPB_ENV:-local}/config.yaml)
test/dns_test.sh 0 → 100644
@@ -0,0 +1,114 @@ @@ -0,0 +1,114 @@
  1 +. $(dirname $0)/test_helper.sh
  2 +
  3 +if [ "$SPB_ENV" = local ]; then
  4 + echo "_No DNS for local environment_"
  5 + exit
  6 +fi
  7 +
  8 +
  9 +export LANG=C
  10 +
  11 +check_hostname() {
  12 + local host="$1"
  13 + local ip="$2"
  14 + local results="$(host -t A $host)"
  15 + local expected="$host has address $ip"
  16 + assertEquals "$host must resolve to $ip" "$results" "$expected"
  17 +}
  18 +
  19 +check_mx() {
  20 + local host="$1"
  21 + local mx="$2"
  22 + local results="$(host -t MX $host)"
  23 + local expected="$host mail is handled by 0 ${mx}."
  24 + assertEquals "$host MX must be $mx" "$results" "$expected"
  25 +}
  26 +
  27 +check_reverse_dns() {
  28 + local ip="$1"
  29 + local hostname="$2"
  30 + local results="$(host $ip)"
  31 + local expected=".*in-addr.arpa domain name pointer ${hostname}."
  32 + assertTrue "Reverse DNS of $ip must be $hostname (found: $results)" "expr match '$results' '$expected\$'"
  33 +}
  34 +
  35 +test_dns_web() {
  36 + check_hostname "$config_external_hostname" "$config_external_ip"
  37 +}
  38 +
  39 +test_mx() {
  40 + check_mx "$config_external_hostname" "${config_relay_hostname}"
  41 +}
  42 +
  43 +test_dns_lists() {
  44 + check_hostname "$config_lists_hostname" "$config_external_ip"
  45 +}
  46 +
  47 +test_mx_lists() {
  48 + check_mx "$config_lists_hostname" "$config_relay_hostname"
  49 +}
  50 +
  51 +test_dns_relay() {
  52 + check_hostname "$config_relay_hostname" "$config_relay_ip"
  53 +}
  54 +
  55 +test_reverse_dns_web() {
  56 + check_reverse_dns "$config_external_ip" "$config_external_hostname"
  57 +}
  58 +
  59 +test_reverse_dns_relay() {
  60 + check_reverse_dns "$config_relay_ip" "$config_relay_hostname"
  61 +}
  62 +
  63 +# TODO test_spf_external_relay
  64 +
  65 +if [ "$1" = '--doc' ]; then
  66 + check_hostname() {
  67 + echo ' * - A'
  68 + echo " - $1"
  69 + echo " - ${2}"
  70 + }
  71 + check_mx() {
  72 + echo ' * - MX'
  73 + echo " - $1"
  74 + echo " - ${2}."
  75 + }
  76 + check_reverse_dns() {
  77 + echo ' * - PTR'
  78 + echo " - $1"
  79 + echo " - ${2}."
  80 + }
  81 + header() {
  82 + echo '.. list-table::'
  83 + echo ' :header-rows: 1'
  84 + echo
  85 + echo ' * - Tipo'
  86 + echo ' - Entrada'
  87 + echo ' - Aponta para'
  88 + }
  89 + footer() {
  90 + echo
  91 + }
  92 + (
  93 + header 'DNS(A)'
  94 + test_dns_web
  95 + test_dns_lists
  96 + test_dns_relay
  97 + footer
  98 +
  99 + header 'MX'
  100 + test_mx
  101 + test_mx_lists
  102 + footer
  103 +
  104 + header 'DNS reverso'
  105 + test_reverse_dns_web
  106 + test_reverse_dns_relay
  107 + footer
  108 +
  109 + # FIXME test_spf_external_relay
  110 +
  111 + )
  112 +else
  113 + . shunit2
  114 +fi
test/test_helper.sh
@@ -19,4 +19,5 @@ load_shunit2() { @@ -19,4 +19,5 @@ load_shunit2() {
19 } 19 }
20 20
21 . $(dirname $0)/ip_helper.sh 21 . $(dirname $0)/ip_helper.sh
  22 +. $(dirname $0)/config_helper.sh
22 23