<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
   <meta name="GENERATOR" content="Mozilla/4.76 [ru] (X11; U; Linux 2.2.18-ipl2mdk-smp i686) [Netscape]">
</head>
<body>

<center>
<h1>
User Mode Linux</h1></center>

<center>Ievlev Stanislav (inger@linux.ru.net).
<br>Также использованы отдельные фрагменты UserModeLinux-HowTo (http://user-mode-linux.sourceforge.net/UserModeLinux-HOWTO.html)</center>

<h2>
1. Введение.</h2>
Добро пожаловать в User Mode Linux. Думаю вам понравится.
<h3>
1.1 Что особого?</h3>
Как&nbsp; правило ядро Linux напрямую общается с вашим железом (будь то
видеокарта, клавиатура, жесткие диски и т.д.), и любая программа которая
также желает с ним поработать вынуждена общяться с ядром:
<p>+-------------------+-------------------+-------+
<br>| Процесс 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Процесс 2&nbsp;&nbsp;&nbsp;&nbsp;
| ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |
<br>+-------------------+-------------------+-------+
<br>| Ядро Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
<br>+-------------------------------------------------+
<br>| Железо&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
<br>+-------------------------------------------------+
<p>В User Mode Linux все совершенно иначе. Вместо общения с железом напрямую
оно предпочитает поросить об этом "настоящее" ядро (здесь и далее именуемое
хост-ядром), как и остальные процессы. Программы, запущенные внутри User
Mode Linux&nbsp; будут вести себя абсолютно также, как они это делали и
под обычным ядром:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+----------------+----------+
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
| Процесс 2&nbsp; | ....&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
<br>+-------------------+----------------------------+
<br>| Процесс 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | User Mode Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
<br>+-------------------+-------------------+-------+
<br>| Ядро Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
<br>+-------------------------------------------------+
<br>| Железо&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
<br>+-------------------------------------------------+
<h3>
1.2 Для чего можно использовать User Mode Linux?</h3>
1. Если обвалится ядро User Mode Linux, то хост-ядро будет продолжать функционировать.
<br>2. Вы можете запускать ядро UML как непривилегированный пользователь.
Хотя, надо честно признаться,&nbsp; для более комфортной работы все-таки
проще работать с правами администратора.
<br>3. Вы можете отлаживать ядро UML как любой другой процесс. Например,
такой серьезный проект как RSBAC (www.rsbac.org) использует UML для отладки
системы защиты, встраиваемой в ядро. Можно запускать gprof и gcov для оценки
производительности и профилирования ядра. В общем можно спокойно экспериментировать
, не боясь испортить что-нибудь важное.
<br>4. Вы можете использовать его как "песочницу" для проверки новых приложений,
в том числе и графических.
<br>5. Вы можете запросто&nbsp; и одновременно запускать различные дистрибутивы.
<br>6. Можно использовать виртуальную машину для работы ''опасных" сетевых
служб, таких как ftp и www. Взломщик может поломать (даже удалить) систему
виртуальной машины, но хост-система останется невредимой и легко восстановит
виртуальное ядро.
<br>7. В конце-концов это просто очень забавная программа.
<h2>
2. Сборка ядра и модулей</h2>

<h3>
2.1 Сборка ядра</h3>
Сборка ядра UML осуществляется в точности также ка и сборка любого другого
ядра Linux. Давайте пройдем через все этапы, используя в качестве примера
ядро версии 2.4.1
<br>1. Закачайте последнюю версию патча UML c сервера (http://sourceforge.net/project/filelist.php?group_id=429)
<br>2. Закачайте соответствующее ядро или просто возьмите его из доступного
вам дистрибутива.
<br>3. Создайте каталог. Распакуйте в него ядро:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ cd /usr/src/uml
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tar -xzvf linux-2.4.1.tar.bz2
<br>4. Наложите патч:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $cd /usr/src/uml/linux
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $cat uml-patch-2.4.1.bz2|bunzip2
- | patch -p1
<br>5. Запустите ядро на конфигурирование как обычно, добавив в конце команды
'ARCH=um.' Например 'make menuconfig ARCH=um'.
<br>6. Запустите ядро на сборку командой 'make linux ARCH=um'. По окончании
процесса сборки появится файл linux, который и представляет собой ядро
User Mode Linux.
<p>Будьте внимательны и не собирайте ядро в /usr/src/linux. В некоторых
дистрибуциях это может привести к неправильной линковке /usr/include/asm.
Сборка User Mode Linux изменит ее и приведет в дальнейшем к ошибкам при
сборке других пакетов.
<p>Исходники готового ( с наложенным патчем ) ядра доступны также и через&nbsp;
CVS (http://www.sourceforge.net/cvs/?group_id=429)
<h3>
2.2 Сборка и установка модулей ядра</h3>
Все модули, которые вы мозможно пожелаете загружать в ядро надо собирать
отдельно. Модули от основного ядра функционировать не будут.
<br>Вы можете установить их, например, скопировав через ftp на виртуальную
машину.
<br>Вы также можете использовать следующий метод:
<br>1. Не загружая ядра, смонтировать корневую файловую систему (используя
loop, команда 'mount -o loop root_fs /tmp/loop')
<br>2. Запустить
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make modules_install INSTALL_MOD_PATH='tmp/loop
<br>3. Отмонтировать файловую систему
<br>4. Запустить ядро
<p>После загрузки системы, вы можете как обычно использовать insmod для
загрузки драйверов в ядро. Для успешной установки модуля необходимо наличие
соответствующих экспортированных символов ядра (для файловых систем, сетевых
протоколов и т.д.). Если окажется, что вы не сможете загрузить какой-то
модуль, просто напишите автору (mailto:jdike@karaya.com) и он решит эту
проблему.
<h2>
3. Запуск ядра и вход в систему.</h2>

<h3>
3.1 Запуск UML</h3>
Это очень просто. Запустите './linux' как обычную программу. Ядро попытается
смонтировать корневую файловую систему с именем './root_fs' . Если файл
с корневой системой называется иначе, сделайте символическую ссылку или
запустите ядро с параметром 'ubd0=your_foot_filesystem'. Для этой процедуры
вам не обязательно иметь права администратора, все операции можете проводить
в домашнем каталоге пользователя.
<h3>
3.2 Вход в систему.</h3>
Осуществляется так же как и в любую другую. Системы предлагаемые совместно
с UML как правило выводят инструкцию, как в них войти или позволяют беcпарольный
вход для пользователя root.
<br>Несколько способов входа:
<ul>
<li>
&nbsp;<b>Через виртуальный терминал</b> : Каждый сконфигурированный в системе
виртуальный терминал будет запущен в отдельном окне xterm.</li>

<li>
&nbsp;<b>Через последовательную линию</b> : Во время загрузки будет выведено
сообщение подобкое 'serial line 0 assigned pty /dev/ptyp1'. Это значит,
что можно подключиться к псевдо-терминалу /dev/ttyp1, используя любую терминальную
программу. Например, если вы используете minicom&nbsp; соответствующая
команде 'minicom -o -p /dev/ttyp1'.</li>

<li>
&nbsp;<b>Через сеть</b>: Если вы настроили предварительно сетевое соединение
с хост-системой.</li>
</ul>
Для завершения работы запускайте стандартные команды типа halt&nbsp; -&nbsp;
ядро аккуратно завершит свою работу.
<br>&nbsp;
<h2>
4. Настройка виртуальной сети.</h2>

<h3>
4.1 С использованием устройства umn через SLIP.</h3>
Устройство umn обеспечивает соединение с остальными машинами (виртуальными
и реальными) через устройство slip хост-ядра. Хост обеспечивает всю маршрутизацию
в такой сети. Для настройки подобной сети как и в случае настройки любых
других сетевых интерфейсов ядра требуются привилегии суперпользователя.
Можно использовать suid версию ifconfig для проделывания такой процедуры
под непривилегированным пользователем, но помимо этого в ядрах старше 2.2.5
из соображений безопасности терминальная линия может также потребовать
прав администратора. Если такое произойдет вы увидите:
<br>&nbsp;&nbsp;&nbsp; Failed to set slip line discipline - errno = 1
<p>Простейший случай - соединение хост-ядра и виртуальной машины. Запустите
ядро с параметром 'umn = ip-addr' , где ip-addr . Адрес, который вы желаете
видеть, например 192.168.0.1.
<p>После загрузки ядра настройте теперь адрес со стороны виртуальной машины
<br>ifconfig umn 192.168.0.101 hw ether c0:a8:0:65:0:0 up
<br>Где IP адресс, тот который вы пожелаете а ethernet адрес получается
переводом сетевого в шестнадцатиричный вид и прибавлением двух нулей в
конце.
<p>Сразу же после такой процедуры посмотрите сетевые интерфейсы на хост-машине
- появится точка-точка соединение SLIP между адресами 192.168.0.1 и 192.168.0.101
.
<p>Аналогично организуйте второе SLIP соединение между второй виртуальной
машиной и хост-ядром. Общаться же между собой они смогут через хост-систему.
Включите для этого поддержку IP-форвардинга на хост ядре:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo 1 /proc/sys/net/ipv4/ip_forward
<p>Загружая две виртуальные машины убедитесь, что они работают на разных
корневых файловых системах. Одновременное использование одной системы двумя
ядрами может испортить ее и привести в негодность.
<h3>
4.2 С Использованием виртуального ethernet устройства.</h3>
Замечание: Данный драйвер появился для ядер начиная с 2.4.0 - test5, и
функционировал некорректно вплоть до версии test6.
<p>Ethernet драйвер использует внешнюю программу для маршрутизации и пересылки
пакетов между машинами. Она не работает с реальными сетеевыми устройствами,
и потому для своего&nbsp; функционирования не требует привилегий администратора.
<p>Для работы с этим драйвером вам требуется ядро UML с включенной сответствующей
поддержкой (пункт "Virtual ethernet device" в разделе "Network device support").
Кроме того вам потребуются утилиты - usermode network tools, доступные
по адресу (http://sourceforge.net/project/filelist.php?group_id=429)
<p>Теперь просто запускайте утилиту um_eth_net_util, загружайте оба ядра
и настраивайте в каждом интерфейс eth0, как вы это делали и в обычном ядре
<p>ifconfig eth0 192.168.0.1 netmask 255.255.255.0&nbsp; - первая машина
<br>ifconfig eth0 192.168.0.2 netmask 255.255.255.0&nbsp; - вторая машина
<p>Ethernet адреса установятся самостоятельно. Вот и все - эти две машины
могут обмениваться пакетами (поробуйте, например, ping)
<p>Для того, чтобы добавить в виртуальную сеть хост-ядро, поверьте правильно
ли оно сконфигурировано. Хост ядро должно быть собрано с поддержкой драйвера
ethertap. Убедитесь, что в конфигурации ядра включены следующие пункты:
<br>1. Prompt for development and/or incomplete code/drivers
<br>2. Kernel/User netlink socket
<br>3. Routing messages
<br>4. Netlink device configuration
<br>5. Ethertap network tap (EXPERIMENTAL)
<p>Убедитесь также что ОТКЛЮЧЕН пункт "Enable multicast for tap devices"
<p>Теперь проверьте что у вас создан файл устройства /dev/tap0
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; crw-rw-rw-&nbsp;&nbsp;&nbsp;&nbsp;
1&nbsp; root root 36,&nbsp; 16 Mar 18 19:42 /dev/tap0
<p>Если он не существует создайте
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mknod&nbsp; -m 666&nbsp;
/dev/tap0 c&nbsp; 36&nbsp; 16
<p>Теперь загрузите драйвер
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modprobe ethertap
<p>И сконфигурируйте интерфейс
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ifconfig tap0 192.168.0.1
netmask 255.255.255.0 arp
<p>Не забудьте параметр arp - иначе ничего работать не будет. И запустите
программу-роутер виртуальной сети с параметрами
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; um_eth_net_util tap0 100
<p>Первый параметр означает подключаемый интерфейс хост-ядра, второй -
идентификатор виртуальной сети.
<p>Загрузите две (или одну) виртуальные машины и сконфигурируйте на каждой
интерфейс как и в предыдущем случае (например с адресами 192.168.0.2 и
192.168.0.3 соответственно). Теперь у вас виртуальная сеть в которой состоят
хост-ядро и два виртуальных. Хост-система теперь&nbsp; может выступать
в роли маршрутизатора между несколькими сетями (физической - eth, виртуальной
- tap) и произведя необходимые настройки маршрутизации и ipchains можно
добиться возможности связи из виртуальной машины с машинами в реальной
сети и наоборот.
<h3>
4.3 Связь из виртуальной сети через маскарадинг</h3>
Пусть у нас имееется следующее распределение адресов:
<br><i>Хост-машина</i>: eth0 -10.150.1.2 (255.255.255.0), tap0 - 192.168.0.1
(255.255.255.0)
<br><i>Внешняя машина</i>: eth0 - 10.150.1.1 (255.255.255.0)
<br><i>UML машина</i>: eth0 - 192.168.0.2 (255.255.255.0)
<p>В&nbsp; этом случае произведем такие настройки:
<br><b>Хост-система</b>:
<br>&nbsp;1. Убедитесь, что в хост ядре включен форвадинг (cat /proc/sys/net/ipv4/ip_forward).
Если нет включите (echo 1>/proc/sys/net/ipv4/ip_forward)
<br>&nbsp;2. Включите маскарадинг (ipchains -A forward -s 102.168.0.0/24
-j MASQ -i eth0 )
<br><b>UML</b>:
<br>&nbsp;1. Настройте шлюз по умолчанию (route add default gw 192.168.0.1
dev eth0)
<h3>
4.4 Включение виртуальной сети в общую</h3>
Пусть теперь распределение адресов следующее:
<br><i>UML- сеть</i>: 10.150.1.4 - 10.150.1.7
<br><i>Хост-машина</i>: eth0 - 10.150.1.2 (255.255.255.0), tap0 - 10.150.1.5
(255.255.255.0)
<br><i>UML-машина</i>:eth0 - 10.150.1.4 (255.255.255.252). Обратите внимание
на маску сети - это существенно.
<br><i>Внешняя машина</i>: eth0 - 10.150.1.1 (255.255.255.0)
<p>Настройка следующая:
<br><b>Хост-система</b>:
<br>&nbsp;1. Убедитесь, что в хост ядре включен форвадинг (cat /proc/sys/net/ipv4/ip_forward).
Если нет включите (echo 1>/proc/sys/net/ipv4/ip_forward)
<br>&nbsp;2. Настройте маршрут на сеть UML или&nbsp; на одну машину&nbsp;
UML, если больше не требуется&nbsp; ( route add -host 10.150.1.4 dev tap0)
<br>&nbsp;3. Настройте proxy arp&nbsp; на вашу UML машину - внешние машины
будут получать ARP адрес шлюза, в нашем случае это хост-система ( arp -i
eth0 -s 10.150.1.4 -D tap0 pub)
<br><b>UML</b>:
<br>&nbsp;1. Убедитесь что правильно настроена маска UML-сети (в нее должны
входить интерфейс tap0 и все остальные виртуальные машины). В нашем случае
255.255.255.252
<br>&nbsp;2. Настройте шлюз по умолчанию (route add default gw 10.150.1.5
dev tap0)
<p>В общем все очень просто, главное, чтобы правильно происходило шлюзование
через хост-систему.
<h2>
5. Доступ к файловой системе хост-машины.</h2>
Если вы желаете добраться до файловой системы&nbsp; хост-ядра, то при настроенной
сети это можно осуществить например через&nbsp; NFS или FTP. Возможно также
вместо настройки сети использовать виртуальную файловую систему hostfs.
В последнем случае вы просто монтируете ее в некоторвый каталог и работаете
с файлами, как если бы они были в файловой системе виртуальной машины.
<p>Чтобы убедиться, что hostfs доступна внутри виртуальной машины выполните
команду
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
cat /proc/filesystems
<br>Если hostfs перечислена среди доступных, то можно действовать&nbsp;
дальше. В противном случае, или в корневой файловой системе установлен
драйвер (тогда следующая команда insmod hostfs) или вам придется пересобрать
ядро UML. При конфигурировании ядра включите параметр&nbsp; "Host fillesystem"
сразу после "Processor features". Можно драйвер встроить в ядро или собратьв
виде модуля - выбирайте путь, который вас устраивает больше.
<p>&nbsp; Как&nbsp; только вам станет ясно, что hosfs вам доступна - монтируйте
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount none /mnt/host -t
hostfs
<br>Если вы не желаете, чтобы файловая система хост-ядра была смонтирована
от корня добавьте параметр
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mount none /mnt/host -t
hostfs -o /home/test
<br>После выполнения последней команды в каталог /mnt/host будет смонтирована
файловая система хост-ядра начиная с домашнего каталога пользователя test
<h2>
6. Создание собственной корневой файловой системы.</h2>
Здесь вариантов множество. Приведу один, как мне кажется наиболее простой
и помогающий избежать большинство проблем, способ.
<br>1. Произведите установку системы в некоторый раздел в самой минимально
возможной конфирурации.
<br>2. Загрузитесь в систему, убедитесь, что все функционирует корректно
.
<br>3. В основной рабочей системе создайте заготовку для будущей файловой
системы. Размер заготовки должен быть достаточным для размещения системы.
Команда 'dd if=/dev/zero of=root bs=1024 count=200000 ' создаст пустой
файл размером 200M.
<br>4. Создайте в созданном образе файловую систему - 'mke2fs root'
<br>5. Смонтируйте раздел с минимальной установкой (например в /mnt/disk)
а также образ фаловой системы (mount -o loop root /mnt/loop).
<br>6. Перенесите с сохранением прав минимальную систему на образ (или
пользуясь mc, или перейдя в /mnt/disk и дать там команду 'tar cvp *|(cd
/mnt/loop; tar xf -)' ).
<br>7. Перейдите в каталог с образом. Убедитесь, что все в порядке. Если
система, которую вы копировали, не использовала devfs, то придется произвести
некоторые поправки:
<br>&nbsp;&nbsp;&nbsp; 1.<i>/etc/inittab</i> - "mingetty /dev/tty*" надо
заменить на "mingetty /dev/ttys/*"
<br>&nbsp;&nbsp;&nbsp; 2.<i> /etc/securetty</i> - все tty* надо заменить
на ttys/*
<br>&nbsp;&nbsp;&nbsp; 3.<i>/etc/fstab</i> - Выглядит, например, следующим
образом:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/ubd/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ext2&nbsp;&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp; 1 1
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp;
defaults
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; devpts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/dev/pts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; devpts mode=622&nbsp;&nbsp;&nbsp;
0&nbsp; 0
<br>8. Отмонтируйте /mnt/loop и можете загружаться.
<p>Возможно отказаться от использования devfs, но тогда надо будет дополнительно
создать устройства <b>/dev/ubd/*</b> c Major 98 ( for i in 0 1 2 3 4 5
6 7; do mknod ubd$i b 98 $i; done ). Если захотите доустановить некоторые
пакеты в уже существующую систему, то можете сделать это из виртуальной
машины через сеть (см. man rpm) или примонтировав файловую систему в /mnt/loop
и дав rpm параметр --root=/mnt/loop.&nbsp; Если нет желания тратить раздел
на минимальную установку, то можете поставить все пакеты вручную (предварительно
смонтировав образ) - метод "сам себе инсталлятор". А некоторые дистрибутивы
(например Slackware) даже позволяют производить установку прямо из виртуальной
машины.
<p>В общем это работа творческая и&nbsp; все зависит от ваших пожеланий.
<h2>
7. Запуск X-Windows</h2>
Прежде чем работать с X убедитесь, что у вас правильно настроена сеть так
как вся дальнейшая работа будет проводится именно с использованием сетевых
<br>возможностей Х-сов. Итак пусть хост-система имеет IP адрес 192.168.0.1,
а виртуальная машина 192.168.0.2. Для начала разрешите доступ по сети к
X-серверу
<br>хост-системы, воспользовавшись командой xhost ( 'xhost +' дает доступ
всем).
<h3>
7.1 Запуск графических клиентов</h3>
Для запуска графических клиентов с виртуальной машины в X-Windows хост
системы необходимо просто правильно установить значение переменной DISPLAY
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export DISPLAY=192.168.0.1:0
<br>Теперь если вы запустите например программу xterm - ее окно появится
в вашей X-Windows.
<h3>
7.2 Запуск собственного X-сервера</h3>
Понятно, что запустить собственный X-сервер виртуальная машина не может.
Поэтому вместо обычного X-сервера будем использовать специальный - Xnest.
Этот
<br>особый X-сервер позволяет запускать внутри X-Windows еще одно рутовое
окно, а внутри него можно опять запускать свои оконные менеджеры и программы.
Xnest
<br>открывает новый сокет&nbsp; (например если запускали 'Xnest :1' то
для доступа к рутовому окну переменная DISPLAY устанавливается равной :1)
для клиентов и они могут
<br>функционировать совершенно независимо от основной системы. Итак, как
и в предыдущем случае
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export DISPLAY=192.168.0.1:0
<br>Теперь запускаем Xnest и ... . Внутри X-window хост-системы появилось
новое рутовое окно, принадлежащее виртуальной машине. На этой же виртуальной
машине
<br>открылся теперь уже локальный сокет, готовый принять местные графические
программы. Переопределяем переменную DISPLAY:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export DISPLAY=:0
<br>И запускаем любой клиент, например оконный менеджер
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; icewm-light
<br>Работаем...
<h2>
8.Параметры ядра</h2>
<b>debug</b> -&nbsp; запускает ядро под управлением gdb.
<p><b>fake_arch</b> -&nbsp; Изменяет значение архитектуры, сообщаемой ядром
с "um" на архитектуру, соответствующую хост-системе. Бывает необходимо
для некоторых процедур
<br>установок.
<p><b>mem=SIZE</b> - указывает как много памяти будет занято ядром. Размер
представляет собой число, оканчивающееся символами 'M','m','K' или 'k'.
<p><b>no-xterm</b> -&nbsp; приказывает драйверу консоли не отображать виртуальные
терминалы внутри окон xterm. Вместо этого используются псевдо-терминалы
(как к ним
<br>поключаться см. раздел "Вход в систему"). Полезно когда нет возможности
запускать UML ядро из среды X-Window.
<p><b>root=ROOT</b> - действует аналогично обычному ядру. Указывайте параметры
в формате devfs. Например root=/dev/ubd/5
<p><b>ubd=NUMBER</b> - меняет major номер устройств /dev/udb/*
<p><b>udbn=FILENAME</b> - подключает очередную файловую систему FILENAME
как устройство /dev/ubd/n . Значение n изменяется от 0&nbsp; до 7. Если
перед ubd поставить
<br>префикс r (rubd1), то соответствующая файловая система будет монтироваться
только в режиме Read-Only (только чтение).
<p><b>umn = IP-ADDRESS</b> - устанавливает IP адрес SLIP соединения со
стороны хост ядра равным IP-ADDRESS.
<br>&nbsp;
</body>
</html>