Последнюю версию этого документа можно нати по адресу http://w3.misa.ac.ru/prof/techsupp/fdsdinst.htm
Дмитрий Карпов, МИСиС
Много чего написано про инсталляцию Windows от 3.* до NT; немного меньше - про инсталляцию OS/2, а вот детальное описание инсталляции Unix я не встречал. Попробую рассказать, как установить и настроить FreeBSD. Это - мой личный опыт, так что возможны расхождения во мнениях с гуру, а также пробелы, тем более что многие вещи я пишу прямо по горячим следам: сделал, понял - и сразу на всеобщее обозрение. :-)
Я работаю в условиях, когда я - единственый администратор на машине, на которой нет никакой особо секретной информации. Вокруг меня нет серьезных хакеров (по крайней мере они себя никак не проявляют). Основная задача - обеспечить почту, в основном по UUCP. Это накладывает некоторый отпечаток на мои воззрения по поводу администрирования.
Я наконец проникся уверениями Micro$oft, BSA и прочих серебролюбивых организаций, что нехорошо использовать ворованное ПО - это аморально, преступно, а также невыгодно. Из бесплатных OS мне известны три Unix'а - FreeBSD, Linux и SCO (последний - только для некоммерческого использования), а также Acorn'овская RiscOS. Но RiscOS идет только на RISC-процессорах ARM, а из Unix'ов я лучше всего знаю FreeBSD.
В отличие от WindowsNT, для работы Internet-сервером вполне достаточно 486SX-33 и 8 MB RAM. Операции с плавающей точкой серверу не нужны, быстродействие определяется не процессором, а пропускной способностью сети, а графическая карта сойдет самая слабая, какая только есть - все равно он будет работать в текстовом режиме. Мышь, кстати, тоже не нужна. Так что, как видите, использовать легальное ПО действительно дешевле, чем цельнотянутое.
FreeBSD можно инсталлировать с дискет (классический способ), с FAT-раздела, с FreeBSD-раздела, с CD-ROM (ну, это нынче все могут), со стримера (у меня его никогда не было), а также по сети: по NFS и по FTP (обычному и сквозь FireWall). Как правило, на CD-ROM не самая свежая версия, с дискет довольно мучительно, для инсталляции с FreeBSD-раздела нужно иметь дистрибутив, записанный на этот раздел (а значит, иметь установленный с FreeBSD). NFS вообще используется довольно редкоБ по крайней мере для NFS, как и для FreeBSD-раздела надо иметь уже установленный Unix, Так что остаются FAT-раздел и FTP. Для FTP нужно иметь быструю, а главное - стабильную связь с FTP-сервером, поэтому для первой инсталляции рекомендую закачать FreeBSD на FAT-раздел локального диска. Это отрежет часть места на диске, но потом можно будет снести FAT-раздел и сделать на его месте что-нибудь полезное или же держать его для загрузки в DOS.
Для получения списка серверов обратитесь на http://www.freebsd.org, а для России - ftp://ftp.kiae.su и ftp://ftp.gamma.ru. К сожалению, ftp.gamma.ru не позволяет анонимный вход, если ваша машина не известна ReverseDNS-серверу, отвечающему за вашу зону IP-номеров, так что если вы только собираетесь строить свою Internet-сеть на базе FreeBSD, то это место не самое удачное.
Сначала надо подготовить директории:
mkdir /FreeBSD cd /FreeBSD mkdir bin mkdir floppies
Вот мы и создали основные директории. Если думаете брать еще что-нибудь, выясняйте, где оно лежит и действуйте аналогично.
Запускаем FTP-клиента:
ftp ftp[номер][.страна].freebsd.org
Я не оговорился - все FTP-серверы, содержащие FreeBSD, прописаны в домене freebsd.org. Узнать, какой ближе, можно командой
ping ftp[номер][.страна].freebsd.org
по принципу наименьшего времени отклика и наибольшего процента возвращенных пакетов. Сервер спросит login: и Password:
login: ftp Password: имя@- обычный анонимный вход на FTP-сервер. Дальше
cd pub/FreeBSD/версия-RELEASE
Вопрос о версии требует отдельного рассмотрения. К сожалению, 2.2.1 и 2.2.2 мне не понравились - похоже, там что-то намудрили и они работают нестабильно. Пришлось вернуться к 2.1.7.1, а ее удалось найти только на ftp.freebsd.org - на ftp.kiae.su и ftp.gamma.ru ее уже не было, там держат только последние версии. Включаем режим перекачки (нетектовых) двоичных файлов
binи визуального отображения закачанных килобайтов.
hashотключим вопросы про каждый файл "это брать?".
prompt cd bin lcd bin mget *.* lcd .. cd ..
Для минимальной инсталляции надо взять все в директории bin. Там находятся файлы bin.?? (от bin.aa до bin.cq - последний зависит от версии), bin.mtree, checksum.md5 и install.sh - всего 17 MB. Если процесс оборвался, допустим, на файле bin.ai, не надо качать все заново, можно продолжить командой
mget bin.a[i-z] bin.[bc]? bin.mtree checksum.md5 install.sh
Впрочем, это все относится к командной строке FTP, к тому же операционные системы Micro$oft в командах "lcd" вместо "/" используют "\". Если у вас FTP-программа работает по другому - делайте сами.
cd floppies lcd floppies get boot.flp lcd ../tools cd ../tools get rawrite.exe quit
boot.flp - образ загрузочной инсталляционной 1.44 MB дискеты (естественно, надо иметь такой дисковод). Прежние версии обходились дискетой 1.2 MB. Впрочем, возможно, удастся впихнуть ядро на 1.2 MB-дискету. rawrite.exe - программа под DOS, способная сделать из форматированной дискеты и файла boot.flp загрузочную дискету. Теперь минимальная инсталляция (впрочем, это не так мало) находится на нашем диске. Там же в tools есть еще много иногда полезного, описанного в 00_index.txt, берите, если хочется. Изготовим загрузочную дискету:
rawrite.exe boot.flp a:
Теперь загрузимся с нее. Будет много непонятных сообщений - не пугайтесь "not found" или "conflict with" - ядро содержит множество драйверов для самых разных устройств, большая часть которых у вас отсутствует (ну действительно, откуда взяться на машине десятку сетевых карт разных производителей?). Основная проблема может быть с NE1000/NE2000-совместимыим и 3Com 3C503 картами - устройство ed0 расчитывает на Port 280 и IRQ 5, ed1 - Port 300 и IRQ 5. Впрочем, перед стартом ядро предлагает научить его работать с другими портами и прерываниями, но я предпочел переставить параметры карты (уж не помню, перемычками или программой-настройщиком), так как считаю, что аппаратуру конфигурировать проще, чем программу.
Надеюсь, вы заранее подготовили свободное место на диске для FreeBSD-раздела? Если нет, и к тому же у вас только одна партиция, придется вернуться в DOS, стереть лишнее, дефрагментировать диск и воспользоваться программой fips.exe (лежит рядом с rawrite.exe), чтобы освободить место. (При этом размер кластера на FAT-разделе останется прежним.)
Первое, что надо сделать - создать раздел на диске. Создадим FreeBSD-партицию (в терминах Unix она называется slice, а partition - подраздел внутри slice) на все свободное место либо, если свободное место не непрерывно, на самый большой непрерывный кусок. Затем надо создать подразделы. Я рекомендую (для системного администратора) такую схему:
/ (корень) - от 16 до 32 MB /usr (системные программы и данные для них) - от 50 MB swap (область подкачки) - см.ниже /var (рабочие файлы) - порядка 30 MB /home (домашнии директории пользователей) - остальное
Конкретные значения сильно зависят от размера диска. Рекомендуемое значение для / составляет 20 MB, если меньше - sysinstall будет возмущаться; ну и пусть, ничего страшного. /usr должна соответствовать обьему инсталлируемого, при выборе distribution можно уточнить, сколько именно понадобится и отвести раза в полтора больше. swap зависит не столько от обьема диска, сколько от количества оперативной памяти и должен превышать ее в два..пять раз (в пять раз - с учетом возможного наращивания памяти). Если хотите, чтобы FAT-раздел был доступен из Unix, надо указать точку монтирования для него, обычно - /dos.
После того, как вы дали приказ начать инсталляцию и отказались от последнего шанса спасти информацию на том месте, которое отвели под FreeBSD, будет долгое извлечение из архива и размещение на диске. Можно пока нажать Alt+F2 - посмотреть как идет извлечение, Alt+F4 - подать какую-нибудь команду (ой, лучше не делайте этого) и Alt+F1 - вернуться обратно.
Теперь, если все закончилось удачно, зайдем в пост-конфигурирование. Если вы проводили инсталляцию по сети, то сетевой интерфейс должен быть уже сконфигурирован, иначе лучше честно ответить на вопросы. о конфигурации сетевого интерфейса. Если у вас есть подключение к Internet, адреса должен дать провайдер или местный сетевой администратор, если же это чисто внутренняя сеть - воспользуйтесь адресом из множества, отведенного под внутрикорпоративные сети, например 192.168.0.1 и маской 255.255.255.0. Если есть подключение, желательно сконфигурировать анонимный FTP-доступ, если есть внутренняя сеть - неплохо покажет себя Samba (файл-сервер для Micro$oft Network по протоколу TCP/IP). И наконец, весьма здорово сделать WWW-сервер на базе Apache! Я даже не ожидал, что это будет так легко.
FTP-сервер присутствует в минимальной поставке. Кстати, анонимный доступ к нему надо конфигурить, а вот парольный действует автоматически. А для Samba и Apache достаточно просто сменить Media - указать в качестве источника FTP-сервер. Packages (в это понятие входят множество программ) редко превышают 1.5 MB, так что их можно инсталлировать даже по сети из США, что я и делал.
Для этого есть специальные утилиты, например, adduser. Но эти утилиты слишком умные: например, копируют стандартные инициализационные файлы в домашнюю директорию пользователя, а я считаю, что сам могу решить, что надо копировать, а что - нет.
Базовый файл - /etc/master.passwd, из него получаются /etc/passwd (общедоступный список пользователей), /etc/spwd.db (база пользователей) и /etc/pwd.db (база паролей). Для добавления и удаления юзеров, а также для изменения некоторых параметров можно использовать команду vipw (как следует из ее названия, она запускает редактор vi или другой, если установлена переменная окружения EDITOR).
Но я предпочитаю deco, а затем даю команду pwd_mkdb master.passwd. (Внимание - это можно делать только если гарантируется, /etc/что никто другой не будет редактировать файл в это время! vipw блокирует запуск другого экземпляра этой (но не другой) программы администрирования юзеров.)
В файле master.passwd на каждого юзера отведено по одной строке. Каждая строка состоит из полей:
Имя пользователя задействовано во множестве мест, в т.ч. в терминальном входе (при работе на машине с Unix как на рабочей станции), в почтовом обмене (как имя отправителя и получателя), а также в доступе по FTP и Samba. Во всех случаях используется один и тот же пароль.
Пароль шифруется алгоритмом, который не позволяет расшифровать обратно, а при входе в систему сравниваются зашифрованный пароль из базы паролей и свежезашифрованный введенный пользователем пароль. Сменить пароль можно командой passwd имя_юзера; если дать просто команду passwd, это относится к тому имени, под которым сейчас работаем; обычный юзер (не супервизор) должен сначала ввести старый пароль, и если система сочтет его пароль недостаточно секретным (слишком короткий, содержит только строчные буквы), то не примет его. Пароль надо вводить дважды, причем вслепую - обычные меры безопасности, принятые нынче во всех системах.
UID идентифицирует права пользователя на файлы и процессы (а не имя!). Таким образом, второй account с тем же UID будет лишь alias для первого (т.е. оба account'а будут иметь идентичные права). /* Переводите с английского сами, я не могу. */ Этот UID будет присвоен всем файлам и директориям, созданным юзером. Изменить UID файла может только супервизор (пользователь с UID=0).
GID также будет присвоен всем файлам и директориям, созданным юзером. Юзер может входить в несколько групп, если это прописано в /etc/group.
Со следующими тремя полями я не разбирался.
Комментарий используется в строке "From:" в письмах, отправляемых командой mail, сообщается командой finger.
Домашняя директория становится текущей и записывается в переменную HOME при терминальном входе, в ней лежат настроечные файлы ко многим программам. Также является корневой при подключении по Samba ресурса homes.
Shell - для терминальных пользователей как правило /bin/sh, /bin/csh или /bin/bash. Для почтового обмена по UUCP - /usr/libexec/uucp/uucico. Для тех, кому надо предоставить только специфический доступ (например, POP3 и Samba) ставится /usr/bin/passwd и единственной возможностью при входе терминалом или по Telnet для них будет смена пароля. Для пользователей, которые никогда не будут работать (т.н. псевдопользователей) ставится несуществующий /none или безобидный /bin/false.
Прежде всего не надо использовать имя root. К сожалению, его нельзя удалить, слишком во многих местах оно задействовано. Поэтому я делаю
root:*:0:0::0:0:SysMaster:/none:/none
т.е. у него нет ни пароля, ни домашней директории, ни shell'а. Изначально FreeBSD еще toor, который может заменить собой root, но я предпочитаю использовать какое-нибудь третье имя. Если же вы решили сохранить имя root, то по крайне мере надо установить ему пароль (при установке этот пользователь создается без пароля).
Если на машине несколько администраторов, то им лучше каждому иметь свой супервизорский account на случай если один вдруг решит сменить пароль. Вообще надо время от времени менять свой пароль, но я не буду вдаваться в подробности. Главное - не дать мерам безопасности мешать нормальной работе.
Супервизору запрещен удаленный вход (по Telnet и FTP). Если надо удаленно администрировать систему, входите под обычным именем и давайте команду su имя_супервизора. Однако делать это могут только те, кто явно включен в нулевую группу (wheel). Вообще лучше поменьше времени проводить под правами супервизора - меньше вероятность повредить систему.
Администрирование групп сильно зависит от задач, возлагаемых на систему. Этот аспект тоже администрирования подробно описан в литературе, а у меня на данный момент не так уж много пользователей, чтобы я успел накопить опыт.
Настройка Samba заключена в файле /usr/local/samba/lib/smb.conf или в /usr/local/etc/smb.conf, на всякий случай я залинковал их и у меня это как бы один файл. Вот он:
[global] comment = FreeBSD - Samba %v log file = /var/log/samba.log dont descend = /dev,/proc,/root,/stand printing = bsd map archive = no status = yes public = yes read only = no preserve case = yes strip dot = yes security = share workgroup = Unix [homes] browseable = Yes comment = %U's Home Directory create mode = 0664 public = no mangled map = (*.html *.htm) (*;1 *) [pub] browseable = Yes path = /var/ftp/pub comment = Public domain public = yes read only = yes
Комментарии к этому файлу даст команда man smb.conf, а я пока лишь замечу, что к этой машине не подключен принтер (соответственно нет секции [printers]), а в качестве публично доступной директории используется та же самая, что и по FTP.
После выхода из программы инсталляции система должна загрузиться с жесткого диска. Снова будут те же самые сообщения "not found" и "conflict with". Как-то раз у меня не пошла загрузка сразу после инсталляции (система висла), но вместо того, чтобы устанавливать все заново, я на приглашение загрузчика ввел
Boot: kernel.GENERICи вместо того, чтобы грузиться с основного ядра /kernel, загрузился с его копии /kernel.GENERIC. Затем вошел без пароля:
login: rootи скопировал хорошее ядро на место плохого:
cp /kernel.GENERIC /kernel
Дальнейшие действия проходят под китайским лозунгом "три дня труда - десять лет счастья". :-) Бороться придется по большей части врукопашную. Для начала возьмем на ftp.kiae.su/pub/FreeBSD/local/ deco*bin.tgz. Закинуть его можно в любую директорию, я предпочитаю в /dos (на случай переустановки) или /var (не засорять же / и /usr); желательно недалеко от корня, иначе долго будет добираться. Инсталлируем
pkg_add deco*bin.tgzЕсли deco*bin.tgz не в текущей директории, придется указывать полный путь. Почему-то авторы решили, что запускаемый файл лучше поместить в /usr/local/bin/, но я предпочел переместить его
mv /usr/local/bin/deco /usr/bin/decoХотя директория /usr/bin/ по умолчанию прописана в переменной окружения PATH, мне пришлось выйти из системы (Ctrl+D) и войти снова, чтобы можно было запускать deco без указания полного пути.
Теперь deco запускается, но - вот ужас! - он черно-белый, вместо псевдографики - "|", "-" и "+", не работают клавиши с F5 до F10. Надо править файлы /etc/ttys и /etc/termcap. С /etc/ttys довольно просто:
ttyv? "/usr/libexec/getty Pc" pc3r on secure
Где вместо "?" надо подставить номера консолей (мне хватает с 0 по 3). С /etc/termcap несколько сложнее. Во первых, он хранится не в /etc/, а в /usr/[...] лень); /etc/termcap - символьный линк к реальному файлу (обозначается /etc/termcap -> /usr/[...]). А мы сотрем его и сделаем другой, на тот termcap, который пришел с deco.
rm /etc/termcap ln -s /usr/lib/deco/termcap /etc/termcapНо этого мало, надо его поправить:
# Standard Xenix console. # It is not true ansi, but has been hacked for dumb users. ansi|xenix|pc3r|cons25r:\ :g1=\240\241\253\273\256\261\276\265\245\270\250:\ :C2:Nf#16:Nb#8:Mf=042615378CAE9DBF:Mb=04261537:\ :Cf=\E[%p1%{8}%/%d;3%p1%{8}%m%d;4%p2%dm:fs=\E[m:\ :kI=\E[L:kH=\E[F:kd=\E[B:kN=\E[G:kl=\E[D:\ :kr=\E[C:kh=\E[H:ku=\E[A:kP=\E[I:kD=\177:\ :f1=\E[M:f2=\E[N:f3=\E[O:f4=\E[P:f5=\E[Q:\ :f6=\E[R:f7=\E[S:f8=\E[T:f9=\E[U:f0=\E[V:tc=ansi:Приведу некоторые пояснения:
man termcap 5(если вы установили manual pages) содержит по этому поводу все, что я знаю, и все остальное. "5" означает, что manual page будет браться из каталога man5; иначе будет взята первая попавшаеся, а именно 3-я, в которой описаны вызовы библиотеки termcap.
В Internet принята кодировка KOI-8 - кодировка Unix и Acorn, кодировка E-mail, FTP и Usenet (News). (WWW/HTTP, как правило, в многокодовой форме). Поэтому обратимся к /etc/sysconfig для версий до 2.1.* или /etc/rc.conf для версий, начиная с 2.2.*. Этот файл - всего лишь запускаемый (исполняемый), да и не делает ничего, кроме определения переменных, которые будут использоваться в /etc/rc и запускаемых из него /etc/rc.* и /etc/netstart. Если интерсно, как именно:
grep имя_переменной /etc/sysconfig /etc/rc.* /etc/netstart
Ну да ладно, вернемся к проблеме русификации. В комментариях к переменным написано много интересного, позволяющего разобраться, что с этой переменной делать и какие значения она может принимать. Вот так я настраиваю клавиатуру:
keymap="ru.koi8-r" keyrate="fast" keychange="NO" cursor="blink"
Русификацию экрана можно провести двумя путями: загрузить шрифты KOI-8 или загрузить шрифты Alt и карту перекодировки. Разница в том, что символы Alt-псевдографики отображаются видеоконтроллером с расширением на один столбец вправо, из-за чего горизонтальные линии в KOI-8 получаются разрывными (как будто использовались знаки равенства "="). Но а предпочел KOI-8:
scrnmap="NO" font8x16="koi8-r-8x16" font8x14="NO" font8x8="NO" blanktime="NO" saver="NO"
Для того, чтобы эти изменения возымели действие, надо перезагрузить систему. Опытный администратор часто может произвести настройку без этого, но надо убедиться, что при последующих включениях машины все будет нормально.
reboot
Основное время тратится на неудачные попытки лишних драйверов найти несуществующие устройства. Все драйверы жестко вшиваются в ядро (хотя есть loadable kernel modules, это мало меняет суть дела), поэтому если хочется, чтобы машина работала более эффективно, придется перекомпилировать ядро. Это не требует писать программы, надо только указать компилятору, какие именно части надо включить в ядро.
Со страхом и трепетом я приступил в первый раз к перекомпиляции ядра. На всякий случай позвал на помощь товарища. Тот, правда, видел Unix второй раз в жизни, но "кто умеет - делает, а кто не умеет - советует". :-) Еще говорят, что "кто совсем не умеет - учит", но я, как видите, делал, а теперь учу. :-) Кстати, его советы оказались неплохими, по крайней мере в части перевода с английского и в понимании логики конфигурирования.
Для начала надо получить ftp://ftp.freebsd.org/pub/FreeBSD/версия-RELEASE/src/ssys.*, обычно я кладу их рядом с bin. Теперь их надо извлечь. Маленькая тонкость - по умолчанию /sys -> /usr/src/sys, а я не хочу кидать исходники ядра в /usr. Поэтому
mkdir /usr/src mkdir /var/src mkdir /var/src/sys ln -s /var/src/sys /usr/src/sys cat .../src/ssys.?? | tar --unlink -xvpzf - -C /
Последнюю строчку я почти не раздумывая взял из .../bin/install.sh. При этом извлекается исходник ядра с кучей драйверов, часть из которых присутствует в GENERIC.
cd /sys/i386/conf cp GENERIC MYCONF редактировать файл MYCONF config MYCONF cd /sys/compile/MYCONF make depend make make install reboot
Если компиляция заткнется на каком-либо этапе, вам сообщат. Внимательно читайте диагностику и, чтобы не сбросить ее с экрана, производите правку с другой виртуальной консоли или из другой сесии telnet.
команда драйвер параметры #комментарийнапример
cpu "I386_CPU" cpu "I486_CPU" cpu "I586_CPU"
Естественно, надо оставить тот, который соответствует вашей машине. Возможен также вариант, когда это ядро должно работать в нескольких конфигурациях, тогда надо оставить строки, соответствующие хоть одной (т.е. если ядро делается для 486-й машине, которая вскоре должна быть усилена до 586-й, то надо оставить две последние строки).
В этом очень поможет файл LINT. Он содержит все драйверы, которые есть в ssys.?? и по слухам не может быть скомпилирован - некоторые строки противоречат друг другу. Зато от неплохо прокомментирован. Моя первая компиляция закончилась неудачно - я выкинул шину PCI (ее на машине действительно не было), но оставил какое-то PCI-устройство и компилятор на нем запнулся. Ничего страшного не произошло, машина не повисла, система не грохнулась - просто пришлось запустить компиляцию заново. Был вечер, ждать конца было неохота и я ушел домой, оставив компилятор работать, а утром получил готовое ядро.
Компиляция сократила размер ядра (файла - ядро скомпрессировано, самораспаковывается при загрузке и в памяти занимает больше) с 1224 KB до 840 KB на одной машине и до 790 KB на другой (разница - в наличии CD-ROM и в сетевых картах). Это немаловажно, особенно если у вас не очень много памати. FreeBSD способен работать и даже эффективно выполнять многие функции даже при 4 MB оперативной памяти, но для компиляции неплохо будет добавить; впрочем, компиляция при 8 MB, мне показалась, шла вполне приемлимо.