aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--defaults/initrd.defaults1
-rw-r--r--defaults/initrd.scripts62
-rw-r--r--defaults/linuxrc68
-rw-r--r--defaults/software.sh16
-rw-r--r--defaults/unlock-luks.sh2
-rw-r--r--doc/genkernel.8.txt4
-rwxr-xr-xgen_funcs.sh18
-rwxr-xr-xgen_initramfs.sh121
-rw-r--r--gkbuilds/eudev.gkbuild40
-rw-r--r--gkbuilds/hwids.gkbuild35
-rw-r--r--gkbuilds/lvm.gkbuild8
-rw-r--r--mdev/helpers/nvme21
-rw-r--r--mdev/helpers/storage-device52
-rw-r--r--mdev/mdev.conf40
-rw-r--r--patches/eudev/3.2.9/eudev-3.2.9-static.patch97
-rw-r--r--worker_modules/gkbuild.sh2
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 "\$@"