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)
Ответ на: комментарий от 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

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

Так я-же написал выше, положи свой 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)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.