diff --git a/sig-installer b/sig-installer old mode 100644 new mode 100755 index 524bd66..3187b98 --- a/sig-installer +++ b/sig-installer @@ -3,7 +3,7 @@ set -euo pipefail self=$(basename ${0}) self=${self/.*bash} -version=2506.1 +version=2506.2 # == Funções Gerais ============================================================================== # @@ -564,10 +564,17 @@ function produto.install { runuser -l ${PRODUTO} -- python -m pip install --upgrade --user pip runuser -l ${PRODUTO} -- python -m pip install --upgrade --user setuptools for _lib in ${_libs}; do - [[ "${_lib}" == "stoqdrivers" ]] && continue _lbpv=$(parsers.yaml ${CACHEDIR}/versoes.yml libs.python${_pdpy/.*}.${_lib}) runuser -l ${PRODUTO} -- python -m pip install --user \ "${CACHEDIR}/${PRODUTO}/${_lib}-${_lbpv#*/}.tar.gz" + if [[ "${_lib}" == "kiwi" ]]; then + _f=/srv/sig/${PRODUTO}/.local/lib/python2.7/site-packages/kiwi/__installed__.py + find $(dirname ${_f})/ -name *.pyc -delete + download "installer/config/${PRODUTO}/__installed__.py" "${_f}" \ + && chown -R ${PRODUTO}:${PRODUTO} "${_f}" \ + && chmod 644 ${_f} \ + && touch ${_f} + fi done case "${PRODUTO}" in @@ -664,12 +671,20 @@ function produto.install { ;; sigpdv) _date=$(date +%Y%m%d%H%M%S) + + # -- Faz o backup da pasta anterior do SigPDV [[ -d "/srv/sig/${PRODUTO}/sigpdv" ]] && \ mv \ /srv/sig/${PRODUTO}/sigpdv \ /srv/sig/${PRODUTO}/sigpdv.${_date}.bak - # TODO: Simplificar essa baderna + + # -- Cria a árvore de diretórios do SigPDV + mkdir -p /srv/sig/${PRODUTO}/sigpdv + mkdir -p /usr/local/sigext + mkdir -p /recebe + + # -- Instala pacotes necessários para rodar o programa SIGPV_PACKAGES=" atop \ libmysqlclient21 \ @@ -684,109 +699,101 @@ function produto.install { " system.install_pkgs ${SIGPV_PACKAGES} - mkdir -p /srv/sig/${PRODUTO}/sigpdv - mkdir -p /usr/local/sigext - mkdir -p /recebe - - download "installer/config/${PRODUTO}/${PRODUTO}-single-instance-fix.patch" \ - "${CACHEDIR}/sigpdv/${PRODUTO}-single-instance-fix.patch" - + # -- Download e instalação dos addons e aplicação de correções tar -C /srv/sig/${PRODUTO}/ \ -xzf ${CACHEDIR}/${PRODUTO}/${PRODUTO}-${_pdpv#*/}.tar.gz + ln -snf \ + /srv/sig/${PRODUTO}/sigpdv \ + /srv/sig/sigpdv/.local/lib/python2.7/site-packages/ + ln -snf \ + /srv/sig/${PRODUTO}/sigpdv \ + /usr/local/ + # Correção para erro "Dois frentes em execução" + download "installer/config/${PRODUTO}/${PRODUTO}-single-instance-fix.patch" \ + "${CACHEDIR}/sigpdv/${PRODUTO}-single-instance-fix.patch" patch -d /srv/sig/${PRODUTO}/sigpdv \ -p0 < "${CACHEDIR}/sigpdv/${PRODUTO}-single-instance-fix.patch" - ln -snf /srv/sig/${PRODUTO}/sigpdv /usr/local/ - - ln -snf \ - /srv/sig/${PRODUTO}/sigpdv \ - /srv/sig/sigpdv/.local/lib/python2.7/site-packages/ - - mkdir /srv/sig/sigpdv/.local/lib/python2.7/site-packages/share \ - && mv /srv/sig/${PRODUTO}/.local/share/kiwi \ - /srv/sig/sigpdv/.local/lib/python2.7/site-packages/share/ \ - && ln -snf \ - /srv/sig/sigpdv/.local/lib/python2.7/site-packages/share/kiwi \ - /srv/sig/${PRODUTO}/.local/share/ \ - - tar --transform="s|stoqdrivers/||" \ - -C /srv/sig/sigpdv/.local/lib/python2.7/site-packages/ \ - -xzf ${CACHEDIR}/${PRODUTO}/stoqdrivers-0.9.11.tar.gz \ - stoqdrivers/stoqdrivers - + # -- Instalação dos módulos python de dependências download "installer/config/${PRODUTO}/requirements.txt" \ "/srv/sig/${PRODUTO}/sigpdv/requirements.txt" + [[ -f "/srv/sig/${PRODUTO}/sigpdv/requirements.txt" ]] && \ + runuser -l ${PRODUTO} -- \ + python -m pip install -qq -r /srv/sig/${PRODUTO}/sigpdv/requirements.txt --user \ + && rm -f /srv/sig/${PRODUTO}/sigpdv/requirements.txt + # -- Lançadores dos programas download "installer/config/${PRODUTO}/${PRODUTO}-wrapper.sh" \ "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" \ - && chmod +x "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" \ - && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-comanda \ - && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-consulta-cda \ - && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-pdvconfig \ - && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-sigpdv \ - && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-sigpve - - ln -snf /srv/sig/${PRODUTO}/${PRODUTO}/debian/icons/* \ + && chmod +x "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" \ + && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-comanda \ + && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-consulta-cda \ + && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-pdvconfig \ + && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-sigpdv \ + && ln -snf "/srv/sig/${PRODUTO}/${PRODUTO}-wrapper.sh" /usr/local/bin/start-sigpve + ln -snf \ + /srv/sig/${PRODUTO}/${PRODUTO}/debian/icons/* \ /usr/share/pixmaps/ mkdir /usr/local/share/applications/ \ && ln -snf \ - /srv/sig/${PRODUTO}/${PRODUTO}/debian/desktop-files/* \ - /usr/local/share/applications/ \ - && sed -i 's|/usr/bin|/usr/local/bin|g' /usr/local/share/applications/*.desktop \ - && update-desktop-database || : - - download "installer/config/${PRODUTO}/${PRODUTO}.sudo" \ - "/etc/sudoers.d/${PRODUTO}" \ - && chown root:root "/etc/sudoers.d/${PRODUTO}" \ - && chmod 600 "/etc/sudoers.d/${PRODUTO}" + /srv/sig/${PRODUTO}/${PRODUTO}/debian/desktop-files/* \ + /usr/local/share/applications/ \ + && sed -i 's|/usr/bin|/usr/local/bin|g' /usr/local/share/applications/*.desktop \ + && update-desktop-database || : + # -- Configuração padrão inicial download "installer/config/${PRODUTO}/pdvconfig.cfg" \ "/usr/local/sigext/pdvconfig.cfg" - download "installer/config/${PRODUTO}/CliSiTef.ini" \ "/usr/local/sigext/CliSiTef.ini" for amb in homologacao producao lib_ssl_antiga; do ln -snf \ "/usr/local/sigext/CliSiTef.ini" \ - /srv/sig/${PRODUTO}/sigtef/lib_x86_64/${amb}/ + /srv/sig/${PRODUTO}/${PRODUTO}/sigtef/lib_x86_64/${amb}/ done - # PostgreSQL user and database - local _password=$(openssl rand -base64 32 | sed 's/\//|/g') - ${ui}.status info $"Criando/Atualizando usuário e banco de dados [%s]" ${PRODUTO} + # -- Configurações de segurança e dos usuários + local _app_user=${PRODUTO} + local _app_group=${_app_user} + # Acesso do usuário do desktop + local _desktop_user=$(getent passwd | sed '/x:1000/!d;s/:.*//g') + usermod -aG ${_app_group},pyenv ${_desktop_user} + # Configuração do sudo + download "installer/config/${PRODUTO}/${PRODUTO}.sudo" \ + "/etc/sudoers.d/${PRODUTO}" \ + && chown root:root "/etc/sudoers.d/${PRODUTO}" \ + && chmod 600 "/etc/sudoers.d/${PRODUTO}" + # Permissões de usuários e grupos + for dir in /srv/sig/${PRODUTO} /usr/local/sigext /recebe; do + chown -R ${_app_user}:${_app_group} ${dir} + chmod -R g+rw,o-rwx ${dir} + done + + # -- Configuração do banco de dados PostgreSQL + local _db_name=${PRODUTO} + local _db_user=${_db_name} + local _db_pass=$(openssl rand -base64 32 | sed 's/\//|/g') + ${ui}.status info $"Configurando o banco de dados [%s]" ${_db_name}} sudo -iu postgres \ psql -c \ - "CREATE USER ${PRODUTO} WITH \ - PASSWORD '${_password}' \ + "CREATE USER ${_db_user} WITH \ + PASSWORD '${_db_pass}' \ CREATEDB;" \ || \ sudo -iu postgres \ psql -c \ - "ALTER USER ${PRODUTO} WITH \ - PASSWORD '${_password}' \ + "ALTER USER ${_db_user} WITH \ + PASSWORD '${_db_pass}' \ CREATEDB;" - if [[ 0${?} -eq 0 ]]; then - sed -i "s/.*db_pdv_pass.*/db_pdv_pass = ${_password}/g" \ + sed -i "s/.*db_pdv_pass.*/db_pdv_pass = ${_db_pass}/g" \ "/usr/local/sigext/pdvconfig.cfg" - sudo -i -u postgres createdb -O ${PRODUTO} ${PRODUTO} >/dev/null 2>&1 || : - ${ui}.status warn $"Senha de acesso ao banco de dados: %s" ${_password} + sudo -i -u postgres createdb -O ${_db_user} ${_db_name} >/dev/null 2>&1 || : + ${ui}.status warn $"Senha de acesso ao banco de dados: %s" ${_db_pass} sleep 5 fi - - chown -R ${PRODUTO}: /usr/local/sigext /recebe - chmod -R g+rw /usr/local/sigext /recebe - # End TODO - - [[ -f "/srv/sig/${PRODUTO}/sigpdv/requirements.txt" ]] && \ - runuser -l ${PRODUTO} -- \ - python -m pip install -qq -r /srv/sig/${PRODUTO}/sigpdv/requirements.txt --user \ - && rm -f /srv/sig/${PRODUTO}/sigpdv/requirements.txt - chown -R ${PRODUTO}: /srv/sig/${PRODUTO}/ - - local _user=$(getent passwd | sed '/x:1000/!d;s/:.*//g') - usermod -aG ${PRODUTO} ${_user} ;; + sigvpn) ${ui}.status warn $"Não implementado." # rm -f /etc/apt/trusted.gpg.d/openvpn*.gpg @@ -814,7 +821,7 @@ function produto.install { #system.remove_pkgs ${BUILD_PACKAGES} ${ui}.color none - ${ui}.status info $"Instalação concluída. Reinicie o computador." + ${ui}.status info $"Instalação concluída. REINICIE o computador." ${ui}.prompt $"Pressione ENTER para continuar ... " }