LINUX.ORG.RU

Live centos 7 - Подскажите возможные пути реализации

 


0

2

Добрый день!

В общем много лет использовал старенький CentOS 5 в режиме Live: на флешке с FAT32 был ext3fs.img, syslinux это дело грузил как livecd, изменения сохранялись в простой TAR архив, а при старте распаковывалось. Преимущество подхода за 13 лет себя полностью оправдало: чтоб сломать систему нужно постараться т.к. флешка в ReadOnly и система загружалась практически всегда. Понятное дело пора обновляться.

Однако с тех времен линукс усложнился, появился systemd, dracut и т.д. LiveCD образы линуксов перестали выпускаться, за основу брать по сути нечего. Наставьте пожалуйста на путь истинный как это можно сделать. Цель простая: чтобы установка системы была быстрой, чтобы порушить файловую систему было невозможно. Делаю я это для железки х86 с линуксом на борту.



Последнее исправление: baraban (всего исправлений: 1)

в случае CentOS это livecd-tools плюс что-то самописное наверное...

а так (субъективно) наверное удобнее debian-live + persistence (свою сборку делаем с помощью live-build)

Belen ★★
()
Ответ на: комментарий от kto_tama

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

baraban
() автор топика
Ответ на: комментарий от int13h

Спасибо, интересно! Подход у него прямо мой. Мол систему не надо резервировать, нужно данные бакапить.

baraban
() автор топика
Ответ на: комментарий от baraban

Подход, нужно всего-то…

Другой подход, использовать системы, которые на это расчитаны. Например, Porteus.

andytux ★★★★★
()

Добрый день!

Spoofing пока не отвечает, а личных сообщений тут нет.

В общем я продолжаю изыскания. Что есть: установленный дистрибутив на основе Centos 7 и ISOшник с установочным комплектом. Я подумал что в исошнике по сути уже есть все что мне нужно т.к. система установки так же загружается как Live система. В каталоге LiveOS обнаружилась корневая ФС в формате squashfs. Я установленный свой дистриб так же упаковал в squashfs как делал это раньше:

создал пустой блочный файл

dd if=/dev/zero of=os.img bs=1k count=4096k

Создаем на нем файловую систему

mkfs.ext3 -F -L "LiveCD" -m 1 ./os.img
tune2fs -c0 -i0 -Odir_index -ouser_xattr,acl os.img

монтируем его в новый каталог

mkdir ./new_sysroot
mount -o loop ./os.img ./new_sysroot

Копируем содержимое старого через rsync, чтобы сохранить расширенные атрибуты файлов.

rsync -a -v --acls --xattrs --hard-links ./bindmount/ ./new_sysroot

переименовываем его в os.img и сжимаем

 mksquashfs os.img ./squashfs.img

(это я написал для тех кто вдруг будет искать, им пригодится).

На флешке с файловой системой сделал каталог LiveOS, скопировал туда squashfs.img.

Так же сделал каталог syslinux, поместил туда файлы сислинукса, а так же ядро vmlinuz и образ рамдиска initrd.img от ISOшника инсталлятора.

сислинукс ставил как раньше (и под виндой)

 syslinux.exe -i -m -f -a -d %CD:~0,2%\syslinux\ %CD:~0,2%

Что имеем: система загружается, но не до конца. Dracut вываливает ошибку и попадает в отладку. Что имеем: флешка подключается в /run/install/repo , скваш никуда не подключается, но петлевое устройство создается (/dev/loop0)

Вопрос: куда дальше думать?

Раньше как-то все проще было: был init скрипт который все подключал как надо. Сейчас systemd все запускает и как узнать как он это делает - хз…

baraban
() автор топика
Ответ на: комментарий от baraban

А ты случаем не перемудрил…

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

andytux ★★★★★
()
Ответ на: комментарий от andytux

Ну может быть перемудрил. Но мой подход вроде как работает… Файловая система подключается. И раньше так работало. Правда от скваша отказался и хранил просто в ex3fs

baraban
() автор топика
Ответ на: комментарий от baraban

LiveCD образы линуксов перестали выпускаться

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

http://ftp.jaist.ac.jp/pub/Linux/CentOS-vault/centos/7.0.1406/isos/x86_64/

Сейчас качаю.

Пока заглянул в минимал-образ, в этом Centos и правда все через *опу. Плюнуть на него и не тратить время.

andytux ★★★★★
()
Ответ на: комментарий от andytux

Я пошел по пути понимания как это все работает. Чтоб не тыкаться как слепой котенок мамке в задницу, а сделать все с пониманием. Мне повезло найти вот эту книгу

http://onreader.mdl.ru/HandsonBooting/content/index.html

Этот эпический труд полностью описывает весь процесс и все тонкости загрузки линукса. Решил прочитать его полностью.

baraban
() автор топика

у последней версии (7.9.2009) centos7 нету livecd
выход - брать предпоследнюю версию 7.8.2003
качаешь с оффсайта либо с зеркал, которые не удали её пока что

d00fy ★★★
()
Ответ на: комментарий от baraban

Странная конструкция - человек. Все норовит круглое - тащить, квадратное - катить.

Кали, предназначенный использовать как «живую», норовит установить. Центос, предназначенный для установки, «живые-образы» которого создатели «попрятали», норовит запустить как «живую».

Из rpm-подобных был небольшой опыт только с mageia. Загрузка весьма похожа.

Насчет /LiveOS/squashfs.img ты был прав. Монтирую, внутри вижу /LiveOS/ext3fs.img. Наверно в этом есть высший смысл, но мне его постичь не удалось. Напоминает виндовс-пользователей, у которых на рабочем столе каталог «Новая папка», в нем каталог «Новая папка»…

А из исо-образа она вообще грузиться умеет? Вижу, что до loopback-bootable она не доросла. Но iso-scan вроде есть.

andytux ★★★★★
()
Ответ на: комментарий от andytux

Просто в центоси есть среда, да и она мне привычна. Раньше у меня была сборочная среда, я там компилил и своим подобием пакетного менеджера вставлял в продакшен. Было довольно удобно.

Смысл в ex3fs в том что изначально это файл имитирующий блочное устройство. По сути виртуальный диск. А скваш это алгоритм сжатия. Почему так - не знаю.

С исо образа грузится же, как-то анаконда запускается для установки то. Я сейчас изучаю dracut и как он в initrd взаимодействует с systemd в плане запуска. Сдается мне что большая часть нынче реализована не скриптами, а бинарниками, которые занимаются монтированием файловых систем. Как реально это устроено пока не понял.

baraban
() автор топика
Ответ на: комментарий от baraban

Есть исо-образы:

CentOS-7.0-1406-x86_64-livecd.iso, CentOS-7-x86_64-LiveCD-1503.iso, CentOS-7-x86_64-LiveGNOME-2003.iso, CentOS-7-x86_64-Minimal-2009.iso

Загружаюсь из исо-образа. CentOS-7.0-1406-x86_64-livecd, CentOS-7-x86_64-LiveCD-1503.iso сказали, что «неизвестное оборудование». Неудивительно, эти версии системы старее моей железки. CentOS-7-x86_64-LiveGNOME-2003.iso запустилась «живая система», правда только с «nomodeset». CentOS-7-x86_64-Minimal-2009.iso загрузка идет, но выглядит совсем иначе, чем предыдущий образ. Во-первых, визуально - внизу полоса, отображающая процесс загрузки. Во-вторых, значительно дольше, полоса дошла до конца, я еще подождал, не дождался…

ISOшник с установочным комплектом…

…это не live. В нем может не быть компонентов «живой системы». Пример, CentOS-7-x86_64-Minimal-2009.iso. Весьма спорно, пытаться сделать из него live. Начать с таких мелочей, у них отличаются имена ядра и инитрд (у live vmlinuz0).

andytux ★★★★★
()
Ответ на: комментарий от baraban

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

Загружаюсь из «набора файлов». Содержимое исо-образа скопировал в каталог /opt/centos. Для простоты конечно нужно было в корень раздела, но я создал симлинки, сработало.

сжимаем mksquashfs os.img ./squashfs.img… На флешке с файловой системой сделал каталог LiveOS, скопировал туда squashfs.img.

На время экспериментов, для сокращения-упрощения процесса, этот этап можно выбросить. Из squashfs.img извлек файл и поместил его в /opt/centos/LiveOS/ext3fs.img.

andytux ★★★★★
()
Ответ на: комментарий от baraban

создал пустой блочный файл dd if=/dev/zero of=os.img bs=1k count=4096k

Создаем на нем файловую систему…

Посмотрел. MC нет, пользоваться практически невозможно, минус.

Создавать ничего не стал. Смонтировал родной ext3fs.img, скопировал в него MC, иконки, тему оформления. Отмонтировал. Загрузился.

https://ibb.co/SrTwd2k

Сразу применилась тема, иконки. Работает MC. В его правой панели видно ext3fs.img, из которого загружена система. Столкнулся с такой неприятностью. Gnome-terminal сообщил, что не поддерживается параметр «-e», еще один минус в копилку CentOS-а.

andytux ★★★★★
()
Ответ на: комментарий от andytux

Старые ОС не охота использовать. Семерка вроде как будет еще пару лет в строю, да и потом будет работать еще лет пять. А там уж посмотрим что к чему.

В общем за последние несколько дней я продвинулся в изысканиях. Есть замечательный документ который объясняет как работает в Fedora, Centos и других совместимых системах подсистема Live: https://fedoraproject.org/wiki/LiveOS_image#Live.iso_.2B_squashfs.img

Там же есть ссылка на опции ядра для dracut которые нужны при работе в LiveCD режиме: https://github.com/dracutdevs/dracut/blob/master/man/dracut.cmdline.7.asc#booting-live-images

Что сделал: взял initrd.img c образа установочного компакт диска. Там этот файл большой, около 54 мб, потому что в нем драйверы и сценарии на все случаи жизни. Что как раз мне и надо.

Затем я взял корневую файловую систему как писал выше, но перед упаковкой в Squashfs я помести ее в каталог LiveOS и вместе с ним упаковал. Подсунул получившийся squashfs в каталог LiveOS на флешке и все запустилось.

Теперь нужно будет перевести образ со Squashfs в ext3fs. В документации написано что это должно работать, в исходниках тоже есть эта информация, но пока не получилось. Скваш использовать нехочется т.к. это лишние тормоза на нагруженных системах. Хотя нужно протестировать.

Так же теперь нужно убрать из systemd лишние таргеты которые отвечают за монтирование дисков, свопа и т.п. Кстати на сколько критично наличие свопа вообще? как-то 13 лет без него обходился…

baraban
() автор топика
Последнее исправление: baraban (всего исправлений: 1)
Ответ на: комментарий от baraban

Для загрузки использую «внешний» груб. Соответственно, конфиг для него тоже самодельный.

сделал каталог syslinux, поместил туда файлы сислинукса…

Груб может использовать isolinux с его конфигом. Проверил, загрузился. Так как в конфиге другая метка раздела, то понадобилось исправить «root=live:LABEL=» на свое.

andytux ★★★★★
()
Ответ на: комментарий от andytux

В образе CentOS есть груб, можно использовать его конфиг. Проверил этот вариант, загрузился. Так как в конфиге другая метка раздела, то понадобилось исправить «root=live:LABEL=» на свое.

andytux ★★★★★
()
Ответ на: комментарий от baraban

Скваш использовать нехочется

Так я-же написал выше, положи свой ext3fs.img вместо squashfs.img. И скриншот показал.

andytux ★★★★★
()
Ответ на: комментарий от andytux

Что-то не получается с ext3fs.img загрузиться. Гаснет экран и система виснет. Пока не понял в чем дело…

baraban
() автор топика
Ответ на: комментарий от baraban

частично разобрался: rootfs у меня не подхватывается т.к. в initramfs запускается anaconda-lib.sh. Она ищет только squashfs и собственно рассчитана на инсталлер. А нормальный лайв не запускается. Нужно перестраивать инитрд, но туда еще какой-то микрокод процессора добавляется теперь, не все просто…

Хотя думаю в моем случае от микрокода нужно избавляться. Ведь неизвестно на каком процессоре все будет в итоге запускаться…

baraban
() автор топика
Ответ на: комментарий от baraban

рассчитана на инсталлер. А нормальный лайв не запускается

Я тебе уже намекал, в исо-образе для установки - инитрд для установки. В исо-образе live - инитрд для live. И не только.

Параметр «rd.live.image».

Ищу в конфигах загрузчиков образа «…minimal*.iso» - нету.

Ищу в конфигах загрузчиков образа «…LiveGNOME*.iso» - есть.

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

Проверяю. При запуске без этого параметра, «живая система» не запускается, сразу задаются вопросы как для установки, временная зона и т.д. При запуске с этим параметром, загружается «живая система».

andytux ★★★★★
()
Ответ на: комментарий от baraban

Вот такой конфиг груба получился у меня для запуска «CentOS live»:

function avboot {
  if [ "${msg}" = '0' ]; then msg=''; fi
  if [ "${msg}" = '1' ]; then msg='Non EFI-mode!'; fi
  if [ "${msg}" = '2' ]; then msg='Non CSM-mode!'; fi
  if [ "${msg}" = '3' ]; then msg="Load $iso_path from $root"; fi
  if [ "${root}" = 'x' ]; then if [ -z "${msg}" ]; then msg="$src not exist!"; fi; else if [ -z "${msg}" ]; then msg="Load $src from $root"; fi; fi
  if [ -n "${1}" ]; then echo "$msg"; sleep -v ${1}; fi
  if [ -n "${avload}" ]; then ${avload} ${src}; if [ -n "${avinit}" ]; then ${avinit}; fi; fi
}

  submenu 'CentOS live (login/pass: liveuser/<empty>)' {
	iso_path='/opt/CentOS-7.0-1406-x86_64-livecd.iso'
	iso_path='/opt/CentOS-7-x86_64-LiveCD-1503.iso'
	iso_path='/opt/CentOS-7-x86_64-LiveGNOME-2003.iso'
	iso_path='entOS-7-x86_64-Minimal-2009.iso'
	src='/opt/centos'; key="rd.live.overlay=auto nomodeset ro rd.live.image rd.luks=0 rd.md=0 rd.dm=0 rghb plymouth.enable=0 quiet --"
	#version=''
	#insmod regexp; insmod part_gpt
	root='x'; search --no-floppy --set --file "${iso_path}"
	if [ "${root}" = 'x' ]
	  then	search -n -s -f "${src}/isolinux/vmlinuz0${version}"
		if [ "${root}" = 'x' ]
		  then	src='CentOS live'
		  else	if [ -z "${src}" ]
			  then	if [ -e "/EFI/BOOT/grub.cfg" ]; then avload='configfile'; src='/EFI/BOOT/grub.cfg'; else src='/isolinux'; avinit="syslinux_configfile ${src}/isolinux.cfg"; avload="syslinux_source ${src}/isolinux.bin"; fi
			  else	
 #key="rd.live.overlay=auto rd.live.dir=/LiveOS rd.live.squashimg=squashfs.img rootfstype=auto ${key}"
 key="rd.live.dir=${src}/LiveOS ${key}"
 #if [ -e "${src}/overlay" ]; then key="rd.live.overlay=auto ${key}"; fi
				if regexp "7-x86_64-Minimal-2009" "${iso_path}"; then key="root=live:LABEL=CentOS-7-x86_64-Minimal-2009 ${key}"; fi
				if regexp "7-x86_64-LiveGNOME-2003" "${iso_path}"; then key="root=live:LABEL=CentOS-7-x86_64-GNOME-2003 ${key}"; fi
				if regexp "7-x86_64-LiveCD-1503" "${iso_path}"; then key="root=live:LABEL=CentOS-7-x86_64-LiveCD-1503 ${key}"; fi
				if regexp "7.0-1406-x86_64-livecd" "${iso_path}"; then key="root=live:LABEL=CentOS-7-livecd-x86_64 ${key}"; fi
				src="${src}/isolinux"
				if [ -e "${src}/initrd.img${version}" ]; then avinit="initrd ${src}/initrd.img${version}"; else avinit="initrd ${src}/initrd0.img"; fi
				avload='linux'; if [ -e "${src}/vmlinuz${version}" ]; then src="${src}/vmlinuz${version} ${key}"; else src="${src}/vmlinuz0${version} ${key}"; fi
			fi
		fi
	  else	msg="Load $iso_path from $root"; export iso_path; loopback loop ${iso_path}
		root=(loop)
		if [ -e "/boot/grub/loopback.cfg" ]
		  then	avload='configfile'; src='/boot/grub/loopback.cfg'
		  else	key="iso-scan/filename=${iso_path} ${key}"; src='/isolinux'
			if regexp "7-x86_64-Minimal-2009" "${iso_path}"; then key="root=live:LABEL=CentOS-7-x86_64-Minimal-2009 ${key}"; fi
			if regexp "7-x86_64-LiveGNOME-2003" "${iso_path}"; then key="root=live:LABEL=CentOS-7-x86_64-GNOME-2003 ${key}"; fi
			if regexp "7-x86_64-LiveCD-1503" "${iso_path}"; then key="root=live:LABEL=CentOS-7-x86_64-CD-1503 ${key}"; fi
			if regexp "7.0-1406-x86_64-livecd" "${iso_path}"; then key="root=live:LABEL=CentOS-7-livecd-x86_64 ${key}"; fi
			if [ -e "${src}/initrd.img${version}" ]; then avinit="initrd ${src}/initrd.img${version}"; else avinit="initrd ${src}/initrd0.img"; fi
			avload='linux'; if [ -e "${src}/vmlinuz${version}" ]; then src="${src}/vmlinuz${version} ${key}"; else src="${src}/vmlinuz0${version} ${key}"; fi
		fi
	fi
	avboot 4
  }

Недопетрил только до «presistent-overlay». И не нравится эта бодяга с метками разделов-образов.

andytux ★★★★★
()
Ответ на: комментарий от baraban

взял initrd.img c образа установочного компакт диска. Там этот файл большой, около 54 мб, потому что в нем драйверы и сценарии на все случаи жизни. Что как раз мне и надо.

Смотрю размеры инитрд в разных исо-образах:

CentOS-7-x86_64-LiveGNOME-2003.iso - 71mb

CentOS-7-x86_64-Minimal-2009.iso - 54mb.

andytux ★★★★★
()
Ответ на: комментарий от andytux

В общем победа вперемешку с отчаяньем… удалось загрузиться. Я изучил ваш дистриб с японского зеркала, тот который CentOS-7.0-1406-x86_64-livecd.iso . Он загрузился без проблем. И довольно резво. Правда я пускал сислинуксом с флешки. Посмотрел его файлы dracut hooks и сопутствующее - практически байт-в-байт совпадающие. Потом взял initrd от установочного образа моего дистриба, поместил все на свои места и заработало. Видимо очень важно наличие строго определенного набора параметров ядра. У меня запустилось так:

timeout 600

default linux
label linux
  menu label Run from image
  kernel vmlinuz
  append initrd=initrd.img root=live:LABEL=DISTRLIVE rootfstype=auto ro rd.live.image quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0 

где DISTRLIVE метка флешки. Она в FAT32.

Запустилось как со squashfs.img так и с rootfs.img. Возможно даже последовательность перечисления параметров ядра имеет значение. Эти параметры я взял из isolinux.conf дистриба с японского сайта )

Надеюсь дальше не поломаю все. Чот битва эта утомила очень. Информация в инете конечно имеется, и ее много, но чтоб вот объяснение было именно этого случая и как в комплексе что зависит от параметров ядра в инициализации такого нет.

baraban
() автор топика
Последнее исправление: baraban (всего исправлений: 1)
Ответ на: комментарий от baraban

Возможно даже последовательность перечисления параметров ядра имеет значение

Не сталкивался, чтобы влияла последовательность перечисления параметров. Но все может быть.

как в комплексе что зависит от параметров ядра в инициализации

В комплексе не скажу, но один пример. Строка из моего конфига:

rd.live.dir=${src}/LiveOS

Параметр задает расположение каталога с «живой системой». В моем случае это «/opt/centos/LiveOS». Т.е. не обязательно в корне раздела. А следовательно на одном разделе может быть несколько систем.

andytux ★★★★★
()
Ответ на: комментарий от andytux

В исходниках в файле dvsquash-live-root есть такие строчки в начале:

# parse various live image specific options that make sense to be
# specified as their own things
live_dir=$(getarg rd.live.dir -d live_dir)
[ -z "$live_dir" ] && live_dir="LiveOS"
squash_image=$(getarg rd.live.squashimg)
[ -z "$squash_image" ] && squash_image="squashfs.img"

так же в конце есть такое:

# we might have an embedded fs image to use as rootfs (uncompressed live)
if [ -e /run/initramfs/live/${live_dir}/ext3fs.img ]; then
    FSIMG="/run/initramfs/live/${live_dir}/ext3fs.img"
elif [ -e /run/initramfs/live/${live_dir}/rootfs.img ]; then
    FSIMG="/run/initramfs/live/${live_dir}/rootfs.img"
elif [ -f /run/initramfs/squashfs/LiveOS/ext3fs.img ]; then
    FSIMG="/run/initramfs/squashfs/LiveOS/ext3fs.img"
elif [ -f /run/initramfs/squashfs/LiveOS/rootfs.img ]; then
    FSIMG="/run/initramfs/squashfs/LiveOS/rootfs.img"
fi

То есть довольно гибкий алгоритм размещения образов

в целом все эти алгоритмы перекочевали со старого mkintrd практически без изменений.

По поводу путей типа твоего «/opt/centos/LiveOS» мне так и не удалось выяснить что это за путь. Либо это путь на оригинальном носителе, либо это путь в корневой ФС в распакованном initrd

Сейчас ковыряюсь с правильным формированием конфигов для сетки, а то после старта не появляются профили в /etc/sysconfig/network-scripts/

baraban
() автор топика
Последнее исправление: baraban (всего исправлений: 1)
Ответ на: комментарий от baraban

/opt/centos/LiveOS - это мой путь.

Обычно все помещаю в /opt. Для «живых линуксов» обычно в этом каталоге создаю каталог, с названием помещаемого в нем линукса. Например, ubuntu - /opt/ub, mageia - /opt/mageia, centos - /opt/centos. Сама centos в этом каталоге: /opt/centos/EFI, /opt/centos/LiveOS, /opt/centos/isolinux.

andytux ★★★★★
()
Последнее исправление: andytux (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.