«Как сделать бинарник из bash скрипта» и «Exim4»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
(Новая страница: «Появилась необходимость, скомпилировать bash скрипт в бинарный исполняемый файл. Смысл и...»)
 
imported>Vix
Нет описания правки
 
Строка 1: Строка 1:
Появилась необходимость, скомпилировать bash скрипт в бинарный исполняемый файл. Смысл и цели этих манипуляций каждый может найти себе сам, вдруг понадобится. Нашелся такой проект http://www.datsi.fi.upm.es/~frosal/, некоего Francisco Javier Rosales García. Утилита называется shc, транслятор языка bash в C, с последующей компиляцией в двоичный формат. Все манипуляции производим на виртуальной машине с debian 8 jessie на борту. Скачиваем архив, разархивируем, компилируем:
'''Установка и настройка'''


root@debian8:~ # wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
Прежде всего обновите локальный список пакетов с помощью вашего пакетного менеджера, например на Ubuntu и Debian это можно сделать с помощью apt:
root@debian8:~ # tar -xzf ./shc-3.8.9b.tgz
  apt-get update
root@debian8:~ # cd shc-3.8.9b
root@debian8:~/shc-3.8.9b # make
  cc -Wall  shc.c -o shc
***    ▒Do you want to probe shc with a test script?
***    Please try...  make test


Собственно инструмент готов, можно использовать.
Для установки выполните команду:
Использование shc
apt-get install exim4
Список возможных опций:


root@debian8:~/shc-3.8.9b # ./shc -help
Примечание: если вам необходимо использовать ACL и другие расширенные функции, то установите exim4-daemon-heavy:
shc Version 3.8.9b, Generic Script Compiler
  apt-get install exim4-daemon-heavy
shc Copyright (c) 1994-2015 Francisco Rosales
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script
    -e %s  Expiration date in dd/mm/yyyy format [none]
    -m %s  Message to display upon expiration ["Please contact your provider"]
    -f %s  File name of the script to compile
    -i %s  Inline option for the shell interpreter i.e: -e
    -x %s eXec command, as a printf format i.e: exec('%s',@ARGV);
    -l %s  Last shell option i.e: --
    -r    Relax security. Make a redistributable binary
    -v    Verbose compilation
    -D    Switch ON debug exec calls [OFF]
    -T    Allow binary to be traceable [no]
    -C    Display license and exit
    -A    Display abstract and exit
    -h    Display help and exit
    Environment variables used:
    Name    Default  Usage
    CC      cc      C compiler command
    CFLAGS    C compiler flags
    Please consult the shc(1) man page.
Для проверки накидаем скрипт script.sh в пару строк:


#!/bin/bash
Чтобы перейти к настройке, выполните команду:
  echo $1
  dpkg-reconfigure exim4-config


Скрипт просто выводит строку, переданную ему в качестве параметра
Нажмите Ok для начала настройки.
'''РЕШЕНИЕ ПРОБЛЕМ'''
<hr>
* '''defer (-53): retry time not reached for any host'''
Повреждены ваши exim db Это возможно связанно с недоступостью почтового сервера какой-то время.
 
'''решение:'''
 
cd /var/spool/exim/db
rm -f retry retry.lockfile
rm -f wait-remote_smtp wait-remote_smtp.lockfile
service exim restart


root@debian8:~/shc-3.8.9b # ./script.sh testing
В дальнейшим имеет смысл: внести изменения в /etc/exim/exim.conf
testing
в раздел


Теперь скомпилируем бинарный файл.
begin retry
*                      rcpt_451    F,1h,15m
*                      refused    F,1h,2m
*                      timeout_connect    F,2h,2m; F,6h,1h; F,4d,6h
*                      *          F,2h,2m; G,16h,1h,1.5; F,4d,6h


root@debian8:~/shc-3.8.9b # ./shc -r -T -f ./script.sh
также обратите внимание на запуск с какой опцией он стартует: -q5m
* [https://www.linuxshop.ru/forum/f7/t31431--resheno-remote-smtp-defer-53-retry-time-not-reached-for-any-host-exchange-exim.html взято тут]


На выходе получаем 2 новых файла: script.sh.x - двоичный исполняемый файл script.sh.x.c - С код полученный из bash скрипта, при желании его можно подправить руками и скомпилировать штатными средствами системы. Проверяем бинарник:
* Для решения проблемы с ssl в exim4.conf.template изменить:
...
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = *


  root@debian8:~/shc-3.8.9b # ./script.sh.x "binary file"
на
  binary file
  ...
  REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = !*


Использовать полученный бинарник можно практически на любой версии linux. Скрипту можно установить срок годности (опция -e), по истечение которого файл будет выдавать сообщение (опция -m).  
* Если нужно жестко указать порт smtp, то:
...
dc_smarthost='mail.myhost.ru::25'
...


ИСТОЧНИК:
'''ИСТОЧНИКИ:'''
<hr>
<hr>
* [https://vds-admin.ru/linux/%D0%BA%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D0%B8%D0%BA-%D0%B8%D0%B7-bash-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0 Как сделать бинарник из bash скрипта]
* [https://qna.habr.com/q/146009 Exim и внешний SMTP сервер, как заставить ходить почту?]
* [https://1cloud.ru/help/linux/nastrojka-exim4 Настройка EXIM4 для отправки почтовых сообщений в Linux]
* [https://serverspace.by/support/help/nastroika-exim-4-na-ubuntu/ Ubuntu. Настройка Exim4]

Версия от 19:39, 20 июля 2022

Установка и настройка

Прежде всего обновите локальный список пакетов с помощью вашего пакетного менеджера, например на Ubuntu и Debian это можно сделать с помощью apt:

apt-get update

Для установки выполните команду:

apt-get install exim4

Примечание: если вам необходимо использовать ACL и другие расширенные функции, то установите exim4-daemon-heavy:

apt-get install exim4-daemon-heavy

Чтобы перейти к настройке, выполните команду:

dpkg-reconfigure exim4-config

Нажмите Ok для начала настройки. РЕШЕНИЕ ПРОБЛЕМ


  • defer (-53): retry time not reached for any host

Повреждены ваши exim db Это возможно связанно с недоступостью почтового сервера какой-то время.

решение:

cd /var/spool/exim/db
rm -f retry retry.lockfile
rm -f wait-remote_smtp wait-remote_smtp.lockfile
service exim restart

В дальнейшим имеет смысл: внести изменения в /etc/exim/exim.conf в раздел

begin retry
*                      rcpt_451    F,1h,15m
*                      refused     F,1h,2m
*                      timeout_connect    F,2h,2m; F,6h,1h; F,4d,6h
*                      *           F,2h,2m; G,16h,1h,1.5; F,4d,6h

также обратите внимание на запуск с какой опцией он стартует: -q5m

  • Для решения проблемы с ssl в exim4.conf.template изменить:
...
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = *

на

...
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = !*
  • Если нужно жестко указать порт smtp, то:
...
dc_smarthost='mail.myhost.ru::25'
...

ИСТОЧНИКИ: