среда, 9 марта 2011 г.

Арифметические операции с переменными в bash

Для выполнения сложения, вычитание, умножения, деление, получение остатка от деления в bash можно использовать выражения следующего вида:

$[$OPER1 + $OPER2]
где
OPER1 - имя первого операнда выражения.
OPER2 - имя второго операнда выражения.
+ - арифметическая операция.

Пример:
bash-3.00$ OPER1=100
bash-3.00$ OPER2=20
bash-3.00$ echo $[$OPER1+$OPER2]
120
bash-3.00$ echo $[$OPER1-$OPER2]
80
bash-3.00$ echo $[$OPER1/$OPER2]
5
bash-3.00$ echo $[$OPER1*$OPER2]
2000
bash-3.00$ echo $[$OPER1%$OPER2]
0

вторник, 22 февраля 2011 г.

Проблема с запуском apache2 на solaris 10

После установки apache2 на solaris 10, если использовать стандартную конфигурацию появляется критическая ошибка:
[Tue Feb 22 10:41:56 2011] [alert] (22)Invalid argument: setgid: unable to set group i
d to Group 4294967295

Если внимательно почитать комментарии в конфигурационном файле можно найти и причину этого
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group #-1 on these systems!

Что в буквальном переводе означает
Некоторые типы ядер операционных систем не поддерживают системные вызовы setgid(Group) или semctl(IPC_SET) в случае, если значение параметра Group более 60000. Не используйте директиву Group #-1 на этих ОС

Таким образом причина ошибки связана с несовместимостью системного вызова на solaris.

Для исправление этой ошибки необходимо вручную создать группу/пользователя под которым будет выполняться apache2.

Например так:
useradd -s /bin/true apache2user
groupadd apache2group
usermod -g apache2group apache2user

Теперь соответственно изменяем директивы в httpd.conf на
User apache2user
Group apache2group

Одно замечание - необходимо поменять хозяени папок apache2 на нашего пользователя apache2user:

chown -R $PATH_TO_APACHE apache2user
chgrp -R $PATH_TO_APACHE apache2group