2016-05-19 06:51:20 -05:00
<!DOCTYPE html>
2014-09-30 10:13:21 -05:00
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" / >
< title > Perform silent/unattended iRedMail installation< / title >
2015-07-31 23:14:52 -05:00
< link rel = "stylesheet" type = "text/css" href = "./css/markdown.css" / >
2014-09-30 10:13:21 -05:00
< / head >
< body >
< div id = "navigation" >
2016-04-19 12:48:51 -05:00
< a href = "/index.html" target = "_blank" >
< img alt = "iRedMail web site"
src="./images/logo-iredmail.png"
style="vertical-align: middle; height: 30px;"
/>
< span > iRedMail< / span >
< / a >
2016-02-29 02:15:19 -06:00
// < a href = "./index.html" > Document Index< / a > < / div > < h1 id = "perform-silentunattended-iredmail-installation" > Perform silent/unattended iRedMail installation< / h1 >
2014-09-30 10:13:21 -05:00
< p > 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.< / p >
< p > You can create a sample config file by executing iRedMail installer:< / p >
< pre > < code class = "bash" > # bash iRedMail.sh
< / code > < / pre >
< p > After config wizard dialogs, you will find file < code > config< / code > under iRedMail root
directory. For example, < code > /root/iRedMail-0.8.7/config< / code > . it will ask whether to
start installation or not, you can cancel it if you want.< / p >
< p > You can copy this config file to deploy as many servers as you want, change
the hard-coded passwords in it if you want.< / p >
< p > How to deploy a new server with sample config file:< / p >
< ul >
< li > Copy sample config file to new server, e.g. < code > /root/iRedMail-0.8.7/config< / code > .< / li >
< li > Execute iRedMail installer with shell variables:< / li >
< / ul >
< pre > < code class = "bash" > # 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
< / code > < / pre >
< h2 id = "sample-deployment" > Sample Deployment< / h2 >
< p > Here's how i preform iRedMail tests every day with VMware Fusion on Mac OS X,
all are completed automatically with a shell command.< / p >
< ul >
< li >
< p > 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 < code > Latest< / code > . The snapshot name will be used in my shell
script, it needs a snapshot name to reverse VM to the clean OS.< / p >
< / li >
< li >
< p > Revert VM to the latest snapshot (a clean, basic, minimal OS) with VMware
command line tool < code > vmrun< / code > .< / p >
< / li >
< li >
< p > Start this VM with < code > vmrun< / code > , sleep 30 (or 60) seconds waiting for OS start up.< / p >
< / li >
< li >
< p > Detect network connection to this VM, if it's up, upload required files with < code > scp< / code > :< / p >
< / li >
< li > the latest development edition of iRedMail< / li >
< li > source tarballs required by iRedMail (Roundcube, iRedAdmin, iRedAPD, etc)< / li >
< li >
< p > 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.< / p >
< / li >
< li >
< p > Create/Update iRedMail installation status file: iRedMail-x.y.z/.status
to skip downloading source tarballs, etc.< / p >
< / li >
< li >
< p > Perform installation via ssh like this:< / p >
< / li >
< / ul >
< pre > < code class = "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"
< / code > < / pre >
< ul >
2016-01-16 09:53:45 -06:00
< li > Reboot server.< / li >
2014-09-30 10:13:21 -05:00
< / ul >
< p > 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.< / p >
< p > 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:< / p >
< pre > < code class = "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
< / code > < / pre >
< p > Below is file of < code > auto.centos7.sh< / code > mentioned above, it prepares VMware virtual
machine, then execute another script < code > c7.sh< / code > to perform the real installation.< / p >
< pre > < code class = "shell" > #!/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}
< / code > < / pre >
< pre > < code class = "shell" > #!/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"
2016-05-19 06:51:20 -05:00
< / code > < / pre > < div class = "footer" >
< p style = "text-align: center; color: grey;" > All documents are available in < a href = "https://bitbucket.org/zhb/iredmail-docs/src" > BitBucket repository< / a > , and published under < a href = "http://creativecommons.org/licenses/by-nd/3.0/us/" target = "_blank" > Creative Commons< / a > license. You can < a href = "https://bitbucket.org/zhb/iredmail-docs/get/tip.tar.bz2" > download the latest version< / a > for offline reading. If you found something wrong, please do < a href = "http://www.iredmail.org/contact.html" > contact us< / a > to fix it.< / p >
< / div >
< script type = "text/javascript" >
2015-02-05 07:02:53 -06:00
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-3293801-21', 'auto');
ga('send', 'pageview');
2014-10-13 19:28:43 -05:00
< / script >
< / body > < / html >