ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] libguestfs
@ 2014-11-18 15:48 Alexey Shabalin
  2014-11-20  7:16 ` Alexey Gladkov
  0 siblings, 1 reply; 24+ messages in thread
From: Alexey Shabalin @ 2014-11-18 15:48 UTC (permalink / raw)
  To: ALT Linux Team development discussions, Michael Shigorin, legion,
	Валентин
	Росавицкий,
	Anton Gorlov

Вечер добрый.
Опишу прогресс над адаптацией libguestfs для ALTLinux.
И прошу знатоков подсказать где я могу ошибаться.

В двух словах, как работают утилиты из состава libguestfs.
Для работы утилит, запускается виртуальная машина с помощью qemu, в
параметрах которой указывается ядро и образ initrd, внутри которого
установлена минимальная система и утилиты для работы с файловыми
системами (fsck.*, resizefs и т.п.). Внутри этой виртуалки также
запускается демон guestfsd который принимает указания снаружи от
утилит и выполняет необходимые действия.
Основная проблема - подготовить этот самый initrd (appliance).
В fedora для изготовления appliance используется проект supermin
(бывший febootstrap). В принципе я адаптировал supermin для работы с
apt-rpm, но решил отказаться от этого. Мне больше понравился подход
opensuse, где initrd (appliance) генерируется с помощью
mkinitrd(правда модифицированных).

Что сделано:
- используется make-initrd из master
git://git.altlinux.org/people/legion/packages/make-initrd.git
- для нового  make-initrd также нужен и новый sysvinit-initramfs из
master git://git.altlinux.org/people/legion/packages/sysvinit.git

- копируем текущее ядро в /usr/lib64/guestfs/vmlinuz.x86_64
- chmod 644 /usr/lib64/guestfs/vmlinuz.x86_64
- изготавливаем initrd:
   в /etc/initrd.mk.d/guestfs.mk
--------
IMAGEFILE = /usr/$(LIBNAME)/guestfs/initramfs.$(ARCH).img
FEATURES += guestfs
--------

  в /usr/share/make-initrd/features/guestfs/config.mk
--------
DISABLE_FEATURES += plymouth
FEATURES += devmapper qemu # в дальнейшем также понадобятся mdadm lvm btrfs
GUESTFS_DATADIR = \
        $(FEATURESDIR)/guestfs/data


GUESTFS_FILES   = \
        /usr/sbin/guestfsd \
        /usr/sbin/parted \
        $(wildcard /sbin/mount*) \
        $(wildcard /sbin/fsck*) \
        $(wildcard /sbin/mkfs*) \
        $(wildcard /sbin/*resize*) \
        $(wildcard /sbin/*disk)
--------

  в /usr/share/make-initrd/features/guestfs/rules.mk

--------
MODULES_ADD += drivers/scsi/ drivers/ata/ fs/

guestfs:
        @echo "Adding guestfs support ..."
        @put-tree "$(ROOTDIR)" $(GUESTFS_DATADIR)
        @put-file "$(ROOTDIR)" $(GUESTFS_FILES)

pack: guestfs
--------

в /usr/share/make-initrd/features/guestfs/data/etc/rc.d/init.d/guestfsd
--------
#!/bin/sh
### BEGIN INIT INFO
# Provides:            guestfsd
# Required-Start:      uevent
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:       3 4 5
# Default-Stop:
# Short-Description:   guestfsd daemon
### END INIT INFO

. /etc/init.d/template

NAME=guestfsd
PIDFILE=/var/run/$NAME.pid
LOCKFILE=/var/lock/subsys/$NAME

start() {

#       start_daemon --lockfile "$LOCKFILE" --pidfile "$PIDFILE"
--displayname "$NAME" -- $NAME
        start_daemon --displayname "$NAME" -- $NAME
        RETVAL=$?
        return $RETVAL

}

stop()
{
        stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE"
--no-announce -- $NAME
        RETVAL=$?
        return $RETVAL
}

restart()
{
        stop
        start
}

switch "${1-}"

--------

  в /usr/share/make-initrd/features/guestfs/data/etc/udev/rules.d
-----------
# For libguestfs, create /dev/disk/guestfs/<serial>
# and /dev/disk/guestfs/<serial><partnum>

KERNEL=="sd*[!0-9]", ENV{DEVTYPE}=="disk", ENV{ID_SCSI_SERIAL}=="?*", \
  SYMLINK+="disk/guestfs/$env{ID_SCSI_SERIAL}"
KERNEL=="sd*", ENV{DEVTYPE}=="partition", ENV{ID_SCSI_SERIAL}=="?*", \
  SYMLINK+="disk/guestfs/$env{ID_SCSI_SERIAL}%n"

# As written, it's likely the above only works with virtio-scsi
# because ID_SCSI_SERIAL is specific to the output of the 'scsi_id'
# program.  The following will not work because ID_SERIAL contains
# some unwanted text.

#KERNEL=="vd*[!0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", \
#  SYMLINK+="disk/guestfs/$env{ID_SERIAL}"
#KERNEL=="vd*[0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", \
#  SYMLINK+="disk/guestfs/$env{ID_SERIAL}%n"

-----------

- make-initrd
- chmod 644 /usr/lib64/guestfs/initramfs.x86_64.img

 initrd (appliance) готов. приступаем к тестированию.

export LIBGUESTFS_BACKEND=direct
libguestfs-test-tool
и загрузка виртуалки замерзает на этапе старта udev:
INIT: version 2.88 booting
INIT: Entering runlevel: 3
Mounting filesystem [/dev]: \x1b[72G[ \x1b[1m\x1b[32mDONE\x1b[39;49m\x1b[0;10m ]
Mounting filesystem [/proc]: \x1b[72G[
\x1b[1m\x1b[32mDONE\x1b[39;49m\x1b[0;10m ]
Mounting filesystem [/sys]: \x1b[72G[ \x1b[1m\x1b[32mDONE\x1b[39;49m\x1b[0;10m ]
Mounting filesystem [/run]: \x1b[72G[ \x1b[1m\x1b[32mDONE\x1b[39;49m\x1b[0;10m ]
Mounting filesystem [/dev/pts]: \x1b[72G[
\x1b[1m\x1b[32mDONE\x1b[39;49m\x1b[0;10m ]
Parsing cmdline arguments: \x1b[72G[ \x1b[1m\x1b[32mDONE\x1b[39;49m\x1b[0;10m ]
Creating /etc/fstab: S30fstab: Root device unspecified.
\x1b[72G[\x1b[1m\x1b[31mFAILED\x1b[39;49m\x1b[0;10m]
Starting lo interface: \x1b[72G[ \x1b[1m\x1b[32mDONE\x1b[39;49m\x1b[0;10m ]
Starting timerd service: \x1b[72G[ \x1b[1m\x1b[32mDONE\x1b[39;49m\x1b[0;10m ]
Loading modules before udev:
\x1b[72G[\x1b[1m\x1b[31mFAILED\x1b[39;49m\x1b[0;10m]
Starting udevd service:  Сигнал таймера

Вот тут я не пойму почему udev не стартует, и прошу подсказки, с чем
это может быть связано.
Хочется для начала добиться работы qemu с указанием ядра и initrd,
хоть и без guestfsd.
/usr/bin/qemu-kvm \
    -global virtio-blk-pci.scsi=off \
    -nodefconfig \
    -enable-fips \
    -nodefaults \
    -display none \
    -cpu host \
    -machine accel=kvm:tcg \
    -m 500 \
    -no-reboot \
    -rtc driftfix=slew \
    -no-hpet \
    -global kvm-pit.lost_tick_policy=discard \
    -kernel /usr/lib64/guestfs/vmlinuz.x86_64 \
    -initrd /usr/lib64/guestfs/initramfs.x86_64.img \
    -device virtio-scsi-pci,id=scsi \
    -drive file=/tmp/.private/shabalin/libguestfsrjal5E/scratch.1,cache=unsafe,format=raw,id=hd0,if=none
\
    -device scsi-hd,drive=hd0 \
    -device virtio-serial-pci \
    -serial stdio \
    -device sga \
    -chardev socket,path=/tmp/.private/shabalin/libguestfsrjal5E/guestfsd.sock,id=channel0
\
    -device virtserialport,chardev=channel0,name=org.libguestfs.channel.0 \
    -append 'panic=1 console=ttyS0 udevtimeout=6000
udev.event-timeout=6000 no_timer_check acpi=off printk.time=1
cgroup_disable=memory selinux=0 guestfs_verbose=1 TERM=xterm'


Проблемы упаковки пока тоже в отдаленном будущем.

-- 
Alexey Shabalin


^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2014-12-05 22:59 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-18 15:48 [devel] libguestfs Alexey Shabalin
2014-11-20  7:16 ` Alexey Gladkov
2014-11-27 12:17   ` Alexey Shabalin
2014-11-27 12:48     ` Alexey Gladkov
2014-11-27 13:53     ` Eugene Prokopiev
2014-11-27 14:15       ` Alexey Shabalin
2014-11-27 14:29         ` Michael Shigorin
2014-11-27 14:36           ` Alexey Shabalin
2014-11-27 18:04         ` Eugene Prokopiev
2014-11-27 18:15           ` Alexey Gladkov
2014-11-27 18:31             ` Eugene Prokopiev
2014-11-27 14:50       ` Alexey Gladkov
2014-11-27 17:38         ` Eugene Prokopiev
2014-11-27 18:05           ` Alexey Gladkov
2014-11-28 16:54             ` Alexey Shabalin
2014-11-28 17:02               ` Alexey Gladkov
2014-11-28 17:03               ` Dmitry V. Levin
2014-11-29 21:34                 ` Alexey Gladkov
2014-11-29 23:47                   ` [devel] /lib/modules/ access permissions (was: libguestfs) Dmitry V. Levin
2014-11-30  1:15                     ` [devel] /lib/modules/ access permissions Alexey Gladkov
2014-12-05 13:14                     ` [devel] /lib/modules/ access permissions (was: libguestfs) Alexey Shabalin
2014-12-05 22:52                       ` Dmitry V. Levin
2014-11-29 23:37                 ` [devel] libguestfs Alexey Shabalin
2014-12-05 22:59                   ` Dmitry V. Levin

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git