Обновление FreeBSD 9.0 -> 9.1

Сперва обновляем существующую установку FreeBSD 9.0 для получения последних багфиксов.

# freebsd-update fetch
# freebsd-update install
# shutdown -r now

После перезагрузки обновляемся:

# freebsd-update upgrade -r 9.1-RELEASE
# freebsd-update install
#shutdown -r now

После перезагрузки вы должны увидеть что-то похожее на это:

# uname -a
FreeBSD NQXD001 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243826: Tue Dec  4 06:55:39 UTC 2022     [email protected]:/usr/obj/usr/src/sys/GENERIC  i386

После этого необходимо применить сделанные изменения:

# freebsd-update install

Перезагружаемся:

# shutdown -r now

Данным способом была обновлена FreeBSD-9.0 установленная на VPS.

Парсинг лога Exim и отправка его по почте на Perl

В сегодняшней заметке по написанию скриптов на Perl мы будем извлекать данные за вчерашнее число из лога Exim и отправлять эти данные по почте. Буду рад любым замечаниям и конструктивной критике специалистов по Perl. Вот так обычно выглядит лог Exim:

2022-08-30 08:15:41 [31309] 1T6wAO-00088v-W6 => user1 <[email protected]> F=<[email protected]> P=<[email protected]> R=mysql_localuser T=local_delivery S=1152 QT=1s DT=0s
2022-08-30 08:15:41 [31310] 1T6wAP-000890-1c <= [email protected] H=(domain) [ip1]:39258 I=[ip2]:25 P=esmtp S=1034 [email protected] T="Shutdown" from <[email protected]> for [email protected] [email protected]
2022-08-30 08:15:41 [2287] SMTP connection from [ip1]:39259 I=[ip2]:25 (TCP/IP connection count = 5)
2022-08-30 08:15:41 [31310] SMTP connection from (domain) [ip1]:39258 I=[ip2]:25 closed by QUIT
2022-08-30 08:15:41 [31309] 1T6wAO-00088v-W6 => user2 <[email protected]> F=<[email protected]> P=<[email protected]> R=mysql_localuser T=local_delivery S=1147 QT=1s DT=0s
2022-08-30 08:15:41 [31309] 1T6wAO-00088v-W6 Completed QT=1s

Из лога мы будем выбирать все записи, которые были сделаны вчера, а затем отправлять их по электронной почты с вложением лога. Далее сам скрипт с комментариями.

#!/usr/bin/perl -w
# Подключаем необходимые модули DateTime, MIME::Lite
use strict;
use warnings;
use DateTime;
use MIME::Lite;


# Объявляем переменные
my $today = DateTime->now; # Определяем текущую дату
my $yesterday_format = $today->subtract(days => 1); # Получаем вчерашнюю дату
my $yesterday = $yesterday_format->ymd; # Форматируем дату в формат даты лога Exim


open INPUTFILE, "/path/to/input/log/mainlog" or die "Cannot open input file\n"; # Открываем на чтение исходный (анализируемый) файл лога Exim
open OUTPUTFILE, ">/path/to/output/log/log.txt" or die "Cannot open output file\n"; # Открываем на запись файл, который впоследствии будем отправлять по почте
# Проходим по исходному файлу построчно в цикле
while (<INPUTFILE>) {
chomp; # Убираем символы перевода строки в конце каждой строки
	if (/^$yesterday */) { # Регулярным выражением проверяем соответствие даты вчерашней
		print OUTPUTFILE "$_\n"; # Пишем в файл все записи лога, сделанные вчера
	} # end block of if
} # end block of while
close OUTPUTFILE; # Закрываем конечный файл 
close INPUTFILE; # Закрываем исходный файл

# Используя модуль MIME::Lite создаем тело сообщения, заполняя необходимые поля своими данными: От Кого, Кому, Тема, Текст письма, Вложение etc.
my $msg = MIME::Lite->new(
			From	=>'monitoring_script',
			To	=>'[email protected]',
			Subject	=>'Logfile of exim',
			Type	=>'multipart/mixed'
);

# Создаем текст письма
$msg->attach(Type	=>'TEXT',
	     Data	=>"Logfile of exim for ".$yesterday
);

# Создаем вложение
$msg->attach(Type	=>'application/zip',
	    Path	=>'/path/to/scripts/log.txt',
	    Filename	=>'log.txt',
	    Disposition	=> 'attachment'
);

# Отправляем письмо
$msg->send();

Теперь все это ставим в cron и ждем писем. Также при желании можно доработать скрипт: задать другой интервал, можно также приспособить данный скрипт для выборки из логов Nginx. Все это просто реализуется и очень хорошо все описано на страницах модулей MIME::Lite и DateTime.

Более подробно про модуль MIME::Lite
Более подробно про модуль DateTime

Команды OpenVMS и их эквивалент в Unix

В OpenVMS по умолчанию используется свой язык команд Digital Command Language (DCL). В данной заметке мы посмотрим на различие между классическими Unix-like командами и языком DCL. Unix команды и имена чувствительны к регистру, VMS конвертирует команды и имена в верхний регистр. Также имейте ввиду, что VMS команды можно использовать сокращенно, например, DELETE, DELET, DELE, DEL все эти варианты допустимы к использованию. Таблица будет дополняться.

OpenVMS

Unix

Комментарий

DIRECTORY ls Отображает список файлов
DIRECTORY/FULL ls –l
TYPE cat Отображает содержимое файла
TYPE/PAGE more, less Отображает файл с паузой
COPY cp Копирование файла
SEARCH grep Нахождение строки в файле
DIFF diff Сравнить файлы
RENAME mv Переименовать файл
DELETE rm, rmdir Удалить файл или каталог
SET FILE/PROT chmod Изменить разрешения на файл
SET FILE/OWNER chown Изменить владельца файла
CREATE/DIR mkdir Создать каталог
SET DEFAULT cd Изменить рабочий каталог
SHOW DEFAULT pwd Отобразить рабочую директорию
HELP man Получение справки по командам
SHOW TIME date Отображает дату и время
SHOW DEV df Отображает свободное дисковое пространство
STOP kill Остановить процесс
LINK ld Ссылка на модуль программы
PRINT lpr Напечатать файл
SHOW QUEUE lpq Отобразить очередь печати
SET PASSWORD passwd Сменить пароль
SHOW USERS who, finger,w Отобразить залогиненных пользователей
SHOW PROCESS ps Отобразить процессы
SET TERMINAL stty Изменить настройки терминала

 

Примитивнейший генератор паролей на Perl

Чтобы данный скрипт заработал необходимо установить модуль String::Random, делается это следующим образом (Debian/Ubuntu):

perl -MCPAN -e 'install String::Random'
#!/usr/bin/perl
# Это убережет нас от небезопасных конструкций, таких как ошибка в имени переменной
use strict
# Это будет выводить необязательные предупреждения
use warnings;
# Подключаем модуль String::Random
use String::Random;
# Объявляем переменную password
my $password;
# Создаем экземпляр класса String::Random
$password = new String::Random;
print "Password generated \n";
# Используя метод randpattern создаем шаблон пароля и выводим сгенерированный пароль
print "Your password is ", $password->randpattern("CCcc!ccn"), "\n";

В шаблоне по которому генерируется пароль:
C – любой заглавный символ [A-Z]
c – любой строчный символ [a-z]
! – любой специальный символ [~`[email protected]$%^&*()-_+={}[]|\:;”‘.<>?/#,]
n – любой целое число [0-9]

Ссылка на модуль String::Random

Использование PKGNG репозитория в FreeBSD 9.1

СТАТЬЯ ПОТЕРЯЛА СВОЮ АКТУАЛЬНОСТЬ. ОБНОВЛЕНО 7 СЕНТЯБРЯ 2022 Г.

Для использования репозитория PKGNG в FreeBSD устанавливаем сперва порт ports-mgmt/pkg. После установки необходимо конвертировать существующую пакетную базу данных в формат pkgng.

# pkg2ng

Далее настраиваем доступ к репозиторию PC-BSD. Создаем файл /usr/local/etc/pkg.conf с следующим содержимым:

packagesite: ftp://ftp.pcbsd.org/pub/mirror/packages/9.1-RELEASE/i386/
PUBKEY: /usr/local/etc/pkg-pubkey.cert
PKG_CACHEDIR: /usr/local/tmp

Читать далее…

Полезные однострочные команды SmartOS

ZFS

Q: Как узнать состояние дисков и ZFS пула?
A:

# zpool status
pool: zones
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
zones ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
c0t10d0 ONLINE 0 0 0
c0t11d0 ONLINE 0 0 0
c0t9d0 ONLINE 0 0 0
errors: No known data errors

Читать далее…

Настройка сетевых интерфейсов в OpenIndiana

Смотрим какие интерфейсы для передачи данных у нас в системе имеются:

# dladm show-link

LINK       CLASS      MTU        STATE        BRIDGE     OVER
e1000g0    phys       1500       unknown      --         --

Видим, что у нас в системе есть физический интерфейс, находящийся в неизвестном состоянии.

Задействуем его:

# ipadm create-if e1000g

Назначаем ему статический IP адрес из локальной сети с помощью утилиты ipadm:

# ipadm create-addr -T static -a 192.168.1.100/24 e1000g0/vstatic

А также вносим адреса шлюза по умолчанию и DNS сервера:

# echo "192.168.1.1" >> /etc/defaultrouter
# echo "192.168.1.2" >> /etc/resolv.conf

При нахождении за прокси сервером:

# export http_proxy="http://192.168.1.1:3128"

Ссылки:

Более подробнов про dladm

Установка Nginx+MySQL+PHP-FPM на SmartOS

Сперва не забываем обновить репозитории, если этого не было сделано.

Ставим Nginx:

# pkgin install nginx

Ставим MySQL:

# pkgin install mysql-server

Теперь устанавливаем пароль root на MySQL. Тут есть два варианта сделать это.
Читать далее…

Статья о Vyatta для журнала Open Source

В №126 журнала Open Source опубликована статья о дистрибутиве для маршрутизаторов Vyatta. Всем приятного чтения!

Установка Ruby-2.0.0 через RVM на Debian 6

Релиз уже почти как месяц вышел, так что пора…
Скачиваем RVM:

# curl -L https://get.rvm.io | bash -s head --autolibs=3 --ruby

Включаем RVM:

# source /usr/local/rvm/scripts/rvm

Проверяем RVM:

# rvm -v
rvm 1.18.20 (master) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/]

Читать далее…