container-start.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/bin/bash -e
  2. FIRST_START_DONE="/etc/docker-openldap-first-start-done"
  3. #fix file permissions
  4. chown -R openldap:openldap /var/lib/ldap
  5. chown -R openldap:openldap /etc/ldap
  6. # container first start
  7. if [ ! -e "$FIRST_START_DONE" ]; then
  8. # database is uninitialized
  9. if [ -z "$(ls -A /var/lib/ldap)" ]; then
  10. cat <<EOF | debconf-set-selections
  11. slapd slapd/internal/generated_adminpw password ${LDAP_ADMIN_PASSWORD}
  12. slapd slapd/internal/adminpw password ${LDAP_ADMIN_PASSWORD}
  13. slapd slapd/password2 password ${LDAP_ADMIN_PASSWORD}
  14. slapd slapd/password1 password ${LDAP_ADMIN_PASSWORD}
  15. slapd slapd/dump_database_destdir string /var/backups/slapd-VERSION
  16. slapd slapd/domain string ${LDAP_DOMAIN}
  17. slapd shared/organization string ${LDAP_ORGANISATION}
  18. slapd slapd/backend string HDB
  19. slapd slapd/purge_database boolean true
  20. slapd slapd/move_old_database boolean true
  21. slapd slapd/allow_ldap_v2 boolean false
  22. slapd slapd/no_configuration boolean false
  23. slapd slapd/dump_database select when needed
  24. EOF
  25. dpkg-reconfigure -f noninteractive slapd
  26. fi
  27. # start OpenLDAP
  28. slapd -h "ldapi:///" -u openldap -g openldap
  29. # add ppolicy schema
  30. ldapadd -Y EXTERNAL -Q -H ldapi:/// -f /etc/ldap/schema/ppolicy.ldif
  31. # TLS config
  32. if [ "${USE_TLS,,}" == "true" ]; then
  33. # check certificat and key or create it
  34. /sbin/ssl-kit "/osixia/slapd/ssl/$SSL_CRT_FILENAME" "/osixia/slapd/ssl/$SSL_KEY_FILENAME" --ca-crt=/osixia/slapd/ssl/$SSL_CA_CRT_FILENAME --gnutls
  35. # create DHParamFile if not found
  36. [ -f /osixia/slapd/ssl/dhparam.pem ] || openssl dhparam -out /osixia/slapd/ssl/dhparam.pem 2048
  37. # adapt tls ldif
  38. sed -i "s,/osixia/slapd/ssl/ca.crt,/osixia/slapd/ssl/${SSL_CA_CRT_FILENAME},g" /osixia/slapd/tls.ldif
  39. sed -i "s,/osixia/slapd/ssl/ldap.crt,/osixia/slapd/ssl/${SSL_CRT_FILENAME},g" /osixia/slapd/tls.ldif
  40. sed -i "s,/osixia/slapd/ssl/ldap.key,/osixia/slapd/ssl/${SSL_KEY_FILENAME},g" /osixia/slapd/tls.ldif
  41. # set tls config
  42. ldapmodify -Y EXTERNAL -Q -H ldapi:/// -f /osixia/slapd/tls.ldif
  43. # add localhost route to certificate cn (need docker 1.5.0)
  44. cn=$(openssl x509 -in /osixia/slapd/ssl/$SSL_CRT_FILENAME -subject -noout | sed -n 's/.*CN=\(.*\)\/*\(.*\)/\1/p')
  45. echo "127.0.0.1 $cn" >> /etc/hosts
  46. # local ldap tls client config
  47. sed -i "s,TLS_CACERT.*,TLS_CACERT /osixia/slapd/ssl/${SSL_CA_CRT_FILENAME},g" /etc/ldap/ldap.conf
  48. fi
  49. # convert schemas to ldif
  50. SCHEMAS=""
  51. for f in $(find /osixia/slapd/schema -name \*.schema -type f); do
  52. SCHEMAS="$SCHEMAS ${f}"
  53. done
  54. /osixia/slapd/schema-to-ldif.sh "$SCHEMAS"
  55. for f in $(find /osixia/slapd/schema -name \*.ldif -type f); do
  56. echo "Processing file ${f}"
  57. ldapadd -Y EXTERNAL -Q -H ldapi:/// -f $f
  58. done
  59. # OpenLDAP config
  60. for f in $(find /osixia/slapd/config -name \*.ldif -type f); do
  61. echo "Processing file ${f}"
  62. ldapmodify -Y EXTERNAL -Q -H ldapi:/// -f $f
  63. done
  64. # stop OpenLDAP
  65. kill -INT `cat /run/slapd/slapd.pid`
  66. touch $FIRST_START_DONE
  67. fi
  68. # fix file permissions
  69. chown openldap:openldap -R /osixia/slapd
  70. exit 0