Commit 7dda04e9 authored by Maël Kervella's avatar Maël Kervella

Add install_re2o subcommands

parent 826502df
#!/bin/bash #!/bin/bash
setup_ldap() { SETTINGS_LOCAL_FILE='re2o/settings_local.py'
### Usage: setup_ldap <ldap_password> <local_domain> SETTINGS_EXAMPLE_FILE='re2o/settings_local.example.py'
#
# This function is used to setup the LDAP structure based on the ldiff files
# located in 'install_utils/'. It will delete the previous structure and data
# and recreate a new empty one.
#
# Parameters:
# * ldap_password: the clear password for the admin user of the LDAP
# * local_domain: the domain extension to use for the LDAP structure in LDAP notation
###
apt-get -y install slapd
echo "Hashing the LDAP password ..."
hashed_ldap_passwd=$(slappasswd -s $1)
echo "Hash of the password: $hashed_ldap_passwd"
echo "Building the LDAP config files ..."
sed 's|dc=example,dc=org|'"$2"'|g' install_utils/db.ldiff | sed 's|FILL_IT|'"$hashed_ldap_passwd"'|g' > /tmp/db
sed 's|dc=example,dc=org|'"$2"'|g' install_utils/schema.ldiff | sed 's|FILL_IT|'"$hashed_ldap_passwd"'|g' > /tmp/schema
echo "Building the LDAP config files: Done"
echo "Stopping slapd service ..."
service slapd stop
echo "Stopping slapd service: Done"
echo "Deleting exisitng LDAP configuration ..."
rm -rf /etc/ldap/slapd.d/*
rm -rf /var/lib/ldap/*
echo "Deleting existing LDAP configuration: Done"
echo "Setting up the new LDAP configuration ..."
slapadd -n 0 -l /tmp/schema -F /etc/ldap/slapd.d/
slapadd -n 1 -l /tmp/db
echo "Setting up the new LDAP configuration: Done"
echo "Fixing the LDAP files permissions ..."
chown -R openldap:openldap /etc/ldap/slapd.d
chown -R openldap:openldap /var/lib/ldap
echo "Fixing the LDAP files permissions: Done"
echo "Starting slapd service ..."
service slapd start
echo "Starting slapd service: Done"
}
install_requirements() { install_requirements() {
...@@ -174,28 +131,6 @@ install_database() { ...@@ -174,28 +131,6 @@ install_database() {
init_django() {
### Usage: init_django
#
# This function will initialise the Django project by applying the migrations,
# creating a first user with the superuser rights and collecting the statics
###
echo "Applying Django migrations ..."
python3 manage.py migrate
echo "Applying Django migrations: Done"
echo "Creating a superuser ..."
python3 manage.py createsuperuser
echo "Creating a superuser: Done"
echo "Collecting web frontend statics ..."
python3 manage.py collectstatic --noinput
echo "Collecting web frontend statics: Done"
}
install_active_directory() { install_active_directory() {
### Usage: install_active_directory <local_setup> <password> <domain> ### Usage: install_active_directory <local_setup> <password> <domain>
# #
...@@ -217,14 +152,46 @@ install_active_directory() { ...@@ -217,14 +152,46 @@ install_active_directory() {
if [ $local_setup == 1 ]; then if [ $local_setup == 1 ]; then
echo "Setting up local active directory ..." echo "Installing slapd package ..."
setup_ldap $password $domain apt-get -y install slapd
echo "Setting up local active directory: Done" echo "Installing slapd package: Done"
echo "Hashing the LDAP password ..."
hashed_ldap_passwd=$(slappasswd -s $1)
echo "Hash of the password: $hashed_ldap_passwd"
echo "Building the LDAP config files ..."
sed 's|dc=example,dc=org|'"$2"'|g' install_utils/db.ldiff | sed 's|FILL_IT|'"$hashed_ldap_passwd"'|g' > /tmp/db
sed 's|dc=example,dc=org|'"$2"'|g' install_utils/schema.ldiff | sed 's|FILL_IT|'"$hashed_ldap_passwd"'|g' > /tmp/schema
echo "Building the LDAP config files: Done"
echo "Stopping slapd service ..."
service slapd stop
echo "Stopping slapd service: Done"
echo "Deleting exisitng LDAP configuration ..."
rm -rf /etc/ldap/slapd.d/*
rm -rf /var/lib/ldap/*
echo "Deleting existing LDAP configuration: Done"
echo "Setting up the new LDAP configuration ..."
slapadd -n 0 -l /tmp/schema -F /etc/ldap/slapd.d/
slapadd -n 1 -l /tmp/db
echo "Setting up the new LDAP configuration: Done"
echo "Fixing the LDAP files permissions ..."
chown -R openldap:openldap /etc/ldap/slapd.d
chown -R openldap:openldap /var/lib/ldap
echo "Fixing the LDAP files permissions: Done"
echo "Starting slapd service ..."
service slapd start
echo "Starting slapd service: Done"
else else
echo "Please execute the following command on the remote LDAP server and then continue" echo "Please execute the following command on the remote LDAP server and then continue"
echo "./install_re2o.sh ldap $password $domain" echo "./install_re2o.sh setup-ldap $password $domain"
while true; do while true; do
read -p "Continue (y/n)?" choice read -p "Continue (y/n)?" choice
case "$choice" in case "$choice" in
...@@ -286,9 +253,6 @@ write_settings_file() { ...@@ -286,9 +253,6 @@ write_settings_file() {
extension=${13} extension=${13}
url=${14} url=${14}
SETTINGS_LOCAL_FILE='re2o/settings_local.py'
SETTINGS_EXAMPLE_FILE='re2o/settings_local.example.py'
cp $SETTINGS_EXAMPLE_FILE $SETTINGS_LOCAL_FILE cp $SETTINGS_EXAMPLE_FILE $SETTINGS_LOCAL_FILE
django_secret_key=$(python -c "import random; print(''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789%=+') for i in range(50)]))") django_secret_key=$(python -c "import random; print(''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789%=+') for i in range(50)]))")
...@@ -322,6 +286,36 @@ write_settings_file() { ...@@ -322,6 +286,36 @@ write_settings_file() {
update_django() {
### Usage: update_django
#
# This function will update the Django project by applying the migrations
# and collecting the statics
###
echo "Applying Django migrations ..."
python3 manage.py migrate
echo "Applying Django migrations: Done"
echo "Collecting web frontend statics ..."
python3 manage.py collectstatic --noinput
echo "Collecting web frontend statics: Done"
}
create_superuser() {
### Usage: create_superuser
#
# This will create a user with the superuser rights for the project.
echo "Creating a superuser ..."
python3 manage.py createsuperuser
echo "Creating a superuser: Done"
}
install_webserver() { install_webserver() {
### Usage: install_webserver <engine_type> <tls> <url> ### Usage: install_webserver <engine_type> <tls> <url>
# #
...@@ -669,7 +663,9 @@ interactive_guide() { ...@@ -669,7 +663,9 @@ interactive_guide() {
$ldap_cn $ldap_tls $ldap_password $ldap_host $ldap_dn \ $ldap_cn $ldap_tls $ldap_password $ldap_host $ldap_dn \
$email_host $email_port $extension_locale $url_server $email_host $email_port $extension_locale $url_server
init_django update_django
create_superuser
install_webserver $web_serveur $is_tls $url_server install_webserver $web_serveur $is_tls $url_server
...@@ -684,14 +680,33 @@ interactive_guide() { ...@@ -684,14 +680,33 @@ interactive_guide() {
# Prompt to inform the installation process is over # Prompt to inform the installation process is over
TITLE="End of the setup" TITLE="End of the setup"
MSGBOX="You can now visit $url_server and connect with the credentials you just entered. This user hhas the superuser rights, meaning he can access and do everything." MSGBOX="You can now visit $url_server and connect with the credentials you just entered. This user hhas the superuser rights, meaning he can access and do everything."
end=$(dialog --clear --BACKTITLE "$BACKTITLE" \ end=$(dialog --clear --backtitle "$BACKTITLE" \
--title "$TITLE" --msgbox "$MSGBOX" \ --title "$TITLE" --msgbox "$MSGBOX" \
$HEIGHT $WIDTH 2>&1 >/dev/tty) $HEIGHT $WIDTH 2>&1 >/dev/tty)
} }
interactive_update_settings() {
### Usage: interactvie_update_settings
#
# This function will take the parameters in the example settings file, retrieve the
# existing parameters from the local settings file and ask the user for the missing parameters
###
}
main_function() { main_function() {
### Usage: main_function [ldap <ldap_password> [<local_domain>]] ### Usage: main_function
# main_function update
# main_function update-django
# main_function update-packages
# main_function update-settings
# main_function reset-db <db_password> [<db_engine_type>] [<db_name>] [<db_username>]
# main_function reset-ldap <ldap_password> <local_domain>
# #
# This function will parse the arguments to determine which part of the tool to start. # This function will parse the arguments to determine which part of the tool to start.
# If launched with no arguments, the full setup guide will be started. # If launched with no arguments, the full setup guide will be started.
...@@ -703,20 +718,66 @@ main_function() { ...@@ -703,20 +718,66 @@ main_function() {
### ###
if [ ! -z "$1" ]; then if [ ! -z "$1" ]; then
if [ $1 == ldap ]; then subcmd=$1
case "$subcmd" in
update )
install_requirements
update_django
interactive_update_settings
exit;;
update-django )
update_django
exit;;
update-packages )
install_requirements
exit;;
update-settings )
interactive_update_settings
exit;;
reset-db )
if [ ! -z "$2" ]; then if [ ! -z "$2" ]; then
echo "Setting up local active directory ..." db_password=$2
setup_ldap $2 $3 case "$3" in
echo "Setting up local active directory: Done" mysql|mariadb )
db_engine_type=1; break;;
postresql )
db_engine_type=2; break;;
* )
db_engine_type=1; break;;
esac
if [ ! -z "$4" ]; then db_name=$4; else db_name="re2o"; fi
if [ ! -z "$5" ]; then db_username=$5; else db_username="re2o"; fi
install_database $db_engine_type 1 $db_name $db_username $db_password
else else
echo "Arguments invalides !" echo "Invalid arguments !"
echo "Usage: ./install_re2o.sh [ldap <ldap_password> [<local_domain>]]" echo "Usage: ./install_re2o.sh setup-db <db_password> [<db_engine_type>] [<db_name>] [<db_username>]"
exit
fi fi
fi exit;;
reset-ldap )
if [ ! -z "$2" ] && [ ! -z "$3" ]; then
ldap_password=$2
local_domain=$3
install_active_directory 1 $ldap_password $local_domain
else
echo "Invalid arguments !"
echo "Usage: ./install_re2o.sh setup-ldap <ldap_password> <local_domain>"
fi
exit;;
* )
echo "Invalid";;
esac
else else
install_re2o_server interactive_guide
fi fi
} }
main_function $1 $2 $3 main_function "$@"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment