diff -Naur mkinitrd-6.3.5/Makefile mkinitrd-6.3.5-f2fs/Makefile --- mkinitrd-6.3.5/Makefile 2011-01-29 15:23:07.000000000 +0100 +++ mkinitrd-6.3.5-f2fs/Makefile 2015-07-22 18:03:30.533678279 +0200 @@ -3,6 +3,8 @@ ARCH := $(patsubst i%86,i386,$(shell uname -m)) ARCH := $(patsubst sparc%,sparc,$(ARCH)) +LIBDIR = /usr/lib + SUBDIRS = grubby livecd isolinux #ifeq ($(ARCH),sparc) @@ -28,7 +30,7 @@ chmod +x busybox/scripts/*.sh make -C busybox defconfig make -C busybox - sed 's:%VERSIONTAG%:$(VERSION):' < mkinitrd.in > mkinitrd + sed -e 's:%VERSIONTAG%:$(VERSION):' -e 's:%LIBDIR%:$(LIBDIR):g' < mkinitrd.in > mkinitrd test: all for i in grubby busybox klibc; do make -C $$i test; done @@ -44,6 +46,8 @@ install -m755 installkernel $(DESTDIR)/sbin/installkernel install -m 644 installkernel.8 $(DESTDIR)/$(mandir)/man8/installkernel.8 chmod 755 $(DESTDIR)/sbin/mkinitrd + mkdir -p $(DESTDIR)/$(LIBDIR)/mkinitrd + install -m755 solibcopy $(DESTDIR)/$(LIBDIR)/mkinitrd/solibcopy install -m644 mkinitrd.8 $(DESTDIR)/$(mandir)/man8/mkinitrd.8 install -m644 mkinitrd.confd $(DESTDIR)/etc/conf.d/mkinitrd install -m755 busybox/busybox $(DESTDIR)/usr/sbin/busybox.mkinitrd diff -Naur mkinitrd-6.3.5/mkinitrd.in mkinitrd-6.3.5-f2fs/mkinitrd.in --- mkinitrd-6.3.5/mkinitrd.in 2015-07-22 17:37:33.936060115 +0200 +++ mkinitrd-6.3.5-f2fs/mkinitrd.in 2015-07-22 18:02:34.542311435 +0200 @@ -35,6 +35,7 @@ VERSION=%VERSIONTAG% +SOLIBCOPY="%LIBDIR%/mkinitrd/solibcopy" PROBE="yes" MODULES="" PREMODS="" @@ -339,7 +340,7 @@ then eval "${dev}" else - eval $(busybox.mkinitrd blkid ${dev} | grep "${dev}:" | sed 's/.*:\ //') + eval $(blkid ${dev} | grep "${dev}:" | sed 's/.*:.*UUID="\(.*\).*TYPE.*/UUID="\1"/') fi echo ${UUID} } @@ -742,6 +743,12 @@ fi fi +# install blkid +if type -P blkid &> /dev/null +then + DESTROOT="${DEST}" ${SOLIBCOPY} blkid +fi + # create some needed device nodes mkdir ${DEST}/dev/pts || die mkdir ${DEST}/dev/shm || die @@ -903,7 +910,14 @@ add_initrd 'echo "-- Mounting sysroot ..."' add_initrd '. /etc/rootdev' -add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab' +# special handling for f2fs required +if [[ ${rootfs} = f2fs ]] +then + add_initrd 'eval "${device}"' + add_initrd 'echo "$(blkid -U ${UUID}) /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab' +else + add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab' +fi add_initrd 'mount /sysroot || ash' # unset hotplug event-manager diff -Naur mkinitrd-6.3.5/solibcopy mkinitrd-6.3.5-f2fs/solibcopy --- mkinitrd-6.3.5/solibcopy 1970-01-01 01:00:00.000000000 +0100 +++ mkinitrd-6.3.5-f2fs/solibcopy 2015-07-22 17:38:43.740247197 +0200 @@ -0,0 +1,40 @@ +#!/bin/bash + +all_binaries="$@" + +: ${DESTROOT=/tmp/solibcopy} + +for binary in ${all_binaries} +do + fullpath="$(type -P ${binary})" + path="$(dirname ${fullpath})" + if [ -e ${fullpath} ] + then + for solib in $(ldd ${fullpath} | sed "s:.*=>\ \(.*\):\1:;s:\(.*\)\ (.*:\1:") + do + if [ -e ${solib} ] + then + solibpath="$(dirname ${solib})" + install -d "${DESTROOT}"/"${solibpath}" + cp -a "${solib}" ${DESTROOT}/"${solibpath}"/ + if [ -L ${solib} ] + then + soliblink="$(readlink ${solib})" + if [[ $(basename ${soliblink}) = ${soliblink} ]] + then + soliblinkpath="${solibpath}" + else + soliblinkpath="$(dirname ${soliblink})" + fi + install -d "${DESTROOT}"/"${soliblinkpath}" + cp -a "${soliblinkpath}"/"${soliblink}" "${DESTROOT}"/"${soliblinkpath}"/ + fi + fi + done + # copy the binary itself + install -d "${DESTROOT}"/"${path}" + cp -a "${fullpath}" "${DESTROOT}"/"${path}"/ + else + echo "binary '${binary}' not found!" + fi +done