forked from suse-edge/Factory
Try exploding the tarball
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
This commit is contained in:
@@ -27,7 +27,7 @@ Group: System/Management
|
|||||||
URL: https://github.com/SUSE-Cloud/
|
URL: https://github.com/SUSE-Cloud/
|
||||||
Source0: config.sh
|
Source0: config.sh
|
||||||
Source10: ironic-ipa-ramdisk.kiwi
|
Source10: ironic-ipa-ramdisk.kiwi
|
||||||
Source20: root.tar.bz2
|
Source20: root
|
||||||
|
|
||||||
BuildRequires: -post-build-checks
|
BuildRequires: -post-build-checks
|
||||||
BuildRequires: bash
|
BuildRequires: bash
|
||||||
@@ -123,13 +123,13 @@ Kernel and ramdisk image for use with Metal3
|
|||||||
For %{_arch}
|
For %{_arch}
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
mkdir -p /tmp/openstack-ironic-image/build /tmp/openstack-ironic-image/root /tmp/openstack-ironic-image/img
|
mkdir -p /tmp/openstack-ironic-image/build /tmp/openstack-ironic-image/img
|
||||||
|
|
||||||
cp -a %{SOURCE0} /tmp/openstack-ironic-image/config.sh
|
cp -a %{SOURCE0} /tmp/openstack-ironic-image/config.sh
|
||||||
|
|
||||||
cp -a %{SOURCE10} /tmp/openstack-ironic-image/config.kiwi
|
cp -a %{SOURCE10} /tmp/openstack-ironic-image/config.kiwi
|
||||||
|
|
||||||
tar -xC /tmp/openstack-ironic-image/root -f %{SOURCE20}
|
cp -ar %{SOURCE20} /tmp/openstack-ironic-image/root
|
||||||
|
|
||||||
%build
|
%build
|
||||||
if ! which kiwi; then
|
if ! which kiwi; then
|
||||||
|
BIN
ironic-ipa-ramdisk/root.tar.bz2
(Stored with Git LFS)
BIN
ironic-ipa-ramdisk/root.tar.bz2
(Stored with Git LFS)
Binary file not shown.
@@ -0,0 +1,24 @@
|
|||||||
|
# WARNING: This file has been modified by the diskimage-builder
|
||||||
|
# dhcp-all-interfaces element as this machine is likely running
|
||||||
|
# a ramdisk or needs to attempt auto-configuration on all interfaces.
|
||||||
|
[main]
|
||||||
|
# This makes sense even with dhcp on all interfaces in the event
|
||||||
|
# that the configuration has been or is being supplied via external means.
|
||||||
|
ignore-carrier=*
|
||||||
|
# Use dhclient as was done previously to the Centos8/RHEL8 RPM defaults.
|
||||||
|
# This is because dhclient shuts the interface down after a retry attempt
|
||||||
|
# which allows the link state to reset with some switches, which may be
|
||||||
|
# important for the ramdisk to recover networking.
|
||||||
|
dhcp=dhclient
|
||||||
|
|
||||||
|
[connection]
|
||||||
|
# Keep retrying, this is important for this important espescialy for
|
||||||
|
# ramdisks in environments where varying switch configurations may
|
||||||
|
# cause traffic to be blocked or intermittent connectivity failures
|
||||||
|
# such as those at an edge site may cause issues.
|
||||||
|
autoconnect-retries=-1
|
||||||
|
# Set the timeout. Diskimage-builder dhcp-all-interfaces has a 30
|
||||||
|
# second default. NetworkManager, by default, is 45 seconds.
|
||||||
|
# In some cases where ramdisks are in use, 60 seconds is advisable.
|
||||||
|
ipv4.dhcp-timeout=30
|
||||||
|
ipv6.dhcp-timeout=30
|
1
ironic-ipa-ramdisk/root/etc/ironic-python-agent.conf.d
Symbolic link
1
ironic-ipa-ramdisk/root/etc/ironic-python-agent.conf.d
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
ironic-python-agent/ironic-python-agent.conf.d
|
1
ironic-ipa-ramdisk/root/etc/issue
Normal file
1
ironic-ipa-ramdisk/root/etc/issue
Normal file
@@ -0,0 +1 @@
|
|||||||
|
SUSE Ironic Python Agent Ramdisk - terminal \l
|
2
ironic-ipa-ramdisk/root/etc/sysctl.d/98-rp_filter.conf
Normal file
2
ironic-ipa-ramdisk/root/etc/sysctl.d/98-rp_filter.conf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# avoid problems with multiple network interfaces
|
||||||
|
net.ipv4.conf.all.rp_filter=0
|
@@ -0,0 +1,7 @@
|
|||||||
|
[Unit]
|
||||||
|
#WantsMountsFor=/mnt/ipa
|
||||||
|
After=mnt-ipa.mount
|
||||||
|
Wants=mnt-ipa.mount
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStartPre=-/usr/local/bin/suse-network-setup.sh
|
@@ -0,0 +1,12 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Setup ironic-python-agent image
|
||||||
|
After=getty.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/local/bin/suse-ironic-image-setup.sh
|
||||||
|
StandardOutput=journal+console
|
||||||
|
RemainAfterExit=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@@ -0,0 +1 @@
|
|||||||
|
ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="config-2", ENV{ID_FS_PUBLISHER_ID}=="?*", PROGRAM="/usr/local/bin/suse-test-config-2.sh", RUN{program}+="/usr/bin/systemd-mount --description='Mount for the config-2 rom consumed by IPA for networking' --timeout-idle-sec=60 $devnode /mnt/ipa"
|
52
ironic-ipa-ramdisk/root/usr/local/bin/suse-ironic-image-setup.sh
Executable file
52
ironic-ipa-ramdisk/root/usr/local/bin/suse-ironic-image-setup.sh
Executable file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
PARAMS=$(</proc/cmdline)
|
||||||
|
# find vfloppy device (based on IPA code)
|
||||||
|
VMEDIA_DEVICE=$(find /dev/disk/by-label -iname ir-vfd-dev)
|
||||||
|
# read params from vmedia and prepend them to params from kernel cmdline
|
||||||
|
if [[ -b "$VMEDIA_DEVICE" ]]; then
|
||||||
|
VMEDIA_MOUNT=$(mktemp -d)
|
||||||
|
if mount -o loop $VMEDIA_DEVICE $VMEDIA_MOUNT; then
|
||||||
|
# parameters.txt has one param per line, reformat to match cmdline
|
||||||
|
VMEDIA_PARAMS=$(cat $VMEDIA_MOUNT/parameters.txt | tr '\n' ' ')
|
||||||
|
umount $VMEDIA_MOUNT
|
||||||
|
PARAMS="$VMEDIA_PARAMS $PARAMS"
|
||||||
|
fi
|
||||||
|
rmdir $VMEDIA_MOUNT
|
||||||
|
fi
|
||||||
|
|
||||||
|
# resize /tmp
|
||||||
|
if [[ $PARAMS =~ suse.tmpsize=([^ ]+) ]]; then
|
||||||
|
echo "Resizing /tmp to ${BASH_REMATCH[1]}..."
|
||||||
|
mount -o remount,size=${BASH_REMATCH[1]} /tmp
|
||||||
|
fi
|
||||||
|
# deploy authorized sshkey from kernel command line
|
||||||
|
if [[ $PARAMS =~ sshkey=\"([^\"]+)\" ]]; then
|
||||||
|
echo "Adding authorized SSH key..."
|
||||||
|
(umask 077 ; mkdir -p /root/.ssh)
|
||||||
|
echo "${BASH_REMATCH[1]}" >> /root/.ssh/authorized_keys
|
||||||
|
fi
|
||||||
|
# Inject certs
|
||||||
|
if [[ $PARAMS =~ tls.enabled=(true|True) ]]; then
|
||||||
|
cp /etc/ironic-python-agent.d/ca-certs/* /etc/pki/trust/anchors/
|
||||||
|
cp /etc/ironic-python-agent.d/ca-certs/* /usr/share/pki/trust/anchors/
|
||||||
|
update-ca-certificates
|
||||||
|
fi
|
||||||
|
# autologin root on given console (default tty1) if suse.autologin or coreos.autologin is enabled
|
||||||
|
if [[ $PARAMS =~ (suse|coreos)\.autologin=?([^ ]*) ]]; then
|
||||||
|
tty="${BASH_REMATCH[2]:-tty1}"
|
||||||
|
echo "Enabling autologin on $tty..."
|
||||||
|
systemctl stop getty@$tty
|
||||||
|
systemctl disable getty@$tty
|
||||||
|
systemctl start autologin@$tty
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Append to /etc/hosts
|
||||||
|
# hosts.append=1.2.3.4_foo,4.5.6.7_foo2
|
||||||
|
if [[ $PARAMS =~ hosts.append=([^ ]+) ]]; then
|
||||||
|
HOSTS=${BASH_REMATCH[1]}
|
||||||
|
echo "Appending to hosts ${HOSTS}..."
|
||||||
|
for h in ${HOSTS/,/ }; do
|
||||||
|
echo "${h/_/ }" >> /etc/hosts
|
||||||
|
done
|
||||||
|
cat /etc/hosts
|
||||||
|
fi
|
24
ironic-ipa-ramdisk/root/usr/local/bin/suse-network-setup.sh
Executable file
24
ironic-ipa-ramdisk/root/usr/local/bin/suse-network-setup.sh
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
# Inspired by/based on glean-early.sh
|
||||||
|
# https://opendev.org/opendev/glean/src/branch/master/glean/init/glean-early.sh
|
||||||
|
|
||||||
|
# NOTE(TheJulia): We care about iso images, and would expect lower case as a
|
||||||
|
# result. In the case of VFAT partitions, they would be upper case.
|
||||||
|
|
||||||
|
PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||||
|
NETWORK_DATA_FILE="/mnt/ipa/openstack/latest/network_data.json"
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -f "${NETWORK_DATA_FILE}" ]; then
|
||||||
|
echo "No network_data.json found, skipping network configuration"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p /tmp/nmc/{desired,generated}
|
||||||
|
cp ${NETWORK_DATA_FILE} /tmp/nmc/desired/_all.yaml
|
||||||
|
|
||||||
|
nmc generate --config-dir /tmp/nmc/desired --output-dir /tmp/nmc/generated
|
||||||
|
nmc apply --config-dir /tmp/nmc/generated
|
21
ironic-ipa-ramdisk/root/usr/local/bin/suse-test-config-2.sh
Executable file
21
ironic-ipa-ramdisk/root/usr/local/bin/suse-test-config-2.sh
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||||
|
|
||||||
|
# Transform the ID from the drive being considered to lower case
|
||||||
|
device_publisher_id=$(echo ${ID_FS_PUBLISHER_ID} | tr '[A-Z]' '[a-z]')
|
||||||
|
|
||||||
|
cmdline_publisher_id=""
|
||||||
|
if grep -q "ir_pub_id" /proc/cmdline; then
|
||||||
|
cmdline_publisher_id=$(cat /proc/cmdline | sed -e 's/^.*ir_pub_id=//' -e 's/ .*$//')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${cmdline_publisher_id}" == "${device_publisher_id}" ]]; then
|
||||||
|
# It is the device we are looking for, return success
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
# Not a match, return failure
|
||||||
|
exit 1
|
||||||
|
fi
|
Reference in New Issue
Block a user