openship 0.4.4 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -24
- package/dist/bare-2HYDXQEH.js +23 -0
- package/dist/{bowser-MFQA6OS4.js → bowser-O3AEA6AN.js} +5 -1
- package/dist/{chunk-KD7VO4LG.js → chunk-2ZLR7ULL.js} +255 -65
- package/dist/{chunk-YHXCHW7Q.js → chunk-3JQTL4R4.js} +236 -99
- package/dist/{chunk-E77LJWJK.js → chunk-4TJC4JZQ.js} +20 -9
- package/dist/{chunk-YL67EWYZ.js → chunk-4Z5QO7N6.js} +6 -2
- package/dist/{chunk-WJPCBU7Z.js → chunk-5FNIWBFI.js} +10 -6
- package/dist/{chunk-Y37KHU7L.js → chunk-5MZ624VX.js} +5 -0
- package/dist/{chunk-QKFRZNKN.js → chunk-6APIPIJY.js} +8 -4
- package/dist/{chunk-JZLNHGLW.js → chunk-6APULWSU.js} +153 -133
- package/dist/{chunk-F4DFVG6Q.js → chunk-6B5YCFFV.js} +8 -4
- package/dist/{chunk-XVSAUO2I.js → chunk-AVIB7CT7.js} +5 -1
- package/dist/{chunk-TEYJYSMT.js → chunk-C5OHTYEF.js} +12 -6
- package/dist/{chunk-7UOB5GGQ.js → chunk-DYPH4HCI.js} +5 -0
- package/dist/{chunk-XIFRMKYT.js → chunk-EI575GHN.js} +6 -2
- package/dist/{chunk-4CQWT2WL.js → chunk-FPRHYBY2.js} +5 -0
- package/dist/chunk-FQGJZ2HS.js +248 -0
- package/dist/{chunk-JR2OCMJA.js → chunk-FRNAR33O.js} +6 -2
- package/dist/{chunk-JUJBBF5U.js → chunk-FXTBHTWY.js} +362 -42
- package/dist/chunk-ILFETZOM.js +131 -0
- package/dist/{chunk-5ZCKQ2MI.js → chunk-IXCHURVK.js} +7 -3
- package/dist/{chunk-6ERIMTBC.js → chunk-JYGD5WSN.js} +5 -0
- package/dist/{chunk-4VNS5WPM.js → chunk-KI2EY3WB.js} +4 -0
- package/dist/{chunk-3U4SPZD5.js → chunk-L2VOGB2X.js} +7 -104
- package/dist/{chunk-NB2VEIWG.js → chunk-MZ2WEHHY.js} +7 -3
- package/dist/{chunk-BUBSSKO6.js → chunk-O6ZZF52V.js} +5 -1
- package/dist/{chunk-LBFH7THC.js → chunk-OWED2GRM.js} +5 -1
- package/dist/{chunk-4MG3BVHE.js → chunk-OXWDY22G.js} +6 -2
- package/dist/{chunk-4FABQGQP.js → chunk-Q2CIRAOK.js} +5 -0
- package/dist/{chunk-4LEL3H2Z.js → chunk-RPHRPFEH.js} +5 -0
- package/dist/{chunk-46YJFP4S.js → chunk-SQ77DZOI.js} +1728 -1484
- package/dist/{chunk-S6DSRLNE.js → chunk-TGIINPVM.js} +15 -2
- package/dist/{chunk-U2DPZSXA.js → chunk-TYVME3XD.js} +9 -1
- package/dist/{chunk-HFYDYK4D.js → chunk-V6AN6XLZ.js} +18 -6
- package/dist/{chunk-ZKJOFWBJ.js → chunk-VDMQJHPI.js} +38 -15
- package/dist/{chunk-E6W2JMMU.js → chunk-VFINNTUL.js} +22 -1
- package/dist/{chunk-OJE6YWPQ.js → chunk-VWPEKOH6.js} +6 -2
- package/dist/{chunk-5N7VUGL6.js → chunk-W73X43R7.js} +6 -2
- package/dist/cloud-7QYOGF7F.js +11 -0
- package/dist/cloud-ZSKOS4GY.js +30 -0
- package/dist/detect-SH4FHFBI.js +36 -0
- package/dist/{dist-L3MPOWCA.js → dist-IQJ6H6UZ.js} +6 -2
- package/dist/{dist-es-KE56MWYO.js → dist-es-5DY7K32L.js} +9 -5
- package/dist/dist-es-JSTDUS7Q.js +26 -0
- package/dist/{dist-es-GTAMF674.js → dist-es-OSNJBLXB.js} +8 -4
- package/dist/{dist-es-NRZIQY5B.js → dist-es-RYHIPOTN.js} +17 -13
- package/dist/{dist-es-XQCOTGC7.js → dist-es-VNKHQVIB.js} +7 -3
- package/dist/{dist-es-WZCR7DHQ.js → dist-es-WV4AMOII.js} +11 -7
- package/dist/{dist-es-ZW3HFQUM.js → dist-es-X3B5QYKB.js} +9 -5
- package/dist/docker-U7AF5PTA.js +16 -0
- package/dist/docker-edge-executor-VHW3JPJS.js +13 -0
- package/dist/edge-import-V5CBA47C.js +45 -0
- package/dist/ensure-container-edge-CMYROUSI.js +33 -0
- package/dist/{event-streams-7LGDL56D.js → event-streams-EHRAKL75.js} +7 -3
- package/dist/executor-YPT6RH6O.js +30 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +258 -245
- package/dist/{loadSso-N273C5I7.js → loadSso-46FQRIZS.js} +13 -9
- package/dist/local-executor-V7U5VOZW.js +12 -0
- package/dist/nginx-2GTRUIDE.js +24 -0
- package/dist/noop-FMMFG2EZ.js +11 -0
- package/dist/{openresty-lua-HAO4EUDY.js → openresty-lua-4WLGDSER.js} +13 -3
- package/dist/server/engine/ChangeLog +2289 -0
- package/dist/server/engine/Documentations +5 -0
- package/dist/server/engine/LICENSE +674 -0
- package/dist/server/engine/README.md +34 -0
- package/dist/server/engine/conf/amavisd +150 -0
- package/dist/server/engine/conf/clamav +71 -0
- package/dist/server/engine/conf/core +632 -0
- package/dist/server/engine/conf/dovecot +151 -0
- package/dist/server/engine/conf/fail2ban +72 -0
- package/dist/server/engine/conf/global +698 -0
- package/dist/server/engine/conf/iredapd +52 -0
- package/dist/server/engine/conf/logwatch +28 -0
- package/dist/server/engine/conf/postfix +97 -0
- package/dist/server/engine/conf/postgresql +93 -0
- package/dist/server/engine/conf/spamassassin +39 -0
- package/dist/server/engine/dialog/config_via_dialog.sh +258 -0
- package/dist/server/engine/dialog/optional_components.sh +122 -0
- package/dist/server/engine/dialog/pgsql_config.sh +52 -0
- package/dist/server/engine/dialog/virtual_domain_config.sh +94 -0
- package/dist/server/engine/functions/amavisd.sh +267 -0
- package/dist/server/engine/functions/backend.sh +85 -0
- package/dist/server/engine/functions/clamav.sh +100 -0
- package/dist/server/engine/functions/cleanup.sh +393 -0
- package/dist/server/engine/functions/dovecot.sh +583 -0
- package/dist/server/engine/functions/fail2ban.sh +209 -0
- package/dist/server/engine/functions/iredapd.sh +356 -0
- package/dist/server/engine/functions/optional_components.sh +24 -0
- package/dist/server/engine/functions/packages.sh +522 -0
- package/dist/server/engine/functions/packages_freebsd.sh +179 -0
- package/dist/server/engine/functions/postfix.sh +457 -0
- package/dist/server/engine/functions/postgresql.sh +239 -0
- package/dist/server/engine/functions/spamassassin.sh +49 -0
- package/dist/server/engine/functions/system_accounts.sh +128 -0
- package/dist/server/engine/iRedMail.sh +144 -0
- package/dist/server/engine/pkgs/get_all.sh +338 -0
- package/dist/server/engine/pkgs/pkgs.freebsd.sha256 +3 -0
- package/dist/server/engine/pkgs/pkgs.openbsd.sha256 +6 -0
- package/dist/server/engine/pkgs/pkgs.sha256 +1 -0
- package/dist/server/engine/samples/amavisd/amavisd.conf +677 -0
- package/dist/server/engine/samples/amavisd/amavisd.mysql +278 -0
- package/dist/server/engine/samples/amavisd/amavisd.pgsql +253 -0
- package/dist/server/engine/samples/amavisd/amavisd.schema +942 -0
- package/dist/server/engine/samples/amavisd/default_spam_policy.sql +46 -0
- package/dist/server/engine/samples/dovecot/dovecot-2.4-mariadb.conf +758 -0
- package/dist/server/engine/samples/dovecot/dovecot-2.4-openldap.conf +767 -0
- package/dist/server/engine/samples/dovecot/dovecot-2.4-pgsql.conf +762 -0
- package/dist/server/engine/samples/dovecot/dovecot-last-login.conf +50 -0
- package/dist/server/engine/samples/dovecot/dovecot-ldap.conf +21 -0
- package/dist/server/engine/samples/dovecot/dovecot-share-folder.conf +22 -0
- package/dist/server/engine/samples/dovecot/dovecot-sql.conf +28 -0
- package/dist/server/engine/samples/dovecot/dovecot-used-quota.conf +13 -0
- package/dist/server/engine/samples/dovecot/dovecot.conf +484 -0
- package/dist/server/engine/samples/dovecot/dovecot.sieve +7 -0
- package/dist/server/engine/samples/dovecot/dovecot2-quota-warning.sh +38 -0
- package/dist/server/engine/samples/dovecot/sql/imap_share_folder.mysql +16 -0
- package/dist/server/engine/samples/dovecot/sql/last_login.mysql +12 -0
- package/dist/server/engine/samples/dovecot/sql/used_quota.mysql +26 -0
- package/dist/server/engine/samples/dovecot/systemd/override.conf +3 -0
- package/dist/server/engine/samples/fail2ban/action.d/banned_db.conf +9 -0
- package/dist/server/engine/samples/fail2ban/bin/fail2ban_banned_db +268 -0
- package/dist/server/engine/samples/fail2ban/fail2ban.local +17 -0
- package/dist/server/engine/samples/fail2ban/filter.d/dovecot.iredmail.conf +5 -0
- package/dist/server/engine/samples/fail2ban/filter.d/postfix-pregreet.iredmail.conf +16 -0
- package/dist/server/engine/samples/fail2ban/filter.d/postfix.iredmail.conf +18 -0
- package/dist/server/engine/samples/fail2ban/filter.d/roundcube.iredmail.conf +9 -0
- package/dist/server/engine/samples/fail2ban/jail.d/dovecot.local +8 -0
- package/dist/server/engine/samples/fail2ban/jail.d/nginx-http-auth.local +8 -0
- package/dist/server/engine/samples/fail2ban/jail.d/postfix-pregreet.local +9 -0
- package/dist/server/engine/samples/fail2ban/jail.d/postfix.local +8 -0
- package/dist/server/engine/samples/fail2ban/jail.d/roundcube.local +9 -0
- package/dist/server/engine/samples/fail2ban/jail.d/sogo.local +8 -0
- package/dist/server/engine/samples/fail2ban/jail.d/sshd.local +8 -0
- package/dist/server/engine/samples/fail2ban/jail.local +6 -0
- package/dist/server/engine/samples/fail2ban/openbsd/rc +27 -0
- package/dist/server/engine/samples/fail2ban/sql/fail2ban.mysql +49 -0
- package/dist/server/engine/samples/fail2ban/sql/fail2ban.pgsql +48 -0
- package/dist/server/engine/samples/firewall/firewalld/services/ssh.xml +6 -0
- package/dist/server/engine/samples/firewall/firewalld/zones/iredmail.xml +15 -0
- package/dist/server/engine/samples/firewall/iptables/ip6tables.init.debian +362 -0
- package/dist/server/engine/samples/firewall/iptables/ip6tables.rules +53 -0
- package/dist/server/engine/samples/firewall/iptables/iptables.init.debian +363 -0
- package/dist/server/engine/samples/firewall/iptables/iptables.rules +54 -0
- package/dist/server/engine/samples/firewall/nftables.conf +58 -0
- package/dist/server/engine/samples/freebsd/newsyslog.conf.d/dovecot.conf +3 -0
- package/dist/server/engine/samples/freebsd/newsyslog.conf.d/iredapd.conf +1 -0
- package/dist/server/engine/samples/freebsd/newsyslog.conf.d/mlmmjadmin.conf +1 -0
- package/dist/server/engine/samples/freebsd/newsyslog.conf.d/php-fpm.conf +2 -0
- package/dist/server/engine/samples/freebsd/newsyslog.conf.d/slapd.conf +1 -0
- package/dist/server/engine/samples/freebsd/syslog.d/dovecot.conf +2 -0
- package/dist/server/engine/samples/freebsd/syslog.d/fail2ban.conf +2 -0
- package/dist/server/engine/samples/freebsd/syslog.d/iredapd.conf +2 -0
- package/dist/server/engine/samples/freebsd/syslog.d/mlmmjadmin.conf +2 -0
- package/dist/server/engine/samples/freebsd/syslog.d/php-fpm.conf +2 -0
- package/dist/server/engine/samples/freebsd/syslog.d/slapd.conf +2 -0
- package/dist/server/engine/samples/iredmail/iredmail.mysql +491 -0
- package/dist/server/engine/samples/iredmail/iredmail.pgsql +465 -0
- package/dist/server/engine/samples/iredmail/iredmail.schema +456 -0
- package/dist/server/engine/samples/iredmail/used_quota_triggers_dovecot_2.3.pgsql +40 -0
- package/dist/server/engine/samples/iredmail/used_quota_triggers_dovecot_2.4.pgsql +18 -0
- package/dist/server/engine/samples/logrotate/dovecot +13 -0
- package/dist/server/engine/samples/logrotate/iredapd +13 -0
- package/dist/server/engine/samples/logrotate/mlmmjadmin +13 -0
- package/dist/server/engine/samples/logrotate/openldap +19 -0
- package/dist/server/engine/samples/logrotate/php-fpm +13 -0
- package/dist/server/engine/samples/openbsd/ldapd.conf +58 -0
- package/dist/server/engine/samples/openbsd/pf.conf +28 -0
- package/dist/server/engine/samples/postfix/command_filter.pcre +3 -0
- package/dist/server/engine/samples/postfix/freebsd/mailer.conf +9 -0
- package/dist/server/engine/samples/postfix/helo_access.pcre +180 -0
- package/dist/server/engine/samples/postfix/ldap/catchall_maps.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/recipient_bcc_maps_domain.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/recipient_bcc_maps_user.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/relay_domains.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/sender_bcc_maps_domain.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/sender_bcc_maps_user.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/sender_dependent_relayhost_maps_domain.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/sender_dependent_relayhost_maps_user.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/sender_login_maps.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/transport_maps_domain.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/transport_maps_user.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/virtual_alias_maps.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/virtual_group_maps.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/virtual_group_members_maps.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/virtual_mailbox_domains.cf +11 -0
- package/dist/server/engine/samples/postfix/ldap/virtual_mailbox_maps.cf +12 -0
- package/dist/server/engine/samples/postfix/main.cf +282 -0
- package/dist/server/engine/samples/postfix/main.cf.amavisd +7 -0
- package/dist/server/engine/samples/postfix/main.cf.dovecot +8 -0
- package/dist/server/engine/samples/postfix/main.cf.ldap +39 -0
- package/dist/server/engine/samples/postfix/main.cf.mlmmj +5 -0
- package/dist/server/engine/samples/postfix/main.cf.mysql +39 -0
- package/dist/server/engine/samples/postfix/main.cf.pgsql +39 -0
- package/dist/server/engine/samples/postfix/main.cf.postscreen +30 -0
- package/dist/server/engine/samples/postfix/master.cf +87 -0
- package/dist/server/engine/samples/postfix/mysql/catchall_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/domain_alias_catchall_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/domain_alias_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/recipient_bcc_maps_domain.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/recipient_bcc_maps_user.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/relay_domains.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/sender_bcc_maps_domain.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/sender_bcc_maps_user.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/sender_dependent_relayhost_maps.cf +6 -0
- package/dist/server/engine/samples/postfix/mysql/sender_login_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/transport_maps_domain.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/transport_maps_maillist.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/transport_maps_user.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/virtual_alias_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/virtual_mailbox_domains.cf +5 -0
- package/dist/server/engine/samples/postfix/mysql/virtual_mailbox_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/catchall_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/domain_alias_catchall_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/domain_alias_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/recipient_bcc_maps_domain.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/recipient_bcc_maps_user.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/relay_domains.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/sender_bcc_maps_domain.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/sender_bcc_maps_user.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/sender_dependent_relayhost_maps.cf +6 -0
- package/dist/server/engine/samples/postfix/pgsql/sender_login_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/transport_maps_domain.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/transport_maps_maillist.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/transport_maps_user.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/virtual_alias_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/virtual_mailbox_domains.cf +5 -0
- package/dist/server/engine/samples/postfix/pgsql/virtual_mailbox_maps.cf +5 -0
- package/dist/server/engine/samples/postfix/postscreen_access.cidr +6 -0
- package/dist/server/engine/samples/postgresql/sql/add_first_domain_and_user.sql +34 -0
- package/dist/server/engine/samples/postgresql/sql/grant_permissions.sql +14 -0
- package/dist/server/engine/samples/postgresql/sql/init_vmail_db.sql +15 -0
- package/dist/server/engine/samples/rsyslog.d/1-iredmail-dovecot.conf +23 -0
- package/dist/server/engine/samples/rsyslog.d/1-iredmail-fail2ban.conf +2 -0
- package/dist/server/engine/samples/rsyslog.d/1-iredmail-iredapd.conf +12 -0
- package/dist/server/engine/samples/rsyslog.d/1-iredmail-mlmmjadmin.conf +12 -0
- package/dist/server/engine/samples/rsyslog.d/1-iredmail-openldap.conf +2 -0
- package/dist/server/engine/samples/rsyslog.d/1-iredmail-phpfpm.conf +3 -0
- package/dist/server/engine/samples/spamassassin/local.cf +186 -0
- package/dist/server/engine/samples/spamassassin/razor.conf +1 -0
- package/dist/server/engine/samples/systemd/clamd.service.d/override.conf +2 -0
- package/dist/server/engine/samples/systemd/mariadb.service.d/override.conf +3 -0
- package/dist/server/engine/samples/systemd/slapd.service.d/override.conf +6 -0
- package/dist/server/engine/samples/yum/CentOS-Linux-AppStream.repo +6 -0
- package/dist/server/engine/samples/yum/CentOS-Linux-PowerTools.repo +6 -0
- package/dist/server/engine/samples/yum/CentOS-Stream-AppStream.repo +7 -0
- package/dist/server/engine/samples/yum/CentOS-Stream-PowerTools.repo +7 -0
- package/dist/server/engine/samples/yum/symas-openldap.repo +6 -0
- package/dist/server/engine/tools/add_enabled_service.py +60 -0
- package/dist/server/engine/tools/backup_mysql.sh +238 -0
- package/dist/server/engine/tools/backup_openldap.sh +230 -0
- package/dist/server/engine/tools/backup_pgsql.sh +217 -0
- package/dist/server/engine/tools/backup_sogo.sh +156 -0
- package/dist/server/engine/tools/create_mail_user_OpenLDAP.py +335 -0
- package/dist/server/engine/tools/create_mail_user_OpenLDAP.sh +287 -0
- package/dist/server/engine/tools/create_mail_user_SQL.sh +127 -0
- package/dist/server/engine/tools/enable_postscreen.sh +144 -0
- package/dist/server/engine/tools/fail2ban_unban_ip.sh +39 -0
- package/dist/server/engine/tools/find_sasl_login_ip.sh +20 -0
- package/dist/server/engine/tools/find_top_sasl_usernames.sh +28 -0
- package/dist/server/engine/tools/generate_ssl_keys.sh +85 -0
- package/dist/server/engine/tools/kill_high_cpu_sogo_process.sh +32 -0
- package/dist/server/engine/tools/ldap_assign_user_to_groups.py +151 -0
- package/dist/server/engine/tools/ldap_move_members_to_another_group.py +129 -0
- package/dist/server/engine/tools/migrate_sql_alias_table.py +177 -0
- package/dist/server/engine/update/0.9.8/amavisd.mysql +29 -0
- package/dist/server/engine/update/0.9.8/amavisd.pgsql +39 -0
- package/dist/server/engine/update/0.9.8/iredmail.mysql +53 -0
- package/dist/server/engine/update/0.9.8/iredmail.pgsql +61 -0
- package/dist/server/engine/update/0.9.9/iredmail.mysql +2 -0
- package/dist/server/engine/update/0.9.9/iredmail.pgsql +2 -0
- package/dist/server/engine/update/1.0/iredmail.mysql +2 -0
- package/dist/server/engine/update/1.0/iredmail.pgsql +2 -0
- package/dist/server/engine/update/1.2/last_login.mysql +16 -0
- package/dist/server/engine/update/1.4.0/iredmail.mysql +22 -0
- package/dist/server/engine/update/1.4.0/iredmail.pgsql +20 -0
- package/dist/server/engine/update/1.4.1/iredmail.mysql +3 -0
- package/dist/server/engine/update/1.4.1/iredmail.pgsql +3 -0
- package/dist/server/engine/update/1.4.1/sogo.mysql +11 -0
- package/dist/server/engine/update/1.4.1/sogo.pgsql +30 -0
- package/dist/server/engine/update/1.4.1/update-ldap.py +66 -0
- package/dist/server/engine/update/1.4.2/iredmail.mysql +9 -0
- package/dist/server/engine/update/1.4.2/iredmail.pgsql +9 -0
- package/dist/server/engine/update/1.4.2/sogo.pgsql +30 -0
- package/dist/server/engine/update/1.6.0/sogo_view.pgsql +27 -0
- package/dist/server/engine/update/1.6.3/iredmail.mysql +1 -0
- package/dist/server/engine/update/1.7.0/fail2ban.mysql +11 -0
- package/dist/server/engine/update/1.7.0/fail2ban.pgsql +12 -0
- package/dist/server/engine/update/1.7.1/amavisd.mysql +1 -0
- package/dist/server/engine/update/1.7.2/vmail.mysql +30 -0
- package/dist/server/engine/update/1.7.3/deleted_mailboxes.mysql +43 -0
- package/dist/server/engine/update/1.7.3/iredadmin.mysql +26 -0
- package/dist/server/engine/update/1.7.3/vmail.mysql +79 -0
- package/dist/server/engine/update/1.7.3/vmail.pgsql +9 -0
- package/dist/server/engine/update/README.md +1 -0
- package/dist/server/engine/update/ldap/README.md +40 -0
- package/dist/server/engine/update/ldap/update-ldap-dovecot-2.3.py +69 -0
- package/dist/server/index.js +55574 -53675
- package/dist/server/migrations/0071_gh_device_token.sql +3 -0
- package/dist/server/migrations/0072_gh_device_token_method.sql +1 -0
- package/dist/server/migrations/meta/_journal.json +14 -0
- package/dist/setup-HQIZLUOJ.js +20 -0
- package/dist/{signin-DR462ERO.js → signin-ITOPKKUB.js} +13 -9
- package/dist/{sso-oidc-VBZLJUK5.js → sso-oidc-NON2PD7Y.js} +13 -9
- package/dist/{sts-EJLZ4Z77.js → sts-HHFFSAY2.js} +12 -8
- package/package.json +1 -1
- package/dist/bare-ITM45QBX.js +0 -18
- package/dist/cloud-JMPHO3CW.js +0 -7
- package/dist/cloud-W5G6YXAY.js +0 -24
- package/dist/dist-es-4C322O5D.js +0 -22
- package/dist/docker-3FVJMFC3.js +0 -12
- package/dist/docker-edge-executor-ZIWAZWPL.js +0 -9
- package/dist/edge-import-Y34YL6JK.js +0 -39
- package/dist/executor-J7BHW5HF.js +0 -26
- package/dist/nginx-YZWKYKQU.js +0 -16
- package/dist/noop-RRNCIUI5.js +0 -7
- package/dist/setup-5X3WEEHA.js +0 -14
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Author: Zhang Huangbin (zhb@iredmail.org)
|
|
3
|
+
# Date: 16/09/2007
|
|
4
|
+
# Purpose: Backup specified mysql databases with command 'mysqldump'.
|
|
5
|
+
# License: This shell script is part of iRedMail project, released under
|
|
6
|
+
# GPL v2.
|
|
7
|
+
|
|
8
|
+
###########################
|
|
9
|
+
# REQUIREMENTS
|
|
10
|
+
###########################
|
|
11
|
+
#
|
|
12
|
+
# * Required commands:
|
|
13
|
+
# + mysqldump
|
|
14
|
+
# + du
|
|
15
|
+
# + bzip2 # If bzip2 is not available, change 'CMD_COMPRESS'
|
|
16
|
+
# # to use 'gzip'.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
###########################
|
|
20
|
+
# USAGE
|
|
21
|
+
###########################
|
|
22
|
+
#
|
|
23
|
+
# * It stores all backup copies in directory '/var/vmail/backup' by default,
|
|
24
|
+
# You can change it in variable $BACKUP_ROOTDIR below.
|
|
25
|
+
#
|
|
26
|
+
# * Set correct values for below variables:
|
|
27
|
+
#
|
|
28
|
+
# BACKUP_ROOTDIR
|
|
29
|
+
# MYSQL_ROOT_USER
|
|
30
|
+
# DATABASES
|
|
31
|
+
# DB_CHARACTER_SET
|
|
32
|
+
#
|
|
33
|
+
# * Add crontab job for root user (or whatever user you want):
|
|
34
|
+
#
|
|
35
|
+
# # crontab -e -u root
|
|
36
|
+
# 1 4 * * * bash /path/to/backup_mysql.sh
|
|
37
|
+
#
|
|
38
|
+
# * Make sure 'crond' service is running, and will start automatically when
|
|
39
|
+
# system startup:
|
|
40
|
+
#
|
|
41
|
+
# # ---- On RHEL/CentOS ----
|
|
42
|
+
# # chkconfig --level 345 crond on
|
|
43
|
+
# # /etc/init.d/crond status
|
|
44
|
+
#
|
|
45
|
+
# # ---- On Debian/Ubuntu ----
|
|
46
|
+
# # update-rc.d cron defaults
|
|
47
|
+
# # /etc/init.d/cron status
|
|
48
|
+
#
|
|
49
|
+
|
|
50
|
+
#########################################################
|
|
51
|
+
# Modify below variables to fit your need ----
|
|
52
|
+
#########################################################
|
|
53
|
+
# Keep backup for how many days. Default is 90 days.
|
|
54
|
+
KEEP_DAYS='90'
|
|
55
|
+
|
|
56
|
+
# Where to store backup copies.
|
|
57
|
+
export BACKUP_ROOTDIR='/var/vmail/backup'
|
|
58
|
+
|
|
59
|
+
# MySQL username. Root user is required to dump all databases.
|
|
60
|
+
export MYSQL_ROOT_USER='root'
|
|
61
|
+
|
|
62
|
+
# ~/.my.cnf
|
|
63
|
+
export MYSQL_DOT_MY_CNF='/root/.my.cnf'
|
|
64
|
+
|
|
65
|
+
# Databases we should backup.
|
|
66
|
+
# Multiple databases MUST be seperated by SPACE.
|
|
67
|
+
export DATABASES='mysql vmail roundcubemail amavisd iredadmin sogo iredapd sa_bayes'
|
|
68
|
+
|
|
69
|
+
# Database character set for ALL databases.
|
|
70
|
+
# Note: Currently, it doesn't support to specify character set for each databases.
|
|
71
|
+
export DB_CHARACTER_SET="utf8"
|
|
72
|
+
|
|
73
|
+
#########################################################
|
|
74
|
+
# You do *NOT* need to modify below lines.
|
|
75
|
+
#########################################################
|
|
76
|
+
export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin'
|
|
77
|
+
|
|
78
|
+
# Commands.
|
|
79
|
+
export CMD_DATE='/bin/date'
|
|
80
|
+
export CMD_DU='du -sh'
|
|
81
|
+
export CMD_COMPRESS='bzip2 -9'
|
|
82
|
+
export COMPRESS_SUFFIX='bz2'
|
|
83
|
+
export CMD_MYSQL="mysql --defaults-file=${MYSQL_DOT_MY_CNF} -u${MYSQL_ROOT_USER}"
|
|
84
|
+
export CMD_MYSQLDUMP="mysqldump --defaults-file=${MYSQL_DOT_MY_CNF} -u${MYSQL_ROOT_USER} --events --ignore-table=mysql.event --default-character-set=${DB_CHARACTER_SET} --skip-comments"
|
|
85
|
+
|
|
86
|
+
# Date.
|
|
87
|
+
export YEAR="$(${CMD_DATE} +%Y)"
|
|
88
|
+
export MONTH="$(${CMD_DATE} +%m)"
|
|
89
|
+
export DAY="$(${CMD_DATE} +%d)"
|
|
90
|
+
export TIME="$(${CMD_DATE} +%H-%M-%S)"
|
|
91
|
+
export TIMESTAMP="${YEAR}-${MONTH}-${DAY}-${TIME}"
|
|
92
|
+
|
|
93
|
+
# Pre-defined backup status
|
|
94
|
+
export BACKUP_SUCCESS='YES'
|
|
95
|
+
|
|
96
|
+
# Define, check, create directories.
|
|
97
|
+
export BACKUP_DIR="${BACKUP_ROOTDIR}/mysql/${YEAR}/${MONTH}/${DAY}"
|
|
98
|
+
|
|
99
|
+
# Find the old backup which should be removed.
|
|
100
|
+
export REMOVE_OLD_BACKUP='YES'
|
|
101
|
+
|
|
102
|
+
export KERNEL="$(uname -s)"
|
|
103
|
+
if [[ X"${KERNEL}" == X'Linux' ]]; then
|
|
104
|
+
shift_year=$(date --date="${KEEP_DAYS} days ago" "+%Y")
|
|
105
|
+
shift_month=$(date --date="${KEEP_DAYS} days ago" "+%m")
|
|
106
|
+
shift_day=$(date --date="${KEEP_DAYS} days ago" "+%d")
|
|
107
|
+
elif [[ X"${KERNEL}" == X'FreeBSD' ]]; then
|
|
108
|
+
shift_year=$(date -j -v-${KEEP_DAYS}d "+%Y")
|
|
109
|
+
shift_month=$(date -j -v-${KEEP_DAYS}d "+%m")
|
|
110
|
+
shift_day=$(date -j -v-${KEEP_DAYS}d "+%d")
|
|
111
|
+
elif [[ X"${KERNEL}" == X'OpenBSD' ]]; then
|
|
112
|
+
epoch_seconds_now="$(date +%s)"
|
|
113
|
+
epoch_shift="$((${KEEP_DAYS} * 86400))"
|
|
114
|
+
epoch_seconds_old="$((epoch_seconds_now - epoch_shift))"
|
|
115
|
+
|
|
116
|
+
shift_year=$(date -r ${epoch_seconds_old} "+%Y")
|
|
117
|
+
shift_month=$(date -r ${epoch_seconds_old} "+%m")
|
|
118
|
+
shift_day=$(date -r ${epoch_seconds_old} "+%d")
|
|
119
|
+
else
|
|
120
|
+
export REMOVE_OLD_BACKUP='NO'
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
export REMOVED_BACKUP_DIR="${BACKUP_ROOTDIR}/mysql/${shift_year}/${shift_month}/${shift_day}"
|
|
124
|
+
export REMOVED_BACKUP_MONTH_DIR="${BACKUP_ROOTDIR}/mysql/${shift_year}/${shift_month}"
|
|
125
|
+
export REMOVED_BACKUP_YEAR_DIR="${BACKUP_ROOTDIR}/mysql/${shift_year}"
|
|
126
|
+
|
|
127
|
+
# Log file
|
|
128
|
+
export LOGFILE="${BACKUP_DIR}/${TIMESTAMP}.log"
|
|
129
|
+
|
|
130
|
+
# Verify MySQL connection.
|
|
131
|
+
${CMD_MYSQL} -e "show databases" &>/dev/null
|
|
132
|
+
if [ X"$?" != X"0" ]; then
|
|
133
|
+
echo "[ERROR] MySQL username or password is incorrect in file ${0}." 1>&2
|
|
134
|
+
echo "Please fix them first." 1>&2
|
|
135
|
+
|
|
136
|
+
exit 255
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
# Check and create directories.
|
|
140
|
+
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} 2>/dev/null
|
|
141
|
+
chown root ${BACKUP_DIR}
|
|
142
|
+
chmod 0400 ${BACKUP_DIR}
|
|
143
|
+
|
|
144
|
+
# Initialize log file.
|
|
145
|
+
echo "* Starting backup: ${TIMESTAMP}." >${LOGFILE}
|
|
146
|
+
echo "* Backup directory: ${BACKUP_DIR}." >>${LOGFILE}
|
|
147
|
+
chmod 0400 ${LOGFILE}
|
|
148
|
+
|
|
149
|
+
# Check whether iredadmin database exists.
|
|
150
|
+
# Used for logging backup status in iredadmin database.
|
|
151
|
+
export has_iredadmin="NO"
|
|
152
|
+
if echo ${DATABASES} | grep 'iredadmin' &>/dev/null; then
|
|
153
|
+
has_iredadmin="YES"
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
# Backup.
|
|
157
|
+
echo "* Backing up databases: ${DATABASES}." >> ${LOGFILE}
|
|
158
|
+
for db in ${DATABASES}; do
|
|
159
|
+
#backup_db ${db} >>${LOGFILE}
|
|
160
|
+
|
|
161
|
+
#if [ X"$?" == X"0" ]; then
|
|
162
|
+
# echo " - ${db} [DONE]" >> ${LOGFILE}
|
|
163
|
+
#else
|
|
164
|
+
# [ X"${BACKUP_SUCCESS}" == X'YES' ] && export BACKUP_SUCCESS='NO'
|
|
165
|
+
#fi
|
|
166
|
+
output_sql="${BACKUP_DIR}/${db}-${TIMESTAMP}.sql"
|
|
167
|
+
|
|
168
|
+
# Check database existence
|
|
169
|
+
${CMD_MYSQL} -e "USE ${db}" &>/dev/null
|
|
170
|
+
|
|
171
|
+
if [ X"$?" == X'0' ]; then
|
|
172
|
+
# Dump
|
|
173
|
+
${CMD_MYSQLDUMP} ${db} > ${output_sql}
|
|
174
|
+
chmod 0400 ${output_sql}
|
|
175
|
+
|
|
176
|
+
if [ X"$?" == X'0' ]; then
|
|
177
|
+
# Get original SQL file size
|
|
178
|
+
original_size="$(${CMD_DU} ${output_sql} | awk '{print $1}')"
|
|
179
|
+
|
|
180
|
+
# Compress
|
|
181
|
+
${CMD_COMPRESS} ${output_sql} >>${LOGFILE}
|
|
182
|
+
chmod 0400 ${output_sql}.*
|
|
183
|
+
|
|
184
|
+
if [ X"$?" == X'0' ]; then
|
|
185
|
+
rm -f ${output_sql} >> ${LOGFILE}
|
|
186
|
+
fi
|
|
187
|
+
|
|
188
|
+
# Get compressed file size
|
|
189
|
+
compressed_file_name="${output_sql}.${COMPRESS_SUFFIX}"
|
|
190
|
+
compressed_size="$(${CMD_DU} ${compressed_file_name} | awk '{print $1}')"
|
|
191
|
+
|
|
192
|
+
sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Database: ${db}, size: ${compressed_size} (original: ${original_size})', 'cron_backup_sql', '127.0.0.1', UTC_TIMESTAMP());"
|
|
193
|
+
else
|
|
194
|
+
# backup failed
|
|
195
|
+
export BACKUP_SUCCESS='NO'
|
|
196
|
+
sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Database backup failed: ${db}. Log: $(cat ${LOGFILE})', 'cron_backup_sql', '127.0.0.1', UTC_TIMESTAMP());"
|
|
197
|
+
fi
|
|
198
|
+
|
|
199
|
+
# Log to SQL table `iredadmin.log`, so that global domain admins can
|
|
200
|
+
# check backup status (System -> Admin Log)
|
|
201
|
+
if [[ ${has_iredadmin} == "YES" ]]; then
|
|
202
|
+
${CMD_MYSQL} iredadmin -e "${sql_log_msg}"
|
|
203
|
+
fi
|
|
204
|
+
fi
|
|
205
|
+
done
|
|
206
|
+
|
|
207
|
+
# Append file size of backup files.
|
|
208
|
+
echo -e "* File size:\n----" >>${LOGFILE}
|
|
209
|
+
cd ${BACKUP_DIR} && \
|
|
210
|
+
${CMD_DU} *${TIMESTAMP}*sql* >>${LOGFILE}
|
|
211
|
+
echo "----" >>${LOGFILE}
|
|
212
|
+
|
|
213
|
+
echo "* Backup completed (Success? ${BACKUP_SUCCESS})." >>${LOGFILE}
|
|
214
|
+
|
|
215
|
+
if [ X"${BACKUP_SUCCESS}" == X'YES' ]; then
|
|
216
|
+
echo "==> Backup completed successfully."
|
|
217
|
+
else
|
|
218
|
+
echo -e "==> Backup completed with !!!ERRORS!!!.\n" 1>&2
|
|
219
|
+
fi
|
|
220
|
+
|
|
221
|
+
if [[ X"${REMOVE_OLD_BACKUP}" == X'YES' ]] && [[ -d "${REMOVED_BACKUP_DIR}" ]]; then
|
|
222
|
+
echo -e "* Old backup found. Deleting: ${REMOVED_BACKUP_DIR}." >>${LOGFILE}
|
|
223
|
+
rm -rf ${REMOVED_BACKUP_DIR} >> ${LOGFILE} 2>&1
|
|
224
|
+
|
|
225
|
+
# Try to remove empty directory.
|
|
226
|
+
rmdir ${REMOVED_BACKUP_MONTH_DIR} 2>/dev/null
|
|
227
|
+
rmdir ${REMOVED_BACKUP_YEAR_DIR} 2>/dev/null
|
|
228
|
+
|
|
229
|
+
sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Remove old backup: ${REMOVED_BACKUP_DIR}.', 'cron_backup_sql', '127.0.0.1', UTC_TIMESTAMP());"
|
|
230
|
+
|
|
231
|
+
if [[ ${has_iredadmin} == "YES" ]]; then
|
|
232
|
+
${CMD_MYSQL} iredadmin -e "${sql_log_msg}"
|
|
233
|
+
fi
|
|
234
|
+
fi
|
|
235
|
+
|
|
236
|
+
echo "==> Detailed log (${LOGFILE}):"
|
|
237
|
+
echo "========================="
|
|
238
|
+
cat ${LOGFILE}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Author: Zhang Huangbin (zhb@iredmail.org)
|
|
4
|
+
# Date: Mar 15, 2012
|
|
5
|
+
# Purpose: Dump whole LDAP tree with command 'slapcat'.
|
|
6
|
+
# License: This shell script is part of iRedMail project, released under
|
|
7
|
+
# GPL v2.
|
|
8
|
+
|
|
9
|
+
###########################
|
|
10
|
+
# REQUIREMENTS
|
|
11
|
+
###########################
|
|
12
|
+
#
|
|
13
|
+
# * Required commands:
|
|
14
|
+
# + slapcat
|
|
15
|
+
# + du
|
|
16
|
+
# + bzip2 # If bzip2 is not available, change 'CMD_COMPRESS' to use 'gzip'.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
###########################
|
|
20
|
+
# USAGE
|
|
21
|
+
###########################
|
|
22
|
+
#
|
|
23
|
+
# * It stores all backup copies in directory '/var/vmail/backup' by default,
|
|
24
|
+
# You can change it with variable $BACKUP_ROOTDIR below.
|
|
25
|
+
#
|
|
26
|
+
# * Set correct values for below variables:
|
|
27
|
+
#
|
|
28
|
+
# BACKUP_ROOTDIR
|
|
29
|
+
#
|
|
30
|
+
# * Add crontab job for root user (or whatever user you want):
|
|
31
|
+
#
|
|
32
|
+
# # crontab -e -u root
|
|
33
|
+
# 1 4 * * * bash /path/to/backup_openldap.sh
|
|
34
|
+
#
|
|
35
|
+
# * Make sure 'crond' service is running, and will start automatically when
|
|
36
|
+
# system startup:
|
|
37
|
+
#
|
|
38
|
+
# # ---- On RHEL/CentOS ----
|
|
39
|
+
# # chkconfig --level 345 crond on
|
|
40
|
+
# # /etc/init.d/crond status
|
|
41
|
+
#
|
|
42
|
+
# # ---- On Debian/Ubuntu ----
|
|
43
|
+
# # update-rc.d cron defaults
|
|
44
|
+
# # /etc/init.d/cron status
|
|
45
|
+
#
|
|
46
|
+
|
|
47
|
+
###############################
|
|
48
|
+
# How to restore backup file:
|
|
49
|
+
###############################
|
|
50
|
+
# Please refer to wiki tutorial for detail steps:
|
|
51
|
+
# http://www.iredmail.org/docs/backup.restore.html
|
|
52
|
+
#
|
|
53
|
+
|
|
54
|
+
#########################################################
|
|
55
|
+
# Modify below variables to fit your need ----
|
|
56
|
+
#########################################################
|
|
57
|
+
# Where to store backup copies.
|
|
58
|
+
export BACKUP_ROOTDIR='/var/vmail/backup'
|
|
59
|
+
|
|
60
|
+
# Keep backup for how many days. Default is 90 days.
|
|
61
|
+
export KEEP_DAYS='90'
|
|
62
|
+
|
|
63
|
+
#########################################################
|
|
64
|
+
# You do *NOT* need to modify below lines.
|
|
65
|
+
#########################################################
|
|
66
|
+
|
|
67
|
+
export PATH="$PATH:/usr/sbin:/usr/local/sbin/"
|
|
68
|
+
|
|
69
|
+
# Commands.
|
|
70
|
+
export CMD_DATE='/bin/date'
|
|
71
|
+
export CMD_DU='du -sh'
|
|
72
|
+
export CMD_COMPRESS='bzip2 -9'
|
|
73
|
+
export COMPRESS_SUFFIX='bz2'
|
|
74
|
+
export CMD_MYSQL='mysql'
|
|
75
|
+
|
|
76
|
+
# MySQL user and password, used to log backup status to sql table `iredadmin.log`.
|
|
77
|
+
# You can find password of SQL user 'iredadmin' in iRedAdmin config file 'settings.py'.
|
|
78
|
+
#
|
|
79
|
+
# If MYSQL_PASSWD is empty, read password from /root/.my.cnf instead.
|
|
80
|
+
export MYSQL_USER='root'
|
|
81
|
+
export MYSQL_PASSWD=''
|
|
82
|
+
export MYSQL_DOT_MY_CNF='/root/.my.cnf'
|
|
83
|
+
|
|
84
|
+
if [ -f /etc/ldap/slapd.conf ]; then
|
|
85
|
+
export CMD_SLAPCAT='slapcat -f /etc/ldap/slapd.conf'
|
|
86
|
+
elif [ -f /etc/openldap/slapd.conf ]; then
|
|
87
|
+
export CMD_SLAPCAT='slapcat -f /etc/openldap/slapd.conf'
|
|
88
|
+
elif [ -f /usr/local/etc/openldap/slapd.conf ]; then
|
|
89
|
+
export CMD_SLAPCAT='slapcat -f /usr/local/etc/openldap/slapd.conf'
|
|
90
|
+
else
|
|
91
|
+
export CMD_SLAPCAT='slapcat'
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# Date.
|
|
95
|
+
export YEAR="$(${CMD_DATE} +%Y)"
|
|
96
|
+
export MONTH="$(${CMD_DATE} +%m)"
|
|
97
|
+
export DAY="$(${CMD_DATE} +%d)"
|
|
98
|
+
export TIME="$(${CMD_DATE} +%H-%M-%S)"
|
|
99
|
+
export TIMESTAMP="${YEAR}-${MONTH}-${DAY}-${TIME}"
|
|
100
|
+
|
|
101
|
+
# Pre-defined backup status
|
|
102
|
+
export BACKUP_SUCCESS='NO'
|
|
103
|
+
|
|
104
|
+
#########
|
|
105
|
+
# Define, check, create directories.
|
|
106
|
+
#
|
|
107
|
+
# Backup directory.
|
|
108
|
+
export BACKUP_DIR="${BACKUP_ROOTDIR}/ldap/${YEAR}/${MONTH}"
|
|
109
|
+
export BACKUP_FILE="${BACKUP_DIR}/${TIMESTAMP}.ldif"
|
|
110
|
+
|
|
111
|
+
# Find the old backup which should be removed.
|
|
112
|
+
export REMOVE_OLD_BACKUP='YES'
|
|
113
|
+
|
|
114
|
+
export KERNEL="$(uname -s)"
|
|
115
|
+
if [[ X"${KERNEL}" == X'Linux' ]]; then
|
|
116
|
+
shift_year=$(date --date="${KEEP_DAYS} days ago" "+%Y")
|
|
117
|
+
shift_month=$(date --date="${KEEP_DAYS} days ago" "+%m")
|
|
118
|
+
shift_day=$(date --date="${KEEP_DAYS} days ago" "+%d")
|
|
119
|
+
elif [[ X"${KERNEL}" == X'FreeBSD' ]]; then
|
|
120
|
+
shift_year=$(date -j -v-${KEEP_DAYS}d "+%Y")
|
|
121
|
+
shift_month=$(date -j -v-${KEEP_DAYS}d "+%m")
|
|
122
|
+
shift_day=$(date -j -v-${KEEP_DAYS}d "+%d")
|
|
123
|
+
elif [[ X"${KERNEL}" == X'OpenBSD' ]]; then
|
|
124
|
+
epoch_seconds_now="$(date +%s)"
|
|
125
|
+
epoch_shift="$((${KEEP_DAYS} * 86400))"
|
|
126
|
+
epoch_seconds_old="$((epoch_seconds_now - epoch_shift))"
|
|
127
|
+
|
|
128
|
+
shift_year=$(date -r ${epoch_seconds_old} "+%Y")
|
|
129
|
+
shift_month=$(date -r ${epoch_seconds_old} "+%m")
|
|
130
|
+
shift_day=$(date -r ${epoch_seconds_old} "+%d")
|
|
131
|
+
else
|
|
132
|
+
export REMOVE_OLD_BACKUP='NO'
|
|
133
|
+
fi
|
|
134
|
+
|
|
135
|
+
export REMOVED_BACKUP_DIR="${BACKUP_ROOTDIR}/ldap/${shift_year}/${shift_month}"
|
|
136
|
+
export REMOVED_BACKUP_MONTH_DIR="${BACKUP_ROOTDIR}/ldap/${shift_year}/${shift_month}"
|
|
137
|
+
export REMOVED_BACKUP_YEAR_DIR="${BACKUP_ROOTDIR}/ldap/${shift_year}"
|
|
138
|
+
export REMOVED_BACKUPS="${BACKUP_ROOTDIR}/ldap/${shift_year}/${shift_month}/${shift_year}-${shift_month}-${shift_day}-*"
|
|
139
|
+
|
|
140
|
+
# Log file
|
|
141
|
+
export LOGFILE="${BACKUP_DIR}/${TIMESTAMP}.log"
|
|
142
|
+
|
|
143
|
+
# Check and create directories.
|
|
144
|
+
[ -d ${BACKUP_DIR} ] || mkdir -p ${BACKUP_DIR}
|
|
145
|
+
chown root ${BACKUP_DIR}
|
|
146
|
+
chmod 0700 ${BACKUP_DIR}
|
|
147
|
+
|
|
148
|
+
# Initialize log file.
|
|
149
|
+
echo "* Starting backup at ${TIMESTAMP}" >> ${LOGFILE}
|
|
150
|
+
echo "* Backup directory: ${BACKUP_DIR}." >> ${LOGFILE}
|
|
151
|
+
|
|
152
|
+
# Backup
|
|
153
|
+
echo "* Dumping LDAP data into file: ${BACKUP_FILE}..." >> ${LOGFILE}
|
|
154
|
+
${CMD_SLAPCAT} > ${BACKUP_FILE}
|
|
155
|
+
|
|
156
|
+
if [ X"$?" == X"0" ]; then
|
|
157
|
+
export BACKUP_SUCCESS='YES'
|
|
158
|
+
|
|
159
|
+
# Get original backup file size
|
|
160
|
+
original_size="$(${CMD_DU} ${BACKUP_FILE} | awk '{print $1}')"
|
|
161
|
+
|
|
162
|
+
# Compress backup file.
|
|
163
|
+
echo "* Compressing LDIF file with command: '${CMD_COMPRESS}' ..." >> ${LOGFILE}
|
|
164
|
+
${CMD_COMPRESS} ${BACKUP_FILE} >> ${LOGFILE} 2>&1
|
|
165
|
+
|
|
166
|
+
echo "* [DONE]" >>${LOGFILE}
|
|
167
|
+
|
|
168
|
+
# Get compressed file size
|
|
169
|
+
compressed_file_name="${BACKUP_FILE}.${COMPRESS_SUFFIX}"
|
|
170
|
+
compressed_size="$(${CMD_DU} ${compressed_file_name} | awk '{print $1}')"
|
|
171
|
+
|
|
172
|
+
echo -n "* Removing plain LDIF file: ${BACKUP_FILE}..." >>${LOGFILE}
|
|
173
|
+
rm -f ${BACKUP_FILE} >> ${LOGFILE} 2>&1
|
|
174
|
+
[ X"$?" == X"0" ] && echo -e "\t[DONE]" >>${LOGFILE}
|
|
175
|
+
|
|
176
|
+
sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Backup LDAP data, size: ${original_size}, compressed: ${compressed_size}', 'cron_backup_ldap', '127.0.0.1', UTC_TIMESTAMP());"
|
|
177
|
+
else
|
|
178
|
+
# Log failure
|
|
179
|
+
sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Backup LDAP data failed, check log file ${LOGFILE} for more details.', 'cron_backup_ldap', '127.0.0.1', UTC_TIMESTAMP());"
|
|
180
|
+
fi
|
|
181
|
+
|
|
182
|
+
# Log to SQL table `iredadmin.log`, so that global domain admins can
|
|
183
|
+
# check backup status (System -> Admin Log)
|
|
184
|
+
export LOG_BACKUP_STATUS='YES'
|
|
185
|
+
if [[ -n ${MYSQL_USER} ]]; then
|
|
186
|
+
if [[ -n ${MYSQL_PASSWD} ]]; then
|
|
187
|
+
export CMD_MYSQL_ROOT="${CMD_MYSQL} -u${MYSQL_USER} -p${MYSQL_PASSWD}"
|
|
188
|
+
else
|
|
189
|
+
export CMD_MYSQL_ROOT="${CMD_MYSQL} --defaults-file=${MYSQL_DOT_MY_CNF} -u${MYSQL_USER}"
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
${CMD_MYSQL_ROOT} -e "USE iredadmin;" &>/dev/null
|
|
193
|
+
if [[ X"$?" != X'0' ]]; then
|
|
194
|
+
export LOG_BACKUP_STATUS='NO'
|
|
195
|
+
fi
|
|
196
|
+
fi
|
|
197
|
+
|
|
198
|
+
if [[ X"${LOG_BACKUP_STATUS}" == X'YES' ]]; then
|
|
199
|
+
${CMD_MYSQL_ROOT} iredadmin -e "${sql_log_msg}" >>${LOGFILE} 2>&1
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
# Append file size of backup files to log file.
|
|
203
|
+
echo "* File size:" >>${LOGFILE}
|
|
204
|
+
echo "=================" >>${LOGFILE}
|
|
205
|
+
${CMD_DU} ${BACKUP_FILE}* >>${LOGFILE}
|
|
206
|
+
echo "=================" >>${LOGFILE}
|
|
207
|
+
|
|
208
|
+
# Print some message. It will cause cron generates an email to root user.
|
|
209
|
+
if [ X"${BACKUP_SUCCESS}" == X'YES' ]; then
|
|
210
|
+
echo "* [ OK ] Backup completes successfully." >> ${LOGFILE}
|
|
211
|
+
else
|
|
212
|
+
echo "* <<< ERROR >>> Backup not successfully complete." >> ${LOGFILE}
|
|
213
|
+
fi
|
|
214
|
+
|
|
215
|
+
if [ X"${REMOVE_OLD_BACKUP}" == X'YES' -a -d ${REMOVED_BACKUP_DIR} ]; then
|
|
216
|
+
echo -e "* Delete old backup under ${REMOVED_BACKUP_DIR}." >> ${LOGFILE}
|
|
217
|
+
echo -e "* Suppose to delete: ${REMOVED_BACKUPS}" >> ${LOGFILE}
|
|
218
|
+
rm -rf ${REMOVED_BACKUPS} >> ${LOGFILE} 2>&1
|
|
219
|
+
|
|
220
|
+
# Try to remove empty directory.
|
|
221
|
+
rmdir ${REMOVED_BACKUP_MONTH_DIR} 2>/dev/null
|
|
222
|
+
rmdir ${REMOVED_BACKUP_YEAR_DIR} 2>/dev/null
|
|
223
|
+
|
|
224
|
+
if [[ X"${LOG_BACKUP_STATUS}" == X'YES' ]]; then
|
|
225
|
+
sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Remove old backup: ${REMOVED_BACKUPS}.', 'cron_backup_sql', '127.0.0.1', UTC_TIMESTAMP());"
|
|
226
|
+
${CMD_MYSQL_ROOT} iredadmin -e "${sql_log_msg}"
|
|
227
|
+
fi
|
|
228
|
+
fi
|
|
229
|
+
|
|
230
|
+
cat ${LOGFILE}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Author: Zhang Huangbin (zhb _at_ iredmail.org)
|
|
4
|
+
# Date: 2012-09-06
|
|
5
|
+
# Purpose: Backup specified PostgreSQL databases with command 'pg_dump'.
|
|
6
|
+
# License: This shell script is part of iRedMail project, released under GPLv2.
|
|
7
|
+
|
|
8
|
+
###########################
|
|
9
|
+
# REQUIREMENTS
|
|
10
|
+
###########################
|
|
11
|
+
#
|
|
12
|
+
# * Required commands:
|
|
13
|
+
# + pg_dump
|
|
14
|
+
# + du
|
|
15
|
+
# + bzip2 # If bzip2 is not available, change 'CMD_COMPRESS'
|
|
16
|
+
# # to use 'gzip'.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
###########################
|
|
20
|
+
# USAGE
|
|
21
|
+
###########################
|
|
22
|
+
#
|
|
23
|
+
# * It stores all backup copies in directory '/var/vmail/backup' by default,
|
|
24
|
+
# You can change it in variable $BACKUP_ROOTDIR below.
|
|
25
|
+
#
|
|
26
|
+
# * Set correct values for below variables:
|
|
27
|
+
#
|
|
28
|
+
# SYS_USER_PGSQL
|
|
29
|
+
# BACKUP_ROOTDIR
|
|
30
|
+
# DATABASES
|
|
31
|
+
#
|
|
32
|
+
# * Add crontab job for root user (or whatever user you want):
|
|
33
|
+
#
|
|
34
|
+
# # crontab -e -u root
|
|
35
|
+
# 1 4 * * * bash /path/to/backup_pgsql.sh
|
|
36
|
+
#
|
|
37
|
+
# * Make sure 'crond' service is running.
|
|
38
|
+
#
|
|
39
|
+
|
|
40
|
+
#########################################################
|
|
41
|
+
# Modify below variables to fit your need ----
|
|
42
|
+
#########################################################
|
|
43
|
+
# Keep backup for how many days. Default is 90 days.
|
|
44
|
+
KEEP_DAYS='90'
|
|
45
|
+
|
|
46
|
+
# System user used to run PostgreSQL daemon.
|
|
47
|
+
# - On Linux, it's postgres.
|
|
48
|
+
# - On FreeBSD, it's pgsql.
|
|
49
|
+
# - On OpenBSD, it's _postgresql.
|
|
50
|
+
export SYS_USER_PGSQL='postgres'
|
|
51
|
+
|
|
52
|
+
# Where to store backup copies.
|
|
53
|
+
export BACKUP_ROOTDIR='/var/vmail/backup'
|
|
54
|
+
|
|
55
|
+
# Databases we should backup.
|
|
56
|
+
# Multiple databases MUST be seperated by SPACE.
|
|
57
|
+
# Your iRedMail server might have below databases:
|
|
58
|
+
# vmail, roundcubemail, cluebringer, amavisd, iredadmin.
|
|
59
|
+
export DATABASES='vmail roundcubemail amavisd iredadmin sogo iredapd sa_bayes'
|
|
60
|
+
|
|
61
|
+
#########################################################
|
|
62
|
+
# You do *NOT* need to modify below lines.
|
|
63
|
+
#########################################################
|
|
64
|
+
export PATH='/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin'
|
|
65
|
+
|
|
66
|
+
# Commands.
|
|
67
|
+
export CMD_DATE='/bin/date'
|
|
68
|
+
export CMD_DU='du -sh'
|
|
69
|
+
export CMD_COMPRESS='bzip2 -9'
|
|
70
|
+
export COMPRESS_SUFFIX='bz2'
|
|
71
|
+
export CMD_PG_DUMP='pg_dump --clean'
|
|
72
|
+
|
|
73
|
+
# Date.
|
|
74
|
+
export YEAR="$(${CMD_DATE} +%Y)"
|
|
75
|
+
export MONTH="$(${CMD_DATE} +%m)"
|
|
76
|
+
export DAY="$(${CMD_DATE} +%d)"
|
|
77
|
+
export TIME="$(${CMD_DATE} +%H-%M-%S)"
|
|
78
|
+
export TIMESTAMP="${YEAR}-${MONTH}-${DAY}-${TIME}"
|
|
79
|
+
|
|
80
|
+
# Pre-defined backup status
|
|
81
|
+
export BACKUP_SUCCESS='YES'
|
|
82
|
+
|
|
83
|
+
# Define, check, create directories.
|
|
84
|
+
export BACKUP_DIR="${BACKUP_ROOTDIR}/pgsql/${YEAR}/${MONTH}/${DAY}"
|
|
85
|
+
|
|
86
|
+
# Find the old backup which should be removed.
|
|
87
|
+
export REMOVE_OLD_BACKUP='YES'
|
|
88
|
+
|
|
89
|
+
export KERNEL="$(uname -s)"
|
|
90
|
+
if [[ X"${KERNEL}" == X'Linux' ]]; then
|
|
91
|
+
shift_year=$(date --date="${KEEP_DAYS} days ago" "+%Y")
|
|
92
|
+
shift_month=$(date --date="${KEEP_DAYS} days ago" "+%m")
|
|
93
|
+
shift_day=$(date --date="${KEEP_DAYS} days ago" "+%d")
|
|
94
|
+
elif [[ X"${KERNEL}" == X'FreeBSD' ]]; then
|
|
95
|
+
shift_year=$(date -j -v-${KEEP_DAYS}d "+%Y")
|
|
96
|
+
shift_month=$(date -j -v-${KEEP_DAYS}d "+%m")
|
|
97
|
+
shift_day=$(date -j -v-${KEEP_DAYS}d "+%d")
|
|
98
|
+
elif [[ X"${KERNEL}" == X'OpenBSD' ]]; then
|
|
99
|
+
epoch_seconds_now="$(date +%s)"
|
|
100
|
+
epoch_shift="$((${KEEP_DAYS} * 86400))"
|
|
101
|
+
epoch_seconds_old="$((epoch_seconds_now - epoch_shift))"
|
|
102
|
+
|
|
103
|
+
shift_year=$(date -r ${epoch_seconds_old} "+%Y")
|
|
104
|
+
shift_month=$(date -r ${epoch_seconds_old} "+%m")
|
|
105
|
+
shift_day=$(date -r ${epoch_seconds_old} "+%d")
|
|
106
|
+
else
|
|
107
|
+
export REMOVE_OLD_BACKUP='NO'
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
export REMOVED_BACKUP_DIR="${BACKUP_ROOTDIR}/pgsql/${shift_year}/${shift_month}/${shift_day}"
|
|
111
|
+
export REMOVED_BACKUP_MONTH_DIR="${BACKUP_ROOTDIR}/pgsql/${shift_year}/${shift_month}"
|
|
112
|
+
export REMOVED_BACKUP_YEAR_DIR="${BACKUP_ROOTDIR}/pgsql/${shift_year}"
|
|
113
|
+
|
|
114
|
+
# Log file
|
|
115
|
+
export LOGFILE="${BACKUP_DIR}/${TIMESTAMP}.log"
|
|
116
|
+
|
|
117
|
+
# Check and create directories.
|
|
118
|
+
[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} 2>/dev/null
|
|
119
|
+
chown root ${BACKUP_DIR}
|
|
120
|
+
chmod 0700 ${BACKUP_DIR}
|
|
121
|
+
|
|
122
|
+
# Get HOME directory of SYS_USER_PGSQL
|
|
123
|
+
export PGSQL_USER_HOMEDIR="$(su - ${SYS_USER_PGSQL} -c 'echo $HOME')"
|
|
124
|
+
|
|
125
|
+
# Initialize log file.
|
|
126
|
+
echo "* Starting at: ${YEAR}-${MONTH}-${DAY}-${TIME}." >${LOGFILE}
|
|
127
|
+
echo "* Backup directory: ${BACKUP_DIR}." >>${LOGFILE}
|
|
128
|
+
|
|
129
|
+
# Check whether iredadmin database exists.
|
|
130
|
+
# Used for logging backup status in iredadmin database.
|
|
131
|
+
export has_iredadmin="NO"
|
|
132
|
+
if echo ${DATABASES} | grep 'iredadmin' &>/dev/null; then
|
|
133
|
+
has_iredadmin="YES"
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
# Backup.
|
|
137
|
+
echo "* Backing up databases: ${DATABASES}." >> ${LOGFILE}
|
|
138
|
+
for db in ${DATABASES}; do
|
|
139
|
+
output_sql="${db}-${TIMESTAMP}.sql"
|
|
140
|
+
|
|
141
|
+
# Check database existence
|
|
142
|
+
su - "${SYS_USER_PGSQL}" -c "psql -d ${db} -c '\q' >/dev/null 2>&1"
|
|
143
|
+
|
|
144
|
+
# Dump
|
|
145
|
+
if [ X"$?" == X'0' ]; then
|
|
146
|
+
su - "${SYS_USER_PGSQL}" -c "${CMD_PG_DUMP} ${db} > ${PGSQL_USER_HOMEDIR}/${output_sql}"
|
|
147
|
+
|
|
148
|
+
if [ X"$?" == X'0' ]; then
|
|
149
|
+
# Move to backup directory.
|
|
150
|
+
mv ${PGSQL_USER_HOMEDIR}/${output_sql} ${BACKUP_DIR}
|
|
151
|
+
|
|
152
|
+
cd ${BACKUP_DIR}
|
|
153
|
+
|
|
154
|
+
# Get original SQL file size
|
|
155
|
+
original_size="$(${CMD_DU} ${output_sql} | awk '{print $1}')"
|
|
156
|
+
|
|
157
|
+
# Compress
|
|
158
|
+
${CMD_COMPRESS} ${output_sql} >>${LOGFILE}
|
|
159
|
+
|
|
160
|
+
rm -f ${output_sql} >> ${LOGFILE}
|
|
161
|
+
echo -e " + ${db} [DONE]" >> ${LOGFILE}
|
|
162
|
+
|
|
163
|
+
# Get compressed file size
|
|
164
|
+
compressed_file_name="${output_sql}.${COMPRESS_SUFFIX}"
|
|
165
|
+
compressed_size="$(${CMD_DU} ${compressed_file_name} | awk '{print $1}')"
|
|
166
|
+
|
|
167
|
+
# Log to SQL table `iredadmin.log`, so that global domain admins
|
|
168
|
+
# can check backup status
|
|
169
|
+
sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Database: ${db}, size: ${compressed_size} (original: ${original_size})', 'cron_backup_sql', '127.0.0.1', NOW());"
|
|
170
|
+
else
|
|
171
|
+
export BACKUP_SUCCESS='NO'
|
|
172
|
+
sql_log_msg="INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES ('backup', 'info', 'Database backup failed: ${db}, check log file ${LOGFILE} for more details.', 'cron_backup_sql', '127.0.0.1', NOW());"
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
if [[ ${has_iredadmin} == "YES" ]]; then
|
|
176
|
+
su - "${SYS_USER_PGSQL}" >/dev/null <<EOF
|
|
177
|
+
psql -d iredadmin <<EOF2
|
|
178
|
+
${sql_log_msg}
|
|
179
|
+
EOF2
|
|
180
|
+
EOF
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
fi
|
|
184
|
+
done
|
|
185
|
+
|
|
186
|
+
# Append file size of backup files.
|
|
187
|
+
echo -e "* File size:\n----" >>${LOGFILE}
|
|
188
|
+
cd ${BACKUP_DIR} && \
|
|
189
|
+
${CMD_DU} *${TIMESTAMP}*sql* >>${LOGFILE}
|
|
190
|
+
echo "----" >>${LOGFILE}
|
|
191
|
+
|
|
192
|
+
echo "* Backup completed (Success? ${BACKUP_SUCCESS})." >>${LOGFILE}
|
|
193
|
+
|
|
194
|
+
if [ X"${BACKUP_SUCCESS}" == X'YES' ]; then
|
|
195
|
+
echo -e "\n[OK] Backup successfully completed.\n"
|
|
196
|
+
else
|
|
197
|
+
echo -e "\n[ERROR] Backup completed with ERRORS.\n" 1>&2
|
|
198
|
+
fi
|
|
199
|
+
|
|
200
|
+
if [ X"${REMOVE_OLD_BACKUP}" == X'YES' -a -d ${REMOVED_BACKUP_DIR} ]; then
|
|
201
|
+
echo -e "* Old backup found. Deleting: ${REMOVED_BACKUP_DIR}." >>${LOGFILE}
|
|
202
|
+
rm -rf ${REMOVED_BACKUP_DIR} >> ${LOGFILE} 2>&1
|
|
203
|
+
|
|
204
|
+
# Try to remove empty directory.
|
|
205
|
+
rmdir ${REMOVED_BACKUP_MONTH_DIR} 2>/dev/null
|
|
206
|
+
rmdir ${REMOVED_BACKUP_YEAR_DIR} 2>/dev/null
|
|
207
|
+
|
|
208
|
+
if [[ ${has_iredadmin} == "YES" ]]; then
|
|
209
|
+
su - ${SYS_USER_PGSQL} -c "psql -d iredadmin" <<EOF
|
|
210
|
+
INSERT INTO log (event, loglevel, msg, admin, ip, timestamp) VALUES
|
|
211
|
+
('backup', 'info', 'Remove old backup: ${REMOVED_BACKUP_DIR}.', 'cron_backup_sql', '127.0.0.1', NOW());
|
|
212
|
+
EOF
|
|
213
|
+
fi
|
|
214
|
+
fi
|
|
215
|
+
|
|
216
|
+
echo "* Backup log: ${LOGFILE}:"
|
|
217
|
+
cat ${LOGFILE}
|