Конечная цель: Создайте диск автоматической установки для CentOS, используя файл конфигурации кикстарта, хранящийся на внутреннем веб-сайте.
Что я наделал: Создал скрипт, который
isolinux.cfg
файл с моей опцией менюgenisoimage
Все это работает, и ISO воссоздается без ошибок. Однако, когда я пытаюсь использовать ISO для запуска установки, система всегда умирает:
"new value non-existent xfs filesystem is not valid as a default fs type"
Pane is dead
в отличие этот вопрос здесь, моя ошибка возникает перед установкой, и я уже использую lang = en_US.UTF-8
. Я даже пробовал en_US
, но это не имело значения.
Строки, которые я добавил в isolinux.cfg
файл:
label install
menu label ^Kickstart Installation
menu default
kernel vmlinuz
append initrd=initrd.img text ramdisk=100000 lang=en_US.UTF-8 keymap=us ipv6.disable=1 ip=dhcp install inst.ks=cdrom:/kickstart.cfg
Я поискал ошибку в Интернете, и многие комментарии, похоже, связаны с несовпадением версий init и ядра или поврежденными файлами. Я не заменяю никаких файлов, единственное изменение, которое я вношу, - это файл конфигурации. isolinux.cfg
. Нет смешивания файлов из разных версий / DVD / образов.
Кто-нибудь видел / видел вышеизложенное и есть идеи, что мне попробовать дальше? Я пробовал поиграть с параметрами, которые я помещаю в файл, но, похоже, это не имеет значения.
Другая информация
Исходное изображение: CentOS 7.2 - DVD ISO
Состояние системы:
Ctrl-Alt-F1:
Ctrl-Alt-F2:
РЕДАКТИРОВАТЬ
Скрипт, который я пишу, в соответствии с просьбой:
#!/bin/bash
#############################################################
function prepare {
rm -rf ${ISO_EXTRACTION_DIR}
if [ -d ${ISO_MOUNT_DIR} ]
then
umount ${ISO_MOUNT_DIR} 2>&1 || true
rm -rf ${ISO_MOUNT_DIR}
fi
mkdir -p ${ISO_MOUNT_DIR} ${ISO_EXTRACTION_DIR}
}
function extract_iso {
echo "Extracting ISO"
cd $(dirname ${ISO_MOUNT_DIR})
cp -pRf ${ISO_MOUNT_DIR}/* ${ISO_EXTRACTION_DIR}
echo "Extracted $(ls ${ISO_EXTRACTION_DIR} | wc -l) files and directories from ISO"
}
function update_config {
echo "Updating configuration"
cd ${ISO_EXTRACTION_DIR}
if [ -d "isolinux" ]
then
isolinux_cfg_file="${ISO_EXTRACTION_DIR}/isolinux/isolinux.cfg"
else
isolinux_cfg_file="${ISO_EXTRACTION_DIR}/isolinux.cfg"
fi
sed -i 's/timeout 600/timeout 50/' ${isolinux_cfg_file} # Shorten timeout
sed -i '/menu default/d' ${isolinux_cfg_file} # Delete existing menu default
echo "label linux" >> ${isolinux_cfg_file}
echo " menu default" >> ${isolinux_cfg_file}
echo " kernel vmlinuz" >> ${isolinux_cfg_file}
echo " append initrd=initrd.img text ramdisk=100000 lang=en_US.UTF-8 keymap=us ipv6.disable=1 ip=dhcp install inst.ks=cdrom:/kickstart.cfg" >> ${isolinux_cfg_file}
}
function repackage_iso {
echo "Repackaging ISO"
cd ${ISO_EXTRACTION_DIR}
volume_id="${LINUX_DISTRO}-${LINUX_VERSION}-bootable"
if [ -d "isolinux" ]
then
boot_cat_file="isolinux/boot.cat"
isolinux_bin_file="isolinux/isolinux.bin"
else
boot_cat_file="boot.cat"
isolinux_bin_file="isolinux.bin"
fi
iso_file_name="$(echo $(basename ${IMAGE_FILENAME}) | cut -d '.' -f 1)-bootable.iso"
genisoimage \
-U -r -v -T -J -joliet-long \
-V 'CentOS 7 x86_64' \
-volset "${LINUX_DISTRO}-${LINUX_VERSION}" \
-A "${LINUX_DISTRO}-${LINUX_VERSION}" \
-b ${isolinux_bin_file} \
-c ${boot_cat_file} \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-eltorito-alt-boot \
-e images/efiboot.img \
-no-emul-boot \
-o "${IMAGE_DIR}/${iso_file_name}" .
}
prepare
check_input
mount_iso
extract_iso
unmount_iso
update_config
repackage_iso
У меня была точно такая же проблема, пока я не понял, что я не обновил свою среду pxe tftpboot, чтобы она соответствовала моему актуальному носителю Centos 7.5, путем копирования файлов версии Centos-7.5 из centos / 7 / os / x86_64 / изолинукс /.
Я получил это работало несколько дней назад, но забыл опубликовать здесь (извините!). Отвечая на свой вопрос, если это кому-то поможет.
Вместо замены всего пункта меню мне пришлось использовать sed
чтобы изменить его части так, как я хотел. Он не был таким чистым, но он сделал то, что я хотел, поэтому я оставил его:
sed -i 's/timeout 600/timeout 50/' ${isolinux_cfg_file}
sed -i '/menu default/d' ${isolinux_cfg_file}
sed -i '/label linux/a\
menu default' ${isolinux_cfg_file} # this line is badly indented on purpose. Do not change it.
sed -i 's/quiet//' ${isolinux_cfg_file}
Я думаю, что частично это было пропавшим stage2
вариант на append
линия.
Я не буду «принимать» этот ответ, если у кого-то есть лучшее объяснение того, почему это сработало, а не создание новой опции меню.