summaryrefslogtreecommitdiffstats
path: root/builder/dnbd3-rootfs
diff options
context:
space:
mode:
authortorben2015-11-05 15:46:17 +0100
committertorben2015-11-05 15:46:17 +0100
commit5dec51bd56b86f9f480cfff76a0779eb92d9b3c8 (patch)
treeaf6e5f9008b73e221ca84336cfe8f41910d4582e /builder/dnbd3-rootfs
parentDocument new simplified approaches. (diff)
downloadsystemd-init-5dec51bd56b86f9f480cfff76a0779eb92d9b3c8.tar.gz
systemd-init-5dec51bd56b86f9f480cfff76a0779eb92d9b3c8.tar.xz
systemd-init-5dec51bd56b86f9f480cfff76a0779eb92d9b3c8.zip
Rename dracut modules folder.
Diffstat (limited to 'builder/dnbd3-rootfs')
-rwxr-xr-xbuilder/dnbd3-rootfs/binaries/busybox/busyboxbin0 -> 504912 bytes
m---------builder/dnbd3-rootfs/binaries/dnbd30
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd1
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd595
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd1145
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/.tmp_versions/nbd.mod2
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/Makefile15
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/Module.symvers0
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/modules.order1
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/nbd.c1136
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/nbd.kobin0 -> 36992 bytes
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c105
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/nbd.mod.obin0 -> 7592 bytes
-rw-r--r--builder/dnbd3-rootfs/binaries/nbd/nbd.obin0 -> 32344 bytes
-rw-r--r--builder/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c33
-rwxr-xr-xbuilder/dnbd3-rootfs/debugging-tools/endlessbin0 -> 6752 bytes
-rw-r--r--builder/dnbd3-rootfs/debugging-tools/endless.c10
-rw-r--r--builder/dnbd3-rootfs/debugging-tools/network.functions23
-rw-r--r--builder/dnbd3-rootfs/debugging-tools/setup-network.sh84
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh2
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh36
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/cmdline/set-dracut-environment-variables.sh5
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/mount/mount-root-device.sh1
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/pre-mount/fetch-config.sh39
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh49
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh42
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh40
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh32
-rwxr-xr-xbuilder/dnbd3-rootfs/hooks/pre-udev/setup-loopback-device.sh1
-rwxr-xr-xbuilder/dnbd3-rootfs/module-setup.sh79
-rw-r--r--builder/dnbd3-rootfs/readme.md472
-rwxr-xr-xbuilder/dnbd3-rootfs/scripts/prepare-disks211
-rwxr-xr-xbuilder/dnbd3-rootfs/scripts/setup-qcow2137
-rw-r--r--builder/dnbd3-rootfs/scripts/utils.sh99
-rw-r--r--builder/dnbd3-rootfs/udev/70-openslx-disk.rules7
35 files changed, 4402 insertions, 0 deletions
diff --git a/builder/dnbd3-rootfs/binaries/busybox/busybox b/builder/dnbd3-rootfs/binaries/busybox/busybox
new file mode 100755
index 00000000..7eceacf7
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/busybox/busybox
Binary files differ
diff --git a/builder/dnbd3-rootfs/binaries/dnbd3 b/builder/dnbd3-rootfs/binaries/dnbd3
new file mode 160000
+Subproject c3c050851dc866f2311d33a262ed81af8c57ce2
diff --git a/builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd b/builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd
new file mode 100644
index 00000000..17386f08
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/.nbd.ko.cmd
@@ -0,0 +1 @@
+cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko := ld -r -m elf_x86_64 -T ./scripts/module-common.lds --build-id -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o
diff --git a/builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd b/builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd
new file mode 100644
index 00000000..1248ea8a
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/.nbd.mod.o.cmd
@@ -0,0 +1,595 @@
+cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := gcc -Wp,-MD,/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.nbd.mod.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(nbd.mod)" -D"KBUILD_MODNAME=KBUILD_STR(nbd)" -DMODULE -c -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.c
+
+source_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.c
+
+deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o := \
+ $(wildcard include/config/module/unload.h) \
+ include/linux/module.h \
+ $(wildcard include/config/modules.h) \
+ $(wildcard include/config/sysfs.h) \
+ $(wildcard include/config/unused/symbols.h) \
+ $(wildcard include/config/module/sig.h) \
+ $(wildcard include/config/modules/tree/lookup.h) \
+ $(wildcard include/config/generic/bug.h) \
+ $(wildcard include/config/kallsyms.h) \
+ $(wildcard include/config/smp.h) \
+ $(wildcard include/config/tracepoints.h) \
+ $(wildcard include/config/tracing.h) \
+ $(wildcard include/config/event/tracing.h) \
+ $(wildcard include/config/ftrace/mcount/record.h) \
+ $(wildcard include/config/livepatch.h) \
+ $(wildcard include/config/constructors.h) \
+ $(wildcard include/config/debug/set/module/ronx.h) \
+ include/linux/list.h \
+ $(wildcard include/config/debug/list.h) \
+ include/linux/types.h \
+ $(wildcard include/config/uid16.h) \
+ $(wildcard include/config/lbdaf.h) \
+ $(wildcard include/config/arch/dma/addr/t/64bit.h) \
+ $(wildcard include/config/phys/addr/t/64bit.h) \
+ $(wildcard include/config/64bit.h) \
+ include/uapi/linux/types.h \
+ arch/x86/include/uapi/asm/types.h \
+ include/uapi/asm-generic/types.h \
+ include/asm-generic/int-ll64.h \
+ include/uapi/asm-generic/int-ll64.h \
+ arch/x86/include/uapi/asm/bitsperlong.h \
+ include/asm-generic/bitsperlong.h \
+ include/uapi/asm-generic/bitsperlong.h \
+ include/uapi/linux/posix_types.h \
+ include/linux/stddef.h \
+ include/uapi/linux/stddef.h \
+ include/linux/compiler.h \
+ $(wildcard include/config/sparse/rcu/pointer.h) \
+ $(wildcard include/config/trace/branch/profiling.h) \
+ $(wildcard include/config/profile/all/branches.h) \
+ $(wildcard include/config/enable/must/check.h) \
+ $(wildcard include/config/enable/warn/deprecated.h) \
+ $(wildcard include/config/kprobes.h) \
+ include/linux/compiler-gcc.h \
+ $(wildcard include/config/arch/supports/optimized/inlining.h) \
+ $(wildcard include/config/optimize/inlining.h) \
+ $(wildcard include/config/gcov/kernel.h) \
+ $(wildcard include/config/arch/use/builtin/bswap.h) \
+ arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/x86/32.h) \
+ arch/x86/include/uapi/asm/posix_types_64.h \
+ include/uapi/asm-generic/posix_types.h \
+ include/linux/poison.h \
+ $(wildcard include/config/illegal/pointer/value.h) \
+ include/uapi/linux/const.h \
+ include/linux/kernel.h \
+ $(wildcard include/config/preempt/voluntary.h) \
+ $(wildcard include/config/debug/atomic/sleep.h) \
+ $(wildcard include/config/mmu.h) \
+ $(wildcard include/config/prove/locking.h) \
+ $(wildcard include/config/panic/timeout.h) \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include/stdarg.h \
+ include/linux/linkage.h \
+ include/linux/stringify.h \
+ include/linux/export.h \
+ $(wildcard include/config/have/underscore/symbol/prefix.h) \
+ $(wildcard include/config/modversions.h) \
+ arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/x86/64.h) \
+ $(wildcard include/config/x86/alignment/16.h) \
+ include/linux/bitops.h \
+ arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/x86/cmov.h) \
+ arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/paravirt.h) \
+ arch/x86/include/asm/asm.h \
+ arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/x86/debugctlmsr.h) \
+ arch/x86/include/asm/segment.h \
+ $(wildcard include/config/cc/stackprotector.h) \
+ $(wildcard include/config/x86/32/lazy/gs.h) \
+ arch/x86/include/asm/cache.h \
+ $(wildcard include/config/x86/l1/cache/shift.h) \
+ $(wildcard include/config/x86/internode/cache/shift.h) \
+ $(wildcard include/config/x86/vsmp.h) \
+ arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/physical/start.h) \
+ $(wildcard include/config/physical/align.h) \
+ arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/kasan.h) \
+ $(wildcard include/config/randomize/base.h) \
+ $(wildcard include/config/randomize/base/max/offset.h) \
+ arch/x86/include/uapi/asm/ptrace.h \
+ arch/x86/include/uapi/asm/ptrace-abi.h \
+ arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/vm86.h) \
+ arch/x86/include/uapi/asm/processor-flags.h \
+ arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/x86/local/apic.h) \
+ $(wildcard include/config/pgtable/levels.h) \
+ $(wildcard include/config/x86/pae.h) \
+ $(wildcard include/config/queued/spinlocks.h) \
+ $(wildcard include/config/paravirt/debug.h) \
+ arch/x86/include/asm/desc_defs.h \
+ arch/x86/include/asm/kmap_types.h \
+ $(wildcard include/config/debug/highmem.h) \
+ include/asm-generic/kmap_types.h \
+ arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/kmemcheck.h) \
+ $(wildcard include/config/mem/soft/dirty.h) \
+ $(wildcard include/config/proc/fs.h) \
+ arch/x86/include/asm/pgtable_64_types.h \
+ arch/x86/include/asm/sparsemem.h \
+ $(wildcard include/config/sparsemem.h) \
+ arch/x86/include/asm/spinlock_types.h \
+ $(wildcard include/config/paravirt/spinlocks.h) \
+ $(wildcard include/config/nr/cpus.h) \
+ include/asm-generic/qspinlock_types.h \
+ include/asm-generic/qrwlock_types.h \
+ include/asm-generic/ptrace.h \
+ arch/x86/include/asm/cpufeature.h \
+ $(wildcard include/config/x86/feature/names.h) \
+ $(wildcard include/config/x86/debug/static/cpu/has.h) \
+ arch/x86/include/asm/required-features.h \
+ $(wildcard include/config/x86/minimum/cpu/family.h) \
+ $(wildcard include/config/math/emulation.h) \
+ $(wildcard include/config/x86/cmpxchg64.h) \
+ $(wildcard include/config/x86/use/3dnow.h) \
+ $(wildcard include/config/x86/p6/nop.h) \
+ $(wildcard include/config/matom.h) \
+ arch/x86/include/asm/disabled-features.h \
+ $(wildcard include/config/x86/intel/mpx.h) \
+ arch/x86/include/asm/rmwcc.h \
+ arch/x86/include/asm/barrier.h \
+ $(wildcard include/config/x86/ppro/fence.h) \
+ arch/x86/include/asm/nops.h \
+ $(wildcard include/config/mk7.h) \
+ include/asm-generic/bitops/find.h \
+ $(wildcard include/config/generic/find/first/bit.h) \
+ include/asm-generic/bitops/sched.h \
+ arch/x86/include/asm/arch_hweight.h \
+ include/asm-generic/bitops/const_hweight.h \
+ include/asm-generic/bitops/le.h \
+ arch/x86/include/uapi/asm/byteorder.h \
+ include/linux/byteorder/little_endian.h \
+ include/uapi/linux/byteorder/little_endian.h \
+ include/linux/swab.h \
+ include/uapi/linux/swab.h \
+ arch/x86/include/uapi/asm/swab.h \
+ include/linux/byteorder/generic.h \
+ include/asm-generic/bitops/ext2-atomic-setbit.h \
+ include/linux/log2.h \
+ $(wildcard include/config/arch/has/ilog2/u32.h) \
+ $(wildcard include/config/arch/has/ilog2/u64.h) \
+ include/linux/typecheck.h \
+ include/linux/printk.h \
+ $(wildcard include/config/message/loglevel/default.h) \
+ $(wildcard include/config/early/printk.h) \
+ $(wildcard include/config/printk.h) \
+ $(wildcard include/config/dynamic/debug.h) \
+ include/linux/init.h \
+ $(wildcard include/config/broken/rodata.h) \
+ $(wildcard include/config/lto.h) \
+ include/linux/kern_levels.h \
+ include/linux/cache.h \
+ $(wildcard include/config/arch/has/cache/line/size.h) \
+ include/uapi/linux/kernel.h \
+ include/uapi/linux/sysinfo.h \
+ include/linux/dynamic_debug.h \
+ include/linux/stat.h \
+ arch/x86/include/uapi/asm/stat.h \
+ include/uapi/linux/stat.h \
+ include/linux/time.h \
+ $(wildcard include/config/arch/uses/gettimeoffset.h) \
+ include/linux/seqlock.h \
+ $(wildcard include/config/debug/lock/alloc.h) \
+ include/linux/spinlock.h \
+ $(wildcard include/config/debug/spinlock.h) \
+ $(wildcard include/config/generic/lockbreak.h) \
+ $(wildcard include/config/preempt.h) \
+ include/linux/preempt.h \
+ $(wildcard include/config/preempt/count.h) \
+ $(wildcard include/config/debug/preempt.h) \
+ $(wildcard include/config/preempt/tracer.h) \
+ $(wildcard include/config/preempt/notifiers.h) \
+ arch/x86/include/asm/preempt.h \
+ arch/x86/include/asm/percpu.h \
+ $(wildcard include/config/x86/64/smp.h) \
+ include/asm-generic/percpu.h \
+ $(wildcard include/config/have/setup/per/cpu/area.h) \
+ include/linux/threads.h \
+ $(wildcard include/config/base/small.h) \
+ include/linux/percpu-defs.h \
+ $(wildcard include/config/debug/force/weak/per/cpu.h) \
+ include/linux/thread_info.h \
+ $(wildcard include/config/compat.h) \
+ $(wildcard include/config/debug/stack/usage.h) \
+ include/linux/bug.h \
+ arch/x86/include/asm/bug.h \
+ $(wildcard include/config/debug/bugverbose.h) \
+ include/asm-generic/bug.h \
+ $(wildcard include/config/bug.h) \
+ $(wildcard include/config/generic/bug/relative/pointers.h) \
+ arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/ia32/emulation.h) \
+ arch/x86/include/asm/page.h \
+ arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/debug/virtual.h) \
+ $(wildcard include/config/flatmem.h) \
+ $(wildcard include/config/x86/vsyscall/emulation.h) \
+ include/linux/range.h \
+ include/asm-generic/memory_model.h \
+ $(wildcard include/config/discontigmem.h) \
+ $(wildcard include/config/sparsemem/vmemmap.h) \
+ include/asm-generic/getorder.h \
+ arch/x86/include/asm/processor.h \
+ $(wildcard include/config/m486.h) \
+ $(wildcard include/config/xen.h) \
+ arch/x86/include/asm/vm86.h \
+ arch/x86/include/uapi/asm/vm86.h \
+ arch/x86/include/asm/math_emu.h \
+ arch/x86/include/asm/sigcontext.h \
+ arch/x86/include/uapi/asm/sigcontext.h \
+ arch/x86/include/asm/current.h \
+ arch/x86/include/asm/msr.h \
+ arch/x86/include/asm/msr-index.h \
+ arch/x86/include/uapi/asm/errno.h \
+ include/uapi/asm-generic/errno.h \
+ include/uapi/asm-generic/errno-base.h \
+ arch/x86/include/asm/cpumask.h \
+ include/linux/cpumask.h \
+ $(wildcard include/config/cpumask/offstack.h) \
+ $(wildcard include/config/hotplug/cpu.h) \
+ $(wildcard include/config/debug/per/cpu/maps.h) \
+ include/linux/bitmap.h \
+ include/linux/string.h \
+ $(wildcard include/config/binary/printf.h) \
+ include/uapi/linux/string.h \
+ arch/x86/include/asm/string.h \
+ arch/x86/include/asm/string_64.h \
+ arch/x86/include/uapi/asm/msr.h \
+ include/uapi/linux/ioctl.h \
+ arch/x86/include/uapi/asm/ioctl.h \
+ include/asm-generic/ioctl.h \
+ include/uapi/asm-generic/ioctl.h \
+ arch/x86/include/asm/paravirt.h \
+ arch/x86/include/asm/special_insns.h \
+ arch/x86/include/asm/fpu/types.h \
+ include/linux/personality.h \
+ include/uapi/linux/personality.h \
+ include/linux/math64.h \
+ $(wildcard include/config/arch/supports/int128.h) \
+ arch/x86/include/asm/div64.h \
+ include/asm-generic/div64.h \
+ include/linux/err.h \
+ include/linux/irqflags.h \
+ $(wildcard include/config/trace/irqflags.h) \
+ $(wildcard include/config/irqsoff/tracer.h) \
+ $(wildcard include/config/trace/irqflags/support.h) \
+ arch/x86/include/asm/irqflags.h \
+ include/linux/atomic.h \
+ $(wildcard include/config/arch/has/atomic/or.h) \
+ $(wildcard include/config/generic/atomic64.h) \
+ arch/x86/include/asm/atomic.h \
+ arch/x86/include/asm/cmpxchg.h \
+ arch/x86/include/asm/cmpxchg_64.h \
+ arch/x86/include/asm/atomic64_64.h \
+ include/asm-generic/atomic-long.h \
+ include/linux/bottom_half.h \
+ include/linux/spinlock_types.h \
+ include/linux/lockdep.h \
+ $(wildcard include/config/lockdep.h) \
+ $(wildcard include/config/lock/stat.h) \
+ include/linux/rwlock_types.h \
+ arch/x86/include/asm/spinlock.h \
+ include/linux/jump_label.h \
+ $(wildcard include/config/jump/label.h) \
+ arch/x86/include/asm/jump_label.h \
+ arch/x86/include/asm/qspinlock.h \
+ include/asm-generic/qspinlock.h \
+ arch/x86/include/asm/qrwlock.h \
+ include/asm-generic/qrwlock.h \
+ include/linux/rwlock.h \
+ include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/inline/spin/lock.h) \
+ $(wildcard include/config/inline/spin/lock/bh.h) \
+ $(wildcard include/config/inline/spin/lock/irq.h) \
+ $(wildcard include/config/inline/spin/lock/irqsave.h) \
+ $(wildcard include/config/inline/spin/trylock.h) \
+ $(wildcard include/config/inline/spin/trylock/bh.h) \
+ $(wildcard include/config/uninline/spin/unlock.h) \
+ $(wildcard include/config/inline/spin/unlock/bh.h) \
+ $(wildcard include/config/inline/spin/unlock/irq.h) \
+ $(wildcard include/config/inline/spin/unlock/irqrestore.h) \
+ include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/inline/read/lock.h) \
+ $(wildcard include/config/inline/write/lock.h) \
+ $(wildcard include/config/inline/read/lock/bh.h) \
+ $(wildcard include/config/inline/write/lock/bh.h) \
+ $(wildcard include/config/inline/read/lock/irq.h) \
+ $(wildcard include/config/inline/write/lock/irq.h) \
+ $(wildcard include/config/inline/read/lock/irqsave.h) \
+ $(wildcard include/config/inline/write/lock/irqsave.h) \
+ $(wildcard include/config/inline/read/trylock.h) \
+ $(wildcard include/config/inline/write/trylock.h) \
+ $(wildcard include/config/inline/read/unlock.h) \
+ $(wildcard include/config/inline/write/unlock.h) \
+ $(wildcard include/config/inline/read/unlock/bh.h) \
+ $(wildcard include/config/inline/write/unlock/bh.h) \
+ $(wildcard include/config/inline/read/unlock/irq.h) \
+ $(wildcard include/config/inline/write/unlock/irq.h) \
+ $(wildcard include/config/inline/read/unlock/irqrestore.h) \
+ $(wildcard include/config/inline/write/unlock/irqrestore.h) \
+ include/linux/time64.h \
+ include/uapi/linux/time.h \
+ include/linux/uidgid.h \
+ $(wildcard include/config/multiuser.h) \
+ $(wildcard include/config/user/ns.h) \
+ include/linux/highuid.h \
+ include/linux/kmod.h \
+ include/linux/gfp.h \
+ $(wildcard include/config/highmem.h) \
+ $(wildcard include/config/zone/dma.h) \
+ $(wildcard include/config/zone/dma32.h) \
+ $(wildcard include/config/numa.h) \
+ $(wildcard include/config/deferred/struct/page/init.h) \
+ $(wildcard include/config/pm/sleep.h) \
+ $(wildcard include/config/cma.h) \
+ include/linux/mmdebug.h \
+ $(wildcard include/config/debug/vm.h) \
+ include/linux/mmzone.h \
+ $(wildcard include/config/force/max/zoneorder.h) \
+ $(wildcard include/config/memory/isolation.h) \
+ $(wildcard include/config/memcg.h) \
+ $(wildcard include/config/memory/hotplug.h) \
+ $(wildcard include/config/compaction.h) \
+ $(wildcard include/config/have/memblock/node/map.h) \
+ $(wildcard include/config/flat/node/mem/map.h) \
+ $(wildcard include/config/page/extension.h) \
+ $(wildcard include/config/no/bootmem.h) \
+ $(wildcard include/config/numa/balancing.h) \
+ $(wildcard include/config/have/memory/present.h) \
+ $(wildcard include/config/have/memoryless/nodes.h) \
+ $(wildcard include/config/need/node/memmap/size.h) \
+ $(wildcard include/config/need/multiple/nodes.h) \
+ $(wildcard include/config/have/arch/early/pfn/to/nid.h) \
+ $(wildcard include/config/sparsemem/extreme.h) \
+ $(wildcard include/config/have/arch/pfn/valid.h) \
+ $(wildcard include/config/holes/in/zone.h) \
+ $(wildcard include/config/arch/has/holes/memorymodel.h) \
+ include/linux/wait.h \
+ include/uapi/linux/wait.h \
+ include/linux/numa.h \
+ $(wildcard include/config/nodes/shift.h) \
+ include/linux/nodemask.h \
+ $(wildcard include/config/movable/node.h) \
+ include/linux/pageblock-flags.h \
+ $(wildcard include/config/hugetlb/page.h) \
+ $(wildcard include/config/hugetlb/page/size/variable.h) \
+ include/linux/page-flags-layout.h \
+ include/generated/bounds.h \
+ include/linux/memory_hotplug.h \
+ $(wildcard include/config/memory/hotremove.h) \
+ $(wildcard include/config/have/arch/nodedata/extension.h) \
+ $(wildcard include/config/have/bootmem/info/node.h) \
+ include/linux/notifier.h \
+ include/linux/errno.h \
+ include/uapi/linux/errno.h \
+ include/linux/mutex.h \
+ $(wildcard include/config/debug/mutexes.h) \
+ $(wildcard include/config/mutex/spin/on/owner.h) \
+ include/linux/osq_lock.h \
+ include/linux/rwsem.h \
+ $(wildcard include/config/rwsem/spin/on/owner.h) \
+ $(wildcard include/config/rwsem/generic/spinlock.h) \
+ arch/x86/include/asm/rwsem.h \
+ include/linux/srcu.h \
+ include/linux/rcupdate.h \
+ $(wildcard include/config/tiny/rcu.h) \
+ $(wildcard include/config/tree/rcu.h) \
+ $(wildcard include/config/preempt/rcu.h) \
+ $(wildcard include/config/rcu/trace.h) \
+ $(wildcard include/config/rcu/stall/common.h) \
+ $(wildcard include/config/rcu/user/qs.h) \
+ $(wildcard include/config/rcu/nocb/cpu.h) \
+ $(wildcard include/config/tasks/rcu.h) \
+ $(wildcard include/config/debug/objects/rcu/head.h) \
+ $(wildcard include/config/prove/rcu.h) \
+ $(wildcard include/config/rcu/boost.h) \
+ $(wildcard include/config/rcu/nocb/cpu/all.h) \
+ $(wildcard include/config/no/hz/full/sysidle.h) \
+ include/linux/completion.h \
+ include/linux/debugobjects.h \
+ $(wildcard include/config/debug/objects.h) \
+ $(wildcard include/config/debug/objects/free.h) \
+ include/linux/ktime.h \
+ include/linux/jiffies.h \
+ include/linux/timex.h \
+ include/uapi/linux/timex.h \
+ include/uapi/linux/param.h \
+ arch/x86/include/uapi/asm/param.h \
+ include/asm-generic/param.h \
+ $(wildcard include/config/hz.h) \
+ include/uapi/asm-generic/param.h \
+ arch/x86/include/asm/timex.h \
+ arch/x86/include/asm/tsc.h \
+ $(wildcard include/config/x86/tsc.h) \
+ include/generated/timeconst.h \
+ include/linux/timekeeping.h \
+ include/linux/rcutree.h \
+ include/linux/workqueue.h \
+ $(wildcard include/config/debug/objects/work.h) \
+ $(wildcard include/config/freezer.h) \
+ include/linux/timer.h \
+ $(wildcard include/config/timer/stats.h) \
+ $(wildcard include/config/debug/objects/timers.h) \
+ $(wildcard include/config/no/hz/common.h) \
+ include/linux/sysctl.h \
+ $(wildcard include/config/sysctl.h) \
+ include/linux/rbtree.h \
+ include/uapi/linux/sysctl.h \
+ arch/x86/include/asm/mmzone.h \
+ arch/x86/include/asm/mmzone_64.h \
+ arch/x86/include/asm/smp.h \
+ $(wildcard include/config/x86/io/apic.h) \
+ $(wildcard include/config/x86/32/smp.h) \
+ $(wildcard include/config/debug/nmi/selftest.h) \
+ arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/eisa.h) \
+ $(wildcard include/config/x86/mpparse.h) \
+ arch/x86/include/asm/mpspec_def.h \
+ arch/x86/include/asm/x86_init.h \
+ arch/x86/include/uapi/asm/bootparam.h \
+ include/linux/screen_info.h \
+ include/uapi/linux/screen_info.h \
+ include/linux/apm_bios.h \
+ include/uapi/linux/apm_bios.h \
+ include/linux/edd.h \
+ include/uapi/linux/edd.h \
+ arch/x86/include/asm/e820.h \
+ $(wildcard include/config/efi.h) \
+ $(wildcard include/config/hibernation.h) \
+ arch/x86/include/uapi/asm/e820.h \
+ $(wildcard include/config/x86/pmem/legacy.h) \
+ $(wildcard include/config/intel/txt.h) \
+ include/linux/ioport.h \
+ arch/x86/include/asm/ist.h \
+ arch/x86/include/uapi/asm/ist.h \
+ include/video/edid.h \
+ $(wildcard include/config/x86.h) \
+ include/uapi/video/edid.h \
+ arch/x86/include/asm/apicdef.h \
+ arch/x86/include/asm/apic.h \
+ $(wildcard include/config/x86/x2apic.h) \
+ include/linux/pm.h \
+ $(wildcard include/config/vt/console/sleep.h) \
+ $(wildcard include/config/pm.h) \
+ $(wildcard include/config/pm/clk.h) \
+ $(wildcard include/config/pm/generic/domains.h) \
+ arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/paravirt/clock.h) \
+ $(wildcard include/config/provide/ohci1394/dma/init.h) \
+ $(wildcard include/config/pci/mmconfig.h) \
+ $(wildcard include/config/x86/intel/mid.h) \
+ arch/x86/include/asm/acpi.h \
+ $(wildcard include/config/acpi.h) \
+ $(wildcard include/config/acpi/numa.h) \
+ include/acpi/pdc_intel.h \
+ arch/x86/include/asm/numa.h \
+ $(wildcard include/config/numa/emu.h) \
+ arch/x86/include/asm/topology.h \
+ include/asm-generic/topology.h \
+ arch/x86/include/asm/mmu.h \
+ arch/x86/include/asm/realmode.h \
+ $(wildcard include/config/acpi/sleep.h) \
+ arch/x86/include/asm/io.h \
+ $(wildcard include/config/mtrr.h) \
+ arch/x86/include/generated/asm/early_ioremap.h \
+ include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/generic/early/ioremap.h) \
+ include/asm-generic/iomap.h \
+ $(wildcard include/config/has/ioport/map.h) \
+ $(wildcard include/config/pci.h) \
+ $(wildcard include/config/generic/iomap.h) \
+ include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/no/generic/pci/ioport/map.h) \
+ $(wildcard include/config/generic/pci/iomap.h) \
+ include/xen/xen.h \
+ $(wildcard include/config/xen/dom0.h) \
+ $(wildcard include/config/xen/pvh.h) \
+ include/xen/interface/xen.h \
+ arch/x86/include/asm/xen/interface.h \
+ arch/x86/include/asm/xen/interface_64.h \
+ arch/x86/include/asm/pvclock-abi.h \
+ arch/x86/include/asm/xen/hypervisor.h \
+ include/xen/features.h \
+ include/xen/interface/features.h \
+ arch/x86/include/asm/pvclock.h \
+ include/linux/clocksource.h \
+ $(wildcard include/config/arch/clocksource/data.h) \
+ $(wildcard include/config/clocksource/watchdog.h) \
+ $(wildcard include/config/clksrc/of.h) \
+ arch/x86/include/asm/clocksource.h \
+ arch/x86/include/uapi/asm/vsyscall.h \
+ include/asm-generic/fixmap.h \
+ arch/x86/include/asm/idle.h \
+ arch/x86/include/asm/io_apic.h \
+ arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/have/kvm.h) \
+ $(wildcard include/config/pci/msi.h) \
+ include/linux/topology.h \
+ $(wildcard include/config/use/percpu/numa/node/id.h) \
+ $(wildcard include/config/sched/smt.h) \
+ include/linux/smp.h \
+ $(wildcard include/config/up/late/init.h) \
+ include/linux/llist.h \
+ $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \
+ include/linux/percpu.h \
+ $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \
+ $(wildcard include/config/need/per/cpu/page/first/chunk.h) \
+ include/linux/pfn.h \
+ include/linux/elf.h \
+ arch/x86/include/asm/elf.h \
+ $(wildcard include/config/x86/x32/abi.h) \
+ arch/x86/include/asm/user.h \
+ arch/x86/include/asm/user_64.h \
+ arch/x86/include/uapi/asm/auxvec.h \
+ arch/x86/include/asm/vdso.h \
+ $(wildcard include/config/x86/x32.h) \
+ include/linux/mm_types.h \
+ $(wildcard include/config/split/ptlock/cpus.h) \
+ $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \
+ $(wildcard include/config/have/cmpxchg/double.h) \
+ $(wildcard include/config/have/aligned/struct/page.h) \
+ $(wildcard include/config/transparent/hugepage.h) \
+ $(wildcard include/config/aio.h) \
+ $(wildcard include/config/mmu/notifier.h) \
+ include/linux/auxvec.h \
+ include/uapi/linux/auxvec.h \
+ include/linux/uprobes.h \
+ $(wildcard include/config/uprobes.h) \
+ arch/x86/include/asm/uprobes.h \
+ include/uapi/linux/elf.h \
+ include/uapi/linux/elf-em.h \
+ include/linux/kobject.h \
+ $(wildcard include/config/uevent/helper.h) \
+ $(wildcard include/config/debug/kobject/release.h) \
+ include/linux/sysfs.h \
+ include/linux/kernfs.h \
+ $(wildcard include/config/kernfs.h) \
+ include/linux/idr.h \
+ include/linux/kobject_ns.h \
+ include/linux/kref.h \
+ include/linux/moduleparam.h \
+ $(wildcard include/config/alpha.h) \
+ $(wildcard include/config/ia64.h) \
+ $(wildcard include/config/ppc64.h) \
+ include/linux/rbtree_latch.h \
+ arch/x86/include/asm/module.h \
+ $(wildcard include/config/m586.h) \
+ $(wildcard include/config/m586tsc.h) \
+ $(wildcard include/config/m586mmx.h) \
+ $(wildcard include/config/mcore2.h) \
+ $(wildcard include/config/m686.h) \
+ $(wildcard include/config/mpentiumii.h) \
+ $(wildcard include/config/mpentiumiii.h) \
+ $(wildcard include/config/mpentiumm.h) \
+ $(wildcard include/config/mpentium4.h) \
+ $(wildcard include/config/mk6.h) \
+ $(wildcard include/config/mk8.h) \
+ $(wildcard include/config/melan.h) \
+ $(wildcard include/config/mcrusoe.h) \
+ $(wildcard include/config/mefficeon.h) \
+ $(wildcard include/config/mwinchipc6.h) \
+ $(wildcard include/config/mwinchip3d.h) \
+ $(wildcard include/config/mcyrixiii.h) \
+ $(wildcard include/config/mviac3/2.h) \
+ $(wildcard include/config/mviac7.h) \
+ $(wildcard include/config/mgeodegx1.h) \
+ $(wildcard include/config/mgeode/lx.h) \
+ include/asm-generic/module.h \
+ $(wildcard include/config/have/mod/arch/specific.h) \
+ $(wildcard include/config/modules/use/elf/rel.h) \
+ $(wildcard include/config/modules/use/elf/rela.h) \
+ include/linux/vermagic.h \
+ include/generated/utsrelease.h \
+
+/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o: $(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o)
+
+$(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.mod.o):
diff --git a/builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd b/builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd
new file mode 100644
index 00000000..b4c40a04
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/.nbd.o.cmd
@@ -0,0 +1,1145 @@
+cmd_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := gcc -Wp,-MD,/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.nbd.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include -I./arch/x86/include -Iarch/x86/include/generated/uapi -Iarch/x86/include/generated -Iinclude -I./arch/x86/include/uapi -Iarch/x86/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fno-delete-null-pointer-checks -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO -DMODULE -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(nbd)" -D"KBUILD_MODNAME=KBUILD_STR(nbd)" -c -o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/.tmp_nbd.o /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.c
+
+source_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := /media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.c
+
+deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o := \
+ $(wildcard include/config/debug/fs.h) \
+ include/uapi/linux/major.h \
+ include/linux/blkdev.h \
+ $(wildcard include/config/block.h) \
+ $(wildcard include/config/blk/cgroup.h) \
+ $(wildcard include/config/blk/dev/integrity.h) \
+ $(wildcard include/config/pm.h) \
+ $(wildcard include/config/blk/dev/io/trace.h) \
+ $(wildcard include/config/blk/dev/bsg.h) \
+ $(wildcard include/config/blk/dev/throttling.h) \
+ $(wildcard include/config/bounce.h) \
+ $(wildcard include/config/mmu.h) \
+ include/linux/sched.h \
+ $(wildcard include/config/smp.h) \
+ $(wildcard include/config/no/hz/common.h) \
+ $(wildcard include/config/sched/debug.h) \
+ $(wildcard include/config/debug/atomic/sleep.h) \
+ $(wildcard include/config/prove/rcu.h) \
+ $(wildcard include/config/lockup/detector.h) \
+ $(wildcard include/config/detect/hung/task.h) \
+ $(wildcard include/config/core/dump/default/elf/headers.h) \
+ $(wildcard include/config/preempt/count.h) \
+ $(wildcard include/config/sched/autogroup.h) \
+ $(wildcard include/config/virt/cpu/accounting/native.h) \
+ $(wildcard include/config/bsd/process/acct.h) \
+ $(wildcard include/config/taskstats.h) \
+ $(wildcard include/config/audit.h) \
+ $(wildcard include/config/inotify/user.h) \
+ $(wildcard include/config/fanotify.h) \
+ $(wildcard include/config/epoll.h) \
+ $(wildcard include/config/posix/mqueue.h) \
+ $(wildcard include/config/keys.h) \
+ $(wildcard include/config/perf/events.h) \
+ $(wildcard include/config/sched/info.h) \
+ $(wildcard include/config/task/delay/acct.h) \
+ $(wildcard include/config/schedstats.h) \
+ $(wildcard include/config/sched/smt.h) \
+ $(wildcard include/config/sched/mc.h) \
+ $(wildcard include/config/numa.h) \
+ $(wildcard include/config/fair/group/sched.h) \
+ $(wildcard include/config/rt/group/sched.h) \
+ $(wildcard include/config/cgroup/sched.h) \
+ $(wildcard include/config/preempt/notifiers.h) \
+ $(wildcard include/config/preempt/rcu.h) \
+ $(wildcard include/config/tasks/rcu.h) \
+ $(wildcard include/config/memcg/kmem.h) \
+ $(wildcard include/config/compat/brk.h) \
+ $(wildcard include/config/cc/stackprotector.h) \
+ $(wildcard include/config/virt/cpu/accounting/gen.h) \
+ $(wildcard include/config/sysvipc.h) \
+ $(wildcard include/config/auditsyscall.h) \
+ $(wildcard include/config/rt/mutexes.h) \
+ $(wildcard include/config/debug/mutexes.h) \
+ $(wildcard include/config/trace/irqflags.h) \
+ $(wildcard include/config/lockdep.h) \
+ $(wildcard include/config/task/xacct.h) \
+ $(wildcard include/config/cpusets.h) \
+ $(wildcard include/config/cgroups.h) \
+ $(wildcard include/config/futex.h) \
+ $(wildcard include/config/compat.h) \
+ $(wildcard include/config/debug/preempt.h) \
+ $(wildcard include/config/numa/balancing.h) \
+ $(wildcard include/config/fault/injection.h) \
+ $(wildcard include/config/latencytop.h) \
+ $(wildcard include/config/kasan.h) \
+ $(wildcard include/config/function/graph/tracer.h) \
+ $(wildcard include/config/tracing.h) \
+ $(wildcard include/config/memcg.h) \
+ $(wildcard include/config/uprobes.h) \
+ $(wildcard include/config/bcache.h) \
+ $(wildcard include/config/arch/wants/dynamic/task/struct.h) \
+ $(wildcard include/config/cpumask/offstack.h) \
+ $(wildcard include/config/have/unstable/sched/clock.h) \
+ $(wildcard include/config/irq/time/accounting.h) \
+ $(wildcard include/config/hotplug/cpu.h) \
+ $(wildcard include/config/no/hz/full.h) \
+ $(wildcard include/config/proc/fs.h) \
+ $(wildcard include/config/stack/growsup.h) \
+ $(wildcard include/config/have/copy/thread/tls.h) \
+ $(wildcard include/config/debug/stack/usage.h) \
+ $(wildcard include/config/preempt.h) \
+ include/uapi/linux/sched.h \
+ include/linux/sched/prio.h \
+ arch/x86/include/uapi/asm/param.h \
+ include/asm-generic/param.h \
+ $(wildcard include/config/hz.h) \
+ include/uapi/asm-generic/param.h \
+ include/linux/capability.h \
+ $(wildcard include/config/multiuser.h) \
+ include/uapi/linux/capability.h \
+ include/linux/types.h \
+ $(wildcard include/config/uid16.h) \
+ $(wildcard include/config/lbdaf.h) \
+ $(wildcard include/config/arch/dma/addr/t/64bit.h) \
+ $(wildcard include/config/phys/addr/t/64bit.h) \
+ $(wildcard include/config/64bit.h) \
+ include/uapi/linux/types.h \
+ arch/x86/include/uapi/asm/types.h \
+ include/uapi/asm-generic/types.h \
+ include/asm-generic/int-ll64.h \
+ include/uapi/asm-generic/int-ll64.h \
+ arch/x86/include/uapi/asm/bitsperlong.h \
+ include/asm-generic/bitsperlong.h \
+ include/uapi/asm-generic/bitsperlong.h \
+ include/uapi/linux/posix_types.h \
+ include/linux/stddef.h \
+ include/uapi/linux/stddef.h \
+ include/linux/compiler.h \
+ $(wildcard include/config/sparse/rcu/pointer.h) \
+ $(wildcard include/config/trace/branch/profiling.h) \
+ $(wildcard include/config/profile/all/branches.h) \
+ $(wildcard include/config/enable/must/check.h) \
+ $(wildcard include/config/enable/warn/deprecated.h) \
+ $(wildcard include/config/kprobes.h) \
+ include/linux/compiler-gcc.h \
+ $(wildcard include/config/arch/supports/optimized/inlining.h) \
+ $(wildcard include/config/optimize/inlining.h) \
+ $(wildcard include/config/gcov/kernel.h) \
+ $(wildcard include/config/arch/use/builtin/bswap.h) \
+ arch/x86/include/asm/posix_types.h \
+ $(wildcard include/config/x86/32.h) \
+ arch/x86/include/uapi/asm/posix_types_64.h \
+ include/uapi/asm-generic/posix_types.h \
+ include/linux/threads.h \
+ $(wildcard include/config/nr/cpus.h) \
+ $(wildcard include/config/base/small.h) \
+ include/linux/kernel.h \
+ $(wildcard include/config/preempt/voluntary.h) \
+ $(wildcard include/config/prove/locking.h) \
+ $(wildcard include/config/panic/timeout.h) \
+ $(wildcard include/config/ftrace/mcount/record.h) \
+ /usr/lib/gcc/x86_64-unknown-linux-gnu/5.2.0/include/stdarg.h \
+ include/linux/linkage.h \
+ include/linux/stringify.h \
+ include/linux/export.h \
+ $(wildcard include/config/have/underscore/symbol/prefix.h) \
+ $(wildcard include/config/modules.h) \
+ $(wildcard include/config/modversions.h) \
+ $(wildcard include/config/unused/symbols.h) \
+ arch/x86/include/asm/linkage.h \
+ $(wildcard include/config/x86/64.h) \
+ $(wildcard include/config/x86/alignment/16.h) \
+ include/linux/bitops.h \
+ arch/x86/include/asm/bitops.h \
+ $(wildcard include/config/x86/cmov.h) \
+ arch/x86/include/asm/alternative.h \
+ $(wildcard include/config/paravirt.h) \
+ arch/x86/include/asm/asm.h \
+ arch/x86/include/asm/ptrace.h \
+ $(wildcard include/config/x86/debugctlmsr.h) \
+ arch/x86/include/asm/segment.h \
+ $(wildcard include/config/x86/32/lazy/gs.h) \
+ include/uapi/linux/const.h \
+ arch/x86/include/asm/cache.h \
+ $(wildcard include/config/x86/l1/cache/shift.h) \
+ $(wildcard include/config/x86/internode/cache/shift.h) \
+ $(wildcard include/config/x86/vsmp.h) \
+ arch/x86/include/asm/page_types.h \
+ $(wildcard include/config/physical/start.h) \
+ $(wildcard include/config/physical/align.h) \
+ arch/x86/include/asm/page_64_types.h \
+ $(wildcard include/config/randomize/base.h) \
+ $(wildcard include/config/randomize/base/max/offset.h) \
+ arch/x86/include/uapi/asm/ptrace.h \
+ arch/x86/include/uapi/asm/ptrace-abi.h \
+ arch/x86/include/asm/processor-flags.h \
+ $(wildcard include/config/vm86.h) \
+ arch/x86/include/uapi/asm/processor-flags.h \
+ arch/x86/include/asm/paravirt_types.h \
+ $(wildcard include/config/x86/local/apic.h) \
+ $(wildcard include/config/pgtable/levels.h) \
+ $(wildcard include/config/x86/pae.h) \
+ $(wildcard include/config/queued/spinlocks.h) \
+ $(wildcard include/config/paravirt/debug.h) \
+ arch/x86/include/asm/desc_defs.h \
+ arch/x86/include/asm/kmap_types.h \
+ $(wildcard include/config/debug/highmem.h) \
+ include/asm-generic/kmap_types.h \
+ arch/x86/include/asm/pgtable_types.h \
+ $(wildcard include/config/kmemcheck.h) \
+ $(wildcard include/config/mem/soft/dirty.h) \
+ arch/x86/include/asm/pgtable_64_types.h \
+ arch/x86/include/asm/sparsemem.h \
+ $(wildcard include/config/sparsemem.h) \
+ arch/x86/include/asm/spinlock_types.h \
+ $(wildcard include/config/paravirt/spinlocks.h) \
+ include/asm-generic/qspinlock_types.h \
+ include/asm-generic/qrwlock_types.h \
+ include/asm-generic/ptrace.h \
+ arch/x86/include/asm/cpufeature.h \
+ $(wildcard include/config/x86/feature/names.h) \
+ $(wildcard include/config/x86/debug/static/cpu/has.h) \
+ arch/x86/include/asm/required-features.h \
+ $(wildcard include/config/x86/minimum/cpu/family.h) \
+ $(wildcard include/config/math/emulation.h) \
+ $(wildcard include/config/x86/cmpxchg64.h) \
+ $(wildcard include/config/x86/use/3dnow.h) \
+ $(wildcard include/config/x86/p6/nop.h) \
+ $(wildcard include/config/matom.h) \
+ arch/x86/include/asm/disabled-features.h \
+ $(wildcard include/config/x86/intel/mpx.h) \
+ arch/x86/include/asm/rmwcc.h \
+ arch/x86/include/asm/barrier.h \
+ $(wildcard include/config/x86/ppro/fence.h) \
+ arch/x86/include/asm/nops.h \
+ $(wildcard include/config/mk7.h) \
+ include/asm-generic/bitops/find.h \
+ $(wildcard include/config/generic/find/first/bit.h) \
+ include/asm-generic/bitops/sched.h \
+ arch/x86/include/asm/arch_hweight.h \
+ include/asm-generic/bitops/const_hweight.h \
+ include/asm-generic/bitops/le.h \
+ arch/x86/include/uapi/asm/byteorder.h \
+ include/linux/byteorder/little_endian.h \
+ include/uapi/linux/byteorder/little_endian.h \
+ include/linux/swab.h \
+ include/uapi/linux/swab.h \
+ arch/x86/include/uapi/asm/swab.h \
+ include/linux/byteorder/generic.h \
+ include/asm-generic/bitops/ext2-atomic-setbit.h \
+ include/linux/log2.h \
+ $(wildcard include/config/arch/has/ilog2/u32.h) \
+ $(wildcard include/config/arch/has/ilog2/u64.h) \
+ include/linux/typecheck.h \
+ include/linux/printk.h \
+ $(wildcard include/config/message/loglevel/default.h) \
+ $(wildcard include/config/early/printk.h) \
+ $(wildcard include/config/printk.h) \
+ $(wildcard include/config/dynamic/debug.h) \
+ include/linux/init.h \
+ $(wildcard include/config/broken/rodata.h) \
+ $(wildcard include/config/lto.h) \
+ include/linux/kern_levels.h \
+ include/linux/cache.h \
+ $(wildcard include/config/arch/has/cache/line/size.h) \
+ include/uapi/linux/kernel.h \
+ include/uapi/linux/sysinfo.h \
+ include/linux/dynamic_debug.h \
+ include/linux/timex.h \
+ include/uapi/linux/timex.h \
+ include/linux/time.h \
+ $(wildcard include/config/arch/uses/gettimeoffset.h) \
+ include/linux/seqlock.h \
+ $(wildcard include/config/debug/lock/alloc.h) \
+ include/linux/spinlock.h \
+ $(wildcard include/config/debug/spinlock.h) \
+ $(wildcard include/config/generic/lockbreak.h) \
+ include/linux/preempt.h \
+ $(wildcard include/config/preempt/tracer.h) \
+ include/linux/list.h \
+ $(wildcard include/config/debug/list.h) \
+ include/linux/poison.h \
+ $(wildcard include/config/illegal/pointer/value.h) \
+ arch/x86/include/asm/preempt.h \
+ arch/x86/include/asm/percpu.h \
+ $(wildcard include/config/x86/64/smp.h) \
+ include/asm-generic/percpu.h \
+ $(wildcard include/config/have/setup/per/cpu/area.h) \
+ include/linux/percpu-defs.h \
+ $(wildcard include/config/debug/force/weak/per/cpu.h) \
+ include/linux/thread_info.h \
+ include/linux/bug.h \
+ $(wildcard include/config/generic/bug.h) \
+ arch/x86/include/asm/bug.h \
+ $(wildcard include/config/debug/bugverbose.h) \
+ include/asm-generic/bug.h \
+ $(wildcard include/config/bug.h) \
+ $(wildcard include/config/generic/bug/relative/pointers.h) \
+ arch/x86/include/asm/thread_info.h \
+ $(wildcard include/config/ia32/emulation.h) \
+ arch/x86/include/asm/page.h \
+ arch/x86/include/asm/page_64.h \
+ $(wildcard include/config/debug/virtual.h) \
+ $(wildcard include/config/flatmem.h) \
+ $(wildcard include/config/x86/vsyscall/emulation.h) \
+ include/linux/range.h \
+ include/asm-generic/memory_model.h \
+ $(wildcard include/config/discontigmem.h) \
+ $(wildcard include/config/sparsemem/vmemmap.h) \
+ include/asm-generic/getorder.h \
+ arch/x86/include/asm/processor.h \
+ $(wildcard include/config/m486.h) \
+ $(wildcard include/config/xen.h) \
+ arch/x86/include/asm/vm86.h \
+ arch/x86/include/uapi/asm/vm86.h \
+ arch/x86/include/asm/math_emu.h \
+ arch/x86/include/asm/sigcontext.h \
+ arch/x86/include/uapi/asm/sigcontext.h \
+ arch/x86/include/asm/current.h \
+ arch/x86/include/asm/msr.h \
+ arch/x86/include/asm/msr-index.h \
+ arch/x86/include/uapi/asm/errno.h \
+ include/uapi/asm-generic/errno.h \
+ include/uapi/asm-generic/errno-base.h \
+ arch/x86/include/asm/cpumask.h \
+ include/linux/cpumask.h \
+ $(wildcard include/config/debug/per/cpu/maps.h) \
+ include/linux/bitmap.h \
+ include/linux/string.h \
+ $(wildcard include/config/binary/printf.h) \
+ include/uapi/linux/string.h \
+ arch/x86/include/asm/string.h \
+ arch/x86/include/asm/string_64.h \
+ arch/x86/include/uapi/asm/msr.h \
+ include/uapi/linux/ioctl.h \
+ arch/x86/include/uapi/asm/ioctl.h \
+ include/asm-generic/ioctl.h \
+ include/uapi/asm-generic/ioctl.h \
+ arch/x86/include/asm/paravirt.h \
+ arch/x86/include/asm/special_insns.h \
+ arch/x86/include/asm/fpu/types.h \
+ include/linux/personality.h \
+ include/uapi/linux/personality.h \
+ include/linux/math64.h \
+ $(wildcard include/config/arch/supports/int128.h) \
+ arch/x86/include/asm/div64.h \
+ include/asm-generic/div64.h \
+ include/linux/err.h \
+ include/linux/irqflags.h \
+ $(wildcard include/config/irqsoff/tracer.h) \
+ $(wildcard include/config/trace/irqflags/support.h) \
+ arch/x86/include/asm/irqflags.h \
+ include/linux/atomic.h \
+ $(wildcard include/config/arch/has/atomic/or.h) \
+ $(wildcard include/config/generic/atomic64.h) \
+ arch/x86/include/asm/atomic.h \
+ arch/x86/include/asm/cmpxchg.h \
+ arch/x86/include/asm/cmpxchg_64.h \
+ arch/x86/include/asm/atomic64_64.h \
+ include/asm-generic/atomic-long.h \
+ include/linux/bottom_half.h \
+ include/linux/spinlock_types.h \
+ include/linux/lockdep.h \
+ $(wildcard include/config/lock/stat.h) \
+ include/linux/rwlock_types.h \
+ arch/x86/include/asm/spinlock.h \
+ include/linux/jump_label.h \
+ $(wildcard include/config/jump/label.h) \
+ arch/x86/include/asm/jump_label.h \
+ arch/x86/include/asm/qspinlock.h \
+ include/asm-generic/qspinlock.h \
+ arch/x86/include/asm/qrwlock.h \
+ include/asm-generic/qrwlock.h \
+ include/linux/rwlock.h \
+ include/linux/spinlock_api_smp.h \
+ $(wildcard include/config/inline/spin/lock.h) \
+ $(wildcard include/config/inline/spin/lock/bh.h) \
+ $(wildcard include/config/inline/spin/lock/irq.h) \
+ $(wildcard include/config/inline/spin/lock/irqsave.h) \
+ $(wildcard include/config/inline/spin/trylock.h) \
+ $(wildcard include/config/inline/spin/trylock/bh.h) \
+ $(wildcard include/config/uninline/spin/unlock.h) \
+ $(wildcard include/config/inline/spin/unlock/bh.h) \
+ $(wildcard include/config/inline/spin/unlock/irq.h) \
+ $(wildcard include/config/inline/spin/unlock/irqrestore.h) \
+ include/linux/rwlock_api_smp.h \
+ $(wildcard include/config/inline/read/lock.h) \
+ $(wildcard include/config/inline/write/lock.h) \
+ $(wildcard include/config/inline/read/lock/bh.h) \
+ $(wildcard include/config/inline/write/lock/bh.h) \
+ $(wildcard include/config/inline/read/lock/irq.h) \
+ $(wildcard include/config/inline/write/lock/irq.h) \
+ $(wildcard include/config/inline/read/lock/irqsave.h) \
+ $(wildcard include/config/inline/write/lock/irqsave.h) \
+ $(wildcard include/config/inline/read/trylock.h) \
+ $(wildcard include/config/inline/write/trylock.h) \
+ $(wildcard include/config/inline/read/unlock.h) \
+ $(wildcard include/config/inline/write/unlock.h) \
+ $(wildcard include/config/inline/read/unlock/bh.h) \
+ $(wildcard include/config/inline/write/unlock/bh.h) \
+ $(wildcard include/config/inline/read/unlock/irq.h) \
+ $(wildcard include/config/inline/write/unlock/irq.h) \
+ $(wildcard include/config/inline/read/unlock/irqrestore.h) \
+ $(wildcard include/config/inline/write/unlock/irqrestore.h) \
+ include/linux/time64.h \
+ include/uapi/linux/time.h \
+ include/uapi/linux/param.h \
+ arch/x86/include/asm/timex.h \
+ arch/x86/include/asm/tsc.h \
+ $(wildcard include/config/x86/tsc.h) \
+ include/linux/jiffies.h \
+ include/generated/timeconst.h \
+ include/linux/plist.h \
+ $(wildcard include/config/debug/pi/list.h) \
+ include/linux/rbtree.h \
+ include/linux/rcupdate.h \
+ $(wildcard include/config/tiny/rcu.h) \
+ $(wildcard include/config/tree/rcu.h) \
+ $(wildcard include/config/rcu/trace.h) \
+ $(wildcard include/config/rcu/stall/common.h) \
+ $(wildcard include/config/rcu/user/qs.h) \
+ $(wildcard include/config/rcu/nocb/cpu.h) \
+ $(wildcard include/config/debug/objects/rcu/head.h) \
+ $(wildcard include/config/rcu/boost.h) \
+ $(wildcard include/config/rcu/nocb/cpu/all.h) \
+ $(wildcard include/config/no/hz/full/sysidle.h) \
+ include/linux/completion.h \
+ include/linux/wait.h \
+ include/uapi/linux/wait.h \
+ include/linux/debugobjects.h \
+ $(wildcard include/config/debug/objects.h) \
+ $(wildcard include/config/debug/objects/free.h) \
+ include/linux/ktime.h \
+ include/linux/timekeeping.h \
+ include/linux/rcutree.h \
+ include/linux/errno.h \
+ include/uapi/linux/errno.h \
+ include/linux/nodemask.h \
+ $(wildcard include/config/highmem.h) \
+ $(wildcard include/config/movable/node.h) \
+ include/linux/numa.h \
+ $(wildcard include/config/nodes/shift.h) \
+ include/linux/mm_types.h \
+ $(wildcard include/config/split/ptlock/cpus.h) \
+ $(wildcard include/config/arch/enable/split/pmd/ptlock.h) \
+ $(wildcard include/config/have/cmpxchg/double.h) \
+ $(wildcard include/config/have/aligned/struct/page.h) \
+ $(wildcard include/config/transparent/hugepage.h) \
+ $(wildcard include/config/aio.h) \
+ $(wildcard include/config/mmu/notifier.h) \
+ $(wildcard include/config/compaction.h) \
+ include/linux/auxvec.h \
+ include/uapi/linux/auxvec.h \
+ arch/x86/include/uapi/asm/auxvec.h \
+ include/linux/rwsem.h \
+ $(wildcard include/config/rwsem/spin/on/owner.h) \
+ $(wildcard include/config/rwsem/generic/spinlock.h) \
+ include/linux/osq_lock.h \
+ arch/x86/include/asm/rwsem.h \
+ include/linux/uprobes.h \
+ arch/x86/include/asm/uprobes.h \
+ include/linux/notifier.h \
+ include/linux/mutex.h \
+ $(wildcard include/config/mutex/spin/on/owner.h) \
+ include/linux/srcu.h \
+ include/linux/workqueue.h \
+ $(wildcard include/config/debug/objects/work.h) \
+ $(wildcard include/config/freezer.h) \
+ $(wildcard include/config/sysfs.h) \
+ include/linux/timer.h \
+ $(wildcard include/config/timer/stats.h) \
+ $(wildcard include/config/debug/objects/timers.h) \
+ include/linux/sysctl.h \
+ $(wildcard include/config/sysctl.h) \
+ include/uapi/linux/sysctl.h \
+ include/linux/page-flags-layout.h \
+ include/generated/bounds.h \
+ arch/x86/include/asm/mmu.h \
+ include/linux/cputime.h \
+ arch/x86/include/generated/asm/cputime.h \
+ include/asm-generic/cputime.h \
+ $(wildcard include/config/virt/cpu/accounting.h) \
+ include/asm-generic/cputime_jiffies.h \
+ include/linux/smp.h \
+ $(wildcard include/config/up/late/init.h) \
+ include/linux/llist.h \
+ $(wildcard include/config/arch/have/nmi/safe/cmpxchg.h) \
+ arch/x86/include/asm/smp.h \
+ $(wildcard include/config/x86/io/apic.h) \
+ $(wildcard include/config/x86/32/smp.h) \
+ $(wildcard include/config/debug/nmi/selftest.h) \
+ arch/x86/include/asm/mpspec.h \
+ $(wildcard include/config/eisa.h) \
+ $(wildcard include/config/x86/mpparse.h) \
+ arch/x86/include/asm/mpspec_def.h \
+ arch/x86/include/asm/x86_init.h \
+ arch/x86/include/uapi/asm/bootparam.h \
+ include/linux/screen_info.h \
+ include/uapi/linux/screen_info.h \
+ include/linux/apm_bios.h \
+ include/uapi/linux/apm_bios.h \
+ include/linux/edd.h \
+ include/uapi/linux/edd.h \
+ arch/x86/include/asm/e820.h \
+ $(wildcard include/config/efi.h) \
+ $(wildcard include/config/hibernation.h) \
+ arch/x86/include/uapi/asm/e820.h \
+ $(wildcard include/config/x86/pmem/legacy.h) \
+ $(wildcard include/config/intel/txt.h) \
+ include/linux/ioport.h \
+ $(wildcard include/config/memory/hotremove.h) \
+ arch/x86/include/asm/ist.h \
+ arch/x86/include/uapi/asm/ist.h \
+ include/video/edid.h \
+ $(wildcard include/config/x86.h) \
+ include/uapi/video/edid.h \
+ arch/x86/include/asm/apicdef.h \
+ arch/x86/include/asm/apic.h \
+ $(wildcard include/config/x86/x2apic.h) \
+ include/linux/pm.h \
+ $(wildcard include/config/vt/console/sleep.h) \
+ $(wildcard include/config/pm/sleep.h) \
+ $(wildcard include/config/pm/clk.h) \
+ $(wildcard include/config/pm/generic/domains.h) \
+ arch/x86/include/asm/fixmap.h \
+ $(wildcard include/config/paravirt/clock.h) \
+ $(wildcard include/config/provide/ohci1394/dma/init.h) \
+ $(wildcard include/config/pci/mmconfig.h) \
+ $(wildcard include/config/x86/intel/mid.h) \
+ arch/x86/include/asm/acpi.h \
+ $(wildcard include/config/acpi.h) \
+ $(wildcard include/config/acpi/numa.h) \
+ include/acpi/pdc_intel.h \
+ arch/x86/include/asm/numa.h \
+ $(wildcard include/config/numa/emu.h) \
+ arch/x86/include/asm/topology.h \
+ include/asm-generic/topology.h \
+ $(wildcard include/config/have/memoryless/nodes.h) \
+ arch/x86/include/asm/realmode.h \
+ $(wildcard include/config/acpi/sleep.h) \
+ arch/x86/include/asm/io.h \
+ $(wildcard include/config/mtrr.h) \
+ arch/x86/include/generated/asm/early_ioremap.h \
+ include/asm-generic/early_ioremap.h \
+ $(wildcard include/config/generic/early/ioremap.h) \
+ include/asm-generic/iomap.h \
+ $(wildcard include/config/has/ioport/map.h) \
+ $(wildcard include/config/pci.h) \
+ $(wildcard include/config/generic/iomap.h) \
+ include/asm-generic/pci_iomap.h \
+ $(wildcard include/config/no/generic/pci/ioport/map.h) \
+ $(wildcard include/config/generic/pci/iomap.h) \
+ include/xen/xen.h \
+ $(wildcard include/config/xen/dom0.h) \
+ $(wildcard include/config/xen/pvh.h) \
+ include/xen/interface/xen.h \
+ arch/x86/include/asm/xen/interface.h \
+ arch/x86/include/asm/xen/interface_64.h \
+ arch/x86/include/asm/pvclock-abi.h \
+ arch/x86/include/asm/xen/hypervisor.h \
+ include/xen/features.h \
+ include/xen/interface/features.h \
+ arch/x86/include/asm/pvclock.h \
+ include/linux/clocksource.h \
+ $(wildcard include/config/arch/clocksource/data.h) \
+ $(wildcard include/config/clocksource/watchdog.h) \
+ $(wildcard include/config/clksrc/of.h) \
+ arch/x86/include/asm/clocksource.h \
+ arch/x86/include/uapi/asm/vsyscall.h \
+ include/asm-generic/fixmap.h \
+ arch/x86/include/asm/idle.h \
+ arch/x86/include/asm/io_apic.h \
+ arch/x86/include/asm/irq_vectors.h \
+ $(wildcard include/config/have/kvm.h) \
+ $(wildcard include/config/pci/msi.h) \
+ include/linux/sem.h \
+ include/uapi/linux/sem.h \
+ include/linux/ipc.h \
+ include/linux/uidgid.h \
+ $(wildcard include/config/user/ns.h) \
+ include/linux/highuid.h \
+ include/uapi/linux/ipc.h \
+ arch/x86/include/uapi/asm/ipcbuf.h \
+ include/uapi/asm-generic/ipcbuf.h \
+ arch/x86/include/uapi/asm/sembuf.h \
+ include/linux/shm.h \
+ include/uapi/linux/shm.h \
+ arch/x86/include/uapi/asm/shmbuf.h \
+ include/uapi/asm-generic/shmbuf.h \
+ arch/x86/include/asm/shmparam.h \
+ include/linux/signal.h \
+ $(wildcard include/config/old/sigaction.h) \
+ include/uapi/linux/signal.h \
+ arch/x86/include/asm/signal.h \
+ arch/x86/include/uapi/asm/signal.h \
+ include/uapi/asm-generic/signal-defs.h \
+ arch/x86/include/uapi/asm/siginfo.h \
+ include/asm-generic/siginfo.h \
+ include/uapi/asm-generic/siginfo.h \
+ include/linux/pid.h \
+ include/linux/percpu.h \
+ $(wildcard include/config/need/per/cpu/embed/first/chunk.h) \
+ $(wildcard include/config/need/per/cpu/page/first/chunk.h) \
+ include/linux/mmdebug.h \
+ $(wildcard include/config/debug/vm.h) \
+ include/linux/pfn.h \
+ include/linux/topology.h \
+ $(wildcard include/config/use/percpu/numa/node/id.h) \
+ include/linux/mmzone.h \
+ $(wildcard include/config/force/max/zoneorder.h) \
+ $(wildcard include/config/cma.h) \
+ $(wildcard include/config/memory/isolation.h) \
+ $(wildcard include/config/zone/dma.h) \
+ $(wildcard include/config/zone/dma32.h) \
+ $(wildcard include/config/memory/hotplug.h) \
+ $(wildcard include/config/have/memblock/node/map.h) \
+ $(wildcard include/config/flat/node/mem/map.h) \
+ $(wildcard include/config/page/extension.h) \
+ $(wildcard include/config/no/bootmem.h) \
+ $(wildcard include/config/deferred/struct/page/init.h) \
+ $(wildcard include/config/have/memory/present.h) \
+ $(wildcard include/config/need/node/memmap/size.h) \
+ $(wildcard include/config/need/multiple/nodes.h) \
+ $(wildcard include/config/have/arch/early/pfn/to/nid.h) \
+ $(wildcard include/config/sparsemem/extreme.h) \
+ $(wildcard include/config/have/arch/pfn/valid.h) \
+ $(wildcard include/config/holes/in/zone.h) \
+ $(wildcard include/config/arch/has/holes/memorymodel.h) \
+ include/linux/pageblock-flags.h \
+ $(wildcard include/config/hugetlb/page.h) \
+ $(wildcard include/config/hugetlb/page/size/variable.h) \
+ include/linux/memory_hotplug.h \
+ $(wildcard include/config/have/arch/nodedata/extension.h) \
+ $(wildcard include/config/have/bootmem/info/node.h) \
+ arch/x86/include/asm/mmzone.h \
+ arch/x86/include/asm/mmzone_64.h \
+ include/linux/proportions.h \
+ include/linux/percpu_counter.h \
+ include/linux/gfp.h \
+ include/linux/seccomp.h \
+ $(wildcard include/config/seccomp.h) \
+ $(wildcard include/config/have/arch/seccomp/filter.h) \
+ $(wildcard include/config/seccomp/filter.h) \
+ include/uapi/linux/seccomp.h \
+ arch/x86/include/asm/seccomp.h \
+ arch/x86/include/asm/unistd.h \
+ $(wildcard include/config/x86/x32/abi.h) \
+ arch/x86/include/uapi/asm/unistd.h \
+ arch/x86/include/generated/uapi/asm/unistd_64.h \
+ arch/x86/include/generated/asm/unistd_64_x32.h \
+ arch/x86/include/asm/ia32_unistd.h \
+ arch/x86/include/generated/asm/unistd_32_ia32.h \
+ include/asm-generic/seccomp.h \
+ include/uapi/linux/unistd.h \
+ include/linux/rculist.h \
+ include/linux/rtmutex.h \
+ $(wildcard include/config/debug/rt/mutexes.h) \
+ include/linux/resource.h \
+ include/uapi/linux/resource.h \
+ arch/x86/include/uapi/asm/resource.h \
+ include/asm-generic/resource.h \
+ include/uapi/asm-generic/resource.h \
+ include/linux/hrtimer.h \
+ $(wildcard include/config/high/res/timers.h) \
+ $(wildcard include/config/timerfd.h) \
+ include/linux/timerqueue.h \
+ include/linux/task_io_accounting.h \
+ $(wildcard include/config/task/io/accounting.h) \
+ include/linux/latencytop.h \
+ include/linux/cred.h \
+ $(wildcard include/config/debug/credentials.h) \
+ $(wildcard include/config/security.h) \
+ include/linux/key.h \
+ include/linux/assoc_array.h \
+ $(wildcard include/config/associative/array.h) \
+ include/linux/selinux.h \
+ $(wildcard include/config/security/selinux.h) \
+ include/uapi/linux/magic.h \
+ include/linux/cgroup-defs.h \
+ include/uapi/linux/limits.h \
+ include/linux/idr.h \
+ include/linux/percpu-refcount.h \
+ include/linux/percpu-rwsem.h \
+ include/linux/cgroup_subsys.h \
+ $(wildcard include/config/cgroup/cpuacct.h) \
+ $(wildcard include/config/cgroup/device.h) \
+ $(wildcard include/config/cgroup/freezer.h) \
+ $(wildcard include/config/cgroup/net/classid.h) \
+ $(wildcard include/config/cgroup/perf.h) \
+ $(wildcard include/config/cgroup/net/prio.h) \
+ $(wildcard include/config/cgroup/hugetlb.h) \
+ $(wildcard include/config/cgroup/debug.h) \
+ include/linux/genhd.h \
+ $(wildcard include/config/fail/make/request.h) \
+ $(wildcard include/config/solaris/x86/partition.h) \
+ $(wildcard include/config/bsd/disklabel.h) \
+ $(wildcard include/config/unixware/disklabel.h) \
+ $(wildcard include/config/minix/subpartition.h) \
+ include/linux/kdev_t.h \
+ include/uapi/linux/kdev_t.h \
+ include/linux/slab.h \
+ $(wildcard include/config/debug/slab.h) \
+ $(wildcard include/config/failslab.h) \
+ $(wildcard include/config/slab.h) \
+ $(wildcard include/config/slub.h) \
+ $(wildcard include/config/slob.h) \
+ include/linux/kmemleak.h \
+ $(wildcard include/config/debug/kmemleak.h) \
+ include/linux/kasan.h \
+ $(wildcard include/config/kasan/shadow/offset.h) \
+ include/linux/device.h \
+ $(wildcard include/config/debug/devres.h) \
+ $(wildcard include/config/pinctrl.h) \
+ $(wildcard include/config/dma/cma.h) \
+ $(wildcard include/config/of.h) \
+ $(wildcard include/config/devtmpfs.h) \
+ $(wildcard include/config/sysfs/deprecated.h) \
+ include/linux/kobject.h \
+ $(wildcard include/config/uevent/helper.h) \
+ $(wildcard include/config/debug/kobject/release.h) \
+ include/linux/sysfs.h \
+ include/linux/kernfs.h \
+ $(wildcard include/config/kernfs.h) \
+ include/linux/kobject_ns.h \
+ include/linux/stat.h \
+ arch/x86/include/uapi/asm/stat.h \
+ include/uapi/linux/stat.h \
+ include/linux/kref.h \
+ include/linux/klist.h \
+ include/linux/pinctrl/devinfo.h \
+ include/linux/pinctrl/consumer.h \
+ include/linux/seq_file.h \
+ include/linux/pinctrl/pinctrl-state.h \
+ include/linux/ratelimit.h \
+ arch/x86/include/asm/device.h \
+ $(wildcard include/config/x86/dev/dma/ops.h) \
+ $(wildcard include/config/intel/iommu.h) \
+ $(wildcard include/config/amd/iommu.h) \
+ include/linux/pm_wakeup.h \
+ include/linux/fs.h \
+ $(wildcard include/config/fs/posix/acl.h) \
+ $(wildcard include/config/cgroup/writeback.h) \
+ $(wildcard include/config/ima.h) \
+ $(wildcard include/config/fsnotify.h) \
+ $(wildcard include/config/file/locking.h) \
+ $(wildcard include/config/quota.h) \
+ $(wildcard include/config/fs/dax.h) \
+ $(wildcard include/config/migration.h) \
+ include/linux/dcache.h \
+ include/linux/rculist_bl.h \
+ include/linux/list_bl.h \
+ include/linux/bit_spinlock.h \
+ include/linux/lockref.h \
+ $(wildcard include/config/arch/use/cmpxchg/lockref.h) \
+ include/linux/path.h \
+ include/linux/list_lru.h \
+ include/linux/shrinker.h \
+ include/linux/radix-tree.h \
+ include/linux/semaphore.h \
+ include/uapi/linux/fiemap.h \
+ include/linux/migrate_mode.h \
+ include/linux/blk_types.h \
+ include/uapi/linux/fs.h \
+ include/linux/quota.h \
+ $(wildcard include/config/quota/netlink/interface.h) \
+ include/uapi/linux/dqblk_xfs.h \
+ include/linux/dqblk_v1.h \
+ include/linux/dqblk_v2.h \
+ include/linux/dqblk_qtree.h \
+ include/linux/projid.h \
+ include/uapi/linux/quota.h \
+ include/linux/nfs_fs_i.h \
+ include/linux/fcntl.h \
+ include/uapi/linux/fcntl.h \
+ arch/x86/include/uapi/asm/fcntl.h \
+ include/uapi/asm-generic/fcntl.h \
+ include/linux/pagemap.h \
+ include/linux/mm.h \
+ $(wildcard include/config/ppc.h) \
+ $(wildcard include/config/parisc.h) \
+ $(wildcard include/config/metag.h) \
+ $(wildcard include/config/ia64.h) \
+ $(wildcard include/config/shmem.h) \
+ $(wildcard include/config/debug/vm/rb.h) \
+ $(wildcard include/config/debug/pagealloc.h) \
+ $(wildcard include/config/hugetlbfs.h) \
+ include/linux/debug_locks.h \
+ $(wildcard include/config/debug/locking/api/selftests.h) \
+ include/linux/page_ext.h \
+ $(wildcard include/config/page/owner.h) \
+ include/linux/stacktrace.h \
+ $(wildcard include/config/stacktrace.h) \
+ $(wildcard include/config/user/stacktrace/support.h) \
+ arch/x86/include/asm/pgtable.h \
+ $(wildcard include/config/have/arch/soft/dirty.h) \
+ arch/x86/include/asm/pgtable_64.h \
+ include/asm-generic/pgtable.h \
+ $(wildcard include/config/have/arch/huge/vmap.h) \
+ include/linux/page-flags.h \
+ $(wildcard include/config/pageflags/extended.h) \
+ $(wildcard include/config/arch/uses/pg/uncached.h) \
+ $(wildcard include/config/memory/failure.h) \
+ $(wildcard include/config/swap.h) \
+ $(wildcard include/config/ksm.h) \
+ include/linux/huge_mm.h \
+ include/linux/vmstat.h \
+ $(wildcard include/config/vm/event/counters.h) \
+ $(wildcard include/config/debug/tlbflush.h) \
+ $(wildcard include/config/debug/vm/vmacache.h) \
+ include/linux/vm_event_item.h \
+ $(wildcard include/config/memory/balloon.h) \
+ $(wildcard include/config/balloon/compaction.h) \
+ include/linux/highmem.h \
+ include/linux/uaccess.h \
+ arch/x86/include/asm/uaccess.h \
+ $(wildcard include/config/x86/intel/usercopy.h) \
+ $(wildcard include/config/debug/strict/user/copy/checks.h) \
+ arch/x86/include/asm/smap.h \
+ $(wildcard include/config/x86/smap.h) \
+ arch/x86/include/asm/uaccess_64.h \
+ include/linux/hardirq.h \
+ include/linux/ftrace_irq.h \
+ $(wildcard include/config/ftrace/nmi/enter.h) \
+ include/linux/vtime.h \
+ include/linux/context_tracking_state.h \
+ $(wildcard include/config/context/tracking.h) \
+ include/linux/static_key.h \
+ arch/x86/include/asm/hardirq.h \
+ $(wildcard include/config/x86/thermal/vector.h) \
+ $(wildcard include/config/x86/mce/threshold.h) \
+ $(wildcard include/config/x86/mce/amd.h) \
+ $(wildcard include/config/hyperv.h) \
+ include/linux/irq.h \
+ $(wildcard include/config/irq/domain/hierarchy.h) \
+ $(wildcard include/config/generic/pending/irq.h) \
+ $(wildcard include/config/hardirqs/sw/resend.h) \
+ $(wildcard include/config/generic/irq/legacy/alloc/hwirq.h) \
+ $(wildcard include/config/generic/irq/legacy.h) \
+ include/linux/irqhandler.h \
+ include/linux/irqreturn.h \
+ include/linux/irqnr.h \
+ include/uapi/linux/irqnr.h \
+ include/linux/io.h \
+ arch/x86/include/asm/irq.h \
+ arch/x86/include/asm/irq_regs.h \
+ include/linux/irqdesc.h \
+ $(wildcard include/config/irq/preflow/fasteoi.h) \
+ $(wildcard include/config/sparse/irq.h) \
+ $(wildcard include/config/handle/domain/irq.h) \
+ arch/x86/include/asm/hw_irq.h \
+ $(wildcard include/config/hpet/timer.h) \
+ $(wildcard include/config/dmar/table.h) \
+ $(wildcard include/config/ht/irq.h) \
+ $(wildcard include/config/x86/uv.h) \
+ include/linux/profile.h \
+ $(wildcard include/config/profiling.h) \
+ arch/x86/include/asm/sections.h \
+ $(wildcard include/config/debug/rodata.h) \
+ include/asm-generic/sections.h \
+ arch/x86/include/asm/cacheflush.h \
+ $(wildcard include/config/debug/rodata/test.h) \
+ include/asm-generic/cacheflush.h \
+ include/linux/hugetlb_inline.h \
+ include/linux/backing-dev-defs.h \
+ include/linux/flex_proportions.h \
+ include/linux/mempool.h \
+ include/linux/bio.h \
+ include/linux/ioprio.h \
+ include/linux/iocontext.h \
+ include/linux/bsg.h \
+ include/uapi/linux/bsg.h \
+ include/linux/scatterlist.h \
+ $(wildcard include/config/debug/sg.h) \
+ $(wildcard include/config/need/sg/dma/length.h) \
+ $(wildcard include/config/arch/has/sg/chain.h) \
+ include/linux/elevator.h \
+ include/linux/hashtable.h \
+ include/linux/hash.h \
+ $(wildcard include/config/arch/has/fast/multiplier.h) \
+ include/linux/module.h \
+ $(wildcard include/config/module/sig.h) \
+ $(wildcard include/config/modules/tree/lookup.h) \
+ $(wildcard include/config/kallsyms.h) \
+ $(wildcard include/config/tracepoints.h) \
+ $(wildcard include/config/event/tracing.h) \
+ $(wildcard include/config/livepatch.h) \
+ $(wildcard include/config/module/unload.h) \
+ $(wildcard include/config/constructors.h) \
+ $(wildcard include/config/debug/set/module/ronx.h) \
+ include/linux/kmod.h \
+ include/linux/elf.h \
+ arch/x86/include/asm/elf.h \
+ arch/x86/include/asm/user.h \
+ arch/x86/include/asm/user_64.h \
+ arch/x86/include/asm/vdso.h \
+ $(wildcard include/config/x86/x32.h) \
+ include/uapi/linux/elf.h \
+ include/uapi/linux/elf-em.h \
+ include/linux/moduleparam.h \
+ $(wildcard include/config/alpha.h) \
+ $(wildcard include/config/ppc64.h) \
+ include/linux/rbtree_latch.h \
+ arch/x86/include/asm/module.h \
+ $(wildcard include/config/m586.h) \
+ $(wildcard include/config/m586tsc.h) \
+ $(wildcard include/config/m586mmx.h) \
+ $(wildcard include/config/mcore2.h) \
+ $(wildcard include/config/m686.h) \
+ $(wildcard include/config/mpentiumii.h) \
+ $(wildcard include/config/mpentiumiii.h) \
+ $(wildcard include/config/mpentiumm.h) \
+ $(wildcard include/config/mpentium4.h) \
+ $(wildcard include/config/mk6.h) \
+ $(wildcard include/config/mk8.h) \
+ $(wildcard include/config/melan.h) \
+ $(wildcard include/config/mcrusoe.h) \
+ $(wildcard include/config/mefficeon.h) \
+ $(wildcard include/config/mwinchipc6.h) \
+ $(wildcard include/config/mwinchip3d.h) \
+ $(wildcard include/config/mcyrixiii.h) \
+ $(wildcard include/config/mviac3/2.h) \
+ $(wildcard include/config/mviac7.h) \
+ $(wildcard include/config/mgeodegx1.h) \
+ $(wildcard include/config/mgeode/lx.h) \
+ include/asm-generic/module.h \
+ $(wildcard include/config/have/mod/arch/specific.h) \
+ $(wildcard include/config/modules/use/elf/rel.h) \
+ $(wildcard include/config/modules/use/elf/rela.h) \
+ include/linux/file.h \
+ include/net/sock.h \
+ $(wildcard include/config/net.h) \
+ $(wildcard include/config/ipv6.h) \
+ $(wildcard include/config/rps.h) \
+ $(wildcard include/config/net/rx/busy/poll.h) \
+ $(wildcard include/config/xfrm.h) \
+ $(wildcard include/config/inet.h) \
+ include/linux/list_nulls.h \
+ include/linux/netdevice.h \
+ $(wildcard include/config/dcb.h) \
+ $(wildcard include/config/wlan.h) \
+ $(wildcard include/config/ax25.h) \
+ $(wildcard include/config/mac80211/mesh.h) \
+ $(wildcard include/config/net/ipip.h) \
+ $(wildcard include/config/net/ipgre.h) \
+ $(wildcard include/config/ipv6/sit.h) \
+ $(wildcard include/config/ipv6/tunnel.h) \
+ $(wildcard include/config/netpoll.h) \
+ $(wildcard include/config/xps.h) \
+ $(wildcard include/config/bql.h) \
+ $(wildcard include/config/rfs/accel.h) \
+ $(wildcard include/config/fcoe.h) \
+ $(wildcard include/config/net/poll/controller.h) \
+ $(wildcard include/config/libfcoe.h) \
+ $(wildcard include/config/wireless/ext.h) \
+ $(wildcard include/config/net/switchdev.h) \
+ $(wildcard include/config/vlan/8021q.h) \
+ $(wildcard include/config/net/dsa.h) \
+ $(wildcard include/config/tipc.h) \
+ $(wildcard include/config/mpls/routing.h) \
+ $(wildcard include/config/net/cls/act.h) \
+ $(wildcard include/config/netfilter/ingress.h) \
+ $(wildcard include/config/net/flow/limit.h) \
+ include/linux/delay.h \
+ arch/x86/include/asm/delay.h \
+ include/asm-generic/delay.h \
+ include/linux/prefetch.h \
+ include/linux/dmaengine.h \
+ $(wildcard include/config/async/tx/enable/channel/switch.h) \
+ $(wildcard include/config/dma/engine.h) \
+ $(wildcard include/config/rapidio/dma/engine.h) \
+ $(wildcard include/config/async/tx/dma.h) \
+ include/linux/uio.h \
+ include/uapi/linux/uio.h \
+ include/linux/dynamic_queue_limits.h \
+ include/linux/ethtool.h \
+ include/linux/compat.h \
+ $(wildcard include/config/compat/old/sigaction.h) \
+ $(wildcard include/config/odd/rt/sigaction.h) \
+ include/linux/socket.h \
+ arch/x86/include/uapi/asm/socket.h \
+ include/uapi/asm-generic/socket.h \
+ arch/x86/include/uapi/asm/sockios.h \
+ include/uapi/asm-generic/sockios.h \
+ include/uapi/linux/sockios.h \
+ include/uapi/linux/socket.h \
+ include/uapi/linux/if.h \
+ include/uapi/linux/hdlc/ioctl.h \
+ include/uapi/linux/aio_abi.h \
+ arch/x86/include/asm/compat.h \
+ arch/x86/include/asm/user32.h \
+ include/uapi/linux/ethtool.h \
+ include/linux/if_ether.h \
+ include/linux/skbuff.h \
+ $(wildcard include/config/nf/conntrack.h) \
+ $(wildcard include/config/bridge/netfilter.h) \
+ $(wildcard include/config/ipv6/ndisc/nodetype.h) \
+ $(wildcard include/config/net/sched.h) \
+ $(wildcard include/config/network/secmark.h) \
+ $(wildcard include/config/network/phy/timestamping.h) \
+ $(wildcard include/config/netfilter/xt/target/trace.h) \
+ $(wildcard include/config/nf/tables.h) \
+ include/linux/kmemcheck.h \
+ include/linux/net.h \
+ include/linux/random.h \
+ $(wildcard include/config/arch/random.h) \
+ include/uapi/linux/random.h \
+ arch/x86/include/asm/archrandom.h \
+ include/uapi/linux/net.h \
+ include/linux/textsearch.h \
+ include/net/checksum.h \
+ arch/x86/include/asm/checksum.h \
+ arch/x86/include/asm/checksum_64.h \
+ include/linux/dma-mapping.h \
+ $(wildcard include/config/has/dma.h) \
+ $(wildcard include/config/arch/has/dma/set/coherent/mask.h) \
+ $(wildcard include/config/have/dma/attrs.h) \
+ $(wildcard include/config/need/dma/map/state.h) \
+ include/linux/dma-attrs.h \
+ include/linux/dma-direction.h \
+ arch/x86/include/asm/dma-mapping.h \
+ $(wildcard include/config/isa.h) \
+ $(wildcard include/config/x86/dma/remap.h) \
+ include/linux/dma-debug.h \
+ $(wildcard include/config/dma/api/debug.h) \
+ arch/x86/include/asm/swiotlb.h \
+ $(wildcard include/config/swiotlb.h) \
+ include/linux/swiotlb.h \
+ include/asm-generic/dma-coherent.h \
+ $(wildcard include/config/have/generic/dma/coherent.h) \
+ include/linux/dma-contiguous.h \
+ include/asm-generic/dma-mapping-common.h \
+ include/linux/netdev_features.h \
+ include/net/flow_dissector.h \
+ include/linux/in6.h \
+ include/uapi/linux/in6.h \
+ include/uapi/linux/libc-compat.h \
+ include/uapi/linux/if_ether.h \
+ include/linux/splice.h \
+ include/linux/pipe_fs_i.h \
+ include/net/net_namespace.h \
+ $(wildcard include/config/ieee802154/6lowpan.h) \
+ $(wildcard include/config/ip/sctp.h) \
+ $(wildcard include/config/ip/dccp.h) \
+ $(wildcard include/config/netfilter.h) \
+ $(wildcard include/config/nf/defrag/ipv6.h) \
+ $(wildcard include/config/wext/core.h) \
+ $(wildcard include/config/ip/vs.h) \
+ $(wildcard include/config/mpls.h) \
+ $(wildcard include/config/net/ns.h) \
+ include/net/flow.h \
+ include/net/netns/core.h \
+ include/net/netns/mib.h \
+ $(wildcard include/config/xfrm/statistics.h) \
+ include/net/snmp.h \
+ include/uapi/linux/snmp.h \
+ include/linux/u64_stats_sync.h \
+ include/net/netns/unix.h \
+ include/net/netns/packet.h \
+ include/net/netns/ipv4.h \
+ $(wildcard include/config/ip/multiple/tables.h) \
+ $(wildcard include/config/ip/route/classid.h) \
+ $(wildcard include/config/ip/mroute.h) \
+ $(wildcard include/config/ip/mroute/multiple/tables.h) \
+ include/net/inet_frag.h \
+ include/net/netns/ipv6.h \
+ $(wildcard include/config/ipv6/multiple/tables.h) \
+ $(wildcard include/config/ipv6/mroute.h) \
+ $(wildcard include/config/ipv6/mroute/multiple/tables.h) \
+ include/net/dst_ops.h \
+ include/net/netns/ieee802154_6lowpan.h \
+ include/net/netns/sctp.h \
+ include/net/netns/dccp.h \
+ include/net/netns/netfilter.h \
+ include/linux/netfilter_defs.h \
+ include/uapi/linux/netfilter.h \
+ include/linux/in.h \
+ include/uapi/linux/in.h \
+ include/net/netns/x_tables.h \
+ $(wildcard include/config/bridge/nf/ebtables.h) \
+ include/net/netns/conntrack.h \
+ $(wildcard include/config/nf/conntrack/proc/compat.h) \
+ $(wildcard include/config/nf/conntrack/events.h) \
+ $(wildcard include/config/nf/conntrack/labels.h) \
+ $(wildcard include/config/nf/nat/needed.h) \
+ include/linux/netfilter/nf_conntrack_tcp.h \
+ include/uapi/linux/netfilter/nf_conntrack_tcp.h \
+ include/net/netns/nftables.h \
+ include/net/netns/xfrm.h \
+ include/uapi/linux/xfrm.h \
+ include/net/flowcache.h \
+ include/linux/interrupt.h \
+ $(wildcard include/config/irq/forced/threading.h) \
+ $(wildcard include/config/generic/irq/probe.h) \
+ include/net/netns/mpls.h \
+ include/linux/ns_common.h \
+ include/linux/seq_file_net.h \
+ include/net/dsa.h \
+ $(wildcard include/config/net/dsa/hwmon.h) \
+ include/linux/of.h \
+ $(wildcard include/config/sparc.h) \
+ $(wildcard include/config/of/dynamic.h) \
+ $(wildcard include/config/attach/node.h) \
+ $(wildcard include/config/detach/node.h) \
+ $(wildcard include/config/add/property.h) \
+ $(wildcard include/config/remove/property.h) \
+ $(wildcard include/config/update/property.h) \
+ $(wildcard include/config/no/change.h) \
+ $(wildcard include/config/change/add.h) \
+ $(wildcard include/config/change/remove.h) \
+ $(wildcard include/config/of/resolve.h) \
+ $(wildcard include/config/of/overlay.h) \
+ include/linux/mod_devicetable.h \
+ include/linux/uuid.h \
+ include/uapi/linux/uuid.h \
+ include/linux/property.h \
+ include/linux/fwnode.h \
+ include/linux/phy.h \
+ include/linux/mii.h \
+ include/uapi/linux/mii.h \
+ include/linux/phy_fixed.h \
+ $(wildcard include/config/fixed/phy.h) \
+ include/net/netprio_cgroup.h \
+ include/linux/cgroup.h \
+ include/uapi/linux/cgroupstats.h \
+ include/uapi/linux/taskstats.h \
+ include/uapi/linux/neighbour.h \
+ include/linux/netlink.h \
+ include/net/scm.h \
+ $(wildcard include/config/security/network.h) \
+ include/linux/security.h \
+ $(wildcard include/config/security/network/xfrm.h) \
+ $(wildcard include/config/security/path.h) \
+ $(wildcard include/config/securityfs.h) \
+ include/linux/nsproxy.h \
+ include/uapi/linux/netlink.h \
+ include/uapi/linux/netdevice.h \
+ include/uapi/linux/if_packet.h \
+ include/linux/if_link.h \
+ include/uapi/linux/if_link.h \
+ include/uapi/linux/if_bonding.h \
+ include/linux/page_counter.h \
+ include/linux/memcontrol.h \
+ $(wildcard include/config/memcg/swap.h) \
+ include/linux/filter.h \
+ $(wildcard include/config/bpf/jit.h) \
+ include/uapi/linux/filter.h \
+ include/uapi/linux/bpf_common.h \
+ include/uapi/linux/bpf.h \
+ include/linux/rculist_nulls.h \
+ include/linux/poll.h \
+ include/uapi/linux/poll.h \
+ arch/x86/include/uapi/asm/poll.h \
+ include/uapi/asm-generic/poll.h \
+ include/net/dst.h \
+ include/linux/rtnetlink.h \
+ $(wildcard include/config/net/ingress.h) \
+ include/uapi/linux/rtnetlink.h \
+ include/uapi/linux/if_addr.h \
+ include/net/neighbour.h \
+ include/net/rtnetlink.h \
+ include/net/netlink.h \
+ include/net/tcp_states.h \
+ include/uapi/linux/net_tstamp.h \
+ include/linux/kthread.h \
+ include/linux/debugfs.h \
+ include/uapi/linux/nbd.h \
+
+/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o: $(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o)
+
+$(deps_/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o):
diff --git a/builder/dnbd3-rootfs/binaries/nbd/.tmp_versions/nbd.mod b/builder/dnbd3-rootfs/binaries/nbd/.tmp_versions/nbd.mod
new file mode 100644
index 00000000..f2bc3309
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/.tmp_versions/nbd.mod
@@ -0,0 +1,2 @@
+/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko
+/media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.o
diff --git a/builder/dnbd3-rootfs/binaries/nbd/Makefile b/builder/dnbd3-rootfs/binaries/nbd/Makefile
new file mode 100644
index 00000000..ca0423f5
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/Makefile
@@ -0,0 +1,15 @@
+obj-m += nbd.o
+
+all: build
+
+build: update
+ make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) modules
+
+install:
+ make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) modules_install
+
+clean:
+ make --directory /lib/modules/$(shell uname -r)/build M=$(PWD) clean
+
+update:
+ curl --location --remote-name https://raw.githubusercontent.com/torvalds/linux/master/drivers/block/nbd.c
diff --git a/builder/dnbd3-rootfs/binaries/nbd/Module.symvers b/builder/dnbd3-rootfs/binaries/nbd/Module.symvers
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/Module.symvers
diff --git a/builder/dnbd3-rootfs/binaries/nbd/modules.order b/builder/dnbd3-rootfs/binaries/nbd/modules.order
new file mode 100644
index 00000000..8f303a78
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/modules.order
@@ -0,0 +1 @@
+kernel//media/sf_project/systemd-init/builder/dnbd3-qcow2-rootfs/kernel_modules/nbd/nbd.ko
diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.c b/builder/dnbd3-rootfs/binaries/nbd/nbd.c
new file mode 100644
index 00000000..1b876233
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/nbd.c
@@ -0,0 +1,1136 @@
+/*
+ * Network block device - make block devices work over TCP
+ *
+ * Note that you can not swap over this thing, yet. Seems to work but
+ * deadlocks sometimes - you can not swap over TCP in general.
+ *
+ * Copyright 1997-2000, 2008 Pavel Machek <pavel@ucw.cz>
+ * Parts copyright 2001 Steven Whitehouse <steve@chygwyn.com>
+ *
+ * This file is released under GPLv2 or later.
+ *
+ * (part of code stolen from loop.c)
+ */
+
+#include <linux/major.h>
+
+#include <linux/blkdev.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/sched.h>
+#include <linux/fs.h>
+#include <linux/bio.h>
+#include <linux/stat.h>
+#include <linux/errno.h>
+#include <linux/file.h>
+#include <linux/ioctl.h>
+#include <linux/mutex.h>
+#include <linux/compiler.h>
+#include <linux/err.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <net/sock.h>
+#include <linux/net.h>
+#include <linux/kthread.h>
+#include <linux/types.h>
+#include <linux/debugfs.h>
+
+#include <asm/uaccess.h>
+#include <asm/types.h>
+
+#include <linux/nbd.h>
+
+struct nbd_device {
+ u32 flags;
+ struct socket * sock; /* If == NULL, device is not ready, yet */
+ int magic;
+
+ spinlock_t queue_lock;
+ struct list_head queue_head; /* Requests waiting result */
+ struct request *active_req;
+ wait_queue_head_t active_wq;
+ struct list_head waiting_queue; /* Requests to be sent */
+ wait_queue_head_t waiting_wq;
+
+ struct mutex tx_lock;
+ struct gendisk *disk;
+ int blksize;
+ loff_t bytesize;
+ int xmit_timeout;
+ bool disconnect; /* a disconnect has been requested by user */
+
+ struct timer_list timeout_timer;
+ spinlock_t tasks_lock;
+ struct task_struct *task_recv;
+ struct task_struct *task_send;
+
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+ struct dentry *dbg_dir;
+#endif
+};
+
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+static struct dentry *nbd_dbg_dir;
+#endif
+
+#define nbd_name(nbd) ((nbd)->disk->disk_name)
+
+#define NBD_MAGIC 0x68797548
+
+static unsigned int nbds_max = 16;
+static struct nbd_device *nbd_dev;
+static int max_part;
+
+/*
+ * Use just one lock (or at most 1 per NIC). Two arguments for this:
+ * 1. Each NIC is essentially a synchronization point for all servers
+ * accessed through that NIC so there's no need to have more locks
+ * than NICs anyway.
+ * 2. More locks lead to more "Dirty cache line bouncing" which will slow
+ * down each lock to the point where they're actually slower than just
+ * a single lock.
+ * Thanks go to Jens Axboe and Al Viro for their LKML emails explaining this!
+ */
+static DEFINE_SPINLOCK(nbd_lock);
+
+static inline struct device *nbd_to_dev(struct nbd_device *nbd)
+{
+ return disk_to_dev(nbd->disk);
+}
+
+static const char *nbdcmd_to_ascii(int cmd)
+{
+ switch (cmd) {
+ case NBD_CMD_READ: return "read";
+ case NBD_CMD_WRITE: return "write";
+ case NBD_CMD_DISC: return "disconnect";
+ case NBD_CMD_FLUSH: return "flush";
+ case NBD_CMD_TRIM: return "trim/discard";
+ }
+ return "invalid";
+}
+
+static void nbd_end_request(struct nbd_device *nbd, struct request *req)
+{
+ int error = req->errors ? -EIO : 0;
+ struct request_queue *q = req->q;
+ unsigned long flags;
+
+ dev_dbg(nbd_to_dev(nbd), "request %p: %s\n", req,
+ error ? "failed" : "done");
+
+ spin_lock_irqsave(q->queue_lock, flags);
+ __blk_end_request_all(req, error);
+ spin_unlock_irqrestore(q->queue_lock, flags);
+}
+
+/*
+ * Forcibly shutdown the socket causing all listeners to error
+ */
+static void sock_shutdown(struct nbd_device *nbd)
+{
+ if (!nbd->sock)
+ return;
+
+ dev_warn(disk_to_dev(nbd->disk), "shutting down socket\n");
+ kernel_sock_shutdown(nbd->sock, SHUT_RDWR);
+ nbd->sock = NULL;
+ del_timer_sync(&nbd->timeout_timer);
+}
+
+static void nbd_xmit_timeout(unsigned long arg)
+{
+ struct nbd_device *nbd = (struct nbd_device *)arg;
+ unsigned long flags;
+
+ if (list_empty(&nbd->queue_head))
+ return;
+
+ nbd->disconnect = true;
+
+ spin_lock_irqsave(&nbd->tasks_lock, flags);
+
+ if (nbd->task_recv)
+ force_sig(SIGKILL, nbd->task_recv);
+
+ if (nbd->task_send)
+ force_sig(SIGKILL, nbd->task_send);
+
+ spin_unlock_irqrestore(&nbd->tasks_lock, flags);
+
+ dev_err(nbd_to_dev(nbd), "Connection timed out, killed receiver and sender, shutting down connection\n");
+}
+
+/*
+ * Send or receive packet.
+ */
+static int sock_xmit(struct nbd_device *nbd, int send, void *buf, int size,
+ int msg_flags)
+{
+ struct socket *sock = nbd->sock;
+ int result;
+ struct msghdr msg;
+ struct kvec iov;
+ sigset_t blocked, oldset;
+ unsigned long pflags = current->flags;
+
+ if (unlikely(!sock)) {
+ dev_err(disk_to_dev(nbd->disk),
+ "Attempted %s on closed socket in sock_xmit\n",
+ (send ? "send" : "recv"));
+ return -EINVAL;
+ }
+
+ /* Allow interception of SIGKILL only
+ * Don't allow other signals to interrupt the transmission */
+ siginitsetinv(&blocked, sigmask(SIGKILL));
+ sigprocmask(SIG_SETMASK, &blocked, &oldset);
+
+ current->flags |= PF_MEMALLOC;
+ do {
+ sock->sk->sk_allocation = GFP_NOIO | __GFP_MEMALLOC;
+ iov.iov_base = buf;
+ iov.iov_len = size;
+ msg.msg_name = NULL;
+ msg.msg_namelen = 0;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = msg_flags | MSG_NOSIGNAL;
+
+ if (send)
+ result = kernel_sendmsg(sock, &msg, &iov, 1, size);
+ else
+ result = kernel_recvmsg(sock, &msg, &iov, 1, size,
+ msg.msg_flags);
+
+ if (result <= 0) {
+ if (result == 0)
+ result = -EPIPE; /* short read */
+ break;
+ }
+ size -= result;
+ buf += result;
+ } while (size > 0);
+
+ sigprocmask(SIG_SETMASK, &oldset, NULL);
+ tsk_restore_flags(current, pflags, PF_MEMALLOC);
+
+ if (!send && nbd->xmit_timeout)
+ mod_timer(&nbd->timeout_timer, jiffies + nbd->xmit_timeout);
+
+ return result;
+}
+
+static inline int sock_send_bvec(struct nbd_device *nbd, struct bio_vec *bvec,
+ int flags)
+{
+ int result;
+ void *kaddr = kmap(bvec->bv_page);
+ result = sock_xmit(nbd, 1, kaddr + bvec->bv_offset,
+ bvec->bv_len, flags);
+ kunmap(bvec->bv_page);
+ return result;
+}
+
+/* always call with the tx_lock held */
+static int nbd_send_req(struct nbd_device *nbd, struct request *req)
+{
+ int result, flags;
+ struct nbd_request request;
+ unsigned long size = blk_rq_bytes(req);
+ u32 type;
+
+ if (req->cmd_type == REQ_TYPE_DRV_PRIV)
+ type = NBD_CMD_DISC;
+ else if (req->cmd_flags & REQ_DISCARD)
+ type = NBD_CMD_TRIM;
+ else if (req->cmd_flags & REQ_FLUSH)
+ type = NBD_CMD_FLUSH;
+ else if (rq_data_dir(req) == WRITE)
+ type = NBD_CMD_WRITE;
+ else
+ type = NBD_CMD_READ;
+
+ memset(&request, 0, sizeof(request));
+ request.magic = htonl(NBD_REQUEST_MAGIC);
+ request.type = htonl(type);
+ if (type != NBD_CMD_FLUSH && type != NBD_CMD_DISC) {
+ request.from = cpu_to_be64((u64)blk_rq_pos(req) << 9);
+ request.len = htonl(size);
+ }
+ memcpy(request.handle, &req, sizeof(req));
+
+ dev_dbg(nbd_to_dev(nbd), "request %p: sending control (%s@%llu,%uB)\n",
+ req, nbdcmd_to_ascii(type),
+ (unsigned long long)blk_rq_pos(req) << 9, blk_rq_bytes(req));
+ result = sock_xmit(nbd, 1, &request, sizeof(request),
+ (type == NBD_CMD_WRITE) ? MSG_MORE : 0);
+ if (result <= 0) {
+ dev_err(disk_to_dev(nbd->disk),
+ "Send control failed (result %d)\n", result);
+ return -EIO;
+ }
+
+ if (type == NBD_CMD_WRITE) {
+ struct req_iterator iter;
+ struct bio_vec bvec;
+ /*
+ * we are really probing at internals to determine
+ * whether to set MSG_MORE or not...
+ */
+ rq_for_each_segment(bvec, req, iter) {
+ flags = 0;
+ if (!rq_iter_last(bvec, iter))
+ flags = MSG_MORE;
+ dev_dbg(nbd_to_dev(nbd), "request %p: sending %d bytes data\n",
+ req, bvec.bv_len);
+ result = sock_send_bvec(nbd, &bvec, flags);
+ if (result <= 0) {
+ dev_err(disk_to_dev(nbd->disk),
+ "Send data failed (result %d)\n",
+ result);
+ return -EIO;
+ }
+ }
+ }
+ return 0;
+}
+
+static struct request *nbd_find_request(struct nbd_device *nbd,
+ struct request *xreq)
+{
+ struct request *req, *tmp;
+ int err;
+
+ err = wait_event_interruptible(nbd->active_wq, nbd->active_req != xreq);
+ if (unlikely(err))
+ return ERR_PTR(err);
+
+ spin_lock(&nbd->queue_lock);
+ list_for_each_entry_safe(req, tmp, &nbd->queue_head, queuelist) {
+ if (req != xreq)
+ continue;
+ list_del_init(&req->queuelist);
+ spin_unlock(&nbd->queue_lock);
+ return req;
+ }
+ spin_unlock(&nbd->queue_lock);
+
+ return ERR_PTR(-ENOENT);
+}
+
+static inline int sock_recv_bvec(struct nbd_device *nbd, struct bio_vec *bvec)
+{
+ int result;
+ void *kaddr = kmap(bvec->bv_page);
+ result = sock_xmit(nbd, 0, kaddr + bvec->bv_offset, bvec->bv_len,
+ MSG_WAITALL);
+ kunmap(bvec->bv_page);
+ return result;
+}
+
+/* NULL returned = something went wrong, inform userspace */
+static struct request *nbd_read_stat(struct nbd_device *nbd)
+{
+ int result;
+ struct nbd_reply reply;
+ struct request *req;
+
+ reply.magic = 0;
+ result = sock_xmit(nbd, 0, &reply, sizeof(reply), MSG_WAITALL);
+ if (result <= 0) {
+ dev_err(disk_to_dev(nbd->disk),
+ "Receive control failed (result %d)\n", result);
+ return ERR_PTR(result);
+ }
+
+ if (ntohl(reply.magic) != NBD_REPLY_MAGIC) {
+ dev_err(disk_to_dev(nbd->disk), "Wrong magic (0x%lx)\n",
+ (unsigned long)ntohl(reply.magic));
+ return ERR_PTR(-EPROTO);
+ }
+
+ req = nbd_find_request(nbd, *(struct request **)reply.handle);
+ if (IS_ERR(req)) {
+ result = PTR_ERR(req);
+ if (result != -ENOENT)
+ return ERR_PTR(result);
+
+ dev_err(disk_to_dev(nbd->disk), "Unexpected reply (%p)\n",
+ reply.handle);
+ return ERR_PTR(-EBADR);
+ }
+
+ if (ntohl(reply.error)) {
+ dev_err(disk_to_dev(nbd->disk), "Other side returned error (%d)\n",
+ ntohl(reply.error));
+ req->errors++;
+ return req;
+ }
+
+ dev_dbg(nbd_to_dev(nbd), "request %p: got reply\n", req);
+ if (rq_data_dir(req) != WRITE) {
+ struct req_iterator iter;
+ struct bio_vec bvec;
+
+ rq_for_each_segment(bvec, req, iter) {
+ result = sock_recv_bvec(nbd, &bvec);
+ if (result <= 0) {
+ dev_err(disk_to_dev(nbd->disk), "Receive data failed (result %d)\n",
+ result);
+ req->errors++;
+ return req;
+ }
+ dev_dbg(nbd_to_dev(nbd), "request %p: got %d bytes data\n",
+ req, bvec.bv_len);
+ }
+ }
+ return req;
+}
+
+static ssize_t pid_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct gendisk *disk = dev_to_disk(dev);
+ struct nbd_device *nbd = (struct nbd_device *)disk->private_data;
+
+ return sprintf(buf, "%d\n", task_pid_nr(nbd->task_recv));
+}
+
+static struct device_attribute pid_attr = {
+ .attr = { .name = "pid", .mode = S_IRUGO},
+ .show = pid_show,
+};
+
+static int nbd_thread_recv(struct nbd_device *nbd)
+{
+ struct request *req;
+ int ret;
+ unsigned long flags;
+
+ BUG_ON(nbd->magic != NBD_MAGIC);
+
+ sk_set_memalloc(nbd->sock->sk);
+
+ spin_lock_irqsave(&nbd->tasks_lock, flags);
+ nbd->task_recv = current;
+ spin_unlock_irqrestore(&nbd->tasks_lock, flags);
+
+ ret = device_create_file(disk_to_dev(nbd->disk), &pid_attr);
+ if (ret) {
+ dev_err(disk_to_dev(nbd->disk), "device_create_file failed!\n");
+
+ spin_lock_irqsave(&nbd->tasks_lock, flags);
+ nbd->task_recv = NULL;
+ spin_unlock_irqrestore(&nbd->tasks_lock, flags);
+
+ return ret;
+ }
+
+ while (1) {
+ req = nbd_read_stat(nbd);
+ if (IS_ERR(req)) {
+ ret = PTR_ERR(req);
+ break;
+ }
+
+ nbd_end_request(nbd, req);
+ }
+
+ device_remove_file(disk_to_dev(nbd->disk), &pid_attr);
+
+ spin_lock_irqsave(&nbd->tasks_lock, flags);
+ nbd->task_recv = NULL;
+ spin_unlock_irqrestore(&nbd->tasks_lock, flags);
+
+ if (signal_pending(current)) {
+ siginfo_t info;
+
+ ret = dequeue_signal_lock(current, &current->blocked, &info);
+ dev_warn(nbd_to_dev(nbd), "pid %d, %s, got signal %d\n",
+ task_pid_nr(current), current->comm, ret);
+ mutex_lock(&nbd->tx_lock);
+ sock_shutdown(nbd);
+ mutex_unlock(&nbd->tx_lock);
+ ret = -ETIMEDOUT;
+ }
+
+ return ret;
+}
+
+static void nbd_clear_que(struct nbd_device *nbd)
+{
+ struct request *req;
+
+ BUG_ON(nbd->magic != NBD_MAGIC);
+
+ /*
+ * Because we have set nbd->sock to NULL under the tx_lock, all
+ * modifications to the list must have completed by now. For
+ * the same reason, the active_req must be NULL.
+ *
+ * As a consequence, we don't need to take the spin lock while
+ * purging the list here.
+ */
+ BUG_ON(nbd->sock);
+ BUG_ON(nbd->active_req);
+
+ while (!list_empty(&nbd->queue_head)) {
+ req = list_entry(nbd->queue_head.next, struct request,
+ queuelist);
+ list_del_init(&req->queuelist);
+ req->errors++;
+ nbd_end_request(nbd, req);
+ }
+
+ while (!list_empty(&nbd->waiting_queue)) {
+ req = list_entry(nbd->waiting_queue.next, struct request,
+ queuelist);
+ list_del_init(&req->queuelist);
+ req->errors++;
+ nbd_end_request(nbd, req);
+ }
+ dev_dbg(disk_to_dev(nbd->disk), "queue cleared\n");
+}
+
+
+static void nbd_handle_req(struct nbd_device *nbd, struct request *req)
+{
+ if (req->cmd_type != REQ_TYPE_FS)
+ goto error_out;
+
+ if (rq_data_dir(req) == WRITE &&
+ (nbd->flags & NBD_FLAG_READ_ONLY)) {
+ dev_err(disk_to_dev(nbd->disk),
+ "Write on read-only\n");
+ goto error_out;
+ }
+
+ req->errors = 0;
+
+ mutex_lock(&nbd->tx_lock);
+ if (unlikely(!nbd->sock)) {
+ mutex_unlock(&nbd->tx_lock);
+ dev_err(disk_to_dev(nbd->disk),
+ "Attempted send on closed socket\n");
+ goto error_out;
+ }
+
+ nbd->active_req = req;
+
+ if (nbd->xmit_timeout && list_empty_careful(&nbd->queue_head))
+ mod_timer(&nbd->timeout_timer, jiffies + nbd->xmit_timeout);
+
+ if (nbd_send_req(nbd, req) != 0) {
+ dev_err(disk_to_dev(nbd->disk), "Request send failed\n");
+ req->errors++;
+ nbd_end_request(nbd, req);
+ } else {
+ spin_lock(&nbd->queue_lock);
+ list_add_tail(&req->queuelist, &nbd->queue_head);
+ spin_unlock(&nbd->queue_lock);
+ }
+
+ nbd->active_req = NULL;
+ mutex_unlock(&nbd->tx_lock);
+ wake_up_all(&nbd->active_wq);
+
+ return;
+
+error_out:
+ req->errors++;
+ nbd_end_request(nbd, req);
+}
+
+static int nbd_thread_send(void *data)
+{
+ struct nbd_device *nbd = data;
+ struct request *req;
+ unsigned long flags;
+
+ spin_lock_irqsave(&nbd->tasks_lock, flags);
+ nbd->task_send = current;
+ spin_unlock_irqrestore(&nbd->tasks_lock, flags);
+
+ set_user_nice(current, MIN_NICE);
+ while (!kthread_should_stop() || !list_empty(&nbd->waiting_queue)) {
+ /* wait for something to do */
+ wait_event_interruptible(nbd->waiting_wq,
+ kthread_should_stop() ||
+ !list_empty(&nbd->waiting_queue));
+
+ if (signal_pending(current)) {
+ siginfo_t info;
+ int ret;
+
+ ret = dequeue_signal_lock(current, &current->blocked,
+ &info);
+ dev_warn(nbd_to_dev(nbd), "pid %d, %s, got signal %d\n",
+ task_pid_nr(current), current->comm, ret);
+ mutex_lock(&nbd->tx_lock);
+ sock_shutdown(nbd);
+ mutex_unlock(&nbd->tx_lock);
+ break;
+ }
+
+ /* extract request */
+ if (list_empty(&nbd->waiting_queue))
+ continue;
+
+ spin_lock_irq(&nbd->queue_lock);
+ req = list_entry(nbd->waiting_queue.next, struct request,
+ queuelist);
+ list_del_init(&req->queuelist);
+ spin_unlock_irq(&nbd->queue_lock);
+
+ /* handle request */
+ nbd_handle_req(nbd, req);
+ }
+
+ spin_lock_irqsave(&nbd->tasks_lock, flags);
+ nbd->task_send = NULL;
+ spin_unlock_irqrestore(&nbd->tasks_lock, flags);
+
+ /* Clear maybe pending signals */
+ if (signal_pending(current)) {
+ siginfo_t info;
+ dequeue_signal_lock(current, &current->blocked, &info);
+ }
+
+ return 0;
+}
+
+/*
+ * We always wait for result of write, for now. It would be nice to make it optional
+ * in future
+ * if ((rq_data_dir(req) == WRITE) && (nbd->flags & NBD_WRITE_NOCHK))
+ * { printk( "Warning: Ignoring result!\n"); nbd_end_request( req ); }
+ */
+
+static void nbd_request_handler(struct request_queue *q)
+ __releases(q->queue_lock) __acquires(q->queue_lock)
+{
+ struct request *req;
+
+ while ((req = blk_fetch_request(q)) != NULL) {
+ struct nbd_device *nbd;
+
+ spin_unlock_irq(q->queue_lock);
+
+ nbd = req->rq_disk->private_data;
+
+ BUG_ON(nbd->magic != NBD_MAGIC);
+
+ dev_dbg(nbd_to_dev(nbd), "request %p: dequeued (flags=%x)\n",
+ req, req->cmd_type);
+
+ if (unlikely(!nbd->sock)) {
+ dev_err(disk_to_dev(nbd->disk),
+ "Attempted send on closed socket\n");
+ req->errors++;
+ nbd_end_request(nbd, req);
+ spin_lock_irq(q->queue_lock);
+ continue;
+ }
+
+ spin_lock_irq(&nbd->queue_lock);
+ list_add_tail(&req->queuelist, &nbd->waiting_queue);
+ spin_unlock_irq(&nbd->queue_lock);
+
+ wake_up(&nbd->waiting_wq);
+
+ spin_lock_irq(q->queue_lock);
+ }
+}
+
+static int nbd_dev_dbg_init(struct nbd_device *nbd);
+static void nbd_dev_dbg_close(struct nbd_device *nbd);
+
+/* Must be called with tx_lock held */
+
+static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,
+ unsigned int cmd, unsigned long arg)
+{
+ switch (cmd) {
+ case NBD_DISCONNECT: {
+ struct request sreq;
+
+ dev_info(disk_to_dev(nbd->disk), "NBD_DISCONNECT\n");
+ if (!nbd->sock)
+ return -EINVAL;
+
+ mutex_unlock(&nbd->tx_lock);
+ fsync_bdev(bdev);
+ mutex_lock(&nbd->tx_lock);
+ blk_rq_init(NULL, &sreq);
+ sreq.cmd_type = REQ_TYPE_DRV_PRIV;
+
+ /* Check again after getting mutex back. */
+ if (!nbd->sock)
+ return -EINVAL;
+
+ nbd->disconnect = true;
+
+ nbd_send_req(nbd, &sreq);
+ return 0;
+ }
+
+ case NBD_CLEAR_SOCK: {
+ struct socket *sock = nbd->sock;
+ nbd->sock = NULL;
+ nbd_clear_que(nbd);
+ BUG_ON(!list_empty(&nbd->queue_head));
+ BUG_ON(!list_empty(&nbd->waiting_queue));
+ kill_bdev(bdev);
+ if (sock)
+ sockfd_put(sock);
+ return 0;
+ }
+
+ case NBD_SET_SOCK: {
+ struct socket *sock;
+ int err;
+ if (nbd->sock)
+ return -EBUSY;
+ sock = sockfd_lookup(arg, &err);
+ if (sock) {
+ nbd->sock = sock;
+ if (max_part > 0)
+ bdev->bd_invalidated = 1;
+ nbd->disconnect = false; /* we're connected now */
+ return 0;
+ }
+ return -EINVAL;
+ }
+
+ case NBD_SET_BLKSIZE:
+ nbd->blksize = arg;
+ nbd->bytesize &= ~(nbd->blksize-1);
+ bdev->bd_inode->i_size = nbd->bytesize;
+ set_blocksize(bdev, nbd->blksize);
+ set_capacity(nbd->disk, nbd->bytesize >> 9);
+ return 0;
+
+ case NBD_SET_SIZE:
+ nbd->bytesize = arg & ~(nbd->blksize-1);
+ bdev->bd_inode->i_size = nbd->bytesize;
+ set_blocksize(bdev, nbd->blksize);
+ set_capacity(nbd->disk, nbd->bytesize >> 9);
+ return 0;
+
+ case NBD_SET_TIMEOUT:
+ nbd->xmit_timeout = arg * HZ;
+ if (arg)
+ mod_timer(&nbd->timeout_timer,
+ jiffies + nbd->xmit_timeout);
+ else
+ del_timer_sync(&nbd->timeout_timer);
+
+ return 0;
+
+ case NBD_SET_FLAGS:
+ nbd->flags = arg;
+ return 0;
+
+ case NBD_SET_SIZE_BLOCKS:
+ nbd->bytesize = ((u64) arg) * nbd->blksize;
+ bdev->bd_inode->i_size = nbd->bytesize;
+ set_blocksize(bdev, nbd->blksize);
+ set_capacity(nbd->disk, nbd->bytesize >> 9);
+ return 0;
+
+ case NBD_DO_IT: {
+ struct task_struct *thread;
+ struct socket *sock;
+ int error;
+
+ if (nbd->task_recv)
+ return -EBUSY;
+ if (!nbd->sock)
+ return -EINVAL;
+
+ mutex_unlock(&nbd->tx_lock);
+
+ if (nbd->flags & NBD_FLAG_READ_ONLY)
+ set_device_ro(bdev, true);
+ if (nbd->flags & NBD_FLAG_SEND_TRIM)
+ queue_flag_set_unlocked(QUEUE_FLAG_DISCARD,
+ nbd->disk->queue);
+ if (nbd->flags & NBD_FLAG_SEND_FLUSH)
+ blk_queue_flush(nbd->disk->queue, REQ_FLUSH);
+ else
+ blk_queue_flush(nbd->disk->queue, 0);
+
+ thread = kthread_run(nbd_thread_send, nbd, "%s",
+ nbd_name(nbd));
+ if (IS_ERR(thread)) {
+ mutex_lock(&nbd->tx_lock);
+ return PTR_ERR(thread);
+ }
+
+ nbd_dev_dbg_init(nbd);
+ error = nbd_thread_recv(nbd);
+ nbd_dev_dbg_close(nbd);
+ kthread_stop(thread);
+
+ mutex_lock(&nbd->tx_lock);
+
+ sock_shutdown(nbd);
+ sock = nbd->sock;
+ nbd->sock = NULL;
+ nbd_clear_que(nbd);
+ kill_bdev(bdev);
+ queue_flag_clear_unlocked(QUEUE_FLAG_DISCARD, nbd->disk->queue);
+ set_device_ro(bdev, false);
+ if (sock)
+ sockfd_put(sock);
+ nbd->flags = 0;
+ nbd->bytesize = 0;
+ bdev->bd_inode->i_size = 0;
+ set_capacity(nbd->disk, 0);
+ if (max_part > 0)
+ blkdev_reread_part(bdev);
+ if (nbd->disconnect) /* user requested, ignore socket errors */
+ return 0;
+ return error;
+ }
+
+ case NBD_CLEAR_QUE:
+ /*
+ * This is for compatibility only. The queue is always cleared
+ * by NBD_DO_IT or NBD_CLEAR_SOCK.
+ */
+ return 0;
+
+ case NBD_PRINT_DEBUG:
+ dev_info(disk_to_dev(nbd->disk),
+ "next = %p, prev = %p, head = %p\n",
+ nbd->queue_head.next, nbd->queue_head.prev,
+ &nbd->queue_head);
+ return 0;
+ }
+ return -ENOTTY;
+}
+
+static int nbd_ioctl(struct block_device *bdev, fmode_t mode,
+ unsigned int cmd, unsigned long arg)
+{
+ struct nbd_device *nbd = bdev->bd_disk->private_data;
+ int error;
+
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+
+ BUG_ON(nbd->magic != NBD_MAGIC);
+
+ mutex_lock(&nbd->tx_lock);
+ error = __nbd_ioctl(bdev, nbd, cmd, arg);
+ mutex_unlock(&nbd->tx_lock);
+
+ return error;
+}
+
+static const struct block_device_operations nbd_fops =
+{
+ .owner = THIS_MODULE,
+ .ioctl = nbd_ioctl,
+};
+
+#if IS_ENABLED(CONFIG_DEBUG_FS)
+
+static int nbd_dbg_tasks_show(struct seq_file *s, void *unused)
+{
+ struct nbd_device *nbd = s->private;
+
+ if (nbd->task_recv)
+ seq_printf(s, "recv: %d\n", task_pid_nr(nbd->task_recv));
+ if (nbd->task_send)
+ seq_printf(s, "send: %d\n", task_pid_nr(nbd->task_send));
+
+ return 0;
+}
+
+static int nbd_dbg_tasks_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, nbd_dbg_tasks_show, inode->i_private);
+}
+
+static const struct file_operations nbd_dbg_tasks_ops = {
+ .open = nbd_dbg_tasks_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+static int nbd_dbg_flags_show(struct seq_file *s, void *unused)
+{
+ struct nbd_device *nbd = s->private;
+ u32 flags = nbd->flags;
+
+ seq_printf(s, "Hex: 0x%08x\n\n", flags);
+
+ seq_puts(s, "Known flags:\n");
+
+ if (flags & NBD_FLAG_HAS_FLAGS)
+ seq_puts(s, "NBD_FLAG_HAS_FLAGS\n");
+ if (flags & NBD_FLAG_READ_ONLY)
+ seq_puts(s, "NBD_FLAG_READ_ONLY\n");
+ if (flags & NBD_FLAG_SEND_FLUSH)
+ seq_puts(s, "NBD_FLAG_SEND_FLUSH\n");
+ if (flags & NBD_FLAG_SEND_TRIM)
+ seq_puts(s, "NBD_FLAG_SEND_TRIM\n");
+
+ return 0;
+}
+
+static int nbd_dbg_flags_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, nbd_dbg_flags_show, inode->i_private);
+}
+
+static const struct file_operations nbd_dbg_flags_ops = {
+ .open = nbd_dbg_flags_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+static int nbd_dev_dbg_init(struct nbd_device *nbd)
+{
+ struct dentry *dir;
+ struct dentry *f;
+
+ dir = debugfs_create_dir(nbd_name(nbd), nbd_dbg_dir);
+ if (IS_ERR_OR_NULL(dir)) {
+ dev_err(nbd_to_dev(nbd), "Failed to create debugfs dir for '%s' (%ld)\n",
+ nbd_name(nbd), PTR_ERR(dir));
+ return PTR_ERR(dir);
+ }
+ nbd->dbg_dir = dir;
+
+ f = debugfs_create_file("tasks", 0444, dir, nbd, &nbd_dbg_tasks_ops);
+ if (IS_ERR_OR_NULL(f)) {
+ dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'tasks', %ld\n",
+ PTR_ERR(f));
+ return PTR_ERR(f);
+ }
+
+ f = debugfs_create_u64("size_bytes", 0444, dir, &nbd->bytesize);
+ if (IS_ERR_OR_NULL(f)) {
+ dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'size_bytes', %ld\n",
+ PTR_ERR(f));
+ return PTR_ERR(f);
+ }
+
+ f = debugfs_create_u32("timeout", 0444, dir, &nbd->xmit_timeout);
+ if (IS_ERR_OR_NULL(f)) {
+ dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'timeout', %ld\n",
+ PTR_ERR(f));
+ return PTR_ERR(f);
+ }
+
+ f = debugfs_create_u32("blocksize", 0444, dir, &nbd->blksize);
+ if (IS_ERR_OR_NULL(f)) {
+ dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'blocksize', %ld\n",
+ PTR_ERR(f));
+ return PTR_ERR(f);
+ }
+
+ f = debugfs_create_file("flags", 0444, dir, &nbd, &nbd_dbg_flags_ops);
+ if (IS_ERR_OR_NULL(f)) {
+ dev_err(nbd_to_dev(nbd), "Failed to create debugfs file 'flags', %ld\n",
+ PTR_ERR(f));
+ return PTR_ERR(f);
+ }
+
+ return 0;
+}
+
+static void nbd_dev_dbg_close(struct nbd_device *nbd)
+{
+ debugfs_remove_recursive(nbd->dbg_dir);
+}
+
+static int nbd_dbg_init(void)
+{
+ struct dentry *dbg_dir;
+
+ dbg_dir = debugfs_create_dir("nbd", NULL);
+ if (IS_ERR(dbg_dir))
+ return PTR_ERR(dbg_dir);
+
+ nbd_dbg_dir = dbg_dir;
+
+ return 0;
+}
+
+static void nbd_dbg_close(void)
+{
+ debugfs_remove_recursive(nbd_dbg_dir);
+}
+
+#else /* IS_ENABLED(CONFIG_DEBUG_FS) */
+
+static int nbd_dev_dbg_init(struct nbd_device *nbd)
+{
+ return 0;
+}
+
+static void nbd_dev_dbg_close(struct nbd_device *nbd)
+{
+}
+
+static int nbd_dbg_init(void)
+{
+ return 0;
+}
+
+static void nbd_dbg_close(void)
+{
+}
+
+#endif
+
+/*
+ * And here should be modules and kernel interface
+ * (Just smiley confuses emacs :-)
+ */
+
+static int __init nbd_init(void)
+{
+ int err = -ENOMEM;
+ int i;
+ int part_shift;
+
+ BUILD_BUG_ON(sizeof(struct nbd_request) != 28);
+
+ if (max_part < 0) {
+ printk(KERN_ERR "nbd: max_part must be >= 0\n");
+ return -EINVAL;
+ }
+
+ part_shift = 0;
+ if (max_part > 0) {
+ part_shift = fls(max_part);
+
+ /*
+ * Adjust max_part according to part_shift as it is exported
+ * to user space so that user can know the max number of
+ * partition kernel should be able to manage.
+ *
+ * Note that -1 is required because partition 0 is reserved
+ * for the whole disk.
+ */
+ max_part = (1UL << part_shift) - 1;
+ }
+
+ if ((1UL << part_shift) > DISK_MAX_PARTS)
+ return -EINVAL;
+
+ if (nbds_max > 1UL << (MINORBITS - part_shift))
+ return -EINVAL;
+
+ nbd_dev = kcalloc(nbds_max, sizeof(*nbd_dev), GFP_KERNEL);
+ if (!nbd_dev)
+ return -ENOMEM;
+
+ for (i = 0; i < nbds_max; i++) {
+ struct gendisk *disk = alloc_disk(1 << part_shift);
+ if (!disk)
+ goto out;
+ nbd_dev[i].disk = disk;
+ /*
+ * The new linux 2.5 block layer implementation requires
+ * every gendisk to have its very own request_queue struct.
+ * These structs are big so we dynamically allocate them.
+ */
+ disk->queue = blk_init_queue(nbd_request_handler, &nbd_lock);
+ if (!disk->queue) {
+ put_disk(disk);
+ goto out;
+ }
+ /*
+ * Tell the block layer that we are not a rotational device
+ */
+ queue_flag_set_unlocked(QUEUE_FLAG_NONROT, disk->queue);
+ queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, disk->queue);
+ disk->queue->limits.discard_granularity = 512;
+ blk_queue_max_discard_sectors(disk->queue, UINT_MAX);
+ disk->queue->limits.discard_zeroes_data = 0;
+ blk_queue_max_hw_sectors(disk->queue, 65536);
+ disk->queue->limits.max_sectors = 256;
+ }
+
+ if (register_blkdev(NBD_MAJOR, "nbd")) {
+ err = -EIO;
+ goto out;
+ }
+
+ printk(KERN_INFO "nbd: registered device at major %d\n", NBD_MAJOR);
+
+ nbd_dbg_init();
+
+ for (i = 0; i < nbds_max; i++) {
+ struct gendisk *disk = nbd_dev[i].disk;
+ nbd_dev[i].magic = NBD_MAGIC;
+ INIT_LIST_HEAD(&nbd_dev[i].waiting_queue);
+ spin_lock_init(&nbd_dev[i].queue_lock);
+ spin_lock_init(&nbd_dev[i].tasks_lock);
+ INIT_LIST_HEAD(&nbd_dev[i].queue_head);
+ mutex_init(&nbd_dev[i].tx_lock);
+ init_timer(&nbd_dev[i].timeout_timer);
+ nbd_dev[i].timeout_timer.function = nbd_xmit_timeout;
+ nbd_dev[i].timeout_timer.data = (unsigned long)&nbd_dev[i];
+ init_waitqueue_head(&nbd_dev[i].active_wq);
+ init_waitqueue_head(&nbd_dev[i].waiting_wq);
+ nbd_dev[i].blksize = 1024;
+ nbd_dev[i].bytesize = 0;
+ disk->major = NBD_MAJOR;
+ disk->first_minor = i << part_shift;
+ disk->fops = &nbd_fops;
+ disk->private_data = &nbd_dev[i];
+ sprintf(disk->disk_name, "nbd%d", i);
+ set_capacity(disk, 0);
+ add_disk(disk);
+ }
+
+ return 0;
+out:
+ while (i--) {
+ blk_cleanup_queue(nbd_dev[i].disk->queue);
+ put_disk(nbd_dev[i].disk);
+ }
+ kfree(nbd_dev);
+ return err;
+}
+
+static void __exit nbd_cleanup(void)
+{
+ int i;
+
+ nbd_dbg_close();
+
+ for (i = 0; i < nbds_max; i++) {
+ struct gendisk *disk = nbd_dev[i].disk;
+ nbd_dev[i].magic = 0;
+ if (disk) {
+ del_gendisk(disk);
+ blk_cleanup_queue(disk->queue);
+ put_disk(disk);
+ }
+ }
+ unregister_blkdev(NBD_MAJOR, "nbd");
+ kfree(nbd_dev);
+ printk(KERN_INFO "nbd: unregistered device at major %d\n", NBD_MAJOR);
+}
+
+module_init(nbd_init);
+module_exit(nbd_cleanup);
+
+MODULE_DESCRIPTION("Network Block Device");
+MODULE_LICENSE("GPL");
+
+module_param(nbds_max, int, 0444);
+MODULE_PARM_DESC(nbds_max, "number of network block devices to initialize (default: 16)");
+module_param(max_part, int, 0444);
+MODULE_PARM_DESC(max_part, "number of partitions per device (default: 0)");
diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.ko b/builder/dnbd3-rootfs/binaries/nbd/nbd.ko
new file mode 100644
index 00000000..4829b5b6
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/nbd.ko
Binary files differ
diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c b/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c
new file mode 100644
index 00000000..8e9bffe6
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.c
@@ -0,0 +1,105 @@
+#include <linux/module.h>
+#include <linux/vermagic.h>
+#include <linux/compiler.h>
+
+MODULE_INFO(vermagic, VERMAGIC_STRING);
+
+__visible struct module __this_module
+__attribute__((section(".gnu.linkonce.this_module"))) = {
+ .name = KBUILD_MODNAME,
+ .init = init_module,
+#ifdef CONFIG_MODULE_UNLOAD
+ .exit = cleanup_module,
+#endif
+ .arch = MODULE_ARCH_INIT,
+};
+
+static const struct modversion_info ____versions[]
+__used
+__attribute__((section("__versions"))) = {
+ { 0x6455f54, __VMLINUX_SYMBOL_STR(module_layout) },
+ { 0x50c7d0f8, __VMLINUX_SYMBOL_STR(single_release) },
+ { 0x950ca83f, __VMLINUX_SYMBOL_STR(seq_read) },
+ { 0xef9b791f, __VMLINUX_SYMBOL_STR(seq_lseek) },
+ { 0x5538af9, __VMLINUX_SYMBOL_STR(param_ops_int) },
+ { 0xb5a459dc, __VMLINUX_SYMBOL_STR(unregister_blkdev) },
+ { 0x1b9e8318, __VMLINUX_SYMBOL_STR(del_gendisk) },
+ { 0x37a0cba, __VMLINUX_SYMBOL_STR(kfree) },
+ { 0x981936b7, __VMLINUX_SYMBOL_STR(blk_cleanup_queue) },
+ { 0x73107d7d, __VMLINUX_SYMBOL_STR(add_disk) },
+ { 0x9e88526, __VMLINUX_SYMBOL_STR(__init_waitqueue_head) },
+ { 0x9580deb, __VMLINUX_SYMBOL_STR(init_timer_key) },
+ { 0x69436492, __VMLINUX_SYMBOL_STR(__mutex_init) },
+ { 0x71a50dbc, __VMLINUX_SYMBOL_STR(register_blkdev) },
+ { 0x1ecdaab, __VMLINUX_SYMBOL_STR(blk_queue_max_hw_sectors) },
+ { 0x1a67801d, __VMLINUX_SYMBOL_STR(blk_queue_max_discard_sectors) },
+ { 0x86a65424, __VMLINUX_SYMBOL_STR(put_disk) },
+ { 0x89897b2, __VMLINUX_SYMBOL_STR(blk_init_queue) },
+ { 0xb1f77288, __VMLINUX_SYMBOL_STR(alloc_disk) },
+ { 0xd2b09ce5, __VMLINUX_SYMBOL_STR(__kmalloc) },
+ { 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) },
+ { 0xc6cbbc89, __VMLINUX_SYMBOL_STR(capable) },
+ { 0x98402f5a, __VMLINUX_SYMBOL_STR(blkdev_reread_part) },
+ { 0xee59790e, __VMLINUX_SYMBOL_STR(set_device_ro) },
+ { 0xae71b343, __VMLINUX_SYMBOL_STR(kthread_stop) },
+ { 0xfd67e92, __VMLINUX_SYMBOL_STR(debugfs_remove_recursive) },
+ { 0xae5350d, __VMLINUX_SYMBOL_STR(device_remove_file) },
+ { 0xb43b11d2, __VMLINUX_SYMBOL_STR(device_create_file) },
+ { 0xbe49dab0, __VMLINUX_SYMBOL_STR(sk_set_memalloc) },
+ { 0x88c48e5a, __VMLINUX_SYMBOL_STR(debugfs_create_u32) },
+ { 0xab6db40b, __VMLINUX_SYMBOL_STR(debugfs_create_u64) },
+ { 0x2fff7016, __VMLINUX_SYMBOL_STR(debugfs_create_file) },
+ { 0xe09664fa, __VMLINUX_SYMBOL_STR(debugfs_create_dir) },
+ { 0x6c4cedbe, __VMLINUX_SYMBOL_STR(wake_up_process) },
+ { 0x98f4d672, __VMLINUX_SYMBOL_STR(kthread_create_on_node) },
+ { 0x2141fd89, __VMLINUX_SYMBOL_STR(blk_queue_flush) },
+ { 0x2f43d7d4, __VMLINUX_SYMBOL_STR(blk_rq_init) },
+ { 0xdcd71098, __VMLINUX_SYMBOL_STR(fsync_bdev) },
+ { 0x3ab93be1, __VMLINUX_SYMBOL_STR(set_blocksize) },
+ { 0xd52ba2c0, __VMLINUX_SYMBOL_STR(_dev_info) },
+ { 0x58744728, __VMLINUX_SYMBOL_STR(fput) },
+ { 0x94cc0370, __VMLINUX_SYMBOL_STR(kill_bdev) },
+ { 0x4ee1e3f, __VMLINUX_SYMBOL_STR(sockfd_lookup) },
+ { 0xc6a83d75, __VMLINUX_SYMBOL_STR(blk_fetch_request) },
+ { 0xc58a93cf, __VMLINUX_SYMBOL_STR(dequeue_signal) },
+ { 0xa6bbd805, __VMLINUX_SYMBOL_STR(__wake_up) },
+ { 0xb4f0243e, __VMLINUX_SYMBOL_STR(mutex_unlock) },
+ { 0xc23bebb2, __VMLINUX_SYMBOL_STR(mutex_lock) },
+ { 0xbfe6f427, __VMLINUX_SYMBOL_STR(_raw_spin_unlock_irq) },
+ { 0xe5815f8a, __VMLINUX_SYMBOL_STR(_raw_spin_lock_irq) },
+ { 0xb3f7646e, __VMLINUX_SYMBOL_STR(kthread_should_stop) },
+ { 0xb2fd3ea5, __VMLINUX_SYMBOL_STR(set_user_nice) },
+ { 0xef370d73, __VMLINUX_SYMBOL_STR(__blk_end_request_all) },
+ { 0x1916e38c, __VMLINUX_SYMBOL_STR(_raw_spin_unlock_irqrestore) },
+ { 0x4aafc56b, __VMLINUX_SYMBOL_STR(force_sig) },
+ { 0x680ec266, __VMLINUX_SYMBOL_STR(_raw_spin_lock_irqsave) },
+ { 0x706d051c, __VMLINUX_SYMBOL_STR(del_timer_sync) },
+ { 0xa9064ecb, __VMLINUX_SYMBOL_STR(kernel_sock_shutdown) },
+ { 0xe3fbaa2e, __VMLINUX_SYMBOL_STR(dev_warn) },
+ { 0x2f7f274e, __VMLINUX_SYMBOL_STR(seq_puts) },
+ { 0xd1f58462, __VMLINUX_SYMBOL_STR(seq_printf) },
+ { 0xe1e12065, __VMLINUX_SYMBOL_STR(single_open) },
+ { 0x1e047854, __VMLINUX_SYMBOL_STR(warn_slowpath_fmt) },
+ { 0x2ea92197, __VMLINUX_SYMBOL_STR(__dynamic_dev_dbg) },
+ { 0x30ff9767, __VMLINUX_SYMBOL_STR(dev_err) },
+ { 0x16e5c2a, __VMLINUX_SYMBOL_STR(mod_timer) },
+ { 0x7d11c268, __VMLINUX_SYMBOL_STR(jiffies) },
+ { 0x722e2a29, __VMLINUX_SYMBOL_STR(kernel_recvmsg) },
+ { 0x551b9a0e, __VMLINUX_SYMBOL_STR(kernel_sendmsg) },
+ { 0x6a5fa363, __VMLINUX_SYMBOL_STR(sigprocmask) },
+ { 0x97bb6e16, __VMLINUX_SYMBOL_STR(current_task) },
+ { 0xdb7305a1, __VMLINUX_SYMBOL_STR(__stack_chk_fail) },
+ { 0xf08242c2, __VMLINUX_SYMBOL_STR(finish_wait) },
+ { 0x2207a57f, __VMLINUX_SYMBOL_STR(prepare_to_wait_event) },
+ { 0x1000e51, __VMLINUX_SYMBOL_STR(schedule) },
+ { 0xdae80100, __VMLINUX_SYMBOL_STR(_raw_spin_unlock) },
+ { 0xe259ae9e, __VMLINUX_SYMBOL_STR(_raw_spin_lock) },
+ { 0x91715312, __VMLINUX_SYMBOL_STR(sprintf) },
+ { 0xbdfb6dbb, __VMLINUX_SYMBOL_STR(__fentry__) },
+};
+
+static const char __module_depends[]
+__used
+__attribute__((section(".modinfo"))) =
+"depends=";
+
diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.o b/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.o
new file mode 100644
index 00000000..988957a2
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/nbd.mod.o
Binary files differ
diff --git a/builder/dnbd3-rootfs/binaries/nbd/nbd.o b/builder/dnbd3-rootfs/binaries/nbd/nbd.o
new file mode 100644
index 00000000..9da8e4d6
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/nbd/nbd.o
Binary files differ
diff --git a/builder/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c b/builder/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c
new file mode 100644
index 00000000..8f0fc108
--- /dev/null
+++ b/builder/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c
@@ -0,0 +1,33 @@
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+void print_array(int argc, char *argv[]) {
+ // Helper function to print given array with given length.
+ int i = 0;
+ int j = 0;
+ for (i = 0; i < argc; i ++) {
+ j = 0;
+ while(argv[i][j] != '\0')
+ printf("%c", argv[i][j++]);
+ printf(" ");
+ }
+ printf("\n");
+}
+int main(int argc, char *argv[]) {
+ int count;
+ // Last item acts as null pointer.
+ char **copy = calloc(sizeof(char *), argc);
+ // Slice first given command line argument.
+ for (count = 0; count < argc - 1; count++)
+ copy[count] = strdup(argv[count + 1]);
+ // Adding systemd indicator to preserve wrapped process during changing
+ // root filesystem. We mark wrapper and child process.
+ argv[0][0] = '@';
+ copy[0][0] = '@';
+ if (-1 == execvp(argv[1], copy)) {
+ perror("Executing child process failed.");
+ return -1;
+ }
+}
diff --git a/builder/dnbd3-rootfs/debugging-tools/endless b/builder/dnbd3-rootfs/debugging-tools/endless
new file mode 100755
index 00000000..de7a8c0a
--- /dev/null
+++ b/builder/dnbd3-rootfs/debugging-tools/endless
Binary files differ
diff --git a/builder/dnbd3-rootfs/debugging-tools/endless.c b/builder/dnbd3-rootfs/debugging-tools/endless.c
new file mode 100644
index 00000000..22c9bc50
--- /dev/null
+++ b/builder/dnbd3-rootfs/debugging-tools/endless.c
@@ -0,0 +1,10 @@
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+int main(int argc, char *argv[]) {
+ // Provides a dummy worker.
+ while (1)
+ sleep(999999999);
+}
diff --git a/builder/dnbd3-rootfs/debugging-tools/network.functions b/builder/dnbd3-rootfs/debugging-tools/network.functions
new file mode 100644
index 00000000..89ca5a20
--- /dev/null
+++ b/builder/dnbd3-rootfs/debugging-tools/network.functions
@@ -0,0 +1,23 @@
+wait_for_iface() {
+ local DEVICE=$1
+ local TIMEOUT=10
+ echo -n "Waiting for interface $DEVICE: "
+ # Some systems don't have operstate. Seems to be hardware dependent
+ [ ! -e "/sys/class/net/${DEVICE}/operstate" ] && usleep 10000
+ if [ -e "/sys/class/net/${DEVICE}/operstate" ]; then
+ while true; do
+ # check linkstate
+ [ "x$(cat "/sys/class/net/${DEVICE}/operstate")" == "xup" ] && break
+ TIMEOUT=$(( $TIMEOUT - 1 )) # don't wait forever, the pcnet iface of vmware will never be "up" although it's working
+ [ "$TIMEOUT" -le 0 ] && break
+ # else
+ echo -n "."
+ usleep 500000
+ done
+ else
+ # we really don't have a operstate .. then just wait a sec and hope for the best.
+ sleep 1
+ fi
+ echo ".$(cat "/sys/class/net/${DEVICE}/operstate" 2>/dev/null)"
+}
+true
diff --git a/builder/dnbd3-rootfs/debugging-tools/setup-network.sh b/builder/dnbd3-rootfs/debugging-tools/setup-network.sh
new file mode 100644
index 00000000..3b32a68c
--- /dev/null
+++ b/builder/dnbd3-rootfs/debugging-tools/setup-network.sh
@@ -0,0 +1,84 @@
+#!/bin/bash
+
+echo "Setting up network..."
+
+echo "Main MAC address is '$MAC'"
+
+# setup network
+source /inc/network.functions
+
+# set up loopback networking
+echo "Setting up loopback"
+ip link set dev lo up 2>/dev/null
+ip addr add 127.0.0.1/8 dev lo 2>/dev/null
+
+echo "Setting up bridge"
+BRIDGE="br0"
+
+# Following was supposed to prevent scripts from getting confused by multiple interfaces with same MAC - does not work though
+## Flip mac address of original interface - this var is not local so init sees the changes too
+#MAC="$(echo "$MAC" | awk -F ':' '{printf $1 ":" $2 ":" $5 ":" $3 ":" $6 ":" $4}')"
+#ip link set addr "$MAC" "$SLAVE"
+
+mkdir -p "${FUTURE_ROOT}/etc/udev/rules.d"
+
+#IP_OUT=$(ip a | sed -r ':a;N;$!ba;s/: ([a-z0-9]+): /####\1####/g;s/ether ([a-f0-9:]+) /####\1####/g'| grep -E -o '####[^ ]+####' | sed 's/#//g' | grep -B 1 ':')
+IP_OUT=$(ip a | grep -B 1 "/ether" | sed -r '/^--$/d;$!N;s#^[0-9]+: ([a-z0-9\.:]+): .*?/ether ([0-9a-fA-Z:]+) .*$#\1==\2#')
+
+if ! echo "$IP_OUT" | grep -q -- "$MAC"; then
+ drop_shell "Boot interface not found in interface list. NIC driver missing?"
+fi
+
+for LINE in $IP_OUT; do
+ IFACE=$(echo "$LINE" | awk -F '==' '{printf $1}')
+ IFMAC=$(echo "$LINE" | awk -F '==' '{printf $2}' | tr '[A-Z]' '[a-z]') # udev requires mac addesses to be lowercase (a-f), see http://www.debianhelp.co.uk/udev.htm
+ echo "${IFACE} = ${IFMAC}"
+
+ if [ "x$IFMAC" == "x$MAC" ]; then
+ brctl addbr "$BRIDGE" || drop_shell "Could not create bridge $BRIDGE"
+ brctl stp "$BRIDGE" 0
+ brctl setfd "$BRIDGE" 0.000000000001
+ ip link set addr "$IFMAC" "$BRIDGE" || drop_shell "Could not set mac of $BRIDGE"
+ ip link set dev "$IFACE" up
+ wait_for_iface "$IFACE"
+ brctl addif "$BRIDGE" "$IFACE" || drop_shell "Could not add $IFACE to $BRIDGE"
+
+ # save our variables for retry on fail
+ echo "IFACE=$IFACE" > /run/network.conf
+
+ # analyze ip information from the kernel command line and put parts
+ # of it into several variables
+ if [ -n "$CLIENTIP" ] ; then
+ # set static ip address
+ ip addr add "$CLIENTIP/$(ipcalc -s -p "$CLIENTIP" "$SUBNET_MASK" | sed "s/.*=//")" broadcast "$BROADCAST_ADDRESS" dev "$BRIDGE"
+ ip link set dev "$BRIDGE" up
+ [ -n "$GATEWAY" ] && ip route add default via "$GATEWAY" dev "$BRIDGE"
+ else
+ NOIPYET="yes"
+ fi
+ # Ignore this device later on when systemd handles network interfaces (see hacked 99-systemd.rules in systemd data dir)
+ echo "SUBSYSTEM==\"net\", ACTION==\"add\", KERNEL==\"eth*\", ATTR{address}==\"$IFMAC\", TAG+=\"openslxignore\"" >> "${FUTURE_ROOT}/etc/udev/rules.d/01-ignore-boot-interface.rules"
+ fi
+ # youdev
+ echo "SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"$IFMAC\", ATTR{dev_id}==\"0x0\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"$IFACE\"" >> "${FUTURE_ROOT}/etc/udev/rules.d/70-net-boot-nic-name.rules"
+ # continue...
+ IFACE=""
+done
+
+wait_for_iface "$BRIDGE"
+
+# udhcpc
+PARAM=
+if [ -n "$CLIENTIP" ]; then
+ PARAM="-r $CLIENTIP"
+fi
+echo -n "$CLIENTIP" > "/run/firstip"
+echo -n "$GATEWAY" > "/run/firstgw"
+
+# save our variables for retry on fail ff.
+echo "CLIENTIP=$CLIENTIP" >> /run/network.conf
+echo "GATEWAY=$GATEWAY" >> /run/network.conf
+echo "BRIDGE=$BRIDGE" >> /run/network.conf
+
+udhcpc $PARAM -O domain -O nissrv -O nisdomain -O wpad -O search -t 5 -T 2 -s "/inc/udhcpc-trigger" -f -n -q -i "$BRIDGE"
+# udhcpc return value will be return value of this script
diff --git a/builder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh b/builder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh
new file mode 100755
index 00000000..f779aa7a
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/cmdline/enable-sysrq.sh
@@ -0,0 +1,2 @@
+# enables magic sysrq keys
+echo 1 > /proc/sys/kernel/sysrq
diff --git a/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh b/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh
new file mode 100755
index 00000000..9f617b09
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh
@@ -0,0 +1,36 @@
+command -v warn >/dev/null || . /lib/dracut-lib.sh
+
+# fakes the cmdline to fix the ip parsing in darcut's net-lib.sh
+[ -d /fake ] || mkdir /fake
+
+# need to be a tmpfs for the hack to work
+mount -t tmpfs tmpfs /fake
+
+for parameter in $(getargs ip=); do
+ local temp="$parameter:"
+ set --
+ while [ -n "$temp" ]; do
+ set -- "$@" "${temp%%:*}"
+ temp=${temp#*:}
+ done
+
+ [ -n "$1" ] && ip=$1
+ [ -n "$2" ] && server_ip=$2
+ [ -n "$3" ] && gateway_ip=$3
+ [ -n "$4" ] && net_mask=$4
+
+ warn "PXE given net configuration: ip: $ip server_ip: $server_ip gateway_ip: $gateway_ip net_mask: $net_mask"
+ local final_dracut_ip_config="$ip::$gateway_ip:$net_mask:hiwi-test-28:eno1:none"
+ warn "Final dracut ip config: $final_dracut_ip_config"
+ sed --regexp-extended "s/ip=[^ ]*/ip=$final_dracut_ip_config/g" /proc/cmdline > /fake/cmdline
+done
+
+
+# bind mount it. Can we trust mount return codes here?
+# # if so, we should check what we get in $?
+mount -o bind /fake/cmdline /proc/cmdline
+
+# check if it worked
+if ! grep 'hiwi-test-28:eno1:none' /proc/cmdline; then
+ warn 'Haxing cmdline did not work :( sad pandaz...'
+fi
diff --git a/builder/dnbd3-rootfs/hooks/cmdline/set-dracut-environment-variables.sh b/builder/dnbd3-rootfs/hooks/cmdline/set-dracut-environment-variables.sh
new file mode 100755
index 00000000..6deeb78f
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/cmdline/set-dracut-environment-variables.sh
@@ -0,0 +1,5 @@
+# set rootok and root as dracut expects them to be set by
+# the module preparing the root filesystem.
+
+rootok=1
+root=block:/dev/devicemapper/root
diff --git a/builder/dnbd3-rootfs/hooks/mount/mount-root-device.sh b/builder/dnbd3-rootfs/hooks/mount/mount-root-device.sh
new file mode 100755
index 00000000..f0d48174
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/mount/mount-root-device.sh
@@ -0,0 +1 @@
+mount /dev/mapper/root "$NEWROOT"
diff --git a/builder/dnbd3-rootfs/hooks/pre-mount/fetch-config.sh b/builder/dnbd3-rootfs/hooks/pre-mount/fetch-config.sh
new file mode 100755
index 00000000..a90481c8
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/pre-mount/fetch-config.sh
@@ -0,0 +1,39 @@
+# load dracut functions
+command -v getarg >/dev/null || . /lib/dracut-lib.sh
+
+# read SLX_SERVER and SLX_BASE from the kernel command line
+SLX_SERVER=$(getarg slxsrv)
+SLX_BASE=$(getarg slxbase)
+SLX_CONFIG_DIR="/opt/openslx"
+SLX_CONFIG_FILE="/opt/openslx/config"
+
+if [ -z "$SLX_SERVER" ]; then
+ warn "No 'slxsrv' parameter found in the kernel command line!"
+ warn "Skipping OpenSLX configuration..."
+ return 1
+fi
+if [ -z "$SLX_BASE" ]; then
+ warn "No 'slxbase' parameter found in the kernel command line!"
+ warn "Skipping OpenSLX configuration..."
+ return 1
+fi
+
+info "Getting configuration from OPENSLX-Server..."
+WGET="$(busybox which wget)"
+if [ -z $WGET ]; then
+ # do nothing
+ warn "'wget' not found. Skipping openslx configuration..."
+ return 1
+fi
+
+# ok then we are ready to download the config
+mkdir -p "${SLX_CONFIG_DIR}"
+$WGET -T 5 -q "http://${SLX_SERVER}/${SLX_BASE}/config" -O "${SLX_CONFIG_FILE}"
+RET="$?"
+if [ $RET -ne 0 ]; then
+ warn "Downloading OpenSLX configuration from ${SLX_SERVER}/${SLX_BASE} failed: $RET"
+ emergency_shell -n "$0"
+ return 1
+else
+ return 0
+fi
diff --git a/builder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh b/builder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh
new file mode 100755
index 00000000..d70492bf
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/pre-mount/mount-qcow.sh
@@ -0,0 +1,49 @@
+###############################################################################
+# CHECKS
+#
+
+SETUP_ROOTFS_SCRIPT="/sbin/setup-qcow2"
+
+if [ ! -e "${SETUP_ROOTFS_SCRIPT}" ]; then
+ warn "No such file of directory: ${SETUP_ROOTFS_SCRIPT}"
+ emergency_shell -n "Error in $0"
+ return 1
+fi
+
+if [ ! -x "${SETUP_ROOTFS_SCRIPT}" ]; then
+ warn "Cannot execute: ${SETUP_ROOTFS_SCRIPT}"
+ emergency_shell -n "Error in $0"
+ return 1
+fi
+
+#
+# END CHECKS
+###############################################################################
+
+###############################################################################
+# MAIN CODE
+#
+
+# ok, let's source the setup script
+if ! . ${SETUP_ROOTFS_SCRIPT} ; then
+ warn "Could not source: ${SETUP_ROOTFS_SCRIPT}"
+ emergency_shell -n "Error in $0"
+ return 1
+fi
+
+# just go over the functions in the right order ;-)
+for fun in connect_dnbd3 create_qcow export_qcow connect_qcow; do
+ if ! $fun; then
+ # something failed, drop a shell for debugging
+ warn "'$fun' failed with: $?"
+ emergency_shell -n "Error in $fun"
+ return 1
+ fi
+done
+
+# all good, we are done
+return 0
+
+#
+# END MAIN CODE
+###############################################################################
diff --git a/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh
new file mode 100755
index 00000000..8b5ea48e
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh
@@ -0,0 +1,42 @@
+function create_partition_via_offset() {
+ local device="$1"
+ local nameOrUUID="$2"
+ local loopDevice=$(losetup -f)
+
+ local sectorSize=$(blockdev --getbsz $device)
+ local partitionInfo=$(partx --raw --noheadings --output START,NAME,UUID /dev/nbd0 2>/dev/null| grep $nameOrUUID)
+ local offsetSectors=$(echo $partitionInfo | cut -d' ' -f1)
+ if [ -z "$offsetSectors" ]; then
+ warn "could not find partition with label/uuid '$nameOrUUID' on device $device"
+ return 1
+ fi
+ #warn $(($offsetSectors*512)) # could overflow on 32bit systems
+ local offsetBytes=$(echo $| awk -v x=$offsetSectors -v y=$sectorSize '{print x * y}')
+
+ # test if mount works directly (problem with btrfs device id)
+ #mount -v -o loop,offset=$offsetBytes $device $mountPoint
+ losetup -v -o $offsetBytes $loopDevice $device
+ echo $loopDevice
+}
+
+# Close previous connections to be able to run this script many times.
+dnbd3-client --device /dev/dnbd0 --close && \
+dnbd3-client --host gateway --image archLinux.qcow2 --device /dev/dnbd0 && \
+qemu-nbd --connect=/dev/nbd0 /dev/dnbd0 --read-only && \
+local read_only_partition="$(create_partition_via_offset /dev/nbd0 system)" && \
+# Make read-only partition writable.
+# TODO implement persistent available indicator.
+if true; then
+ local writable_device="/dev/ram0" && \
+ mknod --mode 660 "$writable_device" b 1 1 && \
+ chown root.disk "$writable_device"
+else
+ # Use next free loop device.
+ local writable_device="$(losetup -f)" && \
+ dd if=/dev/zero of=persistent_storage.img bs=1k count=1000 && \
+ losetup "$writable_device" persistent_storage.img
+fi
+local size="$(blockdev --getsz "$read_only_partition")" && \
+local writable_partition_name="root" && \
+dmsetup create "$writable_partition_name" --table \
+ "0 $partion_size snapshot $read_only_partition $writable_device N 1"
diff --git a/builder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh b/builder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh
new file mode 100755
index 00000000..3e702064
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/pre-pivot/mount-tmp.sh
@@ -0,0 +1,40 @@
+# This script only checks if we found a usable partition for the
+# future /tmp. The discovery of that partition is done by udev during
+# the initqueue. If a valid partition is found (either GPT with the label
+# OPENSLX_TMP or MBR with the type 0x44) its path will be written to
+# /tmp/openslx.tmpdisk
+OPENSLX_TMP_DISK_FLAG="/tmp/openslx.disk.tmp"
+
+if [ ! -e "$OPENSLX_TMP_DISK_FLAG" ]; then
+ warn "'$OPENSLX_TMP_DISK_FLAG' not found!"
+ warn "Systemd will manage $NEWROOT/tmp on its own."
+ # no partition for the future /tmp found, just
+ # let systemd manage it then (probably a tmpfs)
+ return 1
+fi
+
+# in /tmp/openslx.disk.tmp is the name of the device
+# to mount as /tmp in the real system
+# meaning we need to mount it to /sysroot/tmp here.
+
+OPENSLX_TMP_DISK_DEV="$(cat $OPENSLX_TMP_DISK_FLAG)"
+
+# sanity check: is the content a block device?
+if [ ! -b "$OPENSLX_TMP_DISK_DEV" ]; then
+ warn "'$OPENSLX_TMP_DISK_DEV' appears not to be a block device!"
+ warn "Systemd will manage $NEWROOT/tmp on its own."
+ return 1
+fi
+
+# all good, keep on
+if ! mount -t auto "$OPENSLX_TMP_DISK_DEV" $NEWROOT/tmp; then
+ # something else went wrong :(
+ warn "Mounting '$OPENSLX_TMP_DISK_DEV' to '$NEWROOT/tmp' failed with: $!"
+ warn "Systemd will manage $NEWROOT/tmp on its own."
+ return 1
+fi
+
+# still here? mount worked wohoo
+# set permissions
+chmod a+rwxt $NEWROOT/tmp
+return 0
diff --git a/builder/dnbd3-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh b/builder/dnbd3-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh
new file mode 100755
index 00000000..29f9f210
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/pre-udev/load-custom-kernel-modules.sh
@@ -0,0 +1,32 @@
+# include dracut-lib.sh to use 'warn'
+command -v warn >/dev/null || . /lib/dracut-lib.sh
+
+NBD_MOD_PATH="/usr/lib/modules/current/extra/nbd.ko"
+DNBD3_MOD_PATH="/usr/lib/modules/current/extra/dnbd3.ko"
+
+# do we actually have our modules?
+if [ ! -e "${NBD_MOD_PATH}" ]; then
+ warn "No such file of directory: ${NBD_MOD_PATH}"
+ emergency_shell -n "Error in $0"
+ return 1
+fi
+if [ ! -e "${DNBD3_MOD_PATH}" ]; then
+ warn "No such file of directory: ${DNBD3_MOD_PATH}"
+ emergency_shell -n "Error in $0"
+ return 1
+fi
+
+# load the kernel modules for dnbd3 and nbd
+if ! insmod "${DNBD3_MOD_PATH}"; then
+ warn "Failed to load DNBD3 kernel module..."
+ emergency_shell -n "Error in $0"
+ return 1
+fi
+
+if ! insmod "${NBD_MOD_PATH}"; then
+ warn "Failed to load NBD kernel module..."
+ emergency_shell -n "Error in $0"
+ return 1
+fi
+
+return 0
diff --git a/builder/dnbd3-rootfs/hooks/pre-udev/setup-loopback-device.sh b/builder/dnbd3-rootfs/hooks/pre-udev/setup-loopback-device.sh
new file mode 100755
index 00000000..9103afd9
--- /dev/null
+++ b/builder/dnbd3-rootfs/hooks/pre-udev/setup-loopback-device.sh
@@ -0,0 +1 @@
+/sbin/initqueue --name ifup-lo --unique --onetime /sbin/ifup lo -m
diff --git a/builder/dnbd3-rootfs/module-setup.sh b/builder/dnbd3-rootfs/module-setup.sh
new file mode 100755
index 00000000..b9134871
--- /dev/null
+++ b/builder/dnbd3-rootfs/module-setup.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+
+source "$moddir/scripts/utils.sh"
+
+check() {
+ compile_nbd && \
+ compile_dnbd3 && \
+ compile_systemd_preserve_process_marker
+ return $?
+}
+
+depends() {
+ echo base network bash kernel-modules
+}
+
+installkernel() {
+ inst "$moddir/binaries/dnbd3/build/dnbd3.ko" \
+ /usr/lib/modules/current/extra/dnbd3.ko
+ inst "$moddir/binaries/nbd/nbd.ko" \
+ /usr/lib/modules/current/extra/nbd.ko
+
+ instmods ext4 btrfs
+}
+
+install() {
+
+ # region binaries
+
+ inst "$moddir/binaries/dnbd3/build/dnbd3-client" /usr/bin/dnbd3-client
+ inst "$moddir/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker" \
+ /usr/bin/systemd-preserve-process-marker
+
+ # endregion
+
+ # region hooks
+
+ inst_hook cmdline 00 "$moddir/hooks/cmdline/enable-sysrq.sh"
+ inst_hook cmdline 10 "$moddir/hooks/cmdline/prepare-network-kcl-parameter.sh"
+ inst_hook cmdline 90 "$moddir/hooks/cmdline/set-dracut-environment-variables.sh"
+
+ inst_hook pre-udev 00 "$moddir/hooks/pre-udev/load-custom-kernel-modules.sh"
+ inst_hook pre-udev 00 "$moddir/hooks/pre-udev/setup-loopback-device.sh"
+
+ # this is the configuration hook where the config stuff is wget'ed
+ # TODO
+ #inst_hook pre-mount 00 "$moddir/hooks/pre-mount/fetch-config.sh"
+ # this is the main hook where all the magic is triggered
+ #inst_hook pre-mount 10 "$moddir/hooks/pre-mount/mount-qcow.sh"
+
+ inst_hook pre-mount 10 "$moddir/hooks/pre-mount/prepare-root-partition.sh"
+
+ inst_hook mount 10 "$moddir/hooks/mount/mount-root-device.sh"
+
+ inst_hook pre-pivot 00 "$moddir/hooks/pre-pivot/mount-tmp.sh"
+
+ # endregion
+
+ ## TODO deprecated
+ ### SCRIPTS
+ # the main magic script containing all the functions needed
+ # to prepare the qcow2-based root filesystem
+ #inst "$moddir/scripts/setup-qcow2" /sbin/setup-qcow2
+ #
+ # the script triggered by udev upon finding the right partitions
+ #inst "$moddir/scripts/prepare-disks" /sbin/prepare-disks
+ ##
+ # udev rules detecting 44, 45, 46 partitions and running
+ # 'prepare-disks' to do then format/mount/use them
+ #inst "$moddir/udev/70-openslx-disk.rules" /etc/udev/rules.d/70-openslx-disk.rules
+ ##
+
+ # Debugging Uncomment this version if you need some useful debugging tools
+ # in your iniramfs.
+ inst_multiple lsblk ping ip ifconfig sshd htop tail head cat vim \
+ touch sed lsmod insmod qemu-img sleep route wget find lsof strace \
+ chroot switch_root pivot_root qemu-nbd mount nbd-client fdisk mkfs.xfs
+ # Production:
+ # inst_multiple insmod qemu-img qemu-nbd
+}
diff --git a/builder/dnbd3-rootfs/readme.md b/builder/dnbd3-rootfs/readme.md
new file mode 100644
index 00000000..9ad0f968
--- /dev/null
+++ b/builder/dnbd3-rootfs/readme.md
@@ -0,0 +1,472 @@
+# TODO --ommit npd
+# TODO Testmenue PW: t
+
+h1. Evaluation, dissection and modification of Linux remote boot
+
+h2. Inhalt
+
+{{toc}}
+
+#h2. Begriffe
+
+#* qcow - qemu copy-on-write
+#* stage3.1 initramfs
+#* stage4 finales System
+
+h2. Aufgabe
+
+Es wird ein Skript bzw. Dracut-Modul benötigt, dass ein initramfs basierend auf
+systemd baut. Das resultierende initramfs muss Netzwerk-Support bereitstellen,
+ein dnbd3 Blockdevice mounten können und einen "switch_root" auf das zuvor
+gemountete Dateisystem umsetzen. Das Framework sollte möglichst
+Distributionsunabhängig konstruiert sein. Es soll bereits vor dem
+"switch_root", also bevor das eigentliche Zielsystem im Root-Verzeichnis
+eingebunden werden systemd als init-System zum Einsatz kommen. Die Kernaufgabe
+eine initramfs ist es alle nötigen Anwendungen bereitzustellen, die benötigt
+werden, um dass finale Zielsystem einzubinden. In dieser konkreten
+Aufgabenstellung muss, dass initramfs ein nicht schreibbares Blockgerät
+eingebunden werden und eine schreibbare Zwischenshicht (Overlayfilesystem)
+zusätzlich eingebunden werden.
+
+h2. Möglicher Technologien für das Overlaykonzept
+
+* Dateibasierte Overlay-FS (Union-FS, Alternat-Union-FS, Overlay-FS)
+ - Funktioniert derzeit nicht auf jedem Zielsystem (Kernel)
+ - Nicht für den Linux-Kernel zertifiziert oder lässt sich nicht über das
+ Root-System legen.
+ - Bei wenigen Änderungen in einer großen Datei muss komplette Datei in
+ der schreibbaren Schicht gespeichert werden.
+* Blockorientierte Overlay-FS (Network-Block-Device, DNBD3, Qemu-Copy-On-Write-Image)
+ - NBD ist für den Linux-Kernel zertifiziert
+ - Weniger Netzwerkverkehr nötig, da nur geänderte Blöcke übertragen werden
+ müssen, statt ganze Dateien zu kopieren.
+ - DNBD3 hat Failover-Strategien, verzichtet auf komplexe Strategien zum
+ Schreiben in geänderte Blöcke über das Netzwerk
+ - Das verfügbare qcow2-Format bietet eine Technologie, um blockorientiert
+ Änderungen in einer zusätzlichen Dateisystemschicht zu speichern.
+
+h2. Zielablauf
+
+Der generelle Ablauf vor bzw. während des Ladens des initramfs und deren
+Minilinux-System:
+
+# Boot PXE
+> # Laden des initramfs images
+> # Laden des Kernels
+# Ausführen des iniramfs
+> # Ausführen von Systemd
+> > # Bereitstellen aller benötigten Dienste und Hardware (Netzwerk hochbringen)
+> > # Mounten des finalen Dateisystems als Wurzel
+> > # Wechsel (switch_root) in die finale Distribution
+> > # Starten / Weiterausführen von Systemd als Init-System
+
+h2. Benötigte Pakete zum bauen des initramfs
+
+> * dracut
+# TODO
+
+h2. Benötigte Pakete innerhalb des resultierenden initramfs
+
+> * systemd
+> * quemu-img
+> * quemu-nbd
+> * nbd-client
+> * dnbd3-client
+
+h2. Aufsetzen einer Test-Arbeitsumgebung für CentOS
+
+h3. CentOS7/ArchLinux/RedHat/Ubuntu + VirtualBox + VirtualBoxGuestAdditions
+
+Aufsetzen des *Dynamic Kernel Module Support*, um einfach neue VBox-Kernel-Module zu aktualisieren:
+
+> # Aktualisiere Paketdatenbank: @yum update@
+> # Intalliere C-Compiler: @yum install gcc@
+> # Lade erweitertes rpmforfe Repository: @wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm@
+> # Installiere Repository: @rpm -Uvh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm@
+> # Lade das DKMS-Paket: @wget ftp://rpmfind.net/linux/epel/5/x86_64/dkms-2.2.0.3-29.el5.noarch.rpm@
+> # Installiere DKMS-Paket: @yum localinstall dkms-2.2.0.3-25.el7.noarch.rpm --nogpgcheck@
+> # Aktiviere rpmforge Repository: @yum --enablerepo rpmforge install dkms@
+> # Installiere Entwicklertools zum bauen von Paketen: @yum groupinstall "Development Tools"@
+> # Installiere Metainformation zum Kernel: @yum install kernel-devel@
+
+Installieren der VirtualBox-GuestAddtion:
+
+> # Lege die VirtualBox-GuestAddition-CD ein.
+> # Mounte CD: @mount /dev/sr0 /mnt/ && cd /mnt/ && ./VBoxLinuxAdditions.run && reboot@
+
+Erstellen eines Testboot Eintrags für Grub2:
+
+> - Füge in ??/etc/grub.d/40_custom?? den folgenden Inhalt hinzu:
+
+<pre>
+menuentry 'test' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-6c06919a-389a-4a50-8c6b-b086e65db9b0' {
+ load_video
+ set gfxpayload=keep
+ insmod gzio
+ insmod part_msdos
+ insmod xfs
+ set root='hd0,msdos1'
+ if [ x$feature_platform_search_hint = xy ]; then
+ search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 4236333a-a808-4f6b-b4a6-d963f4a69a25
+ else
+ search --no-floppy --fs-uuid --set=root 4236333a-a808-4f6b-b4a6-d963f4a69a25
+ fi
+ linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=6c06919a-389a-4a50-8c6b-b086e65db9b0 ro rd.lvm.lv=centos/swap crashkernel=auto rd.lvm.lv=centos/root vconsole.font=latarcyrheb-sun16 vconsole.keymap=de rhgb quiet
+ initrd16 /initramfs-test.img
+}
+</pre>
+
+> - Füge neuen Menüeintrag in die automatisch generierte Grub2 Konfigurations2-Datei hinzu: @grub2-mkconfig -o /boot/grub2/grub.cfg@
+
+h2. Bauen eines Test-Initramfs
+
+Mache ein Backup vom aktuellen initamfs:
+@cp -p /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.BACKUP@
+
+Der folgende Befehl ersetzt das aktuelle Standart Initramfs mit dem neu
+gebauten und berücksichtigt dabei alle bisher editierten Dracut-Module in
+??/usr/lib/dracut/modules.d??. Die durchschnittliche Größe des resultierenden
+initramfs beträgt komprimiert: zwischen 11 und 16 MB.
+
+<pre><code class="bash">
+dracut --verbose --force /boot/initramfs-3.10.0-123.el7.x86_64.test.img \
+ 3.10.0-123.el7.x86_64
+</code></pre>
+
+h3. Konfiguration
+
+TODO
+
+# Configure "cmdline" from "Chapter 8. DRACUT.CMDLINE(7)" in virtualbox in "/boot/startup.sh" for uefi or in "/boot/grub2/grub.cfg" for grub2
+
+h2. Bauen eines minimalen individuellen Test-Initramfs
+
+<pre><code class="bash">
+dracut --verbose --hostonly --force
+ /boot/initramfs-3.10.0-123.el7.x86_64.test.img \
+ 3.10.0-123.el7.x86_64
+</code></pre>
+
+Die Option "hostonly" veranlasst Dracut dazu nur alle nötigen Abhängigkeiten
+für das aktuelle System in das resultierende Initramfs zu installieren.
+Andernfalls fügt dracut viele zusätzliche Treiber hinzu, die die Größe der
+resultierenden Datei erheblich vergrößern und damit größer wird als nötig.
+Die durchschnittliche Größe des resultierenden initramfs beträgt
+komprimiert: zwischen 11 und 16 MB.
+
+h2. Erstellen eines eigenen Dracut-Moduls
+
+Alle vorhanden Module befinden sich in ??/usr/lib/dracut/modules.d??.
+
+> # Erstelle ein neues Modul: @mkdir /usr/lib/dracut/modules.d/91test@
+> # Baue neues initramfs und achte darauf, dass ??\*\*Including module: test\*\*?? mit der Command-Line-Option ??--verbose?? ausgegeben wird.
+> # Alle Modul-Installations-Informationen sind in der Datei ??module-setup.sh??: @touch /usr/lib/dracut/modules.d/91test/module-setup.sh@
+> # Konfiguriere Modul:
+> > # Als erstes erstellt man eine ??check??-Funktion, die lediglich ??0??
+ zurückgibt. Diese Funktion wird aufgerufen, wenn entschieden wird, welche
+ Dracutmodule geladen werden sollen. Durch zurückgeben der ??0?? wird das
+ Modul beim nächsten bauen eines Initramfs automatisch hinzugefügt ohne
+ das man es etwas in der ??/etc/dracut.conf?? oder per Command-Line-Option
+ "--add" angeben muss. Wenn die @$hostonly@ Variable gesetzt ist, dann
+ wird das Modul auch im "hostonly" Modus geladen. In diesem Fall sollte
+ die Funktion nur dann ??0?? zurückgeben, wenn das Modul auch wircklich
+ für den aktuellen Host benötigt wird. Wenn 255 zurückgegeben wird, wird
+ das Modul nur dann geladen, wenn es von einem andren Modul als
+ Abhängigkeit deklariert wurde.
+
+<pre><code class="bash">
+check() {
+ return 0
+}
+</code></pre>
+
+Als nächstes wird eine ??install??-Funktion erstellt. Die ??install??-Funktion
+wird aufgerufen, wenn alle nicht Kernel spezifischen Ressourcen installiert
+werden sollen. Es können Binärdateien, Skripte und andere statischen Dateien
+installiert werden. Um einen Datei im aktuellen Modul-Ordner zu addressieren
+sollte die Variable "$moddir" als Prefix eingesetzt werden.
+Eine solche Funktion kann beispielsweise einen ??Command-Line-Hook?? triggern,
+der modulespezifische ??Kernel-Command-Line-Optionen?? verarbeitet während das
+initiale Minilinux bootet. Im folgenden Beispiel werden ??Command-Line-Optionen
+mit Priorität 20 vom Shell-Skript ??parse-insmodpost.sh?? gelesen und
+ausgewertet. Dadurch muss natürlich auch das entsprechende Skript in das
+initramfs kopiert werden. Dies wird durch den Aufruf der Funktion
+??inst_simple?? erreicht.
+
+<pre><code class="bash">
+install() {
+ inst_hook cmdline 20 "$moddir/parse-cmdline.sh"
+ inst_simple "$moddir/parse-cmdline.sh" /sbin/insmodpost.sh
+}
+</code></pre>
+
+Die ??parse-cmdline.sh?? parst die Kernel-Command-Line für die Argumente
+??rd.driver.post??, verhindert, dass die Module automatisch geladen werden und
+installiert den Hook ??hook.sh?? in der ??initqueue/settled??. Der Inhalt von
+??parse-cmdline.sh?? könnte wie folgt aussehen:
+
+<pre><code class="bash">
+for p in $(getargs rd.driver.post=); do
+ echo "blacklist $p" >> /etc/modprobe.d/initramfsblacklist.conf
+done
+</code></pre>
+
+In einer ??depends??-Funktion können andere Dracut-Module als Abhängigkeit
+deklariert werden. Diese müssen einfach per "echo" als String Leerzeichen
+getrennt ausgegeben werden.
+
+<pre><code class="bash">
+depends() {
+ echo 'debug virtfs'
+}
+</code></pre>
+
+Mit dieser Funktion können zusätzliche benötigte Kernel-Command-Line-Argumente
+ausgegeben werden, die benötigt werden um die aktuelle Maschine zu booten.
+Die Ausgabe sollte mit einem Leerzeichen beginnen und keine neuen Zeilen
+ausgeben.
+
+<pre><code class="bash">
+cmdline() {
+ echo 'TODO'
+}
+</code></pre>
+
+Mit der Funktion ??installkernel?? sollen alle kernelspezifischen Dateien
+installiert werden. Siehe hierzu auch den Abschnitt
+??Hilfsfunktionen zur Installation??
+
+<pre><code class="bash">
+installkernel() {
+ TODO
+}
+</code></pre>
+
+h2. Hilfsfunktionen zur Installation
+
+??inst_multiple?? installiert mehrere Binärdateien. Sollten ausführbare Dateien
+ohne entsprechendem Pfad ausgewählt werden, wird dracut folgende die Pfade
+??/usr/sbin??, ??/sbin??, ??/usr/bin??, ??/bin?? durchsuchen, um den Pfad der
+zugehörigen ausführbaren Datei zu ermitteln. Bei dem Kommando-Zeilen-Argument
+??-o?? als erster Parameter werden Fehler bei nicht auffindbaren Dateien
+unterdrückt.
+
+??inst_multiple [-o] <file> [ <file> …]??
+
+??inst?? installiert eine referenzierte Datei an den korrespondierenden Ort im
+??initramfs??. Die Datei wird innerhalb des ??initramfs?? am gleichen Ort zu
+finden sein wie auf der Referenzmaschine. Optional kann als zweites Argument
+ein anderer Ort für das temporäre Dateisystem angegeben werden.
+
+??inst <src> [<dst>]??
+
+??inst_hook?? installiert eine ausführbare Datei im Pfad ??<src>?? im
+Dracut-hook-Ordner ??<hookdir>??. Der Einstiegspunkt wird mit Priorität
+??<prio>?? zur Laufzeit des initialen Mini-Linux-Systems ausgeführt.
+
+??inst_hook <hookdir> <prio> <src>??
+
+??inst_rules?? installiert einen oder mehrere udev-Regeln. Nicht-existente
+udev-Regeln werden beim bauen des initramfs gemeldet, führen aber nicht zum
+Abbruch.
+
+??inst_rules <udevrule> [ <udevrule> …]??
+
+??instmods?? installiert einen oder mehrere Kernel-Module in das initramfs.
+??<kernelmodule>?? kann auch ein komplettes Subsystem darstellen, wenn es mit
+dem Prefiy "=" beginnt (z.B. "=drivers/net/team"). ??instmods?? sollte nur
+innerhalb der ??installkernel()??-Funktion verwendet werden. Ist ??$hostonly??
+gesetzt und das aktuelle Modul nicht im Referenzsystem geladen und wird
+demnach nicht in ??/sys/…/uevent MODALIAS?? verwendet, wird dieses nicht in
+das initramfs integriert. Soll das Modul in jedem Fall geladen werden, kann
+folgende Syntax verwendet werden:
+
+<pre><code class="bash">
+installkernel() {
+ hostonly='' instmods <kernelmodule>
+}
+</code></pre>
+
+??instmods <kernelmodule> [ <kernelmodule> … ]??
+
+h3. Konfiguration
+
+TODO
+
+h3. Debugging
+
+TODO
+
+h2. Build kernel specific dnbd3 kernel module
+
+> # Installiere Metainformation zum Kernel: @yum install kernel-devel@
+> # Installiere cmake zum Bauen von dnbd3: @yum install cmake@
+> # Installiere zlib-devel zum Bauen von dnbd3: @yum install zlib-devel@
+
+Die kernel header Dateien liegen in:
+
+/usr/lib/modules/3.10.0-229.1.2.el7.x86_64
+
+TOOD
+
+dnbd3-client -h 132.230.4.1 -i stage4/torben/test -r 1
+
+> # Installiere qemu-img: @yum install qemu-img@
+> # Installiere nbd: @wget http://dl.fedoraproject.org/pub/epel/6/x86_64/nbd-2.9.20-7.el6.x86_64.rpm && rpm -Uvh nbd-2.9.20-7.el6.x86_64.rpm@
+
+NOTE: Disable NetworkManager to avoid reloading network on boot: systemctl disable NetworkManager
+
+h2. CentOS7 @rpmbuild@
+
+First "Set up RPM build env":http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment
+Now in that user's home, e.g. @/home/builder@:
+<pre>
+# install yumdownloader
+yum install yum-utils
+
+# download source in /home/builder/
+yumdownloader --source systemd
+
+# should have now have a file ~/systemd-208-20.el7_1.2.src.rpm
+# "install" it in ~/rpmbuild
+rpm -ivh systemd-208-20.el7_1.2.src.rpm
+
+# install building deps
+yum-builddep ~/rpmbuild/SPECS/systemd.spec
+
+# now check if everything is working, by running the simple %prep% phase
+# (unpacks source & applies patches)
+rpmbuild -bp ~/rpmbuild/SPECS/systemd.spec
+
+# if it worked, we can probably compile
+# this runs %prep% and %build%
+rpmbuild -bp ~/rpmbuild/SPECS/systemd.spec
+</pre>
+
+dmesg
+ 998 ping 8.8.8.8
+ 999 shutdown .h now
+ 1000 shutdown -h now
+ 1001 y search yumdownloader
+ 1002 y install yum-utils
+ 1003 yumdownloader --help
+ 1004 yumdownloader --source glib2 qemu
+ 1005 yumdownloader --source qemu-img
+ 1006 ls
+ 1007 mkdir glib2_source
+ 1008 cd glib2
+ 1009 cd glib2_source/
+ 1010 rpm2cpio ../glib2-2.40.0-4.el7.src.rpm | cpio -idmv
+ 1011 ls
+ 1012 tar xf glib-2.40.0.tar.xz
+ 1013 ls
+ 1014 cd glib-2.40.0
+ 1015 ls
+ 1016 ./configure --enable-static
+ 1017 make
+ 1018 ls
+ 1019 make
+ 1020 y search zlib
+ 1021 y search zlib-static
+ 1022 y install zlib-static
+ 1023 ./configure --enable-static
+ 1024 y search libffi
+ 1025 y install libffi
+ 1026 y install libffi-devel
+ 1027 ./configure --enable-static
+ 1028 make
+ 1029 ls
+ 1030 cd build/
+ 1031 ls
+ 1032 ..
+ 1033 l
+ 1034 ls
+ 1035 make install
+ 1036 ..
+ 1037 l
+ 1038 ..
+ 1039 l
+ 1040 mkdir qemu-kvm
+ 1041 cd qemu-kvm
+ 1042 ls
+ 1043 rpm2cpio ../qemu-kvm-1.5.3-86.el7_1.1.src.rpm | cpio -idmv
+ 1044 l
+ 1045 pwd
+ 1046 ls
+ 1047 l
+ 1048 ls
+ 1049 ..
+ 1050 l
+ 1051 git clone git://git.qemu.org/qemu.git qemu
+ 1052 ls
+ 1053 rm qemu-kvm -rf
+ 1054 rm qemu-kvm-1.5.3-86.el7_1.1.src.rpm
+ 1055 l
+ 1056 cd qemu/
+ 1057 l
+ 1058 ./configure --static --target-list=x86_64-linux-user
+ 1059 y install zlib
+ 1060 y install zlib-devel
+ 1061 y install zlib2
+ 1062 y search zlib
+ 1063 y install zlib-static
+ 1064 y install zlib
+ 1065 ll /lib64/libz.a
+ 1066 ./configure --static --target-list=x86_64-linux-user
+ 1067 make clean
+ 1068 ./configure --static
+ 1069 y search zlib
+ 1070 y search zlib-static..x86_64
+ 1071 y search zlib-static.x86_64
+ 1072 y install zlib-static.x86_64
+ 1073 ldconfig
+ 1074 ./configure --static
+ 1075 ./configure --help
+ 1076 ./configure --help | grep zlib
+ 1077 y search zlib
+ 1078 y install zlib-devel zlib-static zlib
+ 1079 y deinstall zlib
+ 1080 y remove zlib
+ 1081 y search libz
+ 1082 ls
+ 1083 git submodule update --init dtc
+ 1084 ./configure --static --target-list=x86_64-linux-user
+ 1085 find / -name zlib
+ 1086 find / -name libz
+ 1087 find / -name *libz*
+ 1088 find / -name *zlib*
+ 1089 ls
+ 1090 ./configure --disable-zlib-test --static --target-list=x86_64-linux-user
+ 1091 y search base-devel
+ 1092 y search devel
+ 1093 yum groupinstall "Development Tools"
+ 1094 yum groups mark install
+ 1095 yum group mark install
+ 1096 yum groupinstall "Development Tools"
+ 1097 yum groups mark install
+ 1098 yum grouplist
+ 1099 y search zlibrary
+ 1100 y search glibc
+ 1101 y install glibc-static
+ 1102 ls
+ 1103 ./configure --static --target-list=x86_64-linux-user
+ 1104 y search glib
+ 1105 y search glib-2
+ 1106 y search glib2-devel
+ 1107 y install glib2-devel
+ 1108 ./configure --static --target-list=x86_64-linux-user
+ 1109 git submodule update --init pixman
+ 1110 ./configure --static --target-list=x86_64-linux-user
+ 1111 ls
+ 1112 ll
+ 1113 make -j3
+ 1114 l
+ 1115 ldd qemu-nbd
+ 1116 history
+
+h2. Quellen
+
+* "Main Page Dracut on kerne.org":https://dracut.wiki.kernel.org/index.php/Main_Page
+* "Documentation on kernel.org":https://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html
+* "Enable addional repository":http://www.tecmint.com/enable-rpmforge-repository
+* "Getting Dynamic Kernel Module Support":http://rpmfind.net/linux/rpm2html/search.php?query=dkms
diff --git a/builder/dnbd3-rootfs/scripts/prepare-disks b/builder/dnbd3-rootfs/scripts/prepare-disks
new file mode 100755
index 00000000..2e68dd9e
--- /dev/null
+++ b/builder/dnbd3-rootfs/scripts/prepare-disks
@@ -0,0 +1,211 @@
+#!/bin/bash
+###############################################################################
+# GLOBALS
+#
+
+# flag file containing pids of running instances for concurrency checks
+declare -rg OPENSLX_DISK_FLAG="/tmp/openslx.disk"
+# file that will contain the name of the device used for the /tmp partition
+# - label 'OPENSLX_TMP' in GPT / type '0x44' in MBR
+declare -rg OPENSLX_TMP_MARKER="/tmp/openslx.disk.tmp"
+# file that will contain the name of the device used for storing qcow2
+# - label 'OPENSLX_SYS' in GPT / type '0x46' in MBR
+declare -rg OPENSLX_SYS_MARKER="/tmp/openslx.disk.sys"
+# mount point for system partition
+declare -rg OPENSLX_SYS_MOUNT="/opt/openslx/system"
+
+#
+# END GLOBALS
+###############################################################################
+
+###############################################################################
+# FUNCTION DEFINITIONS
+#
+# helper to mount the OPENSLX_SYS partition to /opt/openslx/system
+# Usage: mount_sys_part <path_to_sys_partition>
+mount_sys_part() {
+ if [ ! -b "$1" ]; then
+ warn "($$) Refusing to mount '$1' as its not a block device!"
+ return 1
+ fi
+
+ local OPENSLX_SYS_DEVICE="$1"
+ mkdir -p ${OPENSLX_SYS_MOUNT}
+ if ! mount -t auto "${OPENSLX_SYS_DEVICE}" "${OPENSLX_SYS_MOUNT}"; then
+ warn "($$) Mounting '${OPENSLX_SYS_DEVICE}' to '${OPENSLX_SYS_MOUNT}' failed."
+ return 1
+ fi
+ return 0
+
+}
+#
+# generic helper to format the given partition with the given filesystem or
+# from the prefdefined list of xfs, ext4, ...
+# Usage: format_disk <dev> <fs>
+# e.g. format_disk /dev/sda1 xfs
+format_disk () {
+ local TARGET_DEVICE="$1"
+ local fslist="xfs ext4"
+ # if we have a second arguments, its the filesystem of choice
+ local fs
+ [ $# -ge 2 ] && fslist="$2"
+ for fs in $fslist ; do
+ unset found
+ local MKFS="$(busybox which mkfs.$fs)"
+ if [ -n $MKFS ]; then
+ found=yes
+ case "mkfs.$fs" in
+ mkfs.xfs) fopt="-fq" ;;
+ mkfs.ext4) fopt="-Fq" ;;
+ esac
+ info "($$) Formatting $TARGET_DEVICE as $fs"
+ return $(${MKFS} ${fopt} "${TARGET_DEVICE}")
+ fi
+ [ -n "$found" ] && break
+ done
+ # still here? then we didn't find a proper formatter...
+ warn "($$) Could not format $PART_DEV as $fs."
+ return 1
+}
+
+#
+# END FUNCTION DEFINITIONS
+###############################################################################
+
+###############################################################################
+# MAIN CODE
+#
+
+command -v warn >/dev/null || . /lib/dracut-lib.sh
+
+# let check the arguments
+if [ "$#" -ne 2 ]; then
+ warn "($$) '$0' need 2 arguments: '$0 [OPENSLX_SYS|OPENSLX_TMP] <dev_path>'"
+ exit 1
+fi
+# $1 sane?
+if [ "x$1" != "xOPENSLX_SYS" ] && [ "x$1" != "xOPENSLX_TMP" ]; then
+ warn "($$) First arg needs to be either 'OPENSLX_SYS' or 'OPENSLX_TMP', given: $1"
+ exit 1
+fi
+# $2 sane?
+if [ ! -b "/dev/$2" ]; then
+ warn "($$) Second arg appears not to be a block device!"
+ exit 1
+fi
+
+# ok all seems well, set the arguments
+PART_TYPE="$1"
+PART_DEV="/dev/$2"
+
+unset OPENSLX_TMP_DEVICE
+unset OPENSLX_SYS_DEVICE
+
+# lets check if we are already running
+INSTANCES="$(grep "$PART_TYPE" "$OPENSLX_DISK_FLAG" | busybox wc -l)"
+if [ "$INSTANCES" -ge 1 ]; then
+ # uhoh we are not alone! Need to check
+ # if the other instance actually did its job
+ warn "($$) '$0' already running for $PART_TYPE on $PART_DEV... checking state."
+ # here two/three cases depending on which PART_TYPE we are
+ # currently processing.
+ for timeout in 1 1 2; do
+ # always give the other instance time to finish
+ # but only check 3 times overall
+ sleep $timeout
+ case "$PART_TYPE" in
+ OPENSLX_TMP)
+ # was the tmp partition marker created with a device?
+ if [ ! -f "${OPENSLX_TMP_MARKER}" ]; then
+ info "($$) Invalid state: no marker for $PART_TYPE"
+ continue
+ fi
+ # it was, is it a valid block device?
+ OPENSLX_TMP_DEVICE="$(cat ${OPENSLX_TMP_MARKER})"
+ if [ -z $OPENSLX_TMP_DEVICE -o ! -b $OPENSLX_TMP_DEVICE ]; then
+ info "($$) Invalid state: no for device $OPENSLX_TMP_DEVICE"
+ continue
+ fi
+ # its detected, its a block device and as mounting is
+ # done later, we can not check for more at this point
+ info "($$) Valid state for $OPENSLX_TMP_DEVICE as $PART_TYPE"
+ exit 0
+ ;;
+ OPENSLX_SYS)
+ # was the system partition marker created with a device?
+ if [ ! -f "${OPENSLX_SYS_MARKER}" ]; then
+ info "($$) Invalid state: no marker for $PART_TYPE"
+ continue
+ fi
+ # it was, is it a valid block device?
+ OPENSLX_SYS_DEVICE="$(cat ${OPENSLX_SYS_MARKER})"
+ if [ -z $OPENSLX_SYS_DEVICE -o ! -b $OPENSLX_SYS_DEVICE ]; then
+ info "($$) Invalid state: no for device $OPENSLX_SYS_DEVICE"
+ continue
+ fi
+ # its detected, its a block device, is it mounted?
+ if mount | grep -qE "^$OPENSLX_SYS_DEVICE\ on $OPENSLX_SYS_MOUNT"; then
+ info "($$) Valid state for $OPENSLX_SYS_DEVICE as $PART_TYPE"
+ exit 0
+ fi
+ # if its not mounted, we want to keep on, so no exit!
+ ;;
+ *)
+ # weird case which should never happen
+ warn "($$) If you see this, then $0 was called with a bad PART_TYPE: $@"
+ continue
+ ;;
+ esac
+ done
+ warn "($$) Timeout reached!"
+ warn "($$) '$PART_TYPE' was found but not device was associated to it!"
+fi
+
+# We write our pid to $OPENSLX_DISK_FLAG in order to make sure
+# we are the only instance of this script running.
+info "($$) Processing: $PART_TYPE -> $PART_DEV ($$)"
+echo "$PART_TYPE.$$" >> "$OPENSLX_DISK_FLAG"
+
+# if we are still here, then we can go on and process the partition
+if [ "$PART_TYPE" = "OPENSLX_TMP" ]; then
+ # always format /tmp partition
+ if ! format_disk "${PART_DEV}" xfs; then
+ # error while formatting, cleanup
+ warn "($$) Error formatting $PART_DEV ... removing $$"
+ sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}"
+ exit 1
+ fi
+ info "($$) Using '$PART_DEV' as '$PART_TYPE'"
+ # mark it for later: in pre-pivot we will check this file
+ # and mount it as $NEWROOT/tmp
+ echo "$PART_DEV" > "$OPENSLX_TMP_MARKER"
+ # remove our pid from OPENSLX_DISK_FLAG
+ sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}"
+ exit 0
+fi
+if [ "$PART_TYPE" = "OPENSLX_SYS" ]; then
+ # TODO make the formatting of the system partition configurable
+ if ! format_disk "${PART_DEV}" xfs; then
+ # error while formatting, cleanup
+ warn "($$) Error formatting $PART_DEV ... removing $$"
+ sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}"
+ exit 1
+ fi
+ # mark it
+ # mount it now, since qemu-nbd needs it asap!
+ if mount_sys_part "$PART_DEV"; then
+ # mount worked, mark it as done
+ info "($$) Using '$PART_DEV' as '$PART_TYPE'"
+ echo "$PART_DEV" > "$OPENSLX_SYS_MARKER"
+ sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}"
+ exit 0
+ else
+ warn "($$) 'mount_sys_part' failed in $0"
+ sed -i "/^${PART_TYPE}\.$$/d" "${OPENSLX_DISK_FLAG}"
+ exit 1
+ fi
+fi
+
+#
+# END MAIN CODE
+###############################################################################
diff --git a/builder/dnbd3-rootfs/scripts/setup-qcow2 b/builder/dnbd3-rootfs/scripts/setup-qcow2
new file mode 100755
index 00000000..70babc17
--- /dev/null
+++ b/builder/dnbd3-rootfs/scripts/setup-qcow2
@@ -0,0 +1,137 @@
+#!/usr/bin/bash
+
+# dracut-lib to use debugging functions
+command -v warn >/dev/null || . /lib/dracut-lib.sh
+command -v emergency_shell >/dev/null || . /lib/dracut-lib.sh
+
+###############################################################################
+# GLOBALS
+#
+# TODO make this configurable
+[ -f /opt/openslx/config ] && . /opt/openslx/config
+[ -z $SLX_DNBD3_SERVER ] && SLX_DNBD3_SERVER="132.230.4.1"
+[ -z $SLX_STAGE4 ] && SLX_STAGE4="stage4/joe/centos7"
+[ -z $SLX_STAGE4_RID ] && SLX_STAGE4_RID="4"
+declare -rg DNBD3_SERVER="$SLX_DNBD3_SERVER"
+declare -rg DNBD3_IMAGE="$SLX_STAGE4"
+declare -rg DNBD3_RID="$SLX_STAGE4_RID"
+declare -rg DNBD3_DEVICE="/dev/dnbd0"
+declare -rg QCOW_CONTAINER="/opt/openslx/system/system.qcow2"
+#
+# END GLOBALS
+###############################################################################
+
+###############################################################################
+# FUNCTION DEFINITIONS
+#
+# helper to do some sanity checks
+check_dnbd3() {
+ if [ ! command -v "dnbd3-client" >/dev/null ]; then
+ warn "No 'dnbd3-client' found. Was the initramfs built correctly?"
+ emergency_shell -n "Error in $0"
+ return 1
+ fi
+ return 0
+}
+
+# helper to connect to the dnbd3-server
+connect_dnbd3() {
+ # check if it already connected
+ local current_image_name="$(cat /sys/block/${DNBD3_DEVICE#/dev/}/net/image_name)"
+ [ "x${current_image_name}" != "x(null)" ] && return 0
+
+ # not connected yet, do it
+ if ! dnbd3-client -h "${DNBD3_SERVER}" \
+ -i "${DNBD3_IMAGE}" \
+ -r "${DNBD3_RID}" \
+ -d "${DNBD3_DEVICE}" ; then
+ warn "Failed to mount $DNBD3_IMAGE from $DNBD3_SERVER to $DNBD3_DEVICE"
+ emergency_shell -n "Error in $0"
+ return 1
+ fi
+ return 0
+}
+
+# helper to create the qcow2 container file using
+# DNBD3_DEVICE as the base of the filesystem
+# QCOW_CONTAINER as the writable file
+# (our future rootfs)
+create_qcow() {
+ # check if we already created the qcow2-container
+ [ -e "$QCOW_CONTAINER" ] && return 0
+
+ # check if we have our target directory, if not create it
+ [ ! -d "$(busybox dirname $QCOW_CONTAINER)" ] && \
+ mkdir -p "$(busybox dirname $QCOW_CONTAINER)"
+
+ # we did not, let's create it
+ if ! qemu-img create -f qcow2 -o \
+ backing_file="$DNBD3_DEVICE",backing_fmt=qcow2 "$QCOW_CONTAINER"; then
+ warn "Failed to create qcow2-Container from $DNBD3_DEVICE"
+ emergency_shell -n "Error in $0"
+ rm -f -- "$QCOW_CONTAINER"
+ return 1
+ fi
+ return 0
+}
+# helper to start qemu-nbd on localhost:2000
+# use our wrapper to set argv[0][0] to '@'
+# this keeps qemu-nbd running after switching root
+export_qcow() {
+ # check if we already have a qemu-nbd
+ if [ -e /tmp/qemu-nbd.pid ]; then
+ kill -0 $(cat /tmp/qemu-nbd.pid) && return 0
+ fi
+ # since we use the wrapper, we need a little more logic to see if it runs
+ /usr/bin/systemd-preserve-process-marker \
+ /usr/bin/qemu-nbd -t -p 2000 "$QCOW_CONTAINER" &
+ # the wrapper returns 255 if the qemu-nbd binary is missing
+ local qemu_nbd_pid="$!"
+ for i in 0.5 1 2; do
+ sleep $i
+ if ! kill -0 $qemu_nbd_pid; then
+ # not running
+ wait $qemu_nbd_pid
+ local ret_wrapper="$?"
+ if [ "${ret_wrapper}" -eq 127 ]; then
+ # wrapper was not found by bash
+ warn "No such file or directory: /usr/bin/systemd-preserve-process-marker"
+ elif [ "${ret_wrapper}" -eq 255 ]; then
+ # qemu-nbd was not found
+ warn "No such file or directory: /usr/bin/qemu-nbd"
+ fi
+ emergency_shell -n "Error in $0"
+ return 1
+ else
+ # all good, qemu-nbd is running, remember its pid
+ echo $qemu_nbd_pid > /tmp/qemu-nbd.pid
+ return 0
+ fi
+ done
+ # fallback
+ return 1
+}
+# helper to mount the qcow2-container per nbd
+connect_qcow() {
+ # try to mount the locally exported qcow2-container using nbd-client
+ if /usr/bin/systemd-preserve-process-marker \
+ nbd-client --persist 127.0.0.1 2000 /dev/nbd0; then
+ # it worked, lets set the symlink to /dev/root as dracut needs it
+ # later on to mount that device to the future root (/sysroot)
+ ln -sf /dev/nbd0 /dev/root
+ return 0
+ else
+ # this is pretty bad, dracut would spawn an emergency later on
+ # since there is no /dev/root to mount.
+ # For debugging purposes, we drop an emergency shell ourselves
+ # if the mount fails.
+ warn "Could not mount /dev/nbd0 from 127.0.0.1:2000."
+ emergency_shell -n "Error in $0"
+ return 1
+ fi
+}
+#
+# END FUNCTION DEFINITIONS
+###############################################################################
+
+# No main, use functions!
diff --git a/builder/dnbd3-rootfs/scripts/utils.sh b/builder/dnbd3-rootfs/scripts/utils.sh
new file mode 100644
index 00000000..3c72dbca
--- /dev/null
+++ b/builder/dnbd3-rootfs/scripts/utils.sh
@@ -0,0 +1,99 @@
+UTILS_KERNEL_MODULE_DIRECTORY="builder/dnbd3-qcow2-rootfs/kernel_modules/"
+UTILS_STANDARD_OUTPUT=/dev/null
+UTILS_ERROR_OUTPUT=/dev/null
+
+function utils_log() {
+ # Handles logging messages. Returns non zero and exit on log level
+ # error to support chaining the message into toolchain.
+ #
+ # Examples:
+ #
+ # >>> build_initramfs_log
+ # info: test
+ # >>> build_initramfs_log debug message
+ # debug: message
+ # >>> build_initramfs_log info message '\n'
+ #
+ # info: message
+ local loggingType='info' && \
+ local message="$1" && \
+ if [ "$2" ]; then
+ loggingType="$1"
+ message="$2"
+ fi
+ if [ "$_VERBOSE" == 'yes' ] || [ "$loggingType" == 'error' ] || \
+ [ "$loggingType" == 'critical' ]; then
+ if [ "$3" ]; then
+ echo -e -n "$3"
+ fi
+ echo -e "${loggingType}: $message"
+ fi
+ if [ "$loggingType" == 'error' ]; then
+ exit 1
+ fi
+ return 0
+}
+function compile_nbd() {
+ # Downloads and compiles nbd.
+ #
+ # Examples:
+ #
+ # >>> build_initramfs_compile_nbd
+ # ...
+ # Provides the following file:
+ # ${_KERNEL_MODULE_DIRECTORY}/nbd/nbd.ko
+ pushd "${_KERNEL_MODULE_DIRECTORY}/nbd" \
+ 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \
+ build_initramfs_log 'Compile the nbd kernel module.' && \
+ make 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \
+ popd 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT"
+ return $?
+ # TODO make clean
+}
+function compile_dnbd3() {
+ # Downloads and compiles dnbd3.
+ #
+ # Examples:
+ #
+ # >>> build_initramfs_compile_dnbd3
+ # ...
+ # Provides the following file:
+ # ${_KERNEL_MODULE_DIRECTORY}/dnbd3/build/dnbd3.ko
+ rm --recursive --force ${_KERNEL_MODULE_DIRECTORY}/dnbd3 \
+ 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \
+ pushd $_KERNEL_MODULE_DIRECTORY \
+ 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \
+ git clone git://git.openslx.org/dnbd3.git \
+ 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \
+ cd dnbd3 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \
+ ./build.sh 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT" && \
+ popd 1>"$_STANDARD_OUTPUT" 2>"$_ERROR_OUTPUT"
+ return $?
+ # TODO rm -rf build
+}
+function compile_systemd_preserve_process_marker() {
+ # Compiles simple c program.
+ pushd && \
+ make && \
+ popd
+ return $?
+}
+function utils_dependency_check() {
+ # This function check if all given dependencies are present.
+ #
+ # Examples:
+ #
+ # >>> build_initramfs_perform_dependency_check "mkdir pacstrap mktemp"
+ # ...
+ local dependenciesToCheck="$1" && \
+ local result=0 && \
+ local dependency && \
+ for dependency in ${dependenciesToCheck[*]}; do
+ if ! hash "$dependency" 1>"$_STANDARD_OUTPUT" 2>/dev/null; then
+ build_initramfs_log 'critical' \
+ "Needed dependency \"$dependency\" isn't available." && \
+ result=1
+ fi
+ done
+ return $result
+}
diff --git a/builder/dnbd3-rootfs/udev/70-openslx-disk.rules b/builder/dnbd3-rootfs/udev/70-openslx-disk.rules
new file mode 100644
index 00000000..5cb3fa52
--- /dev/null
+++ b/builder/dnbd3-rootfs/udev/70-openslx-disk.rules
@@ -0,0 +1,7 @@
+# GPT rules
+KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="gpt" ENV{ID_PART_ENTRY_NAME}=="OPENSLX_TMP" RUN+="/sbin/prepare-disks %E{ID_PART_ENTRY_NAME} %k"
+KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="gpt" ENV{ID_PART_ENTRY_NAME}=="OPENSLX_SYS" RUN+="/sbin/prepare-disks %E{ID_PART_ENTRY_NAME} %k"
+
+# MBR rules
+KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="dos" ENV{ID_PART_ENTRY_TYPE}=="0x44" RUN+="/sbin/prepare-disks OPENSLX_TMP %k"
+KERNEL=="sd?[0-9]" SUBSYSTEM=="block" ENV{ID_PART_TABLE_TYPE}=="dos" ENV{ID_PART_ENTRY_TYPE}=="0x46" RUN+="/sbin/prepare-disks OPENSLX_SYS %k"