# # set tabstop=5 # #!/bin/bash # Criado por João Alfredo Knopik Junior # Colaborações: # "William Fernando Merlotto" # "Alexandre Felipe Muller de Souza" # # # # Adaptação feita para o Red Hat EL 5 e Centos 5 # Cássio Luiz # - Alterações feitas por M. Rodrigo Monteiro # - 14/09/09 - Reescrita por William Fernando Merlotto # # LC_TELEPHONE=pt_BR.UTF-8 LC_CTYPE=pt_BR.UTF-8 LANGUAGE=pt_BR:pt_PT:pt LC_MONETARY=pt_BR.UTF-8 LC_ADDRESS=pt_BR.UTF-8 LC_COLLATE=pt_BR.UTF-8 LC_PAPER=pt_BR.UTF-8 LC_NAME=pt_BR.UTF-8 LC_NUMERIC=pt_BR.UTF-8 SYSFONT=lat1-16 LC_MEASUREMENT=pt_BR.UTF-8 LC_TIME=pt_BR.UTF-8 LANG=pt_BR.UTF-8 LC_IDENTIFICATION=pt_BR.UTF-8 LC_MESSAGES=pt_BR.UTF-8 export LC_TELEPHONE LC_CTYPE LANGUAGE LC_MONETARY LC_ADDRESS LC_COLLATE LC_PAPER LC_NAME LC_NUMERIC SYSFONT LC_MEASUREMENT LC_TIME LANG LC_IDENTIFICATION LC_MESSAGES #alterado - mostrar as msgs de erro #set -e # Para caso de erro if [ $UID != 0 ]; then { echo "Este script deve ser executado como superusuario, root ou sudo"; exit 1; } fi # # Testa se o Dialog esta instalado #alterado testadialog=$(/usr/bin/which dialog | grep "^/usr/bin/dialog$") #alterado if [ "$testadialog" != "/usr/bin/dialog" ]; then echo "O Dialog não está instalado." echo "" echo "" echo "Instalando o Dialog!!!" #alterado - tenta instalar o Dialog com o yum, caso contrario instala com o rpm e mostra a msg se foi instalado ou nao yum -y install dialog || rpm -ivh arqs-conf-rhel5/rpms/dialog-1.0.20051107-1.2.2.i386.rpm && echo "Dialog foi instalado instalado!!!" || echo "Nao foi possivel instalar o Dialog" && exit 0 else echo "Dialog instalado!!!" fi BACKTITLE='Instalação do ExpressoLivre 2.0' INTRO=' Bem-Vindo(a) a instalação do ExpressoLivre! Três perguntas serão feitas a você. - Escolha uma senha. - Escolha uma organização. - Escolha um domínio. Com estas informações o script poderá instalar e configurar o ExpressoLivre. ' #..................................................................... dialog --backtitle "$BACKTITLE" \ --cr-wrap \ --msgbox "$INTRO" \ 17 55 && #..................................................................... #alterado - confirmar a senha LDAP_PWD=$( dialog --stdout --passwordbox 'Digite uma senha:' 0 0 ) LDAP_PWD_CONF=$( dialog --stdout --passwordbox 'Confirme a senha:' 0 0 ) if [ "$LDAP_PWD" != "$LDAP_PWD_CONF" ] ; then dialog \ --title 'As senhas não conferem ' \ --msgbox 'Favor digitar as duas senhas iguais!!!' \ 6 40 exit 0 fi #..................................................................... ORG=$( dialog --stdout --inputbox 'Digite uma organização:(ex.: celepar)' 0 55 ) #..................................................................... DOMAIN=$( dialog --stdout --inputbox 'Digite seu domínio:(ex.: '$ORG'.com.br)' 0 55 ) # Instala os pacotes necessarios pacotes () { dialog --yesno 'Deseja que o script instale automaticamente os pacotes disponíveis da distribuição?' 7 70 # yes if [ $? = 0 ] then dialog \ --title 'Aguarde' \ --infobox '\nVerificando a instalação dos pacotes necessários...' \ 0 0 yum clean all yum -y install httpd mod_ssl \ unzip zip \ openldap openldap-clients openldap-servers \ cyrus-imapd cyrus-imapd-perl cyrus-imapd-utils cyrus-sasl cyrus-sasl-ldap cyrus-sasl-plain perl-IO-Socket-SSL \ postfix \ postgresql postgresql-server \ php php-cli php-ldap php-pgsql php-imap php-mbstring php-gd php-xml else dialog \ --title 'Aviso' \ --yesno 'Ok, não será realizada a instalação dos pacotes e isso poderá fazer como que o Expresso Livre não funcione!!!\n\nDeseja continuar assim mesmo?' \ 10 40 # no, sai do script [ $? = 1 ] && exit 1 fi } # POSTGRES postgres () { service postgresql stop service postgresql start sleep 3 service postgresql stop cp -f ./arqs-conf-rhel5/var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/ cp -f ./arqs-conf-rhel5/var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/ service postgresql start su - postgres -c 'dropdb expresso' || { echo "Banco expresso não existia. [OK]"; } su - postgres -c 'createdb -E LATIN1 expresso' || { echo "Problemas na criação do banco expresso. [Falhou]"; exit 1;} sed -e "s/LDAP_DN/$LDAP_DN/g" -e "s/LDAP_PWD/$LDAP_PWD/g" -e "s/ORG/$ORG/g" -e "s/DOMAIN/$DOMAIN/g" ./arqs-conf-rhel5/expresso.dump > /tmp/expresso.dump service postgresql start chkconfig postgresql on su - postgres -c 'psql -f /tmp/expresso.dump expresso' rm /tmp/expresso.dump } # APACHE apache () { cp -r -p ../../../expresso/ /var/www/ #TODO: Verificar erro: sed -e "s/HEADER_PWD/$HEADER_PWD/g" ./arqs-conf-rhel5/header.inc.php > /var/www/expresso/header.inc.php mkdir /home/expressolivre || { echo "Diretório já existe. [OK]"; } cp ./arqs-conf-rhel5/home/expressolivre/* /home/expressolivre/ cp ./arqs-conf-rhel5/etc/httpd/conf/httpd.conf /etc/httpd/conf/ cp ./arqs-conf-rhel5/etc/httpd/conf.d/expresso.conf /etc/httpd/conf.d/ cp ./arqs-conf-rhel5/etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ cp ./arqs-conf-rhel5/etc/php.ini /etc/ chown -R apache.apache /var/www/expresso /home/expressolivre #mkdir /php_sessions/ || { echo "Diretório já existe. [OK]"; } #chmod -R 777 /php_sessions/ service httpd restart chkconfig httpd on } # OPENLDAP ldap () { service ldap stop rm -rf /var/lib/ldap/* sed -e "s/LDAP_DN/$LDAP_DN/g" -e "s/LDAP_PWD_MD5/$LDAP_PWD_MD5/g" ./arqs-conf-rhel5/etc/openldap/slapd.conf > /etc/openldap/slapd.conf cp ./arqs-conf-rhel5/etc/openldap/schema/* /etc/openldap/schema/ cp ./arqs-conf-rhel5/etc/openldap/DB_CONFIG /var/lib/ldap/ sed -e "s/LDAP_DN/$LDAP_DN/g" -e "s/LDAP_PWD_MD5/$LDAP_PWD_MD5/g" -e "s/ORG/$ORG/g" -e "s/DOMAIN/$DOMAIN/g" -e "s/LDAP_DC/$LDAP_DC/g" ./arqs-conf-rhel5/expresso.ldif > /tmp/expresso.ldif slapadd -v -l /tmp/expresso.ldif chown -R ldap.ldap /var/lib/ldap/ service ldap start chkconfig ldap on rm /tmp/expresso.ldif } # CYRUS cyrus () { cp ./arqs-conf-rhel5/etc/imapd.conf /etc/ cp ./arqs-conf-rhel5/etc/cyrus.conf /etc/ sed -e "s/LDAP_DN/$LDAP_DN/g" ./arqs-conf-rhel5/etc/saslauthd.conf > /etc/saslauthd.conf cp ./arqs-conf-rhel5/etc/sysconfig/saslauthd /etc/sysconfig/ cp -p ./arqs-conf-rhel5/usr/bin/cyradm_expresso /usr/bin/ service saslauthd restart chkconfig saslauthd on sleep 4 service cyrus-imapd restart chkconfig cyrus-imapd on #./arqs-conf-rhel5/cyrus.pl $LDAP_PWD } # POSTFIX postfix () { sed -e "s/LDAP_DN/$LDAP_DN/g" -e "s/DOMAIN/$DOMAIN/g" ./arqs-conf-rhel5/etc/postfix/main.cf > /etc/postfix/main.cf sed -e "s/DOMAIN/$DOMAIN/g" ./arqs-conf-rhel5/etc/postfix/expresso-dominios > /etc/postfix/expresso-dominios #cp ./arqs-conf-rhel5/etc/postfix/master.cf /etc/postfix/ postmap /etc/postfix/expresso-dominios service postfix restart chkconfig postfix on } # Especifico para instalacao do PHP de pacotes de terceiros, nao oficiais da distribuicao pacotes_php () { dialog --yesno 'Os pacotes do PHP disponíveis nesta distribuição possuem versões inferiores às requisitadas pelo Expresso. O Expresso necessita do PHP-5.2.1 ou superior.\nPorém, este script poderá configurar automaticamente um repositório externo, de terceiros e sem suporte (neste caso, o REMI-Enterprise), para instalar versões mais recentes do PHP.\n\nA equipe do Expresso Livre recomenda o uso deste repositório e a instalação dos novos pacotes, porém, não nos responsabilizamos por qualquer dano. Caso você não utilize os pacotes mais recentes do PHP, o Expresso não irá funcionar corretamente!!\n\nVocê deseja prosseguir, por sua conta e risco, a instalação do PHP mais recente?' 20 70 # yes if [ $? = 0 ] then # Utiliza o repositorio do Remi, que possui (em 10/09/09) o php-5.3.0 # http://blog.famillecollet.com/pages/Config-en rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm wget http://rpms.famillecollet.com/remi-enterprise.repo -O /etc/yum.repos.d/remi-enterprise.repo # Atualiza os pacotes... yum --enablerepo=remi install php php-cli php-ldap php-pgsql php-imap php-mbstring php-gd libtool else dialog --infobox 'Ok! A versão mais recente do PHP não foi instalada!' 0 0 fi } # Outros outros () { # Deixa o SELinux permissivo cp -f ./arqs-conf-rhel5/etc/selinux/config /etc/selinux/config setenforce 0 # Desativa o sendmail service sendmail stop chkconfig --del sendmail yum -y erase sendmail } ########################################################################################### # # # MAIN # # # ########################################################################################### alias cp="cp" pacotes outros # Uma solução alternativa para a versão do PHP pacotes_php # GET VARs LDAP_DN=`php ./arqs-conf-rhel5/makedn.php $DOMAIN` LDAP_DC=`php ./arqs-conf-rhel5/makedc.php $DOMAIN` LDAP_PWD_MD5=`slappasswd -v -s $LDAP_PWD -h {MD5}` LDAP_PWD_MD5=`php ./arqs-conf-rhel5/regexp.php $LDAP_PWD_MD5` HEADER_PWD=`php ./arqs-conf-rhel5/pass.php $LDAP_PWD` dialog --yesno 'Deseja escolher quais serviços (apache, ldap, postfix, cyrus e postgres) serão configurados pelo script?' 7 70 # no if [ $? = 1 ] then apache ldap postfix cyrus postgres else for I in apache ldap postfix cyrus postgres do dialog --yesno "Deseja configurar o $I?" 7 70 if [ $? = 0 ] then dialog --infobox "Configurando o serviço: $I. Aguarde..." 0 0 $I fi done fi # Por algum motivo, ainda desconhecido para mim, esta chamada não é executada corretamente dentro da função "cyrus" ./arqs-conf-rhel5/cyrus.pl $LDAP_PWD ############################################################################################ dialog --backtitle "$BACKTITLE" --cr-wrap --msgbox "FIM. www.expressolivre.org" 7 55 && #dialog \ # --title 'Aviso Importante!!!' \ # --textbox arqs-conf-rhel5/rpms/listalang.txt \ # 0 0 echo '.'