⌨ Labor omnia vincit ☮

OpenBSD – Installation from USB flash sticks

Posted in OpenBSD by anaumov on 03.10.2013

В официальной документации OpenBSD нет информации об установке этой системы с usb flash. Этот пробел был закрыт пользовтелями: только в рунете я нашел 3 руководства как развернуть систему с внешнего usb-носителя. Тем не менее, как я уже сказал, официального пути подготовки стика нет, и именно поэтому этот вопрос остается открытым. Пользователи придумывают все более простые способы подготовки и установки системы, а так же деляться способами решения проблем, которые встречают. Собственно… об этом и мой следующий пост ;)

Команда разработчиков OpenBSD не предоставляет iso-образы для usb flash. На ftp-/http-зеркалах образы только для floppy и CD. Тем не менее, в процессе создания установочного usb flash, нет ничего сложного. Я расскажу по шагам об этом процессе, но это не значит, что вам следует просто скопировать и запустить эти же команды. Вы должны понимать что вы делаете и почему вы делаете это именно так.

Creating

Итак, начать я предлагаю с чтения fdisk(8), FAQ 14 и disklabel(8). Эти программы нам понадобятся для создания разделов. Система видит стик как sd0. На ней кое-что есть, удаляем все, создаем раздел по новой.

# fdisk -iy sd0    
Writing MBR at offset 0.

# disklabel -E sd0
Label editor (enter '?' for help at any prompt)
> p m
OpenBSD area: 64-7807590; size: 3812.3M; free: 0.0M
#                size           offset  fstype [fsize bsize  cpg]
  a:          3812.3M               64  unused                   
  c:          3817.5M                0 ISO9660
> d *
> p m     
OpenBSD area: 64-7807590; size: 3812.3M; free: 3812.3M
#                size           offset  fstype [fsize bsize  cpg]
  c:          3817.5M                0  unused
> a a
offset: [64] 
size: [7807526] 
FS type: [4.2BSD] 
Rounding size to bsize (32 sectors): 7807520
> p m
OpenBSD area: 64-7807590; size: 3812.3M; free: 0.0M
#                size           offset  fstype [fsize bsize  cpg]
  a:          3812.3M               64  4.2BSD   2048 16384    1 
  c:          3817.5M                0  unused
> q
Write new label?: [y]

После создания разделов, как и обычно, создаем ФС при помощи newfs(8), а также проверяем ее целостность:

# newfs /dev/rsd0a
# fsck -fp /dev/rsd0a
/dev/rsd0a: 1 files, 1 used, 1920710 free (14 frags, 240087 blocks, 0.0% fragmentation)

Если fsck не показал каких-либо ошибок, подключаем (монтируем) наш стик и делаем его загружаемым. Для этого нам надо снова обратиться к документации. На этот раз нас интересуют installboot(8) и снова четырнадцатая глава FAQ, где описывается процесс загрузки.

# mount /dev/sd0a /mnt    
# cp /usr/mdec/boot /mnt
# cp /bsd.rd /mnt/bsd
# /usr/mdec/installboot -v /mnt/boot /usr/mdec/biosboot sd0
boot: /mnt/boot proto: /usr/mdec/biosboot device: /dev/rsd0c
/mnt/boot is 3 blocks x 16384 bytes
fs block shift 2; part offset 64; inode block 24, offset 936
master boot record (MBR) at sector 0
        partition 3: type 0xA6 offset 64 size 7807526
/boot will be written at sector 64

Давайте вспомним как загружается OpenBSD. Понимание этого процесса поможет разобраться в проблеме, если вдруг наш стик откажется загружаться. Итак, существует 4 ключевых шага (или компонента, кому как нравится), отвечающих за процесс загрузки.

  1. MBR (Master Boot Record). Это первый физический сектор (512 байт) на диске. Он содержит первичную таблицу разделов и маленькую программу для загрузки PBR (Partition Boot Record) – загрузочной записи раздела. Кстати, иногда термин “MBR” используется только для обозначения кодовой части этого первого блока на диске вместо всего первого блока (включающего и таблицу разделов). Важно понимать значение понятия “инициализировать MBR”. В терминологии OpenBSD это перезапись всего MBR сектора, а не только кода. Я не думаю, что вам придётся с этим столкнуться. Вместо этого используйте ключ “-u” fdisk(8) (“fdisk -u wd0″). MBR OpenBSD информирует о своей работе сообщением Using drive 0, partition 3., указывая с какого диска и с какого раздела будет производиться загрузка PBR.
  2. PBR (Partition Boot Record), также называемый biosboot(8) – первый физический сектор раздела OpenBSD диска (после содержащего код имени файла). PBR является загрузчиком первой ступени. Он загружается из MBR и сам, в свою очередь, загружает загрузчик OpenBSD второй ступени, boot(8). Как и MBR, PBR занимает всего 512 байт. Этого мало для работы полнофункционального приложения для работы с ФС, поэтому PBR находится в отдельном BIOS-доступном разделе диска /boot.
    PBR устанавливается при помощи installboot(8). PBR сообщает о своей работе при помощи сообщения Loading…, выводя точку при каждой попытке чтения блока файловой системы.
  3. boot(8) или загрузчик второй ступени (его загружает PBR – загрузчик первой ступени), задача которого обеспечить доступ к файловой системе OpenBSD, найти там ядро и загрузить его. boot(8) передает параметры загрузки ядру. После загрузки он пытается найти /etc/boot.conf и, если он есть (в нашем случае его нет), прочитать его и передать соответсвующую информацию (инструкции). Вспоминаем приглашение boot>, с помощью которого мы можем сообщить что-то ядру. По умолчанию пользователю дается пять секунд на ввод инструкций, и, по истечению этого времени, исполняются задачи по умолчению: грузится ядро, bsd, с корневого раздела первого жесткого диска. Загрузчик второй ступени обнаруживает (проверяет) устройства, используя средства BIOS (поскольку ядро OpenBSD еще не загружено).
  4. Ядро bsd.rd. Это окончательный этап, загрузка ядра OpenBSD в память и запуск ОС. Я должен напомнить о необходимости копирования ядра нужной архитектуры. Это бинарный файл, и в примере выше подразумевается, что мы работаем с двумя системами одинаковой архитектуры. В случае, если вы создаете стик, к примеру, на ARM, а использовать его хотите на i386, то не забудьте скопировать ядро i386.

Итак, весь процесс загрузки на экране будет выглядеть следующим образом:


Using drive 0, partition 3.                      <- MBR
Loading....                                      <- PBR
probing: pc0 apm pci mem[635K 510M a20=on]       <- /boot
>> OpenBSD/i386 BOOT 3.21
boot>
booting hd0a:/bsd 4464500+838332 [58+204240+181750]=0x56cfd0
entry point at 0x100120

[ using 386464 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993       <- Kernel
        The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2013 OpenBSD.  All rights reserved.  http://www.OpenBSD.org

OpenBSD 5.3 (GENERIC) #50: Tue Mar 12 18:35:23 MDT 2013
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC

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

Возвращаемся к наполнению нашей флешки. Там уже должны быть boot и bsd. Теперь время базовых компонентов системы. Создаем каталог “5.3/i386″ и копируем в нее установочные файлы:

# mkdir -p /mnt/5.3/i386
# cd /mnt/5.3/i386/
# wget "ftp://openbsd.cs.fau.de/pub/OpenBSD/5.3/i386/*"

Да, в свежей OpenBSD нет wget. Я думаю, что вы ее уже установили? :)

# pkg_add -v ftp://openbsd.cs.fau.de/pub/OpenBSD/5.3/packages/i386/wget-1.14.tgz

Обратите внимание на адрес ftp-сервера, он находится в северной Баварии. Возможо вам будет ближе тянуть это все с другого зеркала.
Кстати, по поводу серверов и их зеркал. Как вы знаете, проектом OpenBSD поддерживается лишь 3 последних релиза, поэтому, используя официальные зеркала, не получится установить старые версии этой системы. Я не знаю, понадобиться ли это кому-то, но на всякий случай оставлю тут ссылку на сервер, где можно найти файлы со старыми версиями OpenBSD (необходимые для установки и обычные пакеты).
Еще кое-что: я заметил, что установщик игнорирует (просто не видит) архивы для других версий OpenBSD, чем сам установщик, т.е. если вы подготавливаете флешку, к примеру, в 5.1, то компоненты системы для 5.3 он не предложит установить. Решается это банальным переименовыванием архивов (51 на 53) или копированием того ядра, версию OpenBSD которой вы хотите сейчас установить.
Не забывайте, что из-за используемой логики создания установочной usb flash, мы можем иметь на одном стике все необходимые компоненты для разных версий OpenBSD и разных архитектур.

Снова возвращаемся к наполнению нашей флешки. Проверяем целостность загруженных данных:

# pwd
/mnt/5.3/i386/
# for i in *; do grep -e "($i)" SHA256 >> ../sha ; done;
# cksum -c ../sha || echo "FAILED!!!"

Отмонтируем и еще раз проверяем:

# cd
# umount /mnt
# fsck -fp /dev/rsd0a
/dev/rsd0a: 32 files, 227743 used, 1692968 free (16 frags, 211619 blocks, 0.0% fragmentation)

Похоже, что все в порядке и наш установочный usb flash готов ;)

Installing

Я уверен, что мне не надо давать вам советов по поводу установки OpenBSD. Сегодня этот процесс еще легче, чем, к примеру, в openSUSE или Ubuntu, хоть и проходит в консоли (и даже без curcess). Эта часть описывает решение проблемы, связанной с использованием usb flash в качестве installation media. Дело в том, что, так как установка с usb официально не поддерживается, установщик не найдет наш стик во время установки. Вот такую ошибку мы получим при попытке подмонтировать флешку:

Location of sets? (cd disk ftp http or 'done') [disk]
Is the disk partition already mounted? [no]
Avaliable disks are: sd0 wd0.
Which one contains the install media? (or 'done') [sd0]
mount_cd9660: /dev/sd0c on /mnt2: Invalid argument

Можно попробовать и вот так, но желаемого результата это тоже не даст:

Location of sets? (cd disk ftp http or 'done') [disk]
Is the disk partition already mounted? [yes]
Pathname to the sets? (or 'done') [5.3/i386]
The directory '5.3/i386' does not exist.

Вообще, на этот вопрос, про already mounted, не так-то и просто ответить, не видя вывод команды mount :)
Тут два пути решения: перед началом установки у нас выбор (I)nstall, (U)pgrade or (S)hell. Мы можем зайти в shell и проверить подключена ли флешка, и, если не подключена, то подключить в ручную. Вторым путем является то же самое, но непосредственно в тот самый момент, когда нам это надо, т.е. сейчас. Для этого надо ввеси символ восклицательного знака. После этого мы оказываемся в консоли. Подмонтируем стик, выйдем из консоли обратно в программу установки и скажем ей где именно находятся наши архивы:

Location of sets? (cd disk ftp http or 'done') [disk] !
# mount /dev/sd0i /mnt2
# exit
Location of sets? (cd disk ftp http or 'done') [disk]
Is the disk partition already mounted? [yes] yes
Pathname to the sets? (or 'done') [5.3/i386] /mnt2/5.3/i386

После этого установщик, как и обычно, спросит о компонентах, которые мы хотим установить, и установка продолжится. Не забывайте, что в качестве источника можно использовать http/ftp сервера. Других проблем, связанных с установкой системы с usb flash, я не встречал… и, надеюсь, не встретите и вы. Удачи ;)

About these ads

2 Responses

Subscribe to comments with RSS.

  1. […] Инструкция, как поставить OpenBSD с флэшки; […]

  2. Igor said, on 19.11.2013 at 10:25

    Xак на хаке и хаком погоняет. Я использую опенок именно потому что там можно обойтись и без этого.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: