From: Семёнов Андрей <wilfre@mail.ru.>
Newsgroups: email
Date: Mon, 09 Mar 2006 14:31:37 +0000 (UTC)
Subject: Установка FreeBSD методом crossbuild
Возможно, сегодня уже не так проблематично скачать установочную болванку
(около 650 Мб), но бывают ситуации, когда такой возможности нет.
Моя ситуация: привезли рабочую станцию. Ставлю FreeBSD. В момент запуска
BIOS выдал надпись: EM64T supported.
Думаю, а чего бы и не сделать себе полноценный 64-bit WorkStation (мало
ли, пользы вообще-то в делах администрирования никакой, но ради
эксперимента - сойдет). Под рукой оказался только собранный дома диск с
6.0-RELEASE-p4 FreeBSD/i386. Поставил ее. Посмотрел, что пишут в
Makefile.
Там написано, что можно и crossbuild сделать, никто не запрещает. Вот,
думаю им и займусь.
Соответственно, последовательность такой сборки должна быть такой:
(поскольку для линковки ядра под отличающуюся от `uname -m` архитектуру
будут использоваться библиотеки соответствующей целевой архитектуры, то,
их сначала и собираем)
Всё это собралось. Далее, метод проб и ошибок:
Нельзя:
#make installworld TARGET_ARCH=amd64
т.к. в процессе установки заменяются некоторые важные библиотеки, в том
числе /libexec/ld.elf.so, которые при дальнейших запусках любых
приложений будут требовать ядра, собранного под amd64, а перезапуск
делать пока что рано). Однако, "#make installkernel TARHET_ARCH=amd64"
уже можно сделать.
Был найден такой способ решения проблемы установки world'а:
Для начала устанавливаем мир в некоторый отличный от / каталог:
монтируем их (напоминяю, cwd у нас до сих пор - /mnt, куда смонтирован
корневой раздел установленной уже на диск системы):
# mount /dev/ad0s1f usr
# mount /dev/ad0s1d var
Всё. Теперь можно распаковывать имеющийся архив world'а (ядро мы уже
установили ранее), однако, установщик, равно как и installworld, ставят
на некоторые каталоги (из mtree) и файлы системный флаг schg, который не
позволяет производить никаких изменений в соответствующих
каталогах/файлах, и его надо будет с них предварительно снять:
# chflags -R noschg *
# tar -xfp usr/local/world_amd64.tar
tar, кстати, эти флаги на файлах восстановит, останется только kernel, в
принципе, если используется не GENERIC - то после пересборки все равно
скрипт установки флаги установит, если же GENERIC - не грех и снова
пересобрать, благо на таких системах этот процесс не такой уж и долгий
(10-20 минут максимум).
Всё. На этом можно считать crossbuild-установку системы завершённой.
#exit
В окне sysinstall'а просто выходим из установщика, он перегрузит машину.
Теперь можно смело грузиться с жесткого диска. Система и ядро у нас
теперь полноценные amd64:
# uname -m
amd64
Ну, при желании, можно удалить всё из /usr/obj, /usr/local/amd64 и
собственно архив world'а:
PS: Есть только один момент: порты у меня были предновогодние, может
быть, сегодня ситуация и исправлена, но при запуске сборки cvsup из
портов получил сообщение следующего содержания (в переводе): "CVSup не
поддерживает запуск в графическом режиме при сборке под 64-хбитную
платформу. Компилирую без графического интерфейса."
Мне лично это не страшно, но есть подозрения, что это не единственный
порт, не дружащий в графике с 64-bit. Возможны казусы в дальнейшем, но
это отдельная история.
PPS: Указанный метод установки подходит в принципе для любой архитектуры
при условии, конечно, что исходный установочный диск собран под
поддерживаемую Вашим процессором архитектуру.