Browse Source

feat(mkinitrd): remove mkinitrd

It was not working anyway, so nobody used it for years.
If it is not used, just remove it.
mkinitrd-suse.sh will be maintained by SUSE as it is SUSE specific
anyway.
master
Harald Hoyer 3 years ago committed by Harald Hoyer
parent
commit
43df4ee274
  1. 6
      Makefile
  2. 3
      dracut.asc
  3. 3
      dracut.sh
  4. 12
      dracut.spec
  5. 239
      mkinitrd-dracut.sh
  6. 106
      mkinitrd-suse.8.asc
  7. 396
      mkinitrd-suse.sh
  8. 66
      mkinitrd.8.asc

6
Makefile

@ -37,8 +37,6 @@ man7pages = dracut.cmdline.7 \ @@ -37,8 +37,6 @@ man7pages = dracut.cmdline.7 \

man8pages = dracut.8 \
dracut-catimages.8 \
mkinitrd.8 \
mkinitrd-suse.8 \
modules.d/98dracut-systemd/dracut-cmdline.service.8 \
modules.d/98dracut-systemd/dracut-initqueue.service.8 \
modules.d/98dracut-systemd/dracut-mount.service.8 \
@ -148,7 +146,6 @@ install: all @@ -148,7 +146,6 @@ install: all
mkdir -p $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man7 $(DESTDIR)$(mandir)/man8
install -m 0755 dracut.sh $(DESTDIR)$(bindir)/dracut
install -m 0755 dracut-catimages.sh $(DESTDIR)$(bindir)/dracut-catimages
install -m 0755 mkinitrd-dracut.sh $(DESTDIR)$(bindir)/mkinitrd
install -m 0755 lsinitrd.sh $(DESTDIR)$(bindir)/lsinitrd
install -m 0644 dracut.conf $(DESTDIR)$(sysconfdir)/dracut.conf
mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d
@ -267,8 +264,7 @@ syncheck: @@ -267,8 +264,7 @@ syncheck:
[ $$V ] && echo "checking for [[: $$i"; if grep -Fq '[[ ' "$$i" ; then ret=$$(($$ret+1)); echo "$$i contains [["; fi; \
[ $$V ] && echo "checking for echo -n: $$i"; if grep -Fq 'echo -n ' "$$i" ; then ret=$$(($$ret+1)); echo "$$i contains echo -n"; fi \
done;exit $$ret
@ret=0;for i in *.sh mkinitrd-dracut.sh modules.d/*/*.sh \
modules.d/*/module-setup.sh; do \
@ret=0;for i in *.sh modules.d/*/*.sh modules.d/*/module-setup.sh; do \
[ $$V ] && echo "bash syntax check: $$i"; bash -n "$$i" ; ret=$$(($$ret+$$?)); \
done;exit $$ret
ifeq ($(HAVE_SHELLCHECK),yes)

3
dracut.asc

@ -162,9 +162,6 @@ include::dracut.cmdline.7.asc[] @@ -162,9 +162,6 @@ include::dracut.cmdline.7.asc[]
[[lsinitrd1]]
include::lsinitrd.1.asc[]

[[mkinitrd8]]
include::mkinitrd.8.asc[]

= Developer Manual

:leveloffset: 1

3
dracut.sh

@ -1,9 +1,6 @@ @@ -1,9 +1,6 @@
#!/bin/bash -p
#
# Generator script for a dracut initramfs
# Tries to retain some degree of compatibility with the command line
# of the various mkinitrd implementations out there
#

# Copyright 2005-2013 Red Hat, Inc. All rights reserved.
#

12
dracut.spec

@ -56,11 +56,6 @@ BuildRequires: docbook-xsl-stylesheets libxslt @@ -56,11 +56,6 @@ BuildRequires: docbook-xsl-stylesheets libxslt
BuildRequires: asciidoc
%endif

%if 0%{?suse_version} > 9999
Obsoletes: mkinitrd < 2.6.1
Provides: mkinitrd = 2.6.1
%endif

Obsoletes: dracut-fips <= 047
Provides: dracut-fips = %{version}-%{release}
Obsoletes: dracut-fips-aesni <= 047
@ -265,9 +260,7 @@ rm -f $RPM_BUILD_ROOT%{_mandir}/man?/*suse* @@ -265,9 +260,7 @@ rm -f $RPM_BUILD_ROOT%{_mandir}/man?/*suse*
%endif

%if 0%{?fedora} == 0 && 0%{?rhel} == 0 && 0%{?suse_version} <= 9999
rm -f -- $RPM_BUILD_ROOT%{_bindir}/mkinitrd
rm -f -- $RPM_BUILD_ROOT%{_bindir}/lsinitrd
rm -f -- $RPM_BUILD_ROOT%{_mandir}/man8/mkinitrd.8*
rm -f -- $RPM_BUILD_ROOT%{_mandir}/man1/lsinitrd.1*
%endif

@ -284,7 +277,6 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/ @@ -284,7 +277,6 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
%{_datadir}/bash-completion/completions/dracut
%{_datadir}/bash-completion/completions/lsinitrd
%if 0%{?fedora} || 0%{?rhel} || 0%{?suse_version} > 9999
%{_bindir}/mkinitrd
%{_bindir}/lsinitrd
%endif
%dir %{dracutlibdir}
@ -311,12 +303,8 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/ @@ -311,12 +303,8 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
%{_mandir}/man8/dracut.8*
%{_mandir}/man8/*service.8*
%if 0%{?fedora} || 0%{?rhel} || 0%{?suse_version} > 9999
%{_mandir}/man8/mkinitrd.8*
%{_mandir}/man1/lsinitrd.1*
%endif
%if 0%{?suse_version}
%{_mandir}/man8/mkinitrd-suse.8*
%endif
%{_mandir}/man7/dracut.kernel.7*
%{_mandir}/man7/dracut.cmdline.7*
%{_mandir}/man7/dracut.modules.7*

239
mkinitrd-dracut.sh

@ -1,239 +0,0 @@ @@ -1,239 +0,0 @@
#!/bin/bash --norc
kver=$(uname -r)

boot_dir="/boot"
quiet=0
host_only=0
force=0

error() { echo "$@" >&2; }

usage() {
[[ $1 == '-n' ]] && cmd=echo || cmd=error

$cmd "usage: ${0##*/} [--version] [--help] [-v] [-f] [--preload <module>]"
$cmd " [--image-version] [--with=<module>]"
$cmd " [--nocompress]"
$cmd " <initrd-image> <kernel-version>"
$cmd ""
$cmd " (ex: ${0##*/} /boot/initramfs-$kver.img $kver)"

[[ $1 == '-n' ]] && exit 0
exit 1
}

# Little helper function for reading args from the commandline.
# it automatically handles -a b and -a=b variants, and returns 1 if
# we need to shift $3.
read_arg() {
# $1 = arg name
# $2 = arg value
# $3 = arg parameter
param="$1"
local rematch='^[^=]*=(.*)$' result
if [[ $2 =~ $rematch ]]; then
read "$param" <<< "${BASH_REMATCH[1]}"
else
for ((i = 3; i <= $#; i++)); do
# Only read next arg if it not an arg itself.
if [[ ${*:i:1} == -* ]]; then
break
fi
result="$result ${@:i:1}"
# There is no way to shift our callers args, so
# return "no of args" to indicate they should do it instead.
done
read "$1" <<< "$result"
return $((i - 3))
fi
}

# Taken over from SUSE mkinitrd
default_kernel_images() {
local regex kernel_image kernel_version version_version initrd_image
local qf='%{NAME}-%{VERSION}-%{RELEASE}\n'

case "${DRACUT_ARCH:-$(uname -m)}" in
s390 | s390x)
regex='image'
;;
ppc*)
regex='vmlinux'
;;
i?86 | x86_64)
regex='vmlinuz'
;;
arm*)
regex='[uz]Image'
;;
aarch64 | riscv64)
regex='Image'
;;
*)
regex='vmlinu.'
;;
esac

# user mode linux
if grep -q UML /proc/cpuinfo; then
regex='linux'
fi

kernel_images=""
initrd_images=""
for kernel_image in $(ls $boot_dir \
| sed -ne "\|^$regex\(-[0-9.]\+-[0-9]\+-[a-z0-9]\+$\)\?|p" \
| grep -v kdump$); do

# Note that we cannot check the RPM database here -- this
# script is itself called from within the binary kernel
# packages, and rpm does not allow recursive calls.

[ -L "$boot_dir/$kernel_image" ] && continue
[ "${kernel_image%%.gz}" != "$kernel_image" ] && continue
kernel_version=$(/usr/bin/get_kernel_version \
$boot_dir/$kernel_image 2> /dev/null)
initrd_image=$(echo $kernel_image | sed -e "s|${regex}|initrd|")
if [ "$kernel_image" != "$initrd_image" -a \
-n "$kernel_version" -a \
-d "/lib/modules/$kernel_version" ]; then
kernel_images="$kernel_images $boot_dir/$kernel_image"
initrd_images="$initrd_images $boot_dir/$initrd_image"
fi
done
for kernel_image in $kernel_images; do
kernels="$kernels ${kernel_image#*-}"
done
for initrd_image in $initrd_images; do
targets="$targets $initrd_image"
done
host_only=1
force=1
}

while (($# > 0)); do
case ${1%%=*} in
--with-usb)
read_arg usbmodule "$@" || shift $?
basicmodules="$basicmodules ${usbmodule:-usb-storage}"
unset usbmodule
;;
--with-avail)
read_arg modname "$@" || shift $?
basicmodules="$basicmodules $modname"
;;
--with)
read_arg modname "$@" || shift $?
basicmodules="$basicmodules $modname"
;;
--version)
echo "mkinitrd: dracut compatibility wrapper"
exit 0
;;
-v | --verbose) dracut_args="${dracut_args} -v" ;;
-f | --force) force=1 ;;
--preload)
read_arg modname "$@" || shift $?
basicmodules="$basicmodules $modname"
;;
--image-version) img_vers=yes ;;
--rootfs | -d)
read_arg rootfs "$@" || shift $?
dracut_args="${dracut_args} --filesystems $rootfs"
;;
--nocompress) dracut_args="$dracut_args --no-compress" ;;
--help) usage -n ;;
--builtin) ;;
--without*) ;;
--without-usb) ;;
--fstab*) ;;
--ifneeded) ;;
--omit-scsi-modules) ;;
--omit-ide-modules) ;;
--omit-raid-modules) ;;
--omit-lvm-modules) ;;
--omit-dmraid) ;;
--allow-missing) ;;
--net-dev*) ;;
--noresume) ;;
--rootdev*) ;;
--thawdev*) ;;
--rootopts*) ;;
--root*) ;;
--loopdev*) ;;
--loopfs*) ;;
--loopopts*) ;;
--looppath*) ;;
--dsdt*) ;;
-s) ;;
--quiet | -q) quiet=1 ;;
-b)
read_arg boot_dir "$@" || shift $?
if [ ! -d $boot_dir ]; then
error "Boot directory $boot_dir does not exist"
exit 1
fi
;;
-k) # Would be nice to get a list of images here
read_arg kernel_images "$@" || shift $?
for kernel_image in $kernel_images; do
kernels="$kernels ${kernel_image#*-}"
done
host_only=1
force=1
;;
-i)
read_arg initrd_images "$@" || shift $?
for initrd_image in $initrd_images; do
targets="$targets $boot_dir/$initrd_image"
done
;;
*) if [[ ! $targets ]]; then
targets=$1
elif [[ ! $kernels ]]; then
kernels=$1
else
usage
fi ;;
esac
shift
done

[[ $targets && $kernels ]] || default_kernel_images
[[ $targets && $kernels ]] || (error "No kernel found in $boot_dir" && usage)

# We can have several targets/kernels, transform the list to an array
targets=($targets)
[[ $kernels ]] && kernels=($kernels)

[[ $host_only == 1 ]] && dracut_args="${dracut_args} -H"
[[ $force == 1 ]] && dracut_args="${dracut_args} -f"

echo "Creating: target|kernel|dracut args|basicmodules "
for ((i = 0; i < ${#targets[@]}; i++)); do

if [[ $img_vers ]]; then
target="${targets[$i]}-${kernels[$i]}"
else
target="${targets[$i]}"
fi
kernel="${kernels[$i]}"

# Duplicate code: No way found how to redirect output based on $quiet
if [[ $quiet == 1 ]]; then
echo "$target|$kernel|$dracut_args|$basicmodules"
if [[ $basicmodules ]]; then
dracut $dracut_args --add-drivers "$basicmodules" "$target" \
"$kernel" &> /dev/null
else
dracut $dracut_args "$target" "$kernel" &> /dev/null
fi
else
if [[ $basicmodules ]]; then
dracut $dracut_args --add-drivers "$basicmodules" "$target" \
"$kernel"
else
dracut $dracut_args "$target" "$kernel"
fi
fi
done

106
mkinitrd-suse.8.asc

@ -1,106 +0,0 @@ @@ -1,106 +0,0 @@
MKINITRD(8)
===========
:doctype: manpage
:man source: dracut
:man manual: dracut

NAME
----
mkinitrd-suse - is a compat wrapper, which calls dracut to generate an initramfs

SYNOPSIS
--------
*mkinitrd* ['OPTION...']

DESCRIPTION
-----------
*mkinitrd* creates an initramfs image <initrd-image> for the kernel with
version <kernel-version> by calling *dracut*.

[IMPORTANT]
This version of mkinitrd is provided for compatibility with older
versions of mkinitrd. If a more fine grained control over the
resulting image is needed, *dracut* should be called directly.

OPTIONS
-------
**-R, --version**::
print info about the version

**-k** _<kernel_list>_::
List of kernel images for which initrd files are created (relative
to _boot_dir_), Image name should begin with the following string,
defaults to _vmlinux_ on ppc/ppc64, _image_ on s390/s390x and _vmlinuz_
for everything else.

**-i** _<initrd_list>_::
List of file names (relative to _boot_dir_) for the initrd; positions
have to match the _kernel_list_. Defaults to _initrd_.

**-m** _<module_list>_::
Modules to include in initrd, defaults to _INITRD_MODULES_ variable
in */etc/sysconfig/kernel*.

**-f** _<feature_list>_::
Features to be enabled for the initrd. In general mkinitrd
configures the initrd for the root device it is started from. With
this option additional feature can be enabled.

**-b** _<bootdir>_::
Boot directory, defaults to */boot*, where the initrd is created.

**-d** _<root_device>_::
Root device, defaults to the device from which the root_dir is
mounted; overwrites the rootdev environment variable if set

**-s** _<size>_::
Add splash animation and bootscreen to initrd.

**-D** _<interface>::
Run dhcp on the specified interface (for example "eth0").

**-I** _<interface>::
Configure the specified interface statically.

**-a** _<acpi_dsdt>::
Attach compiled ACPI DSDT (Differentiated System Description Table)
to initrd. This replaces the DSDT of the BIOS. Defaults to the
_ACPI_DSDT_ variable in */etc/sysconfig/kernel*.

**-M** _<map>::
System.map file to use.

**-B**::
Don’t run the *update-bootloader(8)* script after the initrd(s) have
been created. This is useful if you call mkinitrd(8) for anything
else than the running system.

**-A**::
Create a so called "monster initrd" which includes all available
features and modules. This calls dracut with --no-hostonly and
--no-hostonly-cmdline parameters internally, instead of the default
--hostonly and --hostonly-cmdline.

**-v, --verbose**::
increase verbosity level

**-L**::
Disable logging to _/var/log/YaST2/mkinitrd.log_. This is useful for
testing if you don’t want to clutter the system log.

**--help**::
print a help message and exit.

AVAILABILITY
------------
The mkinitrd command is part of the dracut package and is available from
link:$$https://dracut.wiki.kernel.org$$[https://dracut.wiki.kernel.org]

AUTHORS
-------
Harald Hoyer, Hannes Reinecke

SEE ALSO
--------
*dracut*(8)
*update-bootloader*(8)

396
mkinitrd-suse.sh

@ -1,396 +0,0 @@ @@ -1,396 +0,0 @@
#!/bin/bash --norc
#
# mkinitrd compatibility wrapper for SUSE.
#
# Copyright (c) 2013 SUSE Linux Products GmbH. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

boot_dir="/boot"
quiet=0
logfile=/var/log/YaST2/mkinitrd.log
dracut_cmd=dracut

error() { echo "$@" >&2; }

usage() {
[[ $1 == '-n' ]] && cmd=echo || cmd=error

$cmd "usage: ${0##*/} [options]"
$cmd ""
$cmd " Create initial ramdisk images that contain all kernel modules needed"
$cmd " in the early boot process, before the root file system becomes"
$cmd " available."
$cmd " This usually includes SCSI and/or RAID modules, a file system module"
$cmd " for the root file system, or a network interface driver module for dhcp."
$cmd ""
$cmd " options:"
$cmd ' -f "feature list" Features to be enabled when generating initrd.'
$cmd " Available features are:"
$cmd " iscsi, md, multipath, lvm, lvm2,"
$cmd " ifup, fcoe, dcbd"
$cmd ' -k "kernel list" List of kernel images for which initrd files are'
$cmd " created. Defaults to all kernels found in /boot."
$cmd ' -i "initrd list" List of file names for the initrd; position have'
$cmd ' match to "kernel list". Defaults to all kernels'
$cmd " found in /boot."
$cmd " -b boot_dir Boot directory. Defaults to /boot."
$cmd " -t tmp_dir Temporary directory. Defaults to /var/tmp."
$cmd " -M map System.map file to use."
$cmd ' -A Create a so called "monster initrd" which'
$cmd " includes all features and modules possible."
$cmd " -B Do not update bootloader configuration."
$cmd " -v Verbose mode."
$cmd " -L Disable logging."
$cmd " -h This help screen."
$cmd ' -m "module list" Modules to include in initrd. Defaults to the'
$cmd " INITRD_MODULES variable in /etc/sysconfig/kernel"
$cmd ' -u "DomU module list" Modules to include in initrd. Defaults to the'
$cmd " DOMU_INITRD_MODULES variable in"
$cmd " /etc/sysconfig/kernel."
$cmd " -d root_device Root device. Defaults to the device from"
$cmd " which / is mounted. Overrides the rootdev"
$cmd " environment variable if set."
$cmd " -j device Journal device"
$cmd " -D interface Run dhcp on the specified interface."
$cmd " -I interface Configure the specified interface statically."
$cmd " -a acpi_dsdt Obsolete, do not use."
$cmd " -s size Add splash animation and bootscreen to initrd."

[[ $1 == '-n' ]] && exit 0
exit 1
}

# Little helper function for reading args from the commandline.
# it automatically handles -a b and -a=b variants, and returns 1 if
# we need to shift $3.
read_arg() {
# $1 = arg name
# $2 = arg value
# $3 = arg parameter
param="$1"
local rematch='^[^=]*=(.*)$' result
if [[ $2 =~ $rematch ]]; then
read "$param" <<< "${BASH_REMATCH[1]}"
else
for ((i = 3; i <= $#; i++)); do
# Only read next arg if it not an arg itself.
if [[ ${*:i:1} == -* ]]; then
break
fi
result="$result ${@:i:1}"
# There is no way to shift our callers args, so
# return "no of args" to indicate they should do it instead.
done
read "$1" <<< "$result"
return $((i - 3))
fi
}

# Helper functions to calculate ipconfig command line
calc_netmask() {
local prefix=$1

[ -z "$prefix" ] && return
mask=$((0xffffffff << (32 - prefix)))
byte1=$((mask >> 24))
byte2=$((mask >> 16))
byte3=$((mask >> 8))
byte4=$((mask & 0xff))
netmask=$(printf "%d.%d.%d.%d" $((byte1 & 0xff)) $((byte2 & 0xff)) $((byte3 & 0xff)) $byte4)

echo $netmask
}

ipconfig() {
local interface=$1
local iplink macaddr broadcast gateway ipaddr prefix netmask

iplink=$(ip addr show dev $interface | sed -n 's/ *inet \(.*\) brd.*/\1/p')
macaddr=$(ip addr show dev $interface | sed -n 's/.*ether \(.*\) brd.*/\1/p')
broadcast=$(ip addr show dev $interface | sed -n 's/.*brd \(.*\) scope.*/\1/p')
gateway=$(ip route show dev $interface | sed -n 's/default via \([0-9\.]*\).*/\1/p')

ipaddr=${iplink%%/*}
prefix=${iplink##*/}
netmask=$(calc_netmask $prefix)

echo "${ipaddr}:${serveraddr}:${gateway}:${netmask}:${hostname}:${interface}:none::${macaddr}"
}

is_xen_kernel() {
local kversion=$1
local root_dir=$2
local cfg

for cfg in ${root_dir}/boot/config-$kversion $root_dir/lib/modules/$kversion/build/.config; do
test -r $cfg || continue
grep -q '^CONFIG_XEN=y$' $cfg
return
done
test $kversion != "${kversion%-xen*}"
return
}

kernel_version_from_image() {
local dir="${1%/*}/"
[[ $dir != "$1" ]] || dir=""
local kernel_image="$1" kernel_image_gz="${dir}vmlinux-${1#*-}.gz"
echo kernel_image_gz="'$kernel_image_gz'" >&2

if get_kernel_version "$kernel_image" 2> /dev/null; then
return
fi

# As a last resort, try vmlinux-$version.gz, which might be around
get_kernel_version "$kernel_image_gz" 2> /dev/null
}

# Taken over from SUSE mkinitrd
default_kernel_images() {
local regex kernel_image kernel_version version_version initrd_image
local qf='%{NAME}-%{VERSION}-%{RELEASE}\n'

case "${DRACUT_ARCH:-$(uname -m)}" in
s390 | s390x)
regex='image'
;;
ppc | ppc64)
regex='vmlinux'
;;
i?86 | x86_64)
regex='vmlinuz'
;;
arm*)
regex='[uz]Image'
;;
aarch64 | riscv64)
regex='Image'
;;
*)
regex='vmlinu.'
;;
esac

kernel_images=""
initrd_images=""
for kernel_image in $(ls $boot_dir \
| sed -ne "\|^$regex\(-[0-9.]\+-[0-9]\+-[a-z0-9]\+$\)\?|p" \
| grep -v kdump$); do

# Note that we cannot check the RPM database here -- this
# script is itself called from within the binary kernel
# packages, and rpm does not allow recursive calls.

[ -L "$boot_dir/$kernel_image" ] && continue
[ "${kernel_image%%.gz}" != "$kernel_image" ] && continue

kernel_version=$(kernel_version_from_image \
$boot_dir/$kernel_image 2> /dev/null)
initrd_image=$(echo $kernel_image | sed -e "s|${regex}|initrd|")
if [ "$kernel_image" != "$initrd_image" -a \
-n "$kernel_version" -a \
-d "/lib/modules/$kernel_version" ]; then
kernel_images="$kernel_images $boot_dir/$kernel_image"
initrd_images="$initrd_images $boot_dir/$initrd_image"
fi
done
for kernel_image in $kernel_images; do
kernels="$kernels ${kernel_image#*-}"
done
for initrd_image in $initrd_images; do
targets="$targets $initrd_image"
done
}

while (($# > 0)); do
case ${1%%=*} in
-f)
read_arg feature_list "$@" || shift $?
# Could be several features
;;
-k) # Would be nice to get a list of images here
read_arg kernel_images "$@" || shift $?
for kernel_image in $kernel_images; do
[ -L "/boot/$kernel_image" ] && kernel_image="$(readlink "/boot/$kernel_image")"
kernels="$kernels ${kernel_image#*-}"
done
;;
-i)
read_arg initrd_images "$@" || shift $?
for initrd_image in $initrd_images; do
[ -L "/boot/$initrd_image" ] && initrd_image="$(readlink "/boot/$initrd_image")"
# Check if the initrd_image contains a path.
# if not, then add the default boot_dir
dname=$(dirname $initrd_image)
if [ "$dname" == "." ]; then
targets="$targets $boot_dir/$initrd_image"
else
targets="$targets $initrd_image"
fi
done
;;
-b)
read_arg boot_dir "$@" || shift $?
if [ ! -d $boot_dir ]; then
error "Boot directory $boot_dir does not exist"
exit 1
fi
;;
-t)
read_arg tmp_dir "$@" || shift $?
dracut_args="${dracut_args} --tmpdir $tmp_dir"
;;
-M)
read_arg map_file "$@" || shift $?
;;
-A) dracut_args="${dracut_args} --no-host-only" ;;
-B) skip_update_bootloader=1 ;;
-v | --verbose) dracut_args="${dracut_args} -v" ;;
-L) logfile= ;;
-h | --help) usage -n ;;
-m) read_arg module_list "$@" || shift $? ;;
-u)
read_arg domu_module_list "$@" || shift $?
echo "mkinitrd: DomU modules not yet supported"
;;
-d)
read_arg rootfs "$@" || shift $?
dracut_args="${dracut_args} --filesystems $rootfs"
;;
-D)
read_arg dhcp_if "$@" || shift $?
dracut_cmdline="${dracut_cmdline} ip=${dhcp_if}:dhcp"
;;
-I)
read_arg static_if "$@" || shift $?
dracut_cmdline="${dracut_cmdline} ip=$(ipconfig $static_if)":
;;
-a)
read_arg acpi_dsdt "$@" || shift $?
echo "Obsolete -a param, use acpi_table_dir= and acpi_override= variables in /etc/dracut.conf.d/"
exit 1
;;
-s)
read_arg boot_splash "$@" || shift $?
echo "mkinitrd: boot splash not yet supported"
exit 1
;;
-V)
echo "mkinitrd: vendor scipts are no longer supported"
exit 1
;;
--dracut)
read_arg dracut_cmd "$@" || shift $?
;;
--version | -R)
echo "mkinitrd: dracut compatibility wrapper"
exit 0
;;
--quiet | -q) quiet=1 ;;
*) if [[ ! $targets ]]; then
targets=$1
elif [[ ! $kernels ]]; then
kernels=$1
else
usage
fi ;;
esac
shift
done

[[ $targets && $kernels ]] || default_kernel_images
if [[ ! $targets || ! $kernels ]]; then
error "No kernel found in $boot_dir or bad modules dir in /lib/modules"
exit 1
fi

# We can have several targets/kernels, transform the list to an array
targets=($targets)
[[ $kernels ]] && kernels=($kernels)

[[ $logfile ]] && dracut_args="${dracut_args} --logfile $logfile"
dracut_args="${dracut_args} --force"

[[ $dracut_cmdline ]] && dracut_args="${dracut_args} --kernel-cmdline ${dracut_cmdline}"
[ -z "$(type -p update-bootloader)" ] && skip_update_bootloader=1

# Update defaults from /etc/sysconfig/kernel
if [ -f /etc/sysconfig/kernel ]; then
. /etc/sysconfig/kernel
fi
[[ $module_list ]] || module_list="${INITRD_MODULES}"
[[ $domu_module_list ]] || domu_module_list="${DOMU_INITRD_MODULES}"
shopt -s extglob

failed=""

for ((i = 0; i < ${#targets[@]}; i++)); do

if [[ $img_vers ]]; then
target="${targets[$i]}-${kernels[$i]}"
else
target="${targets[$i]}"
fi
kernel="${kernels[$i]}"

if is_xen_kernel $kernel $rootfs; then
modules_all="${module_list} ${domu_module_list}"
else
modules_all="${module_list}"
fi

# Remove leading and trailing spaces needs (set above): shopt -s extglob
modules_all=${modules_all%%+([[:space:]])}
modules_all=${modules_all##+([[:space:]])}

echo "Creating initrd: $target"

# Duplicate code: No way found how to redirect output based on $quiet
if [[ $quiet == 1 ]]; then
# Duplicate code: --force-drivers must not be called with empty string
# -> dracut bug workarounded ugly, because of complex whitespace
# expansion magics
if [ -n "${modules_all}" ]; then
$dracut_cmd $dracut_args --force-drivers "${modules_all}" "$target" "$kernel" &> /dev/null
[ $? -ne 0 ] && failed="$failed $target"
else
$dracut_cmd $dracut_args "$target" "$kernel" &> /dev/null
[ $? -ne 0 ] && failed="$failed $target"
fi
else
if [ -n "${modules_all}" ]; then
$dracut_cmd $dracut_args --force-drivers "${modules_all}" "$target" "$kernel"
[ $? -ne 0 ] && failed="$failed $target"
else
$dracut_cmd $dracut_args "$target" "$kernel"
[ $? -ne 0 ] && failed="$failed $target"
fi
fi
done

if [ "$skip_update_bootloader" ]; then
echo 2>&1 "Did not refresh the bootloader. You might need to refresh it manually."
else
update-bootloader --refresh
[ $? -ne 0 ] && echo "Updating bootloader failed" && exit 1
fi

if [ "$failed" != "" ]; then
echo "Generating $failed targets failed"
exit 1
fi

exit 0

66
mkinitrd.8.asc

@ -1,66 +0,0 @@ @@ -1,66 +0,0 @@
MKINITRD(8)
=========
:doctype: manpage
:man source: dracut
:man manual: dracut
:man version: {version}

NAME
----
mkinitrd - is a compat wrapper, which calls dracut to generate an initramfs

SYNOPSIS
--------
*mkinitrd* ['OPTION...'] [<initrd-image>] <kernel-version>

DESCRIPTION
-----------
mkinitrd creates an initramfs image <initrd-image> for the kernel with
version <kernel-version> by calling "dracut".

[IMPORTANT]
If a more fine grained control over the resulting image is needed,
"dracut" should be called directly.

OPTIONS
-------
**--version**::
print info about the version

**-v, --verbose**::
increase verbosity level

**-f, --force**::
overwrite existing initramfs file.

**--image-version*::
append the kernel version to the target image
<initrd-image>-<kernel-version>.

**--with=<module>**::
add the kernel module <module> to the initramfs.

**--preload=<module>**::
preload the kernel module <module> in the initramfs before any other kernel
modules are loaded. This can be used to ensure a certain device naming,
which should in theory be avoided and the use of symbolic links in /dev is
encouraged.

**--nocompress**::
do not compress the resulting image.

**--help**::
print a help message and exit.

AVAILABILITY
------------
The mkinitrd command is part of the dracut package and is available from
link:$$https://dracut.wiki.kernel.org$$[https://dracut.wiki.kernel.org]

AUTHORS
-------
Harald Hoyer

SEE ALSO
--------
*dracut*(8)
Loading…
Cancel
Save