## FAQ

### О SAMS

Что такое SAMS?
SAMS не является биллинговой системой, это система управления доступом пользователей к прокси серверу SQUID.

Какой трафик считает SAMS?
SAMS считает трафик по данным, заносимым в файл access.log прокси сервером SQUID. SQUID является прокси сервером для http, https, ftp протоколов.

Насколько трудно установить и настроить SAMS?
На самом деле не так уж и сложно. В современных дистрибутивах есть в наличие все необходимые пакеты и собирается он без проблем. В документации подробно описаны все шаги установки и настройки.
С NCSA авторизацией или доступом по ip адресам проблем недолжно быть вообще.
Проблемы возникают при использовании NTLM авторизации. Но это не проблема SAMS, это проблема используемой для авторизации SAMBA. В документации SAMS настройка NTLM авторизации описано подробно, кроме того это широко освещено в интернете (многие наступают на эти грабли :)

### Сборка и установка SAMS

Какие пакеты должны быть установлены для сборки и функционирования SAMS?
Все зависит от вида авторизации пользователей в SQUID.
для сборки и функционирования SAMS должны быть поставлены:
- MySQL server
- MySQL client
- файлы заголовков библиотек MySQL (mysql-devel-*.rpm)
- Apache http server
- Модули php для Apache (mod_php.rpm)
- php
- php-mysql
- библиотека PCRE (libpcre-*.rpm)
- файлы заголовков библиотеки PCRE (libpcre-devel-*.rpm)
- SQUID
  если вы хотите использовать NTLM авторизацию в домене Windows NT
- SAMBA 2.x server
- SAMBA 2.x client
  если вы хотите использовать NTLM авторизацию в домене Windows 2000/2003
- SAMBA 3.x server
- SAMBA 3.x client
  если вы хотите использовать авторизацию в Active Directory
- php-ldap
- libgd - библиотека поддержки графики
- php-gd - модуль поддержки libgd в php (используется для рисования графиков)

  Имеет ли значение порядок установки программных пакетов (Samba,Squid, Apache+PHP, SAMS)?
  Порядок установки Samba,Squid, Apache+PHP значения не имеет, главное чтобы перед установкой SAMS установить все пакеты с заголовками mysql-devel, libpcre-devel.

  Как мне создать базу и таблицы MySQL?
  Описание создание базы и пользователя SAMS в MySQL описано в документации Установка и создание базы SAMS в MySQL

  Почему для хранения данных используется SQL?
  Это позволяет делать более подробные и гибкие отчеты о полученном пользователем трафике.

  У меня чего-то не компилируется/не настроено/не работает, помогите!
  SAMS сопровождается подробной документацией, по-этому консультацией по e-mail, icq и т.п. я не провожу. У вас есть две возможности. Можно обратиться к автору программы за платной поддержкой по инсталляции и настройке. Или можно обратиться за поддержкой в форум, где надо указать: читайте здесь

  Программа sams/samsf/samsdaemon падает, что делать?
  См. предыдущий вопрос. Все программы при запуске в консоли с ключем -d выводят подробный лог своей работы.

  Ага, автор просто не хочет отвечать на вопросы, так как хочет заработать на этом деньги!
  Автор затратил много времени на написание этой программы и документации к ней. Еще и тратить время на решение возникающих у вас проблем совсем нехочется. Как показывает длительный опыт ответов на вопросы, они возникают от нежелания читать документацию, форум, поискать ответ в интернете или просто разобраться как это все работает. Гораздо проще написать письмо автору, он ответит. Не так ли?
  А деньги... SAMS ведь вы ставите для исполнения ваших служебных обязанностей, а вы ведь не работаете бесплатно?

  Как скомпилить Sams в FreeBSD, OpenBSD?
  Поставьте из портов gmake
  # ./configure
  затем
  # gmake

  На каком компиляторе собирался Sams на Sun Solaris?
  На Sun Solaris 8,9 x86 собирался при помощи gcc-small-3.3.2-sol8-intel-local

  ### Ошибки при сборке SAMS

  При попытке сделать configure начинает ругаться:
  checking for mysql.h in... configure: error: Cannot find MySQL's mysql.h in... MySQL в системе поставлен и функционирует.
  Отсутствуют файлы заголовков MySQL. Необходимо поставить файл примерно с таким названием: MySQL-dev.rpm

  При попытке сделать configure начинает ругаться:
  checking for <pcre.h> in /usr/include/pcre... configure: error: Cannot find PCRE's <pcre.h> in /usr/include/pcre
  redirect.c:695: dereferencing pointer to incomplete type
  redirect.c:695: invalid use of undefined type `struct samsurls'
  Отсутствуют файлы заголовков PCRE. Необходимо поставить файл примерно с таким названием: pcre-dev.rpm <Если pcre.h в системе установлен, то необходимо подправить путь к нему в файле sams/pcre.h (redirect.c)

  При попытке запустить samsdaemon, sams или samsf выдает что-то вроде:
  # sams
  /libexec/ld-elf.so.1: Shared object "libmysqlclient.so.14" not found, required by "sams"
  Эта ошибка означает, что ненайдена библиотека libmysqlclient.so.14.
  Поищите на диске библиотеку libmysqlclient.so.14.x.x, скорее всего она лежит в /usr/lib и сделайте на нее симлинк ln -s libmysqlclient.so.14.x.x libmysqlclient.so.14

  При запуске make выдает:
  "Makefile", line 311: Need an operator
  make: fatal errors encountered -- cannot continue
  ОС FreeBSD
  # ./configure
  затем
  # gmake

  ### Проблемы с запуском WEb интерфейса SAMS

  У меня FreeBSD и при попытке ввода пароля пользователя Admin я получаю ответ: Authentication ERROR
  Во FreeBSD по-умолчанию используется blowfish шифрование. Пароль пользователя Admin закодирован традиционным для Linux способом :)
  Запустите скрипт setpassword.php и он перекодирует пароль пользователя Admin:

  Если при обращении к веб интерфейсу вы наблюдаете такую картинку, то: Необходимо включить в файле конфигурации web сервера поддержку php. Раскомментируйте или добавьте следующие строки: LoadModule php4_module libexec/libphp4.so AddModule mod_php4.c AddType application/x-httpd-php .php .phtml |

  Если при обращении к веб интерфейсу вы можете видеть только чистый экран, или такую картинку, то:
  Непроизведено подключение к MySQL.
  1.Проверьте, запущена ли MySQL
  2.Проверьте, раскомментирован ли вызов модуля MySQL в конфигурационных файлах php (/etc/php.in, /etc/httpd/conf/php.ini и т.п., зависит от дистрибутива).
  3.Проверьте правильность файла sams.conf
  SQUID_DB=squidlog
  SAMS_DB=squidctrl
  MYSQLHOSTNAME=localhost
  MYSQLUSER=username
  MYSQLPASSWORD=userpass

  Если при обращении к веб интерфейсу вы наблюдаете такую картинку (надпись "Fatal error: Call to undefined function: () in /usr/local/share/sams/tray.php on line XXX в нижнем фрейме"), то:: В PHP выключена возможность получать переменные из URL. В php.ini исправьте или добавьте строку: register_globals = On ВНИМАНИЕ!!! Для версий SAMS с 2004 года это неактуально |

  ### Общие вопросы по функционированию SAMS

  При запуске samsdaemon вместо файла access.log появляется какой-то файл !access.log. Останавливаем samsdaemon, останавливаем сквид, запускаем сквид - не запускается! После разборок выясняется, что мешает "/var/log/squid/|access.log". Удаляем - сквид работает.
  Это FIFO файл, его создает при запуске утилита samsf. Почитайте об этом в документации к SAMS.

  При старте сервера все запускается прекрасно. Но стоит сделать переконфигурирование squid из web интерфейса, падает squid, так как куда-то девается файл паролей nsca.sams. Cтавим на свое место nsca.sams, запускаем ручками squid, тушим и запускаем ручками samsdaemon - все работает прекрасно (в том числе переконфигурация из веб-интерфейса).
  Файл ncsa.sams создается при помощи утилиты htpasswd. Видимо она у вас лежит где-нибуть в нестандартном месте. Например /usr/local/apache2/bin/htpasswd. Создайте симлинк или скопируйте htpasswd из /usr/local/apache2/bin/htpasswd в /usr/bin

  почему-то не конфигурится конфигурационный файл squid, вставляет только строку created by SAMS _sams_2004.10.12 12:56:11 и всё. Куда смотреть, где копать уже не знаю. Статистика работатет.
  Из файла squid.conf при настройке SQUID вами были удалены тэги начала разделов. При внесении изменений в squid.conf sams привязывается к тэгам, обозначающим начало разделов, например
  # TAG: acl
  # TAG: http_access
  # TAG: delay_pools
  Наличие этих тэгов необходимо!!!

  SAMS во много раз завышает трафик пользователей!!!. У меня стоит скрипт, который каждый день очищает файл access.log от записей с определенным ip
  при ообработке файла с логами ваш скрипт вычищает записи из файла access.log, и его размер уменьшается. sams воспринитмает уменьшение размера файла access.log как признак произошедшей ротации логов, и начинает обрабатывать access.log сначала. Естественно, информация о трафике заносится в базу еще раз.

  при сохранение конфигурации вылезает ошибка:
  Fatal error: Call to undefined function: gzopen() in ....../sams/src/backup.php on line XXX
  У вас старая версия php или php собран без поддержки возможности создания архивных файлов. Пересоберите php, установите более новую версию..

  У меня SQUID уже настроен и работает. Импортирует ли SAMS мои настройки из squid.conf?
  Нет, SAMS не импортирует настройки из squid.conf

  А если я пропишу правила прямо в squid для аськи их sams не тронет и будут ли они работать ?
  SAMS при изменении squid.conf не удаляет никаких правил, он только добавляет необходимые правила для настройки доступа пользователей. По-этому возможен вариант, когда ваши правила будут противоречить правилам, созданных SAMS - например, ваши правила разрешают доступ к SQUID всем пользователям. В этом случае регулирование доступа через SAMS работать небудет.

  Какие форматы лога squid может обрабатывать sams?
  SAMS обрабатывает формат access.log, Squid 1.1 родной формат:
  Time Elapsed Host Status/HTTP Size Method URL Ident Hier_Status/Hier_Host
  Пример:
  1128157659.480 120133 192.168.0.77 TCP_MISS/200 672 CONNECT swap.karelia.ru:21 misha DIRECT/192.168.254.253 -
  Чтобы привести формат лога к такому виду необходимо выставить в squid.conf:
  emulate_httpd_log off

  wbinfo в консоли работает отлично, а в веб интерфейсе нет. Получить пользователей домена немогу.
  В консоли вы запускаете wbinfo от имени рута, со всеми его правами. В веб интерфейсе он вызывается с правами пользователя, о которого работает apache. Проверьте правильность пути к wbinfo в настройках SAMS, права на доступ к smb.conf (они могут быть, например rw-r----), посмотрите на логи winbind.

  Я использую редиректрор XXXXXX. Будет ли работать SAMS (подсчет трафика, квоты и т.д.) не используя редиректор samsredir?
  Без проблем. В настройках SAMS выставьте "Не использовать редиректор". SAMS настроит ограничения работы пользователей силами SQUID.

  Если у пользователя осталось 10 Мб трафика, а он стал закачивать файл размером 100 Мб. Закачает ли пользователь файл?
  Закачает. SAMS отключает пользователя только по факту превышения трафика (есть запись в файле access.log). Существуют специальные патчи для SQUID, которые позволяют записывать в access.log информацию о скачивании файла по частям, например по 100 килобайт.

  Если пользователь выбрал свой трафик до конца месяца, то приходится добавлять ему трафик. Но при этом допустимый объем на следующий остается "трафик пользователя" + добавленный трафик. Предлагаю внести понятие "временный трафик", чтобы можно было его добавлять юзерам, а на следующий месяц он не сохранялся.
  Это бесполезная трата времени. Зачем тогда вообще считать трафик юзеров, сделать им без ограничения и все? Юзеров может научить не качать что попало только отключение до конца месяца. Ну или штраф на сумму стоимости трафика, если он что-то скачал для собственного развлечения :)
  Другими словами, временного трафика в SAMS не будет.

  У меня утилита sams выпадает в segmentation fault и не считает трафик пользователей
  Видимо во время записи в файл access.log у squid произощел какой-то сбой, и он записал туда неправильную информацию. В принципе, sams анализирует читаемые из access.log строки на соответствие некоторому шаблону и примерно 90% таких случаев будет обработано нормально, но иногда может не сработать.
  Запустите в консоли
  sams -d
  будет выведена информация, в том числе:
  end=XXXXX - смещение от начала файла access.log, с которого sams будет читать логи.
  откройте файл access.log в, например, редакторе файлового менеджера mc, и пройдите по смещению отначала. Это смещение должно указывать на начало строки. Если не так, подредактируйте файл, удалив лишние символы, чтобы начало следующей строки попало на это смещение

  SAMS сможет отловить, если произойдет ротация логов?
  Вы думаете я не слышал про это? Конечно я это учел. SAMS автоматически следит за размером лога, если размер файла меньше записи в счетчике, происходит сброс счетчика и файл считается с начала.

  Если SAMS встретит в access.log неизвестного пользователя (ip адрес), он посчитает его трафик?
  Нет, SAMS рассчитан на то, что он будет считать и управлять ТОЛЬКО трафиком пользователей, зарегистрированных в SAMS. Если пользователя там нет, значит вы не хотите считать его трафик.

  Как прикрутить к apache 2.0 php4? Все делаю по инструкции ... ничего не получается. Браузер не понимает php.
  Я думаю, что объяснять как настраивать apache, mysql и другие программы не мое дело. Читайте документацию по необходимым программам.

  В плане безопасности мне боязно запускать на прокси сервере web сервер и mysql.
  Как я предполагаю, прокси должен находиться в ДМЗ. Если не там, то никто не запрещает развернуть MySQL и Apache где-нить в сети на другой машине (можно даже на разных), главное правильно настройте sams.conf на прокси и той, где расположен web-интерфейс.

  Я использую редиректор samsredir. В ACL squid разрешен доступ к прокси всем пользователям, даже тем, которые отключены
  При использовании редиректора samsredir именно он запрещает доступ пользователей к прокси..

  ### Другие вопросы по SAMS

  Планируется ли работа SAMS с PostgreSQL (M$SQL, ORACLE и т.п.) ,а то держать одновременно MySQL и PostgreSQL это роскошь:
  Вообще-то не планируется, так как это требует много времени. Вполне работает вариант, когда MySQL стоит на другой машине.

  Можно ли в SAMS добавить возможность...?
  Если у меня будет время и желание. Если у вас есть нужда вы какой-либо дополнительной функции, то за некоторую сумму это можно сделать.