Архив рубрики: Solaris

Гарантированный запуск единичной копии скрипта

Принцип ее работы прост: для каждого процесса она создает файл и вешает на него lock. Как только процесс завершается, лок пропадает. Лок также пропадает в случае внезапной смерти процесса, и нет необходимости проверять pid на существование или делать другие телодвижения. Если процесс запускается повторно, а лок-файл еще не освободился, работа скрипта прерывается и выдается сообщение в STDERR. Читать далее

[Solaris] Снепшоты сервисов

Правда удобно, когда правишь сервис через svccfg и что-то пошло не так и нужно быстро откатиться к предыдущему состоянию? Начиная с 11.2 такая возможность есть. И так, есть 4 состояния (покажу на примере сервиса spamd):

# svccfg -s svc:/application/network/spamd:default listsnap
running
initial
previous
start

Читать далее

Solaris: установка пакета, когда идёт ругань на swap

Пробуем ставить:

# pkg update -v network/zabbix_agent
pkg: update failed (linked image exception(s)):
A 'zone1' operation failed for child 'zone:zone1' with an unexpected
exception:
[Errno 28] No space left on device

смотрим dmesg:

tmpfs: [ID 518458 kern.warning] WARNING: /tmp: File system full, swap space limit exceeded

Читать далее

Запрет удаления файлов в Solaris

Вот такая нехитрая задача возникающая перед администраторами: писать можно, удалять нельзя и всё это ограничение применить только к конкретному пользователю. Решается она просто: через ACL. Причём нужно иметь ввиду, что бы запретить удаление, нужно явно это указать (если у пользователя отсутствуют явные запреты, то он всё равно сможет их «нарушить»).

Стандартные права выглядят так: rwxpdDaARWcCos, где буквы dD означают разрешение на удаление (d — удаление файла, D — удаление файла или папки внутри директории).

Читать далее

Создание файлов в /var/run для НЕ root’a

Предположим, вам надо запустить сервис не от root’a и при этом, создать файл (например, сокет или pid) в системной папке /var/run от этого юзера. Правильный Solaris-way следующий:

Создаём группу

# svccfg -s svc:/network/test1234 addpg method_context framework

Выставляем необходимого юзера и группу

# svccfg -s svc:/network/test1234 setprop 'method_context/user = astring: "webservd"'
# svccfg -s svc:/network/test1234 setprop 'method_context/group = astring: "webservd"'

Читать далее

Solaris и файл hosts

По умолчанию файл /etc/hosts в Solaris отсутствует. Но это совсем не означает, что он пуст! В Solaris он располагается по другому пути — /etc/inet/hosts (это можно увидеть, натравив, например, truss на nscd и он сразу покажет, какие файлы запрашивает). И так, правильный выход из ситуации — сделать симлинк /etc/hosts на файл /etc/inet/hosts. Именно так, и не иначе. В противном случае, после апдейта, могут быть конфликты или ссылка затрётся.

[ZFS] Замена сбойного диска сбойным

Не знаю, проявляется ли это на новых версиях ZFS, но достаточно интересный хак. И так, ситуация следующая: при замене диска в пуле, в процесс перестройки, выпал заменяемый диск. Тогда пул навсегда замирает в состоянии DEGRADED. Как быть? Вот здесь подсмотрел хак. Приведу цитатой:

echo zfs_no_scrub_io/W0t1 | mdb -kw

После этого надо дать resilver закончиться (он пройдёт достаточно быстро), и «zpool offline» сбойное устройство.

Потом поменять параметр назад:

echo zfs_no_scrub_io/W0t0 | mdb -kw

и «zpool replace» его работающим диском.

Принцип работы хака: в треде, где идёт resilver, мы пропускаем собственно часть, которая пишет данные; resilver заканчивается (естественно, на битый диск мы ничего не пишем, так что ошибок на нём не будет, но и данных тоже).

 

Solaris verbose boot process

По умолчанию, Solaris при загрузке очень краток: 3 строки и хватит. Что бы «разговорить» его (по аналогии, как это в Linux/FreeBSD) можно пойти 2-мя путями: править grub или «true Solaris-way«. О втором методе ниже:

# /usr/sbin/svccfg -s system/svc/restarter:default
svc:/system/svc/restarter:default> addpg options application
svc:/system/svc/restarter:default> setprop options/logging = astring: verbose
svc:/system/svc/restarter:default> exit

После этого можно перегружаться и проверять: будет выводится каждая загруженная служба.