diff --git a/.hgignore b/.hgignore new file mode 100644 index 00000000..e43b0f98 --- /dev/null +++ b/.hgignore @@ -0,0 +1 @@ +.DS_Store diff --git a/unattended.iredmail.installation.md b/3-faq-howto/unattended.iredmail.installation.md similarity index 66% rename from unattended.iredmail.installation.md rename to 3-faq-howto/unattended.iredmail.installation.md index 7c13cbc8..1b38ae67 100644 --- a/unattended.iredmail.installation.md +++ b/3-faq-howto/unattended.iredmail.installation.md @@ -1,23 +1,28 @@ - +# How to perform silent/unattended iRedMail installation -#How to perform silent/unattended iRedMail installation - -* iRedMail will store configrations in file iRedMail-x.y.z/config during installation, and ask you whether to use it for installation directly or re-create one. -* iRedMail will read several global variables for automate installation. +iRedMail will store configrations in file iRedMail-x.y.z/config during +installation, and ask you whether to use it for installation directly +or create a new one. You can create a sample config file by executing iRedMail installer: -
-# bash iRedMail.sh
-
-After config wizard dialogs, you will find file "config" under iRedMail root directory. For example, __/root/iRedMail-0.8.7/config__. it will ask whether to start installation or not, you can cancel it if you want. -You can copy this config file to deploy as many servers as you want, change the hard-coded passwords in it if you want. +```bash +# bash iRedMail.sh +``` + +After config wizard dialogs, you will find file `config` under iRedMail root +directory. For example, `/root/iRedMail-0.8.7/config`. it will ask whether to +start installation or not, you can cancel it if you want. + +You can copy this config file to deploy as many servers as you want, change +the hard-coded passwords in it if you want. How to deploy a new server with sample config file: -* Copy sample config file to new server, e.g. /root/iRedMail-0.8.7/config. +* Copy sample config file to new server, e.g. `/root/iRedMail-0.8.7/config`. * Execute iRedMail installer with shell variables: -
+
+```bash
 # AUTO_USE_EXISTING_CONFIG_FILE=y \
     AUTO_INSTALL_WITHOUT_CONFIRM=y \
     AUTO_CLEANUP_REMOVE_SENDMAIL=y \
@@ -27,41 +32,60 @@ How to deploy a new server with sample config file:
     AUTO_CLEANUP_REPLACE_MYSQL_CONFIG=y \
     AUTO_CLEANUP_RESTART_POSTFIX=n \
     bash iRedMail.sh
-
+``` +## Sample Deployment --------- +Here's how i preform iRedMail tests every day with VMware Fusion on Mac OS X, +all are completed automatically with a shell command. +* Install a clean, basic/minimal OS (Debian/CentOS/OpenBSD/FreeBSD, etc), set +proper hostname, configure network, then shut down this server and create a +VMware snapshot named `Latest`. The snapshot name will be used in my shell +script, it needs a snapshot name to reverse VM to the clean OS. -Here's how i preform iRedMail tests every day with VMware Fusion on Mac OS X, all are completed with a shell script and VMware command line tool "vmrun" and "scp", "ssh". Hope it helps. +* Revert VM to the latest snapshot (a clean, basic, minimal OS) with VMware +command line tool `vmrun`. -* Install a clean, basic/minimal OS (Debian/CentOS/openSUSE/OpenBSD/etc), set proper hostname, configure network, then shut down this server and create a VMware snapshot named "Latest". The snapshot name will be used in my shell script, it needs a snapshot name to reverse VM to the clean OS. -* Revert VM to the latest snapshot (a clean, basic, minimal OS) with "vmrun". -* Start this VM with "vmrun", sleep 30 (or 60) seconds waiting for OS start up. -* Detect network connection to this VM, if it's up, upload required files with "scp": +* Start this VM with `vmrun`, sleep 30 (or 60) seconds waiting for OS start up. + +* Detect network connection to this VM, if it's up, upload required files with `scp`: * the latest development edition of iRedMail * source tarballs required by iRedMail (Roundcube, iRedAdmin, iRedAPD, etc) - * downloaded RHEL/CentOS/Debian/Ubuntu/OpenBSD binary packages, FreeBSD distfiles etc. The most important one is a prepared iRedMail config file: iRedMail-x.y.z/config. -* Create/Update iRedMail installation status file: iRedMail-x.y.z/.status to skip downloading source tarballs, etc. + * downloaded RHEL/CentOS/Debian/Ubuntu/OpenBSD binary packages, FreeBSD + distfiles etc. The most important one is a prepared iRedMail config file: iRedMail-x.y.z/config. + +* Create/Update iRedMail installation status file: iRedMail-x.y.z/.status + to skip downloading source tarballs, etc. + * Perform installation via ssh like this: -
+
+```shell
 ssh root@[SERVER] "cd /root/iRedMail/ && IREDMAIL_DEBUG='NO' AUTO_USE_EXISTING_CONFIG_FILE=y AUTO_INSTALL_WITHOUT_CONFIRM=y AUTO_CLEANUP_REMOVE_SENDMAIL=y AUTO_CLEANUP_REMOVE_MOD_PYTHON=y AUTO_CLEANUP_REPLACE_FIREWALL_RULES=y AUTO_CLEANUP_RESTART_IPTABLES=y AUTO_CLEANUP_REPLACE_MYSQL_CONFIG=y AUTO_CLEANUP_RESTART_POSTFIX=n bash iRedMail.sh"
-
+``` + * Perform after-installation tasks: upload downloaded ClamAV database, ..., reboot server. -It should be finished in 2-3 minutes (uploading binary packages takes most time), then i got a working iRedMail server. I do this many times each day. +It should complete in 2-3 minutes (uploading binary packages takes most time), +then i got a working iRedMail server. I do this many times every day. -I have 5 prepared iRedMail config files for different backends: OpenLDAP, MySQL, MariaDB, PostgreSQL, ldapd (OpenBSD only). i run my script with an option to install iRedMail with specified backend like below, the script will upload proper config file to server: -
+I have 5 prepared iRedMail config files for different backends: OpenLDAP,
+MySQL, MariaDB, PostgreSQL, ldapd (OpenBSD only). i run my script with an
+option to install iRedMail with specified backend like below, the script will
+upload proper config file to server:
+
+```shell
 # bash auto.centos7.sh ldap
 # bash auto.centos7.sh mysql
 # bash auto.centos7.sh pgsql
 # bash auto.ubuntu14.sh mariadb
 # bash auto.openbsd55.sh ldapd
-
+``` -Below is file of __auto.centos7.sh__ mentioned above, it prepares VMware virtual machine, then execute another script __c7.sh__ to perform the real installation. -
+Below is file of `auto.centos7.sh` mentioned above, it prepares VMware virtual
+machine, then execute another script `c7.sh` to perform the real installation.
+
+```shell
 #!/usr/bin/env bash
 # File: auto.centos7.sh
 
@@ -95,9 +119,9 @@ done
 
 echo "* Start testing iRedMail."
 sh ${VM_HOSTNAME}.sh ${backend}
-
+``` -
+```shell
 #!/usr/bin/env bash
 # File: c7.sh
 [ X"$#" != X'1' ] && echo 'No backend?' && exit 255
@@ -127,4 +151,4 @@ ssh root@${HOST} "/usr/bin/systemctl stop firewalld"
 #scp -r clamav/* root@${HOST}:/var/lib/clamav/
 #ssh root@${HOST} "chown clamupdate:clamupdate /var/lib/clamav/*"
 ssh root@${HOST} "echo 'reboot'; reboot"
-
+``` diff --git a/3-faq-howto/turn.on.debug.mode.in.dovecot.md b/5-troubleshooting/turn.on.debug.mode.in.dovecot.md similarity index 100% rename from 3-faq-howto/turn.on.debug.mode.in.dovecot.md rename to 5-troubleshooting/turn.on.debug.mode.in.dovecot.md diff --git a/convert.sh b/convert.sh index 7ec751fb..27f8f411 100644 --- a/convert.sh +++ b/convert.sh @@ -10,7 +10,7 @@ # - better way to strip prefix in dir/file name: [number]- # Directory used to store converted html files. -PWD="$(PWD)" +PWD="." SOURCE_DIR="${PWD}/src" OUTPUT_DIR="${PWD}/html" INDEX_MD="${OUTPUT_DIR}/index.md" @@ -51,14 +51,15 @@ for chapter_dir in ${all_chapter_dirs}; do # Output directory. # Remove prefix '[number]-' in chapter directory name. - _output_chapter_dir="${OUTPUT_DIR}/$(strip_name_prefix ${chapter_dir})" + chapter_dir_in_article="$(strip_name_prefix ${chapter_dir})" + _output_chapter_dir="${OUTPUT_DIR}/${chapter_dir_in_article}" _title_md="${chapter_dir}/_title.md" _summary_md="${chapter_dir}/_summary.md" if [ -f ${_title_md} ]; then # generate index info of chapter - echo "# [$(cat ${_title_md})](${_output_chapter_dir}/_summary.html)" >> ${INDEX_MD} + echo "# [$(cat ${_title_md})](${chapter_dir_in_article}/_summary.html)" >> ${INDEX_MD} fi mkdir -p ${_output_chapter_dir} &>/dev/null @@ -80,16 +81,16 @@ for chapter_dir in ${all_chapter_dirs}; do # Get title. _article_title="$(head -1 ${article_file} | awk -F'#' '{print $2}')" #echo "article title: ${_article_title}" - echo "* [${_article_title}](${_output_chapter_dir}/${article_html_file})" >> ${INDEX_MD} + echo "* [${_article_title}](${chapter_dir_in_article}/${article_html_file})" >> ${INDEX_MD} ${CMD_CONVERT} ${article_file} ${_output_chapter_dir} done done -cd ${OUTPUT_DIR} +#cd ${OUTPUT_DIR} # Generate index.html -python ../tools/markdown2html.py ${INDEX_MD} ${OUTPUT_DIR} css='../css/markdown.css' +${CMD_CONVERT} ${INDEX_MD} ${OUTPUT_DIR} css='../css/markdown.css' # Cleanup #rm -f ${INDEX_MD} diff --git a/css/markdown.css b/css/markdown.css index 1b447fc7..8325a586 100644 --- a/css/markdown.css +++ b/css/markdown.css @@ -2,37 +2,23 @@ body{ margin: 0 auto; font-family: Georgia, Palatino, serif; line-height: 1; - max-width: 80%; + max-width: 70%; padding: 30px; } -h1, h2, h3, h4 { +h1, h2, h3, h4, h5 { font-weight: 400; -} -h1, h2, h3, h4, h5, p { + margin-top: 24px; margin-bottom: 24px; +} +p { + margin-bottom: 4px; padding: 0; } -h1 { - /*font-size: 48px;*/ - font-size: 36px; -} -h2 { - /*font-size: 36px;*/ - /* The bottom margin is small. It's designed to be used with gray meta text - * below a post title. */ - /*margin: 24px 0 6px;*/ - font-size: 24px; - margin: 10px 0 6px 20px; -} -h3 { - font-size: 24px; -} -h4 { - font-size: 21px; -} -h5 { - font-size: 18px; -} +h1 { font-size: 36px; } +h2 { font-size: 24px; } +h3 { font-size: 24px; } +h4 { font-size: 21px; } +h5 { font-size: 18px; } a { color: #0099ff; margin: 0; @@ -104,18 +90,15 @@ hr { /* Code below this line is copyright Twitter Inc. */ -button, -input, -select, -textarea { +button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; - *vertical-align: middle; + vertical-align: middle; } button, input { line-height: normal; - *overflow: visible; + overflow: visible; } button::-moz-focus-inner, input::-moz-focus-inner { border: 0; @@ -261,17 +244,15 @@ button::-moz-focus-inner { } pre, code { - font-size: 16px; -background: #f5f5f5; -border: 1px solid #ccc; -border-radius: 3px; -overflow-x: auto; -padding: 5px 10px 5px 10px; -word-wrap: normal + background: #f5f5f5; + border: 1px solid #ccc; + border-radius: 3px; + overflow-x: auto; + padding: 5px 10px 5px 10px; + word-wrap: normal } code {padding: 1px 5px 1px 5px;} pre>code { - font-size: 16px; margin: 0; border: 0; padding: 1px 3px; diff --git a/html/faq-howto/unattended.iredmail.installation.html b/html/faq-howto/unattended.iredmail.installation.html new file mode 100644 index 00000000..a69a306b --- /dev/null +++ b/html/faq-howto/unattended.iredmail.installation.html @@ -0,0 +1,158 @@ + + + + + + + + +

+

How to perform silent/unattended iRedMail installation

+

iRedMail will store configrations in file iRedMail-x.y.z/config during +installation, and ask you whether to use it for installation directly +or create a new one.

+

You can create a sample config file by executing iRedMail installer:

+
# bash iRedMail.sh
+
+ +

After config wizard dialogs, you will find file config under iRedMail root +directory. For example, /root/iRedMail-0.8.7/config. it will ask whether to +start installation or not, you can cancel it if you want.

+

You can copy this config file to deploy as many servers as you want, change +the hard-coded passwords in it if you want.

+

How to deploy a new server with sample config file:

+ +
# AUTO_USE_EXISTING_CONFIG_FILE=y \
+    AUTO_INSTALL_WITHOUT_CONFIRM=y \
+    AUTO_CLEANUP_REMOVE_SENDMAIL=y \
+    AUTO_CLEANUP_REMOVE_MOD_PYTHON=y \
+    AUTO_CLEANUP_REPLACE_FIREWALL_RULES=y \
+    AUTO_CLEANUP_RESTART_IPTABLES=y \
+    AUTO_CLEANUP_REPLACE_MYSQL_CONFIG=y \
+    AUTO_CLEANUP_RESTART_POSTFIX=n \
+    bash iRedMail.sh
+
+ +

Sample Deployment

+

Here's how i preform iRedMail tests every day with VMware Fusion on Mac OS X, +all are completed automatically with a shell command.

+ +
ssh root@[SERVER] "cd /root/iRedMail/ && IREDMAIL_DEBUG='NO' AUTO_USE_EXISTING_CONFIG_FILE=y AUTO_INSTALL_WITHOUT_CONFIRM=y AUTO_CLEANUP_REMOVE_SENDMAIL=y AUTO_CLEANUP_REMOVE_MOD_PYTHON=y AUTO_CLEANUP_REPLACE_FIREWALL_RULES=y AUTO_CLEANUP_RESTART_IPTABLES=y AUTO_CLEANUP_REPLACE_MYSQL_CONFIG=y AUTO_CLEANUP_RESTART_POSTFIX=n bash iRedMail.sh"
+
+ + +

It should complete in 2-3 minutes (uploading binary packages takes most time), +then i got a working iRedMail server. I do this many times every day.

+

I have 5 prepared iRedMail config files for different backends: OpenLDAP, +MySQL, MariaDB, PostgreSQL, ldapd (OpenBSD only). i run my script with an +option to install iRedMail with specified backend like below, the script will +upload proper config file to server:

+
# bash auto.centos7.sh ldap
+# bash auto.centos7.sh mysql
+# bash auto.centos7.sh pgsql
+# bash auto.ubuntu14.sh mariadb
+# bash auto.openbsd55.sh ldapd
+
+ +

Below is file of auto.centos7.sh mentioned above, it prepares VMware virtual +machine, then execute another script c7.sh to perform the real installation.

+
#!/usr/bin/env bash
+# File: auto.centos7.sh
+
+[ X"$#" != X'1' ] && echo 'No backend? ldap, mysql, pgsql' && exit 255
+export backend="${1}"
+
+export VMRUN='vmrun -T fusion'
+export VM_USER_ROOT='root'
+export VM_HOSTNAME='c7'
+
+export VM="/Users/zhb/vm.packages/vm/CentOS-7-x86_64.vmwarevm/CentOS-7-x86_64.vmx"
+
+echo "* Revert to the latest snapshot."
+${VMRUN} revertToSnapshot ${VM} Latest
+
+echo "* Start VM."
+${VMRUN} start ${VM}
+
+echo "* Sleep 30 seconds to wait VM start up."
+sleep 30
+
+echo "* Detect network status with ssh."
+while :; do
+    ssh ${VM_USER_ROOT}@${VM_HOSTNAME} "exit"
+    if [ X"$?" == X'0' ]; then
+        break
+    else
+        sleep 5
+    fi
+done
+
+echo "* Start testing iRedMail."
+sh ${VM_HOSTNAME}.sh ${backend}
+
+ +
#!/usr/bin/env bash
+# File: c7.sh
+[ X"$#" != X'1' ] && echo 'No backend?' && exit 255
+backend="${1}"
+# hostname of your VMware virtual machine set in Mac OS X /etc/hosts.
+HOST="c7"
+
+echo 'copying iRedMail ...'
+scp -r ~/projects/iredmail/iRedMail root@${HOST}:~ >/dev/null
+
+echo 'copying pkgs/misc ...'
+scp -r misc root@${HOST}:~/iRedMail/pkgs/ >/dev/null
+scp -r config.${backend} root@${HOST}:~/iRedMail/config >/dev/null
+
+echo 'copying archives ...'
+scp -r rhel/7/yum root@${HOST}:/var/cache/ >/dev/null
+
+echo 'updating .status ...'
+ssh root@${HOST} "echo export status_check_new_iredmail='DONE' > /root/iRedMail/.status"
+ssh root@${HOST} "echo export status_fetch_pkgs='DONE' >> /root/iRedMail/.status"
+ssh root@${HOST} "echo export status_fetch_misc='DONE' >> /root/iRedMail/.status"
+ssh root@${HOST} "echo export status_cleanup_update_clamav_signatures='DONE' >> /root/iRedMail/.status"
+ssh root@${HOST} "cd /root/iRedMail/ && yum clean metadata && AUTO_USE_EXISTING_CONFIG_FILE=y AUTO_INSTALL_WITHOUT_CONFIRM=y AUTO_CLEANUP_REMOVE_SENDMAIL=y AUTO_CLEANUP_REMOVE_MOD_PYTHON=y AUTO_CLEANUP_REPLACE_FIREWALL_RULES=y AUTO_CLEANUP_RESTART_IPTABLES=y AUTO_CLEANUP_REPLACE_MYSQL_CONFIG=y AUTO_CLEANUP_RESTART_POSTFIX=n bash iRedMail.sh"
+ssh root@${HOST} "/usr/bin/systemctl stop firewalld"
+
+#ssh root@${HOST} "mkdir /root/pro && cp /var/www/iredadmin/settings.py /root/pro/"
+#scp -r clamav/* root@${HOST}:/var/lib/clamav/
+#ssh root@${HOST} "chown clamupdate:clamupdate /var/lib/clamav/*"
+ssh root@${HOST} "echo 'reboot'; reboot"
+
\ No newline at end of file diff --git a/html/index.html b/html/index.html index cb5cdd8c..9858d5d6 100644 --- a/html/index.html +++ b/html/index.html @@ -7,16 +7,18 @@

-

Frequently Asked Questions and Howto documents

+

Frequently Asked Questions and Howto documents

-

Backup and Restore

+

Backup and Restore

\ No newline at end of file diff --git a/html/index.md b/html/index.md deleted file mode 100644 index fe75887e..00000000 --- a/html/index.md +++ /dev/null @@ -1,10 +0,0 @@ - -# [Frequently Asked Questions and Howto documents](/Users/zhb/projects/docs/html/faq-howto/_summary.html) -* [ Amavisd + SpamAssassin not working, no mail header (X-Spam-*) inserted.](/Users/zhb/projects/docs/html/faq-howto/amavisd.no.x-spam.headers.html) -* [ How to completely disable amavisd/ClamAV/SpamAssassin](/Users/zhb/projects/docs/html/faq-howto/completely.disable.amavisd.clamav.spamassassin.html) -* [ How to disable spam virus scanning for outgoing mails](/Users/zhb/projects/docs/html/faq-howto/disable.spam.virus.scanning.for.outgoing.mails.html) -* [ Configure Thunderbird as mail client (IMAP, SMTP and global ldap address book)](/Users/zhb/projects/docs/html/faq-howto/howto.configure.thunderbird.for.iredmail.html) -* [ How to enable SMTPS service (SMTP over SSL, port 465)](/Users/zhb/projects/docs/html/faq-howto/howto.enable.smtps.service.html) -* [ How to pipe incoming email for certain user to external script ](/Users/zhb/projects/docs/html/faq-howto/pipe.incoming.email.for.certain.user.to.external.script.html) -# [Backup and Restore](/Users/zhb/projects/docs/html/backup-restore/_summary.html) -* [How to migrate old iRedMail server to the latest stable release](/Users/zhb/projects/docs/html/backup-restore/migrate.to.new.iredmail.server.html) diff --git a/html/troubleshooting/turn.on.debug.mode.in.dovecot.html b/html/troubleshooting/turn.on.debug.mode.in.dovecot.html new file mode 100644 index 00000000..127d5ed2 --- /dev/null +++ b/html/troubleshooting/turn.on.debug.mode.in.dovecot.html @@ -0,0 +1,24 @@ + + + + + + + + +

+

How to turn on debug mode in Dovecot

+

To turn on debug mode in Dovecot, please update Dovecot config file +/etc/dovecot/dovecot.conf (Linux/OpenBSD) or +/usr/local/etc/dovecot/dovecot.conf (FreeBSD), set mail_debug to yes:

+
mail_debug = yes
+
+ +

Restart Dovecot service.

+

If you need authentication and password related debug message, turn on related +settings and restart dovecot service.

+
auth_verbose = yes
+auth_debug = yes
+auth_debug_passwords = yes
+auth_verbose_passwords = yes
+
\ No newline at end of file