diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2dfed2d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +files/third-party +local/provisioning/files/third-party +local/.vagrant +.vault-passwd + diff --git a/README.md b/README.md new file mode 100644 index 0000000..f683095 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Example Ansible Alfresco Setup + +This project is an example of one way to automate Alfresco installation and +configuration management. + +## Setup + +TBD + +### SSH Keys + +TBD + +### Variables + +TBD + +### Managing Secrets Using Ansible Vault + +TBD + +## Installing Alfresco and Search + +TBD + +## Copying Configuration Files + +TBD diff --git a/ansible.cfg b/ansible.cfg new file mode 100644 index 0000000..f85f462 --- /dev/null +++ b/ansible.cfg @@ -0,0 +1,4 @@ +[defaults] +inventory = inventory +vault_password_file = .vault-passwd +remote_tmp = /tmp/.ansible-${USER}/tmp diff --git a/copyAlfrescoConfig.yml b/copyAlfrescoConfig.yml new file mode 100644 index 0000000..2b31f67 --- /dev/null +++ b/copyAlfrescoConfig.yml @@ -0,0 +1,5 @@ +--- +- hosts: '{{ hosts }}' + remote_user: alfresco + tasks: + - include_tasks: tasks/doCopyAlfrescoConfig.yml diff --git a/copyAllAlfrescoConfig.yml b/copyAllAlfrescoConfig.yml new file mode 100644 index 0000000..9560b60 --- /dev/null +++ b/copyAllAlfrescoConfig.yml @@ -0,0 +1,8 @@ +--- +- hosts: '{{ hosts }}' + remote_user: alfresco + tasks: + - include_tasks: tasks/doCopyGlobalProperties.yml + - include_tasks: tasks/doCopyTomcatConfig.yml + - include_tasks: tasks/doCopyShareConfig.yml + - include_tasks: tasks/doCopyAlfrescoConfig.yml diff --git a/copySolrConfig.yml b/copySolrConfig.yml new file mode 100644 index 0000000..2c51d4e --- /dev/null +++ b/copySolrConfig.yml @@ -0,0 +1,5 @@ +--- +- hosts: '{{ hosts }}' + remote_user: alfresco + tasks: + - include_tasks: tasks/doCopySolrConfig.yml diff --git a/copySolrCoreConfig.yml b/copySolrCoreConfig.yml new file mode 100644 index 0000000..2b11f3f --- /dev/null +++ b/copySolrCoreConfig.yml @@ -0,0 +1,5 @@ +--- +- hosts: '{{ hosts }}' + remote_user: alfresco + tasks: + - include_tasks: tasks/doCopySolrCoreConfig.yml diff --git a/files/alfresco-jmxrmi.access b/files/alfresco-jmxrmi.access new file mode 100644 index 0000000..c5aab07 --- /dev/null +++ b/files/alfresco-jmxrmi.access @@ -0,0 +1,2 @@ +monitorRole readonly +controlRole readwrite diff --git a/files/web-scripts-config-custom.xml b/files/web-scripts-config-custom.xml new file mode 100644 index 0000000..0b618d8 --- /dev/null +++ b/files/web-scripts-config-custom.xml @@ -0,0 +1,26 @@ + + + + + + GET + /service/enterprise/admin/.* + + + {token} + {token} + + + + + GET + /s/enterprise/admin/.* + + + {token} + {token} + + + + + diff --git a/group_vars/alfresco_dev/vars b/group_vars/alfresco_dev/vars new file mode 100644 index 0000000..e69de29 diff --git a/group_vars/alfresco_prod/vars b/group_vars/alfresco_prod/vars new file mode 100644 index 0000000..e69de29 diff --git a/group_vars/alfresco_test/vars b/group_vars/alfresco_test/vars new file mode 100644 index 0000000..e69de29 diff --git a/group_vars/all/vars b/group_vars/all/vars new file mode 100644 index 0000000..41c2981 --- /dev/null +++ b/group_vars/all/vars @@ -0,0 +1,96 @@ +alf_home: "/opt/alfresco" +alf_data: "{{ alf_home }}/alf_data" +alf_dir_contentstore: contentstore +alf_dir_contentstore_deleted: contentstore.deleted + +alf_initial_admin_password: "{{ vault_alf_initial_admin_password }}" +alf_context: alfresco +alf_host: 127.0.0.1 +alf_port: 8080 +alf_protocol: http + +share_context: share +share_host: 127.0.0.1 +share_port: 8080 +share_protocol: http + +alf_index_subsystem: solr6 +alf_solr_host: localhost +alf_solr_port: 8983 + +alf_tomcat_protocol: http +alf_tomcat_web_port: 8080 +alf_tomcat_ajp_port: 8009 +alf_tomcat_access_logs_dir: logs +alf_tomcat_catalina_logs_dir: "{{ alf_home }}/tomcat/logs" + +proxy_enabled: false +proxy_host: localhost +proxy_port: 80 +proxy_secure: "false" +proxy_scheme: http + +alf_user: "alfresco" +alf_group: "alfresco" +java_opts_xmx: 15250M + +alf_install_dir: /opt/alfresco-6.2.0 +alf_archive: "alfresco-content-services-community-distribution-6.2.0-ga.zip" +alf_archive_root_dir: "alfresco-content-services-community-distribution-6.2.0-ga" +tomcat_archive: "apache-tomcat-8.5.34.tar.gz" +tomcat_dir: "apache-tomcat-8.5.34" +search_archive: "alfresco-search-services-1.4.0.zip" +search_install_dir: '{{ alf_install_dir }}/alfresco-search-services' + +alf_db_driver: org.postgresql.Driver +alf_db_driver_file: postgresql-42.2.1.jar +alf_db_username: alfresco +alf_db_password: "{{ vault_alf_db_password }}" +alf_db_name: alfresco +alf_db_url: "jdbc:postgresql://localhost:5432/${db.name}" + +alf_java_home: "/usr/java/jdk-11.0.1" + +activemq_archive: "apache-activemq-5.15.6-bin.tar.gz" +activemq_dir: "apache-activemq-5.15.6" +activemq_opts_memory: "-Xms64M -Xmx1G" +activemq_user: "{{ alf_user }}" + +alf_clustering_enabled: false + +alf_notification_email: "false" + +alf_smart_folders_enabled: "false" + +alf_aos_base_url: http://localhost/alfresco/aos + +alf_ftp_port: 2121 + +alf_jmx_monitor_password: "{{ vault_alf_jmx_monitor_password }}" +alf_jmx_control_password: "{{ vault_alf_jmx_control_password }}" + +solr_java_mem: -Xms512m -Xmx512m +solr_port: 8983 +solr_content_dir: "{{ alf_home }}/alfresco-search-services" +solr_home: "{{ alf_home }}/alfresco-search-services/solrhome" +solr_java_home: "/usr/java/jdk-11.0.1" +solr_is_primary: true +solr_is_replica: false +solr_primary_host: localhost +solr_primary_port: 8080 +solr_alfresco_host: localhost +solr_alfresco_ssl_port: 8443 +solr_alfresco_port: 8080 +solr_alfresco_secure_comms: none + +audit_enabled: false +trashcan_cleaner_enabled: false + +mail_host: localhost +mail_from: alfresco.donotreply@alfresco.com + +thumbnails_enabled: true + +transformations_enabled: true + +ssl_enabled: false diff --git a/group_vars/all/vault b/group_vars/all/vault new file mode 100644 index 0000000..eefc17a --- /dev/null +++ b/group_vars/all/vault @@ -0,0 +1,15 @@ +$ANSIBLE_VAULT;1.1;AES256 +32613334373739616138383265313430396331343033643935303932303131643365386539313631 +6365376638343662666164313737393563323734326530360a616131356466306133386239316432 +63323963626233626463386361636266646230383962383238386462356164376561616264323235 +3836323161346131330a663961393932356535623766343031613337666639386264666266353865 +62393637336165306432343039636434333734353930333963313161656338316366653732306666 +37636230313838306166323763626162653862626337313565346137326638616331633765613232 +30656639313933383232383530633765613139393131623139663033613666656661663639393064 +61643936306463393630313036643035636530313835383865663530356231313933326130633139 +62656465373965346565343130323834636339353866653931363938343239643836663436373362 +33623264666564346563333233386639393164633665663965616137623062316637626463323262 +31616236333362646537366230326266643261323632326131343163313966653437643465646530 +64343565303732353532383339396238393034383731396362316237393536623530396166313635 +61363236356131646135613538336230616665663739653861633764366566313935376666653133 +3139376135383136663864656565326663663137343564303739 diff --git a/installActivemq.yml b/installActivemq.yml new file mode 100644 index 0000000..3674ee2 --- /dev/null +++ b/installActivemq.yml @@ -0,0 +1,6 @@ +--- +- hosts: '{{ hosts }}' + remote_user: alfresco + tasks: + - include_tasks: tasks/doInstallActivemq.yml + - include_tasks: tasks/doCopyActivemqConfig.yml diff --git a/installAlfresco.yml b/installAlfresco.yml new file mode 100644 index 0000000..d87a337 --- /dev/null +++ b/installAlfresco.yml @@ -0,0 +1,20 @@ +# +# Installs Alfresco to the specified hosts. +# +# Requires Alfresco distribution archive, Tomcat archive, and AOS archive to +# reside in files/third-party. +# +# Custom AMPs should be placed in files/amps and files/amps_share. +# +# Install location depends on alf_home, alf_install_dir, and tomcat_dir. +# +--- +- hosts: '{{ hosts }}' + remote_user: alfresco + tasks: + - include_tasks: tasks/doInstallTomcat.yml + - include_tasks: tasks/doInstallActivemq.yml + - include_tasks: tasks/doInstallAlfresco.yml + - include_tasks: tasks/doInstallPDFRenderer.yml + - include_tasks: tasks/doCopyAmps.yml + - include_tasks: tasks/doApplyAmps.yml diff --git a/installSearch.yml b/installSearch.yml new file mode 100644 index 0000000..dc87c3f --- /dev/null +++ b/installSearch.yml @@ -0,0 +1,13 @@ +# +# Installs Alfresco Search services to the specified hosts. +# +# Requires alfresco-search-services*.zip to be placed in files/third-party. the +# exact file name is specified in search_archive. +# +# Install location depends on alf_home, alf_install_dir, and search_install_dir. +# +--- +- hosts: '{{ hosts }}' + remote_user: alfresco + tasks: + - include_tasks: tasks/doInstallSearch.yml diff --git a/inventory b/inventory new file mode 100644 index 0000000..fd068de --- /dev/null +++ b/inventory @@ -0,0 +1,18 @@ +[alfresco_local] +192.168.33.10 + +[solr_local] +192.168.33.10 + +[alfresco_dev] + +[solr_dev] + +[alfresco_test] + +[solr_test] + +[alfresco_prod] + +[solr_prod] + diff --git a/local/README.md b/local/README.md new file mode 100644 index 0000000..f8df829 --- /dev/null +++ b/local/README.md @@ -0,0 +1,35 @@ +# Local virtual machine test server setup + +This directory is used to configure and run a local virtual machine as a test +server. This is handy for testing out various Ansible playbooks. The goal is for +the virtual machine to be set up similar to how a barebones server is set up +by the infrastructure team. + +## Pre-requisites + +In addition to Ansible, this setup expects you to have [Vagrant](https://www.vagrantup.com/) +and [VirtualBox](https://www.virtualbox.org/) installed. + +The first time you create the virtual machine, Vagrant will use Ansible to do +some additional configuration. The playbook that does this resides in the +provisioning directory. + +The provisioning playbook will also set up an SSH key for the alfresco user so +that you can ssh without providing a password. The path to the SSH key is +specified as a var in the playbook. + +## Running + +Before running vagrant, if you are using a Python virtual environment for +Ansible, activate the environment. Vagrant will use Ansible to set up the box. + +To start up the virtual machine, run `vagrant up`. + +If you need to connect you can either use `vagrant ssh` or you can SSH as you +normally would using the virtual machine's IP address (see the Vagrantfile). + +To check on the status of the machine, run `vagrant status`. + +To stop the virtual machine, run `vagrant halt`. + +To completely remove the virtual machine, run `vagrant destroy`. diff --git a/local/Vagrantfile b/local/Vagrantfile new file mode 100644 index 0000000..823b09f --- /dev/null +++ b/local/Vagrantfile @@ -0,0 +1,72 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure(2) do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://vagrantcloud.com/search. + config.vm.box = "centos/7" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + config.vm.network "forwarded_port", guest: 8080, host: 8080 + config.vm.network "forwarded_port", guest: 8443, host: 8443 + config.vm.network "forwarded_port", guest: 8983, host: 8983 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + config.vm.network "private_network", ip: "192.168.33.10" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + # config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + # config.vm.synced_folder "../data", "/vagrant_data" + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + config.vm.provider "virtualbox" do |vb| + # Display the VirtualBox GUI when booting the machine + #vb.gui = true + + # Customize the amount of memory on the VM: + vb.memory = "4096" + end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. + #config.vm.provision "shell", inline: <<-SHELL + # sudo apt-get update + # sudo apt-get install -y apache2 + # SHELL + config.vm.provision "ansible" do |ansible| + ansible.playbook = "provisioning/playbook.yml" + ansible.extra_vars = { ansible_ssh_user: 'vagrant' } + ansible.sudo = true + end + +end diff --git a/local/provisioning/files/limits.conf b/local/provisioning/files/limits.conf new file mode 100644 index 0000000..52bc99f --- /dev/null +++ b/local/provisioning/files/limits.conf @@ -0,0 +1,53 @@ +# /etc/security/limits.conf +# +#Each line describes a limit for a user in the form: +# +# +# +#Where: +# can be: +# - a user name +# - a group name, with @group syntax +# - the wildcard *, for default entry +# - the wildcard %, can be also used with %group syntax, +# for maxlogin limit +# +# can have the two values: +# - "soft" for enforcing the soft limits +# - "hard" for enforcing hard limits +# +# can be one of the following: +# - core - limits the core file size (KB) +# - data - max data size (KB) +# - fsize - maximum filesize (KB) +# - memlock - max locked-in-memory address space (KB) +# - nofile - max number of open file descriptors +# - rss - max resident set size (KB) +# - stack - max stack size (KB) +# - cpu - max CPU time (MIN) +# - nproc - max number of processes +# - as - address space limit (KB) +# - maxlogins - max number of logins for this user +# - maxsyslogins - max number of logins on the system +# - priority - the priority to run user process with +# - locks - max number of file locks the user can hold +# - sigpending - max number of pending signals +# - msgqueue - max memory used by POSIX message queues (bytes) +# - nice - max nice priority allowed to raise to values: [-20, 19] +# - rtprio - max realtime priority +# +# +# + +#* soft core 0 +#* hard rss 10000 +#@student hard nproc 20 +#@faculty soft nproc 20 +#@faculty hard nproc 50 +#ftp hard nproc 0 +#@student - maxlogins 4 +alfresco soft nofile 6000 +alfresco hard nofile 65536 +alfresco soft nproc 4096 +alfresco hard nproc 4096 +# End of file diff --git a/local/provisioning/files/pg_hba.conf b/local/provisioning/files/pg_hba.conf new file mode 100644 index 0000000..8674c49 --- /dev/null +++ b/local/provisioning/files/pg_hba.conf @@ -0,0 +1,90 @@ +# PostgreSQL Client Authentication Configuration File +# =================================================== +# +# Refer to the "Client Authentication" section in the PostgreSQL +# documentation for a complete description of this file. A short +# synopsis follows. +# +# This file controls: which hosts are allowed to connect, how clients +# are authenticated, which PostgreSQL user names they can use, which +# databases they can access. Records take one of these forms: +# +# local DATABASE USER METHOD [OPTIONS] +# host DATABASE USER ADDRESS METHOD [OPTIONS] +# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] +# +# (The uppercase items must be replaced by actual values.) +# +# The first field is the connection type: "local" is a Unix-domain +# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, +# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a +# plain TCP/IP socket. +# +# DATABASE can be "all", "sameuser", "samerole", "replication", a +# database name, or a comma-separated list thereof. The "all" +# keyword does not match "replication". Access to replication +# must be enabled in a separate record (see example below). +# +# USER can be "all", a user name, a group name prefixed with "+", or a +# comma-separated list thereof. In both the DATABASE and USER fields +# you can also write a file name prefixed with "@" to include names +# from a separate file. +# +# ADDRESS specifies the set of hosts the record matches. It can be a +# host name, or it is made up of an IP address and a CIDR mask that is +# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that +# specifies the number of significant bits in the mask. A host name +# that starts with a dot (.) matches a suffix of the actual host name. +# Alternatively, you can write an IP address and netmask in separate +# columns to specify the set of hosts. Instead of a CIDR-address, you +# can write "samehost" to match any of the server's own IP addresses, +# or "samenet" to match any address in any subnet that the server is +# directly connected to. +# +# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256", +# "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". +# Note that "password" sends passwords in clear text; "md5" or +# "scram-sha-256" are preferred since they send encrypted passwords. +# +# OPTIONS are a set of options for the authentication in the format +# NAME=VALUE. The available options depend on the different +# authentication methods -- refer to the "Client Authentication" +# section in the documentation for a list of which options are +# available for which authentication methods. +# +# Database and user names containing spaces, commas, quotes and other +# special characters must be quoted. Quoting one of the keywords +# "all", "sameuser", "samerole" or "replication" makes the name lose +# its special character, and just match a database or username with +# that name. +# +# This file is read on server startup and when the server receives a +# SIGHUP signal. If you edit the file on a running system, you have to +# SIGHUP the server for the changes to take effect, run "pg_ctl reload", +# or execute "SELECT pg_reload_conf()". +# +# Put your actual configuration here +# ---------------------------------- +# +# If you want to allow non-local connections, you need to add more +# "host" records. In that case you will also need to make PostgreSQL +# listen on a non-local interface via the listen_addresses +# configuration parameter, or via the -i or -h command line switches. + + + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all peer +local all all ident +# IPv4 local connections: +host all all 127.0.0.1/32 trust +# IPv6 local connections: +host all all ::1/128 ident +# Allow replication connections from localhost, by a user with the +# replication privilege. +local replication all peer +host replication all 127.0.0.1/32 ident +host replication all ::1/128 ident diff --git a/local/provisioning/files/sysctl.conf b/local/provisioning/files/sysctl.conf new file mode 100644 index 0000000..0cce7e8 --- /dev/null +++ b/local/provisioning/files/sysctl.conf @@ -0,0 +1,43 @@ +# Kernel sysctl configuration file for Red Hat Linux +# +# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and +# sysctl.conf(5) for more details. + +# Controls IP packet forwarding +net.ipv4.ip_forward = 0 + +# Controls source route verification +net.ipv4.conf.default.rp_filter = 1 + +# Do not accept source routing +net.ipv4.conf.default.accept_source_route = 0 + +# Controls the System Request debugging functionality of the kernel +kernel.sysrq = 0 + +# Controls whether core dumps will append the PID to the core filename. +# Useful for debugging multi-threaded applications. +kernel.core_uses_pid = 1 + +# Controls the use of TCP syncookies +net.ipv4.tcp_syncookies = 1 + +# Disable netfilter on bridges. +net.bridge.bridge-nf-call-ip6tables = 0 +net.bridge.bridge-nf-call-iptables = 0 +net.bridge.bridge-nf-call-arptables = 0 + +# Controls the default maxmimum size of a mesage queue +kernel.msgmnb = 65536 + +# Controls the maximum size of a message, in bytes +kernel.msgmax = 65536 + +# Controls the maximum shared segment size, in bytes +kernel.shmmax = 68719476736 + +# Controls the maximum number of shared memory segments, in pages +kernel.shmall = 4294967296 + +fs.file-max=10000 +vm.max_map_count=262144 diff --git a/local/provisioning/playbook.yml b/local/provisioning/playbook.yml new file mode 100644 index 0000000..efd98ef --- /dev/null +++ b/local/provisioning/playbook.yml @@ -0,0 +1,73 @@ +--- +- hosts: all + + vars: + alf_user: "alfresco" + alf_group: "alfresco" + pub_ssh_key: "/home/jpotts/.ssh/id_rsa.pub" + + tasks: + - name: Install selinux bindings + yum: name=libselinux-python state=present + + - name: Install net-tools + yum: name=net-tools state=present + + - name: Install lsof + yum: name=lsof state=present + + - name: Install unzip + yum: name=unzip state=present + + - name: Create {{ alf_group }} group + user: name={{ alf_group }} + + - name: Create {{ alf_user }} user + user: name={{ alf_user }} shell=/bin/bash group={{ alf_group }} + + - name: Add key to {{ alf_user }}'s authorized keys + authorized_key: user={{ alf_user }} key="{{ lookup('file', pub_ssh_key) }}" + + - name: Create /app directory + file: dest=/app mode=755 owner={{ alf_user }} group={{ alf_group }} state=directory + + - name: Install iptables-services + yum: + name: iptables-services + state: present + +# - name: Get iptables rules +# shell: iptables -L +# register: iptablesrules +# changed_when: false +# become: true + +# - name: Add port 8080 iptable rule +# command: /sbin/iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT -m comment --comment "Tomcat HTTP" +# become: true +# when: iptablesrules.stdout.find("Tomcat HTTP") == -1 + +# - name: Add port 8443 iptable rule +# command: /sbin/iptables -I INPUT 1 -p tcp --dport 8443 -j ACCEPT -m comment --comment "Tomcat HTTPS" +# become: true +# when: iptablesrules.stdout.find("Tomcat HTTPS") == -1 + +# - name: save iptables +# shell: iptables-save > /etc/sysconfig/iptables +# become: true + +# - name: restart iptables +# service: name=iptables state=restarted +# become: true + + - name: Copy limits.conf to set open file limits + copy: src=files/limits.conf dest=/etc/security/limits.conf + + - name: Copy sysctl.conf + copy: src=files/sysctl.conf dest=/etc/sysctl.conf + + - include_tasks: tasks/doInstallImageMagick.yml + - include_tasks: tasks/doInstallLibreOffice.yml + - include_tasks: tasks/doInstallJava.yml + - include_tasks: tasks/doInstallPostgres.yml + diff --git a/local/provisioning/tasks/doInstallImageMagick.yml b/local/provisioning/tasks/doInstallImageMagick.yml new file mode 100644 index 0000000..b4a19c2 --- /dev/null +++ b/local/provisioning/tasks/doInstallImageMagick.yml @@ -0,0 +1,3 @@ +--- +- name: Install ImageMagick + yum: name=ImageMagick state=present diff --git a/local/provisioning/tasks/doInstallJava.yml b/local/provisioning/tasks/doInstallJava.yml new file mode 100644 index 0000000..dadb871 --- /dev/null +++ b/local/provisioning/tasks/doInstallJava.yml @@ -0,0 +1,9 @@ +--- +- name: Make Java directory + file: path=/usr/java state=directory + +- name: Copy Java distribution + copy: src=files/third-party/openjdk-11.0.1_linux-x64_bin.tar.gz dest=/tmp/openjdk.tar.gz + +- name: Unzip Java distribution + unarchive: src=/tmp/openjdk.tar.gz dest=/usr/java copy=no diff --git a/local/provisioning/tasks/doInstallLibreOffice.yml b/local/provisioning/tasks/doInstallLibreOffice.yml new file mode 100644 index 0000000..96acd29 --- /dev/null +++ b/local/provisioning/tasks/doInstallLibreOffice.yml @@ -0,0 +1,3 @@ +--- +- name: Install LibreOffice Core + yum: name=libreoffice-core state=present diff --git a/local/provisioning/tasks/doInstallPostgres.yml b/local/provisioning/tasks/doInstallPostgres.yml new file mode 100644 index 0000000..f03743c --- /dev/null +++ b/local/provisioning/tasks/doInstallPostgres.yml @@ -0,0 +1,17 @@ +--- +- name: Add PostgreSQL RPM + yum_repository: + name: PostgreSQL + description: PostgreSQL + baseurl: https://download.postgresql.org/pub/repos/^Cm/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm + +- name: Add postgresql + yum: name=postgresql10-server state=present + +- name: Initialize the Database + command: /usr/pgsql-10/bin/postgresql-10-setup initdb + args: + creates: /var/lib/pgsql/10/data + +- name: Copy pg_hba.conf + copy: src=files/pg_hba.conf dest=/var/lib/pgsql/10/data diff --git a/removeSolrIndexMetadata.yml b/removeSolrIndexMetadata.yml new file mode 100644 index 0000000..5c5ec6a --- /dev/null +++ b/removeSolrIndexMetadata.yml @@ -0,0 +1,15 @@ +--- +- hosts: '{{ hosts }}' + remote_user: alfresco + tasks: + - name: Remove index from alfresco core + file: path={{ solr_home }}/alfresco/index state=absent + + - name: Remove snapshot_metadata from alfresco core + file: path={{ solr_home }}/alfresco/snapshot_metadata state=absent + + - name: Remove index from archive core + file: path={{ solr_home }}/archive/index state=absent + + - name: Remove snapshot_metadata from archive core + file: path={{ solr_home }}/archive/snapshot_metadata state=absent diff --git a/tasks/doApplyAmps.yml b/tasks/doApplyAmps.yml new file mode 100644 index 0000000..b6b1a81 --- /dev/null +++ b/tasks/doApplyAmps.yml @@ -0,0 +1,6 @@ +--- +- name: Run Alfresco MMT to install repo tier AMPs + shell: 'java -jar {{ alf_home }}/bin/alfresco-mmt*.jar install {{ alf_home }}/amps {{ alf_home }}/{{ tomcat_dir }}/webapps/alfresco.war -directory -nobackup -force' + +- name: Run Alfresco MMT to install Share tier AMPs + shell: 'java -jar {{ alf_home }}/bin/alfresco-mmt*.jar install {{ alf_home }}/amps_share {{ alf_home }}/{{ tomcat_dir }}/webapps/share.war -directory -nobackup -force' diff --git a/tasks/doCopyActivemqConfig.yml b/tasks/doCopyActivemqConfig.yml new file mode 100644 index 0000000..4daaa01 --- /dev/null +++ b/tasks/doCopyActivemqConfig.yml @@ -0,0 +1,3 @@ +--- +- name: Copy ActiveMQ env config + template: src=templates/activemq-env.j2 dest={{ alf_home }}/{{ activemq_dir }}/bin/env diff --git a/tasks/doCopyAlfrescoConfig.yml b/tasks/doCopyAlfrescoConfig.yml new file mode 100644 index 0000000..e1ae1c8 --- /dev/null +++ b/tasks/doCopyAlfrescoConfig.yml @@ -0,0 +1,15 @@ +--- +- name: Copy Bash Profile + template: src=templates/bash_profile.j2 dest=/home/{{ alf_user }}/.bash_profile + +- name: Create alfresco-jmx directory + file: dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx state=directory + +- name: Copy JMX access + copy: src=files/alfresco-jmxrmi.access dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx/alfresco-jmxrmi.access + +- name: Copy JMX access password + template: src=templates/alfresco-jmxrmi.password.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx/alfresco-jmxrmi.password + +- name: Copy Web Scripts Config + copy: src=files/web-scripts-config-custom.xml dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/ diff --git a/tasks/doCopyAmps.yml b/tasks/doCopyAmps.yml new file mode 100644 index 0000000..221e196 --- /dev/null +++ b/tasks/doCopyAmps.yml @@ -0,0 +1,18 @@ +--- +- name: Create amps directory + file: path='{{ alf_home }}/amps' state=directory + +- name: Create amps_share directory + file: path='{{ alf_home }}/amps_share' state=directory + +- name: Copy repository tier amps + copy: + src: "{{ item }}" + dest: '{{ alf_home }}/amps' + with_fileglob: "files/third-party/amps/*" + +- name: Copy Share tier amps + copy: + src: "{{ item }}" + dest: '{{ alf_home }}/amps_share' + with_fileglob: "files/third-party/amps_share/*" diff --git a/tasks/doCopyGlobalProperties.yml b/tasks/doCopyGlobalProperties.yml new file mode 100644 index 0000000..3509531 --- /dev/null +++ b/tasks/doCopyGlobalProperties.yml @@ -0,0 +1,3 @@ +--- +- name: Copy alfresco global properties file + template: src=templates/alfresco-global.properties.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco-global.properties diff --git a/tasks/doCopyLDAPConfig.yml b/tasks/doCopyLDAPConfig.yml new file mode 100644 index 0000000..1c4298f --- /dev/null +++ b/tasks/doCopyLDAPConfig.yml @@ -0,0 +1,6 @@ +--- +- name: Create LDAP Config directory (ldap1) + file: dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1 state=directory + +- name: Copy LDAP Config (ldap1) + template: src=templates/ldap-authentication.properties.ldap1.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/ldap-authentication.properties diff --git a/tasks/doCopyLicense.yml b/tasks/doCopyLicense.yml new file mode 100644 index 0000000..832b8a1 --- /dev/null +++ b/tasks/doCopyLicense.yml @@ -0,0 +1,3 @@ +--- +- name: Copy license file + copy: src=files/{{ alf_license_file }} dest={{ alf_home }} diff --git a/tasks/doCopyShareConfig.yml b/tasks/doCopyShareConfig.yml new file mode 100644 index 0000000..040de04 --- /dev/null +++ b/tasks/doCopyShareConfig.yml @@ -0,0 +1,6 @@ +--- +- name: Copy Share Config Custom + template: src=templates/share-config-custom.xml.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml + +- name: Copy slingshot app context + template: src=templates/custom-slingshot-application-context.xml.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/web-extension/custom-slingshot-application-context.xml diff --git a/tasks/doCopySolrConfig.yml b/tasks/doCopySolrConfig.yml new file mode 100644 index 0000000..04b0c50 --- /dev/null +++ b/tasks/doCopySolrConfig.yml @@ -0,0 +1,12 @@ +--- +- name: Copy Bash Profile + template: src=templates/bash_profile.j2 dest=/home/{{ alf_user }}/.bash_profile + +- name: Copy SOLR Shared Properties + template: src=templates/shared.properties.j2 dest={{ alf_home }}/alfresco-search-services/solrhome/conf/shared.properties + +- name: Copy SOLR Script + template: src=templates/solr.in.sh.j2 dest={{ alf_home }}/alfresco-search-services/solr.in.sh + +- name: Create data directory + file: path={{ solr_content_dir }} state=directory diff --git a/tasks/doCopySolrCoreConfig.yml b/tasks/doCopySolrCoreConfig.yml new file mode 100644 index 0000000..441a571 --- /dev/null +++ b/tasks/doCopySolrCoreConfig.yml @@ -0,0 +1,18 @@ +--- +- name: Copy Alfresco solrcore.properties + template: src=templates/solrcore.properties.alfresco.j2 dest={{ solr_home }}/alfresco/conf/solrcore.properties + +- name: Copy Archive solrcore.properties + template: src=templates/solrcore.properties.archive.j2 dest={{ solr_home }}/archive/conf/solrcore.properties + +- name: Copy Alfresco solrconfig.xml + template: src=templates/solrconfig.xml.alfresco.j2 dest={{ solr_home }}/alfresco/conf/solrconfig.xml + +- name: Copy Archive solrconfig.xml + template: src=templates/solrconfig.xml.archive.j2 dest={{ solr_home }}/archive/conf/solrconfig.xml + +#- name: Copy Alfresco solr truststore +# copy: src=files/ssl.repo.client.truststore dest={{ solr_home }}/alfresco/conf/ssl.repo.client.truststore + +#- name: Copy Archive solr truststore +# copy: src=files/ssl.repo.client.truststore dest={{ solr_home }}/archive/conf/ssl.repo.client.truststore diff --git a/tasks/doCopyTomcatConfig.yml b/tasks/doCopyTomcatConfig.yml new file mode 100644 index 0000000..7a75f54 --- /dev/null +++ b/tasks/doCopyTomcatConfig.yml @@ -0,0 +1,22 @@ +--- +- name: Copy Oracle JDBC driver + copy: src=files/third-party/{{ alf_db_driver_file }} dest={{ alf_home }}/tomcat/lib + +- name: Copy Tomcat catalina.sh + template: src=templates/catalina.sh.j2 dest={{ alf_home }}/tomcat/bin/catalina.sh + +- name: Copy Tomcat setenv.sh + template: src=templates/setenv.sh.j2 dest={{ alf_home }}/tomcat/bin/setenv.sh + +- name: Copy Tomcat ctl.sh + template: src=templates/ctl.sh.j2 dest={{ alf_home }}/tomcat/scripts/ctl.sh + +- name: Copy Tomcat server.xml + template: src=templates/server.xml.j2 dest={{ alf_home }}/tomcat/conf/server.xml + +- name: Copy web.xml + template: src=templates/web.xml.j2 dest={{ alf_home }}/tomcat/conf/web.xml + +- name: Copy keystore with server-specific cert + copy: src=files/certs/{{ ansible_hostname }}.jks dest={{ alf_home }}/alf_data/keystore/ + when: ssl_enabled diff --git a/tasks/doInstallAOS.yml b/tasks/doInstallAOS.yml new file mode 100644 index 0000000..286b1b3 --- /dev/null +++ b/tasks/doInstallAOS.yml @@ -0,0 +1,12 @@ +--- +- name: Create Alfresco AOS dist directory to hold unarchived distribution files + file: path={{ alf_home }}/dist/aos state=directory + +- name: Copy Alfresco AOS distribution archive + copy: src=files/third-party/{{ aos_archive }} dest=/tmp/ + +- name: Extract Alfresco archive + unarchive: src=/tmp/{{ aos_archive }} dest={{ alf_home }}/dist/aos copy=no + +- name: Copy AOS AMP + shell: 'cp {{ alf_home }}/dist/aos/*.amp {{ alf_home }}/amps/' diff --git a/tasks/doInstallActivemq.yml b/tasks/doInstallActivemq.yml new file mode 100644 index 0000000..9419c93 --- /dev/null +++ b/tasks/doInstallActivemq.yml @@ -0,0 +1,12 @@ +--- +- name: Copy ActiveMQ archive + copy: src=files/third-party/{{ activemq_archive }} dest=/tmp/ + +- name: Create ActiveMQ folder + file: path={{ alf_home }}/{{ activemq_dir }} state=directory + +- name: Extract ActiveMQ archive + unarchive: src=/tmp/{{ activemq_archive }} dest={{ alf_home }} copy=no + +- name: Create a symlink for the ActiveMQ install dir + file: src={{ alf_home }}/{{ activemq_dir }} dest={{ alf_home }}/activemq state=link diff --git a/tasks/doInstallAlfresco.yml b/tasks/doInstallAlfresco.yml new file mode 100644 index 0000000..442a255 --- /dev/null +++ b/tasks/doInstallAlfresco.yml @@ -0,0 +1,48 @@ +--- +- name: Create Alfresco dist directory to hold unarchived distribution files + file: path={{ alf_home }}/dist state=directory + +- name: Create amps directory + file: path={{ alf_home }}/amps state=directory + +- name: Create amps_share directory + file: path={{ alf_home }}/amps_share state=directory + +- name: Create platform modules directory + file: path={{ alf_home }}/modules/platform state=directory + +- name: Create share modules directory + file: path={{ alf_home }}/modules/share state=directory + +- name: Create bin directory + file: path={{ alf_home }}/bin state=directory + +- name: Create alf_data directory + file: path={{ alf_data }} state=directory + +- name: Copy Alfresco distribution archive + copy: src=files/third-party/{{ alf_archive }} dest=/tmp/ + +- name: Extract Alfresco archive + unarchive: src=/tmp/{{ alf_archive }} dest={{ alf_home }}/dist copy=no + +- name: Copy Share Services AMP + shell: 'cp {{ alf_home }}/dist/{{ alf_archive_root_dir }}/amps/alfresco-share-services.amp {{ alf_home }}/amps/' + +- name: Copy bin files + shell: 'for f in {{ alf_home }}/dist/{{ alf_archive_root_dir }}/bin/*; do cp $f {{ alf_home }}/bin/; done' + +- name: Make Alfresco scripts user executable + file: dest="{{ alf_home }}/bin/{{ item }}" mode=u+x + with_items: + - apply_amps.sh + - clean_tomcat.sh + +- name: Copy Tomcat conf, lib, shared, and webapps files + shell: 'for f in {{ alf_home }}/dist/{{ alf_archive_root_dir }}/web-server/*; do cp -R $f {{ alf_home }}/{{ tomcat_dir }}/; done' + +- name: Copy database driver into Tomcat lib + copy: src=files/third-party/{{ alf_db_driver_file }} dest={{ alf_home }}/{{ tomcat_dir }}/lib/ + +- name: Copy Alfresco keystore directory into alf_data + shell: 'cp -R {{ alf_home }}/dist/{{ alf_archive_root_dir }}/alf_data/keystore {{ alf_data }}/' diff --git a/tasks/doInstallPDFRenderer.yml b/tasks/doInstallPDFRenderer.yml new file mode 100644 index 0000000..5efcfd0 --- /dev/null +++ b/tasks/doInstallPDFRenderer.yml @@ -0,0 +1,18 @@ +--- +- name: Create Alfresco dist directory to hold unarchived distribution files + file: path={{ alf_home }}/dist state=directory + +- name: Copy Alfresco distribution archive + copy: src=files/third-party/{{ alf_archive }} dest=/tmp/ + +- name: Extract Alfresco archive + unarchive: src=/tmp/{{ alf_archive }} dest={{ alf_home }}/dist copy=no + +- name: Create Alfresco common directory + file: path={{ alf_home }}/common state=directory + +- name: Extract PDF Renderer + unarchive: + src: '{{ alf_home }}/dist/{{ alf_archive_root_dir }}/alfresco-pdf-renderer/alfresco-pdf-renderer-1.1-linux.tgz' + dest: '{{ alf_home }}/common' + copy: no diff --git a/tasks/doInstallSearch.yml b/tasks/doInstallSearch.yml new file mode 100644 index 0000000..7395c3d --- /dev/null +++ b/tasks/doInstallSearch.yml @@ -0,0 +1,17 @@ +--- +- name: Copy Alfresco Search Services distribution archive + copy: src=files/third-party/{{ search_archive }} dest=/tmp/ + +- stat: + path: '{{ search_install_dir }}' + register: p + +- fail: + msg: Search install directory already exists. Delete or rename it before continuing. + when: p.stat.exists + +- name: Create search install directory + file: path={{ search_install_dir }} state=directory + +- name: Extract Alfresco archive + unarchive: src=/tmp/{{ search_archive }} dest={{ alf_home }} copy=no diff --git a/tasks/doInstallTomcat.yml b/tasks/doInstallTomcat.yml new file mode 100644 index 0000000..7521f80 --- /dev/null +++ b/tasks/doInstallTomcat.yml @@ -0,0 +1,45 @@ +--- +- name: Create Alfresco home + file: path={{ alf_home }} state=directory + +- name: Copy Tomcat archive + copy: src=files/third-party/{{ tomcat_archive }} dest=/tmp/ + +- name: Create Tomcat folder + file: path={{ alf_home }}/{{ tomcat_dir }} state=directory + +- name: Extract Tomcat archive + unarchive: src=/tmp/{{ tomcat_archive }} dest={{ alf_home }} copy=no + +- name: Create a symlink for the Tomcat install dir + file: src={{ alf_home }}/{{ tomcat_dir }} dest={{ alf_home }}/tomcat state=link + +- name: Delete docs webapp + file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/docs state=absent + +- name: Delete examples webapp + file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/examples state=absent + +- name: Delete host-manager webapp + file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/host-manager state=absent + +- name: Delete manager webapp + file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/manager state=absent + +- name: Delete ROOT webapp + file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/ROOT state=absent + +- name: Create shared loader classes directory + file: path={{ alf_home }}/{{ tomcat_dir }}/shared/classes state=directory + +- name: Create shared loader lib directory + file: path={{ alf_home }}/{{ tomcat_dir }}/shared/lib state=directory + +- name: Configure shared class loader + replace: + path: '{{ alf_home }}/{{ tomcat_dir }}/conf/catalina.properties' + regexp: 'shared.loader=' + replace: 'shared.loader=${catalina.base}/shared/classes/' + +- name: Create Tomcat scripts directory (used by old Alfresco releases) + file: path={{ alf_home }}/{{tomcat_dir }}/scripts state=directory diff --git a/tasks/doSetupDirectories.yml b/tasks/doSetupDirectories.yml new file mode 100644 index 0000000..07a8f35 --- /dev/null +++ b/tasks/doSetupDirectories.yml @@ -0,0 +1,17 @@ +--- +- stat: + path: '{{ alf_home }}' + register: sym + +- fail: + msg: Alfresco home must be a symbolic link or must not exist + when: sym.stat.islnk is defined and sym.stat.islnk == False + +- name: Remove previous Alfresco home link + file: path={{ alf_home }} state=absent + +- name: Create base Alfresco install directory + file: path={{ alf_install_dir }} state=directory + +- name: Create a symlink that points Alfresco home at the install directory + file: src={{ alf_install_dir }} dest={{ alf_home }} state=link diff --git a/templates/activemq-env.j2 b/templates/activemq-env.j2 new file mode 100644 index 0000000..a45a9d8 --- /dev/null +++ b/templates/activemq-env.j2 @@ -0,0 +1,115 @@ +#!/bin/sh +# ------------------------------------------------------------------------ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------ +# +# Configuration file for running Apache Active MQ as standalone provider. +# +# This file overwrites the predefined settings of the sysv init-script. +# You can also use alternate location for default settings - +# invoke the init-script without a argument an review help section "Configuration of this script" +# /etc/default/activemq /.activemqrc /bin/env + +# Active MQ installation dirs +# ACTIVEMQ_HOME="/" +# ACTIVEMQ_BASE="$ACTIVEMQ_HOME" +# ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf" +# ACTIVEMQ_DATA="$ACTIVEMQ_BASE/data" +# ACTIVEMQ_TMP="$ACTIVEMQ_BASE/tmp" + +# Set jvm memory configuration (minimal/maximum amount of memory) +ACTIVEMQ_OPTS_MEMORY="{{ activemq_opts_memory }}" + +if [ -z "$ACTIVEMQ_OPTS" ] ; then + ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config" +fi + +if [ -z "$ACTIVEMQ_OUT" ]; then + ACTIVEMQ_OUT="/dev/null" +fi + +# Uncomment to enable audit logging +#ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.audit=true" + +# Set jvm jmx configuration +# This enables jmx access over a configured jmx-tcp-port. +# You have to configure the first four settings if you run a ibm jvm, caused by the +# fact that IBM's jvm does not support VirtualMachine.attach(PID). +# JMX access is needed for quering a running activemq instance to gain data or to +# trigger management operations. +# +# Example for ${ACTIVEMQ_CONF}/jmx.access: +# --- +# # The "monitorRole" role has readonly access. +# # The "controlRole" role has readwrite access. +# monitorRole readonly +# controlRole readwrite +# --- +# +# Example for ${ACTIVEMQ_CONF}/jmx.password: +# --- +# # The "monitorRole" role has password "abc123". +# # # The "controlRole" role has password "abcd1234". +# monitorRole abc123 +# controlRole abcd1234 +# --- +# +# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099 " +# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password" +# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access" +# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false" +ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote" + +# Set jvm jmx configuration for controlling the broker process +# You only have to configure the first four settings if you run a ibm jvm, caused by the +# fact that IBM's jvm does not support VirtualMachine.attach(PID) +# (see also com.sun.management.jmxremote.port, .jmx.password.file and .jmx.access.file ) +#ACTIVEMQ_SUNJMX_CONTROL="--jmxurl service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/jmxrmi --jmxuser controlRole --jmxpassword abcd1234" +ACTIVEMQ_SUNJMX_CONTROL="" + +# Specify the queue manager URL for using "browse" option of sysv initscript +if [ -z "$ACTIVEMQ_QUEUEMANAGERURL" ]; then + ACTIVEMQ_QUEUEMANAGERURL="--amqurl tcp://localhost:61616" +fi + +# Set additional JSE arguments +if [ -z "$ACTIVEMQ_SSL_OPTS" ] ; then + #ACTIVEMQ_SSL_OPTS="-Djava.security.properties=$ACTIVEMQ_CONF/java.security" + ACTIVEMQ_SSL_OPTS="" +fi + +# Uncomment to enable remote debugging +#ACTIVEMQ_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" + +# ActiveMQ tries to shutdown the broker by jmx, +# after a specified number of seconds send SIGKILL +if [ -z "$ACTIVEMQ_KILL_MAXSECONDS" ]; then + ACTIVEMQ_KILL_MAXSECONDS=30 +fi + +# Configure a user with non root privileges, if no user is specified do not change user +# (the entire activemq installation should be owned by this user) +ACTIVEMQ_USER="{{ activemq_user }}" + +# location of the pidfile +# ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq.pid" + +# Location of the java installation +# Specify the location of your java installation using JAVA_HOME, or specify the +# path to the "java" binary using JAVACMD +# (set JAVACMD to "auto" for automatic detection) +JAVA_HOME="{{ alf_java_home }}" +#JAVACMD="auto" diff --git a/templates/alfresco-global.properties.j2 b/templates/alfresco-global.properties.j2 new file mode 100644 index 0000000..8a8ae71 --- /dev/null +++ b/templates/alfresco-global.properties.j2 @@ -0,0 +1,95 @@ + +dir.root={{ alf_home }}/alf_data + +### Host Configuration ### +alfresco.context={{ alf_context }} +alfresco.host={{ alf_host }} +alfresco.port={{ alf_port }} +alfresco.protocol={{ alf_protocol }} +share.context={{ share_context }} +share.host={{ share_host }} +share.port={{ share_port }} +share.protocol={{ share_protocol }} + +### database connection properties ### +db.driver={{ alf_db_driver }} +db.username={{ alf_db_username }} +db.password={{ alf_db_password }} +db.name={{ alf_db_name }} +db.url={{ alf_db_url }} +# 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. +db.pool.max=275 +db.pool.validate.query= + +# The server mode. Set value here +# UNKNOWN | TEST | BACKUP | PRODUCTION +system.serverMode=UNKNOWN + +### FTP Server Configuration ### +ftp.port={{ alf_ftp_port }} + +### RMI registry port for JMX ### +alfresco.rmi.services.port=50500 +alfresco.rmi.services.host={{ ansible_hostname }} +monitor.rmi.service.port=50501 +alfresco.jmx.connector.enabled=true +alfresco.jmx.dir={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx + +### External executable locations ### +ooo.exe=/bin/soffice.bin +ooo.enabled=true +ooo.port=8100 +img.root=/ +img.dyn=/lib +img.exe=/bin/convert +alfresco-pdf-renderer.root={{ alf_home }}/common/alfresco-pdf-renderer +alfresco-pdf-renderer.exe=${alfresco-pdf-renderer.root}/alfresco-pdf-renderer + +jodconverter.enabled=true +jodconverter.officeHome={{ alf_home }}/libreoffice +jodconverter.portNumbers=8100 + +### Initial admin password ### +alfresco_user_store.adminpassword={{ alf_initial_admin_password }} + +### E-mail site invitation setting ### +notification.email.siteinvite={{ alf_notification_email }} + +### Outbound mail settings ### +mail.host={{ mail_host }} +mail.from.default={{ mail_from }} +mail.from.enabled=false + +### License location ### +dir.license.external={{ alf_home }} + +### Solr indexing ### +index.subsystem.name={{ alf_index_subsystem }} +dir.keystore=${dir.root}/keystore +solr.host={{ alf_solr_host }} +solr.protocol=http +solr.secureComms=none +solr.port={{ alf_solr_port }} +solr.baseUrl=/solr + +### Smart Folders Config Properties ### +smart.folders.enabled={{ alf_smart_folders_enabled }} + +aos.baseUrlOverwrite={{ alf_aos_base_url }} + +{% if audit_enabled %} +### Audit Service Settings ### +audit.enabled=true +audit.alfresco-access.enabled=true +audit.alfresco-access.sub-actions.enabled=false + +{% endif %} + +### Alfresco Cloud Sync ### +sync.mode=OFF + +### Alfresco Transormation Service Settings ### + +transform.service.enabled=true +local.transform.service.enabled=false +legacy.transform.service.enabled=true diff --git a/templates/alfresco-jmxrmi.password.j2 b/templates/alfresco-jmxrmi.password.j2 new file mode 100644 index 0000000..4257673 --- /dev/null +++ b/templates/alfresco-jmxrmi.password.j2 @@ -0,0 +1,2 @@ +monitorRole {{ alf_jmx_monitor_password }} +controlRole {{ alf_jmx_control_password }} diff --git a/templates/bash_profile.j2 b/templates/bash_profile.j2 new file mode 100644 index 0000000..4b7fd96 --- /dev/null +++ b/templates/bash_profile.j2 @@ -0,0 +1,15 @@ +# .bash_profile + +# Get the aliases and functions +if [ -f ~/.bashrc ]; then + . ~/.bashrc +fi + +# User specific environment and startup programs + +PATH=$PATH:/usr/sbin:/sbin:$HOME/bin +JAVA_HOME={{ alf_java_home }} +PATH=$JAVA_HOME/bin:$PATH + +export PATH +export JAVA_HOME diff --git a/templates/catalina.sh.j2 b/templates/catalina.sh.j2 new file mode 100755 index 0000000..163166b --- /dev/null +++ b/templates/catalina.sh.j2 @@ -0,0 +1,650 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ----------------------------------------------------------------------------- +# Control Script for the CATALINA Server +# +# Environment Variable Prerequisites +# +# Do not set the variables in this script. Instead put them into a script +# setenv.sh in CATALINA_BASE/bin to keep your customizations separate. +# +# CATALINA_HOME May point at your Catalina "build" directory. +# +# CATALINA_BASE (Optional) Base directory for resolving dynamic portions +# of a Catalina installation. If not present, resolves to +# the same directory that CATALINA_HOME points to. +# +# CATALINA_OUT (Optional) Full path to a file where stdout and stderr +# will be redirected. +# Default is $CATALINA_BASE/logs/catalina.out +# +# CATALINA_OPTS (Optional) Java runtime options used when the "start", +# "run" or "debug" command is executed. +# Include here and not in JAVA_OPTS all options, that should +# only be used by Tomcat itself, not by the stop process, +# the version command etc. +# Examples are heap size, GC logging, JMX ports etc. +# +# CATALINA_TMPDIR (Optional) Directory path location of temporary directory +# the JVM should use (java.io.tmpdir). Defaults to +# $CATALINA_BASE/temp. +# +# JAVA_HOME Must point at your Java Development Kit installation. +# Required to run the with the "debug" argument. +# +# JRE_HOME Must point at your Java Runtime installation. +# Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME +# are both set, JRE_HOME is used. +# +# JAVA_OPTS (Optional) Java runtime options used when any command +# is executed. +# Include here and not in CATALINA_OPTS all options, that +# should be used by Tomcat and also by the stop process, +# the version command etc. +# Most options should go into CATALINA_OPTS. +# +# JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories +# containing some jars in order to allow replacement of APIs +# created outside of the JCP (i.e. DOM and SAX from W3C). +# It can also be used to update the XML parser implementation. +# This is only supported for Java <= 8. +# Defaults to $CATALINA_HOME/endorsed. +# +# JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start" +# command is executed. The default is "dt_socket". +# +# JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start" +# command is executed. The default is localhost:8000. +# +# JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start" +# command is executed. Specifies whether JVM should suspend +# execution immediately after startup. Default is "n". +# +# JPDA_OPTS (Optional) Java runtime options used when the "jpda start" +# command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS, +# and JPDA_SUSPEND are ignored. Thus, all required jpda +# options MUST be specified. The default is: +# +# -agentlib:jdwp=transport=$JPDA_TRANSPORT, +# address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND +# +# JSSE_OPTS (Optional) Java runtime options used to control the TLS +# implementation when JSSE is used. Default is: +# "-Djdk.tls.ephemeralDHKeySize=2048" +# +# CATALINA_PID (Optional) Path of the file which should contains the pid +# of the catalina startup java process, when start (fork) is +# used +# +# LOGGING_CONFIG (Optional) Override Tomcat's logging config file +# Example (all one line) +# LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" +# +# LOGGING_MANAGER (Optional) Override Tomcat's logging manager +# Example (all one line) +# LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +# +# UMASK (Optional) Override Tomcat's default UMASK of 0027 +# +# USE_NOHUP (Optional) If set to the string true the start command will +# use nohup so that the Tomcat process will ignore any hangup +# signals. Default is "false" unless running on HP-UX in which +# case the default is "true" +# ----------------------------------------------------------------------------- + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false +darwin=false +os400=false +hpux=false +case "`uname`" in +CYGWIN*) cygwin=true;; +Darwin*) darwin=true;; +OS400*) os400=true;; +HP-UX*) hpux=true;; +esac + +# resolve links - $0 may be a softlink +PRG="$0" + +while [ -h "$PRG" ]; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`/"$link" + fi +done + +# Get standard environment variables +PRGDIR=`dirname "$PRG"` + +# Only set CATALINA_HOME if not already set +[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd` + +# Copy CATALINA_BASE from CATALINA_HOME if not already set +[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME" + +# Ensure that any user defined CLASSPATH variables are not used on startup, +# but allow them to be specified in setenv.sh, in rare case when it is needed. +CLASSPATH= + +if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then + . "$CATALINA_BASE/bin/setenv.sh" +elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then + . "$CATALINA_HOME/bin/setenv.sh" +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"` + [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"` + [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"` + [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a colon +# as this is used as the separator in the classpath and Java provides no +# mechanism for escaping if the same character appears in the path. +case $CATALINA_HOME in + *:*) echo "Using CATALINA_HOME: $CATALINA_HOME"; + echo "Unable to start as CATALINA_HOME contains a colon (:) character"; + exit 1; +esac +case $CATALINA_BASE in + *:*) echo "Using CATALINA_BASE: $CATALINA_BASE"; + echo "Unable to start as CATALINA_BASE contains a colon (:) character"; + exit 1; +esac + +# For OS400 +if $os400; then + # Set job priority to standard for interactive (interactive - 6) by using + # the interactive priority - 6, the helper threads that respond to requests + # will be running at the same priority as interactive jobs. + COMMAND='chgjob job('$JOBNAME') runpty(6)' + system $COMMAND + + # Enable multi threading + export QIBM_MULTI_THREADED=Y +fi + +# Get standard Java environment variables +if $os400; then + # -r will Only work on the os400 if the files are: + # 1. owned by the user + # 2. owned by the PRIMARY group of the user + # this will not work if the user belongs in secondary groups + . "$CATALINA_HOME"/bin/setclasspath.sh +else + if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then + . "$CATALINA_HOME"/bin/setclasspath.sh + else + echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh" + echo "This file is needed to run this program" + exit 1 + fi +fi + +# Add on extra jar files to CLASSPATH +if [ ! -z "$CLASSPATH" ] ; then + CLASSPATH="$CLASSPATH": +fi +CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar + +if [ -z "$CATALINA_OUT" ] ; then + #CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out + CATALINA_OUT={{ alf_tomcat_catalina_logs_dir }}/catalina.out +fi + +if [ -z "$CATALINA_TMPDIR" ] ; then + # Define the java.io.tmpdir to use for Catalina + #CATALINA_TMPDIR="$CATALINA_BASE"/temp + CATALINA_TMPDIR={{ alf_home }}/temp +fi + +# Add tomcat-juli.jar to classpath +# tomcat-juli.jar can be over-ridden per instance +if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then + CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar +else + CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar +fi + +# Bugzilla 37848: When no TTY is available, don't output to console +have_tty=0 +if [ "`tty`" != "not a tty" ]; then + have_tty=1 +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"` + JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"` + CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"` + CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"` + CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"` + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$JAVA_ENDORSED_DIRS" ] && JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"` +fi + +if [ -z "$JSSE_OPTS" ] ; then + JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048" +fi +JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS" + +# Register custom URL handlers +# Do this here so custom URL handles (specifically 'war:...') can be used in the security policy +JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources" + +# Set juli LogManager config file if it is present and an override has not been issued +if [ -z "$LOGGING_CONFIG" ]; then + if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then + LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" + else + # Bugzilla 45585 + LOGGING_CONFIG="-Dnop" + fi +fi + +if [ -z "$LOGGING_MANAGER" ]; then + LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +fi + +# Set UMASK unless it has been overridden +if [ -z "$UMASK" ]; then + UMASK="0027" +fi +umask $UMASK + +# Java 9 no longer supports the java.endorsed.dirs +# system property. Only try to use it if +# JAVA_ENDORSED_DIRS was explicitly set +# or CATALINA_HOME/endorsed exists. +ENDORSED_PROP=ignore.endorsed.dirs +if [ -n "$JAVA_ENDORSED_DIRS" ]; then + ENDORSED_PROP=java.endorsed.dirs +fi +if [ -d "$CATALINA_HOME/endorsed" ]; then + ENDORSED_PROP=java.endorsed.dirs +fi + +# Make the umask available when using the org.apache.catalina.security.SecurityListener +JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`" + +if [ -z "$USE_NOHUP" ]; then + if $hpux; then + USE_NOHUP="true" + else + USE_NOHUP="false" + fi +fi +unset _NOHUP +if [ "$USE_NOHUP" = "true" ]; then + _NOHUP=nohup +fi + +# Add the JAVA 9 specific start-up parameters required by Tomcat +JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.lang=ALL-UNNAMED" +JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.io=ALL-UNNAMED" +JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED" +export JDK_JAVA_OPTIONS + +# ----- Execute The Requested Command ----------------------------------------- + +# Bugzilla 37848: only output this if we have a TTY +if [ $have_tty -eq 1 ]; then + echo "Using CATALINA_BASE: $CATALINA_BASE" + echo "Using CATALINA_HOME: $CATALINA_HOME" + echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR" + if [ "$1" = "debug" ] ; then + echo "Using JAVA_HOME: $JAVA_HOME" + else + echo "Using JRE_HOME: $JRE_HOME" + fi + echo "Using CLASSPATH: $CLASSPATH" + if [ ! -z "$CATALINA_PID" ]; then + echo "Using CATALINA_PID: $CATALINA_PID" + fi +fi + +if [ "$1" = "jpda" ] ; then + if [ -z "$JPDA_TRANSPORT" ]; then + JPDA_TRANSPORT="dt_socket" + fi + if [ -z "$JPDA_ADDRESS" ]; then + JPDA_ADDRESS="localhost:8000" + fi + if [ -z "$JPDA_SUSPEND" ]; then + JPDA_SUSPEND="n" + fi + if [ -z "$JPDA_OPTS" ]; then + JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND" + fi + CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS" + shift +fi + +if [ "$1" = "debug" ] ; then + if $os400; then + echo "Debug command not available on OS400" + exit 1 + else + shift + if [ "$1" = "-security" ] ; then + if [ $have_tty -eq 1 ]; then + echo "Using Security Manager" + fi + shift + exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ + -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \ + -classpath "$CLASSPATH" \ + -sourcepath "$CATALINA_HOME"/../../java \ + -Djava.security.manager \ + -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \ + -Dcatalina.base="$CATALINA_BASE" \ + -Dcatalina.home="$CATALINA_HOME" \ + -Djava.io.tmpdir="$CATALINA_TMPDIR" \ + org.apache.catalina.startup.Bootstrap "$@" start + else + exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ + -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \ + -classpath "$CLASSPATH" \ + -sourcepath "$CATALINA_HOME"/../../java \ + -Dcatalina.base="$CATALINA_BASE" \ + -Dcatalina.home="$CATALINA_HOME" \ + -Djava.io.tmpdir="$CATALINA_TMPDIR" \ + org.apache.catalina.startup.Bootstrap "$@" start + fi + fi + +elif [ "$1" = "run" ]; then + + shift + if [ "$1" = "-security" ] ; then + if [ $have_tty -eq 1 ]; then + echo "Using Security Manager" + fi + shift + eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ + -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ + -classpath "\"$CLASSPATH\"" \ + -Djava.security.manager \ + -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ + -Dcatalina.base="\"$CATALINA_BASE\"" \ + -Dcatalina.home="\"$CATALINA_HOME\"" \ + -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ + org.apache.catalina.startup.Bootstrap "$@" start + else + eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ + -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ + -classpath "\"$CLASSPATH\"" \ + -Dcatalina.base="\"$CATALINA_BASE\"" \ + -Dcatalina.home="\"$CATALINA_HOME\"" \ + -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ + org.apache.catalina.startup.Bootstrap "$@" start + fi + +elif [ "$1" = "start" ] ; then + + if [ ! -z "$CATALINA_PID" ]; then + if [ -f "$CATALINA_PID" ]; then + if [ -s "$CATALINA_PID" ]; then + echo "Existing PID file found during start." + if [ -r "$CATALINA_PID" ]; then + PID=`cat "$CATALINA_PID"` + ps -p $PID >/dev/null 2>&1 + if [ $? -eq 0 ] ; then + echo "Tomcat appears to still be running with PID $PID. Start aborted." + echo "If the following process is not a Tomcat process, remove the PID file and try again:" + ps -f -p $PID + exit 1 + else + echo "Removing/clearing stale PID file." + rm -f "$CATALINA_PID" >/dev/null 2>&1 + if [ $? != 0 ]; then + if [ -w "$CATALINA_PID" ]; then + cat /dev/null > "$CATALINA_PID" + else + echo "Unable to remove or clear stale PID file. Start aborted." + exit 1 + fi + fi + fi + else + echo "Unable to read PID file. Start aborted." + exit 1 + fi + else + rm -f "$CATALINA_PID" >/dev/null 2>&1 + if [ $? != 0 ]; then + if [ ! -w "$CATALINA_PID" ]; then + echo "Unable to remove or write to empty PID file. Start aborted." + exit 1 + fi + fi + fi + fi + fi + + shift + touch "$CATALINA_OUT" + if [ "$1" = "-security" ] ; then + if [ $have_tty -eq 1 ]; then + echo "Using Security Manager" + fi + shift + eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ + -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ + -classpath "\"$CLASSPATH\"" \ + -Djava.security.manager \ + -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ + -Dcatalina.base="\"$CATALINA_BASE\"" \ + -Dcatalina.home="\"$CATALINA_HOME\"" \ + -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ + org.apache.catalina.startup.Bootstrap "$@" start \ + >> "$CATALINA_OUT" 2>&1 "&" + + else + eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ + -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ + -classpath "\"$CLASSPATH\"" \ + -Dcatalina.base="\"$CATALINA_BASE\"" \ + -Dcatalina.home="\"$CATALINA_HOME\"" \ + -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ + org.apache.catalina.startup.Bootstrap "$@" start \ + >> "$CATALINA_OUT" 2>&1 "&" + + fi + + if [ ! -z "$CATALINA_PID" ]; then + echo $! > "$CATALINA_PID" + fi + + echo "Tomcat started." + +elif [ "$1" = "stop" ] ; then + + shift + + SLEEP=5 + if [ ! -z "$1" ]; then + echo $1 | grep "[^0-9]" >/dev/null 2>&1 + if [ $? -gt 0 ]; then + SLEEP=$1 + shift + fi + fi + + FORCE=0 + if [ "$1" = "-force" ]; then + shift + FORCE=1 + fi + + if [ ! -z "$CATALINA_PID" ]; then + if [ -f "$CATALINA_PID" ]; then + if [ -s "$CATALINA_PID" ]; then + kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1 + if [ $? -gt 0 ]; then + 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." + exit 1 + fi + else + echo "PID file is empty and has been ignored." + fi + else + echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted." + exit 1 + fi + fi + + eval "\"$_RUNJAVA\"" $JAVA_OPTS \ + -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ + -classpath "\"$CLASSPATH\"" \ + -Dcatalina.base="\"$CATALINA_BASE\"" \ + -Dcatalina.home="\"$CATALINA_HOME\"" \ + -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ + org.apache.catalina.startup.Bootstrap "$@" stop + + # stop failed. Shutdown port disabled? Try a normal kill. + if [ $? != 0 ]; then + if [ ! -z "$CATALINA_PID" ]; then + echo "The stop command failed. Attempting to signal the process to stop through OS signal." + kill -15 `cat "$CATALINA_PID"` >/dev/null 2>&1 + fi + fi + + if [ ! -z "$CATALINA_PID" ]; then + if [ -f "$CATALINA_PID" ]; then + while [ $SLEEP -ge 0 ]; do + kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1 + if [ $? -gt 0 ]; then + rm -f "$CATALINA_PID" >/dev/null 2>&1 + if [ $? != 0 ]; then + if [ -w "$CATALINA_PID" ]; then + cat /dev/null > "$CATALINA_PID" + # If Tomcat has stopped don't try and force a stop with an empty PID file + FORCE=0 + else + echo "The PID file could not be removed or cleared." + fi + fi + echo "Tomcat stopped." + break + fi + if [ $SLEEP -gt 0 ]; then + sleep 1 + fi + if [ $SLEEP -eq 0 ]; then + echo "Tomcat did not stop in time." + if [ $FORCE -eq 0 ]; then + echo "PID file was not removed." + fi + echo "To aid diagnostics a thread dump has been written to standard out." + kill -3 `cat "$CATALINA_PID"` + fi + SLEEP=`expr $SLEEP - 1 ` + done + fi + fi + + KILL_SLEEP_INTERVAL=5 + if [ $FORCE -eq 1 ]; then + if [ -z "$CATALINA_PID" ]; then + echo "Kill failed: \$CATALINA_PID not set" + else + if [ -f "$CATALINA_PID" ]; then + PID=`cat "$CATALINA_PID"` + echo "Killing Tomcat with the PID: $PID" + kill -9 $PID + while [ $KILL_SLEEP_INTERVAL -ge 0 ]; do + kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1 + if [ $? -gt 0 ]; then + rm -f "$CATALINA_PID" >/dev/null 2>&1 + if [ $? != 0 ]; then + if [ -w "$CATALINA_PID" ]; then + cat /dev/null > "$CATALINA_PID" + else + echo "The PID file could not be removed." + fi + fi + echo "The Tomcat process has been killed." + break + fi + if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then + sleep 1 + fi + KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 ` + done + if [ $KILL_SLEEP_INTERVAL -lt 0 ]; then + echo "Tomcat has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE." + fi + fi + fi + fi + +elif [ "$1" = "configtest" ] ; then + + eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \ + -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ + -classpath "\"$CLASSPATH\"" \ + -Dcatalina.base="\"$CATALINA_BASE\"" \ + -Dcatalina.home="\"$CATALINA_HOME\"" \ + -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ + org.apache.catalina.startup.Bootstrap configtest + result=$? + if [ $result -ne 0 ]; then + echo "Configuration error detected!" + fi + exit $result + +elif [ "$1" = "version" ] ; then + + "$_RUNJAVA" \ + -classpath "$CATALINA_HOME/lib/catalina.jar" \ + org.apache.catalina.util.ServerInfo + +else + + echo "Usage: catalina.sh ( commands ... )" + echo "commands:" + if $os400; then + echo " debug Start Catalina in a debugger (not available on OS400)" + echo " debug -security Debug Catalina with a security manager (not available on OS400)" + else + echo " debug Start Catalina in a debugger" + echo " debug -security Debug Catalina with a security manager" + fi + echo " jpda start Start Catalina under JPDA debugger" + echo " run Start Catalina in the current window" + echo " run -security Start in the current window with security manager" + echo " start Start Catalina in a separate window" + echo " start -security Start in a separate window with security manager" + echo " stop Stop Catalina, waiting up to 5 seconds for the process to end" + echo " stop n Stop Catalina, waiting up to n seconds for the process to end" + echo " stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running" + echo " stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running" + echo " configtest Run a basic syntax check on server.xml - check exit code for result" + echo " version What version of tomcat are you running?" + echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined" + exit 1 + +fi diff --git a/templates/ctl.sh.j2 b/templates/ctl.sh.j2 new file mode 100755 index 0000000..fbe7ab6 --- /dev/null +++ b/templates/ctl.sh.j2 @@ -0,0 +1,120 @@ +#!/bin/sh + +CATALINA_HOME={{ alf_home }}/tomcat +TOMCAT_BINDIR={{ alf_home }}/tomcat/bin +JAVA_HOME=$JAVA_HOME +CATALINA_PID={{ alf_home }}/tomcat/temp/catalina.pid +export CATALINA_PID +TOMCAT_STATUS="" +ERROR=0 +PID="" + +start_tomcat() { + is_tomcat_running + RUNNING=$? + if [ $RUNNING -eq 1 ]; then + echo "$0 $ARG: tomcat (pid $PID) already running" + else + rm -f $CATALINA_PID + 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" + previousdir=`pwd` + cd $CATALINA_HOME/.. + $TOMCAT_BINDIR/startup.sh + if [ $? -eq 0 ]; then + echo "$0 $ARG: tomcat started" + else + echo "$0 $ARG: tomcat could not be started" + ERROR=1 + fi + cd $previousdir + fi +} + +daemon_tomcat() { + 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" + $TOMCAT_BINDIR/catalina.sh run +} + +stop_tomcat() { + is_tomcat_running + RUNNING=$? + if [ $RUNNING -eq 0 ]; then + echo "$0 $ARG: $TOMCAT_STATUS" + exit + fi + $TOMCAT_BINDIR/shutdown.sh 300 -force + sleep 2 + is_tomcat_running + RUNNING=$? + COUNTER=4 + while [ $RUNNING -ne 0 ] && [ $COUNTER -ne 0 ]; do + COUNTER=`expr $COUNTER - 1` + sleep 2 + is_tomcat_running + RUNNING=$? + done + if [ $RUNNING -eq 0 ]; then + echo "$0 $ARG: tomcat stopped" + sleep 3 + else + echo "$0 $ARG: tomcat could not be stopped" + ERROR=2 + fi +} + +get_pid() { + PID="" + PIDFILE=$1 + # check for pidfile + if [ -f $PIDFILE ] ; then + PID=`cat $PIDFILE` + fi +} + +get_tomcat_pid() { + get_pid $CATALINA_PID + if [ ! $PID ]; then + return + fi +} + +is_service_running() { + PID=$1 + if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then + RUNNING=1 + else + RUNNING=0 + fi + return $RUNNING +} + +is_tomcat_running() { + get_tomcat_pid + is_service_running $PID + RUNNING=$? + if [ $RUNNING -eq 0 ]; then + TOMCAT_STATUS="tomcat not running" + else + TOMCAT_STATUS="tomcat already running" + fi + return $RUNNING +} + +cleanpid() { + rm -f $CATALINA_PID +} + +if [ "x$1" = "xstart" ]; then + start_tomcat + sleep 2 +elif [ "x$1" = "xdaemon" ]; then + daemon_tomcat +elif [ "x$1" = "xstop" ]; then + stop_tomcat + sleep 2 +elif [ "x$1" = "xstatus" ]; then + is_tomcat_running + echo $TOMCAT_STATUS +elif [ "x$1" = "xcleanpid" ]; then + cleanpid +fi diff --git a/templates/custom-slingshot-application-context.xml.j2 b/templates/custom-slingshot-application-context.xml.j2 new file mode 100644 index 0000000..96112fe --- /dev/null +++ b/templates/custom-slingshot-application-context.xml.j2 @@ -0,0 +1,10 @@ + + + + diff --git a/templates/server.xml.j2 b/templates/server.xml.j2 new file mode 100644 index 0000000..c11ba31 --- /dev/null +++ b/templates/server.xml.j2 @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% if proxy_enabled %} + + {% else %} + + {% endif %} + + {% if ssl_enabled %} + + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + {% if proxy_enabled %} + + {% endif %} + + + + diff --git a/templates/setenv.sh.j2 b/templates/setenv.sh.j2 new file mode 100755 index 0000000..12db172 --- /dev/null +++ b/templates/setenv.sh.j2 @@ -0,0 +1,12 @@ +# Load Tomcat Native Library +LD_LIBRARY_PATH={{ alf_home }}/common/lib:$LD_LIBRARY_PATH + +JRE_HOME=$JAVA_HOME +JAVA_OPTS="-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -Dalfresco.home={{ alf_home }} -XX:ReservedCodeCacheSize=128m $JAVA_OPTS " +JAVA_OPTS="-Xms512M -Xmx{{ java_opts_xmx }} $JAVA_OPTS " # java-memory-settings +JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote " # JMX settings +JAVA_OPTS="$JAVA_OPTS -Djava.io.tmpdir={{ alf_home }}/temp " +export JAVA_HOME +export JRE_HOME +export JAVA_OPTS +export LD_LIBRARY_PATH diff --git a/templates/share-config-custom.xml.j2 b/templates/share-config-custom.xml.j2 new file mode 100644 index 0000000..734ae94 --- /dev/null +++ b/templates/share-config-custom.xml.j2 @@ -0,0 +1,515 @@ + + + + + + + false + + + false + + + + + + + + + + production + + + + + manual + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + 1000 + + + 7000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ alf_protocol }}://{{ alf_host }}:{{ alf_port }}/alfresco + + + + + false + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.document + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + application/vnd.ms-powerpoint + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + location.path.documents + + slingshot/doclib/treenode/site/{site}/{container}{path}?children={evaluateChildFoldersSite}&max={maximumFolderCountSite} + + + + + + + + alfresco://company/home + + + + false + + + 500 + + + + true + + + + + + + + secret + + ALFRESCO.ORG + + HTTP/repository.server.com@ALFRESCO.ORG + + ShareHTTP + + true + + + + + + + + + + alfresco-noauth + Alfresco - unauthenticated access + Access to Alfresco Repository WebScripts that do not require authentication + alfresco + {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s + none + + + + alfresco + Alfresco - user access + Access to Alfresco Repository WebScripts that require user authentication + alfresco + {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s + user + + + + alfresco-feed + Alfresco Feed + Alfresco Feed - supports basic HTTP authentication via the EndPointProxyServlet + http + {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s + true + user + + + + alfresco-api + alfresco + Alfresco Public API - user access + Access to Alfresco Repository Public API that require user authentication. + This makes use of the authentication that is provided by parent 'alfresco' endpoint. + alfresco + {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/api + user + + + + + + + + + + + + + + + diff --git a/templates/shared.properties.j2 b/templates/shared.properties.j2 new file mode 100644 index 0000000..19eb212 --- /dev/null +++ b/templates/shared.properties.j2 @@ -0,0 +1,33 @@ +# Shared Properties file + +#Host details an external client would use to connect to Solr +solr.host=localhost +#If not set then solr.port will be the jetty.port +#solr.port=8983 +solr.baseurl=/solr +solr.content.dir={{ alf_home }}/alf_data/solr6 + +# Properties treated as identifiers when indexed + +alfresco.identifier.property.0={http://www.alfresco.org/model/content/1.0}creator +alfresco.identifier.property.1={http://www.alfresco.org/model/content/1.0}modifier +alfresco.identifier.property.2={http://www.alfresco.org/model/content/1.0}userName +alfresco.identifier.property.3={http://www.alfresco.org/model/content/1.0}authorityName +alfresco.identifier.property.4={http://www.alfresco.org/model/content/1.0}lockOwner + +# Suggestable Propeties +#alfresco.suggestable.property.0={http://www.alfresco.org/model/content/1.0}name +#alfresco.suggestable.property.1={http://www.alfresco.org/model/content/1.0}title +#alfresco.suggestable.property.2={http://www.alfresco.org/model/content/1.0}description +#alfresco.suggestable.property.3={http://www.alfresco.org/model/content/1.0}content + +# Data types that support cross locale/word splitting/token patterns if tokenised +alfresco.cross.locale.property.0={http://www.alfresco.org/model/content/1.0}name +alfresco.cross.locale.property.1={http://www.alfresco.org/model/content/1.0}lockOwner + +# Data types that support cross locale/word splitting/token patterns if tokenised +# alfresco.cross.locale.datatype.0={http://www.alfresco.org/model/dictionary/1.0}text +# alfresco.cross.locale.datatype.1={http://www.alfresco.org/model/dictionary/1.0}content +# alfresco.cross.locale.datatype.2={http://www.alfresco.org/model/dictionary/1.0}mltext + +alfresco.model.tracker.cron=0/10 * * * * ? * diff --git a/templates/solr.in.sh.j2 b/templates/solr.in.sh.j2 new file mode 100644 index 0000000..7db81c4 --- /dev/null +++ b/templates/solr.in.sh.j2 @@ -0,0 +1,135 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Settings here will override settings in existing env vars or in bin/solr. The default shipped state +# of this file is completely commented. + +# By default the script will use JAVA_HOME to determine which java +# to use, but you can set a specific path for Solr to use without +# affecting other Java applications on your server/workstation. +#SOLR_JAVA_HOME="" +SOLR_JAVA_HOME={{ solr_java_home }} + +# This controls the number of seconds that the solr script will wait for +# Solr to stop gracefully or Solr to start. If the graceful stop fails, +# the script will forcibly stop Solr. If the start fails, the script will +# give up waiting and display the last few lines of the logfile. +#SOLR_STOP_WAIT="180" + +# Increase Java Heap as needed to support your indexing / query needs +#SOLR_HEAP="512m" + +# Expert: If you want finer control over memory options, specify them directly +# Comment out SOLR_HEAP if you are using this though, that takes precedence +#SOLR_JAVA_MEM="-Xms512m -Xmx512m" +SOLR_JAVA_MEM="{{ solr_java_mem }}" + +# Enable verbose GC logging +GC_LOG_OPTS="" +#GC_LOG_OPTS="-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails \ +#-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime" + +# These GC settings have shown to work well for a number of common Solr workloads +#GC_TUNE="-XX:NewRatio=3 -XX:SurvivorRatio=4 etc. + +# Set the ZooKeeper connection string if using an external ZooKeeper ensemble +# e.g. host1:2181,host2:2181/chroot +# Leave empty if not using SolrCloud +#ZK_HOST="" + +# Set the ZooKeeper client timeout (for SolrCloud mode) +#ZK_CLIENT_TIMEOUT="15000" + +# By default the start script uses "localhost"; override the hostname here +# for production SolrCloud environments to control the hostname exposed to cluster state +#SOLR_HOST="192.168.1.1" + +# By default the start script uses UTC; override the timezone if needed +#SOLR_TIMEZONE="UTC" + +# Set to true to activate the JMX RMI connector to allow remote JMX client applications +# to monitor the JVM hosting Solr; set to "false" to disable that behavior +# (false is recommended in production environments) +#ENABLE_REMOTE_JMX_OPTS="false" + +# The script will use SOLR_PORT+10000 for the RMI_PORT or you can set it here +# RMI_PORT=18983 + +# Alfresco configuration. This file is automatically included by solr. You can define your custom settings here +SOLR_OPTS="$SOLR_OPTS -Dsolr.jetty.request.header.size=1000000 -Dsolr.jetty.threads.stop.timeout=300000" +SOLR_OPTS="$SOLR_OPTS -Djava.io.tmpdir={{ alf_home }}/temp" +SOLR_OPTS="$SOLR_OPTS -Dsolr.solr.content.dir={{ solr_content_dir }}/contentstore" + +# Anything you add to the SOLR_OPTS variable will be included in the java +# start command line as-is, in ADDITION to other options. If you specify the +# -a option on start script, those options will be appended as well. Examples: +#SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=3000" +#SOLR_OPTS="$SOLR_OPTS -Dsolr.autoCommit.maxTime=60000" +#SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true" + +# Location where the bin/solr script will save PID files for running instances +# If not set, the script will create PID files in $SOLR_TIP/bin +#SOLR_PID_DIR= + +# Path to a directory for Solr to store cores and their data. By default, Solr will use server/solr +# If solr.xml is not stored in ZooKeeper, this directory needs to contain solr.xml +#SOLR_HOME= + +# Solr provides a default Log4J configuration properties file in server/resources +# however, you may want to customize the log settings and file appender location +# so you can point the script to use a different log4j.properties file +#LOG4J_PROPS=/var/solr/log4j.properties + +# Changes the logging level. Valid values: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Default is INFO +# This is an alternative to changing the rootLogger in log4j.properties +#SOLR_LOG_LEVEL=INFO + +# Location where Solr should write logs to. Absolute or relative to solr start dir +#SOLR_LOGS_DIR=../../logs +SOLR_LOGS_DIR={{ alf_home }}/alfresco-search-services/logs +#LOG4J_PROPS=$SOLR_LOGS_DIR/log4j.properties +LOG4J_PROPS={{ alf_home }}/alfresco-search-services/logs/log4j.properties + +# Sets the port Solr binds to, default is 8983 +SOLR_PORT={{ solr_port }} + +# Uncomment to set SSL-related system properties +# Be sure to update the paths to the correct keystore for your environment +#SOLR_SSL_KEY_STORE=/home/shalin/work/oss/shalin-lusolr/solr/server/etc/solr-ssl.keystore.jks +#SOLR_SSL_KEY_STORE_PASSWORD=secret +#SOLR_SSL_TRUST_STORE=/home/shalin/work/oss/shalin-lusolr/solr/server/etc/solr-ssl.keystore.jks +#SOLR_SSL_TRUST_STORE_PASSWORD=secret +#SOLR_SSL_NEED_CLIENT_AUTH=false +#SOLR_SSL_WANT_CLIENT_AUTH=false + +# Uncomment if you want to override previously defined SSL values for HTTP client +# otherwise keep them commented and the above values will automatically be set for HTTP clients +#SOLR_SSL_CLIENT_KEY_STORE= +#SOLR_SSL_CLIENT_KEY_STORE_PASSWORD= +#SOLR_SSL_CLIENT_TRUST_STORE= +#SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD= + +# Settings for authentication +#SOLR_AUTHENTICATION_CLIENT_CONFIGURER= +#SOLR_AUTHENTICATION_OPTS= + +# Settings for ZK ACL +#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \ +# -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \ +# -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \ +# -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD" +#SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS" + +SOLR_SOLR_CONTENT_DIR={{ solr_content_dir }} diff --git a/templates/solrconfig.xml.alfresco.j2 b/templates/solrconfig.xml.alfresco.j2 new file mode 100644 index 0000000..f451e18 --- /dev/null +++ b/templates/solrconfig.xml.alfresco.j2 @@ -0,0 +1,1929 @@ + + + + + + + + + 4.9 + + + + + + + + ${data.dir.root}/${data.dir.store} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${merger.maxMergeCount:6} + ${merger.maxThreadCount:3} + + + + + ${solr.lock.type:native} + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + ${solr.autoCommit.maxTime:-1} + false + + + + + + ${solr.autoSoftCommit.maxTime:-1} + + + + + + + + + + + + + + + + + + ${solr.maxBooleanClauses:10000} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + ${solr.queryResultWindowSize:512} + + + ${solr.queryResultMaxDocsCached:2048} + + + + + + + + + + + + false + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + afts + explicit + 10 + suggest + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + spellcheck + spellcheckbackcompat + setProcessedDenies + + + + + + + + explicit + 10 + suggest + + + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + setProcessedDenies + + + + + + + + + explicit + json + true + suggest + + + + + + + + + true + json + true + + + + + + + + + explicit + + + velocity + browse + layout + Solritas + + + edismax + + text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 + title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0 + + text + 100% + *:* + 10 + *,score + + + text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 + title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0 + + text,features,name,sku,id,manu,cat,title,description,keywords,author,resourcename + 3 + + + on + cat + manu_exact + content_type + author_s + ipod + GB + 1 + cat,inStock + after + price + 0 + 600 + 50 + popularity + 0 + 10 + 3 + manufacturedate_dt + NOW/YEAR-10YEARS + NOW + +1YEAR + before + after + + + on + content features title name + html + <b> + </b> + 0 + title + 0 + name + 3 + 200 + content + 750 + + + on + false + 5 + 2 + 5 + true + true + 5 + 3 + + + + + spellcheck + + + + + + + + + + + + + + application/json + + + + + application/csv + + + + + + + true + ignored_ + + + true + links + ignored_ + + + + + + + + + + + + + + + explicit + true + + + + + + + {% if solr_is_primary %} + + commit + startup + schema.xml,stopwords.txt + + {% endif %} + {% if solr_is_replica %} + + http://{{ solr_primary_host }}:{{ solr_primary_port }}/solr/alfresco/replication + 00:00:20 + internal + 5000 + 10000 + + {% endif %} + + + + + + + + text_shingle + + + + + + default + suggest + solr.DirectSolrSpellChecker + + internal + + 0.5 + + 2 + + 1 + + 5 + + 4 + + 0.01 + + + + + + wordbreak + suggest + solr.WordBreakSolrSpellChecker + true + true + 10 + 5 + + + + + + + + + + + suggest + + default + wordbreak + on + true + 10 + 5 + 5 + true + true + 10 + 5 + + + spellcheck + spellcheckbackcompat + + + + + + + shingleBasedSuggestions + ${solr.suggester.enabled:true} + + org.apache.solr.spelling.suggest.fst.WFSTLookupFactory + suggest + text_shingle + true + + + + + + true + 10 + shingleBasedSuggestions + + + suggest + + + + + + + + + + + + + text + true + + + tvComponent + + + + + + + lingo + + + org.carrot2.clustering.lingo.LingoClusteringAlgorithm + + + clustering/carrot2 + + + + + stc + org.carrot2.clustering.stc.STCClusteringAlgorithm + + + + + kmeans + org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm + + + + + + + true + true + + mltext@m___t@{http://www.alfresco.org/model/content/1.0}title + + id + + content@s___t@{http://www.alfresco.org/model/content/1.0}content + + true + + + + false + + + edismax + + text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 + + *:* + 10 + *,score + + + clustering + + + + + + + + + + true + false + + + terms + + + + + + + + text___ + elevate.xml + + + + + + explicit + suggest + + + elevator + + + + + + + + + + + 100 + + + + + + + + 70 + + 0.5 + + [-\w ,/\n\"']{20,200} + + + + + + + ]]> + ]]> + + + + + + + + + + + + + + + + + + + + + + + + ,, + ,, + ,, + ,, + ,]]> + ]]> + + + + + + 10 + .,!? + + + + + + + WORD + + + en + US + + + + + + + + + + + + + + + + + + + + + + text/plain; charset=UTF-8 + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + *:* + + + + + + + alfresco + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + setProcessedDenies + + + + + + + + fingerprint + + + + + + afts + + false + false + 5 + 2 + 5 + true + true + 5 + 3 + + mltext@m___t@{http://www.alfresco.org/model/content/1.0}title + id + content@s___t@{http://www.alfresco.org/model/content/1.0}content + true + false + + {!alfrescoReRank reRankQuery=$rqq reRankDocs=500 scale=true reRankWeight=3} + {!rrafts}RERANK_QUERY_FROM_CONTEXT + + rrafts + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + spellcheck + spellcheckbackcompat + setProcessedDenies + clustering + + + + + + + cmis + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + setProcessedDenies + + + + + + + + QUERY_PHASE + + + RERANK_PHASE + + + + + + conf/mime_types.csv + + + + 1 + 10 + + + + + + + + + + + + diff --git a/templates/solrconfig.xml.archive.j2 b/templates/solrconfig.xml.archive.j2 new file mode 100644 index 0000000..977be87 --- /dev/null +++ b/templates/solrconfig.xml.archive.j2 @@ -0,0 +1,1929 @@ + + + + + + + + + 4.9 + + + + + + + + ${data.dir.root}/${data.dir.store} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${merger.maxMergeCount:6} + ${merger.maxThreadCount:3} + + + + + ${solr.lock.type:native} + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + ${solr.autoCommit.maxTime:-1} + false + + + + + + ${solr.autoSoftCommit.maxTime:-1} + + + + + + + + + + + + + + + + + + ${solr.maxBooleanClauses:10000} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + ${solr.queryResultWindowSize:512} + + + ${solr.queryResultMaxDocsCached:2048} + + + + + + + + + + + + false + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + afts + explicit + 10 + suggest + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + spellcheck + spellcheckbackcompat + setProcessedDenies + + + + + + + + explicit + 10 + suggest + + + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + setProcessedDenies + + + + + + + + + explicit + json + true + suggest + + + + + + + + + true + json + true + + + + + + + + + explicit + + + velocity + browse + layout + Solritas + + + edismax + + text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 + title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0 + + text + 100% + *:* + 10 + *,score + + + text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 + title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0 + + text,features,name,sku,id,manu,cat,title,description,keywords,author,resourcename + 3 + + + on + cat + manu_exact + content_type + author_s + ipod + GB + 1 + cat,inStock + after + price + 0 + 600 + 50 + popularity + 0 + 10 + 3 + manufacturedate_dt + NOW/YEAR-10YEARS + NOW + +1YEAR + before + after + + + on + content features title name + html + <b> + </b> + 0 + title + 0 + name + 3 + 200 + content + 750 + + + on + false + 5 + 2 + 5 + true + true + 5 + 3 + + + + + spellcheck + + + + + + + + + + + + + + application/json + + + + + application/csv + + + + + + + true + ignored_ + + + true + links + ignored_ + + + + + + + + + + + + + + + explicit + true + + + + + + + {% if solr_is_primary %} + + commit + startup + schema.xml,stopwords.txt + + {% endif %} + {% if solr_is_replica %} + + http://{{ solr_primary_host }}:{{ solr_primary_port }}/solr/archive/replication + 00:00:20 + internal + 5000 + 10000 + + {% endif %} + + + + + + + + text_shingle + + + + + + default + suggest + solr.DirectSolrSpellChecker + + internal + + 0.5 + + 2 + + 1 + + 5 + + 4 + + 0.01 + + + + + + wordbreak + suggest + solr.WordBreakSolrSpellChecker + true + true + 10 + 5 + + + + + + + + + + + suggest + + default + wordbreak + on + true + 10 + 5 + 5 + true + true + 10 + 5 + + + spellcheck + spellcheckbackcompat + + + + + + + shingleBasedSuggestions + ${solr.suggester.enabled:true} + + org.apache.solr.spelling.suggest.fst.WFSTLookupFactory + suggest + text_shingle + true + + + + + + true + 10 + shingleBasedSuggestions + + + suggest + + + + + + + + + + + + + text + true + + + tvComponent + + + + + + + lingo + + + org.carrot2.clustering.lingo.LingoClusteringAlgorithm + + + clustering/carrot2 + + + + + stc + org.carrot2.clustering.stc.STCClusteringAlgorithm + + + + + kmeans + org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm + + + + + + + true + true + + mltext@m___t@{http://www.alfresco.org/model/content/1.0}title + + id + + content@s___t@{http://www.alfresco.org/model/content/1.0}content + + true + + + + false + + + edismax + + text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 + + *:* + 10 + *,score + + + clustering + + + + + + + + + + true + false + + + terms + + + + + + + + text___ + elevate.xml + + + + + + explicit + suggest + + + elevator + + + + + + + + + + + 100 + + + + + + + + 70 + + 0.5 + + [-\w ,/\n\"']{20,200} + + + + + + + ]]> + ]]> + + + + + + + + + + + + + + + + + + + + + + + + ,, + ,, + ,, + ,, + ,]]> + ]]> + + + + + + 10 + .,!? + + + + + + + WORD + + + en + US + + + + + + + + + + + + + + + + + + + + + + text/plain; charset=UTF-8 + + + + + + + + + 5 + + + + + + + + + + + + + + + + + + + + + + + + *:* + + + + + + + alfresco + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + setProcessedDenies + + + + + + + + fingerprint + + + + + + afts + + false + false + 5 + 2 + 5 + true + true + 5 + 3 + + mltext@m___t@{http://www.alfresco.org/model/content/1.0}title + id + content@s___t@{http://www.alfresco.org/model/content/1.0}content + true + false + + {!alfrescoReRank reRankQuery=$rqq reRankDocs=500 scale=true reRankWeight=3} + {!rrafts}RERANK_QUERY_FROM_CONTEXT + + rrafts + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + spellcheck + spellcheckbackcompat + setProcessedDenies + clustering + + + + + + + cmis + + + setLocale + rewriteFacetParameters + consistencyComponent + query + facet + mlt + highlight + stats + debug + clearLocale + rewriteFacetCounts + + setProcessedDenies + + + + + + + + QUERY_PHASE + + + RERANK_PHASE + + + + + + conf/mime_types.csv + + + + 1 + 10 + + + + + + + + + + + + diff --git a/templates/solrcore.properties.alfresco.j2 b/templates/solrcore.properties.alfresco.j2 new file mode 100644 index 0000000..754a9e0 --- /dev/null +++ b/templates/solrcore.properties.alfresco.j2 @@ -0,0 +1,92 @@ +### Replication +{% if solr_is_primary %} +enable.master=true +enable.slave=false +{% else %} +enable.master=false +enable.slave=true +{% endif %} + +data.dir.root={{ solr_content_dir }} +#point to any one of alfresco share node or balancer +alfresco.host={{ solr_alfresco_host }} +alfresco.port.ssl={{ solr_alfresco_ssl_port }} +alfresco.port={{ solr_alfresco_port }} +alfresco.secureComms={{ solr_alfresco_secure_comms }} +enable.alfresco.tracking=true + +alfresco.commitInterval=2000 +alfresco.contentStreamLimit=10000000 +alfresco.stores=workspace\://SpacesStore +alfresco.changeSetAclsBatchSize=500 +solr.pathCache.size=256 +solr.pathCache.initialSize=128 +solr.deniedCache.size=128 +solr.documentCache.autowarmCount=512 +solr.documentCache.initialSize=1024 +solr.filterCache.size=256 +solr.suggester.minSecsBetweenBuilds=3600 +solr.readerCache.initialSize=64 +#alfresco.port.ssl=8443 +solr.ownerCache.autowarmCount=0 +alfresco.encryption.ssl.keystore.passwordFileLocation=ssl-keystore-passwords.properties +alfresco.encryption.ssl.truststore.passwordFileLocation=ssl-truststore-passwords.properties +alfresco.transactionDocsBatchSize=500 +solr.authorityCache.size=128 +alfresco.recordUnindexedNodes=false +solr.documentCache.size=1024 +solr.filterCache.initialSize=128 +solr.maxBooleanClauses=10000 +data.dir.store=alfresco +solr.queryResultMaxDocsCached=2048 +alfresco.doPermissionChecks=true +alfresco.contentUpdateBatchSize=1000 +solr.deniedCache.initialSize=64 +alfresco.threadDaemon=true +alfresco.baseUrl=/alfresco +solr.queryResultCache.initialSize=1024 +solr.readerCache.size=128 +alfresco.newSearcherInterval=3000 +alfresco.encryption.ssl.keystore.provider= +alfresco.encryption.ssl.truststore.type=JCEKS +alfresco.batch.count=5000 +alfresco.topTermSpanRewriteLimit=1000 +alfresco.encryption.ssl.truststore.provider= +alfresco.encryption.ssl.keystore.type=JCEKS +alfresco.maximumPoolSize=-1 +solr.ownerCache.size=128 +solr.pathCache.autowarmCount=32 +alfresco.maxHostConnections=200 +alfresco.metadata.ignore.datatype.1=app\:configurations +alfresco.metadata.ignore.datatype.0=cm\:person +solr.authorityCache.initialSize=64 +solr.queryResultCache.autowarmCount=4 +alfresco.threadPriority=5 +alfresco.corePoolSize=8 +alfresco.metadata.skipDescendantDocsForSpecificAspects=false +solr.readerCache.autowarmCount=0 +alfresco.metadata.skipDescendantDocsForSpecificTypes=false +alfresco.encryption.ssl.keystore.location=ssl.repo.client.keystore +solr.filterCache.autowarmCount=32 +alfresco.socketTimeout=720000 +alfresco.template=rerank +alfresco.keepAliveTime=120 +solr.queryResultCache.size=1024 +alfresco.maxTotalConnections=200 +alfresco.hole.retention=3600000 +alfresco.version=5.2.1 +alfresco.contentReadBatchSize=100 +solr.deniedCache.autowarmCount=0 +alfresco.lag=1000 +alfresco.workQueueSize=-1 +alfresco.hole.check.after=300000 +alfresco.cron=0/10 * * * * ? * +alfresco.aclBatchSize=100 +alfresco.encryption.ssl.truststore.location=ssl.repo.client.truststore +solr.queryResultWindowSize=512 +solr.authorityCache.autowarmCount=4 +alfresco.postfilter=true +solr.ownerCache.initialSize=64 +shard.method=DB_ID +solr.suggester.enabled=false +alfresco.nodeBatchSize=100 diff --git a/templates/solrcore.properties.archive.j2 b/templates/solrcore.properties.archive.j2 new file mode 100644 index 0000000..de33348 --- /dev/null +++ b/templates/solrcore.properties.archive.j2 @@ -0,0 +1,96 @@ +### Replication +{% if solr_is_primary %} +enable.master=true +enable.slave=false +{% else %} +enable.master=false +enable.slave=true +{% endif %} + +data.dir.root={{ solr_content_dir }} +#point to any one of alfresco share node or balancer +alfresco.host={{ solr_alfresco_host }} +alfresco.port.ssl={{ solr_alfresco_ssl_port }} +alfresco.port={{ solr_alfresco_port }} +alfresco.secureComms={{ solr_alfresco_secure_comms }} +{% if solr_is_primary %} +enable.alfresco.tracking=true +{% else %} +enable.alfresco.tracking=false +{% endif %} + +alfresco.commitInterval=2000 +alfresco.contentStreamLimit=10000000 +alfresco.stores=archive\://SpacesStore +alfresco.changeSetAclsBatchSize=500 +solr.pathCache.size=256 +solr.pathCache.initialSize=128 +solr.deniedCache.size=128 +solr.documentCache.autowarmCount=512 +solr.documentCache.initialSize=1024 +solr.filterCache.size=256 +solr.suggester.minSecsBetweenBuilds=3600 +solr.readerCache.initialSize=64 +#alfresco.port.ssl=8443 +solr.ownerCache.autowarmCount=0 +alfresco.encryption.ssl.keystore.passwordFileLocation=ssl-keystore-passwords.properties +alfresco.encryption.ssl.truststore.passwordFileLocation=ssl-truststore-passwords.properties +alfresco.transactionDocsBatchSize=500 +solr.authorityCache.size=128 +alfresco.recordUnindexedNodes=false +solr.documentCache.size=1024 +solr.filterCache.initialSize=128 +solr.maxBooleanClauses=10000 +data.dir.store=archive +solr.queryResultMaxDocsCached=2048 +alfresco.doPermissionChecks=true +alfresco.contentUpdateBatchSize=1000 +solr.deniedCache.initialSize=64 +alfresco.threadDaemon=true +alfresco.baseUrl=/alfresco +solr.queryResultCache.initialSize=1024 +solr.readerCache.size=128 +alfresco.newSearcherInterval=3000 +alfresco.encryption.ssl.keystore.provider= +alfresco.encryption.ssl.truststore.type=JCEKS +alfresco.batch.count=5000 +alfresco.topTermSpanRewriteLimit=1000 +alfresco.encryption.ssl.truststore.provider= +alfresco.encryption.ssl.keystore.type=JCEKS +alfresco.maximumPoolSize=-1 +solr.ownerCache.size=128 +solr.pathCache.autowarmCount=32 +alfresco.maxHostConnections=200 +alfresco.metadata.ignore.datatype.1=app\:configurations +alfresco.metadata.ignore.datatype.0=cm\:person +solr.authorityCache.initialSize=64 +solr.queryResultCache.autowarmCount=4 +alfresco.threadPriority=5 +alfresco.corePoolSize=8 +alfresco.metadata.skipDescendantDocsForSpecificAspects=false +solr.readerCache.autowarmCount=0 +alfresco.metadata.skipDescendantDocsForSpecificTypes=false +alfresco.encryption.ssl.keystore.location=ssl.repo.client.keystore +solr.filterCache.autowarmCount=32 +alfresco.socketTimeout=720000 +alfresco.template=rerank +alfresco.keepAliveTime=120 +solr.queryResultCache.size=1024 +alfresco.maxTotalConnections=200 +alfresco.hole.retention=3600000 +alfresco.version=5.2.1 +alfresco.contentReadBatchSize=100 +solr.deniedCache.autowarmCount=0 +alfresco.lag=1000 +alfresco.workQueueSize=-1 +alfresco.hole.check.after=300000 +alfresco.cron=0/10 * * * * ? * +alfresco.aclBatchSize=100 +alfresco.encryption.ssl.truststore.location=ssl.repo.client.truststore +solr.queryResultWindowSize=512 +solr.authorityCache.autowarmCount=4 +alfresco.postfilter=true +solr.ownerCache.initialSize=64 +shard.method=DB_ID +solr.suggester.enabled=false +alfresco.nodeBatchSize=100 diff --git a/templates/web.xml.j2 b/templates/web.xml.j2 new file mode 100644 index 0000000..fe5ffea --- /dev/null +++ b/templates/web.xml.j2 @@ -0,0 +1,4712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + org.apache.catalina.servlets.DefaultServlet + + debug + 0 + + + listings + false + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jsp + org.apache.jasper.servlet.JspServlet + + fork + false + + + xpoweredBy + false + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + / + + + + + jsp + *.jsp + *.jspx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 30 + + + {% if ssl_enabled %} + + + + + Protected Context + /* + + + CONFIDENTIAL + + + {% endif %} + + + + + + + + + + + 123 + application/vnd.lotus-1-2-3 + + + 3dml + text/vnd.in3d.3dml + + + 3ds + image/x-3ds + + + 3g2 + video/3gpp2 + + + 3gp + video/3gpp + + + 7z + application/x-7z-compressed + + + aab + application/x-authorware-bin + + + aac + audio/x-aac + + + aam + application/x-authorware-map + + + aas + application/x-authorware-seg + + + abs + audio/x-mpeg + + + abw + application/x-abiword + + + ac + application/pkix-attr-cert + + + acc + application/vnd.americandynamics.acc + + + ace + application/x-ace-compressed + + + acu + application/vnd.acucobol + + + acutc + application/vnd.acucorp + + + adp + audio/adpcm + + + aep + application/vnd.audiograph + + + afm + application/x-font-type1 + + + afp + application/vnd.ibm.modcap + + + ahead + application/vnd.ahead.space + + + ai + application/postscript + + + aif + audio/x-aiff + + + aifc + audio/x-aiff + + + aiff + audio/x-aiff + + + aim + application/x-aim + + + air + application/vnd.adobe.air-application-installer-package+zip + + + ait + application/vnd.dvb.ait + + + ami + application/vnd.amiga.ami + + + anx + application/annodex + + + apk + application/vnd.android.package-archive + + + appcache + text/cache-manifest + + + application + application/x-ms-application + + + apr + application/vnd.lotus-approach + + + arc + application/x-freearc + + + art + image/x-jg + + + asc + application/pgp-signature + + + asf + video/x-ms-asf + + + asm + text/x-asm + + + aso + application/vnd.accpac.simply.aso + + + asx + video/x-ms-asf + + + atc + application/vnd.acucorp + + + atom + application/atom+xml + + + atomcat + application/atomcat+xml + + + atomsvc + application/atomsvc+xml + + + atx + application/vnd.antix.game-component + + + au + audio/basic + + + avi + video/x-msvideo + + + avx + video/x-rad-screenplay + + + aw + application/applixware + + + axa + audio/annodex + + + axv + video/annodex + + + azf + application/vnd.airzip.filesecure.azf + + + azs + application/vnd.airzip.filesecure.azs + + + azw + application/vnd.amazon.ebook + + + bat + application/x-msdownload + + + bcpio + application/x-bcpio + + + bdf + application/x-font-bdf + + + bdm + application/vnd.syncml.dm+wbxml + + + bed + application/vnd.realvnc.bed + + + bh2 + application/vnd.fujitsu.oasysprs + + + bin + application/octet-stream + + + blb + application/x-blorb + + + blorb + application/x-blorb + + + bmi + application/vnd.bmi + + + bmp + image/bmp + + + body + text/html + + + book + application/vnd.framemaker + + + box + application/vnd.previewsystems.box + + + boz + application/x-bzip2 + + + bpk + application/octet-stream + + + btif + image/prs.btif + + + bz + application/x-bzip + + + bz2 + application/x-bzip2 + + + c + text/x-c + + + c11amc + application/vnd.cluetrust.cartomobile-config + + + c11amz + application/vnd.cluetrust.cartomobile-config-pkg + + + c4d + application/vnd.clonk.c4group + + + c4f + application/vnd.clonk.c4group + + + c4g + application/vnd.clonk.c4group + + + c4p + application/vnd.clonk.c4group + + + c4u + application/vnd.clonk.c4group + + + cab + application/vnd.ms-cab-compressed + + + caf + audio/x-caf + + + cap + application/vnd.tcpdump.pcap + + + car + application/vnd.curl.car + + + cat + application/vnd.ms-pki.seccat + + + cb7 + application/x-cbr + + + cba + application/x-cbr + + + cbr + application/x-cbr + + + cbt + application/x-cbr + + + cbz + application/x-cbr + + + cc + text/x-c + + + cct + application/x-director + + + ccxml + application/ccxml+xml + + + cdbcmsg + application/vnd.contact.cmsg + + + cdf + application/x-cdf + + + cdkey + application/vnd.mediastation.cdkey + + + cdmia + application/cdmi-capability + + + cdmic + application/cdmi-container + + + cdmid + application/cdmi-domain + + + cdmio + application/cdmi-object + + + cdmiq + application/cdmi-queue + + + cdx + chemical/x-cdx + + + cdxml + application/vnd.chemdraw+xml + + + cdy + application/vnd.cinderella + + + cer + application/pkix-cert + + + cfs + application/x-cfs-compressed + + + cgm + image/cgm + + + chat + application/x-chat + + + chm + application/vnd.ms-htmlhelp + + + chrt + application/vnd.kde.kchart + + + cif + chemical/x-cif + + + cii + application/vnd.anser-web-certificate-issue-initiation + + + cil + application/vnd.ms-artgalry + + + cla + application/vnd.claymore + + + class + application/java + + + clkk + application/vnd.crick.clicker.keyboard + + + clkp + application/vnd.crick.clicker.palette + + + clkt + application/vnd.crick.clicker.template + + + clkw + application/vnd.crick.clicker.wordbank + + + clkx + application/vnd.crick.clicker + + + clp + application/x-msclip + + + cmc + application/vnd.cosmocaller + + + cmdf + chemical/x-cmdf + + + cml + chemical/x-cml + + + cmp + application/vnd.yellowriver-custom-menu + + + cmx + image/x-cmx + + + cod + application/vnd.rim.cod + + + com + application/x-msdownload + + + conf + text/plain + + + cpio + application/x-cpio + + + cpp + text/x-c + + + cpt + application/mac-compactpro + + + crd + application/x-mscardfile + + + crl + application/pkix-crl + + + crt + application/x-x509-ca-cert + + + cryptonote + application/vnd.rig.cryptonote + + + csh + application/x-csh + + + csml + chemical/x-csml + + + csp + application/vnd.commonspace + + + css + text/css + + + cst + application/x-director + + + csv + text/csv + + + cu + application/cu-seeme + + + curl + text/vnd.curl + + + cww + application/prs.cww + + + cxt + application/x-director + + + cxx + text/x-c + + + dae + model/vnd.collada+xml + + + daf + application/vnd.mobius.daf + + + dart + application/vnd.dart + + + dataless + application/vnd.fdsn.seed + + + davmount + application/davmount+xml + + + dbk + application/docbook+xml + + + dcr + application/x-director + + + dcurl + text/vnd.curl.dcurl + + + dd2 + application/vnd.oma.dd2+xml + + + ddd + application/vnd.fujixerox.ddd + + + deb + application/x-debian-package + + + def + text/plain + + + deploy + application/octet-stream + + + der + application/x-x509-ca-cert + + + dfac + application/vnd.dreamfactory + + + dgc + application/x-dgc-compressed + + + dib + image/bmp + + + dic + text/x-c + + + dir + application/x-director + + + dis + application/vnd.mobius.dis + + + dist + application/octet-stream + + + distz + application/octet-stream + + + djv + image/vnd.djvu + + + djvu + image/vnd.djvu + + + dll + application/x-msdownload + + + dmg + application/x-apple-diskimage + + + dmp + application/vnd.tcpdump.pcap + + + dms + application/octet-stream + + + dna + application/vnd.dna + + + doc + application/msword + + + docm + application/vnd.ms-word.document.macroenabled.12 + + + docx + application/vnd.openxmlformats-officedocument.wordprocessingml.document + + + dot + application/msword + + + dotm + application/vnd.ms-word.template.macroenabled.12 + + + dotx + application/vnd.openxmlformats-officedocument.wordprocessingml.template + + + dp + application/vnd.osgi.dp + + + dpg + application/vnd.dpgraph + + + dra + audio/vnd.dra + + + dsc + text/prs.lines.tag + + + dssc + application/dssc+der + + + dtb + application/x-dtbook+xml + + + dtd + application/xml-dtd + + + dts + audio/vnd.dts + + + dtshd + audio/vnd.dts.hd + + + dump + application/octet-stream + + + dv + video/x-dv + + + dvb + video/vnd.dvb.file + + + dvi + application/x-dvi + + + dwf + model/vnd.dwf + + + dwg + image/vnd.dwg + + + dxf + image/vnd.dxf + + + dxp + application/vnd.spotfire.dxp + + + dxr + application/x-director + + + ecelp4800 + audio/vnd.nuera.ecelp4800 + + + ecelp7470 + audio/vnd.nuera.ecelp7470 + + + ecelp9600 + audio/vnd.nuera.ecelp9600 + + + ecma + application/ecmascript + + + edm + application/vnd.novadigm.edm + + + edx + application/vnd.novadigm.edx + + + efif + application/vnd.picsel + + + ei6 + application/vnd.pg.osasli + + + elc + application/octet-stream + + + emf + application/x-msmetafile + + + eml + message/rfc822 + + + emma + application/emma+xml + + + emz + application/x-msmetafile + + + eol + audio/vnd.digital-winds + + + eot + application/vnd.ms-fontobject + + + eps + application/postscript + + + epub + application/epub+zip + + + es3 + application/vnd.eszigno3+xml + + + esa + application/vnd.osgi.subsystem + + + esf + application/vnd.epson.esf + + + et3 + application/vnd.eszigno3+xml + + + etx + text/x-setext + + + eva + application/x-eva + + + evy + application/x-envoy + + + exe + application/octet-stream + + + exi + application/exi + + + ext + application/vnd.novadigm.ext + + + ez + application/andrew-inset + + + ez2 + application/vnd.ezpix-album + + + ez3 + application/vnd.ezpix-package + + + f + text/x-fortran + + + f4v + video/x-f4v + + + f77 + text/x-fortran + + + f90 + text/x-fortran + + + fbs + image/vnd.fastbidsheet + + + fcdt + application/vnd.adobe.formscentral.fcdt + + + fcs + application/vnd.isac.fcs + + + fdf + application/vnd.fdf + + + fe_launch + application/vnd.denovo.fcselayout-link + + + fg5 + application/vnd.fujitsu.oasysgp + + + fgd + application/x-director + + + fh + image/x-freehand + + + fh4 + image/x-freehand + + + fh5 + image/x-freehand + + + fh7 + image/x-freehand + + + fhc + image/x-freehand + + + fig + application/x-xfig + + + flac + audio/flac + + + fli + video/x-fli + + + flo + application/vnd.micrografx.flo + + + flv + video/x-flv + + + flw + application/vnd.kde.kivio + + + flx + text/vnd.fmi.flexstor + + + fly + text/vnd.fly + + + fm + application/vnd.framemaker + + + fnc + application/vnd.frogans.fnc + + + for + text/x-fortran + + + fpx + image/vnd.fpx + + + frame + application/vnd.framemaker + + + fsc + application/vnd.fsc.weblaunch + + + fst + image/vnd.fst + + + ftc + application/vnd.fluxtime.clip + + + fti + application/vnd.anser-web-funds-transfer-initiation + + + fvt + video/vnd.fvt + + + fxp + application/vnd.adobe.fxp + + + fxpl + application/vnd.adobe.fxp + + + fzs + application/vnd.fuzzysheet + + + g2w + application/vnd.geoplan + + + g3 + image/g3fax + + + g3w + application/vnd.geospace + + + gac + application/vnd.groove-account + + + gam + application/x-tads + + + gbr + application/rpki-ghostbusters + + + gca + application/x-gca-compressed + + + gdl + model/vnd.gdl + + + geo + application/vnd.dynageo + + + gex + application/vnd.geometry-explorer + + + ggb + application/vnd.geogebra.file + + + ggt + application/vnd.geogebra.tool + + + ghf + application/vnd.groove-help + + + gif + image/gif + + + gim + application/vnd.groove-identity-message + + + gml + application/gml+xml + + + gmx + application/vnd.gmx + + + gnumeric + application/x-gnumeric + + + gph + application/vnd.flographit + + + gpx + application/gpx+xml + + + gqf + application/vnd.grafeq + + + gqs + application/vnd.grafeq + + + gram + application/srgs + + + gramps + application/x-gramps-xml + + + gre + application/vnd.geometry-explorer + + + grv + application/vnd.groove-injector + + + grxml + application/srgs+xml + + + gsf + application/x-font-ghostscript + + + gtar + application/x-gtar + + + gtm + application/vnd.groove-tool-message + + + gtw + model/vnd.gtw + + + gv + text/vnd.graphviz + + + gxf + application/gxf + + + gxt + application/vnd.geonext + + + gz + application/x-gzip + + + h + text/x-c + + + h261 + video/h261 + + + h263 + video/h263 + + + h264 + video/h264 + + + hal + application/vnd.hal+xml + + + hbci + application/vnd.hbci + + + hdf + application/x-hdf + + + hh + text/x-c + + + hlp + application/winhlp + + + hpgl + application/vnd.hp-hpgl + + + hpid + application/vnd.hp-hpid + + + hps + application/vnd.hp-hps + + + hqx + application/mac-binhex40 + + + htc + text/x-component + + + htke + application/vnd.kenameaapp + + + htm + text/html + + + html + text/html + + + hvd + application/vnd.yamaha.hv-dic + + + hvp + application/vnd.yamaha.hv-voice + + + hvs + application/vnd.yamaha.hv-script + + + i2g + application/vnd.intergeo + + + icc + application/vnd.iccprofile + + + ice + x-conference/x-cooltalk + + + icm + application/vnd.iccprofile + + + ico + image/x-icon + + + ics + text/calendar + + + ief + image/ief + + + ifb + text/calendar + + + ifm + application/vnd.shana.informed.formdata + + + iges + model/iges + + + igl + application/vnd.igloader + + + igm + application/vnd.insors.igm + + + igs + model/iges + + + igx + application/vnd.micrografx.igx + + + iif + application/vnd.shana.informed.interchange + + + imp + application/vnd.accpac.simply.imp + + + ims + application/vnd.ms-ims + + + in + text/plain + + + ink + application/inkml+xml + + + inkml + application/inkml+xml + + + install + application/x-install-instructions + + + iota + application/vnd.astraea-software.iota + + + ipfix + application/ipfix + + + ipk + application/vnd.shana.informed.package + + + irm + application/vnd.ibm.rights-management + + + irp + application/vnd.irepository.package+xml + + + iso + application/x-iso9660-image + + + itp + application/vnd.shana.informed.formtemplate + + + ivp + application/vnd.immervision-ivp + + + ivu + application/vnd.immervision-ivu + + + jad + text/vnd.sun.j2me.app-descriptor + + + jam + application/vnd.jam + + + jar + application/java-archive + + + java + text/x-java-source + + + jisp + application/vnd.jisp + + + jlt + application/vnd.hp-jlyt + + + jnlp + application/x-java-jnlp-file + + + joda + application/vnd.joost.joda-archive + + + jpe + image/jpeg + + + jpeg + image/jpeg + + + jpg + image/jpeg + + + jpgm + video/jpm + + + jpgv + video/jpeg + + + jpm + video/jpm + + + js + application/javascript + + + jsf + text/plain + + + json + application/json + + + jsonml + application/jsonml+json + + + jspf + text/plain + + + kar + audio/midi + + + karbon + application/vnd.kde.karbon + + + kfo + application/vnd.kde.kformula + + + kia + application/vnd.kidspiration + + + kml + application/vnd.google-earth.kml+xml + + + kmz + application/vnd.google-earth.kmz + + + kne + application/vnd.kinar + + + knp + application/vnd.kinar + + + kon + application/vnd.kde.kontour + + + kpr + application/vnd.kde.kpresenter + + + kpt + application/vnd.kde.kpresenter + + + kpxx + application/vnd.ds-keypoint + + + ksp + application/vnd.kde.kspread + + + ktr + application/vnd.kahootz + + + ktx + image/ktx + + + ktz + application/vnd.kahootz + + + kwd + application/vnd.kde.kword + + + kwt + application/vnd.kde.kword + + + lasxml + application/vnd.las.las+xml + + + latex + application/x-latex + + + lbd + application/vnd.llamagraphics.life-balance.desktop + + + lbe + application/vnd.llamagraphics.life-balance.exchange+xml + + + les + application/vnd.hhe.lesson-player + + + lha + application/x-lzh-compressed + + + link66 + application/vnd.route66.link66+xml + + + list + text/plain + + + list3820 + application/vnd.ibm.modcap + + + listafp + application/vnd.ibm.modcap + + + lnk + application/x-ms-shortcut + + + log + text/plain + + + lostxml + application/lost+xml + + + lrf + application/octet-stream + + + lrm + application/vnd.ms-lrm + + + ltf + application/vnd.frogans.ltf + + + lvp + audio/vnd.lucent.voice + + + lwp + application/vnd.lotus-wordpro + + + lzh + application/x-lzh-compressed + + + m13 + application/x-msmediaview + + + m14 + application/x-msmediaview + + + m1v + video/mpeg + + + m21 + application/mp21 + + + m2a + audio/mpeg + + + m2v + video/mpeg + + + m3a + audio/mpeg + + + m3u + audio/x-mpegurl + + + m3u8 + application/vnd.apple.mpegurl + + + m4a + audio/mp4 + + + m4b + audio/mp4 + + + m4r + audio/mp4 + + + m4u + video/vnd.mpegurl + + + m4v + video/mp4 + + + ma + application/mathematica + + + mac + image/x-macpaint + + + mads + application/mads+xml + + + mag + application/vnd.ecowin.chart + + + maker + application/vnd.framemaker + + + man + text/troff + + + mar + application/octet-stream + + + mathml + application/mathml+xml + + + mb + application/mathematica + + + mbk + application/vnd.mobius.mbk + + + mbox + application/mbox + + + mc1 + application/vnd.medcalcdata + + + mcd + application/vnd.mcd + + + mcurl + text/vnd.curl.mcurl + + + mdb + application/x-msaccess + + + mdi + image/vnd.ms-modi + + + me + text/troff + + + mesh + model/mesh + + + meta4 + application/metalink4+xml + + + metalink + application/metalink+xml + + + mets + application/mets+xml + + + mfm + application/vnd.mfmp + + + mft + application/rpki-manifest + + + mgp + application/vnd.osgeo.mapguide.package + + + mgz + application/vnd.proteus.magazine + + + mid + audio/midi + + + midi + audio/midi + + + mie + application/x-mie + + + mif + application/x-mif + + + mime + message/rfc822 + + + mj2 + video/mj2 + + + mjp2 + video/mj2 + + + mk3d + video/x-matroska + + + mka + audio/x-matroska + + + mks + video/x-matroska + + + mkv + video/x-matroska + + + mlp + application/vnd.dolby.mlp + + + mmd + application/vnd.chipnuts.karaoke-mmd + + + mmf + application/vnd.smaf + + + mmr + image/vnd.fujixerox.edmics-mmr + + + mng + video/x-mng + + + mny + application/x-msmoney + + + mobi + application/x-mobipocket-ebook + + + mods + application/mods+xml + + + mov + video/quicktime + + + movie + video/x-sgi-movie + + + mp1 + audio/mpeg + + + mp2 + audio/mpeg + + + mp21 + application/mp21 + + + mp2a + audio/mpeg + + + mp3 + audio/mpeg + + + mp4 + video/mp4 + + + mp4a + audio/mp4 + + + mp4s + application/mp4 + + + mp4v + video/mp4 + + + mpa + audio/mpeg + + + mpc + application/vnd.mophun.certificate + + + mpe + video/mpeg + + + mpeg + video/mpeg + + + mpega + audio/x-mpeg + + + mpg + video/mpeg + + + mpg4 + video/mp4 + + + mpga + audio/mpeg + + + mpkg + application/vnd.apple.installer+xml + + + mpm + application/vnd.blueice.multipass + + + mpn + application/vnd.mophun.application + + + mpp + application/vnd.ms-project + + + mpt + application/vnd.ms-project + + + mpv2 + video/mpeg2 + + + mpy + application/vnd.ibm.minipay + + + mqy + application/vnd.mobius.mqy + + + mrc + application/marc + + + mrcx + application/marcxml+xml + + + ms + text/troff + + + mscml + application/mediaservercontrol+xml + + + mseed + application/vnd.fdsn.mseed + + + mseq + application/vnd.mseq + + + msf + application/vnd.epson.msf + + + msh + model/mesh + + + msi + application/x-msdownload + + + msl + application/vnd.mobius.msl + + + msty + application/vnd.muvee.style + + + mts + model/vnd.mts + + + mus + application/vnd.musician + + + musicxml + application/vnd.recordare.musicxml+xml + + + mvb + application/x-msmediaview + + + mwf + application/vnd.mfer + + + mxf + application/mxf + + + mxl + application/vnd.recordare.musicxml + + + mxml + application/xv+xml + + + mxs + application/vnd.triscape.mxs + + + mxu + video/vnd.mpegurl + + + n-gage + application/vnd.nokia.n-gage.symbian.install + + + n3 + text/n3 + + + nb + application/mathematica + + + nbp + application/vnd.wolfram.player + + + nc + application/x-netcdf + + + ncx + application/x-dtbncx+xml + + + nfo + text/x-nfo + + + ngdat + application/vnd.nokia.n-gage.data + + + nitf + application/vnd.nitf + + + nlu + application/vnd.neurolanguage.nlu + + + nml + application/vnd.enliven + + + nnd + application/vnd.noblenet-directory + + + nns + application/vnd.noblenet-sealer + + + nnw + application/vnd.noblenet-web + + + npx + image/vnd.net-fpx + + + nsc + application/x-conference + + + nsf + application/vnd.lotus-notes + + + ntf + application/vnd.nitf + + + nzb + application/x-nzb + + + oa2 + application/vnd.fujitsu.oasys2 + + + oa3 + application/vnd.fujitsu.oasys3 + + + oas + application/vnd.fujitsu.oasys + + + obd + application/x-msbinder + + + obj + application/x-tgif + + + oda + application/oda + + + + odb + application/vnd.oasis.opendocument.database + + + + odc + application/vnd.oasis.opendocument.chart + + + + odf + application/vnd.oasis.opendocument.formula + + + odft + application/vnd.oasis.opendocument.formula-template + + + + odg + application/vnd.oasis.opendocument.graphics + + + + odi + application/vnd.oasis.opendocument.image + + + + odm + application/vnd.oasis.opendocument.text-master + + + + odp + application/vnd.oasis.opendocument.presentation + + + + ods + application/vnd.oasis.opendocument.spreadsheet + + + + odt + application/vnd.oasis.opendocument.text + + + oga + audio/ogg + + + ogg + audio/ogg + + + ogv + video/ogg + + + + ogx + application/ogg + + + omdoc + application/omdoc+xml + + + onepkg + application/onenote + + + onetmp + application/onenote + + + onetoc + application/onenote + + + onetoc2 + application/onenote + + + opf + application/oebps-package+xml + + + opml + text/x-opml + + + oprc + application/vnd.palm + + + org + application/vnd.lotus-organizer + + + osf + application/vnd.yamaha.openscoreformat + + + osfpvg + application/vnd.yamaha.openscoreformat.osfpvg+xml + + + otc + application/vnd.oasis.opendocument.chart-template + + + otf + font/otf + + + + otg + application/vnd.oasis.opendocument.graphics-template + + + + oth + application/vnd.oasis.opendocument.text-web + + + oti + application/vnd.oasis.opendocument.image-template + + + + otp + application/vnd.oasis.opendocument.presentation-template + + + + ots + application/vnd.oasis.opendocument.spreadsheet-template + + + + ott + application/vnd.oasis.opendocument.text-template + + + oxps + application/oxps + + + oxt + application/vnd.openofficeorg.extension + + + p + text/x-pascal + + + p10 + application/pkcs10 + + + p12 + application/x-pkcs12 + + + p7b + application/x-pkcs7-certificates + + + p7c + application/pkcs7-mime + + + p7m + application/pkcs7-mime + + + p7r + application/x-pkcs7-certreqresp + + + p7s + application/pkcs7-signature + + + p8 + application/pkcs8 + + + pas + text/x-pascal + + + paw + application/vnd.pawaafile + + + pbd + application/vnd.powerbuilder6 + + + pbm + image/x-portable-bitmap + + + pcap + application/vnd.tcpdump.pcap + + + pcf + application/x-font-pcf + + + pcl + application/vnd.hp-pcl + + + pclxl + application/vnd.hp-pclxl + + + pct + image/pict + + + pcurl + application/vnd.curl.pcurl + + + pcx + image/x-pcx + + + pdb + application/vnd.palm + + + pdf + application/pdf + + + pfa + application/x-font-type1 + + + pfb + application/x-font-type1 + + + pfm + application/x-font-type1 + + + pfr + application/font-tdpfr + + + pfx + application/x-pkcs12 + + + pgm + image/x-portable-graymap + + + pgn + application/x-chess-pgn + + + pgp + application/pgp-encrypted + + + pic + image/pict + + + pict + image/pict + + + pkg + application/octet-stream + + + pki + application/pkixcmp + + + pkipath + application/pkix-pkipath + + + plb + application/vnd.3gpp.pic-bw-large + + + plc + application/vnd.mobius.plc + + + plf + application/vnd.pocketlearn + + + pls + audio/x-scpls + + + pml + application/vnd.ctc-posml + + + png + image/png + + + pnm + image/x-portable-anymap + + + pnt + image/x-macpaint + + + portpkg + application/vnd.macports.portpkg + + + pot + application/vnd.ms-powerpoint + + + potm + application/vnd.ms-powerpoint.template.macroenabled.12 + + + potx + application/vnd.openxmlformats-officedocument.presentationml.template + + + ppam + application/vnd.ms-powerpoint.addin.macroenabled.12 + + + ppd + application/vnd.cups-ppd + + + ppm + image/x-portable-pixmap + + + pps + application/vnd.ms-powerpoint + + + ppsm + application/vnd.ms-powerpoint.slideshow.macroenabled.12 + + + ppsx + application/vnd.openxmlformats-officedocument.presentationml.slideshow + + + ppt + application/vnd.ms-powerpoint + + + pptm + application/vnd.ms-powerpoint.presentation.macroenabled.12 + + + pptx + application/vnd.openxmlformats-officedocument.presentationml.presentation + + + pqa + application/vnd.palm + + + prc + application/x-mobipocket-ebook + + + pre + application/vnd.lotus-freelance + + + prf + application/pics-rules + + + ps + application/postscript + + + psb + application/vnd.3gpp.pic-bw-small + + + psd + image/vnd.adobe.photoshop + + + psf + application/x-font-linux-psf + + + pskcxml + application/pskc+xml + + + ptid + application/vnd.pvi.ptid1 + + + pub + application/x-mspublisher + + + pvb + application/vnd.3gpp.pic-bw-var + + + pwn + application/vnd.3m.post-it-notes + + + pya + audio/vnd.ms-playready.media.pya + + + pyv + video/vnd.ms-playready.media.pyv + + + qam + application/vnd.epson.quickanime + + + qbo + application/vnd.intu.qbo + + + qfx + application/vnd.intu.qfx + + + qps + application/vnd.publishare-delta-tree + + + qt + video/quicktime + + + qti + image/x-quicktime + + + qtif + image/x-quicktime + + + qwd + application/vnd.quark.quarkxpress + + + qwt + application/vnd.quark.quarkxpress + + + qxb + application/vnd.quark.quarkxpress + + + qxd + application/vnd.quark.quarkxpress + + + qxl + application/vnd.quark.quarkxpress + + + qxt + application/vnd.quark.quarkxpress + + + ra + audio/x-pn-realaudio + + + ram + audio/x-pn-realaudio + + + rar + application/x-rar-compressed + + + ras + image/x-cmu-raster + + + rcprofile + application/vnd.ipunplugged.rcprofile + + + rdf + application/rdf+xml + + + rdz + application/vnd.data-vision.rdz + + + rep + application/vnd.businessobjects + + + res + application/x-dtbresource+xml + + + rgb + image/x-rgb + + + rif + application/reginfo+xml + + + rip + audio/vnd.rip + + + ris + application/x-research-info-systems + + + rl + application/resource-lists+xml + + + rlc + image/vnd.fujixerox.edmics-rlc + + + rld + application/resource-lists-diff+xml + + + rm + application/vnd.rn-realmedia + + + rmi + audio/midi + + + rmp + audio/x-pn-realaudio-plugin + + + rms + application/vnd.jcp.javame.midlet-rms + + + rmvb + application/vnd.rn-realmedia-vbr + + + rnc + application/relax-ng-compact-syntax + + + roa + application/rpki-roa + + + roff + text/troff + + + rp9 + application/vnd.cloanto.rp9 + + + rpss + application/vnd.nokia.radio-presets + + + rpst + application/vnd.nokia.radio-preset + + + rq + application/sparql-query + + + rs + application/rls-services+xml + + + rsd + application/rsd+xml + + + rss + application/rss+xml + + + rtf + application/rtf + + + rtx + text/richtext + + + s + text/x-asm + + + s3m + audio/s3m + + + saf + application/vnd.yamaha.smaf-audio + + + sbml + application/sbml+xml + + + sc + application/vnd.ibm.secure-container + + + scd + application/x-msschedule + + + scm + application/vnd.lotus-screencam + + + scq + application/scvp-cv-request + + + scs + application/scvp-cv-response + + + scurl + text/vnd.curl.scurl + + + sda + application/vnd.stardivision.draw + + + sdc + application/vnd.stardivision.calc + + + sdd + application/vnd.stardivision.impress + + + sdkd + application/vnd.solent.sdkm+xml + + + sdkm + application/vnd.solent.sdkm+xml + + + sdp + application/sdp + + + sdw + application/vnd.stardivision.writer + + + see + application/vnd.seemail + + + seed + application/vnd.fdsn.seed + + + sema + application/vnd.sema + + + semd + application/vnd.semd + + + semf + application/vnd.semf + + + ser + application/java-serialized-object + + + setpay + application/set-payment-initiation + + + setreg + application/set-registration-initiation + + + sfd-hdstx + application/vnd.hydrostatix.sof-data + + + sfs + application/vnd.spotfire.sfs + + + sfv + text/x-sfv + + + sgi + image/sgi + + + sgl + application/vnd.stardivision.writer-global + + + sgm + text/sgml + + + sgml + text/sgml + + + sh + application/x-sh + + + shar + application/x-shar + + + shf + application/shf+xml + + + + sid + image/x-mrsid-image + + + sig + application/pgp-signature + + + sil + audio/silk + + + silo + model/mesh + + + sis + application/vnd.symbian.install + + + sisx + application/vnd.symbian.install + + + sit + application/x-stuffit + + + sitx + application/x-stuffitx + + + skd + application/vnd.koan + + + skm + application/vnd.koan + + + skp + application/vnd.koan + + + skt + application/vnd.koan + + + sldm + application/vnd.ms-powerpoint.slide.macroenabled.12 + + + sldx + application/vnd.openxmlformats-officedocument.presentationml.slide + + + slt + application/vnd.epson.salt + + + sm + application/vnd.stepmania.stepchart + + + smf + application/vnd.stardivision.math + + + smi + application/smil+xml + + + smil + application/smil+xml + + + smv + video/x-smv + + + smzip + application/vnd.stepmania.package + + + snd + audio/basic + + + snf + application/x-font-snf + + + so + application/octet-stream + + + spc + application/x-pkcs7-certificates + + + spf + application/vnd.yamaha.smaf-phrase + + + spl + application/x-futuresplash + + + spot + text/vnd.in3d.spot + + + spp + application/scvp-vp-response + + + spq + application/scvp-vp-request + + + spx + audio/ogg + + + sql + application/x-sql + + + src + application/x-wais-source + + + srt + application/x-subrip + + + sru + application/sru+xml + + + srx + application/sparql-results+xml + + + ssdl + application/ssdl+xml + + + sse + application/vnd.kodak-descriptor + + + ssf + application/vnd.epson.ssf + + + ssml + application/ssml+xml + + + st + application/vnd.sailingtracker.track + + + stc + application/vnd.sun.xml.calc.template + + + std + application/vnd.sun.xml.draw.template + + + stf + application/vnd.wt.stf + + + sti + application/vnd.sun.xml.impress.template + + + stk + application/hyperstudio + + + stl + application/vnd.ms-pki.stl + + + str + application/vnd.pg.format + + + stw + application/vnd.sun.xml.writer.template + + + sub + text/vnd.dvb.subtitle + + + sus + application/vnd.sus-calendar + + + susp + application/vnd.sus-calendar + + + sv4cpio + application/x-sv4cpio + + + sv4crc + application/x-sv4crc + + + svc + application/vnd.dvb.service + + + svd + application/vnd.svd + + + svg + image/svg+xml + + + svgz + image/svg+xml + + + swa + application/x-director + + + swf + application/x-shockwave-flash + + + swi + application/vnd.aristanetworks.swi + + + sxc + application/vnd.sun.xml.calc + + + sxd + application/vnd.sun.xml.draw + + + sxg + application/vnd.sun.xml.writer.global + + + sxi + application/vnd.sun.xml.impress + + + sxm + application/vnd.sun.xml.math + + + sxw + application/vnd.sun.xml.writer + + + t + text/troff + + + t3 + application/x-t3vm-image + + + taglet + application/vnd.mynfc + + + tao + application/vnd.tao.intent-module-archive + + + tar + application/x-tar + + + tcap + application/vnd.3gpp2.tcap + + + tcl + application/x-tcl + + + teacher + application/vnd.smart.teacher + + + tei + application/tei+xml + + + teicorpus + application/tei+xml + + + tex + application/x-tex + + + texi + application/x-texinfo + + + texinfo + application/x-texinfo + + + text + text/plain + + + tfi + application/thraud+xml + + + tfm + application/x-tex-tfm + + + tga + image/x-tga + + + thmx + application/vnd.ms-officetheme + + + tif + image/tiff + + + tiff + image/tiff + + + tmo + application/vnd.tmobile-livetv + + + torrent + application/x-bittorrent + + + tpl + application/vnd.groove-tool-template + + + tpt + application/vnd.trid.tpt + + + tr + text/troff + + + tra + application/vnd.trueapp + + + trm + application/x-msterminal + + + tsd + application/timestamped-data + + + tsv + text/tab-separated-values + + + ttc + font/collection + + + ttf + font/ttf + + + ttl + text/turtle + + + twd + application/vnd.simtech-mindmapper + + + twds + application/vnd.simtech-mindmapper + + + txd + application/vnd.genomatix.tuxedo + + + txf + application/vnd.mobius.txf + + + txt + text/plain + + + u32 + application/x-authorware-bin + + + udeb + application/x-debian-package + + + ufd + application/vnd.ufdl + + + ufdl + application/vnd.ufdl + + + ulw + audio/basic + + + ulx + application/x-glulx + + + umj + application/vnd.umajin + + + unityweb + application/vnd.unity + + + uoml + application/vnd.uoml+xml + + + uri + text/uri-list + + + uris + text/uri-list + + + urls + text/uri-list + + + ustar + application/x-ustar + + + utz + application/vnd.uiq.theme + + + uu + text/x-uuencode + + + uva + audio/vnd.dece.audio + + + uvd + application/vnd.dece.data + + + uvf + application/vnd.dece.data + + + uvg + image/vnd.dece.graphic + + + uvh + video/vnd.dece.hd + + + uvi + image/vnd.dece.graphic + + + uvm + video/vnd.dece.mobile + + + uvp + video/vnd.dece.pd + + + uvs + video/vnd.dece.sd + + + uvt + application/vnd.dece.ttml+xml + + + uvu + video/vnd.uvvu.mp4 + + + uvv + video/vnd.dece.video + + + uvva + audio/vnd.dece.audio + + + uvvd + application/vnd.dece.data + + + uvvf + application/vnd.dece.data + + + uvvg + image/vnd.dece.graphic + + + uvvh + video/vnd.dece.hd + + + uvvi + image/vnd.dece.graphic + + + uvvm + video/vnd.dece.mobile + + + uvvp + video/vnd.dece.pd + + + uvvs + video/vnd.dece.sd + + + uvvt + application/vnd.dece.ttml+xml + + + uvvu + video/vnd.uvvu.mp4 + + + uvvv + video/vnd.dece.video + + + uvvx + application/vnd.dece.unspecified + + + uvvz + application/vnd.dece.zip + + + uvx + application/vnd.dece.unspecified + + + uvz + application/vnd.dece.zip + + + vcard + text/vcard + + + vcd + application/x-cdlink + + + vcf + text/x-vcard + + + vcg + application/vnd.groove-vcard + + + vcs + text/x-vcalendar + + + vcx + application/vnd.vcx + + + vis + application/vnd.visionary + + + viv + video/vnd.vivo + + + vob + video/x-ms-vob + + + vor + application/vnd.stardivision.writer + + + vox + application/x-authorware-bin + + + vrml + model/vrml + + + vsd + application/vnd.visio + + + vsf + application/vnd.vsf + + + vss + application/vnd.visio + + + vst + application/vnd.visio + + + vsw + application/vnd.visio + + + vtu + model/vnd.vtu + + + vxml + application/voicexml+xml + + + w3d + application/x-director + + + wad + application/x-doom + + + wav + audio/x-wav + + + wax + audio/x-ms-wax + + + + wbmp + image/vnd.wap.wbmp + + + wbs + application/vnd.criticaltools.wbs+xml + + + wbxml + application/vnd.wap.wbxml + + + wcm + application/vnd.ms-works + + + wdb + application/vnd.ms-works + + + wdp + image/vnd.ms-photo + + + weba + audio/webm + + + webm + video/webm + + + webp + image/webp + + + wg + application/vnd.pmi.widget + + + wgt + application/widget + + + wks + application/vnd.ms-works + + + wm + video/x-ms-wm + + + wma + audio/x-ms-wma + + + wmd + application/x-ms-wmd + + + wmf + application/x-msmetafile + + + + wml + text/vnd.wap.wml + + + + wmlc + application/vnd.wap.wmlc + + + + wmls + text/vnd.wap.wmlscript + + + + wmlsc + application/vnd.wap.wmlscriptc + + + wmv + video/x-ms-wmv + + + wmx + video/x-ms-wmx + + + wmz + application/x-msmetafile + + + woff + font/woff + + + woff2 + font/woff2 + + + wpd + application/vnd.wordperfect + + + wpl + application/vnd.ms-wpl + + + wps + application/vnd.ms-works + + + wqd + application/vnd.wqd + + + wri + application/x-mswrite + + + wrl + model/vrml + + + wsdl + application/wsdl+xml + + + wspolicy + application/wspolicy+xml + + + wtb + application/vnd.webturbo + + + wvx + video/x-ms-wvx + + + x32 + application/x-authorware-bin + + + x3d + model/x3d+xml + + + x3db + model/x3d+binary + + + x3dbz + model/x3d+binary + + + x3dv + model/x3d+vrml + + + x3dvz + model/x3d+vrml + + + x3dz + model/x3d+xml + + + xaml + application/xaml+xml + + + xap + application/x-silverlight-app + + + xar + application/vnd.xara + + + xbap + application/x-ms-xbap + + + xbd + application/vnd.fujixerox.docuworks.binder + + + xbm + image/x-xbitmap + + + xdf + application/xcap-diff+xml + + + xdm + application/vnd.syncml.dm+xml + + + xdp + application/vnd.adobe.xdp+xml + + + xdssc + application/dssc+xml + + + xdw + application/vnd.fujixerox.docuworks + + + xenc + application/xenc+xml + + + xer + application/patch-ops-error+xml + + + xfdf + application/vnd.adobe.xfdf + + + xfdl + application/vnd.xfdl + + + xht + application/xhtml+xml + + + xhtml + application/xhtml+xml + + + xhvml + application/xv+xml + + + xif + image/vnd.xiff + + + xla + application/vnd.ms-excel + + + xlam + application/vnd.ms-excel.addin.macroenabled.12 + + + xlc + application/vnd.ms-excel + + + xlf + application/x-xliff+xml + + + xlm + application/vnd.ms-excel + + + xls + application/vnd.ms-excel + + + xlsb + application/vnd.ms-excel.sheet.binary.macroenabled.12 + + + xlsm + application/vnd.ms-excel.sheet.macroenabled.12 + + + xlsx + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + + + xlt + application/vnd.ms-excel + + + xltm + application/vnd.ms-excel.template.macroenabled.12 + + + xltx + application/vnd.openxmlformats-officedocument.spreadsheetml.template + + + xlw + application/vnd.ms-excel + + + xm + audio/xm + + + xml + application/xml + + + xo + application/vnd.olpc-sugar + + + xop + application/xop+xml + + + xpi + application/x-xpinstall + + + xpl + application/xproc+xml + + + xpm + image/x-xpixmap + + + xpr + application/vnd.is-xpr + + + xps + application/vnd.ms-xpsdocument + + + xpw + application/vnd.intercon.formnet + + + xpx + application/vnd.intercon.formnet + + + xsl + application/xml + + + xslt + application/xslt+xml + + + xsm + application/vnd.syncml+xml + + + xspf + application/xspf+xml + + + xul + application/vnd.mozilla.xul+xml + + + xvm + application/xv+xml + + + xvml + application/xv+xml + + + xwd + image/x-xwindowdump + + + xyz + chemical/x-xyz + + + xz + application/x-xz + + + yang + application/yang + + + yin + application/yin+xml + + + z + application/x-compress + + + Z + application/x-compress + + + z1 + application/x-zmachine + + + z2 + application/x-zmachine + + + z3 + application/x-zmachine + + + z4 + application/x-zmachine + + + z5 + application/x-zmachine + + + z6 + application/x-zmachine + + + z7 + application/x-zmachine + + + z8 + application/x-zmachine + + + zaz + application/vnd.zzazz.deck+xml + + + zip + application/zip + + + zir + application/vnd.zul + + + zirz + application/vnd.zul + + + zmm + application/vnd.handheld-entertainment+xml + + + + + + + + + + + + + + + + + + index.html + index.htm + index.jsp + + +