Быстрая FreeBSD на старый ноутбук. Часть 1: система, необходимый софт, ядро, текстовая консоль

Шпаргалка

Написал этот текст как шпаргалку для себя. Может, еще кому пригодиться.

Для реализации ниже описанного нужно постоянное подключение к интернету, желательно быстрое.

Замечу, что выбран не быстрейший способ установки программ - не из бинарных пакетов, а методом компиляции исходных текстов.

В результате вся установка заняла несколько часов.

Это часть 1: про систему, необходимый софт, ядро, текстовую консоль.
Часть 2: про X11 и иже с ним тут: http://faq1c.gorbunov.ru/node/57

Почему озадачился

Слишком некомфортно работать на старом ноутбуке с Windows XP.
Решил поставить и настроить запуск только необходимого - FreeBSD.

Задачи - шариться в интернете, смотреть фотографий, видеофильмов, редактировать тексты, редактировать фотографии.

Что за ноутбук?
Производство HP
Процессор AMD Mobile Sempron
Память 1 Г, DDR
Жесткий диск 40 Г, PATA
Оснащен считывателем отпечатков пальцев.

Как только на таком железе раньше люди себя комфортно чувствовали?

Вообще-то, изначально была попытка завести DragonFlyBSD, но не удалось заставить нормально работать драйвер видеокарты для X11.
Кое-что полезное для себя я с DragonFlyBSD понял, потому не стал удалять описание неудавшейся попытки.

Поскольку Windows XP на ноутбуке лицензионная (шла с ноутбуком), то сносить ее не стал. Выделил под BSD на диске 11 гигабайтов из 40.

Установка

Гружусь с загрузочного DVD c FreeBSD 8-RELEASE
Выбираю страну Russia, затем клавиатуру KOI-8R.
Захожу в Custom

Затем в Partiotion, разбиваю диск, оставив Windows XP
При выходе из Partition выбираю загрузчик обычный.
В Label разбиваю автоматически (нажатием кнопки "A"), смотрю размер раздела "/usr", удаляю его. Создаю "/usr" в половину меньшего размера, на оставшуюся половину создаю раздел "/home". Убеждаюсь, что для всех разделов кроме "/" включено "Soft Updates" (для скорости работы файловой системы).
В "Distribution" указываю минимальный набор,
Выбираю "Media" откуда буду ставиться как "CD\DVD"
Затем выбираю "Commit", начинается установка, она заканчивается успешно и быстро.

Потом использую "Последний шанс для конфигурирования":

Time Zone указываю, что CMOS не на UTC (ибо есть Windows XP еще) и выбираю свою зону времени.

В Networking в Interfaces (это самый первый пункт сверху) указываю для сетевой карты использовать DHCP, чтобы IP-адрес не задавать вручную. И не использовать IPv6. Там же задаю имя компьютера.

После чего выхожу из утилиты установки и соглашаюсь с предложением перезагрузить компьютер.

Замечу, что все же неудобная у FreeBSD программа установки. Вернуться в предыдущее меню - не всегда возможно. Далеко не первый раз ей пользуюсь, но вот из за того, что не туда ткнул пришлось второй раз переставлять.

Перезагрузка удачная

Перезагрузился компьютер хорошо, отключать ACPI как в DragonFlyBSD не пришлось.

После перезагрузки захожу под именем пользователя root без пароля, поскольку на пароля не задавал пока еще.

Свежие порты быстро как можно, но я не стал

Можно быстро получить доступ к портам - набору дистрибутивов приложений, уже готовых к установке (в момент установки все необходимые файлы будут автоматически скачиваться из интернета).

Можно, конечно, установить с компакт диска. Но как выяснилось в моих экспериментах, коллекция портов на загрузочном диске FreeBSD 8.0-release содержит "плохую" библиотеку "libtool22", на которую ругается система установки: "libtool-2.2.6a has known vulnerabilities" и предлагает обновить дерево портов. Кроме этого коллекция портов с диска содержит используемую мною очень удобную программу Midnight Commander 4.6, в то время как уже есть 4.7 с лучшей поддержкой UTF-8. Почему бы не использовать свежайшую коллекцию портов?

Скачиваю с помощью программы ftp:
ftp ftp.freebsd.org
имя пользователя: ftp
пароль: любой
cd /pub/FreeBSD/ports/ports
ls
вижу файл ports.tar.gz, его и нужно скачать:
recv ports.tar.gz
exit
распаковываю:
cd /usr
tar -xvf ports.tar.gz
долго ждал пока распакуется четверть гигабайта

Для установки нужного программного обеспечения находим его:
find /usr/ports -name че нам надо
и устанавливаем
cd /usr/ports/где нашли то что нам надо
make install clean

В принципе этого достаточно для установки свежайшего программного обеспечения, но хотелось более глобального - с обновлением самой системы.

Поэтому скачивать коллекцию портов как описано выше я в этот раз не стал. А описанное выше - это один из предыдущих вариантов установки, описанный мною, просто жалко удалять.

Скачивание исходных текстов системы, коллеции портов портов и документации с возможностью в дальнейшем быстро обновлять скачанное

Буду использовать csup (аналог cvsup, написанный на C). Он уже давным давно (с версии 6.1) оказывается встроен в FreeBSD, но в документации упоминается только вскользь.
В документации много написано о cvsup, который нужно установить сначала, а он тянет за собой Modula-3. Как хорошо, что можно без него обойтись.

Я так полагаю, что файлы настроек от cvsup ему подойдут. Беру файл настроек из примера: /usr/share/examples/cvsup, конкретно файл standard-supfile (поскольку он уже подготовлен для выкачивания релиза).

Создаю каталог/root/mysystem и копирую в него упомянутый выше cvs-supfile, затем редактирую этот файл:

mkdir /root/mysystem
cp /usr/share/examples/cvsup/cvs-supfile /root/mysystem/mysupfile
cd /root/mysystem
ee mysupfile

Замечание:
Выход из текстового редактора eeосуществляется с помощью нажатия на кнопку "ESC", ожидания небольшого и выбора из меню пунктов "Выйти" и "Выйти, записав" с помощью последовательного нажатия кнопки "a" два раза.

Замечание:
Читать текстовые файлы удобно с помощью программы less, программа распознает кое-какое форматирование этих файлов и позволяет листать текст в обоих направлениях (и вверх и вниз).

В файле mysupfile нужно указать, что буду обновлять и с какого сервера.

Собственно достаточно исправить:
*default host=cvsup2.ru.FreeBSD.org (думаю, что второй российский сервер достаточно доступен и не шибко загружен)
и добавить
ports-all tag=. (если не добавлять "tag=.", то ничего закачано не будет, ибо не существует портов с тегом как у операционной системы - то есть с тегом "RELENG_8_0", а без этого тега нельзя - ибо мне нужны исходные тексты именно релиза, а не последнейшей беты-версии 9)
аналогично для документации
docs-all tag=.
а также добавить
*default compress, чтобы передаваемые файлы сжимались при передаче, что позволит скачивать быстрее (как показала моя практика при высокой скорости подключения к интернету - это незаметно).

Еще для отфильтровывания файлов документации и портов на неинтересных для меня языках (все, кроме английского и русского) создать каталог /var/db/sup (так как в cvs-supfile прописана строка "default base=/var/db")
и скопировать в него файл refuse
из
/usr/share/example/cvsup/refuse.
Русский язык из файла /var/db/sup/refuseнужно удалить - ибо он нужен, пускай закачивается - это строчки с "doc/ru_*" и "ports/russian".

И запускаю обновление:
cd /root/mysystem
csup mysupfile - в документации (в частности внутри файлов /usr/share/examples/cvsup/*-supfile) написано, что нужно какие-то ключики использовать и что-то там про связь с X11, но для csup это не актуально.

Надо же! Работает файл от cvsup с csup. Не наврала документация.

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

Переключение между виртуальными тестовыми консолями

Чтобы не тратить зря времени, пока идет обновление переключаюсь в другую консоль и продолжаю настройку системы.

Сразу после установки FreeBSD дает возможность вести параллельную работу одновременно с нескольких виртуальных текстовых консолей. Эдакое переключение между окнами или между рабочими столами в системах с графическим интерфейсом.

Переключение между консолями осуществляется нажатием сочетания двух клавиш "Atl+F1", "Alt+F2", "Alt+F3" и так далее до "Alt+F8". В общей сложности получаем 8 независимых консолей. Первая из них - типа реальная, остальные типа виртуальные. Почему "типа"? Потому что по сути между реальной и виртуальными консолями нет никакой разницы, за очень редким исключением.

Каждая консоль требует отдельного входа пользователя.

Переключаюсь на вторую консоль (она же первая виртуальная) по нажатию "Alt+F2" (наверху будет написано, что это консоль "ttyv1") и захожу от имени пользователя root.

Руссификация текстовых консолей

Данный текст полностью повторяет руссификацию DragonFlyBSD, описанную в моем тексте, то есть в этой части системы FreeBSD и DragonFlyBSD - идентичны, что неудивительно.

Для устранения ожидаемых проблем с псевдографикой которая будет нужна, когда таки удастся запустить MidnightCommander, редактирую /etc/ttys параметры виртуальных консолей, заменяя в восьми строчках, отвечающих за восемь консолей, "cons25" на "cons25r", с помощью редактора "ee":
ee /etc/ttys

Приятно, что для русского языка в FreeBSD есть такие вещи (а также русскоязычная версия сайта FreeBSD). Не каждый язык может похвастаться такими возможностями с FreeBSD.
Прописываем в /etc/rc.conf через
ee /etc/rc.conf

Раскладку клавиатуры в koi-8r:
Уже есть keymap="ru.koi8-r"(собственно ее туда уже прописала программа установки операционной системы) переключение на русский язык и обратно выполняется совсем не логично - клавишой "Caps".
Если хочется переключаться по сочетанию двух клавиш "Ctrl+Shift", то нужно указать по другому, а именно keymap="ru.koi8-r.win".
Ставлю русские шрифты в кодировке cp866 (т.н. DOS-кодировка или OEM-кодировка Windows) (ибо в koi8-r шрифты малопрактичны по какой то причине, которую я уже не помню):
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"

И перекодировку для вывода в кодировке koi-8r на экран с шрифтами в кодировке cp866:
scrnmap="koi8-r2cp866"

А чтобы мышиный курсор не портил псевдографику еще:
mousechar_start="3"

Очень подробную статью по русификации текстовой консоли см. по адресу:

http://www.posix.ru/system/syscons_ru
или тут
http://unix.ginras.ru/old/freebsd/mini-howto/syscons.ru.html

Можно много еще чего сделать. Например, более красивые шрифты поставить. Но мне текстовая консоль нужна постольку-поскольку, ибо основное рабочее программное обеспечение будет работать в графическом режиме с X11, а там - свои шрифты.

Reboot 2

Переключаюсь на первую консоль нажатием "Alt+F1". Убеждаюсь, что процесс закачки файлов программой csup завершен.

Перезагружаю компьютер, написав "reboot".

Шрифты после перезагрузки значительно похудшели. Это заметно на последнем этапе загрузки - ибо русские шрифты подключаются незадолго перед появлением запроса имени пользователя.

Программное обеспечение - первой необходимости для текстовых консолей

При попытке что либо установить из портов первым делом ругается: " Vulnerability check disabled, database not found". Установка продолжается, но зачем мне нужна потом путаница с установленным программным обеспечением? Прерываю установку по нажатию "Ctrl+Break".

Ищу в интернете по этой фразе... Понятно, нужна программа контроля уязвимостей в установленном программном обеспечении,
называется она portaudit. Ищу где она в портах, так как то место, где она должна находится, согласно интернетовским советам - не существует:
find /usr/ports -name portaudit.
Нашел, устанавливаю portaudit:
cd /usr/ports/ports-mgmt/portaudit
make install clean
Затем создаю вышеупомянутую базу данных (как это делать она сама по завершении установки подсказывает на экране):
/usr/local/sbin/portaudit -Fda (программа скачивает базу данных из интернета, наверняка следует регулярно ее обновлять).
Теперича, если я правильно понял, если устанавливаемое программное обеспечение имеет известные уязвимости, то поставить мне его не дадут.

Мне прежде всего нужны mc (Midnight Commander), lynx и portupgrade - соответственно мощная программа для манипуляции файлами (его широкоизвестные аналоги в Windows - это FAR и Total Commander), веб-браузер умеющий работать в текстовом режиме и программа, которая будет обновлять устаревшие порты (при условии, что "csup" будет обновлять коллекцию портов).

Нахожу их в коллекции портов и устанавливаю:

find /usr/ports/ -name mc
cd /usr/ports/mics/mc
make install clean

и

find /usr/ports -name lynx
cd usr/ports/www/lynx
make install clean

и

find /usr/ports -name portupgrade
cd /usr/ports/ports-mgmt
make install clean

При установке возникают различные диалоговые окна, где просят указать опции устанавливаемых программ. Там везде отказываюсь от IPv6, соглашаюсь с поддержкой Unicode (или UTF-8), отказываюсь от X11 (потом она будет, но пока нужно чтобы система нормально работала без нее), кое-где соглашаюсь с кое-какими другими интересными опциями, например, с поддержкой анимации в файлах формата PNG (интересно как это они в текстовом режиме собираются PNG отображать, да еще с анимацией) и поддержку цветов в "lynx" и "use libsigsegv" для "лучшей диагностики".

Замечание:
Диалоговое окно с запросом опций появляется один-единственный раз. Если после хочется задать опции еще раз (при повторной установке программы), то нужно принудительно вызвать это окно:
make config

"Midnight Commander" умудрился затянуть при своей установке аж "perl" и "Python" и еще много чего (помимо самого себя еще 13 пакетов). Монстр!

Установка происходит не быстро.

Установленные программы прописали себя в переменной среды окружения, задающей пути поиска программ, но для того, чтобы интерпретатор командной строки увидел это новое значение необходимо выйти (по команде exit) и зайти заново (под пользователем root, других пока нет).

"Midnight Commander" на FreeBSD завелся сразу же, не пришлось настраивать переменные среды окружения как в DragonFlyBSD. И сочетание клавиш "Ctrl+O", закрывающее и открывающее панели, работает.

"Lynx" пока выводит сайты русскоязычные сайты транслитом. Молодец, догадался!

Хоть это и не надоть, но делаю красивые шрифты в текстовом режиме

Не надо это потому что X11 - будет основным режимом работы. Но из любопытства попробую шрифты, рекламируемые на странице http://www.posix.ru/system/syscons_ru/

Чтобы был порядок, класть будем сюда:
cd /root/mysystem
Скачиваю файл с самого низа страницы:
lynx http://www.posix.ru/system/syscons_ru/
кириллические raw-шрифты (еще можно взять отсюда)
Распаковываю их:
tar -xvf fonts-ru.tar.bz2, к слову, есть уже "Midnight Commander", запускаемый командой mc, и потому можно поступить проще - зайти в архив как в каталог и скопировать его из одной панели в другую.

Читаю документацию к шрифтам. Она - по-русски. Хваленый выше less не смог вывести файл с документацией на экран правильно - заменил русские буквы на их коды в угловых скобках.
Программа cat ведет себя двояко:
cat README.koi | more такую же лабуду рисует как и "less",
а
cat README.koi выводит нормально. Хотя смысла в этом нет, ибо там можно прочитать только самый конец файла.

Я так понимаю, это еще locale нужно настроить.

В конце концов есть уже установленный mc ("Midnight Commander") - с его помощью файл документации можно прочитать нормально.

Интересующая меня кодировка "cp866" - это только шрифты "UniCyr*" и "alt-"

Выбираю шрифты:
cd /root/mysystem/fonts
ls
vidcontrol -f "8x16" "название файла с шрифтом"

Из всего многообразия выбрал шрифты "UniCyr".

Решил попробовать еще шрифты из Frenzy (этот дистрибутив изначально разрабатывается хорошей поддержкой русского языка). Официальный сайт дистрибутива до версии 1.1 включительно: http://frenzy.org.ua/, версия 1.2 (именно оттуда взял шрифт): http://frenzy.bspu.ru.

Как выковырял шрифт: скачал с помощью "Lynx" образ SDK Frenzy, вариант 1.2-final-micro (ftp://ftp.ufanet.ru/pub/unix/BSD/Frenzy/1.2/sdk/frenzy-sdk-1.2-final-mic...), нашел там файлы шрифтов в "\buildscripts\packages\Frenzy\frenzy-fonts-syscons-1.0.tbz"

Аналогично:
vidcontrol -f "8x16" "название файла с шрифтом"

Выбрал шрифт "866-tatar-8x16.fnt"

Скопировал все шрифты от Frenzy в "/usr/share/syscons/fonts"
Прописал выбранный шрифт в "/etc/rc.conf":
font8x16="866-tatar-8x16"
Перезагрузил компьютер. Шрифт выглядит хорошо.

Для полной руссификации осталось задать locale пользователя.

Добавление пользователей и окончательная локализация терминала

Для "root" я этого делать не буду, чтобы не было нечитаемых символов в случае аварийно-восстановительных работ, пускай лучше по английски пишет. Можно вшить русский шрифт в ядро FreeBSD на этот случай, но по-моему ради этого не стоит вносить настройки в ядро.

Создаю пользователя и укажу ему "locale" специфическим для FreeBSD способом - через класс пользователя. Таким образом заданные переменные среды окружения не будут зависеть от оболочки (от "shell"), да и выглядит данный механизм продумано.

Запускаю программу:
adduser
Указываю: имя входа, имя полное, группа логина "wheel" (иначе команда su, запущенная из-под этого пользователя, откажется исполняться и я не смогу из простого пользователя превращаться в "root"), класс "russian" (этот класс и есть окончательная локализация).

Выхожу из-под пользователя "root" командой exit. Захожу под новым пользователем, проверяю - меня распознают как русскоязычного, можно писать непосредственно в командной строке по-русски хотя это и бессмысленно (у пользователя "root" такого не получается, ему можно писать по-русски только внутри текстового редактора "Midnight Commander"). Кое какие надписи выводятся уже по-русски, в частности, русским стал "Midnight Commander".

Запускаю программу su, получаю права "root", с руссификацией все отлично.

Так и оставлю - непосредственно под "root" буду заходить, если не нужна полная руссификация и в аварийных случаях.

А если нужна полная руссификация для пользователя "root", то заходить буду вводя пароль простого пользователя, а потом буду получать права админа буду с помощью команды su.

Обновление установленных программ

Данную операцию нужно проводить регулярно. Перед тем как начнется перекомпиляция системы - выполнил ее, не зря, оказалось, пока я возился с новой системой уже вышли небольшие обновления.

Сначала обновляю коллекцию портов (а заодно и исходные тексты операционной системы и документацию):

csup /root/mysystem/mysupfile

Затем, как это делается описано в документации к FreeBSD:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html обновляю установленное программное обеспечение:

Сначала проверяю базу данных установленных пакетов:
pkgdb -F
никакой плохой ругани система не выдает

Потом обновляем установленные программы:
portupgrade -ai

Генерация нового ядра

За основу беру ядро GENERIC. Параметры компиляции ядра сохраняю не среди исходных текстов - во первых, так удобнее, а во-вторых, иначе бы при каждом обновлении исходников файл с моими настройками исчезал бы.

cd /usr/src/sys/i386/conf
cp /usr/src/sys/i386/conf/GENERIC /root/mysystem/MYKERNEL
ls -s /root/mysystem/MYKERNEL

Перезагрузился, при загрузке выбрал вариант "6. Выход в командную строку". В командной строке написал "boot -v", чтобы видеть подробную диагностику загрузки системы.

После загрузки посмотрел в "/var/log/messages" и на всякий случай dmesg. Узнал, что драйвер мыши PS/2 (psm0) используется, а я то хотел его отключить, также узнал, что ни последовательных портов ни параллельных нет, и что последовательные порты называются "uart", а не "sio" как в DragonFlyBSD.

Редактирую MYKERNEL - указал внутри, что зовется ядро теперича "MYKERNEL", закоментировал отладку ядра, закоментировал лишние устройства, закоментировал IPv6. Ничего нового не добавлял.

Намекнул, что можно оптимизировать компилированное с учетом возможностей процессора моего ноутбука:
ee /etc/make.conf
Добавил в него:
CPUTYPE?=k8

Ну и канонический процесс компиляции новой системы

cd /usr/src
Сначала собираем "мир" - всевозможные программы, являющиеся частью системы:
make buildworld
Затем - само ядро:
make buildkernel KERNCONF=MYKERNEL
Смело поставим, если че, как откатить прочитаю в интернете. Вообще для более рисковых случаев есть механизм одноразовой загрузки нового ядра, но я не стал его искать. Поставил новое ядро как основное:
make installkernel KERNCONF=MYKERNEL
reboot

Процесс компиляции - очень долгий.

После перезагрузки заметил небольшое ускорение процесса загрузки операционной системы.

Установка X11 и иже с ним

Описано отдельно:
http://faq1c.gorbunov.ru/node/57

Компьютерные вопросы: 
2002-2012 ©