编译ubuntu 最新140版本
This commit is contained in:
parent
3df47e6c13
commit
bc65f2c694
|
@ -30,31 +30,10 @@ MODULES=most
|
|||
BUSYBOX=auto
|
||||
|
||||
#
|
||||
# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ]
|
||||
#
|
||||
# Amount of RAM to use for RAM-based compressed swap space.
|
||||
#
|
||||
# An empty value - compcache isn't used, or added to the initramfs at all.
|
||||
# An integer and K (e.g. 65536 K) - use a number of kilobytes.
|
||||
# An integer and M (e.g. 256 M) - use a number of megabytes.
|
||||
# An integer and G (e.g. 1 G) - use a number of gigabytes.
|
||||
# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM.
|
||||
#
|
||||
# You can optionally install the compcache package to configure this setting
|
||||
# via debconf and have userspace scripts to load and unload compcache.
|
||||
# COMPRESS: [ gzip | bzip2 | lz4 | lzma | lzop | xz | zstd ]
|
||||
#
|
||||
|
||||
COMPCACHE_SIZE=""
|
||||
|
||||
#
|
||||
# COMPRESS: [ gzip | bzip2 | lz4 | lzma | lzop | xz ]
|
||||
#
|
||||
|
||||
COMPRESS=lz4
|
||||
|
||||
#
|
||||
# NFS Section of the config.
|
||||
#
|
||||
COMPRESS=zstd
|
||||
|
||||
#
|
||||
# DEVICE: ...
|
||||
|
@ -79,3 +58,12 @@ NFSROOT=auto
|
|||
#
|
||||
|
||||
RUNSIZE=10%
|
||||
|
||||
#
|
||||
# FSTYPE: ...
|
||||
#
|
||||
# The filesystem type(s) to support, or "auto" to use the current root
|
||||
# filesystem type
|
||||
#
|
||||
|
||||
FSTYPE=auto
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
initramfs-tools (0.140kylin18k0.0) yangtze; urgency=medium
|
||||
|
||||
* build initramfs-tools 140 version
|
||||
|
||||
-- liushanwen <liushanwen@kylinos.cn> Thu, 20 Apr 2023 17:23:19 +0800
|
||||
|
||||
initramfs-tools (0.136-ok3) yangtze; urgency=medium
|
||||
|
||||
* update version info
|
||||
|
@ -16,3 +22,4 @@ initramfs-tools (0.136-ok1) yangtze; urgency=medium
|
|||
* Build for openKylin.
|
||||
|
||||
-- openKylinBot <openKylinBot@openkylin.com> Mon, 25 Apr 2022 22:03:04 +0800
|
||||
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
Source: initramfs-tools
|
||||
Section: utils
|
||||
Priority: optional
|
||||
Uploaders: Michael Prokop <mika@debian.org>,
|
||||
Ben Hutchings <ben@decadent.org.uk>
|
||||
Uploaders: Michael Prokop <mika@debian.org>, Ben Hutchings <benh@debian.org>
|
||||
Maintainer: Openkylin Developers <packaging@lists.openkylin.top>
|
||||
XSBC-Original-Maintainer: Debian kernel team <debian-kernel@lists.debian.org>
|
||||
Build-Depends: bash-completion,
|
||||
debhelper-compat (= 12),
|
||||
libudev-dev,
|
||||
netplan.io [!i386] <!nocheck>,
|
||||
pkg-config,
|
||||
shellcheck [!i386] <!nocheck>
|
||||
Build-Depends: debhelper-compat (= 12), bash-completion, shellcheck [!i386] <!nocheck>, pkg-config, libudev-dev, netplan.io [!i386] <!nocheck>
|
||||
Rules-Requires-Root: no
|
||||
Standards-Version: 4.1.5
|
||||
Vcs-Browser: https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/initramfs-tools/
|
||||
|
@ -21,16 +15,11 @@ X-Debian-Vcs-Git: https://salsa.debian.org/kernel-team/initramfs-tools.git
|
|||
Package: initramfs-tools
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: initramfs-tools-core (= ${binary:Version}),
|
||||
linux-base,
|
||||
${misc:Depends}
|
||||
Depends: initramfs-tools-core (= ${binary:Version}), linux-base, ${misc:Depends}
|
||||
Suggests: bash-completion
|
||||
Provides: linux-initramfs-tool
|
||||
Conflicts: linux-initramfs-tool, usplash (<< 0.5.50)
|
||||
Breaks: e2fsprogs (<< 1.42.13),
|
||||
initscripts (<< 2.88dsf-0),
|
||||
netplan.io (<< 0.37),
|
||||
upstart
|
||||
Breaks: initscripts (<< 2.88dsf-59.3~), upstart, e2fsprogs (<< 1.42.13), netplan.io (<< 0.37)
|
||||
Description: generic modular initramfs generator (automation)
|
||||
This package builds a bootable initramfs for Linux kernel packages. The
|
||||
initramfs is loaded along with the kernel and is responsible for
|
||||
|
@ -39,16 +28,7 @@ Description: generic modular initramfs generator (automation)
|
|||
Package: initramfs-tools-core
|
||||
Architecture: all
|
||||
Multi-Arch: foreign
|
||||
Depends: coreutils (>= 8.24),
|
||||
cpio (>= 2.12),
|
||||
initramfs-tools-bin (= ${binary:Version}),
|
||||
klibc-utils (>= 2.0.4-0),
|
||||
kmod,
|
||||
logsave | e2fsprogs (<< 1.45.3-z),
|
||||
lz4,
|
||||
udev,
|
||||
${busybox:Depends},
|
||||
${misc:Depends}
|
||||
Depends: ${busybox:Depends}, initramfs-tools-bin (= ${binary:Version}), klibc-utils (>= 2.0.4-8~), cpio (>= 2.12), zstd, kmod, udev, coreutils (>= 8.24), logsave | e2fsprogs (<< 1.45.3-1~), ${misc:Depends}
|
||||
Suggests: bash-completion
|
||||
Breaks: initramfs-tools (<< 0.121~), ${busybox:Breaks}
|
||||
Replaces: initramfs-tools (<< 0.121~)
|
||||
|
@ -60,7 +40,7 @@ Description: generic modular initramfs generator (core tools)
|
|||
|
||||
Package: initramfs-tools-bin
|
||||
Architecture: any
|
||||
Depends: ${misc:Depends}, ${shlibs:Depends}
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: binaries used by initramfs-tools
|
||||
This package contains binaries used inside the initramfs images generated
|
||||
by initramfs-tools.
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
src/rzscontrol usr/lib/initramfs-tools/bin
|
||||
src/wait-for-root usr/lib/initramfs-tools/bin
|
||||
src/gcc_s1-stub usr/lib/initramfs-tools/bin
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
/var/lib/initramfs-tools
|
||||
etc/initramfs-tools/conf.d
|
||||
etc/initramfs-tools/hooks
|
||||
etc/initramfs-tools/scripts/init-bottom
|
||||
etc/initramfs-tools/scripts/init-premount
|
||||
etc/initramfs-tools/scripts/init-top
|
||||
|
@ -11,7 +8,9 @@ etc/initramfs-tools/scripts/nfs-bottom
|
|||
etc/initramfs-tools/scripts/nfs-premount
|
||||
etc/initramfs-tools/scripts/nfs-top
|
||||
etc/initramfs-tools/scripts/panic
|
||||
etc/initramfs-tools/hooks
|
||||
etc/initramfs-tools/conf.d
|
||||
usr/sbin
|
||||
usr/share/initramfs-tools/conf-hooks.d
|
||||
usr/share/initramfs-tools/conf.d
|
||||
usr/share/initramfs-tools/conf-hooks.d
|
||||
usr/share/initramfs-tools/modules.d
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
conf/modules
|
||||
docs/example_hook
|
||||
docs/example_script
|
||||
docs/example_hook
|
||||
docs/framebuffer
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
conf/initramfs.conf etc/initramfs-tools
|
||||
conf/modules usr/share/initramfs-tools
|
||||
hook-functions usr/share/initramfs-tools
|
||||
hooks usr/share/initramfs-tools
|
||||
init usr/share/initramfs-tools
|
||||
lsinitramfs usr/bin
|
||||
scripts usr/share/initramfs-tools
|
||||
unmkinitramfs usr/bin
|
||||
init usr/share/initramfs-tools
|
||||
scripts usr/share/initramfs-tools
|
||||
conf/initramfs.conf etc/initramfs-tools
|
||||
hooks usr/share/initramfs-tools
|
||||
hook-functions usr/share/initramfs-tools
|
||||
conf/modules usr/share/initramfs-tools
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
initramfs-tools.7
|
||||
initramfs.conf.5
|
||||
lsinitramfs.8
|
||||
mkinitramfs.8
|
||||
unmkinitramfs.8
|
||||
initramfs.conf.5
|
||||
initramfs-tools.7
|
||||
|
|
|
@ -40,4 +40,9 @@ if [ "$1" = configure ] && dpkg --compare-versions "$2" lt 0.123~; then
|
|||
finish_mv_conffile /etc/initramfs-tools/initramfs.conf initramfs-tools-core
|
||||
fi
|
||||
|
||||
# Remove obsolete state directory
|
||||
if [ "$1" = configure ] && dpkg --compare-versions "$2" lt 0.138~; then
|
||||
rm -rf /var/lib/initramfs-tools
|
||||
fi
|
||||
|
||||
#DEBHELPER#
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
set -e
|
||||
|
||||
if [ "x${1}" = "xpurge" ]; then
|
||||
if [ "${1}" = "purge" ]; then
|
||||
rm -f /etc/initramfs-tools/conf.d/resume
|
||||
rm -f /etc/initramfs-tools/modules
|
||||
fi
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
conf/update-initramfs.conf etc/initramfs-tools
|
||||
update-initramfs usr/sbin
|
||||
debian/script usr/share/bug/initramfs-tools
|
||||
kernel etc
|
||||
update-initramfs usr/sbin
|
||||
|
|
|
@ -36,7 +36,7 @@ if [ "$1" = configure ] && [ -n "$2" ] && dpkg --compare-versions "$2" lt 0.123~
|
|||
fi
|
||||
|
||||
# Regenerate initramfs whenever we go to dpkg state `installed'
|
||||
if [ "x$1" != xtriggered ]; then
|
||||
if [ "$1" != triggered ]; then
|
||||
# this activates the trigger, if triggers are working
|
||||
update-initramfs -u
|
||||
else
|
||||
|
@ -50,7 +50,7 @@ fi
|
|||
# - bug only affected users that were upgrading packages
|
||||
# - new users are not affected
|
||||
# - LP: #1515513 took care of removing old dkms together with the kernel
|
||||
if [ "x$1" = xconfigure ] && [ -n "$2" ] && dpkg --compare-versions "$2" lt "0.131ubuntu11"; then
|
||||
if [ "$1" = configure ] && [ -n "$2" ] && dpkg --compare-versions "$2" lt "0.131ubuntu11"; then
|
||||
for old_dkms_file in /boot/initrd-*.img.old-dkms \
|
||||
/boot/initramfs-*.img.old-dkms \
|
||||
/boot/initrd.img-*.old-dkms \
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
# On Debian we can use either busybox or busybox-static, but on Ubuntu
|
||||
# and derivatives only busybox-initramfs will work.
|
||||
BUSYBOX_PACKAGES := $(shell if dpkg-vendor --derives-from openKylin; then echo busybox-initramfs; else echo busybox busybox-static; fi)
|
||||
BUSYBOX_PACKAGES := $(shell if dpkg-vendor --derives-from openkylin; then echo busybox-initramfs; else echo busybox busybox-static; fi)
|
||||
BUSYBOX_MIN_VERSION := 1:1.30.1-4ok5~
|
||||
|
||||
override_dh_gencontrol:
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
include:
|
||||
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
|
||||
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
|
||||
|
||||
variables:
|
||||
RELEASE: 'unstable'
|
|
@ -0,0 +1,22 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
SUPPORTED_FLAVOURS='amd64 generic'
|
||||
ROOTDISK_QEMU_IF=ide
|
||||
ROOTDISK_LINUX_NAME=sda
|
||||
. debian/tests/test-common
|
||||
|
||||
cat >>"${CONFDIR}/initramfs.conf" <<EOF
|
||||
MODULES=list
|
||||
BUSYBOX=n
|
||||
FSTYPE=ext2
|
||||
EOF
|
||||
cat >"${CONFDIR}/modules" <<EOF
|
||||
ext2
|
||||
ata_piix
|
||||
sd_mod
|
||||
EOF
|
||||
build_initramfs
|
||||
|
||||
build_rootfs_ext2
|
||||
|
||||
run_qemu_amd64
|
|
@ -0,0 +1,19 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
SUPPORTED_FLAVOURS='amd64 generic'
|
||||
. debian/tests/test-common
|
||||
|
||||
cat >>"${CONFDIR}/initramfs.conf" <<EOF
|
||||
MODULES=most
|
||||
BUSYBOX=y
|
||||
FSTYPE=ext2
|
||||
EOF
|
||||
build_initramfs
|
||||
lsinitramfs "${INITRAMFS}" | grep -qw busybox
|
||||
|
||||
build_rootfs_ext2
|
||||
|
||||
run_qemu_amd64
|
||||
|
||||
# Check that fsck ran
|
||||
grep -q "^/dev/${ROOTDISK_LINUX_NAME}: clean," "${OUTPUT}"
|
|
@ -0,0 +1,19 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
SUPPORTED_FLAVOURS='amd64 generic'
|
||||
. debian/tests/test-common
|
||||
|
||||
cat >>"${CONFDIR}/initramfs.conf" <<EOF
|
||||
MODULES=most
|
||||
BUSYBOX=n
|
||||
FSTYPE=ext2
|
||||
EOF
|
||||
build_initramfs
|
||||
! lsinitramfs "${INITRAMFS}" | grep -qw busybox
|
||||
|
||||
build_rootfs_ext2
|
||||
|
||||
run_qemu_amd64
|
||||
|
||||
# Check that fsck ran
|
||||
grep -q "^/dev/${ROOTDISK_LINUX_NAME}: clean," "${OUTPUT}"
|
|
@ -0,0 +1,32 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
SUPPORTED_FLAVOURS='amd64 generic'
|
||||
ROOTDISK_QEMU_IF=virtio
|
||||
ROOTDISK_LINUX_NAME=nonexistent
|
||||
. debian/tests/test-common
|
||||
|
||||
cat >>"${CONFDIR}/initramfs.conf" <<EOF
|
||||
MODULES=list
|
||||
BUSYBOX=n
|
||||
FSTYPE=ext2
|
||||
EOF
|
||||
cat >"${CONFDIR}/modules" <<EOF
|
||||
ext2
|
||||
virtio_pci
|
||||
virtio_blk
|
||||
EOF
|
||||
build_initramfs
|
||||
|
||||
build_rootfs_ext2
|
||||
|
||||
run_qemu_nocheck_amd64
|
||||
grep -qF "ALERT! /dev/nonexistent does not exist. Dropping to a shell!" "${OUTPUT}"
|
||||
grep -qF "(initramfs) " "${OUTPUT}"
|
||||
|
||||
run_qemu_nocheck_amd64 "panic=-1"
|
||||
grep -qF "Rebooting automatically due to panic= boot argument" "${OUTPUT}"
|
||||
! grep -qF "(initramfs) " "${OUTPUT}"
|
||||
|
||||
run_qemu_nocheck_amd64 "panic=0"
|
||||
grep -qF "Halting automatically due to panic= boot argument" "${OUTPUT}"
|
||||
! grep -qF "(initramfs) " "${OUTPUT}"
|
|
@ -0,0 +1,36 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
SUPPORTED_FLAVOURS='amd64 generic'
|
||||
ROOTDISK_QEMU_IF=virtio
|
||||
ROOTDISK_LINUX_NAME=vda
|
||||
USRDISK="$(mktemp)"
|
||||
USRDISK_QEMU_IF=virtio
|
||||
USRDISK_LINUX_NAME=vdb
|
||||
. debian/tests/test-common
|
||||
|
||||
cat >>"${CONFDIR}/initramfs.conf" <<EOF
|
||||
MODULES=list
|
||||
BUSYBOX=n
|
||||
FSTYPE=ext2
|
||||
EOF
|
||||
cat >"${CONFDIR}/modules" <<EOF
|
||||
ext2
|
||||
virtio_pci
|
||||
virtio_blk
|
||||
EOF
|
||||
build_initramfs
|
||||
|
||||
# Set up /usr filesystem and fstab entry for it
|
||||
mkdir -p "${ROOTDIR}/etc"
|
||||
echo > "${ROOTDIR}/etc/fstab" "/dev/${USRDISK_LINUX_NAME} /usr ext2 defaults 0 2"
|
||||
USRDIR="$(mktemp -d)"
|
||||
mv "${ROOTDIR}/usr/"* "${USRDIR}"
|
||||
|
||||
build_rootfs_ext2
|
||||
build_fs_ext2 "${USRDIR}" "${USRDISK}"
|
||||
|
||||
run_qemu_amd64
|
||||
|
||||
# Check that fsck ran on both devices
|
||||
grep -q "^/dev/${ROOTDISK_LINUX_NAME}: clean," "${OUTPUT}"
|
||||
grep -q "^/dev/${USRDISK_LINUX_NAME}: clean," "${OUTPUT}"
|
|
@ -0,0 +1,22 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
SUPPORTED_FLAVOURS='amd64 generic'
|
||||
ROOTDISK_QEMU_IF=virtio
|
||||
ROOTDISK_LINUX_NAME=vda
|
||||
. debian/tests/test-common
|
||||
|
||||
cat >>"${CONFDIR}/initramfs.conf" <<EOF
|
||||
MODULES=list
|
||||
BUSYBOX=n
|
||||
FSTYPE=ext2
|
||||
EOF
|
||||
cat >"${CONFDIR}/modules" <<EOF
|
||||
ext2
|
||||
virtio_pci
|
||||
virtio_blk
|
||||
EOF
|
||||
build_initramfs
|
||||
|
||||
build_rootfs_ext2
|
||||
|
||||
run_qemu_amd64
|
|
@ -1,7 +1,31 @@
|
|||
Tests: shellcheck
|
||||
Depends: shellcheck, @
|
||||
Depends: @, shellcheck
|
||||
Restrictions: superficial
|
||||
|
||||
Tests: amd64-klibc
|
||||
Depends: @, qemu-system-x86, linux-image-amd64 | linux-image-generic:amd64, klibc-utils, genext2fs
|
||||
Restrictions: skip-not-installable, needs-root
|
||||
|
||||
Tests: amd64-busybox
|
||||
Depends: @, qemu-system-x86, linux-image-amd64 | linux-image-generic:amd64, klibc-utils, busybox | busybox-initramfs, genext2fs
|
||||
Restrictions: skip-not-installable, needs-root
|
||||
|
||||
Tests: amd64-ata-only
|
||||
Depends: @, qemu-system-x86, linux-image-amd64 | linux-image-generic:amd64, klibc-utils, genext2fs
|
||||
Restrictions: skip-not-installable, needs-root
|
||||
|
||||
Tests: amd64-virtio-only
|
||||
Depends: @, qemu-system-x86, linux-image-amd64 | linux-image-generic:amd64, klibc-utils, genext2fs
|
||||
Restrictions: skip-not-installable, needs-root
|
||||
|
||||
Tests: amd64-separate-usr
|
||||
Depends: @, qemu-system-x86, linux-image-amd64 | linux-image-generic:amd64, klibc-utils, genext2fs
|
||||
Restrictions: skip-not-installable, needs-root
|
||||
|
||||
Tests: amd64-panic-shell
|
||||
Depends: @, qemu-system-x86, linux-image-amd64 | linux-image-generic:amd64, klibc-utils, genext2fs
|
||||
Restrictions: skip-not-installable, needs-root
|
||||
|
||||
Test-Command: ./tests/run-tests
|
||||
Depends: netplan.io
|
||||
Restrictions: allow-stderr
|
||||
|
|
|
@ -22,9 +22,10 @@ if [ ! -f images/"$filename" ]; then
|
|||
fi
|
||||
fi
|
||||
rm -f "$IMAGE" "${IMAGE}-uuid"
|
||||
truncate -s 1G "$IMAGE"
|
||||
truncate -s 2G "$IMAGE"
|
||||
parted --script --align optimal "$IMAGE" -- mklabel gpt mkpart primary ext4 1MiB -2048s
|
||||
dev="$(losetup -Pf --show "$IMAGE")"
|
||||
partprobe
|
||||
mke2fs -q "${dev}p1"
|
||||
blkid --output=value "${dev}p1" | head -n1 > "${IMAGE}-uuid"
|
||||
mkdir -p mnt
|
||||
|
|
|
@ -43,6 +43,7 @@ timeout --foreground 10m \
|
|||
-netdev user,id=net0 -device virtio-net-pci,netdev=net0,bus=pci.0,addr="$NICSLOT"
|
||||
|
||||
dev=$(losetup -Pf --show "$IMAGE")
|
||||
partprobe
|
||||
mount "${dev}p1" mnt
|
||||
rm -rf "$OUTPUT"
|
||||
cp -aT mnt/result "$OUTPUT"
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
# -*- mode: sh -*-
|
||||
|
||||
# Find kernel flavour and release
|
||||
KVER=
|
||||
for flavour in $SUPPORTED_FLAVOURS; do
|
||||
KVER="$(dpkg-query -Wf '${Depends}' "linux-image-${flavour}" 2>/dev/null | tr ',' '\n' | sed -n 's/^ *linux-image-\([-a-z0-9+.]*\).*/\1/p')"
|
||||
if [ "$KVER" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$KVER" ]; then
|
||||
echo >&2 "E: Test must set SUPPORTED_FLAVOURS and depend on those flavours"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ -n "${AUTOPKGTEST_TMP}" ]; then
|
||||
export TMPDIR="${AUTOPKGTEST_TMP}"
|
||||
fi
|
||||
|
||||
# Skeleton configuration directory
|
||||
CONFDIR="$(mktemp -d)"
|
||||
cp conf/initramfs.conf "${CONFDIR}/initramfs.conf"
|
||||
echo "RESUME=none" >>"${CONFDIR}/initramfs.conf"
|
||||
touch "${CONFDIR}/modules"
|
||||
mkdir "${CONFDIR}/scripts"
|
||||
|
||||
# initramfs image file
|
||||
INITRAMFS="$(mktemp)"
|
||||
|
||||
# root disk image file
|
||||
ROOTDISK="$(mktemp)"
|
||||
|
||||
# root disk interface type (for qemu) and device name (for Linux)
|
||||
test -n "${ROOTDISK_QEMU_IF}" || ROOTDISK_QEMU_IF=virtio
|
||||
test -n "${ROOTDISK_LINUX_NAME}" || ROOTDISK_LINUX_NAME=vda
|
||||
|
||||
# Create a root fs with a trivial userspace
|
||||
ROOTDIR="$(mktemp -d)"
|
||||
INIT_MESSAGE='root fs init system started successfully'
|
||||
for subdir in bin dev lib proc run sbin sys usr usr/bin; do
|
||||
mkdir "${ROOTDIR}/${subdir}"
|
||||
done
|
||||
cat >"${ROOTDIR}/sbin/init" <<EOF
|
||||
#!/bin/sh -e
|
||||
test -b /dev/${ROOTDISK_LINUX_NAME}
|
||||
test -d /proc/1
|
||||
test -d /run/initramfs
|
||||
test -d /sys/class
|
||||
test -d /usr/bin
|
||||
echo '${INIT_MESSAGE}'
|
||||
poweroff
|
||||
EOF
|
||||
chmod a+x "${ROOTDIR}/sbin/init"
|
||||
cp /usr/lib/klibc/bin/sh "${ROOTDIR}/bin/sh"
|
||||
cp /usr/lib/klibc/bin/poweroff "${ROOTDIR}/bin/poweroff"
|
||||
cp "$(dpkg -L libklibc | grep '^/lib/klibc.*\.so$')" "${ROOTDIR}/lib/"
|
||||
|
||||
# VM output file
|
||||
OUTPUT="$(mktemp)"
|
||||
|
||||
build_initramfs() {
|
||||
/usr/sbin/mkinitramfs -d "${CONFDIR}" -o "${INITRAMFS}" "${KVER}"
|
||||
}
|
||||
|
||||
build_fs_ext2() {
|
||||
local dir="${1}"
|
||||
local disk="${2}"
|
||||
|
||||
# Get directory size
|
||||
local blocks="$(du --summarize "${dir}" | cut -f 1)"
|
||||
local inodes="$(du --summarize --inodes "${dir}" | cut -f 1)"
|
||||
|
||||
# Add fudge factor
|
||||
blocks="$((blocks + 20 + blocks / 4))"
|
||||
inodes="$((inodes + 10))"
|
||||
|
||||
# genext2fs writes status messages to stderr; hide that from
|
||||
# autopkgtest
|
||||
genext2fs 2>&1 -b "${blocks}" -N "${inodes}" -U -d "${dir}" "${disk}"
|
||||
}
|
||||
|
||||
build_rootfs_ext2() {
|
||||
build_fs_ext2 "${ROOTDIR}" "${ROOTDISK}"
|
||||
}
|
||||
|
||||
_run_qemu_amd64() {
|
||||
local extra_params="$*"
|
||||
|
||||
timeout --foreground 60 qemu-system-x86_64 -m 1G -drive "file=${ROOTDISK},if=${ROOTDISK_QEMU_IF},media=disk,format=raw" ${USRDISK:+-drive "file=${USRDISK},if=${USRDISK_QEMU_IF},media=disk,format=raw"} -nographic -no-reboot -kernel "/boot/vmlinuz-${KVER}" -initrd "${INITRAMFS}" -append "root=/dev/${ROOTDISK_LINUX_NAME} ro console=ttyS0,115200 ${extra_params}" | tee "${OUTPUT}"
|
||||
}
|
||||
|
||||
run_qemu_nocheck_amd64() {
|
||||
# hide error messages from autopkgtest
|
||||
_run_qemu_amd64 2>&1 "$@"
|
||||
}
|
||||
|
||||
run_qemu_amd64() {
|
||||
_run_qemu_amd64 "panic=-1"
|
||||
grep -qF "${INIT_MESSAGE}" "${OUTPUT}"
|
||||
}
|
|
@ -26,23 +26,10 @@ prereqs)
|
|||
prereqs
|
||||
exit 0
|
||||
;;
|
||||
mountfail) # Called if the script has previously registered a mountroot
|
||||
# failure.
|
||||
# Check status, and display any relevant information about the
|
||||
# failure if there is a problem, then exit with a status of 1.
|
||||
;;
|
||||
esac
|
||||
|
||||
# Do the work here.
|
||||
|
||||
# If this script is to be placed in either init-premount, or local-top,
|
||||
# register a mountroot failure hook, so that further information can be given
|
||||
# to the user, in the event that the root device cannot be found.
|
||||
|
||||
. /scripts/functions
|
||||
|
||||
add_mountroot_fail_hook
|
||||
|
||||
echo "Got here!"
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -1,42 +1,19 @@
|
|||
***
|
||||
|
||||
# Maintainer documentation for initramfs-tools
|
||||
|
||||
***
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [1. Definitions](#definitions)
|
||||
* [2. Preparations](#preparations)
|
||||
* [3. Workflow for daily work](#workflow)
|
||||
* [3.1 Implement new features](#newfeature)
|
||||
* [3.2 Merge branches](#merge)
|
||||
* [3.3 Test specific branch](#test)
|
||||
* [3.4 Build snapshot version](#snapshot)
|
||||
* [4. Contribute](#contribute)
|
||||
* [5. Release new version](#release)
|
||||
* [6. Resources](#resources)
|
||||
* [7. Credits](#credits)
|
||||
* [8. License](#license)
|
||||
|
||||
***
|
||||
[[_TOC_]]
|
||||
|
||||
**NOTE:** The most recent version of this document is available at
|
||||
docs/maintainer-notes.md in the [the git repository](#checkout)
|
||||
or online at [salsa.debian.org](https://salsa.debian.org/kernel-team/initramfs-tools/blob/master/docs/maintainer-notes.md).
|
||||
|
||||
***
|
||||
|
||||
## <a name="definitions">1. Definitions</a>
|
||||
|
||||
<table>
|
||||
<tr><td><code><b>$mailaddress:</b></code></td><td>mailaddress of the user</td></tr>
|
||||
<tr><td><code><b>$username:</b></code></td><td>name of the Salsa account</td></tr>
|
||||
<tr><td><code><b>$version:</b></code></td><td>version string</td></tr>
|
||||
<tr><td><code><b>$yourname:</b></code></td><td>your fullname</td></tr>
|
||||
</table>
|
||||
|
||||
***
|
||||
| Name | Meaning |
|
||||
| --- | --- |
|
||||
| **`$mailaddress`** | mailaddress of the user |
|
||||
| **`$username`** | name of the Salsa account |
|
||||
| **`$version`** | version string |
|
||||
| **`$yourname`** | your fullname |
|
||||
|
||||
## <a name="preparations">2. Preparations</a>
|
||||
|
||||
|
@ -64,8 +41,6 @@ or online at [salsa.debian.org](https://salsa.debian.org/kernel-team/initramfs-t
|
|||
% git clone ssh://git@salsa.debian.org/kernel-team/initramfs-tools.git
|
||||
% cd initramfs-tools
|
||||
|
||||
***
|
||||
|
||||
## <a name="workflow">3. Workflow for daily work</a>
|
||||
|
||||
### <a name="newfeature">3.1 Implement new features</a>
|
||||
|
@ -137,8 +112,6 @@ any stale remote branches locally by executing:
|
|||
|
||||
% gbp buildpackage --git-ignore-new --git-debian-branch="$(git branch | awk -F\*\ '/^* / { print $2}' )" --post-clean
|
||||
|
||||
***
|
||||
|
||||
### <a name="snapshot">3.4 Build snapshot version</a>
|
||||
|
||||
1. Adjust debian/changelog accordingly:
|
||||
|
@ -150,8 +123,6 @@ any stale remote branches locally by executing:
|
|||
|
||||
% gbp buildpackage --git-debian-branch="$(git branch | awk -F\*\ '/^* / { print $2}' )" --post-clean [-us -uc]
|
||||
|
||||
***
|
||||
|
||||
## <a name="contribute">4. Contribute</a>
|
||||
|
||||
1. Create patch:
|
||||
|
@ -167,8 +138,6 @@ any stale remote branches locally by executing:
|
|||
Discussion of features, bugs and patches are more than welcome on one
|
||||
of these lists.
|
||||
|
||||
***
|
||||
|
||||
## <a name="release">5. Release new version</a>
|
||||
|
||||
1. Creating changelog:
|
||||
|
@ -202,8 +171,6 @@ any stale remote branches locally by executing:
|
|||
debian-kernel@lists.debian.org + kernel-team@lists.ubuntu.com - including a
|
||||
shortlog (generated through "git shortlog $TAG..").
|
||||
|
||||
***
|
||||
|
||||
## <a name="resources">6. Resources</a>
|
||||
|
||||
* [initramfs-tools git web interface](https://salsa.debian.org/kernel-team/initramfs-tools)
|
||||
|
@ -214,21 +181,13 @@ any stale remote branches locally by executing:
|
|||
* [bugreports @ ubuntu](https://bugs.launchpad.net/ubuntu/+source/initramfs-tools)
|
||||
* [qa page @ ubuntu](http://status.qa.ubuntu.com/qapkgstatus/initramfs-tools)
|
||||
|
||||
***
|
||||
|
||||
## <a name="credits">7. Credits</a>
|
||||
|
||||
* Thanks to Daniel Baumann for his "[Debian Packaging with Git](http://documentation.debian-projects.org/other/debian-packaging-git/)" which inspired this document.
|
||||
|
||||
***
|
||||
* Thanks to Daniel Baumann for his "[Debian Packaging with Git](https://web.archive.org/web/20110528125600/http://documentation.debian-projects.org/other/debian-packaging-git/)" which inspired this document.
|
||||
|
||||
## <a name="license">8. License</a>
|
||||
|
||||
* This document is licensed under GPL v2 or any later version.
|
||||
|
||||
***
|
||||
|
||||
*-- Michael Prokop <[mika@debian.org](mailto:mika@debian.org)>,
|
||||
Ben Hutchings <[ben@decadent.org.uk](mailto:ben@decadent.org.uk)>*
|
||||
|
||||
***
|
||||
Ben Hutchings <[benh@debian.org](mailto:benh@debian.org)>*
|
||||
|
|
147
hook-functions
147
hook-functions
|
@ -50,11 +50,46 @@ add_modules_from_file()
|
|||
done
|
||||
}
|
||||
|
||||
# Is this module available?
|
||||
have_module()
|
||||
# Locate a firmware file with the given name and copy it into DESTDIR, unless
|
||||
# DESTDIR already contains such a file.
|
||||
# Returns an error if no such firmware file can be located and DESTDIR doesn't
|
||||
# already contain any matching file. (It is up to the caller to figure out
|
||||
# whether a warning should be printed in that case.)
|
||||
add_firmware()
|
||||
{
|
||||
modprobe --set-version="${version?}" --ignore-install \
|
||||
--show-depends "${1}" >/dev/null 2>&1
|
||||
local firmware fwloc
|
||||
|
||||
firmware="${1}"
|
||||
|
||||
if [ -e "${DESTDIR}/lib/firmware/updates/${version?}/${firmware}" ] \
|
||||
|| [ -e "${DESTDIR}/lib/firmware/updates/${version?}/${firmware}.xz" ] \
|
||||
|| [ -e "${DESTDIR}/lib/firmware/updates/${firmware}" ] \
|
||||
|| [ -e "${DESTDIR}/lib/firmware/updates/${firmware}.xz" ] \
|
||||
|| [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ] \
|
||||
|| [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}.xz" ] \
|
||||
|| [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \
|
||||
|| [ -e "${DESTDIR}/lib/firmware/${firmware}.xz" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
for fwloc in "/lib/firmware/updates/${version}/${firmware}" \
|
||||
"/lib/firmware/updates/${firmware}" \
|
||||
"/lib/firmware/${version}/${firmware}" \
|
||||
"/lib/firmware/${firmware}"; do
|
||||
if [ -e "${fwloc}" ]; then
|
||||
copy_file firmware "${fwloc}"
|
||||
return 0
|
||||
elif [ -e "${fwloc}.xz" ]; then
|
||||
copy_file firmware "${fwloc}.xz"
|
||||
if command -v xz >/dev/null 2>&1; then
|
||||
xz -d "${DESTDIR}/${fwloc}.xz"
|
||||
fi
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
# We can't figure out where to get that firmware from.
|
||||
return 1
|
||||
}
|
||||
|
||||
# Add dependent modules + eventual firmware
|
||||
|
@ -83,15 +118,9 @@ manual_add_modules()
|
|||
|
||||
# Add required firmware
|
||||
for firmware in $(modinfo -k "${version}" -F firmware "${kmod}"); do
|
||||
if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \
|
||||
|| [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Only print warning for missing fw of loaded module
|
||||
# or forced loaded module
|
||||
if [ ! -e "/lib/firmware/${firmware}" ] \
|
||||
&& [ ! -e "/lib/firmware/${version}/${firmware}" ] ; then
|
||||
if ! add_firmware "$firmware"; then
|
||||
# Only warn about missing firmware if
|
||||
# /proc/modules exists
|
||||
if [ ! -e /proc/modules ] ; then
|
||||
|
@ -105,17 +134,35 @@ manual_add_modules()
|
|||
fi
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ -e "/lib/firmware/${version}/${firmware}" ]; then
|
||||
copy_file firmware \
|
||||
"/lib/firmware/${version}/${firmware}"
|
||||
else
|
||||
copy_file firmware "/lib/firmware/${firmware}"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# manual_add_modules() takes care of adding firmware for things that were built
|
||||
# as modules; but drivers can also be built into the kernel itself. To cover
|
||||
# that case, we have to look at modules.builtin.modinfo instead.
|
||||
# This file is generated by the kernel's build process since commit 898490c010b5
|
||||
# ("moduleparam: Save information about built-in modules in separate file"),
|
||||
# which was added in Linux 5.2.
|
||||
add_builtin_firmware()
|
||||
{
|
||||
local builtin_modinfo_path builtin_modname firmware
|
||||
|
||||
builtin_modinfo_path="/lib/modules/${version?}/modules.builtin.modinfo"
|
||||
if [ ! -e "$builtin_modinfo_path" ]; then
|
||||
if linux-version compare "${version}" ge 5.2; then
|
||||
echo "W: Can't find modules.builtin.modinfo (for locating built-in drivers' firmware, supported in Linux >=5.2)" >&2
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
tr '\0' '\n' < "$builtin_modinfo_path" | grep -E '^[^=]*\.firmware=' | sed -n 's/\.firmware=/\t/p' | while read -r builtin_modname firmware; do
|
||||
if ! add_firmware "$firmware"; then
|
||||
echo "W: Possible missing firmware /lib/firmware/${firmware} for built-in driver ${builtin_modname}" >&2
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# $1 = file type (for logging)
|
||||
# $2 = file to copy to initramfs
|
||||
# $3 (optional) Name for the file on the initramfs
|
||||
|
@ -159,7 +206,7 @@ copy_file() {
|
|||
esac
|
||||
|
||||
if [ "${link_target}" != "${target}" ]; then
|
||||
[ "${verbose?}" = "y" ] && echo "Adding ${type}-link ${src}"
|
||||
[ "${verbose?}" = "y" ] && echo "Adding ${type}-link ${target}"
|
||||
|
||||
# Create a relative link so it always points
|
||||
# to the right place
|
||||
|
@ -177,7 +224,7 @@ copy_file() {
|
|||
cp -pP "${src}" "${DESTDIR}/${target}" || return $(($? + 1))
|
||||
}
|
||||
|
||||
# $1 = executable to copy to initramfs, with library dependencies
|
||||
# $1 = executable/shared library to copy to initramfs, with dependencies
|
||||
# $2 (optional) Name for the file on the initramfs
|
||||
# Location of the image dir is assumed to be $DESTDIR
|
||||
# We never overwrite the target if it exists.
|
||||
|
@ -209,17 +256,26 @@ copy_exec() {
|
|||
# Handle common dlopen() dependency (Debian bug #950254)
|
||||
case "${x}" in
|
||||
*/libpthread.so.*)
|
||||
copy_exec "/lib/libgcc_s.so.1" || copy_exec "${x%/*}/libgcc_s.so.1" || return
|
||||
copy_libgcc "${x%/*}" || copy_libgcc "${x%/*}/.." || return
|
||||
;;
|
||||
esac
|
||||
|
||||
copy_file library "${x}" || {
|
||||
copy_file binary "${x}" || {
|
||||
ret=$?
|
||||
[ ${ret} = 1 ] || return $((ret - 1))
|
||||
}
|
||||
done
|
||||
}
|
||||
|
||||
copy_libgcc() {
|
||||
local libdir library
|
||||
|
||||
libdir="$1"
|
||||
for library in "${libdir}"/libgcc_s.so.[1-9]; do
|
||||
copy_exec "${library}" || return
|
||||
done
|
||||
}
|
||||
|
||||
# Copy entire subtrees to the initramfs
|
||||
copy_modules_dir()
|
||||
{
|
||||
|
@ -474,6 +530,16 @@ dep_add_modules_mount()
|
|||
block_dev_mod_add "$dev_node"
|
||||
}
|
||||
|
||||
class_add_modules()
|
||||
{
|
||||
local device
|
||||
|
||||
for device in "/sys/class/$1"/*; do
|
||||
device="$(readlink -f "$device")" \
|
||||
&& sys_walk_mod_add "$device"
|
||||
done
|
||||
}
|
||||
|
||||
dep_add_modules()
|
||||
{
|
||||
local device dev_node
|
||||
|
@ -490,11 +556,8 @@ dep_add_modules()
|
|||
fi
|
||||
|
||||
# sys walk some important device classes
|
||||
for class in backlight extcon gpio phy pwm regulator rtc; do
|
||||
for device in "/sys/class/$class"/*; do
|
||||
device="$(readlink -f "$device")" \
|
||||
&& sys_walk_mod_add "$device"
|
||||
done
|
||||
for class in extcon gpio phy pwm regulator rtc; do
|
||||
class_add_modules "$class"
|
||||
done
|
||||
|
||||
# clk, USB-PHY and pinctrl devices are outside the device model (!) so
|
||||
|
@ -528,10 +591,8 @@ dep_add_modules()
|
|||
done
|
||||
|
||||
if [ "$walk_graphics" = "yes" ]; then
|
||||
for device in /sys/class/graphics/*; do
|
||||
device="$(readlink -f "$device")" \
|
||||
&& sys_walk_mod_add "$device"
|
||||
done
|
||||
class_add_modules backlight
|
||||
class_add_modules graphics
|
||||
fi
|
||||
|
||||
# catch old-style IDE
|
||||
|
@ -579,7 +640,7 @@ auto_add_modules()
|
|||
local modules=
|
||||
|
||||
if [ "$#" -eq 0 ] ; then
|
||||
set -- base net ide scsi block ata i2o dasd ieee1394 firewire mmc usb_storage fb virtual nx
|
||||
set -- base hw_random net ide scsi block ata i2o dasd ieee1394 firewire mmc usb_storage fb virtual nx
|
||||
fi
|
||||
|
||||
for arg in "$@" ; do
|
||||
|
@ -639,21 +700,29 @@ auto_add_modules()
|
|||
copy_modules_dir kernel/drivers/i2c/busses
|
||||
copy_modules_dir kernel/drivers/i2c/muxes
|
||||
copy_modules_dir kernel/drivers/mfd
|
||||
copy_modules_dir kernel/drivers/pci/controller
|
||||
copy_modules_dir kernel/drivers/phy
|
||||
copy_modules_dir kernel/drivers/pinctrl
|
||||
copy_modules_dir kernel/drivers/regulator
|
||||
copy_modules_dir kernel/drivers/reset
|
||||
copy_modules_dir kernel/drivers/spi
|
||||
copy_modules_dir kernel/drivers/usb/phy
|
||||
|
||||
# Needed for periodic fsck
|
||||
copy_modules_dir kernel/drivers/rtc
|
||||
;;
|
||||
hw_random)
|
||||
copy_modules_dir kernel/drivers/char/hw_random
|
||||
;;
|
||||
net)
|
||||
copy_modules_dir kernel/drivers/net \
|
||||
appletalk arcnet bonding can dummy.ko \
|
||||
hamradio hippi ifb.ko irda macvlan.ko \
|
||||
macvtap.ko pcmcia sb1000.ko team tokenring \
|
||||
tun.ko usb veth.ko wan wimax wireless \
|
||||
tun.ko veth.ko wan wimax wireless \
|
||||
cdc_mbim.ko cdc-phonet.ko hso.ko huawei_cdc_ncm.ko ipheth.ko kalmia.ko \
|
||||
lg-vl600.ko qmi_wwan.ko sierra_net.ko cdc_subset.ko gl620a.ko \
|
||||
net1080.ko plusb.ko cx82310_eth.ko zaurus.ko \
|
||||
xen-netback.ko
|
||||
modules="$modules 8021q"
|
||||
;;
|
||||
|
@ -673,6 +742,9 @@ auto_add_modules()
|
|||
block)
|
||||
copy_modules_dir kernel/drivers/block
|
||||
copy_modules_dir kernel/drivers/nvme
|
||||
copy_modules_dir kernel/drivers/nvdimm
|
||||
copy_modules_dir kernel/drivers/dax
|
||||
copy_modules_dir kernel/drivers/acpi/nfit
|
||||
modules="$modules vmd"
|
||||
;;
|
||||
ubi)
|
||||
|
@ -696,6 +768,7 @@ auto_add_modules()
|
|||
fb)
|
||||
# For machines that don't have a generic framebuffer device.
|
||||
modules="$modules rockchipdrm pwm-cros-ec pwm_bl panel-simple"
|
||||
modules="$modules analogix-anx6345 pwm-sun4i sun4i-drm sun8i-mixer"
|
||||
;;
|
||||
virtual)
|
||||
# Hyper-V
|
||||
|
@ -724,7 +797,9 @@ hidden_dep_add_modules()
|
|||
manual_add_modules $(
|
||||
{
|
||||
cat "${DESTDIR}/lib/modules/${version}/modules.builtin"
|
||||
if [ -d "${DESTDIR}/lib/modules/${version}/kernel" ]; then
|
||||
find "${DESTDIR}/lib/modules/${version}/kernel" -name '*.ko*'
|
||||
fi
|
||||
} |
|
||||
while read -r module; do
|
||||
module="${module##*/}"
|
||||
|
@ -787,7 +862,7 @@ set_initlist()
|
|||
[ "${si_x}" = "${initdir}/*" ] && return
|
||||
|
||||
# only allow variable name chars
|
||||
case ${si_x#${initdir}/} in
|
||||
case ${si_x#"${initdir}"/} in
|
||||
*[![:alnum:]\._-]*)
|
||||
[ "${verbose}" = "y" ] \
|
||||
&& echo "$si_x ignored: not alphanumeric or '_' file" >&2
|
||||
|
@ -802,7 +877,7 @@ set_initlist()
|
|||
continue
|
||||
fi
|
||||
|
||||
si_x="$(get_source "${si_x#${initdir}/}")"
|
||||
si_x="$(get_source "${si_x#"${initdir}"/}")"
|
||||
|
||||
# skip non executable scripts
|
||||
if [ ! -x "${si_x}" ]; then
|
||||
|
@ -857,7 +932,7 @@ call_scripts()
|
|||
set -e
|
||||
for cs_x in ${runlist}; do
|
||||
[ -f "${initdir}/${cs_x}" ] || continue
|
||||
if [ x"$call_scripts_optional" = "xy" ]; then
|
||||
if [ "$call_scripts_optional" = "y" ]; then
|
||||
option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}")
|
||||
# shellcheck disable=SC1083,2086
|
||||
[ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue
|
||||
|
|
14
hooks/fsck
14
hooks/fsck
|
@ -47,7 +47,7 @@ get_fsck_type_fstab () {
|
|||
eval "$(_read_fstab_entry "$1")"
|
||||
|
||||
# Not found by default.
|
||||
if [ "$1" = "$MNT_DIR" ] && [ "$MNT_PASS" != 0 ]; then
|
||||
if [ "$1" = "$MNT_DIR" ]; then
|
||||
# Ignore filesystem type for /, as it is not available and
|
||||
# therefore never used at boot time
|
||||
if [ "${MNT_DIR}" = "/" ] || [ "${MNT_TYPE}" = "auto" ]; then
|
||||
|
@ -62,8 +62,18 @@ get_fsck_type_fstab () {
|
|||
}
|
||||
|
||||
get_fsck_types() {
|
||||
if [ "${FSTYPE:-auto}" = auto ]; then
|
||||
get_fsck_type_fstab / root
|
||||
get_fsck_type_fstab /usr /usr
|
||||
get_fsck_type_fstab /usr usr
|
||||
else
|
||||
local IFS=,
|
||||
local fstype
|
||||
set -f
|
||||
for fstype in $FSTYPE; do
|
||||
echo "$fstype"
|
||||
done
|
||||
set +f
|
||||
fi
|
||||
}
|
||||
|
||||
case $1 in
|
||||
|
|
20
init
20
init
|
@ -37,8 +37,7 @@ export quiet
|
|||
|
||||
# Note that this only becomes /dev on the real filesystem if udev's scripts
|
||||
# are used; which they will be, but it's worth pointing out
|
||||
test -x /usr/sbin/v86d && dev_exec="exec" || dev_exec="noexec"
|
||||
mount -t devtmpfs -o $dev_exec,nosuid,mode=0755 udev /dev
|
||||
mount -t devtmpfs -o nosuid,mode=0755 udev /dev
|
||||
mkdir /dev/pts
|
||||
mount -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts || true
|
||||
|
||||
|
@ -177,12 +176,6 @@ for x in $(cat /proc/cmdline); do
|
|||
;;
|
||||
panic=*)
|
||||
panic="${x#panic=}"
|
||||
case ${panic} in
|
||||
-1) ;;
|
||||
*[![:digit:].]*)
|
||||
panic=
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
ro)
|
||||
readonly=y
|
||||
|
@ -216,7 +209,7 @@ for x in $(cat /proc/cmdline); do
|
|||
;;
|
||||
netconsole=*)
|
||||
netconsole=${x#netconsole=}
|
||||
[ "x$debug" = "xy" ] && log_output=/dev/kmsg
|
||||
[ "$debug" = "y" ] && log_output=/dev/kmsg
|
||||
;;
|
||||
BOOTIF=*)
|
||||
BOOTIF=${x#BOOTIF=}
|
||||
|
@ -260,10 +253,6 @@ fi
|
|||
|
||||
maybe_break top
|
||||
|
||||
# export BOOT variable value for compcache,
|
||||
# so we know if we run from casper
|
||||
export BOOT
|
||||
|
||||
# Don't do log messages here to avoid confusing graphical boots
|
||||
run_scripts /scripts/init-top
|
||||
|
||||
|
@ -273,6 +262,10 @@ maybe_break modules
|
|||
load_modules
|
||||
[ "$quiet" != "y" ] && log_end_msg
|
||||
|
||||
starttime="$(_uptime)"
|
||||
starttime=$((starttime + 1)) # round up
|
||||
export starttime
|
||||
|
||||
maybe_break premount
|
||||
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount"
|
||||
run_scripts /scripts/init-premount
|
||||
|
@ -363,6 +356,7 @@ unset noresume
|
|||
unset fastboot
|
||||
unset forcefsck
|
||||
unset fsckfix
|
||||
unset starttime
|
||||
|
||||
# Move virtual filesystems over to the real filesystem
|
||||
mount -n -o move /sys ${rootmnt}/sys
|
||||
|
|
|
@ -290,14 +290,14 @@ copy_modules_dir kernel/drivers/ata
|
|||
.RE
|
||||
|
||||
.SS Including binaries
|
||||
If you need to copy binaries to the initramfs module, a command like this
|
||||
should be used:
|
||||
If you need to copy an executable or shared library to the initramfs
|
||||
module, use a command like this:
|
||||
.PP
|
||||
.RS
|
||||
copy_exec /sbin/mdadm /sbin
|
||||
.RE
|
||||
|
||||
mkinitramfs will automatically detect which libraries the executable depends on
|
||||
mkinitramfs will automatically detect which libraries it depends on
|
||||
and copy them to the initramfs. This means that most executables, unless
|
||||
compiled with klibc, will automatically include glibc in the image which will
|
||||
increase its size by several hundred kilobytes.
|
||||
|
@ -451,15 +451,10 @@ panic "Frobnication failed"
|
|||
|
||||
.TP
|
||||
\fB\fI
|
||||
add_mountroot_fail_hook
|
||||
Registers the script as able to provide possible further information, in the
|
||||
event that the root device cannot be found. See the example script in the
|
||||
initramfs-tools examples directory for more information.
|
||||
.RS
|
||||
.PP
|
||||
.B Example:
|
||||
add_mountroot_fail_hook
|
||||
.RE
|
||||
add_mountroot_fail_hook NN-name
|
||||
\fBDeprecated\fR: This function is now a stub which is effectively a no-op. It
|
||||
will be removed in a future version; please remove mountroot failure hooks from
|
||||
existing packages accordingly.
|
||||
|
||||
.SS Subdirectories
|
||||
Both /usr/share/initramfs-tools/scripts and /etc/initramfs-tools/scripts
|
||||
|
|
|
@ -49,24 +49,6 @@ If set to 'n'
|
|||
will build an initramfs without busybox.
|
||||
Beware that many boot scripts need busybox utilities.
|
||||
|
||||
.TP
|
||||
\fB COMPCACHE_SIZE
|
||||
Amount of RAM to use for RAM-based compressed swap space.
|
||||
The default is not to use compcache.
|
||||
|
||||
An empty value \- compcache isn't used, or added to the initramfs at all.
|
||||
|
||||
An integer and K (e.g. \fI65536 K\fP) \- use a number of kilobytes.
|
||||
|
||||
An integer and M (e.g. \fI256 M\fP) \- use a number of megabytes.
|
||||
|
||||
An integer and G (e.g. \fI1 G\fP) \- use a number of gigabytes.
|
||||
|
||||
An integer and % (e.g. \fI50 %\fP) \- use a percentage of the amount of RAM.
|
||||
|
||||
You can optionally install the \fIcompcache\fP package to configure this
|
||||
setting via debconf and have userspace scripts to load and unload compcache.
|
||||
|
||||
.TP
|
||||
\fB COMPRESS
|
||||
Specifies the compression method used for the initramfs image.
|
||||
|
@ -104,6 +86,12 @@ or is set to \fIauto\fP,
|
|||
will automatically select the largest available swap partition.
|
||||
Set it to \fInone\fP to disable resume from disk.
|
||||
|
||||
.TP
|
||||
\fB FSTYPE
|
||||
Specifies the filesystem type(s) to support, separated by commas. If
|
||||
this is not defined or is set to \fIauto\fP, \fBmkinitramfs\fP will
|
||||
automatically detect the current root and \fI/usr\fP filesystem types.
|
||||
|
||||
.SH VARIABLES FOR NFS BOOT
|
||||
.TP
|
||||
\fB DEVICE
|
||||
|
|
|
@ -33,4 +33,4 @@ fi
|
|||
|
||||
# we're good - create initramfs. update runs do_bootloader
|
||||
# shellcheck disable=SC2086
|
||||
INITRAMFS_TOOLS_KERNEL_HOOK=1 update-initramfs -c -k "${version}" ${bootopt} >&2
|
||||
update-initramfs -c -k "${version}" ${bootopt} >&2
|
||||
|
|
|
@ -33,4 +33,4 @@ fi
|
|||
|
||||
# delete initramfs
|
||||
# shellcheck disable=SC2086
|
||||
INITRAMFS_TOOLS_KERNEL_HOOK=1 update-initramfs -d -k "${version}" ${bootopt} >&2
|
||||
update-initramfs -d -k "${version}" ${bootopt} >&2
|
||||
|
|
|
@ -179,9 +179,8 @@ fi
|
|||
unset COMPRESS
|
||||
|
||||
if ! command -v "${compress}" >/dev/null 2>&1; then
|
||||
compress=gzip
|
||||
[ "${verbose}" = y ] && \
|
||||
echo "No ${compress} in ${PATH}, using gzip"
|
||||
compress=gzip
|
||||
fi
|
||||
|
||||
case "${compress}" in
|
||||
|
@ -193,7 +192,8 @@ gzip) # If we're doing a reproducible build, use gzip -n
|
|||
compress=pigz
|
||||
fi
|
||||
;;
|
||||
lz4) compress="lz4 -9 -l" ;;
|
||||
lz4) compress="lz4 -2 -l" ;;
|
||||
zstd) compress="zstd -q -1 -T0" ;;
|
||||
xz) compress="xz --check=crc32"
|
||||
# If we're not doing a reproducible build, enable multithreading
|
||||
test -z "${SOURCE_DATE_EPOCH}" && compress="$compress --threads=0"
|
||||
|
@ -222,12 +222,16 @@ fi
|
|||
# Prepare to clean up temporary files on exit
|
||||
DESTDIR=
|
||||
__TMPCPIOGZ=
|
||||
__TMPMAINCPIO=
|
||||
__TMPEARLYCPIO=
|
||||
clean_on_exit() {
|
||||
if [ "${keep}" = "y" ]; then
|
||||
echo "Working files in ${DESTDIR:-<not yet created>}, early initramfs in ${__TMPEARLYCPIO:-<not yet created>} and overlay in ${__TMPCPIOGZ:-<not yet created>}"
|
||||
echo "Working files in ${DESTDIR:-<not yet created>}," \
|
||||
"early initramfs in ${__TMPEARLYCPIO:-<not yet created>}," \
|
||||
"main initramfs in ${__TMPMAINCPIO:-<not yet created>} and" \
|
||||
"overlay in ${__TMPCPIOGZ:-<not yet created>}"
|
||||
else
|
||||
for path in "${DESTDIR}" "${__TMPCPIOGZ}" "${__TMPEARLYCPIO}"; do
|
||||
for path in "${DESTDIR}" "${__TMPCPIOGZ}" "${__TMPMAINCPIO}" "${__TMPEARLYCPIO}"; do
|
||||
test -z "${path}" || rm -rf "${path}"
|
||||
done
|
||||
fi
|
||||
|
@ -240,6 +244,7 @@ trap "exit 1" INT TERM # makes the EXIT trap effective even when killed
|
|||
DESTDIR="$(mktemp -d "${TMPDIR:-/var/tmp}/mkinitramfs_XXXXXX")" || exit 1
|
||||
chmod 755 "${DESTDIR}"
|
||||
__TMPCPIOGZ="$(mktemp "${TMPDIR:-/var/tmp}/mkinitramfs-OL_XXXXXX")" || exit 1
|
||||
__TMPMAINCPIO="$(mktemp "${TMPDIR:-/var/tmp}/mkinitramfs-MAIN_XXXXXX")" || exit 1
|
||||
__TMPEARLYCPIO="$(mktemp "${TMPDIR:-/var/tmp}/mkinitramfs-FW_XXXXXX")" || exit 1
|
||||
|
||||
DPKG_ARCH=$(dpkg --print-architecture)
|
||||
|
@ -254,8 +259,8 @@ export DPKG_ARCH
|
|||
export verbose
|
||||
export MODULES
|
||||
export BUSYBOX
|
||||
export COMPCACHE_SIZE
|
||||
export RESUME
|
||||
export FSTYPE
|
||||
|
||||
# Private, used by 'catenate_cpiogz'.
|
||||
export __TMPCPIOGZ
|
||||
|
@ -273,10 +278,10 @@ for d in conf/conf.d etc run scripts ${MODULESDIR}; do
|
|||
mkdir -p "${DESTDIR}/${d}"
|
||||
done
|
||||
|
||||
# Copy in modules.builtin and modules.order (not generated by depmod)
|
||||
# Copy in modules.builtin, modules.builtin.modinfo and modules.order (not generated by depmod)
|
||||
# and modules.builtin.bin (generated by depmod, but too late to avoid
|
||||
# error messages as in #948257)
|
||||
for x in modules.builtin modules.builtin.bin modules.order; do
|
||||
for x in modules.builtin modules.builtin.bin modules.builtin.modinfo modules.order; do
|
||||
if [ -f "${MODULESDIR}/${x}" ]; then
|
||||
cp -p "${MODULESDIR}/${x}" "${DESTDIR}${MODULESDIR}/${x}"
|
||||
fi
|
||||
|
@ -314,6 +319,9 @@ esac
|
|||
# Resolve hidden dependencies
|
||||
hidden_dep_add_modules
|
||||
|
||||
# Add firmware for built-in code
|
||||
add_builtin_firmware
|
||||
|
||||
# First file executed by linux
|
||||
cp -p /usr/share/initramfs-tools/init "${DESTDIR}/init"
|
||||
|
||||
|
@ -360,6 +368,9 @@ fi
|
|||
touch "${DESTDIR}/etc/fstab"
|
||||
ln -s /proc/mounts "${DESTDIR}/etc/mtab"
|
||||
|
||||
# Install libc6, pthreads, and dlopened gcc_s.so.1 (Debian bug #950254) LP: #1880853 LP: #1958594
|
||||
copy_exec /usr/lib/initramfs-tools/bin/gcc_s1-stub /usr/lib/initramfs-tools/bin/gcc_s1-stub
|
||||
|
||||
# install wait-for-root binary.
|
||||
copy_exec /usr/lib/initramfs-tools/bin/wait-for-root /sbin
|
||||
|
||||
|
@ -381,6 +392,24 @@ for b in $(cd "${DESTDIR}/scripts" && find . -mindepth 1 -type d); do
|
|||
cache_run_scripts "${DESTDIR}" "/scripts/${b#./}"
|
||||
done
|
||||
|
||||
# decompress modules for boot speed, if possible
|
||||
find "${DESTDIR}/${MODULESDIR}" -name '*.ko.*' | while read -r ko; do
|
||||
case "$ko" in
|
||||
*.xz)
|
||||
if ! command -v xz >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
xz -d "${ko}"
|
||||
;;
|
||||
*.zst)
|
||||
if ! command -v zstd >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
zstd -q -d --rm "${ko}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# generate module deps
|
||||
depmod -a -b "${DESTDIR}" "${version}"
|
||||
rm -f "${DESTDIR}/lib/modules/${version}"/modules.*map
|
||||
|
@ -414,13 +443,6 @@ esac
|
|||
|
||||
[ "${verbose}" = y ] && echo "Building cpio ${outfile} initramfs"
|
||||
|
||||
if [ -s "${__TMPEARLYCPIO}" ]; then
|
||||
cat "${__TMPEARLYCPIO}" >"${outfile}" || exit 1
|
||||
else
|
||||
# truncate
|
||||
true > "${outfile}"
|
||||
fi
|
||||
|
||||
(
|
||||
# preserve permissions if root builds the image, see #633582
|
||||
[ "$(id -ru)" != 0 ] && cpio_owner_root="-R 0:0"
|
||||
|
@ -436,10 +458,9 @@ if [ -n "${SOURCE_DATE_EPOCH}" ]; then
|
|||
fi
|
||||
|
||||
# work around lack of "set -o pipefail" for the following pipe:
|
||||
# cd "${DESTDIR}" && find . | LC_ALL=C sort | cpio --quiet $cpio_owner_root $cpio_reproducible -o -H newc | gzip >>"${outfile}" || exit 1
|
||||
# cd "${DESTDIR}" && find . | LC_ALL=C sort | cpio --quiet $cpio_owner_root $cpio_reproducible -o -H newc >>"${outfile}" || exit 1
|
||||
ec1=1
|
||||
ec2=1
|
||||
ec3=1
|
||||
exec 3>&1
|
||||
eval "$(
|
||||
# http://cfaj.freeshell.org/shell/cus-faq-2.html
|
||||
|
@ -451,26 +472,31 @@ eval "$(
|
|||
LC_ALL=C sort
|
||||
} | {
|
||||
# shellcheck disable=SC2086
|
||||
cpio --quiet $cpio_owner_root $cpio_reproducible -o -H newc 4>&-; echo "ec2=$?;" >&4
|
||||
} | ${compress} >>"${outfile}"
|
||||
echo "ec3=$?;" >&4
|
||||
cpio --quiet $cpio_owner_root $cpio_reproducible -o -H newc 4>&- >"${__TMPMAINCPIO}"
|
||||
echo "ec2=$?;" >&4
|
||||
}
|
||||
)"
|
||||
if [ "$ec1" -ne 0 ]; then
|
||||
echo "E: mkinitramfs failure find $ec1 cpio $ec2 $compress $ec3" >&2
|
||||
echo "E: mkinitramfs failure find $ec1 cpio $ec2" >&2
|
||||
exit "$ec1"
|
||||
fi
|
||||
if [ "$ec2" -ne 0 ]; then
|
||||
echo "E: mkinitramfs failure cpio $ec2 $compress $ec3" >&2
|
||||
echo "E: mkinitramfs failure cpio $ec2" >&2
|
||||
exit "$ec2"
|
||||
fi
|
||||
if [ "$ec3" -ne 0 ]; then
|
||||
echo "E: mkinitramfs failure $compress $ec3" >&2
|
||||
exit "$ec3"
|
||||
fi
|
||||
) || exit 1
|
||||
|
||||
if [ -s "${__TMPCPIOGZ}" ]; then
|
||||
cat "${__TMPCPIOGZ}" >>"${outfile}" || exit 1
|
||||
{
|
||||
if [ -s "${__TMPEARLYCPIO}" ]; then
|
||||
cat "${__TMPEARLYCPIO}" || exit 1
|
||||
fi
|
||||
|
||||
$compress -c "${__TMPMAINCPIO}" ||
|
||||
{ echo "E: mkinitramfs failure $compress $?" >&2; exit 1; }
|
||||
|
||||
if [ -s "${__TMPCPIOGZ}" ]; then
|
||||
cat "${__TMPCPIOGZ}" || exit 1
|
||||
fi
|
||||
} >"${outfile}" || exit 1
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -5,6 +5,7 @@ _log_msg()
|
|||
if [ "${quiet?}" = "y" ]; then return; fi
|
||||
# shellcheck disable=SC2059
|
||||
printf "$@"
|
||||
return 0 # Prevents error carry over in case of unavailable console
|
||||
}
|
||||
|
||||
log_success_msg()
|
||||
|
@ -35,33 +36,9 @@ log_end_msg()
|
|||
# Add failure hook
|
||||
add_mountroot_fail_hook()
|
||||
{
|
||||
mkdir -p /tmp/mountroot-fail-hooks.d
|
||||
ln -s "$0" /tmp/mountroot-fail-hooks.d/"$0"
|
||||
}
|
||||
|
||||
# Run failure hooks.
|
||||
# When a failure hook exits "1", it has not done anything to correct the
|
||||
# system. Exiting "0" means that something has been attempted to resolve
|
||||
# the lack of a root filesystem.
|
||||
# Hooks are run in lexigraphical order, and are responsible for removing
|
||||
# themselves if they should not re-run in a later cycle. When one exits
|
||||
# "0", the stack is stopped, so the caller can return to the main rootfs
|
||||
# wait loop.
|
||||
try_failure_hooks()
|
||||
{
|
||||
local hook
|
||||
|
||||
chvt 1
|
||||
if [ -x /bin/plymouth ] && plymouth --ping; then
|
||||
/bin/plymouth hide-splash > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
for hook in /tmp/mountroot-fail-hooks.d/*; do
|
||||
if [ -x "${hook}" ] && "${hook}" mountfail; then
|
||||
# DEPRECATED; this definition remains as a stub but any packages
|
||||
# calling this function should be revised to remove references to it
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
panic()
|
||||
|
@ -73,11 +50,30 @@ panic()
|
|||
fi
|
||||
|
||||
echo "$@"
|
||||
# Disallow console access
|
||||
|
||||
# The panic= parameter implies we should disallow console access
|
||||
if [ -n "${panic?}" ]; then
|
||||
delay=
|
||||
case "${panic?}" in
|
||||
-*[![:digit:].]*) # invalid: wait forever
|
||||
;;
|
||||
-*) # timeout < 0: reboot immediately
|
||||
delay=0
|
||||
;;
|
||||
0 | *[![:digit:].]*) # timeout = 0 or invalid: wait forever
|
||||
;;
|
||||
*) # timeout > 0: seconds before rebooting
|
||||
delay="${panic}"
|
||||
;;
|
||||
esac
|
||||
if [ -n "${delay}" ]; then
|
||||
echo "Rebooting automatically due to panic= boot argument"
|
||||
[ "$panic" = "-1" ] || sleep "${panic}"
|
||||
sleep "${delay}"
|
||||
reboot -f
|
||||
else
|
||||
echo "Halting automatically due to panic= boot argument"
|
||||
halt -f
|
||||
fi
|
||||
exit # in case reboot fails, force kernel panic
|
||||
fi
|
||||
|
||||
|
@ -156,6 +152,25 @@ load_modules()
|
|||
fi
|
||||
}
|
||||
|
||||
_uptime() {
|
||||
local uptime
|
||||
uptime="$(cat /proc/uptime)"
|
||||
uptime="${uptime%%[. ]*}"
|
||||
echo "$uptime"
|
||||
}
|
||||
|
||||
time_elapsed() {
|
||||
# shellcheck disable=SC2154
|
||||
if [ -z "$starttime" ]; then
|
||||
log_failure_msg "time_elapsed() called before \$starttime initialized"
|
||||
echo 0
|
||||
fi
|
||||
local delta
|
||||
delta="$(_uptime)"
|
||||
delta=$((delta - starttime))
|
||||
echo "$delta"
|
||||
}
|
||||
|
||||
# lilo compatibility
|
||||
parse_numeric() {
|
||||
case $1 in
|
||||
|
@ -314,10 +329,17 @@ configure_networking()
|
|||
|
||||
for v in $VLAN; do
|
||||
VLAN_LINK="$VLAN_LINK ${v##*:}"
|
||||
VLAN_NAMES="$VLAN_NAMES ${v%:*}"
|
||||
done
|
||||
|
||||
# activate non-autoconfigured s390x devices
|
||||
for dev in $DEVICE $DEVICE6 $IP6 $VLAN_LINK; do
|
||||
# do not chzdev $dev if it is a not-yet-created vlan interface
|
||||
for vlan_name in $VLAN_NAMES; do
|
||||
if [ "$dev" = "$vlan_name" ]; then
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
case ${dev} in
|
||||
enc*)
|
||||
zdev=${dev#enc}
|
||||
|
@ -334,6 +356,21 @@ configure_networking()
|
|||
ip link add name "$vname" link "$vlink" type vlan id "$vid"
|
||||
done
|
||||
|
||||
if [ -n "${DEVICE}" ]; then
|
||||
local netdevwait=180
|
||||
log_begin_msg "Waiting up to ${netdevwait} secs for ${DEVICE} to become available"
|
||||
while [ "$(time_elapsed)" -lt "$netdevwait" ]; do
|
||||
if [ -e "/sys/class/net/${DEVICE}" ]; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
if [ ! -e "/sys/class/net/${DEVICE}" ]; then
|
||||
log_failure_msg "Interface ${DEVICE} did not appear in time"
|
||||
fi
|
||||
log_end_msg
|
||||
fi
|
||||
|
||||
wait_for_udev 10
|
||||
|
||||
# support ip options see linux sources
|
||||
|
@ -487,7 +524,7 @@ mask2cidr() {
|
|||
# Assumes there's no "255." after a non-255 byte in the mask
|
||||
local x=${1##*255.}
|
||||
set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) "${x%%.*}"
|
||||
x=${1%%$3*}
|
||||
x=${1%%"$3"*}
|
||||
echo $(( $2 + (${#x}/4) ))
|
||||
}
|
||||
|
||||
|
@ -539,7 +576,6 @@ _render_netplan() {
|
|||
fi
|
||||
echo "network:"
|
||||
echo " version: 2"
|
||||
echo " renderer: networkd"
|
||||
echo " ethernets:"
|
||||
echo " $name:"
|
||||
if [ -n "$mac" ] && grep -q net.ifnames=0 /proc/cmdline 2>/dev/null; then
|
||||
|
@ -566,7 +602,7 @@ _render_netplan() {
|
|||
found=","
|
||||
for n in $addrs; do
|
||||
# remove dups
|
||||
[ "${found#*,$n,}" = "${found}" ] || continue
|
||||
[ "${found#*,"$n",}" = "${found}" ] || continue
|
||||
found="${found}$n,"
|
||||
echo " - \"$n\""
|
||||
done
|
||||
|
@ -578,7 +614,7 @@ _render_netplan() {
|
|||
local alist="[" slist=""
|
||||
for n in $ns_addrs; do
|
||||
# do not put in duplicates
|
||||
[ "${alist#*\"$n\"}" = "$alist" ] || continue
|
||||
[ "${alist#*\""$n"\"}" = "$alist" ] || continue
|
||||
alist="${alist}\"$n\", ";
|
||||
done
|
||||
alist="${alist%, }]"
|
||||
|
@ -587,7 +623,7 @@ _render_netplan() {
|
|||
slist="["
|
||||
for n in ${ns_search}; do
|
||||
# do not put in duplicates
|
||||
[ "${slist#*\"$n\"}" = "$slist" ] || continue
|
||||
[ "${slist#*\""$n"\"}" = "$slist" ] || continue
|
||||
slist="${slist}\"$n\", ";
|
||||
done
|
||||
slist="${slist%, }]"
|
||||
|
@ -826,11 +862,13 @@ _checkfs_once()
|
|||
if [ "${quiet}" = n ]
|
||||
then
|
||||
log_begin_msg "Will now check $NAME file system"
|
||||
# shellcheck disable=SC2086
|
||||
logsave -a -s $FSCK_LOGFILE fsck $spinner $force $fix -V -t "$TYPE" "$DEV"
|
||||
FSCKCODE=$?
|
||||
log_end_msg
|
||||
else
|
||||
log_begin_msg "Checking $NAME file system"
|
||||
# shellcheck disable=SC2086
|
||||
logsave -a -s $FSCK_LOGFILE fsck $spinner $force $fix -T -t "$TYPE" "$DEV"
|
||||
FSCKCODE=$?
|
||||
log_end_msg
|
||||
|
|
|
@ -8,14 +8,6 @@ local_top()
|
|||
[ "$quiet" != "y" ] && log_end_msg
|
||||
fi
|
||||
local_top_used=yes
|
||||
|
||||
# Start time for measuring elapsed time in local_device_setup
|
||||
if [ -z "${local_top_time}" ]; then
|
||||
local_top_time="$(cat /proc/uptime)"
|
||||
local_top_time="${local_top_time%%[. ]*}"
|
||||
local_top_time=$((local_top_time + 1)) # round up
|
||||
export local_top_time
|
||||
fi
|
||||
}
|
||||
|
||||
local_block()
|
||||
|
@ -44,7 +36,6 @@ local_bottom()
|
|||
fi
|
||||
local_premount_used=no
|
||||
local_top_used=no
|
||||
unset local_top_time
|
||||
}
|
||||
|
||||
# $1=device ID to mount
|
||||
|
@ -115,15 +106,14 @@ local_device_setup()
|
|||
|
||||
while true; do
|
||||
sleep 1
|
||||
time_elapsed="$(cat /proc/uptime)"
|
||||
time_elapsed="${time_elapsed%%[. ]*}"
|
||||
time_elapsed=$((time_elapsed - local_top_time))
|
||||
time_elapsed="$(time_elapsed)"
|
||||
|
||||
local_block "${dev_id}"
|
||||
|
||||
# If mdadm's local-block script counts the
|
||||
# number of times it is run, make sure to
|
||||
# run it the expected number of times.
|
||||
mdadm_exec=0
|
||||
while true; do
|
||||
if [ -f /run/count.mdadm.initrd ]; then
|
||||
count="$(cat /run/count.mdadm.initrd)"
|
||||
|
@ -134,19 +124,42 @@ local_device_setup()
|
|||
else
|
||||
break
|
||||
fi
|
||||
if [ ${count} -ge ${time_elapsed} ]; then
|
||||
if [ "${count}" -ge "${time_elapsed}" ]; then
|
||||
break;
|
||||
fi
|
||||
|
||||
# Track that mdadm was executed to force
|
||||
# cryptroot execution after the loop, see
|
||||
# LP #1879980.
|
||||
mdadm_exec=1
|
||||
/scripts/local-block/mdadm "${dev_id}"
|
||||
|
||||
# Cryptroot must run here, see LP #1879980.
|
||||
# The counter is inc/dec on cryptroot script!
|
||||
if [ -f /run/cryptroot.initrd.cnt ]; then
|
||||
crypt_cnt=$(cat /run/cryptroot.initrd.cnt)
|
||||
if [ "${crypt_cnt}" -gt 0 ]; then
|
||||
/scripts/local-block/cryptroot "${dev_id}"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Extra cryptroot run after mdadm loop in order to
|
||||
# start encrypted volumes on top of RAID arrays.
|
||||
if [ -f /run/cryptroot.initrd.cnt ]; then
|
||||
crypt_cnt=$(cat /run/cryptroot.initrd.cnt)
|
||||
if [ "${crypt_cnt}" -gt 0 ] || [ ${mdadm_exec} -ne 0 ]; then
|
||||
/scripts/local-block/cryptroot "${dev_id}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if real_dev=$(resolve_device "${dev_id}") &&
|
||||
get_fstype "${real_dev}" >/dev/null; then
|
||||
wait_for_udev 10
|
||||
log_end_msg 0
|
||||
break
|
||||
fi
|
||||
if [ ${time_elapsed} -ge "${slumber}" ]; then
|
||||
if [ "${time_elapsed}" -ge "${slumber}" ]; then
|
||||
log_end_msg 1 || true
|
||||
break
|
||||
fi
|
||||
|
@ -229,6 +242,7 @@ able to reboot again and resume the installation.
|
|||
done
|
||||
|
||||
# Get the loop filesystem type if not set
|
||||
# shellcheck disable=SC2153
|
||||
FSTYPE="$LOOPFSTYPE"
|
||||
if [ -z "$FSTYPE" ] || [ "$FSTYPE" = "unknown" ]; then
|
||||
FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}")
|
||||
|
|
|
@ -79,17 +79,19 @@ if [ -n "$BROKEN_CLOCK" ] && [ -n "$ROOTDEV" ]; then
|
|||
# need udev settle for /dev/disk/by-* symlinks to be added
|
||||
udevadm settle
|
||||
|
||||
wait-for-root "$ROOTDEV" "${ROOTDELAY:-180}"
|
||||
wait-for-root "$ROOTDEV" "${ROOTDELAY:-180}" >/dev/null
|
||||
|
||||
ROOTDISK=$(readlink -f "$ROOTDEV")
|
||||
|
||||
MOUNTDATESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time")
|
||||
# Trim whitespace for busybox
|
||||
MOUNTDATE="${MOUNTDATESTR#*:}"
|
||||
MOUNTDATE="${MOUNTDATE#"${MOUNTDATE%%[![:space:]]*}"}"
|
||||
|
||||
CREATEDATESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Filesystem created") || true
|
||||
# Trim whitespace for busybox
|
||||
CREATEDATE="${CREATEDATESTR#*:}"
|
||||
CREATEDATE="${CREATEDATE#"${CREATEDATE%%[![:space:]]*}"}"
|
||||
|
||||
# Hide stderr to avoid ugly message:
|
||||
# can't open '/dev/misc/rtc': No such file or directory
|
||||
|
@ -100,7 +102,7 @@ if [ -n "$BROKEN_CLOCK" ] && [ -n "$ROOTDEV" ]; then
|
|||
|
||||
# make sure we're also compatible with busybox, if available
|
||||
DATE="/bin/date -D%c"
|
||||
date -D%c 2>/dev/null || DATE=/bin/date
|
||||
date -D%c 2>/dev/null 2>&1 || DATE=/bin/date
|
||||
|
||||
if [ "$MOUNTDATE" = "n/a" ]; then
|
||||
# some versions of mkfs set n/a now, date is not happy with this so
|
||||
|
|
|
@ -32,7 +32,7 @@ if ! local_device_setup "${resume}" "suspend/resume device" false; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
DEV=$(readlink "$resume")
|
||||
DEV=$(readlink -f "$resume")
|
||||
DEV=/sys/class/block/${DEV##*/}/dev
|
||||
if [ -r "$DEV" ]; then
|
||||
read -r MAJMIN < "$DEV"
|
||||
|
|
|
@ -39,7 +39,7 @@ nfs_mount_root_impl()
|
|||
configure_networking
|
||||
|
||||
# get nfs root from dhcp
|
||||
if [ "x${NFSROOT}" = "xauto" ]; then
|
||||
if [ "${NFSROOT}" = "auto" ]; then
|
||||
# check if server ip is part of dhcp root-path
|
||||
if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
|
||||
NFSROOT=${ROOTSERVER}:${ROOTPATH}
|
||||
|
|
|
@ -8,14 +8,14 @@ LDFLAGS =
|
|||
|
||||
|
||||
.PHONY: all
|
||||
all: wait-for-root rzscontrol
|
||||
all: wait-for-root gcc_s1-stub
|
||||
|
||||
wait-for-root: wait-for-root.o
|
||||
$(CC) $(LDFLAGS) -o $@ $< $(UDEV_LIBS)
|
||||
|
||||
rzscontrol: rzscontrol.o
|
||||
$(CC) $(LDFLAGS) -o $@ $<
|
||||
gcc_s1-stub:
|
||||
gcc -Wl,--no-as-needed -shared -l:libpthread.so.0 -l:libgcc_s.so.1 -o $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f wait-for-root.o wait-for-root rzscontrol.o rzscontrol core *~
|
||||
rm -f wait-for-root.o wait-for-root gcc_s1-stub core *~
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
network:
|
||||
version: 2
|
||||
renderer: networkd
|
||||
ethernets:
|
||||
example1:
|
||||
dhcp4: true
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
network:
|
||||
version: 2
|
||||
renderer: networkd
|
||||
ethernets:
|
||||
example1:
|
||||
dhcp4: true
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
network:
|
||||
version: 2
|
||||
renderer: networkd
|
||||
ethernets:
|
||||
example1:
|
||||
addresses:
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
network:
|
||||
version: 2
|
||||
renderer: networkd
|
||||
ethernets:
|
||||
example1:
|
||||
dhcp6: true
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
network:
|
||||
version: 2
|
||||
renderer: networkd
|
||||
ethernets:
|
||||
example1:
|
||||
{}
|
||||
|
|
|
@ -31,6 +31,8 @@ xcpio()
|
|||
|
||||
if gzip -t "$archive" >/dev/null 2>&1 ; then
|
||||
gzip -c -d "$archive"
|
||||
elif zstd -q -c -t "$archive" >/dev/null 2>&1 ; then
|
||||
zstd -q -c -d "$archive"
|
||||
elif xzcat -t "$archive" >/dev/null 2>&1 ; then
|
||||
xzcat "$archive"
|
||||
elif lz4cat -t < "$archive" >/dev/null 2>&1 ; then
|
||||
|
@ -110,6 +112,7 @@ splitinitramfs()
|
|||
fi
|
||||
dd < "$initramfs" skip=$start count=$((end - start)) iflag=skip_bytes 2> /dev/null |
|
||||
(
|
||||
# shellcheck disable=SC2030
|
||||
if [ -n "$dir" ]; then
|
||||
mkdir -p -- "$dir/$subdir"
|
||||
cd -- "$dir/$subdir"
|
||||
|
@ -125,9 +128,11 @@ splitinitramfs()
|
|||
trap 'rm -f "$subarchive"' EXIT
|
||||
dd < "$initramfs" skip=$end iflag=skip_bytes 2> /dev/null \
|
||||
> "$subarchive"
|
||||
# shellcheck disable=SC2030,SC2031
|
||||
xcpio "$subarchive" "${dir:+$dir/main}" -i "$@"
|
||||
else
|
||||
# Don't use subdirectories (for backward compatibility)
|
||||
# shellcheck disable=SC2031
|
||||
xcpio "$initramfs" "$dir" -i "$@"
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
STATEDIR=/var/lib/initramfs-tools
|
||||
BOOTDIR=/boot
|
||||
CONF=/etc/initramfs-tools/update-initramfs.conf
|
||||
mode=""
|
||||
|
@ -12,26 +11,12 @@ set -e
|
|||
|
||||
[ -r ${CONF} ] && . ${CONF}
|
||||
|
||||
case "$DPKG_MAINTSCRIPT_PACKAGE" in
|
||||
linux-image-*)
|
||||
if [ -z "$INITRAMFS_TOOLS_KERNEL_HOOK" ]; then
|
||||
# kernel maintainer script called us directly; ignore
|
||||
# it and let the hook script handle it instead
|
||||
echo "update-initramfs: deferring update (hook will be called later)"
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
?*)
|
||||
if [ $# = 1 ] \
|
||||
&& [ x"$1" = x-u ]
|
||||
then
|
||||
if [ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] && [ $# = 1 ] && [ "$1" = '-u' ]; then
|
||||
if dpkg-trigger --no-await update-initramfs; then
|
||||
echo "update-initramfs: deferring update (trigger activated)"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
usage()
|
||||
{
|
||||
|
@ -156,7 +141,6 @@ generate_initramfs()
|
|||
# shellcheck disable=SC2086
|
||||
if mkinitramfs ${OPTS} "${initramfs}.new" "${version}"; then
|
||||
mv -f "${initramfs}.new" "${initramfs}"
|
||||
set_sha1
|
||||
# Guard against an unclean shutdown
|
||||
sync -f "${initramfs}"
|
||||
else
|
||||
|
@ -173,23 +157,12 @@ run_bootloader()
|
|||
{
|
||||
# invoke policy conformant bootloader hooks
|
||||
if [ -d /etc/initramfs/post-update.d/ ]; then
|
||||
run-parts --arg=${version} --arg=${initramfs} \
|
||||
run-parts --arg="${version}" --arg="${initramfs}" \
|
||||
/etc/initramfs/post-update.d/
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
# Note that this must overwrite so that updates work.
|
||||
set_sha1()
|
||||
{
|
||||
sha1sum "${initramfs}" > "${STATEDIR}/${version}"
|
||||
}
|
||||
|
||||
delete_sha1()
|
||||
{
|
||||
rm -f "${STATEDIR}/${version}"
|
||||
}
|
||||
|
||||
# ro /boot is not modified
|
||||
ro_boot_check()
|
||||
{
|
||||
|
@ -317,8 +290,6 @@ delete()
|
|||
|
||||
echo "update-initramfs: Deleting ${initramfs}"
|
||||
|
||||
delete_sha1
|
||||
|
||||
rm -f "${initramfs}" "${initramfs}.bak"
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue