├── .gitignore
├── README.md
├── ansible.cfg
├── copyAlfrescoConfig.yml
├── copyAllAlfrescoConfig.yml
├── copySolrConfig.yml
├── copySolrCoreConfig.yml
├── files
├── alfresco-jmxrmi.access
└── web-scripts-config-custom.xml
├── group_vars
├── alfresco_dev
│ └── vars
├── alfresco_prod
│ └── vars
├── alfresco_test
│ └── vars
├── all
│ └── vars
├── solr_dev
│ └── vars
├── solr_prod
│ └── vars
└── solr_test
│ └── vars
├── installActivemq.yml
├── installAlfresco.yml
├── installSearch.yml
├── inventory
├── local
├── README.md
├── Vagrantfile
└── provisioning
│ ├── files
│ ├── limits.conf
│ ├── pg_hba.conf
│ └── sysctl.conf
│ ├── playbook.yml
│ └── tasks
│ ├── doInstallImageMagick.yml
│ ├── doInstallJava.yml
│ ├── doInstallLibreOffice.yml
│ └── doInstallPostgres.yml
├── removeSolrIndexMetadata.yml
├── tasks
├── doApplyAmps.yml
├── doCopyActivemqConfig.yml
├── doCopyAlfrescoConfig.yml
├── doCopyAmps.yml
├── doCopyGlobalProperties.yml
├── doCopyLDAPConfig.yml
├── doCopyLicense.yml
├── doCopyShareConfig.yml
├── doCopySolrConfig.yml
├── doCopySolrCoreConfig.yml
├── doCopyTomcatConfig.yml
├── doInstallAOS.yml
├── doInstallActivemq.yml
├── doInstallAlfresco.yml
├── doInstallPDFRenderer.yml
├── doInstallSearch.yml
├── doInstallTomcat.yml
└── doSetupDirectories.yml
└── templates
├── activemq-env.j2
├── alfresco-global.properties.j2
├── alfresco-jmxrmi.password.j2
├── catalina.sh.j2
├── ctl.sh.j2
├── custom-slingshot-application-context.xml.j2
├── server.xml.j2
├── setenv.sh.j2
├── share-config-custom.xml.j2
├── shared.properties.j2
├── solr.in.sh.j2
├── solrconfig.xml.alfresco.j2
├── solrconfig.xml.archive.j2
├── solrcore.properties.alfresco.j2
├── solrcore.properties.archive.j2
└── web.xml.j2
/.gitignore:
--------------------------------------------------------------------------------
1 | files/third-party
2 | local/provisioning/files/third-party
3 | local/.vagrant
4 | .vault-passwd
5 | files/certs
6 | group_vars/all/vault
7 | group_vars/alfresco_dev/vault
8 | group_vars/alfresco_test/vault
9 | group_vars/alfresco_prod/vault
10 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Example Ansible Alfresco Setup
2 |
3 | This project is an example of one way to automate Alfresco installation and
4 | configuration management.
5 |
6 | ## Setup
7 |
8 | Here are the high-level steps you'll need to perform before running any of the
9 | playbooks with Ansible:
10 |
11 | 1. Setup SSH Keys
12 | 2. Clone this project to your local machine.
13 | 3. Edit the inventory file. Add your Alfresco and SOLR hosts to the appropriate
14 | groups. It is okay if the Alfresco and SOLR machine are the same.
15 | 4. Edit the group_vars for the groups you just populated in the inventory file
16 | to override the variables declared in group_var/all with values specific to the
17 | group.
18 | 5. Setup Ansible Vault to encrypt passwords
19 | 6. Collect dependencies such as the ACS distribution zip, ASS distribution zip,
20 | Tomcat, ActiveMQ, and database driver.
21 |
22 | Let's look at some of these setup steps in further detail.
23 |
24 | ### Setup SSH keys
25 |
26 | The easiest way to authenticate with each of the machines in your inventory is
27 | to use SSH keys. For example, if the user you will run Alfresco and SOLR with
28 | is "alfresco" make sure you can ssh to each box in your inventory as the
29 | alfresco user without providing a password.
30 |
31 | The steps to set this up are well-documented online, but it typically involves:
32 |
33 | ssh-keygen -t rsa
34 | ssh-copy-id alfresco@198.51.100.0
35 |
36 | And you may want to edit ~/.ssh/config on your local machine so that you don't
37 | have to specify the SSH key when using ssh or scp:
38 |
39 | Host alfresco.someco.com
40 | IdentityFile ~/.ssh/someco_id_rsa
41 |
42 | ### Edit the inventory file
43 |
44 | The inventory file tells Ansible about your environments, including each host
45 | name and the role it plays in your stack.
46 |
47 | In this project, the ansible.cfg file specifies that our default inventory file
48 | is named "inventory" and lives in the root of the project.
49 |
50 | The inventory file is pre-populated with sample groups that assume you have
51 | three environments, dev, test, and prod. There is one group each for Alfresco
52 | and SOLR per environment for a total of six groups.
53 |
54 | The "local" group is used for testing the playbook using local virtual machines
55 | managed by Vagrant and can be ignored. If you want to learn more about how that
56 | works, see the README.md file in the local directory.
57 |
58 | ### Edit group variables
59 |
60 | Ansible Templates have variables and the value of those variables can differ by
61 | group. The group_vars directory has one folder per group. Within that there is
62 | a vars file and a vault file (see next section on Vault).
63 |
64 | There is a special group named "all". The vars file in the group_vars/all
65 | directory defines default values for all variables. If you introduce new
66 | variables, make sure you add them to group\_vars/all/vars.
67 |
68 | Each group can optionally override the value declared in all by specifying a
69 | new value for that variable in its own group\_vars vars file.
70 |
71 | For example, the default database name is declared as "alfresco" in all:
72 |
73 | alf_db_name: alfresco
74 |
75 | Suppose that in the dev environment we want to name the database something else.
76 | To do that, we'd edit group\_vars/alfresco\_dev/vars with:
77 |
78 | alf_db_name: alfrescodev
79 |
80 | In this example, all templates rendered for all servers in the alfresco_dev
81 | group will have "alfrescodev" set as the value for alf\_db\_name.
82 |
83 | Here are some key variables you should review before running:
84 |
85 | * alf_home: The Alfresco home directory. Typically should be a soft link to a
86 | version specific directory.
87 | * alf_install_dir: A version specific directory where Alfresco is installed.
88 | * alf_archive: The file name of the ACS distribution zip.
89 | * tomcat_archive: The file name of the Apache Tomcat tar file.
90 | * search_archive: The file name of the Alfresco Search Services distribution zip.
91 | * alf_db_driver: The hibernate dialect.
92 | * alf_db_driver_file: The file name of the database driver.
93 | * activemq_archive: The file name of the Apache ActiveMQ tar file.
94 | * alf_java_home: The path to the Java home directory.
95 |
96 | It's best to rely on group_vars as much as possible, but if you need to you can
97 | also have host-specific variables by creating a directory called "host_vars"
98 | and creating directories named for specific hosts below that.
99 |
100 | ### Managing secrets using Ansible Vault
101 |
102 | The [Ansible Vault docs](https://docs.ansible.com/ansible/latest/user_guide/vault.html)
103 | are worth reading, but here's how it works at a high-level:
104 |
105 | * Each group folder has a file called vars for that group's plain-text
106 | variables, and, optionally, a file called vault for that group's encrypted
107 | variables.
108 | * The ansible.cfg file points to the Ansible Vault password file location which
109 | is .vault-passwd. This password should be shared with your team, but don't
110 | check it in to source code control. NOTE: This file is not distributed as part
111 | of this project. You'll need to create your own. To do that, just create a file
112 | named ".vault-passwd" and put it in the root of your project (adjacent to this
113 | README.md file). The file should contain one line with the value of your vault
114 | password.
115 | * Variables that need to be encrypted will have a plain variable name and a
116 | vault variable name. For example, in group_vars/all/vars the following will use
117 | the value from the vault for the Alfresco DB password:
118 |
119 | alf_db_password: "{{ vault_alf_db_password }}"
120 |
121 | * From the root of the project, use `ansible-vault edit group_vars/all/vault`
122 | to edit a vault file (in this example, it is the all group, but each group can
123 | have its own vault file).
124 | * Ansible Vault will launch a configurable editor. On save, the value will be
125 | encrypted using the Ansible Vault password.
126 | * To set values for the vault variables that are used in this project, copy and
127 | paste the following into your vault file (use whatever values you want, these
128 | mimic what used to be set by the installer):
129 |
130 | vault_alf_db_password: admin
131 | vault_alf_initial_admin_password: "209c6174da490caeb422f3fa5a7ae634"
132 | vault_alf_jmx_monitor_password: monitor_password
133 | vault_alf_jmx_control_password: control_password
134 | vault_alf_keystore_password: kT9X6oe68t
135 | vault_alf_truststore_password: kT9X6oe68t
136 |
137 | * When setting up a new vault for the first time use `ansible-vault encrypt group_vars/all/vault` to encrypt the file. After that, just use `ansible-vault edit group_vars/all/vault`.
138 | * You should now have an encrypted vault file that uses your own vault password
139 | that is stored in .vault-passwd. When you do `ansible-vault edit` you should
140 | see the values for the database password, JMX passwords, and key/truststore
141 | passwords.
142 |
143 | Remember that secrets are only encrypted on your local machine. Ansible
144 | decrypts the value in memory when the playbook runs, and then delivers the
145 | value to the target in plain text.
146 |
147 | ### Gathering Dependencies
148 |
149 | If you are using the playbook to install Alfresco Content Services and/or
150 | Alfresco Search Services you will need to gather a few dependencies. Here is
151 | a list of what you need and where they go:
152 |
153 | |File Description|Example|Source|Put It Here|
154 | |----------------|-------|------|-----------|
155 | |ACS Distribution|alfresco-content-services-community-distribution-6.2.0-ga.zip|alfresco.com (or support for Enterprise)|files/third-party|
156 | |Apache Tomcat|apache-tomcat-8.5.34.tar.gz|tomcat.apache.com|files/third-party|
157 | |ASS Distribution|alfresco-search-services-1.4.0.zip|alfresco.com|files/third-party|
158 | |Database driver|postgresql-42.2.1.jar|Database vendor|files/third-party|
159 | |Apache ActiveMQ|apache-activemq-5.15.6-bin.tar.gz|activemq.apache.com|files/third-party|
160 |
161 | You can optionally deploy AMPs as part of installation or as a separate
162 | playbook. Put AMPs in files/third-party/amps or files/third-party/amps_share
163 | depending on what type of AMP it is.
164 |
165 | Note that AOS and Share Services AMPs are shipped with the distribution ZIP so
166 | there is no need to put those in the amps/amps_share directory with custom or
167 | third-party AMPs.
168 |
169 | ## Installing Alfresco and Search
170 |
171 | ### Prepare the target machines
172 |
173 | The installation playbook assumes you do not have root access to the target
174 | machines. It assumes certain tasks have already been performed. You'll need to
175 | perform these tasks before running the install playbook:
176 |
177 | * Create an alfresco user and group
178 | * Create an install directory owned by the alfresco user and group
179 | * Increase file handles
180 | * Install Java
181 | * Install a database (if it is going to be local)
182 | * Install LibreOffice
183 | * Install ImageMagick
184 | * Open appropriate ports in the firewall
185 | * Create init.d/systemctl scripts for Alfresco and ActiveMQ
186 | * Attach and mount any needed NFS mounts or other storage volumes
187 |
188 | If you have root access to the server (either directly or via sudo), you can
189 | modify the playbook to perform all of these tasks for you.
190 |
191 | ### Run the playbook to install Alfresco Content Services
192 |
193 | Once all pre-requisites are in place, install Alfresco by running:
194 |
195 | ansible-playbook installAlfresco.yml --extra-vars="hosts=alfresco_dev"
196 |
197 | Where "alfresco_dev" is the desired group.
198 |
199 | SSH to each Alfresco server and start up ActiveMQ and ACS:
200 |
201 | cd /opt/alfresco
202 | ./activemq/bin/activemq start
203 | ./tomcat/bin/startup.sh
204 |
205 | The startup commands might look a little different if you have init.d/systemctl
206 | scripts in place.
207 |
208 | ### Run the playbook to install Alfresco Search Services
209 |
210 | Now install Alfresco Search Services by running:
211 |
212 | ansible-playbook installSearch.yml --extra-vars="hosts=solr_dev"
213 |
214 | Next, SSH to each SOLR server and start it up so it can init the cores:
215 |
216 | cd /opt/alfresco/alfresco-search-services
217 | ./solr/bin/solr start -a "-Dcreate.alfresco.defaults=alfresco,archive"
218 |
219 | Let it populate the core configurations, then:
220 |
221 | ./solr/bin/solr stop
222 |
223 | Back on your local machine, run a playbook to remove any indices that were
224 | created:
225 |
226 | ansible-playbook removeSolrIndexMetadata.yml --extra-vars="hosts=solr_dev"
227 |
228 | Then, run a playbook to copy the SOLR core config into place:
229 |
230 | ansible-playbook copySolrCoreConfig.yml --extra-vars="hosts=solr_dev"
231 |
232 | Finally, SSH to each SOLR server and start it up:
233 |
234 | cd /opt/alfresco/alfresco-search-services
235 | ./solr/bin/solr start
236 |
237 | ## Copying Configuration Files
238 |
239 | The installation playbooks copy Alfresco and SOLR configuration files to the
240 | servers in the target group for you. Outside of an installation or upgrade you
241 | may need to deploy configuration updates. To do that, run one of the "copy"
242 | playbooks:
243 |
244 | ansible-playbook copyAllAlfrescoConfig.yml --extra-vars="hosts=alfresco_dev"
245 | ansible-playbook copySolrCoreConfig.yml --extra-vars="solr_dev"
246 |
247 | You might consider creating additional playbooks for doing other types of
248 | maintenance such as deploying AMPs.
249 |
250 | ### Dry-run
251 |
252 | Use the `--check` flag to tell Ansible to do a dry-run, like this:
253 |
254 | ansible-playbook copyAllAlfrescoConfig.yml --check --extra-vars="hosts=alfresco_dev"
255 |
256 | The output will show you what *would have* been changed had you not used the
257 | flag.
258 |
259 | Use the `--diff` flag along with `--check` to see the difference between the
260 | configuration in your current project and what is currently on the server,
261 | like this:
262 |
263 | ansible-playbook copyAllAlfrescoConfig.yml --diff --check --extra-vars="hosts=alfresco_dev"
264 |
265 | The output will show you a difference between what is currently on the target
266 | and what would have been deployed without the flags.
267 |
268 | ## Security
269 |
270 | Running the installation playbook as provided in this example setup will result
271 | in an Alfresco server with no SSL certificates configured, either for ACS or
272 | for SOLR. It also uses a "admin" as the admin user password. You will need to
273 | make changes appropriate for your environment to properly secure your install.
274 |
--------------------------------------------------------------------------------
/ansible.cfg:
--------------------------------------------------------------------------------
1 | [defaults]
2 | inventory = inventory
3 | vault_password_file = .vault-passwd
4 | remote_tmp = /tmp/.ansible-${USER}/tmp
5 |
--------------------------------------------------------------------------------
/copyAlfrescoConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - hosts: '{{ hosts }}'
3 | remote_user: alfresco
4 | tasks:
5 | - include_tasks: tasks/doCopyAlfrescoConfig.yml
6 |
--------------------------------------------------------------------------------
/copyAllAlfrescoConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - hosts: '{{ hosts }}'
3 | remote_user: alfresco
4 | tasks:
5 | - include_tasks: tasks/doCopyGlobalProperties.yml
6 | - include_tasks: tasks/doCopyTomcatConfig.yml
7 | - include_tasks: tasks/doCopyShareConfig.yml
8 | - include_tasks: tasks/doCopyAlfrescoConfig.yml
9 |
--------------------------------------------------------------------------------
/copySolrConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - hosts: '{{ hosts }}'
3 | remote_user: alfresco
4 | tasks:
5 | - include_tasks: tasks/doCopySolrConfig.yml
6 |
--------------------------------------------------------------------------------
/copySolrCoreConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - hosts: '{{ hosts }}'
3 | remote_user: alfresco
4 | tasks:
5 | - include_tasks: tasks/doCopySolrCoreConfig.yml
6 |
--------------------------------------------------------------------------------
/files/alfresco-jmxrmi.access:
--------------------------------------------------------------------------------
1 | monitorRole readonly
2 | controlRole readwrite
3 |
--------------------------------------------------------------------------------
/files/web-scripts-config-custom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | GET
7 | /service/enterprise/admin/.*
8 |
9 |
10 | {token}
11 | {token}
12 |
13 |
14 |
15 |
16 | GET
17 | /s/enterprise/admin/.*
18 |
19 |
20 | {token}
21 | {token}
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/group_vars/alfresco_dev/vars:
--------------------------------------------------------------------------------
1 | alf_host: alfdev1.metaversant.com
2 |
3 | share_host: alfdev1.metaversant.com
4 |
5 | alf_solr_host: solrdev1.metaversant.com
6 |
7 | alf_db_url: "jdbc:postgresql://alfresco-dev.c8uozf6iuroi.us-east-1.rds.amazonaws.com:5432/${db.name}"
8 |
9 | jodconverter_office_home: /usr/bin
10 |
11 | imagemagick_bin: /usr/bin/convert
12 |
--------------------------------------------------------------------------------
/group_vars/alfresco_prod/vars:
--------------------------------------------------------------------------------
1 | alf_host: alfprod1.metaversant.com
2 |
3 | share_host: alfprod1.metaversant.com
4 |
5 | alf_solr_host: solrprod1.metaversant.com
6 |
7 | alf_db_url: "jdbc:postgresql://alfresco-prod.c8uozf6iuroi.us-east-1.rds.amazonaws.com:5432/${db.name}"
8 |
9 | jodconverter_office_home: /usr/bin
10 |
11 | imagemagick_bin: /usr/bin/convert
12 |
--------------------------------------------------------------------------------
/group_vars/alfresco_test/vars:
--------------------------------------------------------------------------------
1 | alf_host: alftest1.metaversant.com
2 |
3 | share_host: alftest1.metaversant.com
4 |
5 | alf_solr_host: solrtest1.metaversant.com
6 |
7 | alf_db_url: "jdbc:postgresql://alfresco-test.c8uozf6iuroi.us-east-1.rds.amazonaws.com:5432/${db.name}"
8 |
9 | jodconverter_office_home: /usr/bin
10 |
11 | imagemagick_bin: /usr/bin/convert
12 |
--------------------------------------------------------------------------------
/group_vars/all/vars:
--------------------------------------------------------------------------------
1 | alf_home: "/opt/alfresco"
2 | alf_data: "{{ alf_home }}/alf_data"
3 | alf_dir_contentstore: contentstore
4 | alf_dir_contentstore_deleted: contentstore.deleted
5 |
6 | alf_initial_admin_password: "{{ vault_alf_initial_admin_password }}"
7 | alf_context: alfresco
8 | alf_host: 127.0.0.1
9 | alf_port: 8080
10 | alf_protocol: http
11 |
12 | share_context: share
13 | share_host: 127.0.0.1
14 | share_port: 8080
15 | share_protocol: http
16 |
17 | alf_index_subsystem: solr6
18 | alf_solr_host: localhost
19 | alf_solr_port: 8983
20 |
21 | alf_tomcat_protocol: http
22 | alf_tomcat_web_port: 8080
23 | alf_tomcat_ajp_port: 8009
24 | alf_tomcat_access_logs_dir: logs
25 | alf_tomcat_catalina_logs_dir: "{{ alf_home }}/tomcat/logs"
26 |
27 | proxy_enabled: false
28 | proxy_host: localhost
29 | proxy_port: 80
30 | proxy_secure: "false"
31 | proxy_scheme: http
32 |
33 | alf_user: "alfresco"
34 | alf_group: "alfresco"
35 | java_opts_xmx: 15250M
36 |
37 | alf_install_dir: /opt/alfresco-6.2.0-ga
38 | alf_archive: "alfresco-content-services-community-distribution-6.2.0-ga.zip"
39 | alf_archive_root_dir: "alfresco-content-services-community-distribution-6.2.0-ga"
40 | tomcat_archive: "apache-tomcat-8.5.34.tar.gz"
41 | tomcat_dir: "apache-tomcat-8.5.34"
42 | search_archive: "alfresco-search-services-1.4.0.zip"
43 | search_install_dir: '{{ alf_install_dir }}/alfresco-search-services'
44 |
45 | alf_db_driver: org.postgresql.Driver
46 | alf_db_driver_file: postgresql-42.2.5.jar
47 | alf_db_username: alfresco
48 | alf_db_password: "{{ vault_alf_db_password }}"
49 | alf_db_name: alfresco
50 | alf_db_url: "jdbc:postgresql://localhost:5432/${db.name}"
51 |
52 | alf_java_home: "/usr/java/jdk-11.0.1"
53 |
54 | activemq_archive: "apache-activemq-5.15.6-bin.tar.gz"
55 | activemq_dir: "apache-activemq-5.15.6"
56 | activemq_opts_memory: "-Xms64M -Xmx1G"
57 | activemq_user: "{{ alf_user }}"
58 |
59 | alf_clustering_enabled: false
60 |
61 | alf_notification_email: "false"
62 |
63 | alf_smart_folders_enabled: "false"
64 |
65 | alf_aos_base_url: http://localhost/alfresco/aos
66 |
67 | alf_ftp_port: 2121
68 |
69 | alf_jmx_monitor_password: "{{ vault_alf_jmx_monitor_password }}"
70 | alf_jmx_control_password: "{{ vault_alf_jmx_control_password }}"
71 |
72 | imagemagick_root: /
73 | imagemagick_dynlib: /lib
74 | imagemagick_bin: /bin/convert
75 |
76 | jodconverter_enabled: true
77 | jodconverter_office_home: "{{ alf_home }}/libreoffice"
78 | jodconverter_port: 8100
79 |
80 | solr_java_mem: -Xms512m -Xmx512m
81 | solr_port: 8983
82 | solr_content_dir: "{{ alf_home }}/alfresco-search-services"
83 | solr_home: "{{ alf_home }}/alfresco-search-services/solrhome"
84 | solr_java_home: "/usr/java/jdk-11.0.1"
85 | solr_is_primary: true
86 | solr_is_replica: false
87 | solr_primary_host: localhost
88 | solr_primary_port: 8080
89 | solr_alfresco_host: localhost
90 | solr_alfresco_ssl_port: 8443
91 | solr_alfresco_port: 8080
92 | solr_alfresco_secure_comms: none
93 |
94 | audit_enabled: false
95 | trashcan_cleaner_enabled: false
96 |
97 | mail_host: localhost
98 | mail_from: alfresco.donotreply@alfresco.com
99 |
100 | thumbnails_enabled: true
101 |
102 | transformations_enabled: true
103 |
104 | ssl_enabled: false
105 | alf_keystore_key_alias: server
106 | alf_keystore_password: "{{ vault_alf_keystore_password }}"
107 | alf_truststore_password: "{{ vault_alf_truststore_password }}"
108 |
--------------------------------------------------------------------------------
/group_vars/solr_dev/vars:
--------------------------------------------------------------------------------
1 | solr_alfresco_host: alfdev1.metaversant.com
2 |
--------------------------------------------------------------------------------
/group_vars/solr_prod/vars:
--------------------------------------------------------------------------------
1 | solr_alfresco_host: alfprod1.metaversant.com
2 |
--------------------------------------------------------------------------------
/group_vars/solr_test/vars:
--------------------------------------------------------------------------------
1 | solr_alfresco_host: alftest1.metaversant.com
2 |
--------------------------------------------------------------------------------
/installActivemq.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - hosts: '{{ hosts }}'
3 | remote_user: alfresco
4 | tasks:
5 | - include_tasks: tasks/doInstallActivemq.yml
6 | - include_tasks: tasks/doCopyActivemqConfig.yml
7 |
--------------------------------------------------------------------------------
/installAlfresco.yml:
--------------------------------------------------------------------------------
1 | #
2 | # Installs Alfresco to the specified hosts.
3 | #
4 | # Requires Alfresco distribution archive, Tomcat archive, and AOS archive to
5 | # reside in files/third-party.
6 | #
7 | # Custom AMPs should be placed in files/third-party/amps and files/third-party/amps_share.
8 | #
9 | # Install location depends on alf_home, alf_install_dir, and tomcat_dir.
10 | #
11 | ---
12 | - hosts: '{{ hosts }}'
13 | remote_user: alfresco
14 | tasks:
15 | - include_tasks: tasks/doInstallTomcat.yml
16 | - include_tasks: tasks/doInstallActivemq.yml
17 | - include_tasks: tasks/doInstallAlfresco.yml
18 | - include_tasks: tasks/doInstallPDFRenderer.yml
19 | - include_tasks: tasks/doCopyAmps.yml
20 | - include_tasks: tasks/doApplyAmps.yml
21 | - include_tasks: tasks/doCopyGlobalProperties.yml
22 | - include_tasks: tasks/doCopyTomcatConfig.yml
23 | - include_tasks: tasks/doCopyShareConfig.yml
24 | - include_tasks: tasks/doCopyAlfrescoConfig.yml
--------------------------------------------------------------------------------
/installSearch.yml:
--------------------------------------------------------------------------------
1 | #
2 | # Installs Alfresco Search services to the specified hosts.
3 | #
4 | # Requires alfresco-search-services*.zip to be placed in files/third-party. the
5 | # exact file name is specified in search_archive.
6 | #
7 | # Install location depends on alf_home, alf_install_dir, and search_install_dir.
8 | #
9 | ---
10 | - hosts: '{{ hosts }}'
11 | remote_user: alfresco
12 | tasks:
13 | - include_tasks: tasks/doInstallSearch.yml
14 | - include_tasks: tasks/doCopySolrConfig.yml
15 |
--------------------------------------------------------------------------------
/inventory:
--------------------------------------------------------------------------------
1 | [alfresco_local]
2 | 192.168.33.10
3 |
4 | [solr_local]
5 | 192.168.33.10
6 |
7 | [alfresco_dev]
8 | alfdev1.metaversant.com
9 | #alfdev2.metaversant.com
10 | #alfdev3.metaversant.com
11 |
12 | [solr_dev]
13 | solrdev1.metaversant.com
14 | #solrdev2.metaversant.com
15 |
16 | [alfresco_test]
17 | alftest1.metaversant.com
18 | #alftest2.metaversant.com
19 | #alftest3.metaversant.com
20 |
21 | [solr_test]
22 | solrtest1.metaversant.com
23 | #solrtest2.metaversant.com
24 |
25 | [alfresco_prod]
26 | alfprod1.metaversant.com
27 | #alfprod2.metaversant.com
28 | #alfprod3.metaversant.com
29 |
30 | [solr_prod]
31 | solrprod1.metaversant.com
32 | #solrprod2.metaversant.com
33 |
--------------------------------------------------------------------------------
/local/README.md:
--------------------------------------------------------------------------------
1 | # Local virtual machine test server setup
2 |
3 | This directory is used to configure and run a local virtual machine as a test
4 | server. This is handy for testing out various Ansible playbooks. The goal is for
5 | the virtual machine to be set up similar to how a barebones server is set up
6 | by the infrastructure team.
7 |
8 | ## Pre-requisites
9 |
10 | In addition to Ansible, this setup expects you to have [Vagrant](https://www.vagrantup.com/)
11 | and [VirtualBox](https://www.virtualbox.org/) installed.
12 |
13 | The first time you create the virtual machine, Vagrant will use Ansible to do
14 | some additional configuration. The playbook that does this resides in the
15 | provisioning directory.
16 |
17 | The provisioning playbook will also set up an SSH key for the alfresco user so
18 | that you can ssh without providing a password. The path to the SSH key is
19 | specified as a var in the playbook.
20 |
21 | ## Running
22 |
23 | Before running vagrant, if you are using a Python virtual environment for
24 | Ansible, activate the environment. Vagrant will use Ansible to set up the box.
25 |
26 | To start up the virtual machine, run `vagrant up`.
27 |
28 | If you need to connect you can either use `vagrant ssh` or you can SSH as you
29 | normally would using the virtual machine's IP address (see the Vagrantfile).
30 |
31 | To check on the status of the machine, run `vagrant status`.
32 |
33 | To stop the virtual machine, run `vagrant halt`.
34 |
35 | To completely remove the virtual machine, run `vagrant destroy`.
36 |
--------------------------------------------------------------------------------
/local/Vagrantfile:
--------------------------------------------------------------------------------
1 | # -*- mode: ruby -*-
2 | # vi: set ft=ruby :
3 |
4 | # All Vagrant configuration is done below. The "2" in Vagrant.configure
5 | # configures the configuration version (we support older styles for
6 | # backwards compatibility). Please don't change it unless you know what
7 | # you're doing.
8 | Vagrant.configure(2) do |config|
9 | # The most common configuration options are documented and commented below.
10 | # For a complete reference, please see the online documentation at
11 | # https://docs.vagrantup.com.
12 |
13 | # Every Vagrant development environment requires a box. You can search for
14 | # boxes at https://vagrantcloud.com/search.
15 | config.vm.box = "centos/7"
16 |
17 | # Disable automatic box update checking. If you disable this, then
18 | # boxes will only be checked for updates when the user runs
19 | # `vagrant box outdated`. This is not recommended.
20 | # config.vm.box_check_update = false
21 |
22 | # Create a forwarded port mapping which allows access to a specific port
23 | # within the machine from a port on the host machine. In the example below,
24 | # accessing "localhost:8080" will access port 80 on the guest machine.
25 | config.vm.network "forwarded_port", guest: 8080, host: 8080
26 | config.vm.network "forwarded_port", guest: 8443, host: 8443
27 | config.vm.network "forwarded_port", guest: 8983, host: 8983
28 |
29 | # Create a private network, which allows host-only access to the machine
30 | # using a specific IP.
31 | config.vm.network "private_network", ip: "192.168.33.10"
32 |
33 | # Create a public network, which generally matched to bridged network.
34 | # Bridged networks make the machine appear as another physical device on
35 | # your network.
36 | # config.vm.network "public_network"
37 |
38 | # Share an additional folder to the guest VM. The first argument is
39 | # the path on the host to the actual folder. The second argument is
40 | # the path on the guest to mount the folder. And the optional third
41 | # argument is a set of non-required options.
42 | # config.vm.synced_folder "../data", "/vagrant_data"
43 |
44 | # Provider-specific configuration so you can fine-tune various
45 | # backing providers for Vagrant. These expose provider-specific options.
46 | # Example for VirtualBox:
47 | #
48 | config.vm.provider "virtualbox" do |vb|
49 | # Display the VirtualBox GUI when booting the machine
50 | #vb.gui = true
51 |
52 | # Customize the amount of memory on the VM:
53 | vb.memory = "4096"
54 | end
55 | #
56 | # View the documentation for the provider you are using for more
57 | # information on available options.
58 |
59 | # Enable provisioning with a shell script. Additional provisioners such as
60 | # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
61 | # documentation for more information about their specific syntax and use.
62 | #config.vm.provision "shell", inline: <<-SHELL
63 | # sudo apt-get update
64 | # sudo apt-get install -y apache2
65 | # SHELL
66 | config.vm.provision "ansible" do |ansible|
67 | ansible.playbook = "provisioning/playbook.yml"
68 | ansible.extra_vars = { ansible_ssh_user: 'vagrant' }
69 | ansible.sudo = true
70 | end
71 |
72 | end
73 |
--------------------------------------------------------------------------------
/local/provisioning/files/limits.conf:
--------------------------------------------------------------------------------
1 | # /etc/security/limits.conf
2 | #
3 | #Each line describes a limit for a user in the form:
4 | #
5 | # -
6 | #
7 | #Where:
8 | # can be:
9 | # - a user name
10 | # - a group name, with @group syntax
11 | # - the wildcard *, for default entry
12 | # - the wildcard %, can be also used with %group syntax,
13 | # for maxlogin limit
14 | #
15 | # can have the two values:
16 | # - "soft" for enforcing the soft limits
17 | # - "hard" for enforcing hard limits
18 | #
19 | #
- can be one of the following:
20 | # - core - limits the core file size (KB)
21 | # - data - max data size (KB)
22 | # - fsize - maximum filesize (KB)
23 | # - memlock - max locked-in-memory address space (KB)
24 | # - nofile - max number of open file descriptors
25 | # - rss - max resident set size (KB)
26 | # - stack - max stack size (KB)
27 | # - cpu - max CPU time (MIN)
28 | # - nproc - max number of processes
29 | # - as - address space limit (KB)
30 | # - maxlogins - max number of logins for this user
31 | # - maxsyslogins - max number of logins on the system
32 | # - priority - the priority to run user process with
33 | # - locks - max number of file locks the user can hold
34 | # - sigpending - max number of pending signals
35 | # - msgqueue - max memory used by POSIX message queues (bytes)
36 | # - nice - max nice priority allowed to raise to values: [-20, 19]
37 | # - rtprio - max realtime priority
38 | #
39 | #
-
40 | #
41 |
42 | #* soft core 0
43 | #* hard rss 10000
44 | #@student hard nproc 20
45 | #@faculty soft nproc 20
46 | #@faculty hard nproc 50
47 | #ftp hard nproc 0
48 | #@student - maxlogins 4
49 | alfresco soft nofile 6000
50 | alfresco hard nofile 65536
51 | alfresco soft nproc 4096
52 | alfresco hard nproc 4096
53 | # End of file
54 |
--------------------------------------------------------------------------------
/local/provisioning/files/pg_hba.conf:
--------------------------------------------------------------------------------
1 | # PostgreSQL Client Authentication Configuration File
2 | # ===================================================
3 | #
4 | # Refer to the "Client Authentication" section in the PostgreSQL
5 | # documentation for a complete description of this file. A short
6 | # synopsis follows.
7 | #
8 | # This file controls: which hosts are allowed to connect, how clients
9 | # are authenticated, which PostgreSQL user names they can use, which
10 | # databases they can access. Records take one of these forms:
11 | #
12 | # local DATABASE USER METHOD [OPTIONS]
13 | # host DATABASE USER ADDRESS METHOD [OPTIONS]
14 | # hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
15 | # hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
16 | #
17 | # (The uppercase items must be replaced by actual values.)
18 | #
19 | # The first field is the connection type: "local" is a Unix-domain
20 | # socket, "host" is either a plain or SSL-encrypted TCP/IP socket,
21 | # "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a
22 | # plain TCP/IP socket.
23 | #
24 | # DATABASE can be "all", "sameuser", "samerole", "replication", a
25 | # database name, or a comma-separated list thereof. The "all"
26 | # keyword does not match "replication". Access to replication
27 | # must be enabled in a separate record (see example below).
28 | #
29 | # USER can be "all", a user name, a group name prefixed with "+", or a
30 | # comma-separated list thereof. In both the DATABASE and USER fields
31 | # you can also write a file name prefixed with "@" to include names
32 | # from a separate file.
33 | #
34 | # ADDRESS specifies the set of hosts the record matches. It can be a
35 | # host name, or it is made up of an IP address and a CIDR mask that is
36 | # an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that
37 | # specifies the number of significant bits in the mask. A host name
38 | # that starts with a dot (.) matches a suffix of the actual host name.
39 | # Alternatively, you can write an IP address and netmask in separate
40 | # columns to specify the set of hosts. Instead of a CIDR-address, you
41 | # can write "samehost" to match any of the server's own IP addresses,
42 | # or "samenet" to match any address in any subnet that the server is
43 | # directly connected to.
44 | #
45 | # METHOD can be "trust", "reject", "md5", "password", "scram-sha-256",
46 | # "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert".
47 | # Note that "password" sends passwords in clear text; "md5" or
48 | # "scram-sha-256" are preferred since they send encrypted passwords.
49 | #
50 | # OPTIONS are a set of options for the authentication in the format
51 | # NAME=VALUE. The available options depend on the different
52 | # authentication methods -- refer to the "Client Authentication"
53 | # section in the documentation for a list of which options are
54 | # available for which authentication methods.
55 | #
56 | # Database and user names containing spaces, commas, quotes and other
57 | # special characters must be quoted. Quoting one of the keywords
58 | # "all", "sameuser", "samerole" or "replication" makes the name lose
59 | # its special character, and just match a database or username with
60 | # that name.
61 | #
62 | # This file is read on server startup and when the server receives a
63 | # SIGHUP signal. If you edit the file on a running system, you have to
64 | # SIGHUP the server for the changes to take effect, run "pg_ctl reload",
65 | # or execute "SELECT pg_reload_conf()".
66 | #
67 | # Put your actual configuration here
68 | # ----------------------------------
69 | #
70 | # If you want to allow non-local connections, you need to add more
71 | # "host" records. In that case you will also need to make PostgreSQL
72 | # listen on a non-local interface via the listen_addresses
73 | # configuration parameter, or via the -i or -h command line switches.
74 |
75 |
76 |
77 | # TYPE DATABASE USER ADDRESS METHOD
78 |
79 | # "local" is for Unix domain socket connections only
80 | local all all peer
81 | local all all ident
82 | # IPv4 local connections:
83 | host all all 127.0.0.1/32 trust
84 | # IPv6 local connections:
85 | host all all ::1/128 ident
86 | # Allow replication connections from localhost, by a user with the
87 | # replication privilege.
88 | local replication all peer
89 | host replication all 127.0.0.1/32 ident
90 | host replication all ::1/128 ident
91 |
--------------------------------------------------------------------------------
/local/provisioning/files/sysctl.conf:
--------------------------------------------------------------------------------
1 | # Kernel sysctl configuration file for Red Hat Linux
2 | #
3 | # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
4 | # sysctl.conf(5) for more details.
5 |
6 | # Controls IP packet forwarding
7 | net.ipv4.ip_forward = 0
8 |
9 | # Controls source route verification
10 | net.ipv4.conf.default.rp_filter = 1
11 |
12 | # Do not accept source routing
13 | net.ipv4.conf.default.accept_source_route = 0
14 |
15 | # Controls the System Request debugging functionality of the kernel
16 | kernel.sysrq = 0
17 |
18 | # Controls whether core dumps will append the PID to the core filename.
19 | # Useful for debugging multi-threaded applications.
20 | kernel.core_uses_pid = 1
21 |
22 | # Controls the use of TCP syncookies
23 | net.ipv4.tcp_syncookies = 1
24 |
25 | # Disable netfilter on bridges.
26 | net.bridge.bridge-nf-call-ip6tables = 0
27 | net.bridge.bridge-nf-call-iptables = 0
28 | net.bridge.bridge-nf-call-arptables = 0
29 |
30 | # Controls the default maxmimum size of a mesage queue
31 | kernel.msgmnb = 65536
32 |
33 | # Controls the maximum size of a message, in bytes
34 | kernel.msgmax = 65536
35 |
36 | # Controls the maximum shared segment size, in bytes
37 | kernel.shmmax = 68719476736
38 |
39 | # Controls the maximum number of shared memory segments, in pages
40 | kernel.shmall = 4294967296
41 |
42 | fs.file-max=10000
43 | vm.max_map_count=262144
44 |
--------------------------------------------------------------------------------
/local/provisioning/playbook.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - hosts: all
3 |
4 | vars:
5 | alf_user: "alfresco"
6 | alf_group: "alfresco"
7 | pub_ssh_key: "/Users/jpotts/.ssh/id_rsa.pub"
8 |
9 | tasks:
10 | - name: Install selinux bindings
11 | yum: name=libselinux-python state=present
12 |
13 | - name: Install net-tools
14 | yum: name=net-tools state=present
15 |
16 | - name: Install lsof
17 | yum: name=lsof state=present
18 |
19 | - name: Install unzip
20 | yum: name=unzip state=present
21 |
22 | - name: Create {{ alf_group }} group
23 | user: name={{ alf_group }}
24 |
25 | - name: Create {{ alf_user }} user
26 | user: name={{ alf_user }} shell=/bin/bash group={{ alf_group }}
27 |
28 | - name: Add key to {{ alf_user }}'s authorized keys
29 | authorized_key: user={{ alf_user }} key="{{ lookup('file', pub_ssh_key) }}"
30 |
31 | - name: Create /app directory
32 | file: dest=/app mode=755 owner={{ alf_user }} group={{ alf_group }} state=directory
33 |
34 | - name: Install iptables-services
35 | yum:
36 | name: iptables-services
37 | state: present
38 |
39 | # - name: Get iptables rules
40 | # shell: iptables -L
41 | # register: iptablesrules
42 | # changed_when: false
43 | # become: true
44 |
45 | # - name: Add port 8080 iptable rule
46 | # command: /sbin/iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT -m comment --comment "Tomcat HTTP"
47 | # become: true
48 | # when: iptablesrules.stdout.find("Tomcat HTTP") == -1
49 |
50 | # - name: Add port 8443 iptable rule
51 | # command: /sbin/iptables -I INPUT 1 -p tcp --dport 8443 -j ACCEPT -m comment --comment "Tomcat HTTPS"
52 | # become: true
53 | # when: iptablesrules.stdout.find("Tomcat HTTPS") == -1
54 |
55 | # - name: save iptables
56 | # shell: iptables-save > /etc/sysconfig/iptables
57 | # become: true
58 |
59 | # - name: restart iptables
60 | # service: name=iptables state=restarted
61 | # become: true
62 |
63 | - name: Copy limits.conf to set open file limits
64 | copy: src=files/limits.conf dest=/etc/security/limits.conf
65 |
66 | - name: Copy sysctl.conf
67 | copy: src=files/sysctl.conf dest=/etc/sysctl.conf
68 |
69 | - include_tasks: tasks/doInstallImageMagick.yml
70 | - include_tasks: tasks/doInstallLibreOffice.yml
71 | - include_tasks: tasks/doInstallJava.yml
72 | - include_tasks: tasks/doInstallPostgres.yml
73 |
74 |
--------------------------------------------------------------------------------
/local/provisioning/tasks/doInstallImageMagick.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Install ImageMagick
3 | yum: name=ImageMagick state=present
4 |
--------------------------------------------------------------------------------
/local/provisioning/tasks/doInstallJava.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Make Java directory
3 | file: path=/usr/java state=directory
4 |
5 | - name: Copy Java distribution
6 | copy: src=files/third-party/openjdk-11.0.1_linux-x64_bin.tar.gz dest=/tmp/openjdk.tar.gz
7 |
8 | - name: Unzip Java distribution
9 | unarchive: src=/tmp/openjdk.tar.gz dest=/usr/java copy=no
10 |
--------------------------------------------------------------------------------
/local/provisioning/tasks/doInstallLibreOffice.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Install LibreOffice Core
3 | yum: name=libreoffice-core state=present
4 |
--------------------------------------------------------------------------------
/local/provisioning/tasks/doInstallPostgres.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Add PostgreSQL RPM
3 | yum_repository:
4 | name: PostgreSQL
5 | description: PostgreSQL
6 | baseurl: https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
7 |
8 | - name: Add postgresql
9 | yum: name=postgresql10-server state=present
10 |
11 | - name: Initialize the Database
12 | command: /usr/pgsql-10/bin/postgresql-10-setup initdb
13 | args:
14 | creates: /var/lib/pgsql/10/data
15 |
16 | - name: Copy pg_hba.conf
17 | copy: src=files/pg_hba.conf dest=/var/lib/pgsql/10/data
18 |
--------------------------------------------------------------------------------
/removeSolrIndexMetadata.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - hosts: '{{ hosts }}'
3 | remote_user: alfresco
4 | tasks:
5 | - name: Remove index from alfresco core
6 | file: path={{ solr_home }}/alfresco/index state=absent
7 |
8 | - name: Remove snapshot_metadata from alfresco core
9 | file: path={{ solr_home }}/alfresco/snapshot_metadata state=absent
10 |
11 | - name: Remove index from archive core
12 | file: path={{ solr_home }}/archive/index state=absent
13 |
14 | - name: Remove snapshot_metadata from archive core
15 | file: path={{ solr_home }}/archive/snapshot_metadata state=absent
16 |
--------------------------------------------------------------------------------
/tasks/doApplyAmps.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Run Alfresco MMT to install repo tier AMPs
3 | shell: '{{ alf_java_home }}/bin/java -jar {{ alf_home }}/bin/alfresco-mmt*.jar install {{ alf_home }}/amps {{ alf_home }}/{{ tomcat_dir }}/webapps/alfresco.war -directory -nobackup -force'
4 |
5 | - name: Run Alfresco MMT to install Share tier AMPs
6 | shell: '{{ alf_java_home }}/bin/java -jar {{ alf_home }}/bin/alfresco-mmt*.jar install {{ alf_home }}/amps_share {{ alf_home }}/{{ tomcat_dir }}/webapps/share.war -directory -nobackup -force'
7 |
--------------------------------------------------------------------------------
/tasks/doCopyActivemqConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy ActiveMQ env config
3 | template: src=templates/activemq-env.j2 dest={{ alf_home }}/{{ activemq_dir }}/bin/env
4 |
--------------------------------------------------------------------------------
/tasks/doCopyAlfrescoConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Create alfresco-jmx directory
3 | file: dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx state=directory
4 |
5 | - name: Copy JMX access
6 | copy: src=files/alfresco-jmxrmi.access dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx/alfresco-jmxrmi.access
7 |
8 | - name: Copy JMX access password
9 | template: src=templates/alfresco-jmxrmi.password.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx/alfresco-jmxrmi.password
10 |
11 | - name: Copy Web Scripts Config
12 | copy: src=files/web-scripts-config-custom.xml dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/
13 |
--------------------------------------------------------------------------------
/tasks/doCopyAmps.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Create amps directory
3 | file: path='{{ alf_home }}/amps' state=directory
4 |
5 | - name: Create amps_share directory
6 | file: path='{{ alf_home }}/amps_share' state=directory
7 |
8 | - name: Copy repository tier amps
9 | copy:
10 | src: "{{ item }}"
11 | dest: '{{ alf_home }}/amps'
12 | with_fileglob: "files/third-party/amps/*"
13 |
14 | - name: Copy Share tier amps
15 | copy:
16 | src: "{{ item }}"
17 | dest: '{{ alf_home }}/amps_share'
18 | with_fileglob: "files/third-party/amps_share/*"
19 |
--------------------------------------------------------------------------------
/tasks/doCopyGlobalProperties.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy alfresco global properties file
3 | template: src=templates/alfresco-global.properties.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco-global.properties
4 |
--------------------------------------------------------------------------------
/tasks/doCopyLDAPConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Create LDAP Config directory (ldap1)
3 | file: dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1 state=directory
4 |
5 | - name: Copy LDAP Config (ldap1)
6 | template: src=templates/ldap-authentication.properties.ldap1.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/ldap-authentication.properties
7 |
--------------------------------------------------------------------------------
/tasks/doCopyLicense.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy license file
3 | copy: src=files/{{ alf_license_file }} dest={{ alf_home }}
4 |
--------------------------------------------------------------------------------
/tasks/doCopyShareConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy Share Config Custom
3 | template: src=templates/share-config-custom.xml.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml
4 |
5 | - name: Copy slingshot app context
6 | template: src=templates/custom-slingshot-application-context.xml.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/web-extension/custom-slingshot-application-context.xml
7 |
--------------------------------------------------------------------------------
/tasks/doCopySolrConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy SOLR Shared Properties
3 | template: src=templates/shared.properties.j2 dest={{ alf_home }}/alfresco-search-services/solrhome/conf/shared.properties
4 |
5 | - name: Copy SOLR Script
6 | template: src=templates/solr.in.sh.j2 dest={{ alf_home }}/alfresco-search-services/solr.in.sh
7 |
8 | - name: Create data directory
9 | file: path={{ solr_content_dir }} state=directory
10 |
--------------------------------------------------------------------------------
/tasks/doCopySolrCoreConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy Alfresco solrcore.properties
3 | template: src=templates/solrcore.properties.alfresco.j2 dest={{ solr_home }}/alfresco/conf/solrcore.properties
4 |
5 | - name: Copy Archive solrcore.properties
6 | template: src=templates/solrcore.properties.archive.j2 dest={{ solr_home }}/archive/conf/solrcore.properties
7 |
8 | - name: Copy Alfresco solrconfig.xml
9 | template: src=templates/solrconfig.xml.alfresco.j2 dest={{ solr_home }}/alfresco/conf/solrconfig.xml
10 |
11 | - name: Copy Archive solrconfig.xml
12 | template: src=templates/solrconfig.xml.archive.j2 dest={{ solr_home }}/archive/conf/solrconfig.xml
13 |
14 | #- name: Copy Alfresco solr truststore
15 | # copy: src=files/ssl.repo.client.truststore dest={{ solr_home }}/alfresco/conf/ssl.repo.client.truststore
16 |
17 | #- name: Copy Archive solr truststore
18 | # copy: src=files/ssl.repo.client.truststore dest={{ solr_home }}/archive/conf/ssl.repo.client.truststore
19 |
--------------------------------------------------------------------------------
/tasks/doCopyTomcatConfig.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy JDBC driver
3 | copy: src=files/third-party/{{ alf_db_driver_file }} dest={{ alf_home }}/tomcat/lib
4 |
5 | - name: Copy Tomcat catalina.sh
6 | template: src=templates/catalina.sh.j2 dest={{ alf_home }}/tomcat/bin/catalina.sh
7 |
8 | - name: Copy Tomcat setenv.sh
9 | template: src=templates/setenv.sh.j2 dest={{ alf_home }}/tomcat/bin/setenv.sh
10 |
11 | - name: Copy Tomcat ctl.sh
12 | template: src=templates/ctl.sh.j2 dest={{ alf_home }}/tomcat/scripts/ctl.sh
13 |
14 | - name: Copy Tomcat server.xml
15 | template: src=templates/server.xml.j2 dest={{ alf_home }}/tomcat/conf/server.xml
16 |
17 | - name: Copy web.xml
18 | template: src=templates/web.xml.j2 dest={{ alf_home }}/tomcat/conf/web.xml
19 |
20 | - name: Copy keystore with server-specific cert
21 | copy: src=files/certs/{{ ansible_hostname }}.jks dest={{ alf_home }}/alf_data/keystore/
22 | when: ssl_enabled
23 |
--------------------------------------------------------------------------------
/tasks/doInstallAOS.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Create Alfresco AOS dist directory to hold unarchived distribution files
3 | file: path={{ alf_home }}/dist/aos state=directory
4 |
5 | - name: Copy Alfresco AOS distribution archive
6 | copy: src=files/third-party/{{ aos_archive }} dest=/tmp/
7 |
8 | - name: Extract Alfresco archive
9 | unarchive: src=/tmp/{{ aos_archive }} dest={{ alf_home }}/dist/aos copy=no
10 |
11 | - name: Copy AOS AMP
12 | shell: 'cp {{ alf_home }}/dist/aos/*.amp {{ alf_home }}/amps/'
13 |
--------------------------------------------------------------------------------
/tasks/doInstallActivemq.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy ActiveMQ archive
3 | copy: src=files/third-party/{{ activemq_archive }} dest=/tmp/
4 |
5 | - name: Create ActiveMQ folder
6 | file: path={{ alf_home }}/{{ activemq_dir }} state=directory
7 |
8 | - name: Extract ActiveMQ archive
9 | unarchive: src=/tmp/{{ activemq_archive }} dest={{ alf_home }} copy=no
10 |
11 | - name: Create a symlink for the ActiveMQ install dir
12 | file: src={{ alf_home }}/{{ activemq_dir }} dest={{ alf_home }}/activemq state=link
13 |
--------------------------------------------------------------------------------
/tasks/doInstallAlfresco.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Create Alfresco dist directory to hold unarchived distribution files
3 | file: path={{ alf_home }}/dist state=directory
4 |
5 | - name: Create amps directory
6 | file: path={{ alf_home }}/amps state=directory
7 |
8 | - name: Create amps_share directory
9 | file: path={{ alf_home }}/amps_share state=directory
10 |
11 | - name: Create platform modules directory
12 | file: path={{ alf_home }}/modules/platform state=directory
13 |
14 | - name: Create share modules directory
15 | file: path={{ alf_home }}/modules/share state=directory
16 |
17 | - name: Create bin directory
18 | file: path={{ alf_home }}/bin state=directory
19 |
20 | - name: Create alf_data directory
21 | file: path={{ alf_data }} state=directory
22 |
23 | - name: Copy Alfresco distribution archive
24 | copy: src=files/third-party/{{ alf_archive }} dest=/tmp/
25 |
26 | - name: Extract Alfresco archive
27 | unarchive: src=/tmp/{{ alf_archive }} dest={{ alf_home }}/dist copy=no
28 |
29 | - name: Copy Share Services AMP
30 | shell: 'cp {{ alf_home }}/dist/{{ alf_archive_root_dir }}/amps/alfresco-share-services.amp {{ alf_home }}/amps/'
31 |
32 | - name: Copy bin files
33 | shell: 'for f in {{ alf_home }}/dist/{{ alf_archive_root_dir }}/bin/*; do cp $f {{ alf_home }}/bin/; done'
34 |
35 | - name: Make Alfresco scripts user executable
36 | file: dest="{{ alf_home }}/bin/{{ item }}" mode=u+x
37 | with_items:
38 | - apply_amps.sh
39 | - clean_tomcat.sh
40 |
41 | - name: Copy Tomcat conf, lib, shared, and webapps files
42 | shell: 'for f in {{ alf_home }}/dist/{{ alf_archive_root_dir }}/web-server/*; do cp -R $f {{ alf_home }}/{{ tomcat_dir }}/; done'
43 |
44 | - name: Copy database driver into Tomcat lib
45 | copy: src=files/third-party/{{ alf_db_driver_file }} dest={{ alf_home }}/{{ tomcat_dir }}/lib/
46 |
47 | - name: Copy Alfresco keystore directory into alf_data
48 | shell: 'cp -R {{ alf_home }}/dist/{{ alf_archive_root_dir }}/alf_data/keystore {{ alf_data }}/'
49 |
--------------------------------------------------------------------------------
/tasks/doInstallPDFRenderer.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Create Alfresco dist directory to hold unarchived distribution files
3 | file: path={{ alf_home }}/dist state=directory
4 |
5 | - name: Copy Alfresco distribution archive
6 | copy: src=files/third-party/{{ alf_archive }} dest=/tmp/
7 |
8 | - name: Extract Alfresco archive
9 | unarchive: src=/tmp/{{ alf_archive }} dest={{ alf_home }}/dist copy=no
10 |
11 | - name: Create Alfresco common directory
12 | file: path={{ alf_home }}/common state=directory
13 |
14 | - name: Extract PDF Renderer
15 | unarchive:
16 | src: '{{ alf_home }}/dist/{{ alf_archive_root_dir }}/alfresco-pdf-renderer/alfresco-pdf-renderer-1.1-linux.tgz'
17 | dest: '{{ alf_home }}/common'
18 | copy: no
19 |
--------------------------------------------------------------------------------
/tasks/doInstallSearch.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Copy Alfresco Search Services distribution archive
3 | copy: src=files/third-party/{{ search_archive }} dest=/tmp/
4 |
5 | - stat:
6 | path: '{{ search_install_dir }}'
7 | register: p
8 |
9 | - fail:
10 | msg: Search install directory already exists. Delete or rename it before continuing.
11 | when: p.stat.exists
12 |
13 | - name: Create search install directory
14 | file: path={{ search_install_dir }} state=directory
15 |
16 | - name: Create search temp directory
17 | file: path={{ alf_home }}/temp state=directory
18 |
19 | - name: Extract Alfresco archive
20 | unarchive: src=/tmp/{{ search_archive }} dest={{ alf_home }} copy=no
21 |
--------------------------------------------------------------------------------
/tasks/doInstallTomcat.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - name: Create Alfresco home
3 | file: path={{ alf_home }} state=directory
4 |
5 | - name: Copy Tomcat archive
6 | copy: src=files/third-party/{{ tomcat_archive }} dest=/tmp/
7 |
8 | - name: Create Tomcat folder
9 | file: path={{ alf_home }}/{{ tomcat_dir }} state=directory
10 |
11 | - name: Extract Tomcat archive
12 | unarchive: src=/tmp/{{ tomcat_archive }} dest={{ alf_home }} copy=no
13 |
14 | - name: Create a symlink for the Tomcat install dir
15 | file: src={{ alf_home }}/{{ tomcat_dir }} dest={{ alf_home }}/tomcat state=link
16 |
17 | - name: Delete docs webapp
18 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/docs state=absent
19 |
20 | - name: Delete examples webapp
21 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/examples state=absent
22 |
23 | - name: Delete host-manager webapp
24 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/host-manager state=absent
25 |
26 | - name: Delete manager webapp
27 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/manager state=absent
28 |
29 | - name: Delete ROOT webapp
30 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/ROOT state=absent
31 |
32 | - name: Create shared loader classes directory
33 | file: path={{ alf_home }}/{{ tomcat_dir }}/shared/classes state=directory
34 |
35 | - name: Create shared loader lib directory
36 | file: path={{ alf_home }}/{{ tomcat_dir }}/shared/lib state=directory
37 |
38 | - name: Configure shared class loader
39 | replace:
40 | path: '{{ alf_home }}/{{ tomcat_dir }}/conf/catalina.properties'
41 | regexp: 'shared.loader='
42 | replace: 'shared.loader=${catalina.base}/shared/classes/'
43 |
44 | - name: Create Tomcat scripts directory (used by old Alfresco releases)
45 | file: path={{ alf_home }}/{{tomcat_dir }}/scripts state=directory
46 |
--------------------------------------------------------------------------------
/tasks/doSetupDirectories.yml:
--------------------------------------------------------------------------------
1 | ---
2 | - stat:
3 | path: '{{ alf_home }}'
4 | register: sym
5 |
6 | - fail:
7 | msg: Alfresco home must be a symbolic link or must not exist
8 | when: sym.stat.islnk is defined and sym.stat.islnk == False
9 |
10 | - name: Remove previous Alfresco home link
11 | file: path={{ alf_home }} state=absent
12 |
13 | - name: Create base Alfresco install directory
14 | file: path={{ alf_install_dir }} state=directory
15 |
16 | - name: Create a symlink that points Alfresco home at the install directory
17 | file: src={{ alf_install_dir }} dest={{ alf_home }} state=link
18 |
--------------------------------------------------------------------------------
/templates/activemq-env.j2:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one or more
4 | # contributor license agreements. See the NOTICE file distributed with
5 | # this work for additional information regarding copyright ownership.
6 | # The ASF licenses this file to You under the Apache License, Version 2.0
7 | # (the "License"); you may not use this file except in compliance with
8 | # the License. You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | # ------------------------------------------------------------------------
18 | #
19 | # Configuration file for running Apache Active MQ as standalone provider.
20 | #
21 | # This file overwrites the predefined settings of the sysv init-script.
22 | # You can also use alternate location for default settings -
23 | # invoke the init-script without a argument an review help section "Configuration of this script"
24 | # /etc/default/activemq /.activemqrc /bin/env
25 |
26 | # Active MQ installation dirs
27 | # ACTIVEMQ_HOME="/"
28 | # ACTIVEMQ_BASE="$ACTIVEMQ_HOME"
29 | # ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf"
30 | # ACTIVEMQ_DATA="$ACTIVEMQ_BASE/data"
31 | # ACTIVEMQ_TMP="$ACTIVEMQ_BASE/tmp"
32 |
33 | # Set jvm memory configuration (minimal/maximum amount of memory)
34 | ACTIVEMQ_OPTS_MEMORY="{{ activemq_opts_memory }}"
35 |
36 | if [ -z "$ACTIVEMQ_OPTS" ] ; then
37 | ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config"
38 | fi
39 |
40 | if [ -z "$ACTIVEMQ_OUT" ]; then
41 | ACTIVEMQ_OUT="/dev/null"
42 | fi
43 |
44 | # Uncomment to enable audit logging
45 | #ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.audit=true"
46 |
47 | # Set jvm jmx configuration
48 | # This enables jmx access over a configured jmx-tcp-port.
49 | # You have to configure the first four settings if you run a ibm jvm, caused by the
50 | # fact that IBM's jvm does not support VirtualMachine.attach(PID).
51 | # JMX access is needed for quering a running activemq instance to gain data or to
52 | # trigger management operations.
53 | #
54 | # Example for ${ACTIVEMQ_CONF}/jmx.access:
55 | # ---
56 | # # The "monitorRole" role has readonly access.
57 | # # The "controlRole" role has readwrite access.
58 | # monitorRole readonly
59 | # controlRole readwrite
60 | # ---
61 | #
62 | # Example for ${ACTIVEMQ_CONF}/jmx.password:
63 | # ---
64 | # # The "monitorRole" role has password "abc123".
65 | # # # The "controlRole" role has password "abcd1234".
66 | # monitorRole abc123
67 | # controlRole abcd1234
68 | # ---
69 | #
70 | # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099 "
71 | # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
72 | # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
73 | # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
74 | ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
75 |
76 | # Set jvm jmx configuration for controlling the broker process
77 | # You only have to configure the first four settings if you run a ibm jvm, caused by the
78 | # fact that IBM's jvm does not support VirtualMachine.attach(PID)
79 | # (see also com.sun.management.jmxremote.port, .jmx.password.file and .jmx.access.file )
80 | #ACTIVEMQ_SUNJMX_CONTROL="--jmxurl service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/jmxrmi --jmxuser controlRole --jmxpassword abcd1234"
81 | ACTIVEMQ_SUNJMX_CONTROL=""
82 |
83 | # Specify the queue manager URL for using "browse" option of sysv initscript
84 | if [ -z "$ACTIVEMQ_QUEUEMANAGERURL" ]; then
85 | ACTIVEMQ_QUEUEMANAGERURL="--amqurl tcp://localhost:61616"
86 | fi
87 |
88 | # Set additional JSE arguments
89 | if [ -z "$ACTIVEMQ_SSL_OPTS" ] ; then
90 | #ACTIVEMQ_SSL_OPTS="-Djava.security.properties=$ACTIVEMQ_CONF/java.security"
91 | ACTIVEMQ_SSL_OPTS=""
92 | fi
93 |
94 | # Uncomment to enable remote debugging
95 | #ACTIVEMQ_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
96 |
97 | # ActiveMQ tries to shutdown the broker by jmx,
98 | # after a specified number of seconds send SIGKILL
99 | if [ -z "$ACTIVEMQ_KILL_MAXSECONDS" ]; then
100 | ACTIVEMQ_KILL_MAXSECONDS=30
101 | fi
102 |
103 | # Configure a user with non root privileges, if no user is specified do not change user
104 | # (the entire activemq installation should be owned by this user)
105 | ACTIVEMQ_USER="{{ activemq_user }}"
106 |
107 | # location of the pidfile
108 | # ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq.pid"
109 |
110 | # Location of the java installation
111 | # Specify the location of your java installation using JAVA_HOME, or specify the
112 | # path to the "java" binary using JAVACMD
113 | # (set JAVACMD to "auto" for automatic detection)
114 | JAVA_HOME="{{ alf_java_home }}"
115 | #JAVACMD="auto"
116 |
--------------------------------------------------------------------------------
/templates/alfresco-global.properties.j2:
--------------------------------------------------------------------------------
1 |
2 | dir.root={{ alf_home }}/alf_data
3 |
4 | ### Host Configuration ###
5 | alfresco.context={{ alf_context }}
6 | alfresco.host={{ alf_host }}
7 | alfresco.port={{ alf_port }}
8 | alfresco.protocol={{ alf_protocol }}
9 | share.context={{ share_context }}
10 | share.host={{ share_host }}
11 | share.port={{ share_port }}
12 | share.protocol={{ share_protocol }}
13 |
14 | ### database connection properties ###
15 | db.driver={{ alf_db_driver }}
16 | db.username={{ alf_db_username }}
17 | db.password={{ alf_db_password }}
18 | db.name={{ alf_db_name }}
19 | db.url={{ alf_db_url }}
20 | # Note: your database must also be able to accept at least this many connections. Please see your database documentation for instructions on how to configure this.
21 | db.pool.max=275
22 | db.pool.validate.query=
23 |
24 | # The server mode. Set value here
25 | # UNKNOWN | TEST | BACKUP | PRODUCTION
26 | system.serverMode=UNKNOWN
27 |
28 | ### FTP Server Configuration ###
29 | ftp.port={{ alf_ftp_port }}
30 |
31 | ### RMI registry port for JMX ###
32 | alfresco.rmi.services.port=50500
33 | alfresco.rmi.services.host={{ ansible_hostname }}
34 | monitor.rmi.service.port=50501
35 | alfresco.jmx.connector.enabled=true
36 | alfresco.jmx.dir={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx
37 |
38 | ### External executable locations ###
39 | ooo.exe={{jodconverter_office_home}}/bin/soffice.bin
40 | ooo.enabled={{ jodconverter_enabled }}
41 | ooo.port={{ jodconverter_port }}
42 | img.root={{ imagemagick_root }}
43 | img.dyn={{ imagemagick_dynlib }}
44 | img.exe={{ imagemagick_bin }}
45 |
46 | alfresco-pdf-renderer.root={{ alf_home }}/common
47 | alfresco-pdf-renderer.exe=${alfresco-pdf-renderer.root}/alfresco-pdf-renderer
48 |
49 | jodconverter.enabled={{ jodconverter_enabled }}
50 | jodconverter.officeHome={{ jodconverter_office_home }}
51 | jodconverter.portNumbers={{ jodconverter_port }}
52 |
53 | ### Initial admin password ###
54 | alfresco_user_store.adminpassword={{ alf_initial_admin_password }}
55 |
56 | ### E-mail site invitation setting ###
57 | notification.email.siteinvite={{ alf_notification_email }}
58 |
59 | ### Outbound mail settings ###
60 | mail.host={{ mail_host }}
61 | mail.from.default={{ mail_from }}
62 | mail.from.enabled=false
63 |
64 | ### License location ###
65 | dir.license.external={{ alf_home }}
66 |
67 | ### Solr indexing ###
68 | index.subsystem.name={{ alf_index_subsystem }}
69 | dir.keystore=${dir.root}/keystore
70 | solr.host={{ alf_solr_host }}
71 | solr.protocol=http
72 | solr.secureComms=none
73 | solr.port={{ alf_solr_port }}
74 | solr.baseUrl=/solr
75 |
76 | ### Smart Folders Config Properties ###
77 | smart.folders.enabled={{ alf_smart_folders_enabled }}
78 |
79 | aos.baseUrlOverwrite={{ alf_aos_base_url }}
80 |
81 | {% if audit_enabled %}
82 | ### Audit Service Settings ###
83 | audit.enabled=true
84 | audit.alfresco-access.enabled=true
85 | audit.alfresco-access.sub-actions.enabled=false
86 |
87 | {% endif %}
88 |
89 | ### Alfresco Cloud Sync ###
90 | sync.mode=OFF
91 |
92 | ### Alfresco Transormation Service Settings ###
93 |
94 | transform.service.enabled=true
95 | local.transform.service.enabled=false
96 | legacy.transform.service.enabled=true
97 |
--------------------------------------------------------------------------------
/templates/alfresco-jmxrmi.password.j2:
--------------------------------------------------------------------------------
1 | monitorRole {{ alf_jmx_monitor_password }}
2 | controlRole {{ alf_jmx_control_password }}
3 |
--------------------------------------------------------------------------------
/templates/catalina.sh.j2:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # Licensed to the Apache Software Foundation (ASF) under one or more
4 | # contributor license agreements. See the NOTICE file distributed with
5 | # this work for additional information regarding copyright ownership.
6 | # The ASF licenses this file to You under the Apache License, Version 2.0
7 | # (the "License"); you may not use this file except in compliance with
8 | # the License. You may obtain a copy of the License at
9 | #
10 | # http://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 |
18 | # -----------------------------------------------------------------------------
19 | # Control Script for the CATALINA Server
20 | #
21 | # Environment Variable Prerequisites
22 | #
23 | # Do not set the variables in this script. Instead put them into a script
24 | # setenv.sh in CATALINA_BASE/bin to keep your customizations separate.
25 | #
26 | # CATALINA_HOME May point at your Catalina "build" directory.
27 | #
28 | # CATALINA_BASE (Optional) Base directory for resolving dynamic portions
29 | # of a Catalina installation. If not present, resolves to
30 | # the same directory that CATALINA_HOME points to.
31 | #
32 | # CATALINA_OUT (Optional) Full path to a file where stdout and stderr
33 | # will be redirected.
34 | # Default is $CATALINA_BASE/logs/catalina.out
35 | #
36 | # CATALINA_OPTS (Optional) Java runtime options used when the "start",
37 | # "run" or "debug" command is executed.
38 | # Include here and not in JAVA_OPTS all options, that should
39 | # only be used by Tomcat itself, not by the stop process,
40 | # the version command etc.
41 | # Examples are heap size, GC logging, JMX ports etc.
42 | #
43 | # CATALINA_TMPDIR (Optional) Directory path location of temporary directory
44 | # the JVM should use (java.io.tmpdir). Defaults to
45 | # $CATALINA_BASE/temp.
46 | #
47 | # JAVA_HOME Must point at your Java Development Kit installation.
48 | # Required to run the with the "debug" argument.
49 | #
50 | # JRE_HOME Must point at your Java Runtime installation.
51 | # Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
52 | # are both set, JRE_HOME is used.
53 | #
54 | # JAVA_OPTS (Optional) Java runtime options used when any command
55 | # is executed.
56 | # Include here and not in CATALINA_OPTS all options, that
57 | # should be used by Tomcat and also by the stop process,
58 | # the version command etc.
59 | # Most options should go into CATALINA_OPTS.
60 | #
61 | # JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories
62 | # containing some jars in order to allow replacement of APIs
63 | # created outside of the JCP (i.e. DOM and SAX from W3C).
64 | # It can also be used to update the XML parser implementation.
65 | # This is only supported for Java <= 8.
66 | # Defaults to $CATALINA_HOME/endorsed.
67 | #
68 | # JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"
69 | # command is executed. The default is "dt_socket".
70 | #
71 | # JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"
72 | # command is executed. The default is localhost:8000.
73 | #
74 | # JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"
75 | # command is executed. Specifies whether JVM should suspend
76 | # execution immediately after startup. Default is "n".
77 | #
78 | # JPDA_OPTS (Optional) Java runtime options used when the "jpda start"
79 | # command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
80 | # and JPDA_SUSPEND are ignored. Thus, all required jpda
81 | # options MUST be specified. The default is:
82 | #
83 | # -agentlib:jdwp=transport=$JPDA_TRANSPORT,
84 | # address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
85 | #
86 | # JSSE_OPTS (Optional) Java runtime options used to control the TLS
87 | # implementation when JSSE is used. Default is:
88 | # "-Djdk.tls.ephemeralDHKeySize=2048"
89 | #
90 | # CATALINA_PID (Optional) Path of the file which should contains the pid
91 | # of the catalina startup java process, when start (fork) is
92 | # used
93 | #
94 | # LOGGING_CONFIG (Optional) Override Tomcat's logging config file
95 | # Example (all one line)
96 | # LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
97 | #
98 | # LOGGING_MANAGER (Optional) Override Tomcat's logging manager
99 | # Example (all one line)
100 | # LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
101 | #
102 | # UMASK (Optional) Override Tomcat's default UMASK of 0027
103 | #
104 | # USE_NOHUP (Optional) If set to the string true the start command will
105 | # use nohup so that the Tomcat process will ignore any hangup
106 | # signals. Default is "false" unless running on HP-UX in which
107 | # case the default is "true"
108 | # -----------------------------------------------------------------------------
109 |
110 | # OS specific support. $var _must_ be set to either true or false.
111 | cygwin=false
112 | darwin=false
113 | os400=false
114 | hpux=false
115 | case "`uname`" in
116 | CYGWIN*) cygwin=true;;
117 | Darwin*) darwin=true;;
118 | OS400*) os400=true;;
119 | HP-UX*) hpux=true;;
120 | esac
121 |
122 | # resolve links - $0 may be a softlink
123 | PRG="$0"
124 |
125 | while [ -h "$PRG" ]; do
126 | ls=`ls -ld "$PRG"`
127 | link=`expr "$ls" : '.*-> \(.*\)$'`
128 | if expr "$link" : '/.*' > /dev/null; then
129 | PRG="$link"
130 | else
131 | PRG=`dirname "$PRG"`/"$link"
132 | fi
133 | done
134 |
135 | # Get standard environment variables
136 | PRGDIR=`dirname "$PRG"`
137 |
138 | # Only set CATALINA_HOME if not already set
139 | [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
140 |
141 | # Copy CATALINA_BASE from CATALINA_HOME if not already set
142 | [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
143 |
144 | # Ensure that any user defined CLASSPATH variables are not used on startup,
145 | # but allow them to be specified in setenv.sh, in rare case when it is needed.
146 | CLASSPATH=
147 |
148 | if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
149 | . "$CATALINA_BASE/bin/setenv.sh"
150 | elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
151 | . "$CATALINA_HOME/bin/setenv.sh"
152 | fi
153 |
154 | # For Cygwin, ensure paths are in UNIX format before anything is touched
155 | if $cygwin; then
156 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
157 | [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`
158 | [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
159 | [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`
160 | [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
161 | fi
162 |
163 | # Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a colon
164 | # as this is used as the separator in the classpath and Java provides no
165 | # mechanism for escaping if the same character appears in the path.
166 | case $CATALINA_HOME in
167 | *:*) echo "Using CATALINA_HOME: $CATALINA_HOME";
168 | echo "Unable to start as CATALINA_HOME contains a colon (:) character";
169 | exit 1;
170 | esac
171 | case $CATALINA_BASE in
172 | *:*) echo "Using CATALINA_BASE: $CATALINA_BASE";
173 | echo "Unable to start as CATALINA_BASE contains a colon (:) character";
174 | exit 1;
175 | esac
176 |
177 | # For OS400
178 | if $os400; then
179 | # Set job priority to standard for interactive (interactive - 6) by using
180 | # the interactive priority - 6, the helper threads that respond to requests
181 | # will be running at the same priority as interactive jobs.
182 | COMMAND='chgjob job('$JOBNAME') runpty(6)'
183 | system $COMMAND
184 |
185 | # Enable multi threading
186 | export QIBM_MULTI_THREADED=Y
187 | fi
188 |
189 | # Get standard Java environment variables
190 | if $os400; then
191 | # -r will Only work on the os400 if the files are:
192 | # 1. owned by the user
193 | # 2. owned by the PRIMARY group of the user
194 | # this will not work if the user belongs in secondary groups
195 | . "$CATALINA_HOME"/bin/setclasspath.sh
196 | else
197 | if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
198 | . "$CATALINA_HOME"/bin/setclasspath.sh
199 | else
200 | echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
201 | echo "This file is needed to run this program"
202 | exit 1
203 | fi
204 | fi
205 |
206 | # Add on extra jar files to CLASSPATH
207 | if [ ! -z "$CLASSPATH" ] ; then
208 | CLASSPATH="$CLASSPATH":
209 | fi
210 | CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar
211 |
212 | if [ -z "$CATALINA_OUT" ] ; then
213 | #CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
214 | CATALINA_OUT={{ alf_tomcat_catalina_logs_dir }}/catalina.out
215 | fi
216 |
217 | if [ -z "$CATALINA_TMPDIR" ] ; then
218 | # Define the java.io.tmpdir to use for Catalina
219 | #CATALINA_TMPDIR="$CATALINA_BASE"/temp
220 | CATALINA_TMPDIR={{ alf_home }}/temp
221 | fi
222 |
223 | # Add tomcat-juli.jar to classpath
224 | # tomcat-juli.jar can be over-ridden per instance
225 | if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
226 | CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar
227 | else
228 | CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar
229 | fi
230 |
231 | # Bugzilla 37848: When no TTY is available, don't output to console
232 | have_tty=0
233 | if [ "`tty`" != "not a tty" ]; then
234 | have_tty=1
235 | fi
236 |
237 | # For Cygwin, switch paths to Windows format before running java
238 | if $cygwin; then
239 | JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
240 | JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
241 | CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
242 | CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
243 | CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
244 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
245 | [ -n "$JAVA_ENDORSED_DIRS" ] && JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
246 | fi
247 |
248 | if [ -z "$JSSE_OPTS" ] ; then
249 | JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
250 | fi
251 | JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
252 |
253 | # Register custom URL handlers
254 | # Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
255 | JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
256 |
257 | # Set juli LogManager config file if it is present and an override has not been issued
258 | if [ -z "$LOGGING_CONFIG" ]; then
259 | if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then
260 | LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
261 | else
262 | # Bugzilla 45585
263 | LOGGING_CONFIG="-Dnop"
264 | fi
265 | fi
266 |
267 | if [ -z "$LOGGING_MANAGER" ]; then
268 | LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
269 | fi
270 |
271 | # Set UMASK unless it has been overridden
272 | if [ -z "$UMASK" ]; then
273 | UMASK="0027"
274 | fi
275 | umask $UMASK
276 |
277 | # Java 9 no longer supports the java.endorsed.dirs
278 | # system property. Only try to use it if
279 | # JAVA_ENDORSED_DIRS was explicitly set
280 | # or CATALINA_HOME/endorsed exists.
281 | ENDORSED_PROP=ignore.endorsed.dirs
282 | if [ -n "$JAVA_ENDORSED_DIRS" ]; then
283 | ENDORSED_PROP=java.endorsed.dirs
284 | fi
285 | if [ -d "$CATALINA_HOME/endorsed" ]; then
286 | ENDORSED_PROP=java.endorsed.dirs
287 | fi
288 |
289 | # Make the umask available when using the org.apache.catalina.security.SecurityListener
290 | JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
291 |
292 | if [ -z "$USE_NOHUP" ]; then
293 | if $hpux; then
294 | USE_NOHUP="true"
295 | else
296 | USE_NOHUP="false"
297 | fi
298 | fi
299 | unset _NOHUP
300 | if [ "$USE_NOHUP" = "true" ]; then
301 | _NOHUP=nohup
302 | fi
303 |
304 | # Add the JAVA 9 specific start-up parameters required by Tomcat
305 | JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.lang=ALL-UNNAMED"
306 | JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.io=ALL-UNNAMED"
307 | JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"
308 | export JDK_JAVA_OPTIONS
309 |
310 | # ----- Execute The Requested Command -----------------------------------------
311 |
312 | # Bugzilla 37848: only output this if we have a TTY
313 | if [ $have_tty -eq 1 ]; then
314 | echo "Using CATALINA_BASE: $CATALINA_BASE"
315 | echo "Using CATALINA_HOME: $CATALINA_HOME"
316 | echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
317 | if [ "$1" = "debug" ] ; then
318 | echo "Using JAVA_HOME: $JAVA_HOME"
319 | else
320 | echo "Using JRE_HOME: $JRE_HOME"
321 | fi
322 | echo "Using CLASSPATH: $CLASSPATH"
323 | if [ ! -z "$CATALINA_PID" ]; then
324 | echo "Using CATALINA_PID: $CATALINA_PID"
325 | fi
326 | fi
327 |
328 | if [ "$1" = "jpda" ] ; then
329 | if [ -z "$JPDA_TRANSPORT" ]; then
330 | JPDA_TRANSPORT="dt_socket"
331 | fi
332 | if [ -z "$JPDA_ADDRESS" ]; then
333 | JPDA_ADDRESS="localhost:8000"
334 | fi
335 | if [ -z "$JPDA_SUSPEND" ]; then
336 | JPDA_SUSPEND="n"
337 | fi
338 | if [ -z "$JPDA_OPTS" ]; then
339 | JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
340 | fi
341 | CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
342 | shift
343 | fi
344 |
345 | if [ "$1" = "debug" ] ; then
346 | if $os400; then
347 | echo "Debug command not available on OS400"
348 | exit 1
349 | else
350 | shift
351 | if [ "$1" = "-security" ] ; then
352 | if [ $have_tty -eq 1 ]; then
353 | echo "Using Security Manager"
354 | fi
355 | shift
356 | exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
357 | -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
358 | -classpath "$CLASSPATH" \
359 | -sourcepath "$CATALINA_HOME"/../../java \
360 | -Djava.security.manager \
361 | -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
362 | -Dcatalina.base="$CATALINA_BASE" \
363 | -Dcatalina.home="$CATALINA_HOME" \
364 | -Djava.io.tmpdir="$CATALINA_TMPDIR" \
365 | org.apache.catalina.startup.Bootstrap "$@" start
366 | else
367 | exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
368 | -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
369 | -classpath "$CLASSPATH" \
370 | -sourcepath "$CATALINA_HOME"/../../java \
371 | -Dcatalina.base="$CATALINA_BASE" \
372 | -Dcatalina.home="$CATALINA_HOME" \
373 | -Djava.io.tmpdir="$CATALINA_TMPDIR" \
374 | org.apache.catalina.startup.Bootstrap "$@" start
375 | fi
376 | fi
377 |
378 | elif [ "$1" = "run" ]; then
379 |
380 | shift
381 | if [ "$1" = "-security" ] ; then
382 | if [ $have_tty -eq 1 ]; then
383 | echo "Using Security Manager"
384 | fi
385 | shift
386 | eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
387 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
388 | -classpath "\"$CLASSPATH\"" \
389 | -Djava.security.manager \
390 | -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
391 | -Dcatalina.base="\"$CATALINA_BASE\"" \
392 | -Dcatalina.home="\"$CATALINA_HOME\"" \
393 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
394 | org.apache.catalina.startup.Bootstrap "$@" start
395 | else
396 | eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
397 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
398 | -classpath "\"$CLASSPATH\"" \
399 | -Dcatalina.base="\"$CATALINA_BASE\"" \
400 | -Dcatalina.home="\"$CATALINA_HOME\"" \
401 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
402 | org.apache.catalina.startup.Bootstrap "$@" start
403 | fi
404 |
405 | elif [ "$1" = "start" ] ; then
406 |
407 | if [ ! -z "$CATALINA_PID" ]; then
408 | if [ -f "$CATALINA_PID" ]; then
409 | if [ -s "$CATALINA_PID" ]; then
410 | echo "Existing PID file found during start."
411 | if [ -r "$CATALINA_PID" ]; then
412 | PID=`cat "$CATALINA_PID"`
413 | ps -p $PID >/dev/null 2>&1
414 | if [ $? -eq 0 ] ; then
415 | echo "Tomcat appears to still be running with PID $PID. Start aborted."
416 | echo "If the following process is not a Tomcat process, remove the PID file and try again:"
417 | ps -f -p $PID
418 | exit 1
419 | else
420 | echo "Removing/clearing stale PID file."
421 | rm -f "$CATALINA_PID" >/dev/null 2>&1
422 | if [ $? != 0 ]; then
423 | if [ -w "$CATALINA_PID" ]; then
424 | cat /dev/null > "$CATALINA_PID"
425 | else
426 | echo "Unable to remove or clear stale PID file. Start aborted."
427 | exit 1
428 | fi
429 | fi
430 | fi
431 | else
432 | echo "Unable to read PID file. Start aborted."
433 | exit 1
434 | fi
435 | else
436 | rm -f "$CATALINA_PID" >/dev/null 2>&1
437 | if [ $? != 0 ]; then
438 | if [ ! -w "$CATALINA_PID" ]; then
439 | echo "Unable to remove or write to empty PID file. Start aborted."
440 | exit 1
441 | fi
442 | fi
443 | fi
444 | fi
445 | fi
446 |
447 | shift
448 | touch "$CATALINA_OUT"
449 | if [ "$1" = "-security" ] ; then
450 | if [ $have_tty -eq 1 ]; then
451 | echo "Using Security Manager"
452 | fi
453 | shift
454 | eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
455 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
456 | -classpath "\"$CLASSPATH\"" \
457 | -Djava.security.manager \
458 | -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
459 | -Dcatalina.base="\"$CATALINA_BASE\"" \
460 | -Dcatalina.home="\"$CATALINA_HOME\"" \
461 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
462 | org.apache.catalina.startup.Bootstrap "$@" start \
463 | >> "$CATALINA_OUT" 2>&1 "&"
464 |
465 | else
466 | eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
467 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
468 | -classpath "\"$CLASSPATH\"" \
469 | -Dcatalina.base="\"$CATALINA_BASE\"" \
470 | -Dcatalina.home="\"$CATALINA_HOME\"" \
471 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
472 | org.apache.catalina.startup.Bootstrap "$@" start \
473 | >> "$CATALINA_OUT" 2>&1 "&"
474 |
475 | fi
476 |
477 | if [ ! -z "$CATALINA_PID" ]; then
478 | echo $! > "$CATALINA_PID"
479 | fi
480 |
481 | echo "Tomcat started."
482 |
483 | elif [ "$1" = "stop" ] ; then
484 |
485 | shift
486 |
487 | SLEEP=5
488 | if [ ! -z "$1" ]; then
489 | echo $1 | grep "[^0-9]" >/dev/null 2>&1
490 | if [ $? -gt 0 ]; then
491 | SLEEP=$1
492 | shift
493 | fi
494 | fi
495 |
496 | FORCE=0
497 | if [ "$1" = "-force" ]; then
498 | shift
499 | FORCE=1
500 | fi
501 |
502 | if [ ! -z "$CATALINA_PID" ]; then
503 | if [ -f "$CATALINA_PID" ]; then
504 | if [ -s "$CATALINA_PID" ]; then
505 | kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
506 | if [ $? -gt 0 ]; then
507 | echo "PID file found but either no matching process was found or the current user does not have permission to stop the process. Stop aborted."
508 | exit 1
509 | fi
510 | else
511 | echo "PID file is empty and has been ignored."
512 | fi
513 | else
514 | echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted."
515 | exit 1
516 | fi
517 | fi
518 |
519 | eval "\"$_RUNJAVA\"" $JAVA_OPTS \
520 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
521 | -classpath "\"$CLASSPATH\"" \
522 | -Dcatalina.base="\"$CATALINA_BASE\"" \
523 | -Dcatalina.home="\"$CATALINA_HOME\"" \
524 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
525 | org.apache.catalina.startup.Bootstrap "$@" stop
526 |
527 | # stop failed. Shutdown port disabled? Try a normal kill.
528 | if [ $? != 0 ]; then
529 | if [ ! -z "$CATALINA_PID" ]; then
530 | echo "The stop command failed. Attempting to signal the process to stop through OS signal."
531 | kill -15 `cat "$CATALINA_PID"` >/dev/null 2>&1
532 | fi
533 | fi
534 |
535 | if [ ! -z "$CATALINA_PID" ]; then
536 | if [ -f "$CATALINA_PID" ]; then
537 | while [ $SLEEP -ge 0 ]; do
538 | kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
539 | if [ $? -gt 0 ]; then
540 | rm -f "$CATALINA_PID" >/dev/null 2>&1
541 | if [ $? != 0 ]; then
542 | if [ -w "$CATALINA_PID" ]; then
543 | cat /dev/null > "$CATALINA_PID"
544 | # If Tomcat has stopped don't try and force a stop with an empty PID file
545 | FORCE=0
546 | else
547 | echo "The PID file could not be removed or cleared."
548 | fi
549 | fi
550 | echo "Tomcat stopped."
551 | break
552 | fi
553 | if [ $SLEEP -gt 0 ]; then
554 | sleep 1
555 | fi
556 | if [ $SLEEP -eq 0 ]; then
557 | echo "Tomcat did not stop in time."
558 | if [ $FORCE -eq 0 ]; then
559 | echo "PID file was not removed."
560 | fi
561 | echo "To aid diagnostics a thread dump has been written to standard out."
562 | kill -3 `cat "$CATALINA_PID"`
563 | fi
564 | SLEEP=`expr $SLEEP - 1 `
565 | done
566 | fi
567 | fi
568 |
569 | KILL_SLEEP_INTERVAL=5
570 | if [ $FORCE -eq 1 ]; then
571 | if [ -z "$CATALINA_PID" ]; then
572 | echo "Kill failed: \$CATALINA_PID not set"
573 | else
574 | if [ -f "$CATALINA_PID" ]; then
575 | PID=`cat "$CATALINA_PID"`
576 | echo "Killing Tomcat with the PID: $PID"
577 | kill -9 $PID
578 | while [ $KILL_SLEEP_INTERVAL -ge 0 ]; do
579 | kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
580 | if [ $? -gt 0 ]; then
581 | rm -f "$CATALINA_PID" >/dev/null 2>&1
582 | if [ $? != 0 ]; then
583 | if [ -w "$CATALINA_PID" ]; then
584 | cat /dev/null > "$CATALINA_PID"
585 | else
586 | echo "The PID file could not be removed."
587 | fi
588 | fi
589 | echo "The Tomcat process has been killed."
590 | break
591 | fi
592 | if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then
593 | sleep 1
594 | fi
595 | KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 `
596 | done
597 | if [ $KILL_SLEEP_INTERVAL -lt 0 ]; then
598 | echo "Tomcat has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE."
599 | fi
600 | fi
601 | fi
602 | fi
603 |
604 | elif [ "$1" = "configtest" ] ; then
605 |
606 | eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \
607 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
608 | -classpath "\"$CLASSPATH\"" \
609 | -Dcatalina.base="\"$CATALINA_BASE\"" \
610 | -Dcatalina.home="\"$CATALINA_HOME\"" \
611 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
612 | org.apache.catalina.startup.Bootstrap configtest
613 | result=$?
614 | if [ $result -ne 0 ]; then
615 | echo "Configuration error detected!"
616 | fi
617 | exit $result
618 |
619 | elif [ "$1" = "version" ] ; then
620 |
621 | "$_RUNJAVA" \
622 | -classpath "$CATALINA_HOME/lib/catalina.jar" \
623 | org.apache.catalina.util.ServerInfo
624 |
625 | else
626 |
627 | echo "Usage: catalina.sh ( commands ... )"
628 | echo "commands:"
629 | if $os400; then
630 | echo " debug Start Catalina in a debugger (not available on OS400)"
631 | echo " debug -security Debug Catalina with a security manager (not available on OS400)"
632 | else
633 | echo " debug Start Catalina in a debugger"
634 | echo " debug -security Debug Catalina with a security manager"
635 | fi
636 | echo " jpda start Start Catalina under JPDA debugger"
637 | echo " run Start Catalina in the current window"
638 | echo " run -security Start in the current window with security manager"
639 | echo " start Start Catalina in a separate window"
640 | echo " start -security Start in a separate window with security manager"
641 | echo " stop Stop Catalina, waiting up to 5 seconds for the process to end"
642 | echo " stop n Stop Catalina, waiting up to n seconds for the process to end"
643 | echo " stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
644 | echo " stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
645 | echo " configtest Run a basic syntax check on server.xml - check exit code for result"
646 | echo " version What version of tomcat are you running?"
647 | echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined"
648 | exit 1
649 |
650 | fi
651 |
--------------------------------------------------------------------------------
/templates/ctl.sh.j2:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | CATALINA_HOME={{ alf_home }}/tomcat
4 | TOMCAT_BINDIR={{ alf_home }}/tomcat/bin
5 | JAVA_HOME=$JAVA_HOME
6 | CATALINA_PID={{ alf_home }}/tomcat/temp/catalina.pid
7 | export CATALINA_PID
8 | TOMCAT_STATUS=""
9 | ERROR=0
10 | PID=""
11 |
12 | start_tomcat() {
13 | is_tomcat_running
14 | RUNNING=$?
15 | if [ $RUNNING -eq 1 ]; then
16 | echo "$0 $ARG: tomcat (pid $PID) already running"
17 | else
18 | rm -f $CATALINA_PID
19 | export JAVA_OPTS="-Xms8G -Xmx16G -XX:+DisableExplicitGC -Djava.awt.headless=true -Dalfresco.home={{ alf_home }} -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true -XX:ReservedCodeCacheSize=128m"
20 | previousdir=`pwd`
21 | cd $CATALINA_HOME/..
22 | $TOMCAT_BINDIR/startup.sh
23 | if [ $? -eq 0 ]; then
24 | echo "$0 $ARG: tomcat started"
25 | else
26 | echo "$0 $ARG: tomcat could not be started"
27 | ERROR=1
28 | fi
29 | cd $previousdir
30 | fi
31 | }
32 |
33 | daemon_tomcat() {
34 | export JAVA_OPTS="-Xms8G -Xmx16G -XX:+DisableExplicitGC -Djava.awt.headless=true -Dalfresco.home={{ alf_home }} -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true -XX:ReservedCodeCacheSize=128m"
35 | $TOMCAT_BINDIR/catalina.sh run
36 | }
37 |
38 | stop_tomcat() {
39 | is_tomcat_running
40 | RUNNING=$?
41 | if [ $RUNNING -eq 0 ]; then
42 | echo "$0 $ARG: $TOMCAT_STATUS"
43 | exit
44 | fi
45 | $TOMCAT_BINDIR/shutdown.sh 300 -force
46 | sleep 2
47 | is_tomcat_running
48 | RUNNING=$?
49 | COUNTER=4
50 | while [ $RUNNING -ne 0 ] && [ $COUNTER -ne 0 ]; do
51 | COUNTER=`expr $COUNTER - 1`
52 | sleep 2
53 | is_tomcat_running
54 | RUNNING=$?
55 | done
56 | if [ $RUNNING -eq 0 ]; then
57 | echo "$0 $ARG: tomcat stopped"
58 | sleep 3
59 | else
60 | echo "$0 $ARG: tomcat could not be stopped"
61 | ERROR=2
62 | fi
63 | }
64 |
65 | get_pid() {
66 | PID=""
67 | PIDFILE=$1
68 | # check for pidfile
69 | if [ -f $PIDFILE ] ; then
70 | PID=`cat $PIDFILE`
71 | fi
72 | }
73 |
74 | get_tomcat_pid() {
75 | get_pid $CATALINA_PID
76 | if [ ! $PID ]; then
77 | return
78 | fi
79 | }
80 |
81 | is_service_running() {
82 | PID=$1
83 | if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then
84 | RUNNING=1
85 | else
86 | RUNNING=0
87 | fi
88 | return $RUNNING
89 | }
90 |
91 | is_tomcat_running() {
92 | get_tomcat_pid
93 | is_service_running $PID
94 | RUNNING=$?
95 | if [ $RUNNING -eq 0 ]; then
96 | TOMCAT_STATUS="tomcat not running"
97 | else
98 | TOMCAT_STATUS="tomcat already running"
99 | fi
100 | return $RUNNING
101 | }
102 |
103 | cleanpid() {
104 | rm -f $CATALINA_PID
105 | }
106 |
107 | if [ "x$1" = "xstart" ]; then
108 | start_tomcat
109 | sleep 2
110 | elif [ "x$1" = "xdaemon" ]; then
111 | daemon_tomcat
112 | elif [ "x$1" = "xstop" ]; then
113 | stop_tomcat
114 | sleep 2
115 | elif [ "x$1" = "xstatus" ]; then
116 | is_tomcat_running
117 | echo $TOMCAT_STATUS
118 | elif [ "x$1" = "xcleanpid" ]; then
119 | cleanpid
120 | fi
121 |
--------------------------------------------------------------------------------
/templates/custom-slingshot-application-context.xml.j2:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/templates/server.xml.j2:
--------------------------------------------------------------------------------
1 |
2 |
18 |
22 |
23 |
24 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
37 |
38 |
41 |
46 |
47 |
48 |
53 |
54 |
55 |
56 |
60 |
61 |
62 |
69 |
72 |
73 |
74 | {% if proxy_enabled %}
75 |
76 | {% else %}
77 |
78 | {% endif %}
79 |
80 | {% if ssl_enabled %}
81 |
85 | {% endif %}
86 |
87 |
92 |
93 |
96 |
97 |
98 |
101 |
104 |
105 |
107 |
108 |
112 |
114 |
115 |
116 |
118 |
119 |
121 |
124 |
125 |
128 |
131 | {% if proxy_enabled %}
132 |
133 | {% endif %}
134 |
135 |
136 |
137 |
138 |
--------------------------------------------------------------------------------
/templates/setenv.sh.j2:
--------------------------------------------------------------------------------
1 | # Load Tomcat Native Library
2 | LD_LIBRARY_PATH={{ alf_home }}/common/lib:$LD_LIBRARY_PATH
3 |
4 | JRE_HOME=$JAVA_HOME
5 | JAVA_OPTS="-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -Dalfresco.home={{ alf_home }} -XX:ReservedCodeCacheSize=128m $JAVA_OPTS "
6 | JAVA_OPTS="-Xms512M -Xmx{{ java_opts_xmx }} $JAVA_OPTS " # java-memory-settings
7 | JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote " # JMX settings
8 | JAVA_OPTS="$JAVA_OPTS -Djava.io.tmpdir={{ alf_home }}/temp "
9 | export JAVA_HOME
10 | export JRE_HOME
11 | export JAVA_OPTS
12 | export LD_LIBRARY_PATH
13 |
--------------------------------------------------------------------------------
/templates/share-config-custom.xml.j2:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 | false
10 |
11 |
15 | false
16 |
17 |
18 |
19 |
20 |
21 |
22 |
26 |
27 |
28 | production
29 |
30 |
31 |
32 |
33 | manual
34 | true
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
55 |
56 |
60 |
68 |
69 |
70 |
80 |
81 |
82 |
92 |
93 |
94 |
95 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
113 | false
114 |
115 |
118 | 1000
119 |
120 |
123 | 7000
124 |
125 |
126 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
213 | {{ alf_protocol }}://{{ alf_host }}:{{ alf_port }}/alfresco
214 |
215 |
218 |
219 |
222 | false
223 |
224 |
228 |
229 | application/vnd.openxmlformats-officedocument.wordprocessingml.document
230 | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
231 | application/vnd.ms-powerpoint
232 |
233 |
234 |
235 |
238 |
239 |
245 | true
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
260 |
261 |
262 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 | location.path.documents
278 |
279 | slingshot/doclib/treenode/site/{site}/{container}{path}?children={evaluateChildFoldersSite}&max={maximumFolderCountSite}
280 |
281 |
282 |
283 |
284 |
285 |
286 |
291 | alfresco://company/home
292 |
293 |
294 |
298 | false
299 |
300 |
303 | 500
304 |
305 |
306 |
309 | true
310 |
311 |
312 |
313 |
314 |
315 |
316 |
324 | secret
325 |
328 | ALFRESCO.ORG
329 |
333 | HTTP/repository.server.com@ALFRESCO.ORG
334 |
337 | ShareHTTP
338 |
342 | true
343 |
344 |
345 |
346 |
347 |
352 |
353 |
354 |
355 |
356 | alfresco-noauth
357 | Alfresco - unauthenticated access
358 | Access to Alfresco Repository WebScripts that do not require authentication
359 | alfresco
360 | {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s
361 | none
362 |
363 |
364 |
365 | alfresco
366 | Alfresco - user access
367 | Access to Alfresco Repository WebScripts that require user authentication
368 | alfresco
369 | {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s
370 | user
371 |
372 |
373 |
374 | alfresco-feed
375 | Alfresco Feed
376 | Alfresco Feed - supports basic HTTP authentication via the EndPointProxyServlet
377 | http
378 | {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s
379 | true
380 | user
381 |
382 |
383 |
384 | alfresco-api
385 | alfresco
386 | Alfresco Public API - user access
387 | Access to Alfresco Repository Public API that require user authentication.
388 | This makes use of the authentication that is provided by parent 'alfresco' endpoint.
389 | alfresco
390 | {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/api
391 | user
392 |
393 |
394 |
395 |
396 |
426 |
427 |
428 |
429 |
494 |
495 |
496 |
497 |
514 |
515 |
516 |
--------------------------------------------------------------------------------
/templates/shared.properties.j2:
--------------------------------------------------------------------------------
1 | # Shared Properties file
2 |
3 | #Host details an external client would use to connect to Solr
4 | solr.host=localhost
5 | #If not set then solr.port will be the jetty.port
6 | #solr.port=8983
7 | solr.baseurl=/solr
8 | solr.content.dir={{ alf_home }}/alf_data/solr6
9 |
10 | # Properties treated as identifiers when indexed
11 |
12 | alfresco.identifier.property.0={http://www.alfresco.org/model/content/1.0}creator
13 | alfresco.identifier.property.1={http://www.alfresco.org/model/content/1.0}modifier
14 | alfresco.identifier.property.2={http://www.alfresco.org/model/content/1.0}userName
15 | alfresco.identifier.property.3={http://www.alfresco.org/model/content/1.0}authorityName
16 | alfresco.identifier.property.4={http://www.alfresco.org/model/content/1.0}lockOwner
17 |
18 | # Suggestable Propeties
19 | #alfresco.suggestable.property.0={http://www.alfresco.org/model/content/1.0}name
20 | #alfresco.suggestable.property.1={http://www.alfresco.org/model/content/1.0}title
21 | #alfresco.suggestable.property.2={http://www.alfresco.org/model/content/1.0}description
22 | #alfresco.suggestable.property.3={http://www.alfresco.org/model/content/1.0}content
23 |
24 | # Data types that support cross locale/word splitting/token patterns if tokenised
25 | alfresco.cross.locale.property.0={http://www.alfresco.org/model/content/1.0}name
26 | alfresco.cross.locale.property.1={http://www.alfresco.org/model/content/1.0}lockOwner
27 |
28 | # Data types that support cross locale/word splitting/token patterns if tokenised
29 | # alfresco.cross.locale.datatype.0={http://www.alfresco.org/model/dictionary/1.0}text
30 | # alfresco.cross.locale.datatype.1={http://www.alfresco.org/model/dictionary/1.0}content
31 | # alfresco.cross.locale.datatype.2={http://www.alfresco.org/model/dictionary/1.0}mltext
32 |
33 | alfresco.model.tracker.cron=0/10 * * * * ? *
34 |
--------------------------------------------------------------------------------
/templates/solr.in.sh.j2:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one or more
2 | # contributor license agreements. See the NOTICE file distributed with
3 | # this work for additional information regarding copyright ownership.
4 | # The ASF licenses this file to You under the Apache License, Version 2.0
5 | # (the "License"); you may not use this file except in compliance with
6 | # the License. You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 |
16 | # Settings here will override settings in existing env vars or in bin/solr. The default shipped state
17 | # of this file is completely commented.
18 |
19 | # By default the script will use JAVA_HOME to determine which java
20 | # to use, but you can set a specific path for Solr to use without
21 | # affecting other Java applications on your server/workstation.
22 | #SOLR_JAVA_HOME=""
23 | SOLR_JAVA_HOME={{ solr_java_home }}
24 |
25 | # This controls the number of seconds that the solr script will wait for
26 | # Solr to stop gracefully or Solr to start. If the graceful stop fails,
27 | # the script will forcibly stop Solr. If the start fails, the script will
28 | # give up waiting and display the last few lines of the logfile.
29 | #SOLR_STOP_WAIT="180"
30 |
31 | # Increase Java Heap as needed to support your indexing / query needs
32 | #SOLR_HEAP="512m"
33 |
34 | # Expert: If you want finer control over memory options, specify them directly
35 | # Comment out SOLR_HEAP if you are using this though, that takes precedence
36 | #SOLR_JAVA_MEM="-Xms512m -Xmx512m"
37 | SOLR_JAVA_MEM="{{ solr_java_mem }}"
38 |
39 | # Enable verbose GC logging
40 | GC_LOG_OPTS=""
41 | #GC_LOG_OPTS="-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails \
42 | #-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime"
43 |
44 | # These GC settings have shown to work well for a number of common Solr workloads
45 | #GC_TUNE="-XX:NewRatio=3 -XX:SurvivorRatio=4 etc.
46 |
47 | # Set the ZooKeeper connection string if using an external ZooKeeper ensemble
48 | # e.g. host1:2181,host2:2181/chroot
49 | # Leave empty if not using SolrCloud
50 | #ZK_HOST=""
51 |
52 | # Set the ZooKeeper client timeout (for SolrCloud mode)
53 | #ZK_CLIENT_TIMEOUT="15000"
54 |
55 | # By default the start script uses "localhost"; override the hostname here
56 | # for production SolrCloud environments to control the hostname exposed to cluster state
57 | #SOLR_HOST="192.168.1.1"
58 |
59 | # By default the start script uses UTC; override the timezone if needed
60 | #SOLR_TIMEZONE="UTC"
61 |
62 | # Set to true to activate the JMX RMI connector to allow remote JMX client applications
63 | # to monitor the JVM hosting Solr; set to "false" to disable that behavior
64 | # (false is recommended in production environments)
65 | #ENABLE_REMOTE_JMX_OPTS="false"
66 |
67 | # The script will use SOLR_PORT+10000 for the RMI_PORT or you can set it here
68 | # RMI_PORT=18983
69 |
70 | # Alfresco configuration. This file is automatically included by solr. You can define your custom settings here
71 | SOLR_OPTS="$SOLR_OPTS -Dsolr.jetty.request.header.size=1000000 -Dsolr.jetty.threads.stop.timeout=300000"
72 | SOLR_OPTS="$SOLR_OPTS -Djava.io.tmpdir={{ alf_home }}/temp"
73 | SOLR_OPTS="$SOLR_OPTS -Dsolr.solr.content.dir={{ solr_content_dir }}/contentstore"
74 |
75 | # Anything you add to the SOLR_OPTS variable will be included in the java
76 | # start command line as-is, in ADDITION to other options. If you specify the
77 | # -a option on start script, those options will be appended as well. Examples:
78 | #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=3000"
79 | #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoCommit.maxTime=60000"
80 | #SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true"
81 |
82 | # Location where the bin/solr script will save PID files for running instances
83 | # If not set, the script will create PID files in $SOLR_TIP/bin
84 | #SOLR_PID_DIR=
85 |
86 | # Path to a directory for Solr to store cores and their data. By default, Solr will use server/solr
87 | # If solr.xml is not stored in ZooKeeper, this directory needs to contain solr.xml
88 | #SOLR_HOME=
89 |
90 | # Solr provides a default Log4J configuration properties file in server/resources
91 | # however, you may want to customize the log settings and file appender location
92 | # so you can point the script to use a different log4j.properties file
93 | #LOG4J_PROPS=/var/solr/log4j.properties
94 |
95 | # Changes the logging level. Valid values: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Default is INFO
96 | # This is an alternative to changing the rootLogger in log4j.properties
97 | #SOLR_LOG_LEVEL=INFO
98 |
99 | # Location where Solr should write logs to. Absolute or relative to solr start dir
100 | #SOLR_LOGS_DIR=../../logs
101 | SOLR_LOGS_DIR={{ alf_home }}/alfresco-search-services/logs
102 | #LOG4J_PROPS=$SOLR_LOGS_DIR/log4j.properties
103 | LOG4J_PROPS={{ alf_home }}/alfresco-search-services/logs/log4j.properties
104 |
105 | # Sets the port Solr binds to, default is 8983
106 | SOLR_PORT={{ solr_port }}
107 |
108 | # Uncomment to set SSL-related system properties
109 | # Be sure to update the paths to the correct keystore for your environment
110 | #SOLR_SSL_KEY_STORE=/home/shalin/work/oss/shalin-lusolr/solr/server/etc/solr-ssl.keystore.jks
111 | #SOLR_SSL_KEY_STORE_PASSWORD=secret
112 | #SOLR_SSL_TRUST_STORE=/home/shalin/work/oss/shalin-lusolr/solr/server/etc/solr-ssl.keystore.jks
113 | #SOLR_SSL_TRUST_STORE_PASSWORD=secret
114 | #SOLR_SSL_NEED_CLIENT_AUTH=false
115 | #SOLR_SSL_WANT_CLIENT_AUTH=false
116 |
117 | # Uncomment if you want to override previously defined SSL values for HTTP client
118 | # otherwise keep them commented and the above values will automatically be set for HTTP clients
119 | #SOLR_SSL_CLIENT_KEY_STORE=
120 | #SOLR_SSL_CLIENT_KEY_STORE_PASSWORD=
121 | #SOLR_SSL_CLIENT_TRUST_STORE=
122 | #SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD=
123 |
124 | # Settings for authentication
125 | #SOLR_AUTHENTICATION_CLIENT_CONFIGURER=
126 | #SOLR_AUTHENTICATION_OPTS=
127 |
128 | # Settings for ZK ACL
129 | #SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \
130 | # -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \
131 | # -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
132 | # -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
133 | #SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
134 |
135 | SOLR_SOLR_CONTENT_DIR={{ solr_content_dir }}
136 |
--------------------------------------------------------------------------------
/templates/solrconfig.xml.archive.j2:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
23 |
24 |
31 |
32 |
38 | 4.9
39 |
40 |
60 |
61 |
65 |
68 |
69 |
76 | ${data.dir.root}/${data.dir.store}
77 |
78 |
92 |
93 |
95 |
96 |
97 |
98 |
107 |
108 |
109 |
129 |
130 |
131 |
138 |
139 |
143 |
144 |
145 |
146 |
150 |
151 |
152 |
155 |
156 |
157 |
165 |
166 |
167 |
168 |
174 |
180 |
181 |
189 |
192 |
193 |
199 |
200 |
201 | ${merger.maxMergeCount:6}
202 | ${merger.maxThreadCount:3}
203 |
204 |
205 |
206 |
225 | ${solr.lock.type:native}
226 |
227 |
236 |
239 |
240 |
243 |
244 |
245 |
250 |
253 |
254 |
265 |
268 |
269 |
270 |
271 |
272 |
276 |
280 |
283 |
284 |
293 | true
294 |
295 |
296 |
297 |
306 |
307 |
310 |
311 |
312 |
314 |
315 |
316 |
317 |
318 |
324 |
329 |
330 |
351 |
352 |
353 | ${solr.autoCommit.maxTime:-1}
354 | false
355 |
356 |
357 |
362 |
363 |
364 | ${solr.autoSoftCommit.maxTime:-1}
365 |
366 |
367 |
375 |
385 |
389 |
398 |
399 |
400 |
401 |
423 |
428 |
431 |
437 |
438 |
441 |
442 |
455 | ${solr.maxBooleanClauses:10000}
456 |
457 |
458 |
469 |
470 |
489 |
493 |
494 |
499 |
503 |
504 |
510 |
514 |
515 |
516 |
522 |
523 |
529 |
535 |
536 |
545 |
554 |
555 |
556 |
562 |
563 |
569 |
570 |
576 |
577 |
584 |
585 |
592 |
593 |
601 | true
602 |
603 |
616 |
619 |
620 |
629 | ${solr.queryResultWindowSize:512}
630 |
631 |
634 | ${solr.queryResultMaxDocsCached:2048}
635 |
636 |
652 |
655 |
656 |
657 |
661 |
662 |
663 |
664 |
665 |
672 | false
673 |
674 |
683 | 2
684 |
685 |
686 |
687 |
688 |
707 |
708 |
738 |
742 |
743 |
750 |
751 |
760 |
765 |
790 |
796 |
797 |
798 |
817 |
826 |
827 |
828 |
829 |
830 | afts
831 | explicit
832 | 10
833 | suggest
834 |
835 |
836 | setLocale
837 | rewriteFacetParameters
838 | consistencyComponent
839 | query
840 | facet
841 | mlt
842 | highlight
843 | stats
844 | debug
845 | clearLocale
846 | rewriteFacetCounts
847 |
848 | spellcheck
849 | spellcheckbackcompat
850 | setProcessedDenies
851 |
852 |
853 |
854 |
855 |
856 |
859 |
860 | explicit
861 | 10
862 | suggest
863 |
864 |
865 |
866 |
867 | setLocale
868 | rewriteFacetParameters
869 | consistencyComponent
870 | query
871 | facet
872 | mlt
873 | highlight
874 | stats
875 | debug
876 | clearLocale
877 | rewriteFacetCounts
878 |
879 | setProcessedDenies
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 | explicit
889 | json
890 | true
891 | suggest
892 |
893 |
894 |
895 |
896 |
897 |
908 |
909 |
910 | true
911 | json
912 | true
913 |
914 |
915 |
916 |
917 |
918 |
927 |
928 |
929 | explicit
930 |
931 |
932 | velocity
933 | browse
934 | layout
935 | Solritas
936 |
937 |
938 | edismax
939 |
940 | text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
941 | title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0
942 |
943 | text
944 | 100%
945 | *:*
946 | 10
947 | *,score
948 |
949 |
950 | text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
951 | title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0
952 |
953 | text,features,name,sku,id,manu,cat,title,description,keywords,author,resourcename
954 | 3
955 |
956 |
957 | on
958 | cat
959 | manu_exact
960 | content_type
961 | author_s
962 | ipod
963 | GB
964 | 1
965 | cat,inStock
966 | after
967 | price
968 | 0
969 | 600
970 | 50
971 | popularity
972 | 0
973 | 10
974 | 3
975 | manufacturedate_dt
976 | NOW/YEAR-10YEARS
977 | NOW
978 | +1YEAR
979 | before
980 | after
981 |
982 |
983 | on
984 | content features title name
985 | html
986 | <b>
987 | </b>
988 | 0
989 | title
990 | 0
991 | name
992 | 3
993 | 200
994 | content
995 | 750
996 |
997 |
998 | on
999 | false
1000 | 5
1001 | 2
1002 | 5
1003 | true
1004 | true
1005 | 5
1006 | 3
1007 |
1008 |
1009 |
1010 |
1011 | spellcheck
1012 |
1013 |
1014 |
1015 |
1016 |
1034 |
1035 |
1039 |
1044 |
1045 |
1046 |
1047 |
1048 |
1049 | application/json
1050 |
1051 |
1052 |
1053 |
1054 | application/csv
1055 |
1056 |
1057 |
1058 |
1063 |
1066 |
1067 | true
1068 | ignored_
1069 |
1070 |
1071 | true
1072 | links
1073 | ignored_
1074 |
1075 |
1076 |
1077 |
1078 |
1096 |
1099 |
1100 |
1101 |
1131 |
1134 |
1135 |
1136 |
1137 |
1138 | explicit
1139 | true
1140 |
1141 |
1142 |
1143 |
1156 |
1157 |
1163 | {% if solr_is_primary %}
1164 |
1165 | commit
1166 | startup
1167 | schema.xml,stopwords.txt
1168 |
1169 | {% endif %}
1170 | {% if solr_is_replica %}
1171 |
1172 | http://{{ solr_primary_host }}:{{ solr_primary_port }}/solr/archive/replication
1173 | 00:00:20
1174 | internal
1175 | 5000
1176 | 10000
1177 |
1178 | {% endif %}
1179 |
1180 |
1181 |
1223 |
1224 |
1231 |
1232 |
1233 | text_shingle
1234 |
1235 |
1238 |
1239 |
1240 |
1241 | default
1242 | suggest
1243 | solr.DirectSolrSpellChecker
1244 |
1245 | internal
1246 |
1247 | 0.5
1248 |
1249 | 2
1250 |
1251 | 1
1252 |
1253 | 5
1254 |
1255 | 4
1256 |
1257 | 0.01
1258 |
1261 |
1262 |
1263 |
1264 |
1265 | wordbreak
1266 | suggest
1267 | solr.WordBreakSolrSpellChecker
1268 | true
1269 | true
1270 | 10
1271 | 5
1272 |
1273 |
1274 |
1275 |
1276 |
1277 |
1278 |
1279 |
1292 |
1293 |
1294 | suggest
1295 |
1299 | default
1300 | wordbreak
1301 | on
1302 | true
1303 | 10
1304 | 5
1305 | 5
1306 | true
1307 | true
1308 | 10
1309 | 5
1310 |
1311 |
1312 | spellcheck
1313 | spellcheckbackcompat
1314 |
1315 |
1316 |
1317 |
1318 |
1319 |
1320 | shingleBasedSuggestions
1321 | ${solr.suggester.enabled:true}
1322 |
1323 | org.apache.solr.spelling.suggest.fst.WFSTLookupFactory
1324 | suggest
1325 | text_shingle
1326 | true
1327 |
1328 |
1329 |
1330 |
1331 |
1332 | true
1333 | 10
1334 | shingleBasedSuggestions
1335 |
1336 |
1337 | suggest
1338 |
1339 |
1340 |
1341 |
1342 |
1343 |
1344 |
1348 |
1349 |
1350 |
1357 |
1358 |
1359 | text
1360 | true
1361 |
1362 |
1363 | tvComponent
1364 |
1365 |
1366 |
1367 |
1377 |
1379 |
1380 | lingo
1381 |
1382 |
1394 | org.carrot2.clustering.lingo.LingoClusteringAlgorithm
1395 |
1396 |
1408 | clustering/carrot2
1409 |
1410 |
1411 |
1412 |
1413 | stc
1414 | org.carrot2.clustering.stc.STCClusteringAlgorithm
1415 |
1416 |
1417 |
1418 |
1419 | kmeans
1420 | org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm
1421 |
1422 |
1423 |
1424 |
1431 |
1435 |
1436 | true
1437 | true
1438 |
1439 | mltext@m___t@{http://www.alfresco.org/model/content/1.0}title
1440 |
1441 | id
1442 |
1443 | content@s___t@{http://www.alfresco.org/model/content/1.0}content
1444 |
1445 | true
1446 |
1447 |
1448 |
1449 | false
1450 |
1451 |
1452 | edismax
1453 |
1454 | text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
1455 |
1456 | *:*
1457 | 10
1458 | *,score
1459 |
1460 |
1461 | clustering
1462 |
1463 |
1464 |
1465 |
1472 |
1473 |
1474 |
1475 |
1476 |
1477 | true
1478 | false
1479 |
1480 |
1481 | terms
1482 |
1483 |
1484 |
1485 |
1486 |
1494 |
1495 |
1496 | text___
1497 | elevate.xml
1498 |
1499 |
1500 |
1501 |
1502 |
1503 | explicit
1504 | suggest
1505 |
1506 |
1507 | elevator
1508 |
1509 |
1510 |
1511 |
1515 |
1516 |
1517 |
1518 |
1519 |
1522 |
1523 | 100
1524 |
1525 |
1526 |
1527 |
1530 |
1532 |
1533 |
1534 | 70
1535 |
1536 | 0.5
1537 |
1538 | [-\w ,/\n\"']{20,200}
1539 |
1540 |
1541 |
1542 |
1543 |
1546 |
1547 | ]]>
1548 | ]]>
1549 |
1550 |
1551 |
1552 |
1553 |
1555 |
1556 |
1557 |
1559 |
1560 |
1561 |
1563 |
1564 |
1565 |
1568 |
1569 |
1570 |
1573 |
1578 |
1579 |
1580 |
1581 |
1583 |
1584 | ,,
1586 | ,,
1587 | ,,
1588 | ,,
1589 | ,]]>
1590 | ]]>
1591 |
1592 |
1593 |
1594 |
1597 |
1598 | 10
1599 | .,!?
1600 |
1601 |
1602 |
1603 |
1605 |
1606 |
1607 | WORD
1608 |
1609 |
1610 | en
1611 | US
1612 |
1613 |
1614 |
1615 |
1616 |
1617 |
1626 |
1635 |
1648 |
1649 |
1659 |
1670 |
1671 |
1677 |
1688 |
1689 |
1700 |
1703 |
1715 |
1716 |
1717 |
1721 | text/plain; charset=UTF-8
1722 |
1723 |
1724 |
1727 |
1728 |
1729 |
1730 |
1734 |
1735 | 5
1736 |
1737 |
1738 |
1746 |
1747 |
1750 |
1751 |
1758 |
1759 |
1763 |
1764 |
1765 |
1768 |
1788 |
1789 |
1790 |
1791 |
1792 |
1793 |
1794 |
1795 |
1796 |
1797 |
1798 | *:*
1799 |
1800 |
1801 |
1802 |
1803 |
1804 |
1805 | alfresco
1806 |
1807 |
1808 | setLocale
1809 | rewriteFacetParameters
1810 | consistencyComponent
1811 | query
1812 | facet
1813 | mlt
1814 | highlight
1815 | stats
1816 | debug
1817 | clearLocale
1818 | rewriteFacetCounts
1819 |
1820 | setProcessedDenies
1821 |
1822 |
1823 |
1824 |
1825 |
1826 |
1827 |
1828 | fingerprint
1829 |
1830 |
1831 |
1832 |
1833 |
1834 | afts
1835 |
1836 | false
1837 | false
1838 | 5
1839 | 2
1840 | 5
1841 | true
1842 | true
1843 | 5
1844 | 3
1845 |
1846 | mltext@m___t@{http://www.alfresco.org/model/content/1.0}title
1847 | id
1848 | content@s___t@{http://www.alfresco.org/model/content/1.0}content
1849 | true
1850 | false
1851 |
1852 | {!alfrescoReRank reRankQuery=$rqq reRankDocs=500 scale=true reRankWeight=3}
1853 | {!rrafts}RERANK_QUERY_FROM_CONTEXT
1854 |
1855 | rrafts
1856 |
1857 |
1858 | setLocale
1859 | rewriteFacetParameters
1860 | consistencyComponent
1861 | query
1862 | facet
1863 | mlt
1864 | highlight
1865 | stats
1866 | debug
1867 | clearLocale
1868 | rewriteFacetCounts
1869 |
1870 | spellcheck
1871 | spellcheckbackcompat
1872 | setProcessedDenies
1873 | clustering
1874 |
1875 |
1876 |
1877 |
1878 |
1879 |
1880 | cmis
1881 |
1882 |
1883 | setLocale
1884 | rewriteFacetParameters
1885 | consistencyComponent
1886 | query
1887 | facet
1888 | mlt
1889 | highlight
1890 | stats
1891 | debug
1892 | clearLocale
1893 | rewriteFacetCounts
1894 |
1895 | setProcessedDenies
1896 |
1897 |
1898 |
1899 |
1900 |
1901 |
1902 |
1903 | QUERY_PHASE
1904 |
1905 |
1906 | RERANK_PHASE
1907 |
1908 |
1909 |
1910 |
1911 |
1912 | conf/mime_types.csv
1913 |
1914 |
1915 |
1916 | 1
1917 | 10
1918 |
1919 |
1920 |
1921 |
1922 |
1923 |
1924 |
1925 |
1926 |
1927 |
1928 |
1929 |
1930 |
--------------------------------------------------------------------------------
/templates/solrcore.properties.alfresco.j2:
--------------------------------------------------------------------------------
1 | ### Replication
2 | {% if solr_is_primary %}
3 | enable.master=true
4 | enable.slave=false
5 | {% else %}
6 | enable.master=false
7 | enable.slave=true
8 | {% endif %}
9 |
10 | data.dir.root={{ solr_content_dir }}
11 | #point to any one of alfresco share node or balancer
12 | alfresco.host={{ solr_alfresco_host }}
13 | alfresco.port.ssl={{ solr_alfresco_ssl_port }}
14 | alfresco.port={{ solr_alfresco_port }}
15 | alfresco.secureComms={{ solr_alfresco_secure_comms }}
16 | enable.alfresco.tracking=true
17 |
18 | alfresco.commitInterval=2000
19 | alfresco.contentStreamLimit=10000000
20 | alfresco.stores=workspace\://SpacesStore
21 | alfresco.changeSetAclsBatchSize=500
22 | solr.pathCache.size=256
23 | solr.pathCache.initialSize=128
24 | solr.deniedCache.size=128
25 | solr.documentCache.autowarmCount=512
26 | solr.documentCache.initialSize=1024
27 | solr.filterCache.size=256
28 | solr.suggester.minSecsBetweenBuilds=3600
29 | solr.readerCache.initialSize=64
30 | #alfresco.port.ssl=8443
31 | solr.ownerCache.autowarmCount=0
32 | alfresco.encryption.ssl.keystore.passwordFileLocation=ssl-keystore-passwords.properties
33 | alfresco.encryption.ssl.truststore.passwordFileLocation=ssl-truststore-passwords.properties
34 | alfresco.transactionDocsBatchSize=500
35 | solr.authorityCache.size=128
36 | alfresco.recordUnindexedNodes=false
37 | solr.documentCache.size=1024
38 | solr.filterCache.initialSize=128
39 | solr.maxBooleanClauses=10000
40 | data.dir.store=alfresco
41 | solr.queryResultMaxDocsCached=2048
42 | alfresco.doPermissionChecks=true
43 | alfresco.contentUpdateBatchSize=1000
44 | solr.deniedCache.initialSize=64
45 | alfresco.threadDaemon=true
46 | alfresco.baseUrl=/alfresco
47 | solr.queryResultCache.initialSize=1024
48 | solr.readerCache.size=128
49 | alfresco.newSearcherInterval=3000
50 | alfresco.encryption.ssl.keystore.provider=
51 | alfresco.encryption.ssl.truststore.type=JCEKS
52 | alfresco.batch.count=5000
53 | alfresco.topTermSpanRewriteLimit=1000
54 | alfresco.encryption.ssl.truststore.provider=
55 | alfresco.encryption.ssl.keystore.type=JCEKS
56 | alfresco.maximumPoolSize=-1
57 | solr.ownerCache.size=128
58 | solr.pathCache.autowarmCount=32
59 | alfresco.maxHostConnections=200
60 | alfresco.metadata.ignore.datatype.1=app\:configurations
61 | alfresco.metadata.ignore.datatype.0=cm\:person
62 | solr.authorityCache.initialSize=64
63 | solr.queryResultCache.autowarmCount=4
64 | alfresco.threadPriority=5
65 | alfresco.corePoolSize=8
66 | alfresco.metadata.skipDescendantDocsForSpecificAspects=false
67 | solr.readerCache.autowarmCount=0
68 | alfresco.metadata.skipDescendantDocsForSpecificTypes=false
69 | alfresco.encryption.ssl.keystore.location=ssl.repo.client.keystore
70 | solr.filterCache.autowarmCount=32
71 | alfresco.socketTimeout=720000
72 | alfresco.template=rerank
73 | alfresco.keepAliveTime=120
74 | solr.queryResultCache.size=1024
75 | alfresco.maxTotalConnections=200
76 | alfresco.hole.retention=3600000
77 | alfresco.version=5.2.1
78 | alfresco.contentReadBatchSize=100
79 | solr.deniedCache.autowarmCount=0
80 | alfresco.lag=1000
81 | alfresco.workQueueSize=-1
82 | alfresco.hole.check.after=300000
83 | alfresco.cron=0/10 * * * * ? *
84 | alfresco.aclBatchSize=100
85 | alfresco.encryption.ssl.truststore.location=ssl.repo.client.truststore
86 | solr.queryResultWindowSize=512
87 | solr.authorityCache.autowarmCount=4
88 | alfresco.postfilter=true
89 | solr.ownerCache.initialSize=64
90 | shard.method=DB_ID
91 | solr.suggester.enabled=false
92 | alfresco.nodeBatchSize=100
93 |
--------------------------------------------------------------------------------
/templates/solrcore.properties.archive.j2:
--------------------------------------------------------------------------------
1 | ### Replication
2 | {% if solr_is_primary %}
3 | enable.master=true
4 | enable.slave=false
5 | {% else %}
6 | enable.master=false
7 | enable.slave=true
8 | {% endif %}
9 |
10 | data.dir.root={{ solr_content_dir }}
11 | #point to any one of alfresco share node or balancer
12 | alfresco.host={{ solr_alfresco_host }}
13 | alfresco.port.ssl={{ solr_alfresco_ssl_port }}
14 | alfresco.port={{ solr_alfresco_port }}
15 | alfresco.secureComms={{ solr_alfresco_secure_comms }}
16 | {% if solr_is_primary %}
17 | enable.alfresco.tracking=true
18 | {% else %}
19 | enable.alfresco.tracking=false
20 | {% endif %}
21 |
22 | alfresco.commitInterval=2000
23 | alfresco.contentStreamLimit=10000000
24 | alfresco.stores=archive\://SpacesStore
25 | alfresco.changeSetAclsBatchSize=500
26 | solr.pathCache.size=256
27 | solr.pathCache.initialSize=128
28 | solr.deniedCache.size=128
29 | solr.documentCache.autowarmCount=512
30 | solr.documentCache.initialSize=1024
31 | solr.filterCache.size=256
32 | solr.suggester.minSecsBetweenBuilds=3600
33 | solr.readerCache.initialSize=64
34 | #alfresco.port.ssl=8443
35 | solr.ownerCache.autowarmCount=0
36 | alfresco.encryption.ssl.keystore.passwordFileLocation=ssl-keystore-passwords.properties
37 | alfresco.encryption.ssl.truststore.passwordFileLocation=ssl-truststore-passwords.properties
38 | alfresco.transactionDocsBatchSize=500
39 | solr.authorityCache.size=128
40 | alfresco.recordUnindexedNodes=false
41 | solr.documentCache.size=1024
42 | solr.filterCache.initialSize=128
43 | solr.maxBooleanClauses=10000
44 | data.dir.store=archive
45 | solr.queryResultMaxDocsCached=2048
46 | alfresco.doPermissionChecks=true
47 | alfresco.contentUpdateBatchSize=1000
48 | solr.deniedCache.initialSize=64
49 | alfresco.threadDaemon=true
50 | alfresco.baseUrl=/alfresco
51 | solr.queryResultCache.initialSize=1024
52 | solr.readerCache.size=128
53 | alfresco.newSearcherInterval=3000
54 | alfresco.encryption.ssl.keystore.provider=
55 | alfresco.encryption.ssl.truststore.type=JCEKS
56 | alfresco.batch.count=5000
57 | alfresco.topTermSpanRewriteLimit=1000
58 | alfresco.encryption.ssl.truststore.provider=
59 | alfresco.encryption.ssl.keystore.type=JCEKS
60 | alfresco.maximumPoolSize=-1
61 | solr.ownerCache.size=128
62 | solr.pathCache.autowarmCount=32
63 | alfresco.maxHostConnections=200
64 | alfresco.metadata.ignore.datatype.1=app\:configurations
65 | alfresco.metadata.ignore.datatype.0=cm\:person
66 | solr.authorityCache.initialSize=64
67 | solr.queryResultCache.autowarmCount=4
68 | alfresco.threadPriority=5
69 | alfresco.corePoolSize=8
70 | alfresco.metadata.skipDescendantDocsForSpecificAspects=false
71 | solr.readerCache.autowarmCount=0
72 | alfresco.metadata.skipDescendantDocsForSpecificTypes=false
73 | alfresco.encryption.ssl.keystore.location=ssl.repo.client.keystore
74 | solr.filterCache.autowarmCount=32
75 | alfresco.socketTimeout=720000
76 | alfresco.template=rerank
77 | alfresco.keepAliveTime=120
78 | solr.queryResultCache.size=1024
79 | alfresco.maxTotalConnections=200
80 | alfresco.hole.retention=3600000
81 | alfresco.version=5.2.1
82 | alfresco.contentReadBatchSize=100
83 | solr.deniedCache.autowarmCount=0
84 | alfresco.lag=1000
85 | alfresco.workQueueSize=-1
86 | alfresco.hole.check.after=300000
87 | alfresco.cron=0/10 * * * * ? *
88 | alfresco.aclBatchSize=100
89 | alfresco.encryption.ssl.truststore.location=ssl.repo.client.truststore
90 | solr.queryResultWindowSize=512
91 | solr.authorityCache.autowarmCount=4
92 | alfresco.postfilter=true
93 | solr.ownerCache.initialSize=64
94 | shard.method=DB_ID
95 | solr.suggester.enabled=false
96 | alfresco.nodeBatchSize=100
97 |
--------------------------------------------------------------------------------