«Работа с очередью сообщений в Postfix» и «Как сделать бинарник из bash скрипта»: разница между страницами

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


'''Очистить очередь'''
root@debian8:~ # wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
<hr>
  root@debian8:~ # tar -xzf ./shc-3.8.9b.tgz
'''Удалить все сообщения:'''
root@debian8:~ # cd shc-3.8.9b
  postsuper -d ALL
root@debian8:~/shc-3.8.9b # make
 
  cc -Wall  shc.c -o shc
'''Удалить определенное письмо из очереди:'''
***    ▒Do you want to probe shc with a test script?
postsuper -d <идентификатор письма>
  ***    Please try...  make test
 
* идентификатор письма можно увидеть командой '''mailq.'''<br>
'''Количество писем в очереди'''
<hr>
Команда '''mailq''' в конце выдает общее количество сообщений в очереди, например:
-- 23 Kbytes in 18 Requests.
 
* в данном примере в очереди находится 18 сообщений общим объемом 23 Кбайт.<br>
'''Также, очередь можно посмотреть командами:'''
  find /var/spool/postfix/deferred -type f | wc -l
 
  find /var/spool/postfix/active -type f | wc -l


find /var/spool/postfix/incoming -type f | wc -l
Собственно инструмент готов, можно использовать.
Использование shc
Список возможных опций:


  find /var/spool/postfix/defer -type f | wc -l
  root@debian8:~/shc-3.8.9b # ./shc -help
shc Version 3.8.9b, Generic Script Compiler
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 в пару строк:


'''* данные каталоги являются местом, где временно хранятся письма очереди.'''<br>
  #!/bin/bash
<hr>
  echo $1
'''Перезапустить очередь'''
  postsuper -r ALL
'''
Если не помогло, поочередно:'''
  postfix stop


postsuper -r ALL
Скрипт просто выводит строку, переданную ему в качестве параметра
 
postfix start
 
'''Настройка очереди:'''<br>
<hr>
'''Задать периодичность повторной отправки сообщений:'''
postconf -e "queue_run_delay = 5m"


Задать время, на которое будет отложена отправка сообщений, которые не были отправлены по причине временных<br>
root@debian8:~/shc-3.8.9b # ./script.sh testing
неисправностей (например, принимающий сервер не отвечает или просит повторить запрос позже):
  testing
  postconf -e "minimal_backoff_time = 10m"


'''Задать максимальное время для отправки сообщений, которые не были отправлены по причине временных неисправностей:'''
Теперь скомпилируем бинарный файл.
postconf -e "maximal_backoff_time = 15m"


'''Выставить время жизни для сообщения в очереди:'''
root@debian8:~/shc-3.8.9b # ./shc -r -T -f ./script.sh
postconf -e "maximal_queue_lifetime = 1d"


'''После внесения изменений необходимо перезапустить postfix''':
На выходе получаем 2 новых файла: script.sh.x - двоичный исполняемый файл script.sh.x.c - С код полученный из bash скрипта, при желании его можно подправить руками и скомпилировать штатными средствами системы. Проверяем бинарник:
service postfix restart || systemctl restart postfix


'''Информация о конкретном сообщении'''
root@debian8:~/shc-3.8.9b # ./script.sh.x "binary file"
  postcat -q <идентификатор>
  binary file


* показывает параметры сообщения и причину, по которой письмо еще не отправлено.
Использовать полученный бинарник можно практически на любой версии linux. Скрипту можно установить срок годности (опция -e), по истечение которого файл будет выдавать сообщение (опция -m).  


'''ИСТОЧНИКИ:'''
ИСТОЧНИК:
<hr>
<hr>
* [https://www.dmosk.ru/miniinstruktions.php?mini=postfix-queue Работа с очередью сообщений в Postfix]
* [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://linux-notes.org/udalit-ochistit-sbrosit-ochered-v-postfix/ Удалить/Очистить/Сбросить очередь в postfix]

Версия от 16:22, 16 апреля 2019

Появилась необходимость, скомпилировать 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
root@debian8:~ # tar -xzf ./shc-3.8.9b.tgz
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 Список возможных опций:

root@debian8:~/shc-3.8.9b # ./shc -help
shc Version 3.8.9b, Generic Script Compiler
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

Скрипт просто выводит строку, переданную ему в качестве параметра

root@debian8:~/shc-3.8.9b # ./script.sh testing
testing

Теперь скомпилируем бинарный файл.

root@debian8:~/shc-3.8.9b # ./shc -r -T -f ./script.sh

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

root@debian8:~/shc-3.8.9b # ./script.sh.x "binary file"
binary file

Использовать полученный бинарник можно практически на любой версии linux. Скрипту можно установить срок годности (опция -e), по истечение которого файл будет выдавать сообщение (опция -m).

ИСТОЧНИК: