LINUX.ORG.RU

Установка lilo на loopback

 , , ,


1

1

Собственно, создаю демон для управления vps на qemu(kvm). И так, первые модули я создал успешно (всё работает), дошла очередь до модуля создания жёсткогог диска виртуалки. Однако, я решил создать не простой образ, а с уже предустановленным debian. Когда доходит очередь до lilo, появляется ошибка (установка происходит на loopback устройство.)

Warning: LBA32 addressing assumed
Fatal: Sorry, don't know how to handle device 0x0700
run-parts: /etc/initramfs/post-update.d//runlilo exited with return code 1
dpkg: error processing initramfs-tools (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)
Install system completed.

Вот сам скрипт:
#!/bin/bash

# Задаём переменные

VM_NAME=$1
VM_PATH=/home/system/VPSD/VM
VM_CONFIG_FILE=vm.conf
TMP_DIR=/tmp
WORK_DIR=$(echo $VM_NAME)
VM_IP_ADDR=$2
HD_SIZE=$3
VM_GW=$4
HD_FILENAME=hd.img
LOOP=loop0
FS=ext4
RELEASE=wheezy
MIRROR="http://mirror.yandex.ru/debian"

# Создаём директории для монтирования

echo «Creating directories...»
mkdir $TMP_DIR/$WORK_DIR

# Создаём образ и подключаем его

echo «Creating image...»
dd if=/dev/zero of=$TMP_DIR/$HD_FILENAME bs=1024 count=$((${HD_SIZE}*1024))
echo «Connecting to loop device...»
losetup /dev/$LOOP $TMP_DIR/$HD_FILENAME
echo «Creating filesystem....»
mkfs -t ext4 /dev/$LOOP
echo «Mouting $HD_FILENAME...»
mount -t $FS /dev/$LOOP $TMP_DIR/$WORK_DIR
echo «Installing system to image...»

# Устанавливаем в него систему

debootstrap $RELEASE $TMP_DIR/$WORK_DIR $MIRROR
echo «Generating network config...»

# Настраиваем сеть

echo «auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address $VM_IP_ADDR
netmask 255.255.255.255
post-up ip route add $VM_GW dev eth0
post-up ip route add default via $VM_GW dev eth0» >$TMP_DIR/$WORK_DIR/etc/network/interfaces

# Настраиваем apt

echo «Configuring apt the system...»
echo «deb $MIRROR $RELEASE main contrib» >$TMP_DIR/$WORK_DIR/etc/apt/sources.list
chroot $TMP_DIR/$WORK_DIR apt-get update

# Устанавливаем дополнительные пакеты и загрузчик

echo «Installing remote access and bootloader...»
mount --bind /dev $TMP_DIR/$WORK_DIR/dev
mount --bind /proc $TMP_DIR/$WORK_DIR/proc
mount --bind /sys $TMP_DIR/$WORK_DIR/sys

# Настраиваем lilo

echo «boot=/dev/$LOOP
prompt
timeout=0
image=/vmlinuz
initrd=/initrd.img
root=/dev/sda
label=Debian» >$TMP_DIR/$WORK_DIR/etc/lilo.conf

# Устанавливаем необходимые пакеты

chroot $TMP_DIR/$WORK_DIR apt-get -y install openssh-server openssh-client lilo linux-image-3.2.0-4-486

# Настраиваем lilo как надо

echo «boot=/dev/$LOOP
prompt
timeout=0
image=/vmlinuz
initrd=/initrd.img
root=/dev/sda
label=Debian» >$TMP_DIR/$WORK_DIR/etc/lilo.conf

# Отключаем образ и подключаем его к VPS

umount $TMP_DIR/$WORK_DIR/dev
umount $TMP_DIR/$WORK_DIR/proc
umount $TMP_DIR/$WORK_DIR/sys
umount /tmp/test1
losetup -d /dev/$LOOP
mv $TMP_DIR/$HD_FILENAME $VM_PATH/$VM_NAME/$HD_FILENAME
echo "-hda $VM_PATH/$VM_NAME/$HD_FILENAME
-boot c" >>$VM_PATH/$VM_NAME/$VM_CONFIG_FILE

# Всё

echo «Install system completed.»

★★★★★

Меня сломало читать эту портянку, поэтому может что и пропустил. Но лило грузится через BIOS, поэтому ему нужно знать на какое дисковое устройство в BIOS-нумерации его ставят. Поэтому при установке он это всегда пытается выяснить, и при устновке на всякие не дисковые устройства ему нужно это указывать как-то так:

disk = /dev/loop0
bios = 0x80

mky ★★★★★ ()

до модуля создания жёсткогог диска виртуалки.

mkfs что ли?

вообще, нафига на линуксовой ВМ в линуксовом хосте иметь загрузчик?

darkenshvein ★★★★★ ()
Ответ на: комментарий от ne-vlezay

Продолжайте добавлять опции, чтобы лило принял лупбэк за нормальный диск (после bios=0x80):

sectors=63
heads=16
cylinders=1000
static-BIOS-codes

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.