| RSS



Меню

Bookmark and Share


Статистика
Ваш IP: 216.73.216.185
Вы используете: v





Сейчас на сайте:

Тех поддержка ->

Облако тэгов
ОС своя операционная система своя ОС видио Tor Обратная сторона антенна Strace php ultimate libc rand() эксплоит обзор популярных связок Windows Server 2008 PPTP VoIP-телефония QIP Virtual vps Tune kernel sysctl proc freeBSD Boot Raid Disk Bluetooth GEO game Video Wine emulator Python Shell phpinfo поколения червь Conficker вирус троян лаборатория касперского пиратство Apple iPhone Microsoft twitter социальная сеть анонимность лицензия Open Source уязвимость MySQL база данных PostgreSQL Закон Франция Пират Skype мобильный хакер trend micro кибератака Германия робот искусственный интеллект Персональные данные Ноутбук Интернет китай цензура windows vista Linux патент браузер Firefox Internet Explorer Opera Safari Intel патч Oracle Банкомат IBM США Dell MAC контроль Internet кибербезопасность приговор Mozilla Chrome безопасность Госдума СМИ Windows 8 Пираты взлом Пентагон Украина Facebook Cisco Windows XP нетбук торрент музыка Биометрический Nokia ФБР IP-адрес sms RSA java Google Captcha Symantec Спам лагерь Антивирус тест Windows 7 операционная система windows провайдер авторское право rapidshare UNIX свиной грипп шантаж Дети ipod Service Pack копирайт McAfee HTTPS icann студент Норвегия New York Times YouTube Warner Music КНДР БД Ubuntu касперский Россия РФ сервер хостинг верховный суд Wi-Fi суд пароль логин блог фишинг одноклассники Медведев контрафакт зарплата мошенник sony Gps по Росгосстрах JavaScript Хакеры Yahoo фас компьютер софт Минкомсвязи Сбой мошенничество Доктор ВЕб Вконтакте исходный код МВД фильтр порнография свобода слова казахстан сисадмин Autodesk Gmail кредитная карта LiveJournal шифрование Deep Purple банк HTML5 кодек Нанотехнологии wikipedia выборы DNS Android атака Mac OS X домен ФСБ прокуратура уголовное дело ICQ Visual Basic Sophos ошибка DARPA военные сайт турция конференция спамер Полиция Koobface Великобритания белоруссия Грузия Европа биржа Linux Mint Билл Гейтс спецслужбы Royal Bank of Scotland смартфон F-Secure Symbian фильм Ватикан Новая Зеландия Adobe Австралия госуслуги вымогатель IDC Рамблер новости Internet Explorer 9 iPad должник Ирландия поиск МТС Реклама слежка Zeus личные данные eset Вымпелком защита виртуализация МСЭ Черный список BlackBerry система защиты индия траффик Москва социальные сети flash player paypal BitDefender email планшет сертификат блокировщик Anonymous Тюмень технологии Ассанж передача данных Оптоволокно сенат арест Samsung Иск учетная запись коррупция разработка Британия исследование угрозы Санкт-Петербург SOPA PIPA исправление запрос Megaupload ВВС США отчет приложение магистраль Инвестиции платформа роскомнадзор zbot выдача КНР

Главная » Статьи » Общие Статьи

LiveCD из Slackware в домашних условиях
В данном тексте как раз и будет рассказано как из Salckware сделать
LiveCD. Непосредственной причиной послужила необходимость создания
router-а из PC. Понятно, что роутер - это такая вещь, которую один раз
поставил, и забыл ... До тех самых пор пока она (после очередного
пропадания электричества) не перестанет загружаться. Вот тогда все
начинают бегать...

Использование LiveCD (понятно, что с настройками сети и файрволла,
подогнанными под вашу систему) в этом случае хорошо тем, что любая
проблема с оборудованием решается простой заменой на любое другое с
необходимым числом сетевых интерфейсов и втыканием в него вашего LiveCD
диска. Кроме того для роутера read-only корневая система (типа iso9660)
- это к тому же лишний плюс, поскольку представляет из себя
дополнительную преграду для злоумышленников и любителей поиграться с
подменой шелла.

Минус же состоит в том, что CDROM - это далеко не жёсткий диск, у него
нет BIOS кода, поэтому подготовка загрузочного сидюка существенно
сложнее от создания загрузочного HD. Кроме того, не следует забывать,
что от этого LiveCD (в отличии от жёсткого диска, который как сидел на
одном компе, так и сидит) требуется ещё и универсальность - т.е. воткнул
его в любой комп (независимо от того на каком интерфейсе находится
CD-drive), и он завёлся.

Как вы знаете (наверное), проблему с отсутствием BIOS кода загружаемые
сидюки решают созданием эмуляции загрузочной дискеты, которая копируется
на сам CD. Для тех, кто забыл (или не застал): дискета - это такая
маленькая чёрная штучка, которая все время сыпалась и имела смешной
объём 1.4 MБ. Т.е. из этого следует невесёлый вывод, что вам нужно
втиснуть ядро, initrd (от создания initrd вам всё равно не отвертеться,
иначе потеряется упомянутая выше универсальность) и загрузчик на
дискету. Есть, правда, хорошая новость - этот объём можно удвоить (до
2.8 MБ) и в итоге современные дистрибутивы в него (пока ещё)
помещаются, хотя в талии уже начинает жать ...

Подготовка образа диска.

Итак, задача стоит таким образом. Нам нужно создать систему на CD (или
DVD) с корневой файловой системой на iso9660. Поскольку полностью
сделать read-only корневую систему нельзя, то /etc, /var и /tmp нам
придётся перенести на tmpfs (и при желании /home на nfs). В то же время
хочется сделать систему максимально самодостаточной, не зависящий ни от
каких дополнительных сетевых хранилищ информации, чтобы перенос на
другое железо мог быть выполнен любым неквалифицированным оператором
(даже в стиле ``телефонного робота'').

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

mkdir /tmp/cdrom


Затем в эту ветку копируется содержимое корневой файловой системы (cp -a
/dev /root /usr /lib ... /tmp/cdrom) или же система устанавливается
туда по-новой. Если критично важно, чтобы система влезала на CD, то
следует ограничиться установкой /a и /n пакетов. Напомню, что у
installpkg в Slackware есть флаг -root /tmp/cdrom, который как раз и
делает что нам нужно - устанавливает пакеты в каталог отличный от /.

Для установки ядра отличного от ванильного лучше распаковать исходники
ядра в отдельной директории (они занимают большой объем - на CD точно не
влезут), сконфигурировать как вам хочется и установить, используя
переменные окружения:

export INSTALL_PATH=/tmp/cdrom/boot
export INSTALL_MOD_PATH=/tmp/cdrom


Таким образом после команд make install и make modules_install ядро и
модули окажутся в /tmp/cdrom/boot и /tmp/cdrom/lib/modules/...
соответственно.

Теперь правим конфигурационные файлы (/etc) в соответствии с вашими
задачами. После того как всё будет готово, продолжим ...

Раз всё готово, то можно проделать chroot в свежеустановленный каталог.
По крайней мере это одна из базовых проверок (необходимая, но не
достаточная!), что система работоспособна.

chroot /tmp/cdrom


Теперь нужно создать файл /etc/fstab :

/dev/cdrom / iso9660 defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
proc /proc proc defaults 0 0


и сделать пустой файл /etc/fastboot, чтобы при загрузке не происходила
проверка файловой системы.

После этого копируем каталоги:

cp -a /etc /etc1
cp -a /var /var1


Смысл этого действия - /etc, /var будут использоваться как mount-points
для tmpfs, а после монтажа в них будет копироваться содержимое /etc1 и
/var1. Проблема состоит только в том, что все это нужно проделать до
запуска init. Вот для этого нам и понадобится initrd.

Создание initrd

Initrd - это маленькая файловая система, которая монтируется при
запуске ядра и чьей задачей обычно является подготовка монтажа настоящей
большой корневой системы. На эту файловую систему помещается набор
системных утилит (типа ls, mkfs и др.), обычно упакованных в один
исполняемый файл busybox, скрипты и ядерные модули, которые ядро должно
загрузить прежде, чем будет смонтирована корневая файловая система
(например, модуль для самой корневой файловой системы и драйвер
контроллера диска). Можно было бы пересобрать ядро, чтобы
вкомпилировать эти модули в ядро, но многие системные администраторы
считают, что не царское это дело - ядра компилировать (для этого
программисты есть), поэтому initrd как раз для них.

Каждый дистрибутив имеет свои средства для создания initrd. В Slackware
для этого используется bash-скрипт mkinitrd.

mkinitrd -m iso9660:tmpfs:...


(мы по-прежнему в chroot-e). Параметры - это те модули, которые будут
помещены на initrd. iso9660 - должен быть обязательно (если только он не
вкомпилен в ядро). Но особо увлекаться добавлением модулей не следует.
Помним, что busybox весит 1.4 МБ. После сжатия он ужимается до 0.7,
отнимаем это число от 2.8, получаем 2.0 МБ на ядро и модули. Т.е.
generic-ядро из Slackware-12.1 ещё влезет, а вот huge - уже нет.

Так или иначе в каталоге /boot появится каталог /boot/initrd-tree. Это
как раз несжатый снимок initrd диска. Там нужно будет отредактировать
скрипт /boot/initrd-tree/init. Ищем ближе к концу кусок кода:

if [ ! -r /mnt/sbin/init ]; then
echo "ERROR: No /sbin/init found on rootdev (or not mounted). Trouble ahead."


и вставим как раз перед ним все те манипуляции с подменой каталогов, о
которых речь шла выше. Но для начала стоит выяснить на каком именно
диске находится наш LiveCD. Т.е. в момент загрузки линка /dev/cdrom у
нас ещё нет, так что придётся это делать вручную. ``Читал /proc, много
думал ...''

ROOTDEV=$(cat /proc/sys/dev/cdrom/info | sed -rne '/drive name/s%drive name:[[:blank:]]*([[:alnum:]]*)%/dev/\1%p')
ROOTFS=iso9660
# Switch to real root partition:
echo 0x0100 > /proc/sys/kernel/real-root-dev
mount -o ro -t $ROOTFS $ROOTDEV /mnt
mount -t tmpfs -o size=100m none /mnt/var
mount -t tmpfs -o size=10m none /mnt/tmp
mount -t tmpfs -o size=10m none /mnt/etc
cp -a /mnt/var1/* /mnt/var
cp -a /mnt/etc1/* /mnt/etc


В конце скрипта init происходит подмена /mnt на / с помощью:

exec switch_root /mnt /sbin/init $RUNLEVEL


Так что файловая система на CD вместе с подмонтированными к ней
/var,/etc,/tmp окажется корневой. Что и требовалось. Обратите внимание,
что в файле fstab про tmpfs каталоги ничего не сказано. Это правильно -
oни уже смонтированы в initrd и этого достаточно.

После того как скрипт поправлен и все остальное на initrd-tree вас
устраивает, то нужно сжать эту ветку в файл initrd.gz, прогнав mkinitrd
по второму разу. В итоге получим файл /boot/initrd.gz размером порядка
0.7МБ.

Создание образа загрузочной дискеты

К этому моменту должны быть в наличии /boot/initrd.gz и ядро
/boot/vmlinuz. Все это надо записать на ``загрузочную дискету'', а потом
туда же в MBR скинуть загрузчик lilo. Поскольку последний раз дискету в
живую я видел несколько лет назад, то вместо неё будем использовать
loopback-device.

Нарежем его. Файл размером 2.88МБ назовём b.bin

#dd if=/dev/zero of=/b.bin bs=1K count=2880


Посадим его на /dev/loop0:

#/sbin/losetup /dev/loop0 b.bin


И отформатируем его. Файловая система может быть любая - хоть DOS, лишь
бы в ядре была её поддержка:

#/sbin/mke2fs /dev/loop0


А теперь создадим mount-point для него, смонтируем и скопируем туда ядро
и initrd.gz. Главное - чтоб места там хватило!

#mkdir /mnt/loop0
#mount /dev/loop0 /mnt/loop0
#cp /boot/vmlinuz /boot/initrd.gz /mnt/loop0


Если жалоб на недостаток места не было, то осталось запихнуть туда ещё и
загрузчик (это как анекдот про носорога и жирафа в холодильнике). Но
перед этим сочиним /etc/lilo.conf:

#образ дискеты у нас на loopbacke, при этом мы делаем вид, что это диск A с геометрией как у дискетки
boot = /dev/loop0
disk=/dev/loop0
bios=0x0
sectors=36
heads=2
cylinders=80
# но не забываем, что это все же загружаемый CD (el-torito)
el-torito-bootable-CD
compact
prompt
timeout = 100
#Ядро и initrd.gz находятся на том же образе, подмонтированном на /mnt/loop0.
#Туда же запишем и образовавшийся в процессе работы lilo map-файл
map=/mnt/loop0/map
image = /mnt/loop0/vmlinuz
#root роли не играет, все равно решает initrd
root = "LABEL=relay-boot1"
initrd = /mnt/loop0/initrd.gz
label = Linux-CD
read-only


Осталось только запустить lilo:

# /sbin/lilo
Warning: LBA32 addressing assumed
Added Linux-CD *
One warning was issued.


Если возникнут ошибки и более серьёзные предупреждения (map и
boot-record на разных дисках), то следует ещё раз проверить - а все ли
вы делали правильно?

Теперь осталось подчистить за собой loopback.

#umount /mnt/loop0
#/sbin/losetup -d /dev/loop0


И прощай, jail!

#exit
#cd ..


Собираем все в одну кучу - создание загрузочного CD

Делается одной командой:

mkisofs -b b.bin -o router.iso -R /tmp/cdrom


Указано, что диск использует полновесное Rock-Ridge расширение (-R),
диск загружаемый, где -b указывает загрузочный образ, причём все пути
относительно корневого каталога CD (/tmp/cdrom). В итоге у нас имеется
готовый образ загружаемого диска router.iso.

Эпилог

Вот и всё. Однако я не стал бы торопиться и жечь болванки. Лучше
воспользоваться эмулятором qemu и убедиться, что созданный выше образ
работоспособен, и загрузка продолжается по крайней-мере до login-а:

qemu -boot d -cdrom router.iso


Используемая литература: http://www.stockwith.uklinux.net/hints/
Категория: Общие Статьи | Добавил: aka_kludge (29.10.2009) | Автор: geekkoo
Просмотров: 1899 | Теги: Boot, Slackware, LiveCD, Linux | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
    Главная      
...
На службе : дней

21:39
Обновить


Пользователи
aka_kludge
qwerty
LeadyTOR
aka_Atlantis
AdHErENt
mAss
Sissutr
hiss
DrBio
tHick

Поиск


Copyright tHR - TeAM 2026 г. admin: aka_kludge (ICQ:334449009) Moderator's: LeadyTOR, ... Яндекс.Метрика