как сделать свою ос на ядре linux

Cоздание своего дистрибутива Linux с помощью Remastersys

Содержание

ВВЕДЕНИЕ

Прежде чем делать свою сборку, Вы должны определить цель и задачи своего творения. Иначе сборка может не получить своё предназначение в этом мире и остаться малоизвестной.Итак, цели и задачи определены и Вы решились сделать сборку своей системы.
Для начала Вы должны либо в Virtualbox (или в другой виртуальной машине), либо у себя на компьютере установить операционную систему со всеми настройками, со всеми программами, которые считаете нужными иметь в Вашей сборке.
Теперь, когда всё настроено и установлено, будем создавать свою сборку. Для этого нам в первую очередь необходимо свободное место на разделе с папкой /home не менее 6 ГБ.
Для создания сборки есть несколько инструментов. Мы будем говорить о Remastersys, который позволяет создать полноценную сборку даже не очень продвинутому пользователю.
Все действия дальше описаны для Ubuntu, но подходят для всех Debian совместимых дистрибутивов.

1. УСТАНОВКА

2. ПЕРВЫЕ ШАГИ

3. РАСШИРЕННЫЕ ВОЗМОЖНОСТИ

mksquashfs
SYNTAX:mksquashfs source1 source2 … dest [options] [-e list of exclude dirs/files]

Filesystem build options:
-comp select compression
Compressors available:
gzip (default)
lzo
xz

то всё в порядке и использовать опцию -comp xz можно смело.

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux

4. ЗАГРУЗОЧНОЕ МЕНЮ

5. ОЧИСТКА СБОРКИ ОТ «ЛИШНЕГО»

Прежде всего уточню, что речь пойдет не об удалении приложений из сборки, а об удалении временных файлов из кэша, коих великое множество на сотни мегабайт.
Перед очисткой системы установите пакет ubiquity-frontend-gtk.
В первую очередь воспользуемся стандартными инструментами очистки системы. Открываем терминал и пишем:

Первая команда автоматически удалит все неиспользуемые пакеты.
Вторая команда удалит скачанные файлы пакетов в архиве.

Теперь воспользуемся программой Synaptic и удалим все ненужные настройки, оставшиеся после удаленных пакетов. Открываем Synaptic. В открывшемся окне внизу выбираем группу фильтров «Состояние».
Выбираем фильтр «Не установленные (остались файлы настроек)», выделяем все пакеты, попавшие в этот фильтр. Правой клавишей мыши на выделенном выбираем в меню «отметить для полного удаления» и жмем «Применить».
как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux
Здесь же в этой группе фильтров удалите пакеты под фильтром «Установленные (авто удаляемые)«
Если фильтры «Не установленные (остались файлы настроек)» и «Установленные (авто удаляемые)» отсутствуют, значит система уже прошла чистку и под данные фильтры ничего не попадает.

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

Следующим этапом будет очистка кэша программ. В корне системы есть папка /var. В ней программы оставляют свои временные файлы, нужные до поры до времени. Дальше я перечислю папки, в которых можно удалить все файлы, не причинив вреда системе, и тем самым уменьшить размер сборки.

6. СОВЕТЫ И РЕКОМЕНДАЦИИ

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

Удачи! И пусть мир узнает Ваши творения!

Источник

MNorin.com

Блог про Linux, Bash и другие информационные технологии

Как собрать свой дистрибутив Linux

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linuxСобрать свой дистрибутив операционной системы на базе ядра Linux и свободного программного обеспечения можно несколькими способами. Среди них есть как сложные, так и очень простые. Давайте рассмотрим несколько способов разной степени сложности и, может быть, вы для себя какой-то из этих способов выберите, чтобы собирать образы операционных систем для дома или работы. Некоторые способы даже не требуют каких-то более или менее глубоких знаний о Linux.

Linux From Scratch (LFS)

Самый суровый способ. LFS представляет из себя сочетание книги и загрузочного диска для сборки собственной операционной системы на базе ядра Linux полностью с нуля из исходных кодов. Отлично подходит для изучения операционных систем GNU/Linux, но абсолютно не подходит для начинающих. Очень не рекомендую тем, кто еще не умеет пользоваться Linux’ом. И очень рекомендую тем, кто хочет более плотно изучить что и как работает в операционных системах на базе ядра Linux и готов на это потратить какое-то время. Официальный сайт — http://www.linuxfromscratch.org/.

Для тех, кто освоил первую часть,- сборку основной части операционной системы,- есть вторая часть, которая называется Beyond Linux From Scratch (BLFS). Из недостатков этого способа можно отметить, пожалуй, только количество времени, которое потребуется.

simple-cdd

Гораздо менее суровое средство сборки своего дистрибутива на базе Debian. Позволяет достаточно быстро собрать свое установочный образ, включающий необходимый набор пакетов. Есть официальная страничка в вики Debian, но она, похоже, достаточно стара и давно не обновлялась. Это один из самых простых и быстрых способов собрать свой дистрибутивный образ, но придется предварительно прочитать официальный How-To и посмотреть страницу руководств.

SUSE Studio

Один из наиболее простых способов собрать собственную операционную систему на базе ядра Linux и свободного программного обеспечения. Если быть более точным, то это возможность собрать свой потомок OpenSUSE или SUSE Linux Enterprise. Для сборки своего дистрибутива надо просто зарегистрироваться на сайте http://susestudio.com. Для хранения образов дается 15 гигабайт. Вкратце сборка своего дистрибутива выглядит так:

Более подробно расписывать не буду, на сайте всё очень просто и понятно. SUSE Studio позволяет создать следующие типы образов:

Кроме того, на сайте есть галерея уже готовых операционных систем, в которой можно выбрать готовую конфигурацию и изменять уже ее.

Ubuntu Builder

Программа для сборки дистрибутива на базе Ubuntu. Собственно, получится обычная Ubuntu нужной конфигурации. Проект закрылся 10 марта 2014 года, поэтому сложно его рекомендовать к использованию. Если есть желание с ним ознакомиться, это можно сделать здесь. Там же указана команда для подключения репозитория, из которого можно установить пакет ubuntu-builder. Если не заметили, то вот она:

Вообще это был достаточно известный проект в свое время. Жаль, что закрылся.

Novo Builder

Еще одна программа для сборки дистрибутива, которую надо устанавливать. Устанавливается она при помощи скрипта, который можно взять здесь. Скрипт сам добавит репозиторий и поставит пакеты. Это, пожалуй, лучшая на данный момент программа для сборки дистрибутива на базе Ubuntu по простоте использования. И рассказать-то больше особо нечего, достаточно поставить и посмотреть. Всё интуитивно понятно.

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

Источник

Создание операционной системы на базе ядра linux. С нуля

Рано или поздно каждый пользователь Линукса задумывается над созданием собственного дистрибутива. Некоторые аргументируют это тем, что можно «все настроить под себя». Другие сетуют на то, что среди уже представленных дистрибутивов в Ветке нет идеального. А у них, якобы, есть суперконцептуальные идеи для собственной системы. Зачем я всю эту психологию затеял? Для того, чтобы сразу перекрыть кислород играющимся с Линуксом новичкам, которым делать нечего. Если уж задумались над созданием ОС, думайте до конца. Итак,

Я хочу создать ОС на базе Linux.
Сразу предупреждаю: был бы XVIII век, всех тех, кто для основы своей будущей системы выбирает другой развитый дистрибутив (и, не дай Бог, популярный. ) ждала бы виселица. Пост именно про создание системы с нуля, а значит, всякие Slax и Linux Mint мы трогать не будем.

Шаг 1. Выбор носителя
Вариантов немного: либо ваша ОС запускается с LiveCD, либо с жесткого диска, либо с флеш-устройства. Сразу оговорюсь: не скажу в посте ни слова про жесткий диск, потому что гораздо удобнее создавать гибкий дистрибутив из серии «все свое ношу с собой», либо залоченный дистрибутив на оптическом диске. Если вы научитесь создавать LiveCD или LiveUSB систему, с установкой на жесткий диск проблем не будет.

На всякий случай, приготовьте чистую флешку, CD-диск, и установите, наконец, Virtualbox.

Шаг 2. Компиляция ядра
По поводу выхода третьего ядра Linux, этот шаг воодушевляет на дальнейшие разработки… Итак, нам нужны исходники ядра. Каждый пользователь знает, что их можно достать на сайте kernel.org. Ни в коем случае, слышите?, никогда не прикручивайте к своей системе постороннее ядро, скомпилированное не вами!

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux

Поскольку лень моя зашкаливала, я создал папку /linuxkernel и распаковал туда архив с исходниками. Залогинившись под рутом, я сделал следующее:

cd /linuxkernel
make menuconfig

В принципе, ядро можно конфигурировать тремя способами: make config (диалоговая конфигурация), make menuconfig (псевдографическая конфигурация через ncurses), а также make xconfig (графическая конфигурация). Суть в том, что make config испортит вам настроение надолго, т.к. он задаст все возможные вопросы по всем аспектам всех тем. Проблема с make xconfig встречается не у всех, но вот у меня встречалась и встречается. Если приспичило сделать через X, разбирайтесь сами. Оптимальный вариант — make menuconfig. Эта штука откроет вам псевдографический интерфейс, через который вы сможете настроить ядро на свой лад. Штука требует библиотеки ncurses, которая легко устанавливается.

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux

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

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux

Еще поройтесь в Device Drivers, полезно. Можете шутки ради понавыбирать там все и скомпилировать ядро весом > 50 Мб.

Далее. Ядро после загрузки себя должно загружать, собственно, систему. Либо из скомпилированных в себе файлов (используются во встраиваемых системах), либо из CPIO архива, сжатого чем-нибудь, либо из Initrd. Здесь вам не DOS, здесь не получится сразу сослаться на какой-нибудь init’овый файл в корневом каталоге диска или флешки. На самом деле получится, не слушайте дядю Анникса! Неправильно это, хоть в Интернете по этому поводу уже нехилая полемика ведется. В своей системе мы будем использовать initrd, т.к. это удобно, и не вызовет нецензурных выражений от сторонних разработчиков, в отличие от CPIO архива.

Ах, да, скомпилируйте ядро командой

Если у вас x86, найдете его по адресу /linuxkernel/arch/x86/boot/bzImage.

Для суровых челябинских программистов можно использовать Кросс-компайлинг…

Теперь нам нужен initrd с установленной там простейшей оболочкой. Мы будем использовать busybox, потому что эта няша может все. Способ мы украдем у Роберто де Лео, создателя Movix (я бы даже уважать его начал, если бы не запредельная любовь к Perl):

Все, теперь у нас есть Ramdisk, емкостью в 5 Мб. Можно и больше, только не нужно. В отличие от Томаса Матеджисека, я не собираюсь пичкать initrd модулями в Squashfs, сжатыми LZMA. Все, что необходимо, будет скомпилировано вместе с ядром. Да, это не очень логично и правильно, но мороки в сто раз меньше. А специально для тех, кто осуждает такой подход, можно разрешить опцию модульности в ядре: Enable loadable module support.

В нашем Ramdisk’е, смонтированном в /distro, есть такая папка, lost+found. Это потому, что мы отформатировали его в ext2. Ни в коем случае нельзя ее удалять, хоть она здесь вряд ли поможет, образ-то фиксированный. Нам бы busybox сначала поставить…

Установка Busybox
Вот почему у таких классных проектов такие отстойные сайты? Хотя… это уже не суть важно, если исходники скачаны и успешно распакованы в папку /busybox.

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux

Сконфигурировать busybox можно так же:

cd /busybox
make menuconfig

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux

Если вы еще не поняли, что это, объясню. Busybox заменяет тонны UNIX приложений, хранящихся в папках /bin, /sbin, /usr/bin, /usr/sbin. Вместо этого, создается только одно приложение: /bin/busybox, а на него создается куча ссылок в указанных выше папках. Установим busybox следующей командой:

make CONFIG_PREFIX=/distro install

Еще Busybox создаст файлы /sbin/init и зачем-то /linuxrc, чтобы ваша система корректно запустилась. Но не все необходимые папки были созданы. Так что завершаем все руками и создаем:

/distro/etc
/distro/lib
/distro/dev
/distro/mnt
distro/proc
/distro/root
/distro/tmp
/distro/root

Если что забыл — вспомните, т.к. директории эти забыть сложно.

Все бы хорошо, вот только busybox для работы требует библиотеки, которые нужно скопировать в наш дистрибутив. Очень легко узнать, какие:

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

При копировании библиотек можно отсекать отладочную информацию (так Роберто советует):

Делаем из Линукса Линукс

Надо создать несколько системных текстовых файлов:

Нам нужен /etc/inittab. Удивлю вас: в начале жизни система даже не знает, что такое Root. У нас даже пользователь безымянный, но вот файл общесистемных низкоуровневых фич (ОНФ) должен присутствовать. Пилотное содержание файла следующее:

# Запустить оболочку в консоли.
::respawn:-/bin/sh

# Перезагрузка по нажатии на Ctrl+Alt+Del.
::ctrlaltdel:/sbin/reboot

Следующий файл — /etc/fstab. Это таблица, в которой описано, что и куда монтировать при загрузке. Вещь бесполезная! Нам нужно обязательно смонтировать proc, иначе вообще ничего работать не будет, так что в файле пишем:

none /proc proc defaults 0 0

Для mount нужен также файл /etc/mtab. Создайте его и оставьте пустым.

Но mount сделает все необходимое только тогда, когда мы явно его об этом попросим. А просить мы будем в том самом первозагрузочном файле /etc/rc.d/rc.S (rc.d — папка). Вежливо попросим:

Еще нам необходим файл профиля (b)(a)sh, тут вообще раздолье для фантазии. Создаем файл /etc/profile и заполняем следующим:

PATH=»$PATH:/bin:/sbin:/usr/bin:/usr/sbin:»
LESS=-MM
TERM=linux
HOME=/root
PS1=’> ‘
PS2=’> ‘
ignoreeof=10
export PATH DISPLAY LESS TERM PS1 PS2 HOME ignoreeof

Понадобится также файл /etc/shell, в котором указано, что есть оболочка:

Вот собственно и все. Можно записывать наш Ramdisk в файл.

Создание загрузочной флешки

«Финишная прямая» нашей маленькой разработки. Берем флешку, вставляем, форматируем в vfat (можно и в ext, но не забывайте, что еще не все пользователи Windows застрелились).

На флешке создаем папку boot, в ней папки initrd и kernel.

Из папки /os копируем сжатый Ramdisk в папку boot/initrd на флешке, называем «main.gz». Из папки с исходниками ядра копируем bzImage в папку boot/kernel на флешке, называем «main.lk». Достаем файлы загрузчика Syslinux (в Интернете, либо из другого дистрибутива: тут не принципиально), а именно syslinux.bin, syslinux.boot, syslinux.cfg. Копируем их в корневой каталог нашей флешки. В файле syslinux.cfg пишем что-то подобное:

default mm
prompt 1
timeout 100
label mm
kernel /boot/kernel/main.lk
append initrd=/boot/initrd/main.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
label mc
kernel /boot/kernel/main.lk
append initrd=/boot/initrd/custom.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
label cm
kernel /boot/kernel/custom.lk
append initrd=/boot/initrd/main.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
label cc
kernel /boot/kernel/custom.lk
append initrd=/boot/initrd/custom.gz load_ramdisk=1 ramdisk_size=5000 rw root=/dev/ram0
label hd
localboot 0x80

Тем самым мы поддержали кастомные initrd и ядро, которые, эксперимента ради, можно подключить к нашему дистрибутиву.

Узнаем, каким девайсом в системе является наша флешка (можно запустить mount без параметров и посмотреть). Это либо /dev/sdb1, либо /dev/sdc1, либо /dev/sdd1. Стоит отмонтировать флешку перед началом установки.

Устанавливаем syslinux (если пакета в системе нет, apt-get install syslinux):

В корневом каталоге флешки должен появиться файл ldlinux.sys. Если он есть, значит syslinux.bin, syslinux.boot больше не нужны.

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux

Как настроить BIOS на загрузку из флешки, я вам рассказывать не буду — это легко. Скажу только, что очень удобно создать папку /boot/initrd/init, в которую можно будет смонтировать /boot/initrd/main, для последующей работы с ним. Только не забудьте разжимать и сжимать его gzip’ом.

Как-бы я только что рассказал вам, как создать с нуля систему на Linux. Легко, не правда ли? Далее вы можете редактировать скрипт /sbin/init, ведь у вас еще много работы! Вы должны будете написать скрипт для монтирования флешки, который делает chroot в корневой каталог. В противном случае, вы вынуждены будете работать с ReadOnly разделом, величиной в 5 Мб. Но это уже совсем другая история.

Томас Матеджисек — создатель Slax и Linux Live Scripts.
Роберто де Лео — создатель Movix.

Источник

Разработка монолитной Unix подобной OS — Начало (1)

Ответы на замечания к предыдущей статье.

Замечание 1. Слишком простой планировщик.

За время с момента издания предыдущей статьи код сильно изменился. Образовалось полноценное ядро, которое перестало быть микроядерным. Появилась поддержка initial ram disk (файловой системы ядра), поддержка виртуальной памяти (MMU). Для ядра стало возможным писать пользовательские программы. Появились системные вызовы и библиотека clib (stdio, string). Так, оболочка /initrd/sh.elf является отдельной программой, которая парсится загрузчиком elf и запускается в виде процесса.

Замечание 2. Слишком много магии за кадром в видеоуроках.

Я решил подсвечивать текст, который в данный момент обьясняю. Также взял курс на новичков, которые нуждаются в разьяснении и самых простых вещей. Честно говоря я удивился что новички не имеющие опыта в программировании интересуются такой сложной темой, хотя чего греха таить, сам с того и начинал. Сместил уклон с обьяснения моей ОС на обьяснение как написать Вашу OC.

Замечание 3. Где ссылка на гитхаб?

Теперь она есть. В описании видео на ютубе (да, хочу чтобы вы не прошли мимо моих видеоуроков, хотябы одним глазком гляньте).

Замечание 4. Надо бы со сборки сначала начинать.

Именно так мы и поступим.

Замечание 5. Ты ничего не пишешь а просто комментируешь.

Да, это было ошибкой, рассказывать сразу о чем-то большом. Теперь мы будем двигаться шаг за шагом, постепенно, начиная с самого простого Hello world ядра. Видеоуроки позволят сформировать целостную картину мира, а исходный код на гитхабе погрузит вас в детали.

Оглавление.

Поехали. Часть 1. Система сборки и запуск

В статье я буду перечислять лишь ключевые шаги. За подробным обьяснением отсылаю к видеоуроку для этой статьи.

Тебе потребуется Linux. Собирать будем старым добрым make. Для того чтобы собрать исполняемый файл ядра, нужны следующие флаги:

В качестве эмулятора железа поставь себе на Linux эмулятор qemu. Запускать наше ядро будем так:

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

Поскольку ядро будет загружено по спецификации multiboot в начале секции кода потребуется заголовок:

Рекомендуется сразу переходить на собственный стек и настаривать глобальную таблицу дескрипторов. Определим наш собственный стек:

Напишем точку входа. Тебе может показаться непривычным синтаксис ассемблера gnu. Я когда-то тоже предпочитал синтаксис Intel, то распробовав вкус, копаясь в исходниках Linux, всецело предпочел для себя синтаксис AT & T. Главное помни что операнды у них располагаются наоборот. Остальное будет интуитивно понятно.

На этом шаблонный код закончен. Начинается самое интересное. Теперь мы можем писать код на С. И первым делом определим сообщение приветствия.

Далее напишем саму точку входа на которую будет передавать управление ассемблерный код:

Тут мы просто выводим сообщение на экран. В принципе ты можешь полностью скопировать код первого урока, поскольку он шаблонный и изменяться никогда не будет. Для того чтобы вывести что-то на экран тебе достаточно записать это напрямую в видеопамять, дополняя каждый символ символом аттрибута. Для этого тебе понадобится своя библиотека языка C, которую мы будем писать сами под наши нужды. Так будет проще контролировать процесс. Так например сегодня у нас в распоряжении 2 всем знакомые функции (strcpy, memcpy) и одна наша собственная strext для того чтобы вставить байт аттрибута после каждого символа.

Заключение

На сегодня все. Смотри видеоурок и попытайся самостоятельно проделать тоже самое. Если не получится можешь подглядывать в исходники к уроку на гитхабе. Ссылка на гитхаб в описании видеоурока:

Литература

1. James Molloy. Roll your own toy UNIX-clone OS.
2. Зубков. Ассемблер для DOS, Windows, Unix
3. Калашников. Ассемблер — это просто!
4. Таненбаум. Операционные системы. Реализация и разработка.
5. Роберт Лав. Ядро Linux. Описание процесса разработки.

Источник

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linuxСобираем собственную ОС на базе Linux

Архив номеров / 2006 / Выпуск №3 (40) / Собираем собственную ОС на базе Linux

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux Илья Александров

Создаём собственную ОС на базе Linux

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

За долгие годы работы с Linux мною было использовано огромное количество различных дистрибутивов: Mandriva, Fedora, SlackWare, Debian, Ubuntu и многие другие. Какой-то проект нравился больше, какой-то – меньше. Но во всех дистрибутивах неминуемо приходилось сталкиваться с серьезными недостатками, которые сильно затрудняли работу. Один слишком требователен к ресурсам, в другом нет поддержки всего нужного оборудования, в третьем не хватает различного ПО. Вот тогда я вспомнил известную восточную мудрость: если нужно что-то сделать хорошо, сделай это сам.

Linux from Scratch

Я не единственный, кто решил заняться построением собственной версии Linux – ОС, в которой за основу будет взята базовая часть системы и ядро, но где не будет ни единого лишнего килобайта от разработчика, то есть от вас. Большое количество Linux-дистрибутивов, не соответствующих требованиям пользователей, подтолкнуло Герарда Бикменса (Gerard Beekmans) к созданию дистрибутива, который даст возможность каждому собрать систему, где будут только необходимые ему компоненты и функции.

Стремление талантливого программиста вылилось в проект Linux from Scratch (www.linuxfromscratch.org), сокращенно – LFS. Этот проект, позволяет сконструировать «с нуля», из исходных кодов, свою операционною систему на базе Linux. Компиляция LFS проходит на компьютере с уже установленной Linux-системой, впрочем, подойдет и «продвинутый» Live-CD, например, Knoppix [6].

При этом Linux-система, используемая для сборки, может быть любой – обязательно лишь наличие компилятора и системных библиотек. Linux From Scratch трудно назвать дистрибутивом в привычном смысле этого слова – это что-то вроде вспомогательного ПО, которое вкупе с базовой частью операционной системы позволит вам создать свою, уникальную версию ОС.

Как известно, Линус Торвальдс разрабатывал свою операционную систему под девизом «Just for fun!» – то есть только ради удовольствия. Нужно признать, что LFS действительно не часто можно встретить на серверах, используют эту систему, как правило, компьютерные энтузиасты. Установка и работа с Linux from Scratch поможет вам разобраться во взаимосвязи компонентов ОС, что пригодится при собственных разработках Linux-дистрибутива, причем не только на базе LFS. Поэтому LFS во многом рассчитан на тех людей, для которых процесс сборки собственного дистрибутива увлекателен и интересен – а таких людей, поверьте, немало.

Итак, если вы готовы потратить на конструирование системы целый день (а то и больше), то рекомендую скачать с сайта (2) LFS-packages-6.0, LFS-book, и продолжить читать эту статью.

Разбиение диска и создание дерева каталогов

Для лучшего понимания материала опишем весь ход процесса в общих чертах (см. рис. 1).

как сделать свою ос на ядре linux. Смотреть фото как сделать свою ос на ядре linux. Смотреть картинку как сделать свою ос на ядре linux. Картинка про как сделать свою ос на ядре linux. Фото как сделать свою ос на ядре linux

Рисунок 1. Схема сборки LFS

На первом этапе, с помощью уже инсталлированного дистрибутива или LiveCD, разбивается диск. На жестком диске выделяется раздел для новой системы. После чего на этом разделе нужно будет статически скомпилировать все необходимые программы и ядро системы. Далее происходит смена корневого каталога на раздел жесткого диска, отведенный под нашу новою ОС. Потребуется повторить компиляцию, но на этот раз ПО должно быть собрано динамически (отличие динамической компиляции от статической будет описано ниже). Последний этап включает в себя сборку важнейшей библиотеки glibc и конфигурацию установленной ОС. Как видите, ничего особенно сложного делать не придется.

На протяжении всего процесса ваш главный помощник – документация из пакета LFS-book, русский перевод которой можно взять тут: http://multilinux.sakh.com/download/lfsbook.tar.bz2. В книге подробно описан каждый шаг создания ОС, поэтому обязательно обращайтесь к этому руководству в случае возникновения проблем (данная статья не призвана заменить такую обширную документацию).

Создаем новый раздел – в моем случае это /dev/hda5, так как раздел /dev/hda1 уже занят установленным на жесткий диск Linux Slackware. Рекомендуется предварительно сделать бэкап системы, дабы можно было ее восстановить в случае повреждения, хотя вероятность подобного близка к нулю. И тут, думаю, все понятно: выделяем нужное количество (достаточно 23 Гб) под корневой каталог, пространство, равное удвоенному объему ОЗУ – под swap-раздел, по желанию можно создать отдельные разделы для домашнего каталога (/home) и для /boot. Впрочем, излюбленный многими вариант разбиения – отвести под корневой каталог все доступное пространство минус swap, и последующее создание собственно swap – также вполне допустимо при сборке LFS. На компьютере автора и Linux Slackware, являющийся родительской ОС, и LFS, используют один жесткий диск, впрочем, установить LFS на другой винчестер тоже труда не составит.

Файловую систему выбирайте на ваше усмотрение: и с Ext3, и с ReiserFS никаких проблем под LFS не было. А вот поклонников XFS придется огорчить – попытки заставить Linux From Scratch работать с этой ФС не увенчались успехом.

Теперь монтируем раздел, отведенный под новую ОС :

$ mount /dev/hda5 /mnt/mylin

Для удобства определим переменную MYLIN:

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

Нужно создать дерево каталогов в корне нового раздела:

$ mkdir –p bin boot dev etc home lib mnt opt root sbin usr/ var

В каталогах usr, usr/X11R6, usr/local создаем необходимую структуру : подкаталоги bin, etc, include, lib, sbin, share, src.

Затем то же самое проделаем для каталогов /var и /opt будущей системы:

Не будем забывать, что существуют более глубокие иерархии, например, /usr/share/man/man1. Но объем статьи не позволяет привести здесь всю информацию о структуре файлового дерева, поэтому нужно либо воспользоваться документом Filesystem Hierarhy Standart (можно найти по адресу: http://linux-ve.net/MyLDP/file-sys/fhs-2.2-rus), либо внимательно изучить структуру уже установленной у вас ОС семейства Linux. После подготовки жесткого диска приступаем к статической сборке.

Зачем мы используем статическую сборку? При статической компиляции исходный код библиотеки присоединяется к коду приложения, что влечет за собой увеличение его размера, но при этом сохраняется целостность. При динамической же компиляции библиотека находится в отдельном файле, к которому по мере необходимости обращаются приложения. В итоге все программы работают с одной версией библиотеки

Но когда мы посредством команды chroot установим корневой каталог для вновь собираемой системы, библиотеки «родительской», установленной системы, находящиеся в /lib, /usr/lib, и прочих, станут уже недоступны, поэтому динамически скомпилированные программы работать откажутся, вдобавок совместимость версий никем не гарантирована.

Чтобы избежать этого, все необходимое программное обеспечение для нашей будущей системы мы для начала соберем статически. Начнем, пожалуй, с командного интерпретатора bash. (Поклонники ZSH или TCSH могут установить любимые интерпретаторы после установки системы, но на этапе сборки их использование не предусмотрено автором LFS). Следует проверить, есть ли у вас файл /usr/lib/libcurses.a и если его нет – установите пакет nсursesdev. Все пакеты надо собирать с флагами статической сборки: «—enable-static-link», «—disable-shared» или «—static». Какой именно подходит в каждом конкретном случае, можно узнать из документации к конкретному пакету или из вывода конфигурационного сценария, запущенного с параметром «—help».

Чтобы не спутать позже статически скомпилированные программы с «динамическими», создадим для них специальный каталог:

Да, при компиляции ядра не забываем, что для старых версий ядер (2.2.x-2.4.x) нужно использовать gcc 2.95, а для текущей версии 2.6.x рекомендуется применить gcc 3.x, дабы не возникло проблем.

Процесс настройки параметров ядра многократно описан в Интернете (6), вряд ли есть необходимость останавливаться на этом подробнее. Далее даем следующие команды в папке с исходными текстами Linux-kernel:

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

Теперь нам нужно сменить корневой каталог на /mnt/mylin, где мы будем пользоваться только статически собранными утилитами – к помощи инструментов из «родительской» ОС мы уже прибегать не сможем. Даем команду в консоли:

>HOME=/root TERM=$TERM PS1=’u:w$’

>PATH=/bin: /usr/bin: /sbin: /usr/sbin: /stat/sbin

Этой командой мы указали пути к исполняемым файлам, тип терминала, интерпретатор и вид приглашения командной строки.

Для обеспечения работы некоторых программ, надо установить файловую систему proc в новой системе.

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

При сборке мы указывали параметр «—prefix=$MYLIN/stat», поэтому при смене корня все статически собранные пакеты окажутся в каталоге /stat раздела новой ОС.

Итак, распаковываем архив glibc-2.x.x.tar.gz (например, в директорию /usr/src/) и переходим в каталог glibclinuxthreads. Придется немного подправить исходный код ввиду того, что на данном этапе в системе невозможна идентификация пользователя по имени (как раз из-за отсутствия glibc и других библиотек), и того, что для установки glibc нужен интерпретатор Perl, которого у нас нет.

Если вы все сделали правильно, glibc скомпилируется, в строке приглашения наконец-то появится «root», и можно будет динамически перекомпилировать все программы.

Завершим установку ядра :

Чтобы переместить новое ядро в каталог /boot, выполняем еще одну команду:

Собираем все установленные и некоторые новые программы, теперь уже без флагов статической компиляции. Нам потребуются (на данном этапе очень важно не забыть скомпилировать все нижеперечисленное) (см. таблицу 1).

Таблица 1. Необходимый набор пакетов для сборки

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрика: Администрирование / Продукты и решения