From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id E4D65138335 for ; Sun, 14 Jul 2019 13:00:43 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 47E8CE08D9; Sun, 14 Jul 2019 13:00:37 +0000 (UTC) Received: from smtp.gentoo.org (dev.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 1AF99E08C9 for ; Sun, 14 Jul 2019 13:00:37 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 5F30A347AA3 for ; Sun, 14 Jul 2019 13:00:35 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 8538C72F for ; Sun, 14 Jul 2019 13:00:30 +0000 (UTC) From: "Thomas Deutschmann" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Thomas Deutschmann" Message-ID: <1563105498.f45c5b7b61b0bd0329cd6ca972a044035ff5b7eb.whissi@gentoo> Subject: [gentoo-commits] proj/genkernel:master commit in: / X-VCS-Repository: proj/genkernel X-VCS-Files: gen_initramfs.sh X-VCS-Directories: / X-VCS-Committer: whissi X-VCS-Committer-Name: Thomas Deutschmann X-VCS-Revision: f45c5b7b61b0bd0329cd6ca972a044035ff5b7eb X-VCS-Branch: master Date: Sun, 14 Jul 2019 13:00:30 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 1d3804c9-3ae4-4331-a323-0afaad811125 X-Archives-Hash: e1c6d9ba0baf695b1cce3b3cd7095c2e commit: f45c5b7b61b0bd0329cd6ca972a044035ff5b7eb Author: Thomas Deutschmann gentoo org> AuthorDate: Sun Jul 14 09:58:55 2019 +0000 Commit: Thomas Deutschmann gentoo org> CommitDate: Sun Jul 14 11:58:18 2019 +0000 URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=f45c5b7b gen_initramfs.sh: Refactor create_initramfs() Signed-off-by: Thomas Deutschmann gentoo.org> gen_initramfs.sh | 197 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 109 insertions(+), 88 deletions(-) diff --git a/gen_initramfs.sh b/gen_initramfs.sh index 7723204..df168d8 100755 --- a/gen_initramfs.sh +++ b/gen_initramfs.sh @@ -1358,7 +1358,7 @@ append_data() { } create_initramfs() { - local lddtree_testfile=`which cpio 2>/dev/null` + local lddtree_testfile=$(which cpio 2>/dev/null) if [[ -z "${lddtree_testfile}" || ! -e "${lddtree_testfile}" ]]; then print_warning 1 "cpio binary not found -- cannot check if lddtree is working!" elif ! lddtree "${lddtree_testfile}" 1>/dev/null 2>&1; then @@ -1366,42 +1366,29 @@ create_initramfs() { fi local compress_ext="" - print_info 1 "initramfs: >> Initializing..." + print_info 1 "initramfs: >> Initializing ..." # Create empty cpio CPIO="${TMPDIR}/initramfs-${KV}" append_data 'devices' # WARNING, must be first! append_data 'base_layout' append_data 'auxilary' "${BUSYBOX}" + append_data 'blkid' "${DISKLABEL}" + append_data 'btrfs' "${BTRFS}" append_data 'busybox' "${BUSYBOX}" - isTrue "${CMD_E2FSPROGS}" && append_data 'e2fsprogs' - append_data 'lvm' "${LVM}" append_data 'dmraid' "${DMRAID}" + append_data 'dropbear' "${SSH}" + append_data 'e2fsprogs' "${E2FSPROGS}" + append_data 'gpg' "${GPG}" append_data 'iscsi' "${ISCSI}" - append_data 'mdadm' "${MDADM}" append_data 'luks' "${LUKS}" - append_data 'dropbear' "${SSH}" + append_data 'lvm' "${LVM}" + append_data 'mdadm' "${MDADM}" + append_data 'modprobed' append_data 'multipath' "${MULTIPATH}" - append_data 'gpg' "${GPG}" - - if isTrue "${RAMDISKMODULES}" - then - append_data 'modules' - else - print_info 1 "initramfs: Not copying modules..." - fi - - append_data 'zfs' "${ZFS}" - - append_data 'btrfs' "${BTRFS}" - - append_data 'blkid' "${DISKLABEL}" - - append_data 'unionfs_fuse' "${UNIONFS}" - append_data 'splash' "${SPLASH}" - - append_data 'modprobed' + append_data 'unionfs_fuse' "${UNIONFS}" + append_data 'zfs' "${ZFS}" if isTrue "${ZFS}" then @@ -1413,8 +1400,15 @@ create_initramfs() { append_data 'firmware' fi + if isTrue "${RAMDISKMODULES}" + then + append_data 'modules' + else + print_info 1 "$(get_indent 1)>> Not copying modules due to --no-ramdisk-modules ..." + fi + # This should always be appended last - if [ "${INITRAMFS_OVERLAY}" != '' ] + if [ -n "${INITRAMFS_OVERLAY}" ] then append_data 'overlay' fi @@ -1423,40 +1417,51 @@ create_initramfs() { then append_data 'linker' else - print_info 2 "initramfs: Not appending linker because no binaries have been copied ..." + print_info 2 "$(get_indent 1)>> Not appending linker because no binaries have been copied ..." fi # Finalize cpio by removing duplicate files # TODO: maybe replace this with: # http://search.cpan.org/~pixel/Archive-Cpio-0.07/lib/Archive/Cpio.pm # as then we can dedupe ourselves... - if [[ $UID -eq 0 ]]; then - print_info 1 "$(getIndent 1)>> Deduping cpio..." + if [[ $UID -eq 0 ]] + then + print_info 1 "$(get_indent 1)>> Deduping cpio ..." local TDIR="${TEMP}/initramfs-final" - mkdir -p "${TDIR}" - cd "${TDIR}" + mkdir -p "${TDIR}" || gen_die "Failed to create '${TDIR}'!" + cd "${TDIR}" || gen_die "Failed to chdir to '${TDIR}'!" + + cpio --quiet -i -F "${CPIO}" 2>/dev/null \ + || gen_die "Failed to extract cpio '${CPIO}' for dedupe" + + if [ -e etc/ld.so.cache ] && ! isTrue "$(tc-is-cross-compiler)" + then + # We can update /etc/ld.so.cache which was copied from host + # to actually match initramfs' content. + print_info 1 "$(get_indent 1)>> Pre-generating initramfs' /etc/ld.so.cache ..." + ldconfig -r . 2>/dev/null \ + || gen_die "Failed to pre-generate '${TDIR}/etc/ld.so.cache'!" + fi - cpio --quiet -i -F "${CPIO}" 2> /dev/null \ - || gen_die "extracting cpio for dedupe" find . -print | cpio ${CPIO_ARGS} -F "${CPIO}" 2>/dev/null \ || gen_die "rebuilding cpio for dedupe" - cd "${TEMP}" - rm -rf "${TDIR}" else - print_info 1 "$(getIndent 1)>> Cannot deduping cpio contents without root; skipping" + print_info 1 "$(get_indent 1)>> Cannot deduping cpio contents without root; Skipping ..." fi - cd "${TEMP}" + cd "${TEMP}" || gen_die "Failed to chdir to '${TEMP}'" # NOTE: We do not work with ${KERNEL_CONFIG} here, since things like # "make oldconfig" or --noclean could be in effect. - if [ -f "${KERNEL_OUTPUTDIR}"/.config ]; then + if [ -f "${KERNEL_OUTPUTDIR}"/.config ] + then local ACTUAL_KERNEL_CONFIG="${KERNEL_OUTPUTDIR}"/.config else local ACTUAL_KERNEL_CONFIG="${KERNEL_CONFIG}" fi - if [[ "$(file --brief --mime-type "${ACTUAL_KERNEL_CONFIG}")" == application/x-gzip ]]; then + if [[ "$(file --brief --mime-type "${ACTUAL_KERNEL_CONFIG}")" == application/x-gzip ]] + then # Support --kernel-config=/proc/config.gz, mainly local CONFGREP=zgrep else @@ -1468,10 +1473,10 @@ create_initramfs() { # Explicitly do not compress if we are integrating into the kernel. # The kernel will do a better job of it than us. mv ${TMPDIR}/initramfs-${KV} ${TMPDIR}/initramfs-${KV}.cpio - sed -i '/^.*CONFIG_INITRAMFS_SOURCE=.*$/d' "${KERNEL_OUTPUTDIR}/.config" || - gen_die "failed to delete CONFIG_INITRAMFS_SOURCE from '${KERNEL_OUTPUTDIR}/.config'" + sed -i '/^.*CONFIG_INITRAMFS_SOURCE=.*$/d' "${KERNEL_OUTPUTDIR}/.config" \ + || gen_die "failed to delete CONFIG_INITRAMFS_SOURCE from '${KERNEL_OUTPUTDIR}/.config'" - compress_config='INITRAMFS_COMPRESSION_NONE' + local compress_config='INITRAMFS_COMPRESSION_NONE' case ${compress_ext} in gz) compress_config='INITRAMFS_COMPRESSION_GZIP' ;; bz2) compress_config='INITRAMFS_COMPRESSION_BZIP2' ;; @@ -1481,6 +1486,7 @@ create_initramfs() { lz4) compress_config='INITRAMFS_COMPRESSION_LZ4' ;; *) compress_config='INITRAMFS_COMPRESSION_NONE' ;; esac + # All N default except XZ, so there it gets used if the kernel does # compression on it's own. cat >>${KERNEL_OUTPUTDIR}/.config <<-EOF @@ -1499,23 +1505,24 @@ create_initramfs() { else if isTrue "${COMPRESS_INITRD}" then - cmd_xz=$(type -p xz) - cmd_lzma=$(type -p lzma) - cmd_bzip2=$(type -p bzip2) - cmd_gzip=$(type -p gzip) - cmd_lzop=$(type -p lzop) - cmd_lz4=$(type -p lz4) - pkg_xz='app-arch/xz-utils' - pkg_lzma='app-arch/xz-utils' - pkg_bzip2='app-arch/bzip2' - pkg_gzip='app-arch/gzip' - pkg_lzop='app-arch/lzop' - pkg_lz4='app-arch/lz4' + local cmd_xz=$(type -p xz) + local cmd_lzma=$(type -p lzma) + local cmd_bzip2=$(type -p bzip2) + local cmd_gzip=$(type -p gzip) + local cmd_lzop=$(type -p lzop) + local cmd_lz4=$(type -p lz4) + local pkg_xz='app-arch/xz-utils' + local pkg_lzma='app-arch/xz-utils' + local pkg_bzip2='app-arch/bzip2' + local pkg_gzip='app-arch/gzip' + local pkg_lzop='app-arch/lzop' + local pkg_lz4='app-arch/lz4' local compression case ${COMPRESS_INITRD_TYPE} in xz|lzma|bzip2|gzip|lzop|lz4) compression=${COMPRESS_INITRD_TYPE} ;; lzo) compression=lzop ;; best|fastest) + local tuple for tuple in \ 'CONFIG_RD_XZ cmd_xz xz' \ 'CONFIG_RD_LZMA cmd_lzma lzma' \ @@ -1525,10 +1532,10 @@ create_initramfs() { 'CONFIG_RD_LZ4 cmd_lz4 lz4' \ ; do set -- ${tuple} - kernel_option=$1 - cmd_variable_name=$2 + local kernel_option=${1} + local cmd_variable_name=${2} if ${CONFGREP} -q "^${kernel_option}=y" "${ACTUAL_KERNEL_CONFIG}" && test -n "${!cmd_variable_name}" ; then - compression=$3 + compression=${3} [[ ${COMPRESS_INITRD_TYPE} == best ]] && break fi done @@ -1540,11 +1547,12 @@ create_initramfs() { esac # Check for actual availability - cmd_variable_name=cmd_${compression} - pkg_variable_name=pkg_${compression} + local cmd_variable_name=cmd_${compression} + local pkg_variable_name=pkg_${compression} [[ -z "${!cmd_variable_name}" ]] && gen_die "Compression '${compression}' is not available. Please install package '${!pkg_variable_name}'." - case $compression in + local compress_ext compress_cmd + case ${compression} in xz) compress_ext='.xz' compress_cmd="${cmd_xz} -e --check=none -z -f -9" ;; lzma) compress_ext='.lzma' compress_cmd="${cmd_lzma} -z -f -9" ;; bzip2) compress_ext='.bz2' compress_cmd="${cmd_bzip2} -z -f -9" ;; @@ -1553,13 +1561,14 @@ create_initramfs() { lz4) compress_ext='.lz4' compress_cmd="${cmd_lz4} -f -9 -l -q" ;; esac - if [ -n "${compression}" ]; then - print_info 1 "$(getIndent 1)>> Compressing cpio data (${compress_ext})..." - print_info 5 "$(getIndent 1)>> Compression command (${compress_cmd} $CPIO)..." + if [ -n "${compression}" ] + then + print_info 1 "$(get_indent 1)>> Compressing cpio data (${compress_ext}) ..." + print_info 2 "COMMAND: ${compress_cmd} $CPIO" 1 0 1 ${compress_cmd} "${CPIO}" || gen_die "Compression (${compress_cmd}) failed" mv -f "${CPIO}${compress_ext}" "${CPIO}" || gen_die "Rename failed" else - print_info 1 "$(getIndent 1)>> Not compressing cpio data ..." + print_info 1 "$(get_indent 1)>> Not compressing cpio data ..." fi fi @@ -1567,55 +1576,66 @@ create_initramfs() { ## mostly laid out in linux/Documentation/x86/early-microcode.txt ## It only loads monolithic ucode from an uncompressed cpio, which MUST ## be before the other cpio archives in the stream. - cfg_CONFIG_MICROCODE=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE) - if isTrue "${MICROCODE_INITRAMFS}" && [ "${cfg_CONFIG_MICROCODE}" == "y" ]; then - if [[ "${MICROCODE}" == intel ]]; then + local cfg_CONFIG_MICROCODE=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE) + if isTrue "${MICROCODE_INITRAMFS}" && [ "${cfg_CONFIG_MICROCODE}" == "y" ] + then + if [[ "${MICROCODE}" == intel ]] + then # Only show this information for Intel users because we have no mechanism yet # to generate amd-*.img in /boot after sys-kernel/linux-firmware update print_info 1 "MICROCODE_INITRAMFS option is enabled by default for compatability but made obsolete by >=sys-boot/grub-2.02-r1" fi - cfg_CONFIG_MICROCODE_INTEL=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_INTEL) - cfg_CONFIG_MICROCODE_AMD=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_AMD) - print_info 1 "$(getIndent 1)>> Adding early-microcode support..." - UCODEDIR="${TEMP}/ucode_tmp/kernel/x86/microcode/" - mkdir -p "${UCODEDIR}" - if [ "${cfg_CONFIG_MICROCODE_INTEL}" == "y" ]; then - if [ -d /lib/firmware/intel-ucode ]; then - print_info 1 "$(getIndent 2)early-microcode: Adding GenuineIntel.bin..." + local cfg_CONFIG_MICROCODE_INTEL=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_INTEL) + local cfg_CONFIG_MICROCODE_AMD=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}"/.config CONFIG_MICROCODE_AMD) + print_info 1 "$(get_indent 1)>> Adding early-microcode support ..." + local UCODEDIR="${TEMP}/ucode_tmp/kernel/x86/microcode/" + mkdir -p "${UCODEDIR}" || gen_die "Failed to create '${UCODEDIR}'!" + + if [[ "${cfg_CONFIG_MICROCODE_INTEL}" == "y" ]] + then + if [ -d /lib/firmware/intel-ucode ] + then + print_info 1 "$(get_indent 2)early-microcode: Adding GenuineIntel.bin ..." cat /lib/firmware/intel-ucode/* > "${UCODEDIR}/GenuineIntel.bin" || gen_die "Failed to concat intel cpu ucode" else - print_info 1 "$(getIndent 2)early-microcode: CONFIG_MICROCODE_INTEL=y set but no ucode available. Please install sys-firmware/intel-microcode[split-ucode]" + print_info 1 "$(get_indent 2)early-microcode: CONFIG_MICROCODE_INTEL=y set but no ucode available. Please install sys-firmware/intel-microcode[split-ucode]" fi fi - if [ "${cfg_CONFIG_MICROCODE_AMD}" == "y" ]; then - if [ -d /lib/firmware/amd-ucode ]; then - print_info 1 "$(getIndent 2)early-microcode: Adding AuthenticAMD.bin..." + + if [[ "${cfg_CONFIG_MICROCODE_AMD}" == "y" ]] + then + if [ -d /lib/firmware/amd-ucode ] + then + print_info 1 "$(get_indent 2)early-microcode: Adding AuthenticAMD.bin ..." cat /lib/firmware/amd-ucode/*.bin > "${UCODEDIR}/AuthenticAMD.bin" || gen_dir "Failed to concat amd cpu ucode" else - print_info 1 "$(getIndent 2)early-microcode: CONFIG_MICROCODE_AMD=y set but no ucode available. Please install sys-firmware/linux-firmware" + print_info 1 "$(get_indent 2)early-microcode: CONFIG_MICROCODE_AMD=y set but no ucode available. Please install sys-firmware/linux-firmware" fi fi - if [ -f "${UCODEDIR}/AuthenticAMD.bin" -o -f "${UCODEDIR}/GenuineIntel.bin" ]; then - print_info 1 "$(getIndent 2)early-microcode: Creating cpio..." + + if [ -f "${UCODEDIR}/AuthenticAMD.bin" -o -f "${UCODEDIR}/GenuineIntel.bin" ] + then + print_info 1 "$(get_indent 2)early-microcode: Creating cpio ..." pushd "${TEMP}/ucode_tmp" > /dev/null find . | cpio -o -H newc > ../ucode.cpio || gen_die "Failed to create cpu microcode cpio" popd > /dev/null - print_info 1 "$(getIndent 2)early-microcode: Prepending early-microcode to initramfs..." + print_info 1 "$(get_indent 2)early-microcode: Prepending early-microcode to initramfs ..." cat "${TEMP}/ucode.cpio" "${CPIO}" > "${CPIO}.early-microcode" || gen_die "Failed to prepend early-microcode to initramfs" mv -f "${CPIO}.early-microcode" "${CPIO}" || gen_die "Rename failed" else - print_info 1 "$(getIndent 2)early-microcode: CONFIG_MICROCODE=y is set but no microcode found" - print_info 1 "$(getIndent 2)early-microcode: You can disable MICROCODE_INITRAMFS option if you use your bootloader to load AMD/Intel ucode initrd" + print_info 1 "$(get_indent 2)early-microcode: CONFIG_MICROCODE=y is set but no microcode found" + print_info 1 "$(get_indent 2)early-microcode: You can disable MICROCODE_INITRAMFS option if you use your bootloader to load AMD/Intel ucode initrd" fi fi + if isTrue "${WRAP_INITRD}" then local mkimage_cmd=$(type -p mkimage) [[ -z ${mkimage_cmd} ]] && gen_die "mkimage is not available. Please install package 'dev-embedded/u-boot-tools'." local mkimage_args="-A ${ARCH} -O linux -T ramdisk -C ${compression:-none} -a 0x00000000 -e 0x00000000" - print_info 1 "$(getIndent 1)>> Wrapping initramfs using mkimage..." - print_info 2 "$(getIndent 1)${mkimage_cmd} ${mkimage_args} -n initramfs-${KV} -d ${CPIO} ${CPIO}.uboot" + print_info 1 "$(get_indent 1)>> Wrapping initramfs using mkimage ..." + print_info 2 "$(get_indent 1)${mkimage_cmd} ${mkimage_args} -n initramfs-${KV} -d ${CPIO} ${CPIO}.uboot" ${mkimage_cmd} ${mkimage_args} -n "initramfs-${KV}" -d "${CPIO}" "${CPIO}.uboot" >> ${LOGFILE} 2>&1 || gen_die "Wrapping initramfs using mkimage failed" mv -f "${CPIO}.uboot" "${CPIO}" || gen_die "Rename failed" fi @@ -1625,7 +1645,8 @@ create_initramfs() { then if ! isTrue "${INTEGRATED_INITRAMFS}" then - copy_image_with_preserve "initramfs" \ + copy_image_with_preserve \ + "initramfs" \ "${TMPDIR}/initramfs-${KV}" \ "initramfs-${KNAME}-${ARCH}-${KV}" fi