diff options
-rw-r--r-- | defaults/initrd.defaults | 1 | ||||
-rw-r--r-- | defaults/initrd.scripts | 62 | ||||
-rw-r--r-- | defaults/linuxrc | 68 | ||||
-rw-r--r-- | defaults/software.sh | 16 | ||||
-rw-r--r-- | defaults/unlock-luks.sh | 2 | ||||
-rw-r--r-- | doc/genkernel.8.txt | 4 | ||||
-rwxr-xr-x | gen_funcs.sh | 18 | ||||
-rwxr-xr-x | gen_initramfs.sh | 121 | ||||
-rw-r--r-- | gkbuilds/eudev.gkbuild | 40 | ||||
-rw-r--r-- | gkbuilds/hwids.gkbuild | 35 | ||||
-rw-r--r-- | gkbuilds/lvm.gkbuild | 8 | ||||
-rw-r--r-- | mdev/helpers/nvme | 21 | ||||
-rw-r--r-- | mdev/helpers/storage-device | 52 | ||||
-rw-r--r-- | mdev/mdev.conf | 40 | ||||
-rw-r--r-- | patches/eudev/3.2.9/eudev-3.2.9-static.patch | 97 | ||||
-rw-r--r-- | worker_modules/gkbuild.sh | 2 |
16 files changed, 416 insertions, 171 deletions
diff --git a/defaults/initrd.defaults b/defaults/initrd.defaults index 79d7322c..3ac5856f 100644 --- a/defaults/initrd.defaults +++ b/defaults/initrd.defaults @@ -96,6 +96,7 @@ GK_SSHD_LOCKFILE='/tmp/remote-rescueshell.lock' GK_SSHD_PIDFILE='/var/run/dropbear.pid' GK_SSHD_PORT=22 GK_SSHD_WAIT= +GK_UDEV_TIMEOUT=120 GK_USERINTERACTION_DISABLED_STATEFILE='/tmp/user-interaction.disabled' CRYPT_ENV_FILE='/etc/CRYPT_ENV.conf' diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts index d5a3612e..9b2b32cb 100644 --- a/defaults/initrd.scripts +++ b/defaults/initrd.scripts @@ -463,6 +463,12 @@ aufs_insert_dir() { fi } +udevsettle() { + local timeout=${1-${GK_UDEV_TIMEOUT}} + + run udevadm settle --timeout=${timeout} +} + # Insert all modules found in $1, usually $CDROOT_PATH # added to allow users to add their own apps. union_insert_modules() { @@ -1612,44 +1618,38 @@ start_volumes() { if [ "${USE_LVM_NORMAL}" = '1' ] then - for lvm_path in /sbin/lvm /bin/lvm MISSING - do - [ -x "${lvm_path}" ] && break - done - - if [ "${lvm_path}" = "MISSING" ] + if ! hash lvm >/dev/null 2>&1 then bad_msg "dolvm invoked but LVM binary not available; Skipping LVM volume group activation ..." else - for dev in ${RAID_DEVICES} - do - setup_md_device "${dev}" - done - - local lvm_cmd - # If there is a cache, update it. Unbreak at least dmcrypt if [ -d /etc/lvm/cache ] then good_msg "Scanning for volume groups ..." - lvm_cmd="run ${lvm_path} vgscan 2>&1" + + local lvm_cmd="run lvm vgscan 2>&1" is_log_enabled && lvm_cmd="${lvm_cmd} | tee -a '${GK_INIT_LOG}'" + eval "${lvm_cmd}" + if [ $? -ne 0 ] + then + bad_msg "Scanning for volume groups failed!" + else + udevsettle + fi fi good_msg "Activating volume groups ..." # To activate volumegroups on all devices in the cache - local lvm_cmd="run ${lvm_path} vgchange -ay --sysinit 2>&1" + local lvm_cmd="run lvm vgchange -ay --sysinit 2>&1" is_log_enabled && lvm_cmd="${lvm_cmd} | tee -a '${GK_INIT_LOG}'" - eval "${lvm_cmd}" - # To create symlinks so users can use root=/dev/vg/root - # This needs to run after vgchange, using vgchange --mknodes is too - # early. - local lvm_cmd="run ${lvm_path} vgmknodes --ignorelockingfailure 2>&1" - is_log_enabled && lvm_cmd="${lvm_cmd} | tee -a '${GK_INIT_LOG}'" eval "${lvm_cmd}" + if [ $? -ne 0 ] + then + bad_msg "Activation of volume groups failed!" + fi fi fi @@ -1750,6 +1750,8 @@ start_volumes() { fi unset ZPOOL_IMPORT_UDEV_TIMEOUT_MS fi + + udevsettle } start_iscsi() { @@ -1761,7 +1763,14 @@ start_iscsi() { iscsi_cmd="run iscsistart -b 2>&1" is_log_enabled && iscsi_cmd="${iscsi_cmd} | tee -a '${GK_INIT_LOG}'" + eval "${iscsi_cmd}" + if [ $? -ne 0 ] + then + bad_msg "Activation of iSCSI via iBFT failed!" + else + udevsettle + fi fi if [ -n "${ISCSI_INITIATORNAME}" ] && [ -n "${ISCSI_TARGET}" ] && [ -n "${ISCSI_ADDRESS}" ] @@ -1807,7 +1816,14 @@ start_iscsi() { iscsi_cmd="run iscsistart -i '${ISCSI_INITIATORNAME}' -t '${ISCSI_TARGET}' -a '${ISCSI_ADDRESS}' ${ADDITIONAL} 2>&1" is_log_enabled && iscsi_cmd="${iscsi_cmd} | tee -a '${GK_INIT_LOG}'" + eval "${iscsi_cmd}" + if [ $? -ne 0 ] + then + bad_msg "Activation of iSCSI via cmdline failed!" + else + udevsettle + fi fi } @@ -1991,6 +2007,8 @@ openLUKS() { fi done + udevsettle + if run mountpoint "${mntkey}" >/dev/null 2>&1 then run umount "${mntkey}" >/dev/null 2>&1 @@ -2028,6 +2046,7 @@ start_network() { # Load network modules only when we need them to avoid possible # firmware problems for people not using network that early modules_scan net + udevsettle # At least gk.net.iface can only be processed after sysfs was # mounted. @@ -2548,6 +2567,7 @@ setup_btrfsctl() { is_log_enabled && btrfs_cmd="${btrfs_cmd} | tee -a '${GK_INIT_LOG}'" eval "${btrfs_cmd}" + udevsettle fi } diff --git a/defaults/linuxrc b/defaults/linuxrc index 7e3b388c..210085a7 100644 --- a/defaults/linuxrc +++ b/defaults/linuxrc @@ -11,13 +11,13 @@ # Basic /dev content, we need it as fast as possible. [ ! -e /dev/console ] && mknod /dev/console c 5 1 [ ! -e /dev/null ] && mknod /dev/null c 1 3 +[ ! -e /dev/random ] && mknod /dev/random c 1 8 [ ! -e /dev/tty ] && mknod /dev/tty c 5 0 [ ! -e /dev/tty0 ] && mknod /dev/tty0 c 4 0 [ ! -e /dev/tty1 ] && mknod /dev/tty1 c 4 1 [ ! -e /dev/ttyS0 ] && mknod /dev/ttyS0 c 4 64 [ ! -e /dev/ttyS1 ] && mknod /dev/ttyS1 c 4 65 [ ! -e /dev/urandom ] && mknod /dev/urandom c 1 9 -[ ! -e /dev/random ] && mknod /dev/random c 1 8 [ ! -e /dev/zero ] && mknod /dev/zero c 1 5 # Take control @@ -33,6 +33,7 @@ fi mount -t proc -o noexec,nosuid,nodev proc /proc >/dev/null 2>&1 mount -o remount,rw / >/dev/null 2>&1 +mount -t tmpfs -o rw,nosuid,nodev,relatime,mode=755 none /run 2>&1 # Prevent superfluous printks from being printed to the console echo 1 > /proc/sys/kernel/printk @@ -356,6 +357,16 @@ do fi unset tmp_wait ;; + gk.udev.timeout=*) + tmp_timeout=${x#*=} + if is_int "${tmp_timeout}" + then + GK_UDEV_TIMEOUT=${tmp_timeout} + else + warn_msg "'${x}' does not look like a valid time (second) value -- ignored!" + fi + unset tmp_timeout + ;; gk.userinteraction.disabled=*) tmp_disabled=${x#*=} if is_true "${tmp_disabled}" @@ -532,17 +543,10 @@ mount_devfs # Mount sysfs mount_sysfs -# Initialize mdev -good_msg 'Activating mdev ...' - -# Serialize hotplug events -run touch /dev/mdev.seq - -# Setup hotplugging for firmware loading -if [ -f "/proc/sys/kernel/hotplug" ] +if [ -e /proc/sys/kernel/hotplug ] then - log_msg "COMMAND: 'echo /sbin/mdev > /proc/sys/kernel/hotplug'" - echo /sbin/mdev > /proc/sys/kernel/hotplug + log_msg "COMMAND: 'echo "" > /proc/sys/kernel/hotplug'" + echo "" > /proc/sys/kernel/hotplug fi # Load modules listed in MY_HWOPTS if /lib/modules exists for the running kernel @@ -572,8 +576,31 @@ else good_msg 'Skipping module load; no modules in the ramdisk!' fi -# Ensure that device nodes are properly configured -run mdev -s || bad_msg "mdev -s failed" +# Initialize udev +if [ ! -f "/etc/udev/hwdb.bin" ] +then + good_msg 'Generating /etc/udev/hwdb.bin ...' + run udevadm hwdb --update \ + || bad_msg 'Failed to generate /etc/udev/hwdb.bin!' +fi + +good_msg 'Activating udev ...' + +udevd_cmd="run udevd --resolve-names=never" +if is_debug +then + udevd_cmd="${udevd_cmd} --debug > /tmp/udev.debug 2>&1 &" +else + udevd_cmd="${udevd_cmd} --daemon" +fi +eval "${udevd_cmd}" +if [ $? -eq 0 ] +then + run udevadm trigger --action=add + udevsettle +else + bad_msg "udevd failed to run" +fi cd / @@ -1326,18 +1353,31 @@ fi cleanup +udevsettle +run udevadm control --exit +if pgrep udevd >/dev/null 2>&1 +then + warn_msg "udevd is still running -- Trying to kill it ..." + run pkill -9 udevd >/dev/null 2>&1 +fi + # If devtmpfs is mounted, try move it to the new root # If that fails, try to unmount all possible mounts of # devtmpfs as stuff breaks otherwise -for fs in /dev /sys /proc +for fs in /run /dev /sys /proc do if grep -qs "${fs}" /proc/mounts then + chroot_dir="${CHROOT}${fs}" + [ ! -d "${chroot_dir}" ] && run mkdir -p "${chroot_dir}" + if ! run mount -o move ${fs} "${CHROOT}"${fs} then run umount ${fs} || \ bad_msg "Failed to move and unmount the ramdisk ${fs}!" fi + + unset chroot_dir fi done diff --git a/defaults/software.sh b/defaults/software.sh index a9f9cf0b..463d8cf9 100644 --- a/defaults/software.sh +++ b/defaults/software.sh @@ -65,6 +65,13 @@ GKPKG_DROPBEAR_SRCTAR="${GKPKG_DROPBEAR_SRCTAR:-${DISTDIR}/dropbear-${GKPKG_DROP GKPKG_DROPBEAR_SRCDIR="${GKPKG_DROPBEAR_SRCDIR:-dropbear-${GKPKG_DROPBEAR_PV}}" GKPKG_DROPBEAR_BINPKG="${GKPKG_DROPBEAR_BINPKG:-%%CACHE%%/dropbear-${GKPKG_DROPBEAR_PV}-%%ARCH%%.tar.xz}" +GKPKG_EUDEV_PN="eudev" +GKPKG_EUDEV_PV="${GKPKG_EUDEV_PV:-VERSION_EUDEV}" +GKPKG_EUDEV_DEPS="util-linux" +GKPKG_EUDEV_SRCTAR="${GKPKG_EUDEV_SRCTAR:-${DISTDIR}/eudev-${GKPKG_EUDEV_PV}.tar.gz}" +GKPKG_EUDEV_SRCDIR="${GKPKG_EUDEV_SRCDIR:-eudev-${GKPKG_EUDEV_PV}}" +GKPKG_EUDEV_BINPKG="${GKPKG_EUDEV_BINPKG:-%%CACHE%%/eudev-${GKPKG_EUDEV_PV}-%%ARCH%%.tar.xz}" + GKPKG_EXPAT_PN="expat" GKPKG_EXPAT_PV="${GKPKG_EXPAT_PV:-VERSION_EXPAT}" GKPKG_EXPAT_DEPS="" @@ -93,6 +100,13 @@ GKPKG_GPG_SRCTAR="${GKPKG_GPG_SRCTAR:-${DISTDIR}/gnupg-${GKPKG_GPG_PV}.tar.bz2}" GKPKG_GPG_SRCDIR="${GKPKG_GPG_SRCDIR:-gnupg-${GKPKG_GPG_PV}}" GKPKG_GPG_BINPKG="${GKPKG_GPG_BINPKG:-%%CACHE%%/gnupg-${GKPKG_GPG_PV}-%%ARCH%%.tar.xz}" +GKPKG_HWIDS_PN="hwids" +GKPKG_HWIDS_PV="${GKPKG_HWIDS_PV:-VERSION_HWIDS}" +GKPKG_HWIDS_DEPS="eudev" +GKPKG_HWIDS_SRCTAR="${GKPKG_HWIDS_SRCTAR:-${DISTDIR}/hwids-${GKPKG_HWIDS_PV}.tar.gz}" +GKPKG_HWIDS_SRCDIR="${GKPKG_HWIDS_SRCDIR:-hwids-${GKPKG_HWIDS_PV}}" +GKPKG_HWIDS_BINPKG="${GKPKG_HWIDS_BINPKG:-%%CACHE%%/hwids-${GKPKG_HWIDS_PV}-%%ARCH%%.tar.xz}" + GKPKG_ISCSI_PN="open-iscsi" GKPKG_ISCSI_PV="${GKPKG_ISCSI_PV:-VERSION_ISCSI}" GKPKG_ISCSI_DEPS="kmod zlib util-linux" @@ -137,7 +151,7 @@ GKPKG_LIBGPG_ERROR_BINPKG="${GKPKG_LIBGPG_ERROR_BINPKG:-%%CACHE%%/libgpg-error-$ GKPKG_LVM_PN="lvm" GKPKG_LVM_PV="${GKPKG_LVM_PV:-VERSION_LVM}" -GKPKG_LVM_DEPS="util-linux libaio" +GKPKG_LVM_DEPS="util-linux eudev libaio" GKPKG_LVM_SRCTAR="${GKPKG_LVM_SRCTAR:-${DISTDIR}/LVM2.${GKPKG_LVM_PV}.tgz}" GKPKG_LVM_SRCDIR="${GKPKG_LVM_SRCDIR:-LVM2.${GKPKG_LVM_PV}}" GKPKG_LVM_BINPKG="${GKPKG_LVM_BINPKG:-%%CACHE%%/LVM2.${GKPKG_LVM_PV}-%%ARCH%%.tar.xz}" diff --git a/defaults/unlock-luks.sh b/defaults/unlock-luks.sh index 6ca60e0d..87381ab9 100644 --- a/defaults/unlock-luks.sh +++ b/defaults/unlock-luks.sh @@ -109,6 +109,8 @@ main() { fi done + udevsettle + if [ -s "${LUKS_KEY}" ] then if ! is_debug diff --git a/doc/genkernel.8.txt b/doc/genkernel.8.txt index f84892c4..50f14716 100644 --- a/doc/genkernel.8.txt +++ b/doc/genkernel.8.txt @@ -725,6 +725,10 @@ recognized by the kernel itself. *gk.net.timeout.interface*=<...>:: By default we will wait up to 10 seconds for interface to show up. +*gk.udev.timeout*=<...>:: + By default we will wait up to 120 seconds (UDEV default) for + UDEV event queue to become empty. + *gk.prompt.timeout*=<...>:: By default a prompt within genkernel initramfs like shown when set *root* could not be found will never timeout. Use this option to set diff --git a/gen_funcs.sh b/gen_funcs.sh index 2dfae7da..b9aa5108 100755 --- a/gen_funcs.sh +++ b/gen_funcs.sh @@ -1113,6 +1113,24 @@ get_temp_file() { echo "${tempfile}" } +get_udevdir() { + local pkg_config=$(tc-getPKG_CONFIG) + + if ${pkg_config} --exists udev + then + local udevdir="$(${pkg_config} --variable=udevdir udev)" + + if [ -n "${BROOT}" ] + then + udevdir="${udevdir#${BROOT%/}}" + fi + else + udevdir="/lib/udev" + fi + + echo "${udevdir}" +} + get_useful_function_stack() { local end_function=${1:-${FUNCNAME}} local n_functions=${#FUNCNAME[@]} diff --git a/gen_initramfs.sh b/gen_initramfs.sh index fa6460ce..0669f740 100755 --- a/gen_initramfs.sh +++ b/gen_initramfs.sh @@ -178,6 +178,43 @@ log_future_cpio_content() { print_info 3 "=================================================================" 1 0 1 } +append_devicemanager() { + local PN="lvm" + local TDIR="${TEMP}/initramfs-dm-temp" + if [ -d "${TDIR}" ] + then + rm -r "${TDIR}" || gen_die "Failed to clean out existing '${TDIR}'!" + fi + + populate_binpkg ${PN} + + mkdir -p "${TDIR}" || gen_die "Failed to create '${TDIR}'!" + + unpack "$(get_gkpkg_binpkg "${PN}")" "${TDIR}" + + cd "${TDIR}" || gen_die "Failed to chdir to '${TDIR}'!" + + # Delete unneeded files + rm -rf \ + sbin/lvm \ + usr/include \ + usr/lib/device-mapper \ + usr/lib/pkgconfig \ + usr/lib/lib* \ + usr/sbin/lvm \ + usr/share + + log_future_cpio_content + find . -print0 | "${CPIO_COMMAND}" ${CPIO_ARGS} --append -F "${CPIO_ARCHIVE}" \ + || gen_die "Failed to append bcache to cpio!" + + cd "${TEMP}" || die "Failed to chdir to '${TEMP}'!" + if isTrue "${CLEANUP}" + then + rm -rf "${TDIR}" + fi +} + append_devices() { if isTrue "${BUSYBOX}" then @@ -217,10 +254,13 @@ append_devices() { dir /dev 0755 0 0 nod /dev/console 660 0 0 c 5 1 nod /dev/null 666 0 0 c 1 3 - nod /dev/zero 666 0 0 c 1 5 + nod /dev/random 600 0 0 c 1 8 nod /dev/tty0 600 0 0 c 4 0 nod /dev/tty1 600 0 0 c 4 1 nod /dev/ttyS0 600 0 0 c 4 64 + nod /dev/ttyS1 600 0 0 c 4 65 + nod /dev/urandom 600 0 0 c 1 9 + nod /dev/zero 666 0 0 c 1 5 EOF print_info 3 "=================================================================" 1 0 1 @@ -249,13 +289,12 @@ append_base_layout() { bin \ dev \ etc \ - etc/mdev/helpers \ lib \ lib/console \ lib/dracut \ mnt \ proc \ - run \ + run/lock \ sbin \ sys \ tmp \ @@ -269,6 +308,7 @@ append_base_layout() { done ln -s ../run var/run || gen_die "Failed to create symlink '${TDIR}/var/run' to '${TDIR}/run'!" + ln -s ../run/lock var/lock || gen_die "Failed to create symlink '${TDIR}/var/lock' to '${TDIR}/run/lock'!" chmod 1777 "${TDIR}"/tmp || gen_die "Failed to chmod of '${TDIR}/tmp' to 1777!" @@ -391,16 +431,6 @@ append_base_layout() { dd if=/dev/zero of="${TDIR}/run/utmp" bs=1 count=0 seek=0 &>/dev/null \ || die "Failed to create '${TDIR}/run/utmp'!" - print_info 2 "$(get_indent 2)>> Adding mdev config ..." - install -m 644 -t "${TDIR}"/etc "${GK_SHARE}"/mdev/mdev.conf \ - || gen_die "Failed to install '${GK_SHARE}/mdev/mdev.conf'!" - - install -m 755 -t "${TDIR}"/etc/mdev/helpers "${GK_SHARE}"/mdev/helpers/nvme \ - || gen_die "Failed to install '${GK_SHARE}/mdev/helpers/nvme'!" - - install -m 755 -t "${TDIR}"/etc/mdev/helpers "${GK_SHARE}"/mdev/helpers/storage-device \ - || gen_die "Failed to install '${GK_SHARE}/mdev/helpers/storage-device'!" - cd "${TDIR}" || gen_die "Failed to chdir to '${TDIR}'!" log_future_cpio_content find . -print0 | "${CPIO_COMMAND}" ${CPIO_ARGS} --append -F "${CPIO_ARCHIVE}" \ @@ -499,6 +529,59 @@ append_e2fsprogs() { fi } +append_eudev() { + local PN=eudev + local TDIR="${TEMP}/initramfs-${PN}-temp" + if [ -d "${TDIR}" ] + then + rm -r "${TDIR}" || gen_die "Failed to clean out existing '${TDIR}'!" + fi + + populate_binpkg ${PN} + populate_binpkg hwids + + mkdir "${TDIR}" || gen_die "Failed to create '${TDIR}'!" + + unpack "$(get_gkpkg_binpkg "${PN}")" "${TDIR}" + unpack "$(get_gkpkg_binpkg hwids)" "${TDIR}" + + cd "${TDIR}" || gen_die "Failed to chdir to '${TDIR}'!" + + if isTrue "$(can_run_programs_compiled_by_genkernel)" + then + print_info 2 "$(get_indent 2)${PN}: >> Pre-generating initramfs' /etc/udev/hwdb.bin ..." + + local gen_hwdb_cmd=( "${TDIR}/usr/bin/udevadm" ) + gen_hwdb_cmd+=( hwdb --update --root "${TDIR}" ) + print_info 3 "COMMAND: ${gen_hwdb_cmd[*]}" 1 0 1 + eval "${gen_hwdb_cmd[@]}" || gen_die "Failed to pre-generate initramfs' /etc/udev/hwdb.bin!" + + # Now that we have a pre-generated hwdb in initramfs + # we can delete source files + rm -rf usr/lib/udev/hwdb.d/ + fi + + # Delete unneeded files + rm -rf usr/include \ + usr/lib/libu* \ + usr/lib/pkgconfig \ + usr/share + + # Disable predictable network interface names in initramfs + echo "" > usr/lib/udev/rules.d/80-net-name-slot.rules \ + || gen_die "Failed to disable predictable network interface naming rule" + + log_future_cpio_content + find . -print0 | "${CPIO_COMMAND}" ${CPIO_ARGS} --append -F "${CPIO_ARCHIVE}" \ + || gen_die "Failed to append ${PN} to cpio!" + + cd "${TEMP}" || die "Failed to chdir to '${TEMP}'!" + if isTrue "${CLEANUP}" + then + rm -rf "${TDIR}" + fi +} + append_b2sum() { local PN="coreutils" local TDIR="${TEMP}/initramfs-b2sum-temp" @@ -648,8 +731,6 @@ append_dmraid() { usr/share \ usr/include - mkdir -p "${TDIR}"/var/lock/dmraid || gen_die "Failed to create '${TDIR}/var/lock/dmraid'!" - log_future_cpio_content find . -print0 | "${CPIO_COMMAND}" ${CPIO_ARGS} --append -F "${CPIO_ARCHIVE}" \ || gen_die "Failed to append dmraid to cpio!" @@ -715,7 +796,10 @@ append_lvm() { # Delete unneeded files rm -rf \ - usr/lib \ + usr/lib/device-mapper \ + usr/lib/pkgconfig \ + usr/lib/lib* \ + usr/sbin/dm* \ usr/share \ usr/include @@ -743,7 +827,8 @@ append_lvm() { # Some LVM config options need changing, because the functionality is # not compiled in: sed -r -i \ - -e '/^[[:space:]]*obtain_device_list_from_udev/s,=.*,= 0,g' \ + -e '/^[[:space:]]*obtain_device_list_from_udev/s,=.*,= 1,g' \ + -e '/^[[:space:]]*udev_sync/s,=.*,= 1,g' \ -e '/^[[:space:]]*use_lvmetad/s,=.*,= 0,g' \ -e '/^[[:space:]]*use_lvmlockd/s,=.*,= 0,g' \ -e '/^[[:space:]]*use_lvmpolld/s,=.*,= 0,g' \ @@ -1770,6 +1855,8 @@ create_initramfs() { CPIO_ARCHIVE="${TMPDIR}/${GK_FILENAME_TEMP_INITRAMFS}" append_data 'devices' # WARNING, must be first! append_data 'base_layout' + append_data 'eudev' + append_data 'devicemanager' append_data 'auxilary' "${BUSYBOX}" append_data 'busybox' "${BUSYBOX}" append_data 'blkid' "${DISKLABEL}" diff --git a/gkbuilds/eudev.gkbuild b/gkbuilds/eudev.gkbuild new file mode 100644 index 00000000..54f2c0df --- /dev/null +++ b/gkbuilds/eudev.gkbuild @@ -0,0 +1,40 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +src_configure() { + local myconf=( + --enable-static + --enable-blkid + --disable-introspection + --disable-manpages + --disable-selinux + --disable-rule-generator + --disable-hwdb + ) + + # Cannot link against static kmod, https://lists.freedesktop.org/archives/systemd-devel/2013-June/011173.html + myconf+=( --disable-kmod ) + + gkconf "${myconf[@]}" +} + +src_install() { + default + + local files_to_strip=() + files_to_strip+=( /usr/bin/udevadm ) + files_to_strip+=( /usr/lib/udev/ata_id ) + files_to_strip+=( /usr/lib/udev/cdrom_id ) + files_to_strip+=( /usr/lib/udev/collect ) + files_to_strip+=( /usr/lib/udev/mtd_probe ) + files_to_strip+=( /usr/lib/udev/scsi_id ) + files_to_strip+=( /usr/lib/udev/v4l_id ) + files_to_strip+=( /usr/sbin/udevd ) + + local file_to_strip= + for file_to_strip in "${files_to_strip[@]}" + do + "${STRIP}" --strip-all "${D}"${file_to_strip} \ + || die "Failed to strip '${D}${file_to_strip}'!" + done +} diff --git a/gkbuilds/hwids.gkbuild b/gkbuilds/hwids.gkbuild new file mode 100644 index 00000000..60492c50 --- /dev/null +++ b/gkbuilds/hwids.gkbuild @@ -0,0 +1,35 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +S="${WORKDIR}/hwids-${P}" + +_emake() { + gkmake \ + V=1 \ + NET=yes \ + PCI=yes \ + UDEV=yes \ + USB=yes \ + "$@" +} + +src_prepare() { + default + + # we cannot run host's udevadm + sed -i -e '/udevadm hwdb/d' Makefile || die +} + +src_compile() { + _emake +} + +src_install() { + _emake \ + HWDBDIR="$(get_udevdir)/hwdb.d" \ + DESTDIR="${D}" \ + install + + rm -rf \ + "${D}"/usr/share +} diff --git a/gkbuilds/lvm.gkbuild b/gkbuilds/lvm.gkbuild index 3af06e67..1346cb0f 100644 --- a/gkbuilds/lvm.gkbuild +++ b/gkbuilds/lvm.gkbuild @@ -1,8 +1,8 @@ -# Copyright 1999-2019 Gentoo Authors +# Copyright 1999-2020 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 src_configure() { - + # devicemapper needs to find udev append-ldflags -Wl,-rpath-link,${BROOT}/usr/lib export ac_cv_header_security_pam_misc_h=no @@ -23,8 +23,8 @@ src_configure() { --with-thin=internal --with-cache=internal --disable-udev-systemd-background-jobs - --disable-udev_sync - --disable-udev_rules + --enable-udev_sync + --enable-udev_rules ) local texec diff --git a/mdev/helpers/nvme b/mdev/helpers/nvme deleted file mode 100644 index 7df96a37..00000000 --- a/mdev/helpers/nvme +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -[ -z "${MDEV}" ] && exit 22 - -DEV="${MDEV%p*}" -PART="${MDEV#nvme?n?p}" -PART="${PART#nvme?n?}" - -[ -f "/sys/class/block/${DEV}/device/model" ] || exit 6 -cat "/sys/class/block/${DEV}/device/model" >/dev/null 2>&1 || exit 15 - -MODEL=$(cat /sys/class/block/"${DEV}"/device/model) -MODEL=$(echo $MODEL) # leave unquoted, it removes spaces -MODEL="${MODEL// /_}" -SERIAL=$(cat /sys/class/block/"${DEV}"/device/serial) -SERIAL="${SERIAL// /}" -WWID=$(cat /sys/class/block/"${DEV}"/wwid) - -mkdir -p /dev/disk/by-id -ln -sf "../../${MDEV}" "/dev/disk/by-id/nvme-${MODEL}_${SERIAL}${PART:+-part$PART}" -ln -sf "../../${MDEV}" "/dev/disk/by-id/nvme-${WWID}${PART:+-part$PART}" diff --git a/mdev/helpers/storage-device b/mdev/helpers/storage-device deleted file mode 100644 index 473b1b74..00000000 --- a/mdev/helpers/storage-device +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh -# License: Creative Commons Public Domain Dedication (CC0 1.0) -# <https://creativecommons.org/publicdomain/zero/1.0/> - -[ -z "${MDEV}" ] && exit 22 - -DEV="$(echo ${MDEV} | sed 's/\(.*[a-z]\)\(.*\)/\1/')" -PART="$(echo ${MDEV} | sed 's/\(.*[a-z]\)\(.*\)/\2/')" - -case $DEV in -vd*) - TYPE=virtio - ;; -sd*) - TYPE=ata - ;; -*) - exit 33 - ;; -esac - -NAME= -if [ -f "/sys/class/block/${DEV}/device/vpd_pg83" ] -then - # An existing vpd_pg83 node can still fail to read, #569990 - if cat "/sys/class/block/${DEV}/device/vpd_pg83" >/dev/null 2>&1 - then - NAME=$(echo "$(cat "/sys/class/block/${DEV}/device/vpd_pg83")" | cut -c 36-95 | sed -e 's/ \+/_/g' -e "s/\(.*\)_/${TYPE}-\1${PART:+-part$PART}/") - fi -fi - -if [ -z "${NAME}" -a -x "/lib/udev/scsi_id" ] -then - # Some systems like VMware don't expose Vital Product Data (VPD) via sysfs - # but will expose at least some information when VM setting "disk.EnableUUID" - # is set. - if /lib/udev/scsi_id -p 0x83 -g -d "/dev/${DEV}" >/dev/null 2>&1 - then - TYPE=scsi - SERIAL=$(/lib/udev/scsi_id -p 0x83 -g -d "/dev/${DEV}" 2>/dev/null) - SERIAL="${SERIAL// /}" - if [ -n "${SERIAL}" ] - then - NAME="${TYPE}-${SERIAL}${PART:+-part$PART}" - fi - fi -fi - -[ -z "${NAME}" ] && exit 44 - -mkdir -p /dev/disk/by-id -ln -sf "../../${MDEV}" "/dev/disk/by-id/${NAME}" diff --git a/mdev/mdev.conf b/mdev/mdev.conf deleted file mode 100644 index 4aae0c4e..00000000 --- a/mdev/mdev.conf +++ /dev/null @@ -1,40 +0,0 @@ -# genkernel mdev.conf - -# Syntax: -# [-]devicename_regex user:group mode [=path]|[>path]|[!] [@|$|*cmd args...] -# [-]$ENVVAR=regex user:group mode [=path]|[>path]|[!] [@|$|*cmd args...] -# [-]@maj,min[-min2] user:group mode [=path]|[>path]|[!] [@|$|*cmd args...] -# -# [-]: do not stop on this match, continue reading mdev.conf -# =: move, >: move and create a symlink -# !: do not create device node -# @|$|*: run@cmd if $ACTION=add, $cmd if $ACTION=remove, *cmd in all cases - -# null may already exist; therefore ownership has to be changed with command -null 0:0 666 @chmod 666 $MDEV -zero 0:0 666 -full 0:0 666 -random 0:0 444 -urandom 0:0 444 -hwrandom 0:0 444 -hw_random 0:0 600 =hwrng - -# console may already exist; therefore ownership has to be changed with command -console 0:5 600 @chmod 600 $MDEV - -# Typical devices -tty 0:5 666 -tty[0-9]* 0:5 660 -ttyS[0-9]* 0:14 660 - -# block devices -nvme[0-9]n[0-9].* 0:6 660 @/etc/mdev/helpers/nvme -sd[a-z].* 0:6 660 @/etc/mdev/helpers/storage-device -vd[a-z].* 0:6 660 @/etc/mdev/helpers/storage-device - -# raid controllers -cciss!(.*) 0:6 660 =cciss/%1 -ida!(.*) 0:6 660 =ida/%1 -rd!(.*) 0:6 660 =rd/%1 - -fuse 0:0 666 diff --git a/patches/eudev/3.2.9/eudev-3.2.9-static.patch b/patches/eudev/3.2.9/eudev-3.2.9-static.patch new file mode 100644 index 00000000..fc36b547 --- /dev/null +++ b/patches/eudev/3.2.9/eudev-3.2.9-static.patch @@ -0,0 +1,97 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -261,7 +261,7 @@ AC_ARG_ENABLE(kmod, AS_HELP_STRING([--disable-kmod], [disable loadable modules s + if test "x$enable_kmod" != "xno"; then + PKG_CHECK_EXISTS([ libkmod ], have_kmod=yes, have_kmod=no) + if test "x$have_kmod" = "xyes"; then +- PKG_CHECK_MODULES(KMOD, [ libkmod >= 15 ], ++ PKG_CHECK_MODULES_STATIC(KMOD, [ libkmod >= 15 ], + [AC_DEFINE(HAVE_KMOD, 1, [Define if kmod is available])], + AC_MSG_ERROR([*** kmod version >= 15 not found])) + fi +--- a/src/ata_id/Makefile.am ++++ b/src/ata_id/Makefile.am +@@ -11,6 +11,8 @@ udevlibexec_PROGRAMS = \ + ata_id_SOURCES = \ + ata_id.c + ++ata_id_LDFLAGS = -all-static ++ + ata_id_LDADD = \ + $(top_builddir)/src/libudev/libudev-private.la \ + $(top_builddir)/src/udev/libudev-core.la +--- a/src/cdrom_id/Makefile.am ++++ b/src/cdrom_id/Makefile.am +@@ -10,6 +10,8 @@ udevlibexec_PROGRAMS = \ + cdrom_id_SOURCES = \ + cdrom_id.c + ++cdrom_id_LDFLAGS = -all-static ++ + cdrom_id_LDADD = \ + $(top_builddir)/src/libudev/libudev-private.la \ + $(top_builddir)/src/udev/libudev-core.la +--- a/src/collect/Makefile.am ++++ b/src/collect/Makefile.am +@@ -11,6 +11,8 @@ udevlibexec_PROGRAMS = \ + collect_SOURCES = \ + collect.c + ++collect_LDFLAGS = -all-static ++ + collect_LDADD = \ + $(top_builddir)/src/libudev/libudev-private.la \ + $(top_builddir)/src/udev/libudev-core.la +--- a/src/mtd_probe/Makefile.am ++++ b/src/mtd_probe/Makefile.am +@@ -6,6 +6,8 @@ AM_CPPFLAGS = \ + udevlibexec_PROGRAMS = \ + mtd_probe + ++mtd_probe_LDFLAGS = -all-static ++ + mtd_probe_SOURCES = \ + mtd_probe.c \ + mtd_probe.h \ +--- a/src/scsi_id/Makefile.am ++++ b/src/scsi_id/Makefile.am +@@ -14,6 +14,8 @@ scsi_id_SOURCES =\ + scsi.h \ + scsi_id.h + ++scsi_id_LDFLAGS = -all-static ++ + scsi_id_LDADD = \ + $(top_builddir)/src/libudev/libudev-private.la \ + $(top_builddir)/src/udev/libudev-core.la +--- a/src/udev/Makefile.am ++++ b/src/udev/Makefile.am +@@ -22,6 +22,8 @@ sbin_PROGRAMS = \ + udevd_SOURCES = \ + udevd.c + ++udevd_LDFLAGS = -all-static ++ + udevd_LDADD = \ + libudev-core.la + +@@ -38,6 +40,7 @@ udevadm_SOURCES = \ + udevadm-util.c \ + udevadm-util.h + ++udevadm_LDFLAGS = -all-static + + udevadm_LDADD = \ + libudev-core.la +--- a/src/v4l_id/Makefile.am ++++ b/src/v4l_id/Makefile.am +@@ -9,6 +9,8 @@ udevlibexec_PROGRAMS = \ + v4l_id_SOURCES = \ + v4l_id.c + ++v4l_id_LDFLAGS = -all-static ++ + v4l_id_LDADD = \ + $(top_builddir)/src/libudev/libudev-private.la \ + $(top_builddir)/src/udev/libudev-core.la + diff --git a/worker_modules/gkbuild.sh b/worker_modules/gkbuild.sh index 668bb8f0..7284d842 100644 --- a/worker_modules/gkbuild.sh +++ b/worker_modules/gkbuild.sh @@ -365,7 +365,7 @@ _initialize() { # https://git.dereferenced.org/pkgconf/pkgconf/issues/30 unset PKG_CONFIG_PATH PKG_CONFIG_DIR LIBRARY_PATH - export PKG_CONFIG_LIBDIR=\${SYSROOT}/usr/lib/pkgconfig + export PKG_CONFIG_LIBDIR=\${SYSROOT}/usr/lib/pkgconfig:\${SYSROOT}/usr/share/pkgconfig export PKG_CONFIG_SYSROOT_DIR=\${SYSROOT} exec pkg-config "\$@" |