From: Alexey Shabalin <a.shabalin@gmail.com> To: "ALT Linux Team development discussions" <devel@lists.altlinux.org>, "Michael Shigorin" <mike@altlinux.org>, "legion@altlinux.org" <legion@altlinux.org>, "Валентин Росавицкий" <valintinr@ukr.net>, "Anton Gorlov" <stalker@altlinux.ru> Subject: [devel] libguestfs Date: Tue, 18 Nov 2014 19:48:32 +0400 Message-ID: <CAEdvWkSSKQOmn_prX5RUsgcW_MSderePjiSLfp3n6e70aqo0KA@mail.gmail.com> (raw) Вечер добрый. Опишу прогресс над адаптацией 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
next reply other threads:[~2014-11-18 15:48 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-11-18 15:48 Alexey Shabalin [this message] 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
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAEdvWkSSKQOmn_prX5RUsgcW_MSderePjiSLfp3n6e70aqo0KA@mail.gmail.com \ --to=a.shabalin@gmail.com \ --cc=devel@lists.altlinux.org \ --cc=legion@altlinux.org \ --cc=mike@altlinux.org \ --cc=stalker@altlinux.ru \ --cc=valintinr@ukr.net \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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