import coreos-installer-0.9.1-17.el8

This commit is contained in:
CentOS Sources 2021-07-14 04:15:02 +00:00 committed by Stepan Oksanichenko
commit 42302eab77
12 changed files with 923 additions and 0 deletions

View File

@ -0,0 +1,2 @@
9ad623e572641316d7bdb51e11e136713b019bfa SOURCES/coreos-installer-0.9.1-vendor.tar.gz
147efc72c044194209d686b78d62e3acbc761763 SOURCES/coreos-installer-0.9.1.crate

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
SOURCES/coreos-installer-0.9.1-vendor.tar.gz
SOURCES/coreos-installer-0.9.1.crate

114
SOURCES/coidracut.patch Normal file
View File

@ -0,0 +1,114 @@
diff --git a/dracut/50rdcore/module-setup.sh b/dracut/50rdcore/module-setup.sh
index 27a2ac3..443b5cf 100755
--- a/dracut/50rdcore/module-setup.sh
+++ b/dracut/50rdcore/module-setup.sh
@@ -1,5 +1,47 @@
#!/bin/bash
+install_and_enable_unit() {
+ unit="$1"; shift
+ target="$1"; shift
+ inst_simple "$moddir/$unit" "$systemdsystemunitdir/$unit"
+ # note we `|| exit 1` here so we error out if e.g. the units are missing
+ # see https://github.com/coreos/fedora-coreos-config/issues/799
+ systemctl -q --root="$initdir" add-requires "$target" "$unit" || exit 1
+}
+
install() {
inst_simple "$moddir/rdcore" "/usr/bin/rdcore"
+
+ inst_simple "$moddir/coreos-installer" "/usr/bin/coreos-installer"
+
+ inst_simple "$moddir/coreos-installer-generator" \
+ "$systemdutildir/system-generators/coreos-installer-generator"
+
+ inst_script "$moddir/coreos-installer-service" \
+ "/usr/libexec/coreos-installer-service"
+
+ inst_script "$moddir/coreos-installer-disable-device-auto-activation" \
+ "/usr/libexec/coreos-installer-disable-device-auto-activation"
+
+ install_and_enable_unit "coreos-installer.service" \
+ "default.target"
+
+ install_and_enable_unit "coreos-installer-reboot.service" \
+ "default.target"
+
+# install_and_enable_unit "coreos-installer-noreboot.service" \
+# "basic.target"
+# inst_simple "$moddir/coreos-installer-reboot.service" \
+# "$systemdsystemunitdir/coreos-installer-reboot.service"
+# inst_simple "$moddir/coreos-installer-noreboot.service" \
+# "$systemdsystemunitdir/coreos-installer-noreboot.service"
+#
+# inst_simple "$moddir/coreos-installer.target" \
+# "$systemdsystemunitdir/coreos-installer.target"
+#
+# inst_simple "$moddir/coreos-installer-pre.target" \
+# "$systemdsystemunitdir/coreos-installer-pre.target"
+#
+# inst_simple "$moddir/coreos-installer-post.target" \
+# "$systemdsystemunitdir/coreos-installer-post.target"
}
diff --git a/systemd/coreos-installer-generator b/systemd/coreos-installer-generator
index 804d045..b2bcaec 100755
--- a/systemd/coreos-installer-generator
+++ b/systemd/coreos-installer-generator
@@ -30,11 +30,11 @@ karg_bool() {
}
if [ -n "$(karg coreos.inst.install_dev)" ]; then
- ln -sf "/usr/lib/systemd/system/coreos-installer-post.target" \
- "${UNIT_DIR}/default.target"
+# ln -sf "/usr/lib/systemd/system/coreos-installer-post.target" \
+# "${UNIT_DIR}/basic.target"
# Create precondition for coreos-installer-reboot.service if requested
if ! karg_bool coreos.inst.skip_reboot; then
- touch /run/coreos-installer-reboot
+ > /run/coreos-installer-reboot
fi
fi
diff --git a/systemd/coreos-installer-reboot.service b/systemd/coreos-installer-reboot.service
index 18fdb4b..ad79614 100644
--- a/systemd/coreos-installer-reboot.service
+++ b/systemd/coreos-installer-reboot.service
@@ -1,7 +1,7 @@
[Unit]
Description=Reboot after CoreOS Installer
-Requires=coreos-installer.target
-After=coreos-installer.target
+#Requires=coreos-installer.target
+After=coreos-installer.service
OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly
ConditionPathExists=/run/coreos-installer-reboot
diff --git a/systemd/coreos-installer.service b/systemd/coreos-installer.service
index 5e222f2..716b783 100644
--- a/systemd/coreos-installer.service
+++ b/systemd/coreos-installer.service
@@ -1,12 +1,20 @@
[Unit]
Description=CoreOS Installer
-Before=coreos-installer.target
-After=network-online.target
-Wants=network-online.target
+#Before=coreos-installer.target
+#After=nm-run.service
+#After=network-online.target
+#Wants=network-online.target
# Until we retry HTTP requests let's wait here until
# systemd-resolved comes up if enabled.
# https://github.com/coreos/coreos-installer/issues/283
-After=systemd-resolved.service
+#After=systemd-resolved.service
+
+After=basic.target
+# Network is enabled here
+After=nm-run.service
+# compat: remove when everyone is on dracut 053+
+After=dracut-initqueue.service
+
ConditionKernelCommandLine=coreos.inst.install_dev
OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly

27
SOURCES/coidracut2.patch Normal file
View File

@ -0,0 +1,27 @@
diff --git a/dracut/50rdcore/module-setup.sh b/dracut/50rdcore/module-setup.sh
index 443b5cf..c065851 100755
--- a/dracut/50rdcore/module-setup.sh
+++ b/dracut/50rdcore/module-setup.sh
@@ -10,6 +10,10 @@ install_and_enable_unit() {
}
install() {
+ inst_multiple gpg
+ inst_multiple gpg-agent
+ inst_multiple gpg-connect-agent
+
inst_simple "$moddir/rdcore" "/usr/bin/rdcore"
inst_simple "$moddir/coreos-installer" "/usr/bin/coreos-installer"
diff --git a/scripts/coreos-installer-service b/scripts/coreos-installer-service
index 347b5f5..239de3a 100755
--- a/scripts/coreos-installer-service
+++ b/scripts/coreos-installer-service
@@ -87,6 +87,7 @@ fi
# Other args that should just be copied over
copy_arg coreos.inst.image_url --image-url
+copy_arg coreos.inst.image_file --image-file
copy_arg coreos.inst.platform_id --platform
copy_arg coreos.inst.stream --stream
copy_arg coreos.inst.save_partlabel --save-partlabel

246
SOURCES/coidracut3.patch Normal file
View File

@ -0,0 +1,246 @@
diff --git a/dracut/50rdcore/module-setup.sh b/dracut/50rdcore/module-setup.sh
index c065851..2d689d9 100755
--- a/dracut/50rdcore/module-setup.sh
+++ b/dracut/50rdcore/module-setup.sh
@@ -14,6 +14,48 @@ install() {
inst_multiple gpg-agent
inst_multiple gpg-connect-agent
+ inst_multiple \
+ realpath \
+ basename \
+ blkid \
+ cat \
+ dirname \
+ findmnt \
+ growpart \
+ realpath \
+ resize2fs \
+ tail \
+ tune2fs \
+ touch \
+ xfs_admin \
+ xfs_growfs \
+ wc \
+ lsblk \
+ wipefs
+
+ inst_multiple \
+ awk \
+ cat \
+ dd \
+ grep \
+ mktemp \
+ partx \
+ rm \
+ sed \
+ sfdisk \
+ sgdisk \
+ find
+
+ inst_multiple -o \
+ clevis-encrypt-sss \
+ clevis-encrypt-tang \
+ clevis-encrypt-tpm2 \
+ clevis-luks-bind \
+ clevis-luks-common-functions \
+ clevis-luks-unlock \
+ pwmake \
+ tpm2_create
+
inst_simple "$moddir/rdcore" "/usr/bin/rdcore"
inst_simple "$moddir/coreos-installer" "/usr/bin/coreos-installer"
@@ -33,19 +75,8 @@ install() {
install_and_enable_unit "coreos-installer-reboot.service" \
"default.target"
-# install_and_enable_unit "coreos-installer-noreboot.service" \
-# "basic.target"
-# inst_simple "$moddir/coreos-installer-reboot.service" \
-# "$systemdsystemunitdir/coreos-installer-reboot.service"
-# inst_simple "$moddir/coreos-installer-noreboot.service" \
-# "$systemdsystemunitdir/coreos-installer-noreboot.service"
-#
-# inst_simple "$moddir/coreos-installer.target" \
-# "$systemdsystemunitdir/coreos-installer.target"
-#
-# inst_simple "$moddir/coreos-installer-pre.target" \
-# "$systemdsystemunitdir/coreos-installer-pre.target"
-#
-# inst_simple "$moddir/coreos-installer-post.target" \
-# "$systemdsystemunitdir/coreos-installer-post.target"
+ install_and_enable_unit "growfs.service" \
+ "default.target"
+ inst_script "$moddir/growfs" \
+ /usr/sbin/growfs
}
diff --git a/scripts/growfs b/scripts/growfs
new file mode 100644
index 0000000..45c495c
--- /dev/null
+++ b/scripts/growfs
@@ -0,0 +1,100 @@
+#!/bin/bash
+set -euo pipefail
+
+# This script grows the root
+
+sleep 5
+udevadm settle
+TYPE=$(lsblk --output FSTYPE /dev/disk/by-label/root | tail -n1)
+echo ${TYPE}
+dev=$(realpath /dev/disk/by-label/root)
+
+mount -t ${TYPE} /dev/disk/by-label/root /sysroot
+
+# We run after the rootfs is mounted at /sysroot
+path=/sysroot
+
+# The use of tail is to avoid errors from duplicate mounts;
+# this shouldn't happen for us but we're being conservative.
+src=$(findmnt -nvr -o SOURCE "$path" | tail -n1)
+
+partition=$(realpath /dev/disk/by-label/root)
+
+# Go through each blockdev in the hierarchy and verify we know how to grow them
+lsblk -no TYPE "${partition}" | while read dev; do
+ case "${dev}" in
+ part|crypt) ;;
+ *) echo "error: Unsupported blockdev type ${dev}" 1>&2; exit 1 ;;
+ esac
+done
+
+# Get the filesystem type before extending the partition. This matters
+# because the partition, once extended, might include leftover superblocks
+# from the previous contents of the disk (notably ZFS), causing blkid to
+eval $(blkid -o export "${src}")
+
+ROOTFS_TYPE=${TYPE:-}
+case "${ROOTFS_TYPE}" in
+ xfs|ext4|btrfs) ;;
+ *) echo "error: Unsupported filesystem for ${path}: '${ROOTFS_TYPE}'" 1>&2; exit 1 ;;
+esac
+
+# Now, go through the hierarchy, growing everything. Note we go one device at a
+# time using --nodeps, because ordering is buggy in el8:
+# https://bugzilla.redhat.com/show_bug.cgi?id=1940607
+current_blkdev=${partition}
+while true; do
+ eval "$(lsblk --paths --nodeps --pairs -o NAME,TYPE,PKNAME "${current_blkdev}")"
+ MAJMIN=$(echo $(lsblk -dno MAJ:MIN "${NAME}"))
+ case "${TYPE}" in
+ part)
+ eval $(udevadm info --query property --export "${current_blkdev}" | grep ^DM_ || :)
+ if [ -n "${DM_MPATH:-}" ]; then
+ # Since growpart does not understand device mapper, we have to use sfdisk.
+ echo ", +" | sfdisk --no-reread --no-tell-kernel --force -N "${DM_PART}" "/dev/mapper/${DM_MPATH}"
+ udevadm settle # Wait for udev-triggered kpartx to update mappings
+ else
+ partnum=$(cat "/sys/dev/block/${MAJMIN}/partition")
+ # XXX: ideally this'd be idempotent and we wouldn't `|| :`
+ growpart "${PKNAME}" "${partnum}" || :
+ fi
+ ;;
+ crypt)
+ # XXX: yuck... we need to expose this sanely in clevis
+ (. /usr/bin/clevis-luks-common-functions
+ eval $(udevadm info --query=property --export "${NAME}")
+ # lsblk doesn't print PKNAME of crypt devices with --nodeps
+ PKNAME=/dev/$(ls "/sys/dev/block/${MAJMIN}/slaves")
+ clevis_luks_unlock_device "${PKNAME}" | cryptsetup resize -d- "${DM_NAME}"
+ )
+ ;;
+ # already checked
+ *) echo "unreachable" 1>&2; exit 1 ;;
+ esac
+ holders="/sys/dev/block/${MAJMIN}/holders"
+ [ -d "${holders}" ] || break
+ nholders="$(ls "${holders}" | wc -l)"
+ if [ "${nholders}" -eq 0 ]; then
+ break
+ elif [ "${nholders}" -gt 1 ]; then
+ # this shouldn't happen since we've checked the partition types already
+ echo "error: Unsupported block device with multiple children: ${NAME}" 1>&2
+ exit 1
+ fi
+ current_blkdev=/dev/$(ls "${holders}")
+done
+
+# Wipe any filesystem signatures from the extended partition that don't
+# correspond to the FS type we detected earlier.
+wipefs -af -t "no${ROOTFS_TYPE}" "${src}"
+
+# TODO: Add XFS to https://github.com/systemd/systemd/blob/master/src/partition/growfs.c
+# and use it instead.
+case "${ROOTFS_TYPE}" in
+ xfs) xfs_growfs "${path}" ;;
+ ext4) resize2fs "${src}" ;;
+ btrfs) btrfs filesystem resize max ${path} ;;
+esac
+
+# this is useful for tests
+touch /run/growfs.stamp
\ No newline at end of file
diff --git a/src/blockdev.rs b/src/blockdev.rs
index f9701b9..2fdd6f0 100644
--- a/src/blockdev.rs
+++ b/src/blockdev.rs
@@ -970,7 +970,7 @@ pub fn udev_settle() -> Result<()> {
// udevd hasn't yet received updates from the kernel, settle will return
// immediately, and lsblk won't pick up partition labels. Try to sleep
// our way out of this.
- sleep(Duration::from_millis(200));
+ sleep(Duration::from_millis(500));
runcmd!("udevadm", "settle")?;
Ok(())
diff --git a/systemd/coreos-installer-reboot.service b/systemd/coreos-installer-reboot.service
index ad79614..f9ba80e 100644
--- a/systemd/coreos-installer-reboot.service
+++ b/systemd/coreos-installer-reboot.service
@@ -1,6 +1,5 @@
[Unit]
Description=Reboot after CoreOS Installer
-#Requires=coreos-installer.target
After=coreos-installer.service
OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly
diff --git a/systemd/coreos-installer.service b/systemd/coreos-installer.service
index 716b783..e8199a9 100644
--- a/systemd/coreos-installer.service
+++ b/systemd/coreos-installer.service
@@ -1,13 +1,5 @@
[Unit]
Description=CoreOS Installer
-#Before=coreos-installer.target
-#After=nm-run.service
-#After=network-online.target
-#Wants=network-online.target
-# Until we retry HTTP requests let's wait here until
-# systemd-resolved comes up if enabled.
-# https://github.com/coreos/coreos-installer/issues/283
-#After=systemd-resolved.service
After=basic.target
# Network is enabled here
diff --git a/systemd/growfs.service b/systemd/growfs.service
new file mode 100644
index 0000000..6d77aaa
--- /dev/null
+++ b/systemd/growfs.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Grow root filesystem
+DefaultDependencies=false
+
+After=coreos-installer.service
+Before=coreos-installer-reboot.service
+Requires=dev-disk-by\x2dlabel-root.device
+After=dev-disk-by\x2dlabel-root.device
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/growfs
+RemainAfterExit=yes
\ No newline at end of file

80
SOURCES/coidracut4.patch Normal file
View File

@ -0,0 +1,80 @@
diff --git a/systemd/coreos-installer-generator b/systemd/coreos-installer-generator
index b2bcaec..2b85dc5 100755
--- a/systemd/coreos-installer-generator
+++ b/systemd/coreos-installer-generator
@@ -2,6 +2,8 @@
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
+command -v getarg >/dev/null || . /usr/lib/dracut-lib.sh
+
set -e
# Generators don't have logging right now
@@ -10,6 +12,14 @@ exec 1>/dev/kmsg; exec 2>&1
UNIT_DIR="${1:-/tmp}"
+add_requires() {
+ local name="$1"; shift
+ local target="$1"; shift
+ local requires_dir="${UNIT_DIR}/${target}.requires"
+ mkdir -p "${requires_dir}"
+ ln -sf "../${name}" "${requires_dir}/${name}"
+}
+
cmdline=( $(</proc/cmdline) )
karg() {
local name="$1" value="$2"
@@ -38,3 +48,38 @@ if [ -n "$(karg coreos.inst.install_dev)" ]; then
> /run/coreos-installer-reboot
fi
fi
+
+add_requires run-media-iso.mount default.target
+
+isoroot=$(getarg edge.liveiso= ||:)
+
+mkdir -p /run/media/iso
+isosrc=dev/disk/by-label/${isoroot}
+isosrc_escaped=$(systemd-escape -p --suffix=device "${isosrc}")
+
+if [ -n "${isoroot}" ]; then
+cat >"${UNIT_DIR}/run-media-iso.mount" <<EOF
+# Automatically generated by live-generator
+[Unit]
+DefaultDependencies=false
+# HACK for https://github.com/coreos/fedora-coreos-config/issues/437
+Wants=systemd-udev-settle.service
+Wants=systemd-udevd.service
+After=systemd-udevd.service
+After=basic.target
+# Network is enabled here
+After=nm-run.service
+# compat: remove when everyone is on dracut 053+
+After=dracut-initqueue.service
+
+Before=coreos-installer.service
+After=${isosrc_escaped}
+Requires=${isosrc_escaped}
+ConditionKernelCommandLine=coreos.inst.image_file
+[Mount]
+What=/${isosrc}
+Where=/run/media/iso
+Options=ro
+Type=iso9660
+EOF
+fi
\ No newline at end of file
diff --git a/systemd/growfs.service b/systemd/growfs.service
index 6d77aaa..fee934d 100644
--- a/systemd/growfs.service
+++ b/systemd/growfs.service
@@ -5,7 +5,6 @@ DefaultDependencies=false
After=coreos-installer.service
Before=coreos-installer-reboot.service
Requires=dev-disk-by\x2dlabel-root.device
-After=dev-disk-by\x2dlabel-root.device
[Service]
Type=oneshot

16
SOURCES/coidracut5.patch Normal file
View File

@ -0,0 +1,16 @@
diff --git a/systemd/coreos-installer-generator b/systemd/coreos-installer-generator
index 2b85dc5..75ab3c3 100755
--- a/systemd/coreos-installer-generator
+++ b/systemd/coreos-installer-generator
@@ -39,6 +39,11 @@ karg_bool() {
esac
}
+# if we're not running in dracut, skip
+if [ -z "$(karg edge.liveiso)" ]; then
+ exit 0
+fi
+
if [ -n "$(karg coreos.inst.install_dev)" ]; then
# ln -sf "/usr/lib/systemd/system/coreos-installer-post.target" \
# "${UNIT_DIR}/basic.target"

View File

@ -0,0 +1,11 @@
--- coreos-installer-0.6.0/Cargo.toml.orig 2020-09-02 17:43:05.348336989 -0400
+++ coreos-installer-0.6.0/Cargo.toml 2020-09-02 17:43:12.092348561 -0400
@@ -26,8 +26,6 @@
pre-release-commit-message = "cargo: coreos-installer release {{version}}"
sign-commit = true
tag-message = "coreos-installer v{{version}}"
-[profile.release]
-lto = true
[lib]
name = "libcoreinst"

View File

@ -0,0 +1,10 @@
--- coreos-installer-0.9.1/Cargo.toml 2021-05-14T03:33:33+00:00
+++ coreos-installer-0.9.1/Cargo.toml 2021-05-17T14:08:34.787109+00:00
@@ -120,6 +120,7 @@
version = "^1.0"
[features]
+default = ["rdcore"]
rdcore = []
[target."cfg(target_arch = \"s390x\")".dependencies.mbrman]
version = ">= 0.3, < 0.5"

View File

@ -0,0 +1,26 @@
From d3ecd9b240203b8e1eaa47bc62c2976a25ed3994 Mon Sep 17 00:00:00 2001
From: Dusty Mabe <dusty@dustymabe.com>
Date: Mon, 7 Jun 2021 18:53:29 -0400
Subject: [PATCH] add coreos.force_persist_ip to list of persisted dracut args
xref: https://github.com/coreos/fedora-coreos-config/pull/1045
---
scripts/coreos-installer-service | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/coreos-installer-service b/scripts/coreos-installer-service
index ff9ff5f..347b5f5 100755
--- a/scripts/coreos-installer-service
+++ b/scripts/coreos-installer-service
@@ -8,7 +8,7 @@ PERSIST_KERNEL_NET_PARAMS=("ipv6.disable" "net.ifnames" "net.naming-scheme")
# Dracut networking params to persist
# Everything other than rd.neednet.
# List from https://www.mankier.com/7/dracut.cmdline#Description-Network
-PERSIST_DRACUT_NET_PARAMS=("ip" "ifname" "rd.route" "bootdev" "BOOTIF" "rd.bootif" "nameserver" "rd.peerdns" "biosdevname" "vlan" "bond" "team" "bridge" "rd.net.timeout.carrier" "coreos.no_persist_ip")
+PERSIST_DRACUT_NET_PARAMS=("ip" "ifname" "rd.route" "bootdev" "BOOTIF" "rd.bootif" "nameserver" "rd.peerdns" "biosdevname" "vlan" "bond" "team" "bridge" "rd.net.timeout.carrier" "coreos.no_persist_ip" "coreos.force_persist_ip")
# IBM S390X params to persist
PERSIST_S390X_PARAMS=("rd.dasd" "rd.zfcp" "rd.znet" "zfcp.allow_lun_scan" "cio_ignore")
--
2.31.1

View File

@ -0,0 +1,166 @@
From c4fabc7c801491019263523df3c9078cca99bb6e Mon Sep 17 00:00:00 2001
From: Nikita Dubrovskii <nikita@linux.ibm.com>
Date: Wed, 2 Jun 2021 14:27:42 +0200
Subject: [PATCH] s390: add support for virtio dasds
This is a fix for https://bugzilla.redhat.com/show_bug.cgi?id=1960485
Signed-off-by: Nikita Dubrovskii <nikita@linux.ibm.com>
---
src/blockdev.rs | 30 ++++++++++++++++++++++++++++--
src/cmdline.rs | 2 +-
src/install.rs | 6 +++---
src/s390x/dasd.rs | 15 +++++++++++----
4 files changed, 43 insertions(+), 10 deletions(-)
diff --git a/src/blockdev.rs b/src/blockdev.rs
index 90c6bee..df8e10a 100644
--- a/src/blockdev.rs
+++ b/src/blockdev.rs
@@ -970,10 +970,36 @@ pub fn detect_formatted_sector_size(buf: &[u8]) -> Option<NonZeroU32> {
}
/// Checks if underlying device is IBM DASD disk
-pub fn is_dasd(device: &str) -> Result<bool> {
+pub fn is_dasd(device: &str, fd: Option<&mut File>) -> Result<bool> {
let target =
canonicalize(device).with_context(|| format!("getting absolute path to {}", device))?;
- Ok(target.to_string_lossy().starts_with("/dev/dasd"))
+ if target.to_string_lossy().starts_with("/dev/dasd") {
+ return Ok(true);
+ }
+ let read_magic = |device: &str, disk: &mut File| -> Result<[u8; 4]> {
+ let offset = disk
+ .seek(SeekFrom::Current(0))
+ .with_context(|| format!("saving offset {}", device))?;
+ disk.seek(SeekFrom::Start(8194))
+ .with_context(|| format!("seeking {}", device))?;
+ let mut lbl = [0u8; 4];
+ disk.read_exact(&mut lbl)
+ .with_context(|| format!("reading label {}", device))?;
+ disk.seek(SeekFrom::Start(offset))
+ .with_context(|| format!("restoring offset {}", device))?;
+ Ok(lbl)
+ };
+ if target.to_string_lossy().starts_with("/dev/vd") {
+ let cdl_magic = [0xd3, 0xf1, 0xe5, 0xd6];
+ let lbl = if let Some(t) = fd {
+ read_magic(device, t)?
+ } else {
+ let mut disk = File::open(device).with_context(|| format!("opening {}", device))?;
+ read_magic(device, &mut disk)?
+ };
+ return Ok(cdl_magic == lbl);
+ }
+ Ok(false)
}
// create unsafe ioctl wrappers
diff --git a/src/cmdline.rs b/src/cmdline.rs
index db3d1d0..53b8179 100644
--- a/src/cmdline.rs
+++ b/src/cmdline.rs
@@ -853,7 +853,7 @@ fn parse_install(matches: &ArgMatches) -> Result<Config> {
// it changes to the recommended 4096
// https://bugzilla.redhat.com/show_bug.cgi?id=1905159
#[allow(clippy::match_bool, clippy::match_single_binding)]
- let sector_size = match is_dasd(&device)
+ let sector_size = match is_dasd(&device, None)
.with_context(|| format!("checking whether {} is an IBM DASD disk", device))?
{
#[cfg(target_arch = "s390x")]
diff --git a/src/install.rs b/src/install.rs
index baa3880..20d1f41 100644
--- a/src/install.rs
+++ b/src/install.rs
@@ -47,7 +47,7 @@ pub fn install(config: &InstallConfig) -> Result<()> {
#[cfg(target_arch = "s390x")]
{
- if is_dasd(&config.device)? {
+ if is_dasd(&config.device, None)? {
if !config.save_partitions.is_empty() {
// The user requested partition saving, but SavedPartitions
// doesn't understand DASD VTOCs and won't find any partitions
@@ -156,7 +156,7 @@ fn write_disk(
// copy the image
#[allow(clippy::match_bool, clippy::match_single_binding)]
- let image_copy = match is_dasd(&config.device)? {
+ let image_copy = match is_dasd(&config.device, Some(dest))? {
#[cfg(target_arch = "s390x")]
true => s390x::image_copy_s390x,
_ => image_copy_default,
@@ -527,7 +527,7 @@ fn reset_partition_table(
) -> Result<()> {
eprintln!("Resetting partition table");
- if is_dasd(&config.device)? {
+ if is_dasd(&config.device, Some(dest))? {
// Don't write out a GPT, since the backup GPT may overwrite
// something we're not allowed to touch. Just clear the first MiB
// of disk.
diff --git a/src/s390x/dasd.rs b/src/s390x/dasd.rs
index 7145071..b7dea78 100644
--- a/src/s390x/dasd.rs
+++ b/src/s390x/dasd.rs
@@ -35,13 +35,15 @@ pub(crate) struct Range {
pub length: u64,
}
-/// There are 2 types of DASD devices:
+/// There are 3 types of DASD devices:
/// - ECKD (Extended Count Key Data) - is regular DASD of type 3390
/// - FBA (Fixed Block Access) - is used for emulated device that represents a real SCSI device
+/// - Virt - ECKD on LPAR/zKVM as virtio-device
/// Only ECKD disks require `dasdfmt, fdasd` linux tools to be configured.
enum DasdType {
Eckd,
Fba,
+ Virt,
}
fn get_dasd_type<P: AsRef<Path>>(device: P) -> Result<DasdType> {
@@ -53,6 +55,9 @@ fn get_dasd_type<P: AsRef<Path>>(device: P) -> Result<DasdType> {
.with_context(|| format!("getting name of {}", device.display()))?
.to_string_lossy()
.to_string();
+ if device.starts_with("vd") {
+ return Ok(DasdType::Virt);
+ }
let devtype_path = format!("/sys/class/block/{}/device/devtype", device);
let devtype_str = std::fs::read_to_string(&devtype_path)
.with_context(|| format!("reading {}", devtype_path))?;
@@ -66,7 +71,7 @@ fn get_dasd_type<P: AsRef<Path>>(device: P) -> Result<DasdType> {
pub fn prepare_dasd(dasd: &str) -> Result<()> {
match get_dasd_type(dasd)? {
DasdType::Eckd => eckd_prepare(dasd),
- DasdType::Fba => Ok(()),
+ DasdType::Fba | DasdType::Virt => Ok(()),
}
}
@@ -75,7 +80,7 @@ pub fn prepare_dasd(dasd: &str) -> Result<()> {
pub fn dasd_try_get_sector_size(dasd: &str) -> Result<Option<NonZeroU32>> {
match get_dasd_type(dasd)? {
DasdType::Eckd => eckd_try_get_sector_size(dasd),
- DasdType::Fba => Ok(None),
+ DasdType::Fba | DasdType::Virt => Ok(None),
}
}
@@ -87,8 +92,10 @@ pub fn image_copy_s390x(
_saved: Option<&SavedPartitions>,
) -> Result<()> {
let ranges = match get_dasd_type(dest_path)? {
- DasdType::Eckd => eckd_make_partitions(&dest_path.to_string_lossy(), dest_file, first_mb)?,
DasdType::Fba => fba_make_partitions(&dest_path.to_string_lossy(), dest_file, first_mb)?,
+ DasdType::Eckd | DasdType::Virt => {
+ eckd_make_partitions(&dest_path.to_string_lossy(), dest_file, first_mb)?
+ }
};
// copy each partition
--
2.31.1

223
SPECS/coreos-installer.spec Normal file
View File

@ -0,0 +1,223 @@
# Generated by rust2rpm 13
%define dracutlibdir %{_prefix}/lib/dracut
%bcond_without check
%global __cargo_skip_build 0
# The library is for internal code reuse and is not a public API
%global __cargo_is_lib 0
%global crate coreos-installer
Name: %{crate}
Version: 0.9.1
Release: 17%{?dist}
Summary: Installer for Fedora CoreOS and RHEL CoreOS
# Upstream license specification: Apache-2.0
License: ASL 2.0
URL: https://github.com/fedora-iot/coreos-installer
Source: https://crates.io/api/v1/crates/%{crate}/%{version}/download#/%{crate}-%{version}.crate
Source1: https://github.com/coreos/coreos-installer/releases/download/v%{version}/%{crate}-%{version}-vendor.tar.gz
# The RHEL 8 rust-toolset macros don't let us enable features from the
# %%cargo_* macros. Enable rdcore directly in Cargo.toml.
Patch0: enable-rdcore.patch
# LTO causes runtime crashes on s390x
# https://github.com/coreos/coreos-installer/pull/360
# https://github.com/coreos/coreos-installer/issues/372
# https://bugzilla.redhat.com/show_bug.cgi?id=1863466
Patch1: disable-lto-0.6.0.patch
# Add coreos.force_persist_ip karg forwarding
# https://github.com/coreos/coreos-installer/pull/554
Patch2: force_persist_ip-0.9.1.patch
# Support s390x DASDs in VMs via virtio
# https://github.com/coreos/coreos-installer/pull/552
Patch3: s390x-support-virtio-dasd-0.9.1.patch
Patch4: coidracut.patch
Patch5: coidracut2.patch
Patch6: coidracut3.patch
Patch7: coidracut4.patch
Patch8: coidracut5.patch
ExclusiveArch: %{rust_arches}
BuildRequires: openssl-devel
BuildRequires: rust-toolset
BuildRequires: systemd
Requires: gnupg
Requires: kpartx
Requires: systemd-udev
Requires: util-linux
%ifarch s390x
# This should eventually be spelled "s390utils-core" but the binaries
# haven't been broken out of s390utils-base yet
Requires: /usr/sbin/chreipl
Requires: /usr/sbin/dasdfmt
Requires: /usr/sbin/fdasd
Requires: /usr/sbin/lszdev
Requires: /usr/sbin/zipl
%endif
# Since `rust-coreos-installer` creates a `coreos-installer`
# subpackage with a newer version number, which supersedes the
# deprecated `coreos-installer` package (https://src.fedoraproject.org/rpms/coreos-installer),
# an explicit `Obsoletes:` for `coreos-installer` is not necessary.
# Obsolete dracut modules as they are not provided in this package.
Obsoletes: coreos-installer-dracut < 0.0.1
%global _description %{expand:
coreos-installer installs Fedora CoreOS or RHEL CoreOS to bare-metal
machines (or, occasionally, to virtual machines).
}
%description %{_description}
%files
%license LICENSE
%doc README.md
%{_bindir}/coreos-installer
%prep
%autosetup -n %{crate}-%{version} -p1
%cargo_prep -V 1
# https://github.com/rust-lang-nursery/error-chain/pull/289
find -name '*.rs' -executable -exec chmod a-x {} \;
%build
%cargo_build
%install
%cargo_install
# Install binaries, dracut modules, units, targets, generators for running via systemd
install -D -m 0755 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore dracut/50rdcore/module-setup.sh
install -D -m 0755 -t %{buildroot}%{_libexecdir} scripts/coreos-installer-service
install -D -m 0755 -t %{buildroot}%{_libexecdir} scripts/coreos-installer-disable-device-auto-activation
install -D -m 0644 -t %{buildroot}%{_unitdir} systemd/coreos-installer-disable-device-auto-activation.service
install -D -m 0644 -t %{buildroot}%{_unitdir} systemd/coreos-installer.service
install -D -m 0644 -t %{buildroot}%{_unitdir} systemd/coreos-installer-reboot.service
install -D -m 0644 -t %{buildroot}%{_unitdir} systemd/coreos-installer-noreboot.service
install -D -m 0644 -t %{buildroot}%{_unitdir} systemd/coreos-installer-pre.target
install -D -m 0644 -t %{buildroot}%{_unitdir} systemd/coreos-installer.target
install -D -m 0644 -t %{buildroot}%{_unitdir} systemd/coreos-installer-post.target
install -D -m 0755 -t %{buildroot}%{_systemdgeneratordir} systemd/coreos-installer-generator
mv %{buildroot}%{_bindir}/rdcore %{buildroot}%{dracutlibdir}/modules.d/50rdcore/
cp -a %{buildroot}%{_bindir}/coreos-installer %{buildroot}%{dracutlibdir}/modules.d/50rdcore/
install -D -m 0755 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore scripts/coreos-installer-service
install -D -m 0755 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore scripts/growfs
install -D -m 0755 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore scripts/coreos-installer-disable-device-auto-activation
install -D -m 0644 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/coreos-installer-disable-device-auto-activation.service
install -D -m 0644 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/coreos-installer.service
install -D -m 0644 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/growfs.service
install -D -m 0644 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/coreos-installer-reboot.service
install -D -m 0644 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/coreos-installer-noreboot.service
install -D -m 0644 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/coreos-installer-pre.target
install -D -m 0644 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/coreos-installer.target
install -D -m 0644 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/coreos-installer-post.target
install -D -m 0755 -t %{buildroot}%{dracutlibdir}/modules.d/50rdcore systemd/coreos-installer-generator
%package -n %{crate}-bootinfra
Summary: %{crate} boot-time infrastructure for use on Fedora/RHEL CoreOS
Requires: %{crate} = %{version}-%{release}
# Package was renamed from coreos-installer-systemd when rdcore was added
Provides: %{crate}-systemd = %{version}-%{release}
Obsoletes: %{crate}-systemd <= 0.3.0-2
%description -n %{crate}-bootinfra
This subpackage contains boot-time infrastructure for Fedora CoreOS and
RHEL CoreOS. It is not needed on other platforms.
%files -n %{crate}-bootinfra
%{dracutlibdir}/modules.d/*
%{_libexecdir}/*
%{_unitdir}/*
%{_systemdgeneratordir}/*
%if %{with check}
%check
%cargo_test
%endif
%changelog
* Thu Jun 10 2021 Benjamin Gilbert <bgilbert@redhat.com> - 0.9.1-3
- Support s390x DASDs in VMs via virtio
* Tue Jun 08 2021 Dusty Mabe <dustymabe@redhat.com> - 0.9.1-2
- Add coreos.force_persist_ip karg forwarding
* Wed Apr 21 2021 Benjamin Gilbert <bgilbert@redhat.com> - 0.9.0-3
- Improve error message for busy disk referenced via symlink
- Fix failure on corrupt GPT
* Fri Apr 9 2021 Sohan Kunkerkar <skunkerk@redhat.com> - 0.9.0-2
- Use macro for dracut library path
* Thu Apr 8 2021 Sohan Kunkerkar <skunkerk@redhat.com> - 0.9.0-1
- New release
* Fri Jan 15 2021 Benjamin Gilbert <bgilbert@redhat.com> - 0.8.0-3
- Fix rdcore rootmap on RAID devices
* Tue Jan 12 2021 Benjamin Gilbert <bgilbert@redhat.com> - 0.8.0-2
- Disable LTO again to avoid crashes on s390x
* Tue Jan 12 2021 Sohan Kunkerkar <skunkerk@redhat.com> - 0.8.0-1
- New release
* Mon Jan 04 2021 Benjamin Gilbert <bgilbert@redhat.com> - 0.7.2-2
- Add Requires for programs invoked by coreos-installer
- Require Rust >= 1.45, re-enable LTO
* Thu Oct 22 2020 Sohan Kunkerkar <skunkerk@redhat.com> - 0.7.2-1
- New release
* Mon Sep 21 2020 Benjamin Gilbert <bgilbert@redhat.com> - 0.6.0-3
- Fix MBR handling when partition saving is enabled
- Fix base package Obsoletes being interpreted as part of package description
* Wed Sep 02 2020 Benjamin Gilbert <bgilbert@redhat.com> - 0.6.0-2
- Disable LTO on s390x to avoid runtime crashes
- Drop legacy installer
* Tue Aug 25 2020 Benjamin Gilbert <bgilbert@redhat.com> - 0.6.0-1
- New release
* Fri Jul 31 2020 Benjamin Gilbert <bgilbert@redhat.com> - 0.5.0-1
- New release
* Sat Jul 25 2020 Benjamin Gilbert <bgilbert@redhat.com> - 0.4.0-1
- New release
- Rename -systemd subpackage to -bootinfra
- Add rdcore Dracut module to -bootinfra
* Wed Jul 22 2020 Benjamin Gilbert <bgilbert@redhat.com> - 0.3.0-1
- New release
- Make coreos-installer-{service,generator} world-readable
* Wed Jun 17 2020 Dusty Mabe <dusty@dustymabe.com> - 0.2.0-4.rhaos4.6
- Include rhaos4.6 in the rpm release field
* Thu May 28 2020 Colin Walters <walters@verbum.org> - 0.2.0-3
- Backport osmet RHCOS+LUKS patches
* Thu May 07 2020 Dusty Mabe <dusty@dustymabe.com> - 0.2.0-2
- Fix bug in dracut hook in legacy installer; see
https://github.com/coreos/coreos-installer/pull/234
* Mon Apr 27 2020 Colin Walters <walters@verbum.org> - 0.1.3-4
- Merge in legacy installer; see
https://github.com/coreos/coreos-installer/pull/220
* Mon Mar 23 2020 Colin Walters <walters@verbum.org> - 0.1.3-2
- https://github.com/coreos/coreos-installer/releases/tag/v0.1.3
* Wed Mar 04 2020 Colin Walters <walters@verbum.org> - 0.1.2-11
- Backport no-signatures-available patch
* Wed Feb 26 2020 Colin Walters <walters@verbum.org> - 0.1.2-10
- Forked from Fedora
- I forgot about the weird `rust-` package name prefixing when
asking RCM to make the dist-git repo, and rather than redo
that I decided to just go with it.
- Stop depending on systemd-rpm-macros since it's not in RHEL8 apparently
- Drop other things only applicable to Fedora Rust packaging like
dynamic buildrequires