Java SE JDK. Скачать в консоли linux

Просто так wget-ом Java SE не скачать, т. к. требуется подтверждение лицензионного соглашения. Но выход есть – с помощью утилиты curl:

curl -LOb "oraclelicense=a" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

Как удалённо перезагрузить роутер Asus RT-N18U

Для начала убедимся, что включен телнет. На Вкладке Administration -> System включаем Enable Telnet -> Yes. Жмём Apply внизу.

Теперь сам bash-скрипт, который можно подвязать к чему угодно. Например, к звонку по Asterisk:

!/bin/bash
(sleep 3;echo user;sleep 3;echo password;sleep 3;echo reboot;sleep 3;) | telnet router_ip

где нужно вписать свои данные:

  • user – имя пользователя (для входа на веб-морду роутера)
  • password – пароль для веб-морды
  • router_ip – IP адрес роутера.

Работает также и с другими подобными роутерами Asus.

Установка GUI дя Nagios Vshell2

ОС – Unumtu 18.04, но с модификациями подходит для любой ОС

Для начала установим требуемый пакет (предполагается что apache2, php, nagios у вас уже установлены и натсроены):

apt-get install php7.2-intl

Теперь скачиваем архив с оболочкой отсюда:

https://github.com/NagiosEnterprises/nagiosvshell/tree/2.x

На сервер, распаковываем и открываем файл конфигурации:

wget https://github.com/NagiosEnterprises/nagiosvshell/archive/2.x.zip
unzip 2.x.zip
cd nagiosvshell-2.x/
nano config.php

Строки, на которые следует обратить внимание, выделены жирным шрифтом. Значения по-умолчанию указаны для nagios3, установленного через пакетный менеджер. У меня уже был nagios 4, установленный внучную. Необходимые поправки для путей установки, расположения конфигурационного файла сайта и файла пользователей стандартного Nagios GUI дописываем в скобки ” в разделе $custom = array(

<?php
Custom values
#
Add any custom values here. If a value is empty, the default value defined
below is used.
$custom = array(
'targetdir' => '',
'apacheconfdir' => '',
'apacheconffile' => '',
'apacheuser' => '',
'apachegroup' => '',
'etc_conf' => '',
'htpasswd_file' => '',
# See config/vshell.conf for explanations of each value
'vshell_baseurl' => '',
'TTL' => '',
'update_interval' => '',
'nagios_coreurl' => '',
'lang' => '',
);
Default values
#
Do not edit these defaults
$defaults = array();
$defaults['debian'] = array(
'targetdir' => '/usr/local/vshell2',
'apacheconfdir' => '/etc/apache2/sites-enabled',
'apacheconffile' => 'vshell2.conf',
'apacheuser' => 'www-data',
'apachegroup' => 'www-data',
'etc_conf' => 'vshell2.conf',
'htpasswd_file' => '/etc/nagios3/htpasswd.users',
'vshell_baseurl' => 'vshell2',
'nagios_coreurl' => 'nagios3',
'TTL' => '90',
'update_interval' => '90',
'lang' => 'en_GB',
);
$defaults['redhat'] = array(
'targetdir' => '/usr/local/vshell2',
'apacheconfdir' => '/etc/httpd/conf.d',
'apacheconffile' => 'vshell2.conf',
'apacheuser' => 'apache',
'apachegroup' => 'apache',
'etc_conf' => 'vshell2.conf',
'htpasswd_file' => '/etc/nagios/passwd',
'vshell_baseurl' => 'vshell2',
'nagios_coreurl' => 'nagios',
'TTL' => '90',
'update_interval' => '90',
'lang' => 'en_GB',
);

Теперь даём права на запуск и запускаем install.php:

chmod +x install.php
./install.php

Скрипт сделает всё сам. И если все данные были указаны правильно в конфиг-файле, то мы сможем увидить новую оболочку по адресу http://your_server_ip/vshell2

Если видите ошибку 500 или ещё что – лопатим логи apache (/var/log/apache2/error.log) на предмет того что пошло не так.

Linux, команда для траблшутинга загрузки I/O подсистемы

Быстрая заметка. Иногда случается что дисковая I/O подсистема чем-то сильно нагружена и не понятно, каким именно процессом. В определении виновника может помочь следующая команда:

top -b -n 1 | awk '{if (NR <=7) print; else if ($8 == "D") {print; count++} } END {print "Total status D (I/O wait probably): "count}' > topsave.txt

Предыдущий рабочий день в python

Чтобы получить предыдущий рабочий день в python, делаем нехитрые преобразования:

import datetime, time
lastBusDay = datetime.datetime.today()
shift = datetime.timedelta(max(1,(lastBusDay.weekday() + 6) % 7 - 3))
lastBusDay = lastBusDay - shift

Т. е. мы получаем, например, вторник в среду. А в субботу, вск и Пн мы получим пятницу. Далее можно преобразовать дату в нужный нам формат и пользоваться:

date = lastBusDay.strftime('%Y%m%d')

Python скриптинг: как зайти на FTP или FTPS

Бывает нужно что-то скачать/загрузить на удалённый сервер FTP или FTPS (не путать с SFTP) в скрипте на пайтоне.

Подключаем необходимые библиотеки:

from ftplib import FTP_TLS
from ftplib import FTP

Задаём параметры подключения к FTP хосту:

host = "some_ftp.com"
port = 21
username = "username"
password = "password"

Подключаемся к обычному FTP (в примере скачиваем файл на диск):

ftp = FTP(host)
ftp.login(username, password)
try:
    handle = open('/path_to_local_file/filename', 'wb')
    ftp.retrbinary('RETR /path_to_remote_file/filename, handle.write)
    handle.close()
except:
    pass
ftp.quit()

Все команда нужно указывать по спецификации FTP протокола, например такой.

Осовные команды:
RETR – получить файл с FTP в переменную или по хендлеру записать в локальный файл;
LIST – показать список файлов/директорий в указанной или текущей по-умолчанию;
NLST – то же, что и LIST, но возвращает только имена файлов/директорий;
STOR – загрузить с презаписью файл на FTP-сервер;
и другие

Подключение к FTPS выполняется схожим образом:

try:
    handle = open('/path_to_local_file/filename', 'wb')
    ftps = FTP_TLS(host)
    ftps.login(username, password)
    ftps.prot_p()
    ftps.retrbinary('RETR /path_to_remote_file/filename', handle.write)
    ftps.quit()
    handle.close()
except:
    pass

Для работы FTP_TLS нужен пайтон 2.7+, если у вас только 2.6, то придётся сделать одно из следующего:
1. Доустановить пайтон 2.7, например как описано здесь для Oracle Linux 6:

Редактируем /etc/yum.repos.d/public-yum-ol6.repo и убеждаемся, что enabled=1 в следующем параграфе:

[ol6_software_collections]
name=Software Collection Library release 3.0 packages for Oracle Linux 6 (x86_64)
baseurl=http://yum.oracle.com/repo/OracleLinux/OL6/SoftwareCollections/x86_64/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

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

yum install scl-utils
yum install python27
source /opt/rh/python27/enable
python --version

Если при запуске скрипта по cron (а скорее всего так и будет) выбивает ошибку вида:

error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

То необходимо добавить путь к библиотеке в /etc/ld.so.conf и запустить команду ldconfig, которая сама всё пропишет.

или

2. Cкачать дистрибутив пайтона 2.7 отсюда и вытащить фал ftplib.py и положить его в папку со скриптом (если скрипт запускается по cron, то это может не сработать):

wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
tar -zxvf Python-2.7.1.tgz Python-2.7.1/Lib/ftplib.py
cp Python-2.7.1/Lib/ftplib.py /path_to_script/

или

3. Заходить на FTPS вызывая bash команды например lftp с помощью модуля subprocess.

Ссылки:

  1. https://docs.python.org/3/library/ftplib.html
  2. https://stackoverflow.com/questions/11573817/how-to-download-a-file-via-ftp-with-python-ftplib
  3. https://stackoverflow.com/questions/20842732/libpython2-7-so-1-0-cannot-open-shared-object-file-no-such-file-or-directory
  4. https://docs.cloudera.com/documentation/enterprise/6/6.0/topics/install_python_27.html

Как разбанить IP в fail2ban

Если вы несколько раз неправильно пытались подключиться к серверу Linux, где настроен fail2ban, то вы будете занесены в черный список и не сможете подключиться заданное на сервере количество времени или вообще навсегда.

Чтобы разбанить IP адрес, нужно на сервере выполнить следующие команды.

Вначале посмотреть цепочки правил (jail):

fail2ban-client status

Результат будет что-то вроде такого:

Status
|- Number of jail: 3
`- Jail list: apache, ssh, apache-modsecurity

Затем в разбаниваем IP в нужной “клетке” (цепочке правил):

fail2ban-client set JAILNAMEHERE unbanip IPADDRESSHERE

В старых версиях Fail2ban может не существовать команды unbanip, тогда вы будете получать ошибку вида:

Invalid command (no set action or not yet implemented)

Здесь придётся перезагрузить “клетку”, что уберёт из неё все баны:

fail2ban-client reload JAILNAMEHERE

Также можно добавить IP в список исключений чтобы он не блокировался, если вы что-то тестируете:

fail2ban-client set sasl addignoreip 198.32.110.100

Посмотреть, какие IP забанены в “клетке” можно с помощью команды:

fail2ban-client status JAILNAMEHERE

Ну и посмотреть список доступных команд:

fail2ban-client -h

Как сконвертировать звукозапись в sln формат для использования в Asterisk

(пост из старого черновика)
Asterisk не поддерживает .wav формат, который используется во многих программах звукозаписи. Можно доустановить пакет поддержки mp3 для Asterisk, но пишут, что обработка mp3 довольно ресурсоемкая, потому лучше использовать gsm или sln.
Записывать будем программой Audacity, которая доступна в любом дистрибутиве Linux. Конвертировать будем в командной строке с помощью консольной утилитки sox.Для начала запишем звуковой файл с помощью микрофона и программы Audacity  (в консоли набрать aptitude install audacity – если не установлена)

Далее выделяем нужный фрагмент записи и выбираем в меню File -> Export Selection

В открывшемся диалоге внизу выбираем формат GSM

Заливаем получившийся файл на сервер. Например scp /filepath/file.gsm user@server:/path/
НО Asterisk не хочет хавать так записанные файлы 🙁 Нужно их сконвертировать, например, в формат sln. В консольке набираем команду:
sox file.gsm -t raw -r 8000 -s -2 -c 1 file.sln
Теперь можно спокойно скормить Asterisk’y наш звуковой файлик. (стандартный путь в Debian – /usr/share/asterisk/sounds/ )

Некоторые команды управления postfix MTA

Посмотреть активные настройки Postfix:
postconf -d
Посмотреть сколько сообщений в очереди:
mailq | grep Requests
Посмотреть конкретно что в очереди:
mailq
Пнуть очередь на немедленную доставку:
postsuper -r ALL; postfix flush
Пнуть конкретное письмо по ID:
postsuper -r ID
Удалить письмо по ID:
postsuper -d ID
Удаление группы писем от определенного FROM (на примере MAILER-DAEMON):
FreeBSD:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | xargs -I{} -n1 postsuper -d {}
Linux:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | xargs -I{} -n1 /usr/sbin/postsuper -d {}
Удаление группы писем от определенного FROM в статусе REQUIRE:
mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | tr -d '*' | xargs -I{} -n1 postsuper -d {}

Исключение пакетов из операции в yum (RHEL)

Итогда нужнообновить пакеты, не трогая при этом например ядро или еще миллион охожих ситуаций, где надо исключить пакет из обработки.
Есть два способа.
1) Единоразово – когда запускаете yum, использовать опцию –exclude:
yum –exclude=package* update
yum –exclude=php* update
yum –exclude=*rrd* update
yum –exclude=kernel*,*snmp,perl* update
2) Добавить необходимые пакеты в исключения в конфигурационном файле /etc/yum.conf :
exclude=php* kernel*
Выглядеть это будет примерно так:
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude=php* kernel*
Теперь эти пакеты исключатся из обработки любыми командами yum.