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 смотрите ниже.


Установка:

  1. Установка
  2. Настройка доступа к интернету через ppp
  3. Обновление дерева "портов"
  4. Поддержка русского языка
  5. Пользовательские настройки
  6. Создание нового ядра
  7. Настройка сети

После установки:

  1. Подключение дисков Windows
  2. Виртуальные серверы в Apache
  3. Сохрание системы на CD
  4. Установка принтера
    Печать по-русски с помощью lpr
  5. Недостающие программы
  6. Установка и настройка teTeX
  7. Общий доступ к интернету через FreeBSD
  8. Язык сообщений GNOME2
  9. Поддержка мыши с прокруткой в X Window
  10. Автоматическое управление питанием (APM)
  11. Установка уровней громкости при загрузке
  12. Передача параметров configure при установке программ из "портов"
  13. Просмотр samba-серверов в окне Nautilus

Настройки служб:

  1. SAMBA для ленивых
  2. Кэширующий сервер имен для ленивых

Дополнения:

  1. Заметки об установке FreeBSD 4.8
  2. FreeBSD 4.10
  3. Дополнительные возможности системы портов

Установка

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.

Есть несколько способов:

  1. определить переменную $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.

  2. создать файл ~/.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.8 включает GNOME 2.2 (и KDE 3.1). Их можно установить из пакетов прямо с компакт-диска. GNOME создает в каталоге /usr/X11R6/etc/gdm заготовки для файлов настроек:
    factory-gnomerc
    factory-gdm.conf
    
    Эти файлы нужно переменовать, удалив приставку "factory-", и исправить по вкусу (см. выше о языковых настройках GNOME 2). То же самое придется проделать с файлами /usr/X11R6/etc/gdm/Sessions/* - переименовать, убрав приставку factory. Вообще-то всё это должен был бы проделывать установочный сценарий, однако этого не происходит...

  • В случае автоматической загрузки GNOME при помощи файла /usr/X11/etc/rc.d/gdm.sh встретятся неприятности. Оказывается, каталог /usr/X11R6/share/gnome/gdm должен принадлежать пользователю gdm:gdm, а владеет им root:wheel. Кроме того, права доступа к этому каталогу должны быть 0750 (rwxr-x--). Добавить пользователя и изменить права придется вручную.

  • Новая версия XFree86 - 4.3.0 - отказалась понимать старый способ задания раскладки клавиатуры в файле /etc/X11/XF86Config:
    Option "XkbLayout"        "ru"
    Как оказалось, XFree 4.3.0 ожидает полного списка используемых языков:
    Option "XkbLayout"        "us, ru"
    причем сокращение "en" для английского языка почему-то не признаёт. В западной части интернета я нашел примеры, в которых использовалось сокращение "us" - к счастью, оно сработало.

  • Другой странной особенностью XFree 4.3.0 оказалось нежелание читать настройки из файла ~/.Xdefaults. Пришлось загружать его явным образом, поместив в файле ~/.xinitrc следующую строку:
    xrdb -merge ~/.Xdefaults

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
Hosted by uCoz