Наличие WiFi в квартире перестало быть экзотикой, как и три-четыре устройства (ноутбуки, компьютеры, телефоны, планшеты, медиа-центры, телевизоры), способные не только ходить в интернет, но и использовать ресурсы локальной сети. Поэтому возникает необходимость создания небольшого домашнего сервера, или сетевого хранилища (NAS), где будут храниться общедоступные файлы, производиться закачки через торрент. Сформулируем наши требования к этой железяке.
- Должна работать круглосуточно.
- Должна подключаться к нашей домашней сети.
- Должна иметь достаточный объем дискового пространства для хранения наших файлов.
- Должна предоставлять эти ресурсы в общий доступ по сети.
- Должна выступать как медиасервер (для телевизоров и медиаплейеров).
- Должна иметь торрент-клиент, закачки на который можно передавать удаленно.
Можно купить готовый NAS-сервер. Благо, при капитализме такого добра хватает в магазинах. Есть также медиа-плейеры с функцией медиа-сервера, где реализованы наши пожелания (или какая-то их часть), включая объемный жесткий диск. Есть роутеры, к которым можно подключить внешний жесткий диск через USB. При выборе такой системы обратите внимание на наличие необходимых функций, скорость передачи данных. Меня от этого варианта отталкивает несколько моментов.
Во-первых, ты покупаешь готовое устройство с фиксированным набором ништяков, изменить который или невозможно, или сложно.
Во-вторых, ты покупаешь, то есть тратишь кровно заработанные дензнаки. А это всегда неприятно.
В-третьих, … Даже хватит первых двух.
У многих при переходе на ноутбук возник вопрос: а куда деть (кому продать) старый компьютер? Выбросить жалко, он помнит контру, windows98, и вообще друзей не продают. Вот на него-то мы и зарядим нашу систему, в результате старый системник получит новую жизнь, мы не потеряем проверенного в боях товарисча, а приобретем полнофункциональное сетевое хранилище с функциями медиа-сервера.
Что мы будем ставить?
Система: FreeBSD 8.2. (Можно поставить и FreeNAS, это та же BSD, только урезанная, поэтому она нам не подходит, мы хотим иметь возможность расширять функциональность нашего сервера до пределов, ограниченных железом).
Примечание: Настоятельно рекомендую ознакомиться со статьей о NAS на Убунту. Возможно, для начинающего этот вариант будет гораздо легче.
ПО:
LAMP– Apache, MySQL, PHP. Это нам потребуется для управления сервером через веб-интерфейс.
Mediatomb – медиа-сервер, позволяющий не только передавать файлы на медиа-проигрыватели (телевизоры, и т.п.), но и перекодировать на лету неизвестные им форматы.
Transmission – торрент-клиент, имеющий веб-интерфейс.
Samba для предоставления общего доступа к файловым ресурсам.
Если не заморачиваться на перекодировку на лету, тогда для создания сервера достаточно 486 процессора и 256 Мб оперативной памяти. Это и будет минимальными требованиями к железу. Еще нам нужен жесткий диск большого объема, возможно, несколько дисков. При комплектовании системного блока учтите нагрузку на блок питания. Компьютер будет работать круглые сутки, при этом желательно, чтоб он не сильно нагревался, не работал на пределе. Если установить прожорливый процессор, четыре жестких диска, тогда блок питания на 250 ватт умрет практически сразу. Поэтому рекомендую проверить его мощность, дискретную видеоплату выбросить, а привод cd/dvd отключить после установки системы.
Теперь про подключение к сети. Можно подключить его проводом, можно через WiFi, принципиально это значения не имеет, но нужно учесть следующее. Самые простые проводные сетевые адаптеры поддерживают скорость передачи 100 Мбит/с, не редкость гигабитные. А самый навороченный WiFi – 300 Мбит/с, но Вам еще понадобится канал для подключения клиентов (телевизоры, ноутбуки). Поэтому рекомендую сервер подключать проводом к роутеру, оставив весь WiFiклиентам.
Какой выбрать дистрибутив? Ни в коем случае не Current. Нам надо стабильную систему, а не полигон для испытаний. Из тех же соображений не рекомендую и Stable. Остался Release. Его и будем качать.
Итак, компьютер готов, дистрибутив FreeBSD скачали и записали на болванку. Можем приступать.
Установка FreeBSD.
Загружаемся с диска
Если ничего не трогать, автоматически выберется первый пункт и начнется установка
Надпись сверху гласит: «Выберите страну, регион или группу. Для выбора используйте клавишу пробел или ентер». Выбираем Российскую Федерацию и жмем любую из указанных клавиш. Далее
требуется выбрать кодировку – KOI8-R. Позднее мы перенастроим на использование UTF-8, но сразу, к сожалению, выбрать её нельзя. Далее попадаем в меню установщика.
Выбираем путь самурая - «custom install», так как мы не шутки шутить тут собрались. В меню выборочной установки
нас интересуют четыре пункта: Partition (создание слайсов), Label (разбиение дисков), Distributions (устанавливаемые дистрибутивы) и Commit (применить). Заходим в Partition.
Это очень сложный вопрос про геометрию диска. Не запариваемся и отвечаем YES. При этом на старых машинах Вы можете потерять часть объема диска, но это – тема отдельного разговора. Размер диска Вы сможете проконтролировать в следующем окне установки.
Здесь мы увидим наш диск (вверху ad0 – название устройства, у Вас оно может быть другим, это зависит от его вида, но запомните эти буквы), который нам предлагается разбить на слайсы. В конце первой строки – размер диска (у меня 32 Гб). Традиционно разные слайсы используются для размещения различных операционных систем, мы же планируем устанавливать только FreeBSD, поэтому нам достаточно единственного слайса на весь диск. При этом надо помнить, что на одном слайсе можно создать не более семи разделов, если Вы планируете большее их количество – создавайте больше слайсов (до четырех на один физический диск). Если Вы не поняли ничего из написанного выше – не отчаивайтесь, жмем кнопку «A» - использовать весь диск и получаем такую же картинку, как у меня.
Теперь жмем «Q» - выход. Следующий вопрос – про загрузчик.
Так как система одна, выбираем первый пункт и идем дальше. Заходим в пункт «Label». Здесь предлагается создать разделы. Смысл в двух словах следующий. Можно также не заморачиваться и создать один раздел, но тогда всякий мусор может забить весь диск, не оставив места системе. Это вызовет её неработоспособность. Нам это не надо, тем более что именно для набивания мусором мы и делаем себе эту железяку. Выбор один: разнести систему и мусор по разным разделам. Для создания раздела нажимаем кнопку «C».
В окне появится цифра – размер раздела в блоках, убираем эту цифру и пишем, как у меня. Буква в конце символизирует уже мегабайты, а не блоки. Это будет рутовый (коренной) раздел, в котором будет система, и к которому будут монтироваться остальные файловые системы. Полтора Гб ему хватит за глаза, поэтому жмем ентер и попадаем в следующее окошко.
Здесь спрашивается – создавать файловую систему или своп (типа файл подкачки в Windows). Здесь выбираем FS. Следующий вопрос – точка монтирования. В данном случае – это корень (root), поэтому просто ставим «/».
Далее по тому же принципу создаем все разделы, что у меня,
для своп-раздела не забываем выбрать не файловую систему, а своп, тогда не будет вопроса про точку монтирования. Его размер обычно выбирается в полтора – два объема оперативной памяти. Два последних раздела называются sharedata и privatedata, просто на этом экране не хватило места для их полного отображения. Они планируются для создания общедоступных ресурсов, первый – для свободного доступа, второй – для определенного пользователя. Их размеры Вы можете выбрать в соответствии с возможностями диска и Вашими потребностями. Размер раздела «/usr» 10Гб нужен для компиляции ядра и установки портов, некоторые из них могут потребовать гигабайты места во время установки. Когда все указано, жмем кнопку «Q» и возвращаемся в меню. Теперь выберем дистрибутивы (distributions).
Выбираем 4 Developer,
так как в этом случае мы сразу получим весь набор портов и исходников. А то, что не будет игр – не страшно. По сути мы делаем сервер, а не геймерский комп. Возникает вопрос – на каком языке нам нужна документация по FreeBSD.
Я думаю, никакая, сразу жмем Exit. Он переспрашивает
– действительно ли нам нужна коллекция портов, отвечаем yes. Выходим из меню Distributions – Exit.
Возвратившись в основное меню установщика, выбираем пункт Media, то есть источник установки.
Отмечаем cd/dvd. И, наконец, последний пункт – применить Commit.
В следующем окошке подтверждаем,
что мы вменяемы и по собственному желанию замутили весь этот беспредел (yes). Установка началась.
Теперь можно ненадолго расслабиться.
После установки.
По завершении установки мы увидим такое сообщение: «Посетить главное меню для установки последних опций?»
Обязательно отвечаем YES, так как нам нужно сделать еще несколько очень важных настроек. Главное – пароль рута (rootpassword), так как без пароля администратора мы не сможем попасть в систему.
Придумываем пароль и вводим его, не обращая внимание на то, что никакие символы не отображаются.
Следующим шагом Usermanagement,
нам надо завести пользователя, который сможет входить в систему и использовать привилегии рута. В следующем меню выбираем «Добавить пользователя».
В появившемся окне
указываем login(у меня ggg), группу обязательно wheel, чтобы этот пользователь мог использовать привилегии администратора, и пароль. Все остальное можно оставить без изменения. Создав пользователя, возвращаемся в главное меню (Exit).
Теперь укажем кодировки консоли.
В пункте Font
выбираем IBM 866.
В Keymap – Russia KOI8-R.
Screenmap – KOI8-R to IBM 866.
Ttys – KOI8-R.
Напомню, что все это на первое время, потом все перепишем на UTF-8.
Настройка сети (Networking). Чтобы наш сервер стал сервером, он должен быть подключен к сети. Необходимо настроить сетевой интерфейс (или интерфейсы, если их несколько).
Первый вопрос – будем ли настраивать IP6.
Ответ – NO, для домашней сети это абсолютно ненужная вещь. Дальше – настраивать ли этот интерфейс автоматически по dhcp.
Конечно, нет. У сервера должен быть статический адрес. На следующей странице
указываем имя, домен (можно придумать любое имя, например, myhome.ru), шлюз – gateway (обычно ip-адрес роутера), сервер имен – nameserver (обычно он же, либо сервера, указанные провайдером), ip-адрес и маску выбираем соответственно Вашей сети. Нажимаем «ок», на следующий вопрос «включить это интерфейс сейчас?»
отвечаем yes. Опустимся в низ меню настройки сети networkingи включим ssh для безопасного доступа к нашему серверу по сети.
Теперь можно выходить.
Для выхода из главного меню
надо нажать enter на кнопке ExitInstall. «Вы действительно решили выйти?»
– конечно, yes. Теперь осталось только вынуть диск и нажать enter.
После перезагрузки мы увидим приглашение на вход в нашу freebsd.
Первые необходимые шаги.
Входим в систему как root, набираем это имя и пароль, записанный во время установки.
Проверим работоспособность сети:
pingwww.seczone.ru
Прерывание – ctrl+c.
Если ответов нет – или наш сайт лежит, или у Вас что-то с сетью. Для проверки и изменения настроек системы можно использовать утилиту sysinstall. Просто наберите это слово в командной строке.
Все дальнейшие установки будут происходить из сети.
Установка MidnightCommander.
Нам нужен файловый менеджер. Поставим его из портов. Переходим в каталог с менеджером
cd /usr/ports/misc/mc
Устанавливаем
make install clean
Все параметры оставляем по умолчанию. Просто жмем enter на все вопросы в процессе установки. Эта установка займет продолжительное время, так как будут подтянуты все зависимости и установлены необходимые библиотеки.
По завершении установки надо выйти
exit
и снова зайти в систему, в командной строке просто набираем
mc
и радуемся первому установленному приложению.
Теперь мы можем приступить к настройке нашей ОС. Сначала русификация в UTF-8. Редактируем файл /etc/login.conf, находим указанные строки и исправляем на то, что нам нужно:
russian|Russian Users Accounts:\
:charset=UTF-8:\
:lang=ru_RU.UTF-8:\
:tc=default:
После этого перестраиваем базу данных, набрав в командной строке команду
# cap_mkdb /etc/login.conf
Указываем для каждого пользователя локаль:
# pw usermod -n <username> -L russian
Например, для пользователя ggg:
# pw usermod -n ggg -L russian
Теперь при подключении через удаленный терминал Вы сможете использовать русский язык и будете видеть нормальные русские буквы. В консоли пока попробуем обойтись без него, позже перекомпилируем ядро с поддержкой UTF-8.
ВАЖНОЕ ПРИМЕЧАНИЕ: Поддержки UTF-8 на самом деле толковой нет, по крайней мере на 8.2 релизе. Поэтому русификация консоли не происходит, что тут ни делай, единственное, чего реально можно добиться - русификация локали и удаленного терминала. Действия, которые предлагаются в мануалах для русификации консоли я напишу, но они не работают, можете их пробовать, но на результат не рассчитывайте.
Пересборка ядра.
Компиляция ядра применяется для настройки системы на определенное оборудование, включение дополнительных возможностей, драйверов. Обычное ядро работает на большинстве оборудования, поэтому необходимости в пересборке ядра нет. Если Вы не чувствуете необходимости и сомневаетесь в результате, то просто пропустите эту главу. Мы это сделаем для исключения ненужных драйверов, включения некоторых параметров.
К тому, что написано здесь про компиляцию ядра, мне добавить особо нечего. Сначала прочитайте полностью эту статью из хэндбука и, особенно внимательно о конфигурации ядра, чтобы не сделать ошибок.
Итак, сначала надо разобраться с имеющимся оборудованием. Либо набираем
dmesg> dmesg.txt
и смотрим в получившемся файле, либо смотрим файл /var/log/messages:
Feb 12 23:26:42 BsdNAS kernel: pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on
Feb 12 23:26:42 BsdNAS kernel: pci0: <ACPI PCI bus> on pcib0
Feb 12 23:26:42 BsdNAS kernel: isab0: <PCI-ISA bridge> at device 1.0 on pci0
Feb 12 23:26:42 BsdNAS kernel: atapci0: <Intel PIIX4 UDMA33 controller> port 0x1
Feb 12 23:26:42 BsdNAS kernel: ata0: [ITHREAD]
Feb 12 23:26:42 BsdNAS kernel: em0: <Intel(R) PRO/1000 Legacy Network Connection
Feb 12 23:26:42 BsdNAS kernel: ohci0: <OHCI (generic) USB controller> mem 0xf080
Feb 12 23:26:42 BsdNAS kernel: usbus0: <OHCI (generic) USB controller> on ohci0
Красным цветом выделены названия устройств, которые необходимо оставить в конфигурационном файле, ибо они используются (на моем компе, у Вас другие могут быть). Остальное достаточно подробно в хэндбуке, Добавлю лишь, не трогайте scbus (SCSI bus) ни в коем случае, так как через это и usb устройства работают, и пункт SCSI Periferals лучше совсем не изменять, пусть эти устройства останутся. Также не трогаем псевдодевайсы и шины.
После всего добавляем поддержку UTF-8 в системе (напомню, что это движение пользы не приносит), для этого в файл конфигурации добавляем следующие строки:
options TEKEN_UTF8
options TEKEN_XTERM
Включаем в ядро PF (файерволл) cALTQ (управление очередями сетевых пакетов):
devicepf #включает поддержку межсетевого экрана ''Packet Filter''
devicepflog #псевдоустройство протоколирования трафика
devicepfsync #псевдоустройство изменения состояния
options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
options ALTQ_NOPCC # Required for SMP build
В итоге получится примерно следующее:
#
# GENERIC -- Generic kernel configuration file for FreeBSD/i386
#
# For more information on this file, please read the config(5) manual page,
# and/or the handbook section on Kernel Configuration Files:
#
# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ../../conf/NOTES and NOTES files.
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.519.2.12.2.1 2010/12/21 17:09:25 kensmith Exp $
cpu I686_CPU
ident GENERIC
# To statically compile in device wiring instead of /boot/device.hints
#hints "GENERIC.hints" # Default places to look for devices.
# Use the following to compile in values accessible to the kernel
# through getenv() (or kenv(1) in userland). The format of the file
# is 'variable=value', see kenv(1)
#
# env "GENERIC.env"
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
options SCHED_ULE # ULE scheduler
options PREEMPTION # Enable kernel thread preemption
options INET # InterNETworking
options INET6 # IPv6 communications protocols
options SCTP # Stream Control Transmission Protocol
options FFS # Berkeley Fast Filesystem
options SOFTUPDATES # Enable FFS soft updates support
options UFS_ACL # Support for access control lists
options UFS_DIRHASH # Improve performance on big directories
options UFS_GJOURNAL # Enable gjournal-based UFS journaling
options MD_ROOT # MD is a potential root device
options NFSCLIENT # Network Filesystem Client
options NFSSERVER # Network Filesystem Server
options NFSLOCKD # Network Lock Manager
options NFS_ROOT # NFS usable as /, requires NFSCLIENT
options MSDOSFS # MSDOS Filesystem
options CD9660 # ISO 9660 Filesystem
options PROCFS # Process filesystem (requires PSEUDOFS)
options PSEUDOFS # Pseudo-filesystem framework
options GEOM_PART_GPT # GUID Partition Tables.
options GEOM_LABEL # Provides labelization
options COMPAT_43TTY # BSD 4.3 TTY compat (sgtty)
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options COMPAT_FREEBSD6 # Compatible with FreeBSD6
options COMPAT_FREEBSD7 # Compatible with FreeBSD7
options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
options KTRACE # ktrace(1) support
options STACK # stack(9) support
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options P1003_1B_SEMAPHORES # POSIX-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed.
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4)
options AUDIT # Security event auditing
options MAC # TrustedBSD MAC Framework
options FLOWTABLE # per-cpu routing cache
#options KDTRACE_HOOKS # Kernel DTrace hooks
options INCLUDE_CONFIG_FILE # Include this file in kernel
options KDB # Kernel debugger related code
options KDB_TRACE # Print a stack trace for a panic
# To make an SMP kernel, the next two lines are needed
options SMP # Symmetric MultiProcessor Kernel
device apic # I/O APIC
# CPU frequency control
device cpufreq
# Bus support.
device acpi
device eisa
device pci
# Floppy drives
device fdc
# ATA and ATAPI devices
device ata
device atadisk # ATA disk drives
device ataraid # ATA RAID drives
device atapicd # ATAPI CDROM drives
device atapifd # ATAPI floppy drives
device atapist # ATAPI tape drives
options ATA_STATIC_ID # Static device numbering
# SCSI Controllers
#device ahb # EISA AHA1742 family
#device ahc # AHA2940 and onboard AIC7xxx devices
#options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~128k to driver.
#device ahd # AHA39320/29320 and onboard AIC79xx devices
#options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
# output. Adds ~215k to driver.
#device amd # AMD 53C974 (Tekram DC-390(T))
#device hptiop # Highpoint RocketRaid 3xxx series
#device isp # Qlogic family
#device ispfw # Firmware for QLogic HBAs- normally a module
#device mpt # LSI-Logic MPT-Fusion
#device ncr # NCR/Symbios Logic
#device sym # NCR/Symbios Logic (newer chipsets + those of `ncr')
#device trm # Tekram DC395U/UW/F DC315U adapters
#device adv # Advansys SCSI adapters
#device adw # Advansys wide SCSI adapters
#device aha # Adaptec 154x SCSI adapters
#device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device bt # Buslogic/Mylex MultiMaster SCSI adapters
#device ncv # NCR 53C500
#device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50
# SCSI peripherals
device scbus # SCSI bus (required for SCSI)
device ch # SCSI media changers
device da # Direct Access (disks)
device sa # Sequential Access (tape etc)
device cd # CD
device pass # Passthrough device (direct SCSI access)
device ses # SCSI Environmental Services (and SAF-TE)
# RAID controllers interfaced to the SCSI subsystem
#device amr # AMI MegaRAID
#device arcmsr # Areca SATA II RAID
#device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
#device ciss # Compaq Smart RAID 5*
#device dpt # DPT Smartcache III, IV - See NOTES for options
#device hptmv # Highpoint RocketRAID 182x
#device hptrr # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
#device iir # Intel Integrated RAID
#device ips # IBM (Adaptec) ServeRAID
#device mly # Mylex AcceleRAID/eXtremeRAID
#device twa # 3ware 9000 series PATA/SATA RAID
# RAID controllers
#device aac # Adaptec FSA RAID
#device aacp # SCSI passthrough for aac (requires CAM)
#device ida # Compaq Smart RAID
#device mfi # LSI MegaRAID SAS
#device mlx # Mylex DAC960 family
#device pst # Promise Supertrak SX6000
#device twe # 3ware ATA RAID
# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc # AT keyboard controller
device atkbd # AT keyboard
device psm # PS/2 mouse
device kbdmux # keyboard multiplexer
device vga # VGA video card driver
device splash # Splash screen and screen saver support
# syscons is the default console driver, resembling an SCO console
device sc
#device agp # support several AGP chipsets
# Power management support (see NOTES for more options)
#device apm
# Add suspend/resume support for the i8254.
device pmtimer
# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
#device cbb # cardbus (yenta) bridge
#device pccard # PC Card (16-bit) bus
#device cardbus # CardBus (32-bit) bus
# Serial (COM) ports
device uart # Generic UART driver
# Parallel port
device ppc
device ppbus # Parallel port bus (required)
device lpt # Printer
device plip # TCP/IP over parallel
device ppi # Parallel port interface device
#device vpo # Requires scbus and da
# If you've got a "dumb" serial or parallel PCI card that is
# supported by the puc(4) glue driver, uncomment the following
# line to enable it (connects to sio, uart and/or ppc drivers):
#device puc
# PCI Ethernet NICs.
#device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 Gigabit Ethernet Family
#device igb # Intel PRO/1000 PCIE Server Gigabit Family
#device ixgb # Intel PRO/10GbE Ethernet Card
#device le # AMD Am7900 LANCE and Am79C9xx PCnet
#device ti # Alteon Networks Tigon I/II gigabit Ethernet
#device txp # 3Com 3cR990 (``Typhoon'')
#device vx # 3Com 3c590, 3c595 (``Vortex'')
# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus # MII bus support
#device ae # Attansic/Atheros L2 FastEthernet
#device age # Attansic/Atheros L1 Gigabit Ethernet
#device alc # Atheros AR8131/AR8132 Ethernet
#device ale # Atheros AR8121/AR8113/AR8114 Ethernet
#device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet
#device bfe # Broadcom BCM440x 10/100 Ethernet
#device bge # Broadcom BCM570xx Gigabit Ethernet
#device dc # DEC/Intel 21143 and various workalikes
#device et # Agere ET1310 10/100/Gigabit Ethernet
#device fxp # Intel EtherExpress PRO/100B (82557, 82558)
#device jme # JMicron JMC250 Gigabit/JMC260 Fast Ethernet
#device lge # Level 1 LXT1001 gigabit Ethernet
#device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet
#device nfe # nVidia nForce MCP on-board Ethernet
#device nge # NatSemi DP83820 gigabit Ethernet
##device nve # nVidia nForce MCP on-board Ethernet Networking
#device pcn # AMD Am79C97x PCI 10/100 (precedence over 'le')
#device re # RealTek 8139C+/8169/8169S/8110S
#device rl # RealTek 8129/8139
#device sf # Adaptec AIC-6915 (``Starfire'')
#device sge # Silicon Integrated Systems SiS190/191
#device sis # Silicon Integrated Systems SiS 900/SiS 7016
#device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet
#device ste # Sundance ST201 (D-Link DFE-550TX)
#device stge # Sundance/Tamarack TC9021 gigabit Ethernet
#device tl # Texas Instruments ThunderLAN
#device tx # SMC EtherPower II (83c170 ``EPIC'')
#device vge # VIA VT612x gigabit Ethernet
#device vr # VIA Rhine, Rhine II
#device wb # Winbond W89C840F
#device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
# ISA Ethernet NICs. pccard NICs included.
#device cs # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
#device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards
#device ex # Intel EtherExpress Pro/10 and Pro/10+
#device ep # Etherlink III based cards
#device fe # Fujitsu MB8696x based cards
#device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc.
#device sn # SMC's 9000 series of Ethernet chips
#device xe # Xircom pccard Ethernet
# Wireless NIC cards
#device wlan # 802.11 support
#options IEEE80211_DEBUG # enable debug msgs
#options IEEE80211_AMPDU_AGE # age frames in AMPDU reorder q's
#options IEEE80211_SUPPORT_MESH # enable 802.11s draft support
#device wlan_wep # 802.11 WEP support
#device wlan_ccmp # 802.11 CCMP support
#device wlan_tkip # 802.11 TKIP support
#device wlan_amrr # AMRR transmit rate control algorithm
#device an # Aironet 4500/4800 802.11 wireless NICs.
#device ath # Atheros pci/cardbus NIC's
#device ath_hal # pci/cardbus chip support
#options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors
#device ath_rate_sample # SampleRate tx rate control for ath
#device ral # Ralink Technology RT2500 wireless NICs.
#device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device wl # Older non 802.11 Wavelan wireless NIC.
# Pseudo devices.
device loop # Network loopback
device random # Entropy device
device ether # Ethernet support
device vlan # 802.1Q VLAN support
device tun # Packet tunnel.
device pty # BSD-style compatibility pseudo ttys
device md # Memory "disks"
device gif # IPv6 and IPv4 tunneling
device faith # IPv6-to-IPv4 relaying (translation)
device firmware # firmware assist module
# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device bpf # Berkeley packet filter
# USB support
options USB_DEBUG # enable debug msgs
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device ehci # EHCI PCI->USB interface (USB 2.0)
device usb # USB Bus (required)
#device udbp # USB Double Bulk Pipe devices
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device urio # Diamond Rio 500 MP3 player
# USB Serial devices
#device u3g # USB-based 3G modems (Option, Huawei, Sierra)
device uark # Technologies ARK3116 based serial adapters
device ubsa # Belkin F5U103 and compatible serial adapters
device uftdi # For FTDI usb serial adapters
#device uipaq # Some WinCE based devices
#device uplcom # Prolific PL-2303 serial adapters
#device uslcom # SI Labs CP2101/CP2102 serial adapters
#device uvisor # Visor and Palm devices
device uvscom # USB serial support for DDI pocket's PHS
# USB Ethernet, requires miibus
#device aue # ADMtek USB Ethernet
#device axe # ASIX Electronics USB Ethernet
#device cdce # Generic USB over Ethernet
#device cue # CATC USB Ethernet
#device kue # Kawasaki LSI USB Ethernet
#device rue # RealTek RTL8150 USB Ethernet
#device udav # Davicom DM9601E USB
# USB Wireless
#device rum # Ralink Technology RT2501USB wireless NICs
#device uath # Atheros AR5523 wireless NICs
#device ural # Ralink Technology RT2500USB wireless NICs
#device zyd # ZyDAS zb1211/zb1211b wireless NICs
# FireWire support
device firewire # FireWire bus code
#device sbp # SCSI over FireWire (Requires scbus and da)
#device fwe # Ethernet over FireWire (non-standard!)
#device fwip # IP over FireWire (RFC 2734,3146)
#device dcons # Dumb console driver
#device dcons_crom # Configuration ROM for dcons
#Включаем поддержку UTF-8
options TEKEN_UTF8
options TEKEN_XTERM
#Включаем pf
device pf
device pflog
device pfsync
#Поддержка ALTQ
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_PRIQ
options ALTQ_NOPCC
Как видите, ненужные строки я не удалил, а только закомментарил. На всякий случай.
Особенно критично угадать с типом процессора и с жестким диском. Ошибка в их описании приведет к невозможности загрузки. С первого раза компиляция удается очень редко. Поэтому внимательно прочитайте последнюю главу хэндбука и ,помолясь, приступайте к сборке ядра.
Если Вы все сделали правильно, то после компиляции, установки и перезагрузки Ваша система загрузится уже в новом качестве. С меньшим ядром и за меньшее время.
Закончим настройку кодировки UTF-8. Согласно разным руководствам, блогам и форумам для этого надо добавить следующие четыре строки
setenv LANG ru_RU.UTF-8
setenv LC_CTYPE ru_RU.UTF-8
setenv LC_COLLATE POSIX
setenv LC_ALL ru_RU.UTF-8
то ли в файл /etc/csh.cshrc, то ли в /etc/csh.login, то ли в .cshrc в профиле пользователя. Мне это не помогло ни фига.
Установка mySQLи Apache.
Как говорил Б.Н. Ельцин, «я долго думал, страдал», но все же решил рекомендовать установку этого всего из портов. Это может быть долго, но все зависимости будут сконфигурированы и установлены.
Итак для установки mysql
cd /usr/ports/databases/mysql55-server
make install clean
Начинаем отвечать на вопросы установщика:
Включаем SSL
На второй вопрос (про mysql-client) отвечаем так же.
После установки редактируем файл /etc/rc.conf, чтобы разрешить запуск сервера:
mysql_enabled = “YES”
Далее копируем конфигурационный файл для больших баз (вдруг у Вас огромная медиа-коллекция)
cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf
запускаем сервер:
service mysql-server start
Создаем пароль администратора базы данных:
/usr/local/bin/mysqladmin -u root password 'mypassword'
Где mypassword – наш пароль.
Можем переходить к установке Апача.
Переходим в папку с портом:
cd /usr/ports/www/apache22
Запускаем компиляцию и установку
make install clean
Параметры для Apache оставляем по умолчанию, то есть просто нажимаем «ок», ничего не меняя в крестиках. После установки заходим в уже знакомый /etc/rc.confи добавляем строку:
#apache22_enable=”YES”
запускаем:
#service apache22 start
Пробуем зайти на наш сервер, указав в браузере его ip-адрес. Если Вы все сделали как и я, увидите надпись «It works» (Он работает, по-аглицки).
Едем дальше, php. Переходим в папку:
#cd /usr/ports/lang/php52
#make install clean
В конфигураторе включаем дополнительно к имеющимся buildApachemodule. По окончании не расслабляемся, нам нужны еще и расширения:
#cd /usr/ports/lang/php52-extentions
#makeinstallclean
В конфигураторе добавляем поддержку MySQL.
После установки проверяем /usr/local/etc/apache22/httpd.confна наличие следующих строк (если их нет - добавляем):
LoadModule php5_module libexec/apache22/libphp5.so
DirectoryIndex index.html index.shtml index.php index.htm
AddType application/x-httpd-php .phtml .php
AddType application/x-httpd-php-source .phps
Эти строки располагаются в файле не подряд, каждая в своем модуле, по смыслу увидите.
Для проверки функционирования php каталоге /usr/local/www/apache22/dataсоздадим файл index.phpсо следующим содержимым:
<?php
echo php_info();
?>
Перезапускаем апача:
#serviceapache22 restart
после этого в браузере набираем
http://<ip-адрес>/index.php
Мы должны увидеть информацию о сервере и всех php-расширениях.
Теперь можно установить phpmyadmin – веб-консоль управления mysql сервером.
#cd /usr/ports/databases/phpmyadmin
#make install clean
По завершении процесса необходимо подправить конфигурационный файл веб-сервера /usr/local/etc/apache22/httpd.conf, добавив следующие строки (опять же где-нибудь рядом с подобными):
Alias /pma/ "/usr/local/www/phpMyAdmin/"
<Directory "/usr/local/www/phpMyAdmin/">
Options none
AllowOverride Limit
Order Allow, Deny
Allow from all
</Directory>
Перезапускаем апача:
#service apache22 restart
после этого в браузере набираем
http://<ip-адрес>/pma/
В появившемся окне вводим имя пользователя root и пароль суперпользователя MySQL, который мы придумали ранее.
Можно переходить к
Установка SAMBA.
#cd /usr/ports/net/samba35
#make install clean
В конфигураторе добавим веб-интерфейс SWAT, остальное не меняем.
После установки редактируем файл /usr/local/etc/smb.conf, он должен содержать примерно следующее:
#======================= Global Settings =====================================
[global]
workgroup = WORKGROUP
public=YES
guest ok=YES
null passwords=YES
map to guest = Bad User
# security = user
hosts allow = 192.168.1.
# load printers = yes
guest account = nobody
log file = /var/log/samba/log.%m
max log size = 50
# Charset settings
display charset = utf-8
unix charset = utf-8
dos charset = cp866
#============================ Share Definitions ==============================
[public]
path = /sharedata
guest ok = yes
browsable = yes
public = yes
only guest = yes
writable = yes
create mask = 0777
force create mode = 0777
printable = no
[private]
path = /privatedata
valid users = ggg
browsable = yes
public = yes
writable = yes
create mask = 0755
force create mode = 0755
printable = no
Доступ к ресурсу public имеют все, а доступ к private только пользователь ggg.
В /etc/rc.conf добавим строку samba_enable=”YES”
Можно запускать самбу.
#service samba start
Посмотрим сетевое окружение
Конечно, удобнее настраивать через графический веб-интерфейс, но для того, чтобы заработал SWAT, необходимо выполнить следующие настройки:
1) В файле /etc/inetd.conf раскомментарить строку с описанием сервиса swat (последняя строка)
2) В файле /etc/rc.conf добавить строку inetd_enable=”YES”
3) Запустить суперсервер inetd
#service inetd start
Теперь можно заходить через браузер по адресу http://<ip-адрес>:901
Установка mediatomb
#cd /usr/ports/net/mediatomb
#make install clean
Все настройки оставляем по умолчанию, когда спросит про поддержку UTF-8, поддержку национальных языков (NLS)- отмечаем крестиком.
Вот мой конфиг от медиатомба. Можете его целиком взять. Изменено имя BsdMedia, база данных используется MySQL, и включены DLNAзаголовки для телевизоров и другой техники:
<?xml version="1.0" encoding="UTF-8"?>
<config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/2 http://mediatomb.cc/config/2.xsd">
<server>
<ui enabled="yes" show-tooltips="yes">
<accounts enabled="no" session-timeout="30">
<account user="mediatomb" password="mediatomb"/>
</accounts>
</ui>
<name>BsdMedia</name>
<udn>uuid:3536604f-8189-49a7-b3ad-9c6d091bc5dc</udn>
<home>/var/mediatomb</home>
<webroot>/usr/local/share/mediatomb/web</webroot>
<storage caching="yes">
<sqlite3 enabled="no">
<database-file>mediatomb.db</database-file>
</sqlite3>
<mysql enabled="yes">
<host>localhost</host>
<username>mediatomb</username>
<database>mediatomb</database>
</mysql>
</storage>
<protocolInfo extend="yes"/>
<!-- For PS3 support change to "yes" -->
<!--
Uncomment the lines below to get rid of jerky avi playback on the
DSM320 or to enable subtitles support on the DSM units
-->
<custom-http-headers>
<add header="transferMode.dlna.org: Streaming"/>
<add header="contentFeatures.dlna.org: DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=0170000000000000000" />
</custom-http-headers>
<manufacturerURL>redsonic.com</manufacturerURL>
<modelNumber>105</modelNumber>
<!-- Uncomment the line below if you have a Telegent TG100 -->
<!--
<upnp-string-limit>101</upnp-string-limit>
-->
<extended-runtime-options>
<ffmpegthumbnailer enabled="yes">
<thumbnail-size>128</thumbnail-size>
<seek-percentage>5</seek-percentage>
<filmstrip-overlay>yes</filmstrip-overlay>
<workaround-bugs>no</workaround-bugs>
</ffmpegthumbnailer>
<mark-played-items enabled="no" suppress-cds-updates="yes">
<string mode="prepend">*</string>
</mark-played-items>
</extended-runtime-options>
</server>
<import hidden-files="no">
<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>UTF-8</metadata-charset>
<scripting script-charset="UTF-8">
<common-script>/usr/local/share/mediatomb/js/common.js</common-script>
<playlist-script>/usr/local/share/mediatomb/js/playlists.js</playlist-script>
<virtual-layout type="builtin">
<import-script>/usr/local/share/mediatomb/js/import.js</import-script>
</virtual-layout>
</scripting>
<mappings>
<extension-mimetype ignore-unknown="no">
<map from="mp3" to="audio/mpeg"/>
<map from="ogg" to="application/ogg"/>
<map from="asf" to="video/x-ms-asf"/>
<map from="asx" to="video/x-ms-asf"/>
<map from="wma" to="audio/x-ms-wma"/>
<map from="wax" to="audio/x-ms-wax"/>
<map from="wmv" to="video/x-ms-wmv"/>
<map from="wvx" to="video/x-ms-wvx"/>
<map from="wm" to="video/x-ms-wm"/>
<map from="wmx" to="video/x-ms-wmx"/>
<map from="m3u" to="audio/x-mpegurl"/>
<map from="pls" to="audio/x-scpls"/>
<map from="flv" to="video/x-flv"/>
<!-- <map from="vob" to="video/x-vob"/> -->
<map from="mkv" to="video/x-mkv"/>
<!-- Uncomment the line below for PS3 divx support -->
<map from="avi" to="video/divx"/>
<!-- Uncomment the line below for D-Link DSM / ZyXEL DMA-1000 -->
<map from="avi" to="video/avi"/>
<map from="avi" to="video/mpeg"/>
<!-- Uncomment the line below for PS3 divx support -->
<map from="mpg" to="video/mpeg"/>
<map from="vob" to="video/mpeg"/>
<map from="mp4" to="video/avc"/>
<!-- ORIGINAL <map from="mp4" to="video/mp4"/> -->
<map from="m4v" to="video/mp4"/>
<map from="m4a" to="audio/mp4"/>
</extension-mimetype>
<mimetype-upnpclass>
<map from="audio/*" to="object.item.audioItem.musicTrack"/>
<map from="video/*" to="object.item.videoItem"/>
<map from="image/*" to="object.item.imageItem"/>
</mimetype-upnpclass>
<mimetype-contenttype>
<treat mimetype="audio/mpeg" as="mp3"/>
<treat mimetype="video/mpeg" as="avi" />
<treat mimetype="video/x-divx" as="avi"/>
<treat mimetype="application/ogg" as="ogg"/>
<treat mimetype="audio/x-flac" as="flac"/>
<treat mimetype="image/jpeg" as="jpg"/>
<treat mimetype="audio/x-mpegurl" as="playlist"/>
<treat mimetype="audio/x-scpls" as="playlist"/>
<treat mimetype="audio/x-wav" as="pcm"/>
<treat mimetype="audio/L16" as="pcm"/>
<treat mimetype="video/x-msvideo" as="avi"/>
<treat mimetype="video/mp4" as="mp4"/>
<treat mimetype="audio/mp4" as="mp4"/>
<!-- <treat mimetype="application/x-iso9660" as="dvd"/>
<treat mimetype="application/x-iso9660-image" as="dvd"/>-->
</mimetype-contenttype>
</mappings>
<online-content>
<!-- Make sure to setup a transcoding profile for flv -->
<YouTube enabled="no" refresh="28800" update-at-start="no" purge-after="604800" racy-content="exclude" format="flv" hd="no">
<favorites user="mediatomb"/>
<standardfeed feed="most_viewed" time-range="today"/>
<playlists user="mediatomb"/>
<uploads user="mediatomb"/>
<standardfeed feed="recently_featured" time-range="today"/>
</YouTube>
<Weborama enabled="no" refresh="28800" update-at-start="no">
<playlist name="Active" type="playlist" mood="active"/>
<playlist name="Metal" type="playlist">
<filter>
<genres>metal</genres>
</filter>
</playlist>
</Weborama>
<AppleTrailers enabled="no" refresh="43200" update-at-start="no" resolution="640"/>
</online-content>
</import>
<transcoding enabled="no">
<mimetype-profile-mappings>
<transcode mimetype="video/x-flv" using="vlcmpeg"/>
<transcode mimetype="application/ogg" using="vlcmpeg"/>
<transcode mimetype="application/ogg" using="oggflac2raw"/>
<transcode mimetype="audio/x-flac" using="oggflac2raw"/>
</mimetype-profile-mappings>
<profiles>
<profile name="oggflac2raw" enabled="no" type="external">
<mimetype>audio/L16</mimetype>
<accept-url>no</accept-url>
<first-resource>yes</first-resource>
<accept-ogg-theora>no</accept-ogg-theora>
<agent command="ogg123" arguments="-d raw -o byteorder:big -f %out %in"/>
<buffer size="1048576" chunk-size="131072" fill-size="262144"/>
</profile>
<profile name="vlcmpeg" enabled="no" type="external">
<mimetype>video/mpeg</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<accept-ogg-theora>yes</accept-ogg-theora>
<agent command="vlc" arguments="-I dummy %in --sout #transcode{venc=ffmpeg,vcodec=mp1v,vb=4096,fps=25,aenc=ffmpeg,acodec=mpga,ab=192,samplerate=44100,channels=2}:standard{access=file,mux=ps,dst=%out} vlc:quit"/>
<!-- ORIGINAL <buffer size="14400000" chunk-size="512000" fill-size="120000"/> -->
<buffer size="2978728105" chunk-size="512000" fill-size="120000"/>
</profile>
</profiles>
</transcoding>
</config>
Надо создать базу данных в MySQL. Через веб-интерфейс это будет просто
http://<ip-адрес>/pma/
В появившемся окне вводим имя пользователя root и пароль суперпользователя MySQL. Создаем базу данных.
Добавляем пользователя на вкладке привилегии.
Указываем его данные как на рис и нажимаем ок.
Теперь создадим таблицы в базе. В терминале
#mysql –u=root –p=<вашпароль> -D=mediatomb < /usr/local/share/mediatomb/mysql.sql.
Разрешаем медиатомб в /etc/rc.conf, добавив строку
mediatomb_enable=”YES”
Теперь можно стартовать сервис
#servicemediatombstart
Теперь можно заходить через браузер по адресу http://<ip-адрес>:49152 и добавлять папки с файлами, предоставляемыми через медиасервер.
Установка transmission.
Нам, конечно, нужен торрент-клиент для закачки всякой ерунды.
#cd /usr/ports/net-p2p/transmission
#make install clean
У transmission интересное отношение к конфигурационному файлу. При остановке сервиса файл записывается с теми значениями, с которыми сервис был запущен. То есть, на работающем сервисе бесполезно редактировать конфиг, при перезапуске он перепишется на старые значения. Перед редактированием надо остановить сервис, а запускать только по окончании изменений. Содержимое файла usr/local/etc/transmission/home/settings.json:
{
"alt-speed-down": 50,
"alt-speed-enabled": false,
"alt-speed-time-begin": 540,
"alt-speed-time-day": 127,
"alt-speed-time-enabled": false,
"alt-speed-time-end": 1020,
"alt-speed-up": 50,
"bind-address-ipv4": "0.0.0.0",
"bind-address-ipv6": "::",
"blocklist-enabled": false,
"blocklist-url": "http://www.example.com/blocklist",
"cache-size-mb": 2,
"dht-enabled": true,
"download-dir": "/sharedata/downloads",
"encryption": 1,
"idle-seeding-limit": 30,
"idle-seeding-limit-enabled": false,
"incomplete-dir": "//Downloads",
"incomplete-dir-enabled": false,
"lazy-bitfield-enabled": true,
"lpd-enabled": false,
"message-level": 2,
"open-file-limit": 32,
"peer-limit-global": 240,
"peer-limit-per-torrent": 60,
"peer-port": 51413,
"peer-port-random-high": 65535,
"peer-port-random-low": 49152,
"peer-port-random-on-start": false,
"peer-socket-tos": 0,
"pex-enabled": true,
"port-forwarding-enabled": true,
"preallocation": 1,
"ratio-limit": 2,
"ratio-limit-enabled": false,
"rename-partial-files": true,
"rpc-authentication-required": false,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-password": "{f68a77e053fea43ec04d233424524b941ff67d8eyOz0gZyV",
"rpc-port": 9091,
"rpc-username": "",
"rpc-whitelist": "192.168.1.0",
"rpc-whitelist-enabled": false,
"script-torrent-done-enabled": false,
"script-torrent-done-filename": "",
"speed-limit-down": 50,
"speed-limit-down-enabled": false,
"speed-limit-up": 40,
"speed-limit-up-enabled": true,
"start-added-torrents": true,
"trash-original-torrent-files": false,
"umask": 18,
"upload-slots-per-torrent": 14,
"watch-dir": "/sharedata/torrents",
"watch-dir-enabled": true
}
Все очень понятно, обращаю Ваше внимание, что надо создать каталоги
downloadsи torrentsна серевом ресурсе public. В папку torrents Вы будете подкидывать торрент-файлы, которые трансмишн будет подхватывать и загружать в папку downloads.
Разрешаем торрент-клиент в /etc/rc.conf, добавив строку
transmission_enable=”YES”
Теперь можно стартовать сервис
#servicetransmissionstart
И заходить на него через веб-интерфейс по адресу http://<ip-адрес>:9091
Вот и вся функциональность. Теперь настроим файервол.
Настройка pf.
В каталоге /etc создадим файл pf.confсо следующим содержимым:
$ cat pf.conf
#Самодельный конфиг для pf.
# Определим переменные
LAN="192.168.1.0/24" #Наша локалка, которой мы будем доверять.
nif="em0" #интерфейс один
serall = "{ 22 80 137 138 139 901 1900 9091 49152 51413 }" #services allowed
# 22 ssh
# 80 http
# 137:139 samba
# 901 swat
# 1900 mediatomb
# 9091 transmission web
# 49152 mediatomb web
# 51413 transmission
set block-policy drop
set skip on lo0
scrub in all
altq on $nif cbq bandwidth 99980Kb queue { qinner, qouter } #наружу и внутрь
queue qouter bandwidth 1980Kb priority 0 { qp2p, qoall } #торрент и остальные
queue qp2p bandwidth 95% priority 7 cbq (borrow)
queue qoall bandwidth 5% priority 3 cbq (red)
queue qinner bandwidth 98000Kb priority 1 { qmed, qhttp, qssh, qsamba, qiall }
queue qmed bandwidth 20% priority 3 cbq (borrow)
queue qhttp bandwidth 5% priority 5 cbq (borrow)
queue qsamba bandwidth 65% priority 5 cbq (default borrow)
queue qiall bandwidth 5% priority 5 cbq (borrow)
queue qssh bandwidth 5% priority 1 cbq (red)
antispoof log quick for { lo0, $nif }
block in on $nif # все входящие заблокировать
block in on $nif from any to 240.0.0.0/4
pass in on $nif inet proto icmp all
#открытые порты
pass in on $nif inet proto { tcp,udp } from any to any port $serall flags S/SA keep state
#in ALTQ
pass in on $nif inet proto { tcp,udp } from $LAN to $nif port 22 queue qssh
pass in on $nif inet proto { tcp,udp } from $LAN to $nif port { 80, 9091, 49152 } queue qhttp
pass in on $nif inet proto { tcp,udp } from any to $nif port 53 queue qiall
pass in on $nif inet proto { tcp,udp } from any to $nif port 51413 queue qp2p
pass in on $nif inet proto { tcp,udp } from $LAN to $nif port 1900 queue qmed
pass in on $nif inet proto { tcp,udp } from $LAN to any port 137:139 queue qsamba
#out ALTQ
pass out on $nif inet proto { tcp,udp } from $nif to $LAN port 22 queue qssh
pass out on $nif inet proto { tcp,udp } from $nif to $LAN port 1900 queue qmed
pass out on $nif inet proto { tcp,udp } from $nif to any port 80 queue qhttp
pass out on $nif inet proto { tcp,udp } from $nif to any port 53 queue qoall
pass out on $nif inet proto { tcp,udp } from $nif to any port 51413 queue qp2p
pass out on $nif inet proto { tcp,udp } from $nif to $LAN port 137:139 queue qsamba
pass out on $nif queue qoall
#Разрешаем открытые порты на внутр. интерфейсе
pass in on $nif inet proto { tcp,udp } from $LAN to $LAN port 445 queue qsamba #microsoft-ds
В файле rc.confдобавляем следующие строчки
pf_enable=”YES”
pflog_enable=”YES”
И запускаем pf
#service pf start
#servicepflogstart
Посмотреть статистику по очередям
#pfctl –vvsq
Посмотреть статистику по интерфейсам
#pfctl–sI –vv
Или (на интерфейсе em0)
#pfctl–sI –vv – i em0
Послесловие.
Сначала эта статья планировалась как инструкция по самостоятельной сборке сетевого хранилища. Однако, обзрев результат, я понял, что получилась статья "Не делай этого, друг!!!"
Данная затея может занять Вас на пару дней, потребует все же кое-каких знаний о nix-ах и командных строках. Если Вы новичок, то имеете все шансы впасть в депрессию. В консоли так и не увидим русских букв, их можно увидеть только через putty или какой-нибудь еще удаленный терминал с другой машины. Да, после выполнения всех указанных настроек наш NAS будет работать неограниченно долго, но не каждый сможет дойти до конца. У меня - работает, и именно на FreeBSD. А Другу я бы порекомендовал приглядеться к Ubuntu Server (См. статью NAS на Ubuntu Server 11)
Источники:
http://paix.org.ua/freebsd/ru_utf8.html
http://habrahabr.ru/blogs/bsdelniki/64748/
http://www.freebsd.org/doc/ru/books/handbook/kernelconfig-building.html
http://www.freebsd.org/doc/ru/books/handbook/kernelconfig-config.html
http://www.freebsd.org/doc/ru/books/handbook/firewalls-pf.html
http://www.unix.ck.ua/content/nastroika-firewall-nataltq-pf