Мой список блогов

вторник, 20 декабря 2011 г.

История одного домашнего NAS

Задача
Сервер, который хранил бы много разнообразной информации, обеспечивал ее резервное копирование (raid1), вся информация с него была бы доступна посредством Samba/FTP с компьютеров (4) в локальной сети (100Mb/s – ограничение роутера, кроме того все остальные компьютеры подключены через WiFi (802.11g – 54 Mb/s), а провайдер дает 6down/6up Mb/s поэтому 100Mb/s вполне достаточно для обслуживания всех страждущих), а также служил бы торрент и веб качалкой. Желательно доступ на сервер по протоколу FTP извне. Сервер будет подключаться к роутеру проводом.


Выбор железа
Было два варианта: покупать новое железо или использовать старое. В качестве нового был выбран такой комплект:
    MB Zotac Socket775 GeForce 7100 NF630IE-E mATX Intel Pentium dual-core LGA 775 2.0G/1Mb/800 FSB tray Conroe (E2180) Кулер CoolerMaster DI5-9HDSL-0L-GP (P/N:DI5-9HDSL-0L-GP: Socket775 Корпус Frontier CO22M Corona + 2 планки памяти и БП.
В качестве старого на роль NAS претендовал:
    Asus A8N-E AMD 64 3000+ Venice + 2 планки памяти, БП, низкий корпус (до 40 см).
Естественно к этому всему были заранее куплены накопители: 2 WD10EADS (Green серия – наиболее тихие). Первоначально планировалось устроить на них Raid, но в процессе было принято решение не бэкапить всю информацию, а только избранную (зачем к примеру копия фильмов?), этому поспособствовала необходимость использования одного диска для переброски на него информации с RAID10, который работал на A8N-E (кстати, диск был отформатирован под NTFS и информация с него переносилась на другой диск, отформатированный в UFS уже в FreeNAS).
Соотнеся скорость развития железа, и желание купить новую десктопную систему взамен старой, а также не очень большую древность старого железа, было принято решение использовать старое железо.

Выбор ОС
В процессе выбора ОС были рассмотрены WHS и FreeNAS, в результате чего выбор был остановлен на последней ОС, несмотря на большую привязанность автора к Win системам. Среди версий FreeNAS была выбрана последняя и при этом 64-х разрядная версия (предназначенная как для AMD так и для Intel 64-х разрядных процессоров)
Установка ОС
Путем нескольких попыток запуска ОС было установлено, что для первоначальной установки требуется LiveCD, так как embedded версии не содержат конфигурационного файла, который необходим для запуска и который создается именно LiveCD версией в процесс первоначальной инсталляции.
Кроме этого в процессе нескольких попыток было установлено, что наилучшим решением будет устанавливать ОС на раздел винчестера (либо отдельный винчестер) размером до 1Гб, так как установка embedded версии на USBFlash диск чревато проблемами:
1. Не все МП могут нормально загрузиться с него (автор не сталкивался)
2. Не все флешки позволяют с них грузиться (столкнулся с древней флешкой Transcend 128Mb)
3. На embedded версию требуется искать спец. Софт (даже тот же mc, который существует только в обрезанной light версии и который автору так и не удалось установить даже с приложением усилий).
Установка же полноценной (full) ОС на USBFlash диск ни приведет ни к чему хорошему, так как количество циклов записи на один сектор во флешках ограничено 50000. Таким образом через какое-то время во флешке просто начнут сыпаться сектора.
Подсуммируя вышесказанное вам потребуется CD/DVD дисковод, LiveCD диск с FreeNAS и пару минут времени.

Настройка ОС
Самое главное настроить дисковую подсистему. А именно: включить smart и установить минимальный уровень шума и минимальное энергопотребление. Для тех, кто беспокоится за производительность я провел тест записи одного файла на двух идентичных дисках, на одном из которых были включены минимальные настройки шума, энергопотребления, производительности, а на другом - максимальные.


Разница в скорости записи на диск по сети при минимальных и максимальных настройках производительности
Как видите разницы никакой нет, возможно, она появится при многочисленных попытках обращения к диску.

Настройка UPS. А автора был старенький APC Smart UPS, имеющий COM порт, поэтому было решено использовать его для обеспечения резервного питания. Посредством Services\UPS данную возможность можно включить. Если вам необходимо использовать Win NUT Client, то можно включить опцию "Enable remote monitoring of the local connected UPS". В качестве порта автор использовал /dev/ttyd0.
К устройствам sio можно получить доступ через /dev/ttydN (устройства входящих вызовов, dial-in) и /dev/cuaaN (устройства исходящих вызовов, call-out). FreeBSD предоставляет также устройства инициализации (/dev/ttyidN и /dev/cuaiaN), устройства блокировки (/dev/ttyldN и /dev/cualaN). Первые используются для инициализации параметров порта при каждом его открытии (таких как crtscts для модемов, использующих сигналы RTS/CTS для управления потоком). Устройства блокировки используются для установки флага блокировки на порт и предотвращения изменения определенных параметров пользователями или программами

Чтобы увидеть, как ядро определяет последовательные порты, просмотрите сообщения, выводимые во время загрузки ядра, или используйте команду
Code:
/sbin/dmesg | grep 'sio'

для вывода сообщений ядра еще раз. После включения сервиса просматривать статус UPS можно через WebUI: Diagnostic\Information\UPS

Настройка пользовательских расшаренных папок. У автора была задача расшарить на NAS для нескольких пользователей папки, причем пользователи не должны были видеть файлы и папки других пользователей, а также тратить время на поиск своей папки (т.е. они должны были автоматически при попытке захода на сервак попадать в "свою" home директорию). Эта задача была решена следующим образом.
В директории /mnt/ была создана директория /mnt/user/home/ в которой и создавались home папки пользователей. Важно, чтобы директория, содержащая домашние папки пользователей находилась именно в /mnt/, директории, расположенные в /usr/, не срабатывают для SMB. Также важно, чтобы на всем пути все директории имели следующие разрешения rwxr-xr-x. Т.е. всем пользователям были даны права на просмотр содержимого директории. Конкретные директории для конкретного пользователя могут иметь права rwx------.

 Теперь следует создать пользователей и указать им соответствующие родительские директории

 Все, теперь пользователи будут заходить только в свои папки и при этом не будут видеть чужих папок. Чтобы обеспечить взаимодействие между ними ддостаточно создать символьные линки в папке каждого пользователя.
Для того, чтобы вход пользователя на NAS был для пользователя прозрачен (без запроса логина/пароля), его логин/пароль в ОС (которую он использует) должен совпадать с логином/паролем, указанным вами в NAS. При этом следует учесть, что имя пользователя не должно содержать пробелов и других неразрешенных символов.
Во время работы у автора возникла проблема с символьными пониманием символьных линков Mac OS X 10.5.7. При попытке просмотреть посредством SMB символьный линк на директорию MacOSX грязно ругалась :mrgreen: сообщая, что не может найти оригинального файла. Проблемабыла решена посредством добавления в список "Auxiliary parameters" в Services\CIFS/SMB следующей строки:
Code: 
unix extensions = no


Настройка FTP
Следует создать директорию ftp, а в ней две директории: downloads и uploads на диске, где есть свободное пространство. При этом следует на все директории, которые есть в пути к директориям дать права на выполнение для всех пользователей.
Для того, чтобы пользователи могли заливать и скачивать файлы с вашего NAS следует настроить им права. Прежде всего следует создать пользователя, который будет членом группы пользователей ftp. Корневой директорией ему следует указать только что созданную директорию ftp.
При настройке самого сервиса следует указать маски для создания файлов и директорий. На самом деле имеются в виду так называемые umask, т.е. маски, которые следует вычитать из первоначальной 777 для того, чтобы получить результирующую. К примеру, для того, чтобы дать возможность пользователю ftp записывать и удалять файлы и директории, а другим пользователям читать эти данные посредством SMB (или других протоколов) следует указать маски 020.
Также следует указать опцию Default root. В этом случае при авторизации будет автоматически выполнена команда chroot, которая изменит корневую директорию пользователя, ограничив его возможность перемещения по файловому пространству сервера.

Установка дополнительных программ
В качестве дополнительных программ потребовалось установить
Deluge – торрент качалка вместо Transmission (большее количество настроек, большая скорость, возможность управлять скачиванием конкретных файлов – не качать ненужные файлы).
Чтобы установить последнюю версию deluge необходимо изменить источник пакетов (так как с источника по-умолчанию устанавливается версия 0.5). Для этого нужно добавить в файл /root/.cshrc следующую строку (параметры разделены символами табуляции, а не пробелами!)
Code: 
setenv PACKAGESITE ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-7-stable/All/

после чего можно выполнить команду установки (к сожалению, прийдется указывать точную версию, так как папка Latest пуста :( )
pkg_add –r deluge-1.1.9
Чтобы сразу можно было запускать программу без указания полного пути к ней и перезагрузки нужно давать команду rehash
Для автоматического запуска deluged (демона) необходимо создать файл deluged в директории /etc/rc.d следующего содержания


Code: 
#!/bin/sh # # PROVIDE: deluged # REQUIRE: LOGIN # KEYWORD: shutdown # # # Add the following line to /etc/rc.conf to enable the deluged daemon: # # deluged_enable (bool):   Set to "NO" by default. #            Set it to "YES" to enable deluged daemon. # deluged_user (str):      Defaults to "deluge" #            User running deluged daemon # deluged_home (str):      Defaults to "/home/deluge" #            Directory to store configuration and possibly downloads # deluged_pidfile (str):   Defaults to "$deluged_home/deluged.pid" # deluged_logfile (str):   Defaults to "$deluged_home/deluged.log" # deluged_loglevel (str):   Verbosity of logging, defaults to "error". Possible values: #            none, info, warning, error, critical, debug # deluged_args (str):      Custom additional arguments for deluged, default empty # . /etc/rc.subr name="deluged" rcvar=`set_rcvar` # read configuration and set defaults load_rc_config ${name} : ${deluged_enable="NO"} : ${deluged_user="deluge"} : ${deluged_home="/home/deluge"} : ${deluged_port="58846"} : ${deluged_pidfile="${deluged_home}/${name}.pid"} : ${deluged_logfile="${deluged_home}/${name}.log"} : ${deluged_loglevel="error"} : ${deluged_args=""} required_dirs=${deluged_home} command="/usr/local/bin/deluged" command_args="--port=${deluged_port} --pidfile=${deluged_pidfile} --loglevel=${deluged_loglevel} --logfile=${deluged_logfile} ${deluged_args}" command_interpreter="/usr/local/bin/python2.6" HOME=${deluged_home} run_rc_command "$1"
Для автоматического запуска deluge (веб-интерфейса) необходимо создать файл deluge-webui в директории /etc/rc.d следующего содержания
Code: 
#!/bin/sh # # PROVIDE: deluge_webui # REQUIRE: LOGIN deluged # KEYWORD: shutdown # # # Add the following line to /etc/rc.conf to enable the deluge web ui daemon: # # deluge_webui_enable (bool):   Set to "NO" by default. #            Set it to "YES" to enable deluge web ui daemon. # deluge_webui_user (str):   Defaults to "deluge" #            User running deluge web ui daemon # deluge_webui_home (str):   Defaults to "/home/deluge" #            Directory to store configuration and possibly downloads # deluge_webui_logfile (str):   Defaults to "$deluge_webui_home/deluge_webui.log" # deluge_webui_loglevel (str):   Verbosity of logging, defaults to "error". Possible values: #            none, info, warning, error, critical, debug # deluge_webui_args (str):   Custom additional arguments for deluge, default empty # . /etc/rc.subr name="deluge_webui" rcvar=`set_rcvar` load_rc_config ${name} : ${deluge_webui_enable="NO"} : ${deluge_webui_user="deluge"} : ${deluge_webui_home="/home/deluge"} : ${deluge_webui_logfile="${deluge_webui_home}/${name}.log"} : ${deluge_webui_loglevel="error"} : ${deluge_webui_args=""} required_dirs=${deluge_webui_home} command="/usr/local/bin/deluge" command_args="--ui=web --loglevel=${deluge_webui_loglevel} --logfile=${deluge_webui_logfile} ${deluge_webui_args} &" command_interpreter="/usr/local/bin/python2.6" HOME=${deluge_webui_home} run_rc_command "$1"
  В файл /etc/rc.conf необходимо добавить следующие строки:
Code: 
deluged_enable="YES" deluged_user="root" deluged_home="/home/deluge" deluged_loglevel="warning" deluge_webui_enable="YES" deluge_webui_user="root" deluge_webui_home="/home/deluge" deluge_webui_loglevel="warning"


Естественно, что наиболее верным решением будет создать отдельного пользователя, наделив его соответствующими правами и прописать его тут deluged_user="пользователь" и тут deluge_webui_user="пользователь". Теперь при каждом запуске у вас будет запускаться deluge. Доступ к нему можно будет получить по адресу http://your_nas:8112/ пароль: deluge

MC – файловый менеджер
pkg_add –r mc-4.6.2

Libretto – PHP веб качалка (скачивание файлов с http ресурсов посредством wget)
1. Скачайте архив с php скриптами
2. Распакуйте архив в определенную директорию, к примеру /usr/local/share/libretto
3. Для работы Libretto вам понадобиться wget. Установите его посредством
pkg_add -r wget-1.11.4
4. Откройте файл ./includes/settings.php (пусть относительный относительно директории установки)
5. Отредактируйте следующие переменные в этом файле (это обязательно необходимо сделать до первого запуска)
Code: 
// This is where the downloads and status files go. // Make sure this directory exists and is WRITABLE by the webserver process! // directories ending with slash   $destdir = '/mnt/hdd1/downloads/';   $tmpdir = '/mnt/hdd1/temp/'; // Libretto does not log if $logfile is commented   $logfile = '/var/log/libretto.log'; // require authentication, true or false // if true only listed users will login successfully $authrequire = false;

Также отредактируйте путь к расположению wget в этом же файле
Code: 
$downloaders = array(    'wget' => array(       'binary' => 'wget',       // Path and name of your server's compatible binary,       // optional, if not specified Libretto will search the binary program in the path,       'fullpath' => '/usr/local/bin/wget',

6. Сделайте символьную ссылку на директорию libretto в директории /usr/local/www/
ln -s /usr/local/share/libretto /usr/local/www/
таким образом вы теперь можете обращаться к вашей качалке посредством http://your_nas/libretto/
Более подробно читайте тут

Дополнительная настройка - tune up
Перезапуск демонов. Для автоматического перезапуска демонов следует в файл /var/cron/tabs/root записать следующие строки:
Code: 
*/5 * * * * /usr/bin/find /usr/local/etc/rc.d/ -type file | xargs -I$ sh -c "($  2>&1 | grep -q -v status) \       && exit ; ($ status > /dev/null) && exit ; $ start"
(по-умолчанию файла нет)
Более подробно читать тут.

Чтобы избавиться от проблем запуска proftpd (он отказывается стартовать, так как не может определить ip адрес nas по его имени), следует в WebUI: Network\Hosts добавить ваш NAS, указав в качестве Hostname имя, указанное как Hostname в System\General.

Для того, чтобы из WebUI вы имели доступ к только что установленым сервисам (Deluge, Libretto) следует прописать несколько строк в файл /usr/local/www/fbegin.inc

Code: 
$menu['advanced']['menuitem'][] = array("type" => "separator", "visible" => Session::isAdmin()); $menu['advanced']['menuitem'][] = array("desc" => gettext("Download"), "link" => "./libretto/", "visible" => Session::isAdmin(), "target" => "_blank"); $menu['advanced']['menuitem'][] = array("desc" => gettext("Torrent"), "link" => "http://your_nas:8112/index", "visible" => Session::isAdmin(), "target" => "_blank");


Таким образом мы создали подпункты в меню Advanced.

взято тут

Комментариев нет: