The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Установка FreeBSD методом crossbuild (freebsd make_world install)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: freebsd, make_world, install,  (найти похожие документы)
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 сделать, никто не запрещает. Вот, думаю им и займусь. Соответственно, последовательность такой сборки должна быть такой: #make buildworld TARGET_ARCH=amd64 #make buildkernel TARGET_ARCH=amd64 (поскольку для линковки ядра под отличающуюся от `uname -m` архитектуру будут использоваться библиотеки соответствующей целевой архитектуры, то, их сначала и собираем) Всё это собралось. Далее, метод проб и ошибок: Нельзя: #make installworld TARGET_ARCH=amd64 т.к. в процессе установки заменяются некоторые важные библиотеки, в том числе /libexec/ld.elf.so, которые при дальнейших запусках любых приложений будут требовать ядра, собранного под amd64, а перезапуск делать пока что рано). Однако, "#make installkernel TARHET_ARCH=amd64" уже можно сделать. Был найден такой способ решения проблемы установки world'а: Для начала устанавливаем мир в некоторый отличный от / каталог: #make installworld TARGET_ARCH=amd64 DESTDIR=/usr/local/amd64 Затем, архивируем его tar'ом (для упрощения дальнейшего переноса этого всего в /) #cd /usr/local/amd64 && tar cf /usr/local/world_amd64.tar * И только теперь позволим себе перезагрузиться. При перезагрузке ставим в привод наш исходный установочный i386-диск и грузимся с него. В запустившемся при запуске с диска sysinstall в пункте FixIt запускаем live-систему: FixIt->Live filesystem->CD-ROM Далее, придется вспомнить, какой диск был целевым при первоначальной установке системы на жесткий диск, если таковых было несколько. Если же жесткий диск один (или же установленных *BSD на дисках до сих пор не было), то легко это выяснить: # ls /dev/ad*s*a /dev/ad0s1a В моём случае это оказался ad0, причем на 1-м слайсе, корневая файловая система на разделе a Его и монтируем: # mount /dev/ad0s1a /mnt Переходим в mnt и выясняем какие еще файловые системы и на какие каталоги монтировались при установке: # cd /mnt && cat etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b none swap sw 0 0 /dev/ad0s1a / ufs rw 1 1 /dev/ad0s1e /tmp ufs rw,noexec 2 2 /dev/ad0s1f /usr ufs rw 2 2 /dev/ad0s1d /var ufs rw,noexec 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 Здесь нам понадобятся: /usr и /var монтируем их (напоминяю, 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'а: # rm -Rf /usr/obj/* # chflags -R noschg /usr/local/amd64 && rm -Rf /usr/local/amd64 /usr/local/world_amd64.tar PS: Есть только один момент: порты у меня были предновогодние, может быть, сегодня ситуация и исправлена, но при запуске сборки cvsup из портов получил сообщение следующего содержания (в переводе): "CVSup не поддерживает запуск в графическом режиме при сборке под 64-хбитную платформу. Компилирую без графического интерфейса." Мне лично это не страшно, но есть подозрения, что это не единственный порт, не дружащий в графике с 64-bit. Возможны казусы в дальнейшем, но это отдельная история. PPS: Указанный метод установки подходит в принципе для любой архитектуры при условии, конечно, что исходный установочный диск собран под поддерживаемую Вашим процессором архитектуру.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, rootus (?), 15:26, 09/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    БРАВО!
    Так держать!
     
  • 1.2, marx (?), 15:33, 09/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо! это полезная информация!
     
  • 1.3, дЛХРПХИ йЮПОНБ (?), 17:15, 09/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    1) Почему tar-архив без компрессии?

    2) Не проще ли было сделать нормальный дистрибутив для AMD64, положить его на локальный FTP-сервер и ставить с него сколько угодно?

     
     
  • 2.5, GateKeeper (??), 00:17, 10/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    1) Зачем компрессия? Разве только больше времени на выпивание кружки кофе требуется? (Если винт маленький, кто ж запрещает:
    # tar cf - * | bzip2 -9 > /usr/local/world_amd64.tar.bz2

    2) make release из /usr/src/release у меня дома, например, на i386 (даже процессором amd64 не держится) проваливается постоянно, сборка release методом crossbuild похоже, исключена полностью
    Есть предположения почему так: даже если процессором 64-bit поддерживается, запущено-то 32-битное ядро, а соответственно, оно не сможет выполнить 64-битные приложения, которые устанавливаются в каталог сборки release после make buildworld и make buildkernel. Попробуйте сами, если не верите. И еще раз повторяю: кому проще просто скачать установочный диск на офсайте - дык, хорошо! Когда же такой возможности нет - installworld описанным способом - есть выход. А уже на 'uname -m'=amd64 можно делать свой make release, который и будет стопроцентным FreeBSD-{maj}.{min}-amd64.disc1.iso

     
     
  • 3.8, Димитрий Карпов (?), 12:40, 10/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    1) А разве сокращение объёма архива не экономит время записи на жёсткий диск и не уменьшает фрагментацию?

    2) Зачем вообще нужно "выполнять 64-битные приложения, которые устанавливаются в каталог сборки"?
    Я не предлгалал собрать полноценный бутявый CD-ROM. Я предлагал собрать файлы base.aa, base.ab и т.д., т.е. построить не образ CD-ROM, а образ FTP-сервера с дистрибутивом.

     
     
  • 4.10, GateKeeper (??), 12:07, 11/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Пожалуйста, вот Вам и домашнее задание: статья "Изготовление образа FTP-ресурса методом crossbuild"
     

  • 1.4, c0x (??), 17:24, 09/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    подобным образом постоянно ставлю себе собранный в чрут-окружении CURRENT со времен начала 5-й ветки.

    лучше всетаки tar pxf

     
     
  • 2.6, GateKeeper (??), 00:18, 10/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Да, уже поправил в статье, ждём одобрения Максима.
     

  • 1.9, theCollision (ok), 00:30, 11/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Господин Автор, а как с /etc поступил?
     
     
  • 2.11, GateKeeper (??), 12:12, 11/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Никак. Работает и могу даже объяснить почему:
    # cd /usr/src/etc && diff etc.amd64/ttys etc.i386/ttys

    Гляньте на досуге. Это единственные архитектурозависимые файлы в distribution.

     

  • 1.12, theCollision (ok), 12:27, 11/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    чтож вопросов боле не имею! Посоветовал бы написать скрипт вам, для автоматизации и приложить к статье!
     
  • 1.13, Гость (?), 23:03, 11/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо за статью, очень интересно
     
  • 1.14, AD (ok), 10:27, 22/04/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    при make installkernel TARHET_ARCH=amd64
    еще надо DESTDIR=/ выставить, иначе не инсталлится ядро.
     
  • 1.15, Zont (?), 10:31, 25/10/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    За строчки кросс-компиляции спасибо... но изврат.. ещё какой! Люди давно уже VMware придумали. Там можно и 32 и 64 и 2х процовую эмуляцию включить.
     
  • 1.16, arez (?), 11:35, 27/07/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мои пять копеек. Если в системе используется ccache, отключите его на время манипуляций. Это бага сикеша, он не учитывает такие нюансы, как версия компилятора и архитектура.
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру