- PVSM.RU - https://www.pvsm.ru -

Автосборка загрузочных образов KolibriOS в Linux на отдельно взятой машине

Предлагаем Вашему вниманию статью, написанную righthearted [1], одним из наших четырёх студентов на Google Summer of Code в этом году [2]. Статья рассказывает о том, как он настраивал автосборку KolibriOS в Linux на своём компьютере. Задача не совсем тривиальная.

image
Этот пост будет полезен для тех, кто хочет проверить возможность добавления своей программы в официальную автосборку KolibriOS [3], при этом не ломая сервер. Наглядным примером этому является сам автор этой статьи [4]. При попытках сдать квалификационное задание для Google Summer of Code [5], многократно ломалась [6] итальянская версия автосборки [7], и один раз даже завис сервер, на котором хранятся исходники всей системы. Чтобы такое не повторялось, в данной статье приводится инструкция по настройке автосборки загрузочных образов KolibriOS [8]. Всё описанное проверялось на 64-разрядной версии Ubuntu. Для остальных дистрибутивов процедура не должна сильно отличаться. По возможности, я буду расписывать каждый шаг, чтобы не упустить ничего важного.

Подготовка исходников

Итак, для начала нам нужно будет установить систему контроля версий Subversion [9]. Это делается простой командой в терминале:
apt-get install subversion
Далее можно подготовить папку, куда будем скачивать все исходники. В моём случае, я решил создать папку по пути /home/user/kolibrios:
mkdir ~/kolibrios
Перейдя в свежеиспечённую папку, говорим subversion скачать исходники системы в данную папку. Этот шаг может занять какое-то время, в зависимости от скорости вашего интернет-соединения:
cd ~/kolibrios
svn co svn://kolibrios.org
После того, как скачаются все файлы, можете попробовать перейти в папку kolibrios/data/rus и сказать make, авось соберётся 0_о. А если нет, читаем дальше.

Всё для Ассемблера

Колибри разрабатывается в основном на ассемблере, поэтому нам понадобятся fasm, nasm и fasmdep.
Fasm можно скачать [10] с официального сайта и установить ручками в папку /usr/bin.
Если по порядку, то распаковав скачанный архив в папку fasm, переходим в нее и копируем бинарник в /usr/bin/fasm
cd ~/Downloads/fasm
cp fasm /usr/bin
Возможно придется включить возможность запускать этот бинарник:
chmod +x /usr/bin/fasm
Так же для копирования могут потребоваться права администратора, так что можно использовать sudo (в терминале), или gksu и kdesudo (в GTK и KDE соответственно). Внимание, будьте очень осторожны при действиях с правами суперпользователя.
Nasm установить гораздо проще. Просто устанавливаем используя apt-get
apt-get install nasm
Fasmdep придется собирать из исходников при помощи fasm'а
cd ~/kolibrios/data/common/fasmdep
fasm fasmdep.asm
После этого, готовый fasmdep тоже нужно скопировать в /usr/bin
cp ~/kolibrios/data/common/fasmdep/fasmdep /usr/bin/

Танцы с бубном и линковка

Хоть KolibriOS и разрабатывается в основном на языке ассемблера, есть возможность писать программы и на языках высокого уровня.
Чтобы кросс-компилировать значительную часть кода на Си, нам предстоит установить mingw32 (или toolchain от Serge). За одно установим утилиты-архиваторы kpack и kerpack.
Mingw32 устанавливается так же, как и nasm:
apt-get install mingw32
После установки нам нужно создать алиасы win32-ar, win32-as, win32-gcc, win32-g++, win32-ld, win32-objcopy. Делается это следующим образом:
ln -s /usr/i586-mingw32msvc/bin/ar /usr/bin/win32-ar
ln -s /usr/i586-mingw32msvc/bin/as /usr/bin/win32-as
ln -s /usr/i586-mingw32msvc/bin/gcc /usr/bin/win32-gcc
ln -s /usr/i586-mingw32msvc/bin/g++ /usr/bin/win32-g++
ln -s /usr/i586-mingw32msvc/bin/ld /usr/bin/win32-ld
ln -s /usr/i586-mingw32msvc/bin/objcopy /usr/bin/win32-objcopy
Если вы хотите использовать готовый инструментарий кросс-компиляции, вам сначала придется его скачать [11], а затем распаковать в папку /home/autobuild/tools. После этого нужно будет добавить /home/autobuild/tools/win32/bin к $PATH:
export PATH=$PATH:/home/autobuild/tools/win32/bin"
Чтобы не писать тоже самое каждый раз при запуске системы и терминала, можно добавить эту команду в файл .bashrc. В случае с текстовым редактором nano делается это так:
nano ~/.bashrc
Можно использовать и любой другой текстовый редактор. В конец файла просто добавляем вышеуказанную команду.

Kpack собирается из исходников в ~/kolibri/programs/other/kpack/linux, но до этого нам необходимо будет скачать и установить пакет build-essential (если вы, конечно, не установили этот пакет заранее):
apt-get install build-essential
После чего уже переходим в необходимую папку и запускаем скрипты:
cd ~/kolibri/programs/other/kpack/linux
sh ./build.sh
cp ./kpack /usr/bin/
Исходники kerpack находятся в ~/kolibri/programs/other/outdated/kerpack. Но перед тем как собирать его, поправьте путь в файле kerpack.asm. А именно, строку «include ’../../../macros.inc’» на «include ’../../../../macros.inc’»
sh ./build.sh
cp ./kerpack /usr/bin/

Можно установить msvc и c—, а можно не устанавливать, а просто обновлять скомпилированные бинарники, скачанные с сервера builds.kolibrios.org [12], при помощи команды touch. Например:
touch kolibrios/data/ru/shell
Лично я пошел вторым путем, но если у вас есть время и нервы, то вам надо будет установить wine:
apt-get install wine
export WINEARCH=win32
В wine следует установить msvc 2010 при помощи winetricks. Запускаем winetricks, выбираем раздел install an app. В появившемся списке выбираем vc2010express и жмём OK. Таким же образом надлежит установить dxsdk_nov2006. В основном установка автоматическая, разве что время от времени придется «клацать» мышкой: «Далее», «Далее», «Готово». После завершения установки необходимо создать скрипт, который будет запускать win32-cl и win32-link.
Запускаем nano или любой другой текстовый редактор:
nano /usr/bin/win32-cl
и вставляем нижеприведенный скрипт.

#!/bin/sh
WINE=${WINE:-wine}
WINEPREFIX=${WINEPREFIX:-$HOME/.local/share/wineprefixes/vc2010express}
export WINEPREFIX
PROGRAMFILES="c:Program Files"
WSDK="$PROGRAMFILESMicrosoft Visual Studio 10.0"
WPSDK="$PROGRAMFILESMicrosoft SDKsWindowsv7.0A"
WDXSDK="$PROGRAMFILESMicrosoft DirectX SDK (August 2006)"
export WINEPATH="c:windows;c:windowssystem32;$WSDKCommon7IDE;$WSDKVCbin"
export INCLUDE="$WSDKVCinclude;$WPSDKInclude;$WDXSDKInclude"
export LIB="$WSDKVClib;$WPSDKLib;$WDXSDKLibx86"
$WINE cl.exe $@

Точно так же создаем скрипт для win32-link
nano /usr/bin/win32-link

#!/bin/sh
WINE=${WINE:-wine}
WINEPREFIX=${WINEPREFIX:-$HOME/.local/share/wineprefixes/vc2010express}
export WINEPREFIX
PROGRAMFILES="c:Program Files"
WSDK="$PROGRAMFILESMicrosoft Visual Studio 10.0"
WPSDK="$PROGRAMFILESMicrosoft SDKsWindowsv7.0A"
WDXSDK="$PROGRAMFILESMicrosoft DirectX SDK (August 2006)"
export WINEPATH="c:windows;c:windowssystem32;$WSDKCommon7IDE;$WSDKVCbin"
export INCLUDE="$WSDKVCinclude;$WPSDKInclude;$WDXSDKInclude"
export LIB="$WSDKVClib;$WPSDKLib;$WDXSDKLibx86"
$WINE link.exe $@

Пути могут немного отличаться, поэтому рекомендую проверить все тщательно пару раз.
В Колибри используется версия C-- Sphinx [13]. После установки следует создать скрипт, запускающий c—.exe, и назвать его win32-c--.

Есть и третий, ленивый путь. Можно просто убрать из Makefile в автосборке некоторые программы, которые собираются при помощи C-- и MSVC.

Теперь нам сталось лишь установить mtools и mkisofs.
apt-get install mtools
apt-get install mkisofs

Сборка

Сама сборка осуществляется простой командой make в папке kolibrios/data/’язык системы’
Например
cd ~/kolibrios/data/rus
make
Если все установлено правильно, вы должны получить полноценный загрузочный образ KolibriOS — в форматах iso и img. Проверить работоспособность образа можно, например, смонтировав iso или img в virtualbox или любую другую виртуальную машину.

Автор: KolibriOS

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/63536

Ссылки в тексте:

[1] righthearted: http://habrahabr.ru/users/righthearted/

[2] наших четырёх студентов на Google Summer of Code в этом году: http://www.google-melange.com/gsoc/org2/google/gsoc2014/kolibrios

[3] официальную автосборку KolibriOS: http://builds.kolibrios.org/

[4] сам автор этой статьи: http://board.kolibrios.org/memberlist.php?mode=viewprofile&u=6209

[5] Google Summer of Code: https://www.google-melange.com/gsoc/homepage/google/gsoc2014

[6] ломалась: http://habrahabr.ru/company/kolibrios/blog/221205/#comment_7570329

[7] итальянская версия автосборки: http://builds.kolibrios.org/it/

[8] KolibriOS: http://kolibrios.org

[9] Subversion: https://subversion.apache.org/

[10] скачать: http://flatassembler.net/download.php

[11] скачать: http://ftp.kolibrios.org/users/Serge/new/Toolchain/x86_64-linux-kos32-4.8.2.7z

[12] builds.kolibrios.org: http://builds.kolibrios.org

[13] C-- Sphinx: http://c--sphinx.narod.ru/

[14] Источник: http://habrahabr.ru/post/227803/