FreeBSD: установка и настройки
Работа над FreeBSD началась в 1993 году. FreeBSD, как и ядро Linux,
разрабатывается группой добровольцев, но в отличие от Linux - FreeBSD не просто
ядро, а цельная операционная система. Значительную часть программ, однако,
FreeBSD разделяет с Linux: XFree86, GNOME, KDE и т. д. Замечательная
черта FreeBSD - система "портов" (переносимых приложений). Входящие в набор "портов"
программы устанавливаются из исходных текстов, при необходимости загружаемых из интернета
без участия пользователя, причем зависимости между пакетами разрешаются
автоматически.
За: надежность; удобство установки новых версий программ; легкость
управления системой через текстовые файлы; быстро и просто собираемое ядро.
Против: долгая установка портов; отсутствие некоторых программ,
доступных под Linux.
|
|
Сказать о FreeBSD можно только хорошее. У нее замечательный способ
управления пакетами, позволяющий как использование уже скомпилированных
программ, так и сборку из исходных текстов, а при необходимости - загрузку из
интернета и тех, и других, причем с учетом всех зависимостей. FreeBSD быстро
работает (время загрузки, например, у нее заметно меньше, чем у RedHat Linux и
Windows 2000, несколько меньше, чем у Slackware, но всё-таки больше, чем у
примитивной Windows ME). Поведение FreeBSD определяется буквально двумя-тремя
файлами настроек (/etc/rc.conf, /etc/ppp/ppp.conf, /etc/ipfw.rules...) - это
очень удобно. А сборка ядра FreeBSD - просто сказка, особенно после фильма ужасов, известного
под названием "Компиляция ядра Linux". ;-) >К сожалению, FreeBSD остается в стороне от внимания
публики, обращенного, благодаря рекламной шумихе, в основном на Linux. А жаль!
В этой заметке описана установка FreeBSD на одном диске с MS Windows. Нечто
подобное, и с большими подробностями, есть на сайте www.freebsddiary.org. Я
просто описываю свой опыт. Описываемая версия системы - FreeBSD 4.7. Замечания
об установке и настройках версии 4.8 смотрите ниже.
Установка:
- Установка
- Настройка доступа к интернету через ppp
- Обновление дерева "портов"
- Поддержка русского языка
- Пользовательские настройки
- Создание нового ядра
- Настройка сети
После установки:
- Подключение дисков Windows
- Виртуальные серверы в Apache
- Сохрание системы на CD
- Установка принтера
Печать по-русски с помощью lpr
- Недостающие программы
- Установка и настройка teTeX
- Общий доступ к интернету через FreeBSD
- Язык сообщений GNOME2
- Поддержка мыши с прокруткой в X Window
- Автоматическое управление питанием (APM)
- Установка уровней громкости при загрузке
- Передача параметров configure при установке программ из "портов"
- Просмотр samba-серверов в окне Nautilus
Настройки служб:
- SAMBA для ленивых
- Кэширующий сервер имен для ленивых
Дополнения:
- Заметки об установке FreeBSD 4.8
- FreeBSD 4.10
- Дополнительные возможности системы портов
Установка
1. На 20-гигабайтном
диске Windows занимают 5 Gb. Остальное место отдаем BSD. На свободном месте
создаем раздел (slice) ad0s2. Раздел ad0s1 помечен как DOS. Теперь приказываем
установщику автоматически распределить место в разделе ad0s2 для BSD.
Получается
ad0s2a /
ad0s2b swap
ad0s2e /var
ad0s2f /tmp
ad0s2g /usr
Каталог /home, кстати, будет символической ссылкой на /usr/home. Для
20-гигабайтного диска размер /usr оказался 14 Gb. Будем надеяться, что мы там
поместимся. :-)
При выходе из редактора разделов просим установить boot manager. Кнопке F1 будет
соответствовать DOS (так BSD распознает Windows 2000 с файловой системой FAT32),
F2 - сама BSD.
Не забываем поставить дерево "портов" и исходные тексты (я выбрал
вид установки, названный X-Kern Developer, т.е. средства разработки программ
для X и исходные коды ядра). Исходные тексты ядра понадобятся для его
перекомпиляции. Нужно также указать правильную раскладку клавиатуры (Russian),
консольный шрифт (CP866) и "карту преобразования" для консольного
шрифта (CP866 к KOI8-R).
2. Восстанавливаем из запасной копии или
редактируем файл /etc/ppp/ppp.conf. Редактирование состоит в добавлении записей
для провайдеров и некоторых настроек. Вот как выглядит мой нынешний файл
ppp.conf (лишние комментарии и пароли :-) удалены, номера строк добавлены):
1 default:
2 nat enable yes
3 allow users root tim
4 set log Phase Chat LCP IPCP CCP tun command
5 ident user-ppp VERSION (built COMPILATIONDATE)
6 set device /dev/cuaa1
7 set speed 115200
8 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
9 \"\" AT OK-AT-OK ATE1Q0 OK ATM0 OK \\dATDP\\T TIMEOUT 45 CONNECT"
10 set timeout 600 # 3 minute idle timer (the default)
11 enable dns # request DNS info (for resolv.conf)
12 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255
13 add default HISADDR # Add a (sticky) default route
14 sinor:
15 set phone 8w180
16 set authname ***
17 set authkey ***
18
19 rol:
20 set phone 119060
21 set authname ***
22 set authkey ***
В отделе default задаются настройки, общие для всех соединений с интернетом.
Строка 1 задает преобразование сетевых адресов (на случай, если машина
используется в качестве шлюза в интернет). Строка 2 перечисляет пользователей,
которым разрешен запуск ppp. (И которые должны быть членами группы network!) В
случае запуска ppp кем-то другим, кроме root, придется изменить права доступа к
файлу /etc/resolv.conf. Обычно это rw-r--r--, мне пришлось поставить rw-rw-rw-.
Строки 12 и 13, насколько я понимаю, также относятся к автоматическому
получению IP адреса - задается некий условный адрес, который затем меняется на
полученный от провайдера. Отделы со строк 14 и 19 описывают отдельных
провайдеров. Все настройки, кроме телефона, имени пользователя и пароля,
наследуются ими из отдела default.
Подробнее - man ppp и /usr/share/examples/ppp/ppp.conf.sample.
3. Теперь проверяем, установлена ли программа
cvsup (по меньшей мере, в версии 4.8 она входит в набор готовых пакетов):
pkg_info | grep cvsup
Если cvsup установлена, начнем обновление "портов". (Порты, как я
уже упоминал, это перенесенные на FreeBSD программы, исходно разработанные,
может быть, в других версиях UNIX.) Находим в /usr/share/examples/cvsup файл
ports-supfile, копируем куда-нибудь и исправляем. Главное - указать
действительный сервер обновлений, например, cvsup{1|2|3|4}.freebsd.org.
Обновлять будем всё дерево портов, хотя можно и отдельные его части (для этого
нужно закомментировать одни строки файла и раскомментировать другие). Теперь
снова выходим в интернет и вызываем
/usr/local/bin/cvsup ports-supfile
(указав именно наш, отредактированный файл). Начинается обновление -
довольно долгое дело...
4. Теперь займемся настройкой системы на
работу с русским языком. Для этого нужно:
а) в файле /etc/ttys исправить все вхождения слова cons25 на cons25r. Это особый
тип терминала для работы с текстом в KOI8-R.
б) настроим запись root. Запускаем vipw, в 5-м поле учетной записи root
вписываем "russian" (или делаем то же самое через chpass). Когда мы в следующий
раз войдем в систему от имени root, переменная $LANG будет равна ru_RU.KOI8-R,
сообщения будут на русском и проч.
5. Дальнейшее будет несколько хаотично.
Сделаем еще несколько полезных вещей. Во-первых, проверим, не забыли ли мы
поставить оболочку bash. Если
pkg_info | grep bash
ничего не выдает, запускаем /stand/sysinstall и ставим bash из пакетов.
Во-вторых, переводим root'а на использование bash вместо csh: снова запускаем
vipw и последнее поле в записи root меняем на /usr/local/bin/bash (можно
использовать chpass вместо прямой работы с vipw). В-третьих, добавим
пользователя для себя самого - не работать же от имени root! Скрипт adduser
вначале спросит о настройках по умолчанию для всех будущих пользователей.
Указываем в качестве login class "russian", в качестве оболочки "bash" и
переходим к собственно добавлению пользователя. На вопрос о том, в какие группы
принять пользователя "tim", отвечаем:
wheel network operator
Группа wheel - ради пользования командой su; network - ради работы с ppp;
operator - ради команды shutdown. Последнее необязательно, если мы собираемся
использовать GNOME.
7. Теперь можно заняться ядром системы.
Перекомпиляция нужна, чтобы выбросить из него поддержку ненужного и добавить
возможность работы с нужным. В "нужное" в моем случае попадает, например,
звуковая карта, файловые системы ext2fs, smbfs и кое-что еще по мелочам.
Описание этого в подробностях есть на странице www.lasource.r2.ru/os/unix/kernel_freebsd.html. Схема
такова: а) есть два файла настроек ядра: GENERIC (универсальный) и LINT
(полный); б) копируем универсальные настройки ядра в новый файл, например,
TEST; б) удаляем из созданного файла ненужное, оставшееся от файла GENERIC, и
переносим в него нужное, взятое из файла LINT. Последний хорошо комментирован,
разобраться в нем нетрудно.
В моем случае правка ядра свелась к: удалению устройств SCSI, RAID и PCMCIA;
добавлению ряда новых условий (options) и устройств (devices). Ниже включается
поддержка файловой системы ext2fs (для работы с разделами Linux), межсетевого
экрана, Samb'ы (для работы с windows-машинами в локальной сети), устройства pcm
(поддержка звука), apm0 (управление питанием)...
###ADDED OPTIONS###
options EXT2FS
options _KPOSIX_VERSION=199309L #For CD-RECORD
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_VERBOSE_LIMIT=32 #limit verbosity
options IPFIREWALL_FORWARD #enable transparent proxy support
options IPDIVERT #divert sockets
options IPSTEALTH #support for stealth forwarding
#
# TCP_DROP_SYNFIN adds support for ignoring TCP packets with SYN+FIN. This
# prevents nmap et al. from identifying the TCP/IP stack, but breaks support
# for RFC1644 extensions and is not recommended for web servers.
#
options TCP_DROP_SYNFIN #drop TCP packets with SYN+FIN
# ICMP_BANDLIM enables icmp error response bandwidth limiting. You
# typically want this option as it will help protect the machine from
# D.O.S. packet attacks.
#
options ICMP_BANDLIM
# SAMBA
options NETSMB #SMB/CIFS requester
options NETSMBCRYPTO #encrypted password support for SMB
options LIBMCHAIN #mbuf management library
options LIBICONV
options SMBFS
###ADDED OPTIONS###
###ADDED DEVICES###
device pcm
# SMB bus
#
# System Management Bus support is provided by the 'smbus' device.
# Access to the SMBus device is via the 'smb' device (/dev/smb*),
# which is a child of the 'smbus' device.
#
# Supported devices:
device smbus # Bus support, required for smb below.
device intpm
device alpm
device ichsmb
device smb
# Power management support (see LINT for more options)
device apm0
###ADDED DEVICES###
В моем случае создание нового файла настроек ядра не требовалось. Я просто
восстановил его из запасной копии на старое место: /sys/i386/conf/CUSTOM.
Теперь можно запустить /usr/sbin/config CUSTOM. Программа config подготовит
место для компиляции нового ядра в ../../compile/CUSTOM и предложит перейти в
этот каталог и начать сборку. Собираем ядро:
make depend && make
Если это удалось, копируем старое работающее ядро в новый файл, чтобы можно было в
случае сбоя загрузить это ядро (после подсказки Boot: набрав его имя):
cp /kernel /kernel.orig
Продолжаем установку:
make install && shutdown -r now.
8. Сетевую карту я настраивал при помощи /stand/sysinstall. Получив от меня
ip-адрес машины (192.168.0.1), sysinstall записал в файл /etc/rc.conf следующую
строку:
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
Тот же адрес (и адреса сетевых машин) вписываем в файл /etc/hosts:
192.168.0.1 unix
192.168.0.2 windows
192.168.0.3 windows1
...
Настройки после установки
1. Если в новое ядро включена поддержка
файловой системы smbfs, мы можем подключаться к дискам на машинах с Windows при
помощи обычной команды mount. Я предпочитаю вместо mount с параметрами -t smbfs
вызывать непосредственно mount_smbfs. Схема такова:
mount_smbfs -E koi8-r:cp866 //WINUSER@SERVER/SHARE MOUNTPOINT
Ключ E дает правильную перекодировку русских имен файлов; WINUSER - имя
известного Windows пользователя; SERVER - сетевое имя машины с Windows; SHARE -
имя общего ресурса; MOUNTPOINT (можно и не объяснять) - точка подключения. К
сожалению, делать это приходится тоже от имени root. Это одна из многих причин,
по которой при установке BSD стоит ставить из пакетов программу sudo, которая
позволяет обычному пользователю выполнять любую команду от имени администратора
(правда, не всякому, а такому пользователю, который входит в группу wheel).
2. Поставив из портов Apache и PHP, я
убедился, что старый способ создания виртуальных серверов, которым я
пользовался в Windows и Linux, не работает. Раньше я добавлял в файл hosts
запись вида
127.0.0.2 test-site ,
и в файле httpd.conf дописывал:
<VirtualHost 127.0.0.2>
ServerName test-site
DocumentRoot /www/htdocs/test-site
ErrorLog /www/htdocs/test-site/logs/error.log
CustomLog /www/htdocs/test-site/logs/access.log common
</VirtualHost>
В FreeBSD этот способ не сработал. После недолгих поисков я нашел выход.
а) в файле /etc/hosts добавляем запись для нашего виртуального сервера, указывая
IP, не существующий в локальной сети:
192.168.0.3 test-site
б) в httpd.conf описываем этот виртуальный сервер:
<VirtualHost 192.168.0.3>
ServerName test-site
DocumentRoot /www/htdocs/test-site
ErrorLog /www/htdocs/test-site/logs/error.log
CustomLog /www/htdocs/test-site/logs/access.log common
</VirtualHost>
в) при помощи программы ifconfig создаем фиктивный сетевой интерфейс
192.168.0.3 (моя сетевая карта определена FreeBSD как rl0):
ifconfig rl0 inet 192.168.0.3 netmask 255.255.255.255 alias
г) перезапускаем apache и проверяем работу:
/usr/local/sbin/apachectl restart
д) чтобы созданный фиктивный сетевой интерфейс сохранился после перезагрузки,
добавляем в /etc/rc.conf строку:
ifconfig_rl0_alias0="inet 192.168.0.3 netmask 255.255.255.255"
В случае других сетевых устройств имя rl0 изменится.
3. После установки и настройки системы хорошо бы записать основные
настройки на CD - чтобы не пропали. Мой способ: создать каталог
/usr/local/tmp/cdrom, и в этом ./tmp/cdrom поместить символические ссылки на
следующие каталоги:
/etc
/sys/i386/conf
/usr/ports/distfiles
В /etc находятся важнейшие системные настройки; в /sys/i386/conf - наш новый
файл настроек ядра; и в /usr/ports/distfiles - исходные тексты всех загруженных
из Сети портов.
Теперь собственно запись.
а) находим пишущее устройство: dmesg | grep CD. У меня это acd1.
б) создаем образ диска программой mkisofs (предварительно установив ее из
портов):
mkisofs -r -J -f -o freebsd.iso /usr/local/tmp/cdrom
Ключ -f заставляет mkisofs переходить по ссылкам; без этого ключа мы не
сумеем поместить /etc и другие системные каталоги на диск.
Созданный образ диска можно просмотреть перед записью:
# vnconfig /dev/vn0c /usr/local/tmp/freebsd.iso
# mount -t cd9660 /dev/vn0c /mnt
# ls /mnt
# umount /mnt
# vnconfig -u /dev/vn0c
в) записываем диск программой burncd:
burncd -f /dev/acd1c -s 10 data filename.iso blank fixate
Здесь -f - имя записывающего устройства; -s - скорость записи; назначение
ключей blank и fixate должно быть очевидно.
(Программа cdrecord работает только с дисководами SCSI-интерфейса. В нашем
случае интерфейс пишущего привода - IDE, поэтому применяем системную программу
burncd.)
Раз уж мы заговорили о компакт-дисках... Если нам понадобится скопировать
записанный диск, его образ можно создать командой dd:
dd if=/dev/acd0c of=discname.iso bs=2048
Подробности: man mkisofs, man burncd, man dd.
4. Настройка принтера. Следующие настройки
(помеченные серым цветом), пожалуй, устарели. Проще использовать для
печати систему CUPS. Ее можно установить из пакета при начальной установке
FreeBSD. Указания об использовании CUPS можно прочесть (на английском)
здесь: http://www.freebsddiary.org/cups.php.
Для установки принтера воспользуемся
программой apsfilter. Взять ее можно как из пакетов на установочном
компакт-диске, так и из "портов". Два замечания: а) набор драйверов Gimp-print
(нужен, например, для принтеров Epson Stylus) в состав системного Ghostscript'а
не входит; б) шрифты Ghostscript не содержат букв кириллицы. Чтобы обойти
первое ограничение, нужно удалить Ghostscript, поставленный вместе с apsfilter,
и переустановить его из портов. Русские шрифты можно взять здесь.
Итак, удаляем ghostscript и собираем его заново:
pkg_info | grep ghostscript
pkg_delete <найденное_имя>
cd /usr/ports/print/ghostscript-gnu
make install
Считая, что apsfilter и нужные драйверы уже есть, начинаем установку
принтера:
/usr/local/share/apsfilter/SETUP
Установщик задаст ряд вопросов. Надо будет выбрать драйвер, порт принтера,
формат бумаги, качество и разрешение печати. В конце установки нажмите I, чтобы
принять сделанные настройки и добавить описание принтера в файл /etc/printcap.
Есть и другой способ печати, не требующий русификации Ghostscript. Можно
использовать программу a2ps. Однако и для нее придется загружать шрифты с
кириллицей (я нашел их здесь: ftp.enst.fr/pub/unix/a2ps/i18n-fonts-0.1.tar.gz). См.
man a2ps. По умолчанию печатаются две страницы на листе, с рамкой
вокруг; чтобы получить обычную распечатку, a2ps вызывается с параметрами:
a2ps -X koi8-r -RB --borders=no --columns=1
Ключ -X задает русскую кодировку.
4a. Замена шрифтов Ghostscript'а помогает
только печати русских файлов из броузера Mozilla (и, возможно, некоторых других
программ). Для работы с командой lpr (или с программами, которые ее используют)
нужно сделать еще кое-что. FreeBSD для печати использует фильтр apsfilter,
который, в свою очередь, обращается к программе a2ps. Так вот, нужно указать
a2ps в качестве кодировки - KOI8-R.
Есть несколько способов:
- определить переменную $A2PS_BASIC, значение которой apsfilter проверяет
перед печатью. Например, в файле ~/.bash_profile указать:
A2PS_BASIC="--delegate=no -X koi8-r -g"; export A2PS_BASIC
Параметры заимствованы из файла /usr/local/share/apsfilter/bin/apsfilter с одной
заменой - кодировки iso1 на koi8-r.
- создать файл ~/.a2ps/a2psrc с нужными нам установками:
# Russian encoding
Options: --encoding=koi8-r
# Paper size
Options: --medium=A4
# Pages per sheet
Options: -1
# No headers!
Options: -B
# No borders!
Options: --borders=no
Здесь указана не только кодировка по умолчанию, но и параметры, нужные при
прямом вызове a2ps из командной строки (печать без рамок, колонтитулов и прочих
финтифлюшек).
Теперь самое время сказать, что описанные способы помогают печати с помощью
a2ps или из программ, вызывающих lpr (вроде редактора Nedit)... но простая
команда lpr <имя_файла> не срабатывает, если в файле присутствуют буквы
кириллицы. Задание попадает в очередь печати и никогда из нее не выходит. Что
сие значит, я пока не понимаю. :-(
См. также man a2ps.
5. С системного диска можно поставить GNOME
1.4. В качестве броузера предлагается Netscape 4.7. Всё более современное
ставится из портов: /usr/ports/x11/gnome2 и /usr/ports/www/mozilla. К
сожалению, исходные тексты как GNOME 2, так и Mozilla немаленькие. Можно
сберечь время загрузки, установив их как уже скомпилированные пакеты, например,
командой
pkg_add -r {gnome2|mozilla}
В версию 4.8 входят Mozilla 1.2, GNOME 2.2, KDE 3.1. В наборе портов уже
есть Mozilla 1.3.
Поддержку Flash к Mozill'е можно добавить из портов:
/usr/ports/www/flashplugin-mozilla. Воспроизводятся, однако, не все ролики - и
без звука. Кроме того, многие русские сайты, использующие Flash, приводили к
сбою и закрытию броузера. Так что я лично решил обойтись без Flash...
Midnight Commander также можно поставить из портов (/usr/ports/misc/mc) или
установить как уже собранный пакет через Сеть:
pkg_add -r mc
teTeX тоже отсутствует. Если не собирать его из исходных текстов (слишком
велик), можно взять готовые пакеты в Сети. Загрузить придется не только teTeX,
но и пакет libwww, в котором он нуждается. Найти уже собранные пакеты можно,
например, здесь: ftp2.freebsd.org/pub/FreeBSD/ports/packages/.
6. Установка и русификация teTeX.
а) устанавливать лучше из пакетов. Пакет teTeX нуждается в пакете libwww
б) для подключения русских переносов в файле
/usr/local/share/texmf/tex/generic/config/language.dat
удаляем все языки и вписываем следующее:
ruseng ruenhyph
=russian
=english
После чего пересоздаем форматные файлы командой
texconfig init
в) Установка дополнительных пакетов для LaTeX:
a. помещаем пакет в каталог ниже /usr/local/share/texmf/tex/latex/.
b. в каталоге пакета запускаем latex *.ins (если есть такой файл)
c. запускаем mktexlsr
7. Простейший способ настроить общий доступ к
интернету через FreeBSD:
а) в файле /etc/rc.conf добавить строку:
gateway_enable="YES"
Перейти в новый режим работы без перезагрузки можно командой:
sysctl -w net.inet.ip.forwarding=1
б) в начале файла /etc/ppp/ppp.conf указать:
nat enable yes
в) при желании, можно заставить ppp выходить в интернет по требованию. Для
этого в каталоге /usr/local/etc/rc.d можно поместить командный файл примерно
такого вида:
#!/bin/bash
ppp -auto PROVIDER_NAME && echo -n " ppp"
В этом случае хорошо задать время простоя, после которого связь с интернетом
будет автоматически разорвана. Для этого в файле /etc/ppp/ppp.conf пишем:
set timeout=<ВЕЛИЧИНА_В_СЕК>
8. Я уже говорил, что не переношу плохой
компьютерный русский, с его "кликните иконку" и "расшарьте
драйв". :-) Поэтому я сразу отключаю безграмотные русские сообщения во всех
программах, в том числе в GNOME2. Помещение чего-то вроде
LC_MESSAGES=C
в .bash_profile домашнего каталога мне не помогло - не знаю, почему.
Работающий способ отключать русские сообщения в GNOME2, который я нашел,
состоит в правке файла /usr/X11R6/etc/gdm/gnomerc:
LC_CTYPE=ru_RU.KOI8-R; export LC_CTYPE
LC_MESSAGES=C; export LC_MESSAGES
LANGUAGE=C; export LANGUAGE
Теперь и GNOME, и все запущенные в его среде программы говорят
по-английски.
9. Чтобы работать с колесиком мыши, в файл
/etc/X11/XF86Config, в "мышиный раздел", добавляем:
Option "ZAxisMapping" "4 5"
и перезапускаем X Window.
10. Для того, чтобы машина действительно
выключалась по команде shutdown -p, нужно:
а) в файле конфигурации ядра добавить строку
device apm0
б) в /etc/rc.conf добавить:
apm_enable="YES"
в) собрать ядро и перезагрузиться.
11. Уровни громкости звуковой карты можно
задавать при загрузке командой mixer. Для этого в каталоге /usr/local/etc/rc.d
можно поместить исполняемый файл mixer.sh примерно такого содержания:
#!/bin/sh
if [ "$1" = "start" ]; then
echo
mixer pcm 95
mixer cd 100
mixer vol 15
fi
Подробности - man mixer.
12. При сборке программы из исходных текстов мы
передаем сценарию configure нужные ключи прямо в командной строке:
./configure --enable-this --disable-that
Однако при установке программы из "портов" configure вызывается
без нашего участия. Что делать? Можно исправить Makefile соответствующего
"порта". Приведу пример для программы просмотра изображений Gimageview.
Перейдя в каталог /usr/ports/graphics/gimageview, открываем в любом редакторе
его Makefile:
nedit /usr/ports/graphics/gimageview/Makefile &
и после строки
CONFIGURE_ENV= .......
прибавляем:
CONFIGURE_ARGS= --disable-splash
В этом случае я добавил ключ, отменяющий показ заставки при запуске
программы.
13. GNOME 2 под Linux позволяет открывать
samba-серверы в локальной сети, указав Nautilus'у адрес вида:
smb:///SERVERNAME
Тот же GNOME 2 под FreeBSD этого делать не умеет. Оказывается, чтобы
добавить эту возможность, нужно установить следующий "порт":
/usr/ports/devel/gnomevfs-extras
К сожалению, просмотр всей сети в Nautilus (протокол network:///, вызывается
через меню Applications | Network Servers) работать всё равно не будет. :-(
Настройки служб
1. Сетевое соединение с Windows при
помощи SAMBA - для ленивых и нетребовательных. :-))
SAMB'у проще всего поставить из пакетов, прямо с установочного компакт-диска
(в FreeBSD 4.8 входит SAMBA 2.2.8). После установки проверить, есть ли в файле
/usrl/local/etc/smb.conf следующие строки:
[global]
workgroup = WORKGROUP
netbios name = tim
hosts allow = 192.168.0. 127.
load printers = yes
printcap name = /etc/printcap
log file = /var/log/samba_log.%m
security = share
character set = koi8-r
client code page = 866
use client driver = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
# Set public = yes to allow user 'guest account' to print
guest ok = no
writeable = no
printable = yes
Приведенный пример позволит печатать из Windows на всех принтерах,
подключенных к данной машине. Как сделать общие каталоги, легко догадаться,
просмотрев файл smb.conf - все примеры там уже есть. Несколько пояснений:
workgroup = WORKGROUP |
Имя рабочей группы, как оно задано на стороне Windows |
netbios name = tim |
Имя, под которым машина будет видна в Сетевом окружении Windows. Обязательно
не должно совпадать с именем, под каким машина известна в файле
/etc/hosts |
hosts allow = 192.168.0. 127. |
Машинам, входящим в эти сети, будет открыт доступ к серверу SAMBA |
load printers = yes |
Делаем доступными все установленные принтеры |
printcap name = /etc/printcap |
Где искать файл описания принтеров? |
security = share |
Задаем доступ к общим ресурсам без ввода пароля |
character set = koi8-r
client code page = 866 |
Ради правильной перекодировки русских имен файлов |
use client driver = yes |
Заставляет Windows использовать собственный драйвер для сетевого принтера.
Без этой команды возможно появление сообщения об ошибке: "Access denied.
Unable to connect". Что странно - до установки SAMBA 2.2.8 я ни с чем
таким я не сталкивался - и в ключе "use client driver" не
нуждался... |
Следующий шаг - добавить и задействовать пользователя, с правами которого
будет работать SAMBA. Делается это так:
smbpasswd -a nobody
smbpasswd -e nobody
Первая команда добавляет в файл /usr/local/private/smbpasswd пользователя
nobody, вторая "включает" его.
Чтобы SAMBA запускалась при загрузке системы, нужно переименовать файл
/usr/local/etc/rc.d/samba.sh.sample в /usr/local/etc/rc.d/samba.sh. Для ручного
перезапуска службы можно использовать команды:
(killall nmbd && killall smbd) &&
(nmbd && smbd)
После этого главное должно работать. Подробности есть в man samba и в
интернете. Как всегда, советую сайт FreeBSD Diary.
2. Кэширующий сервер имен (caching nameserver)
- для ленивых и нетребовательных. :-)) В частности, для тех, кому лень читать
"UNIX: руководство системного администратора" (Немет, Снайдер и др.)
и "FreeBSD: энциклопедия пользователя" (Эбен, Таймэн). Очень советую
обе книжки.
...А вообще, господа, забавно: литератор дает советы, как
настраивать UNIX. И эти советы привлекают больше посетителей на сайт, чем
гораздо более интересные книги того же литератора... Нет, в самом деле смешно.
;-) Однако я отвлекся.
Кэширующий сервер имен вам может пригодиться, если машина с FreeBSD служит
"дверью" (gateway) для выхода в интернет с компьютеров локальной
сети. Итак, краткое описание. Полные сведения - в книжках. Или в рассеянных по
Сети how-to.
а) в файле /etc/resolv.conf оставляем одну строку:
nameserver 127.0.0.1
б) в файле /etc/ppp/ppp.conf строку
enable dns
закрываем комментарием.
в) заходим в /etc/namedb, запускаем сценарий make-localhost:
sh make-localhost
На вопрос об имени домена отвечаем всё, что угодно - всё равно созданный файл
будем править.
г) смотрим на созданный файл /etc/namedb/localhost.rev. У меня он имеет
следующий вид:
$TTL 3600
@ IN SOA ns.localhost.localdomain. root.localhost.localdomain (
20030505 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.localhost.localdomain.
1 IN PTR localhost.
Значения Refresh и Minimum я заменил на 43200 (12 часов).
Что важно? Последняя строка! Она указывает на имя нашего сервера имен.
Скрипт make-localhost вписывает туда полное имя машины с именем домена
(которого у меня просто нет), т.е. localhost.localdomain. В итоге ничего не
работает. Надо указывать просто localhost. (с точкой на конце!). (Думаю, имя
должно соответствовать указанному в /etc/hosts.)
д) Теперь файл /etc/named/named.conf. Очищенный от комментариев, он выглядит
так:
options {
directory "/etc/namedb";
forwarders {
194.67.2.114;
194.67.1.154;
194.67.2.108;
194.67.2.109;
194.167.2.1;
217.70.106.5;
};
forward only;
query-source address * port 53;
};
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};
Здесь forwarders - это серверы имен моего провайдера. К ним я буду
обращаться за IP адресами, еще не имеющимися в кэше. Команда query-source
address - ради межсетевого экрана; она предписывает использовать порт 53,
обычно разрешенный. Говорят, что BIND версии 8 в этой инструкции не нуждается -
он и так ходит через порт 53.
Zone "." - это корневые серверы, к которым мы обратимся, если
разрешить имя в IP при помощи серверов списка forwarders не удается. - Скорее,
к которым мы обратились бы - насколько я понимаю, forward only говорит о
том, что наш BIND имеет право только перенаправлять запросы, а не создавать
свои собственные.
Zone "0.0.127..." есть ссылка на описание машины, где установлен
BIND, в файле ./localhost.rev.
е) команды ручного управления BIND:
ndc start | stop | reload
reload заново читает файлы настроек.
ж) в файле /etc/rc.conf дописываем
named_enable="YES"
для автоматического запуска BIND при загрузке.
з) меняем настройки межсетевого экрана. В файле /etc/ipfw.conf в настройках
для udp нужно либо не указывать интерфейс вовсе:
# DNS rules
add allow udp from any to any 53
add allow udp from any 53 to any
либо повторить записи для интерфейсов rl0 (локальная сеть; имя может быть
другим) и lo0 (127.0.0.1):
# DNS rules
add allow udp from any to any 53 via rl0
add allow udp from any 53 to any via rl0
add allow udp from any to any 53 via lo0
add allow udp from any 53 to any via lo0
и) теперь на Windows-машинах локальной сети в качестве DNS-сервера указываем
unix'овый компьютер: 192.168.0.1
к) можно удостовериться, что в файле /etc/host.conf указан правильный порядок
разрешения адресов:
# First try the /etc/hosts file
hosts
# Now try the nameserver next.
bind
# If you have YP/NIS configured, uncomment the next line
# nis
Уфф!!! :-)
Expect bugs, как говорят программисты. :-) Однако у меня это работает.
Установка FreeBSD версии 4.8
FreeBSD 4.10
1. Автоматическая загрузка KDM
В файле /etc/ttys находим строку:
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
и заменяем на:
ttyv8 "/usr/local/bin/kdm -nodaemon" xterm on secure
Теперь перезагружаемся - или заставляем ядро перечитать свои настройки командой:
kill -HUP 1
KDM будет загружен, но войти из него в KDE не удастся. Решение: обновить настройки
KDM следующим способом:
genkdmconfig --no-old
Без этого вместо KDE будет загружаться т. н. failsafe session - одинокое окошко
Xterm...
2. Улучшение внешнего вида шрифтов TrueType
По сравнению, например, с Slackware 9.* шрифты TrueType смотрятся в FreeBSD очень бледно.
Их качество можно решительно улучшить путем пересборки библиотеки Freetype и отключения
режима bytecode interpreter. Этот интерпретатор байтовых кодов по умолчанию включен,
причем совершенно безосновательно - никакого улучшения вида
шрифта он не дает. Собственные механизмы отображения шрифта, присущие Freetype,
обеспечивают более высокое качество, чем запатентованный кем-то из "гигантов" :-)
bytecode interpreter... Итак:
pkg_info | grep freetype2
pkg_delete ИМЯ_НАЙДЕННОГО_ПАКЕТА
cd /usr/ports/print/freetype2
make WITHOUT_TTF_BYTECODE_INTERPRETER && make install
Готово.
3. Подключение видеокарты ATI Radeon 9200
XFree86 4.3 не распознаёт Radeon 9200. :-( Решение я нашел где-то на www.opennet.ru -
в файле /etc/X11/XF86Config описать видеокарту следующим образом:
Section "Device"
Identifier "radeon"
Driver "radeon"
VendorName "ATI Technologies Inc"
BoardName "ATI Radeon"
ChipID 0x514D
BusID "PCI:1:0:0"
EndSection
Иначе - остается только работа с драйвером "vesa". Или обновление XFree до новейшей
доступной версии, что не очень-то удобно. ;-)
Дополнительные возможности системы "портов".
Вернувшись к FreeBSD после опыта работы с Gentoo Linux, я подумал было, что система портов
FreeBSD в некоторых отношениях менее удобна, чем соответствующая система "portages"
в Gentoo. Например, я привык в Gentoo в ответ на: emerge -vp PACKAGE_NAME получать список
файлов, в которых нуждается система для установки пакета PACKAGE_NAME,
а командой: emerge --fetchall PACKAGE_NAME загружать исходные тексты пакета PACKAGE_NAME
и всех его зависимостей. По моим прежним воспоминаниям, FreeBSD давала возможность загрузить
исходные тексты для приложения (но не зависимостей) по команде: make fetch, а способа узнать
все зависимости устанавливаемого пакета, мне казалось, там просто не было.
Рад сообщить, что я злостно заблуждался. Порывшись в интернете, я обнаружил, что достоинства
Gentoo/emerge неоспоримы в сравнении с другими видами Linux, но не так уж
необыкновенны по сравнению с FreeBSD. Основным источником сведений о работе с портами
оказался файл /usr/ports/Mk/bsd.port.mk. В нем есть перечень целей команды make,
доступных при установке программм из набора портов. По прочтении этого списка обаяние
emerge как-то бледнеет... ;-)
Возможности команды make при установке приложений из
набора портов (не полностью)
Цель |
Действие |
Сведения о пакетах |
fetch |
Загрузить исходные тексты |
fetch-list |
Показать список файлов, какие будут загружены командой fetch |
fetch-recursive |
Загрузить исходные тексты рекурсивно, т. е. со всеми зависимостями |
fetch-recursive-list |
Показать список файлов, какие будут загружены командой fetch-recursive |
fetch-required |
Загрузить еще не установленные части/зависимости для данного пакета |
fetch-required-list |
Показать список еще не установленных частей/зависимостей для данного пакета |
Сборка пакетов |
extract |
Извлечь файлы пакета в каталог ./files |
patch |
Приложить "заплатки" |
configure |
Запустить сценарий configure (если есть) |
build |
Скомпилировать исходные тексты |
install |
Установить пакет |
reinstall |
Переустановить пакет |
deinstall |
Удалить пакет |
package |
Собрать двоичный пакет (*.tbz) из уже установленного |
package-recursive |
Собрать двоичные пакеты (*.tbz) из уже установленного и всех его зависимостей |
Не так и плохо. ;-) Любопытным еще раз советую файл /usr/ports/Mk/bsd.port.mk.
К сожалению, вывод команд, сообщающих о том, какие файлы будут загружены при установке
выбранного пакета, довольно сырой:
/usr/bin/env /usr/bin/fetch -ARr -S 3217141 http://heanet.dl.sourceforge.net/sourceforge/k3b/k3b-0.11.9.tar.bz2 || /usr/bin/env /usr/bin/fetch -ARr -S 3217141 http://aleron.dl.sourceforge.net/sourceforge/k3b/k3b-0.11.9.tar.bz2 || /usr/bin/env /usr/bin/fetch -ARr -S 3217141 http://umn.dl.sourceforge.net/sourceforge/k3b/k3b-0.11.9.tar.bz2 || /usr/bin/env /usr/bin/fetch -ARr -S 3217141 http://belnet.dl.sourceforge.net/sourceforge/k3b/k3b-0.11.9.tar.bz2 || /usr/bin/env /usr/bin/fetch -ARr -S 3217141 ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/k3b-0.11.9.tar.bz2 || echo k3b-0.11.9.tar.bz2 not fetched
Чтобы получить более приятный для глаза список, какой дает emerge в Gentoo, нужна небольшая обработка.
Я написал на скорую руку сценарий на языке Python, который принимает список
файлов, сообщаемый командой make fetch-required-list, и преобразует его в нечто удобочитаемое. Может быть,
он вам пригодится. Применение:
cd /usr/ports/PORDTIR
make fetch-required-list | /PATH_TO/list.py
|