diff options
author | Stefan K. Berg <stefan.k.berg@ericsson.com> | 2016-05-11 12:48:40 +0200 |
---|---|---|
committer | Stefan Berg <stefan.k.berg@ericsson.com> | 2016-05-30 15:09:16 +0000 |
commit | 6d672885e96f25309ef36da9a6b3c93968ec0c5e (patch) | |
tree | 9f55d1ea4abbccb9891c0c6d7fbab4a0946a7d18 /build/f_isoroot/f_kscfg/ks.cfg | |
parent | 370cf3546e2f5e3a7afa69b4f306bd7c90d44397 (diff) |
Build system uplift to Fuel 9.0/Mitaka
Switching to Fuel 9.0/Mitaka for the build system.
Overhaul of the patching mechanism. As bootstrap_admin_node.sh has
been transitioned into an RPM (fuel-support), the lazy designer found
it more simple to patch that script during the Fuel build phase than
at the OPNFV ISO generation. The patch mechanism has been changed to a
normal context diff instead of the orig/modified file tuples
previously used. Hopefully this will require fewer manual rebases (may
the fuzz be with us!).
Also the ks.cfg patching has transitioned to a context based ordinary
patch for the same reasons, but this is as before taking place during
OPNFV ISO generation.
Patch naming made more descriptive.
The reaping mechanism has been slightly modified due to a change in
the naming of the node files when these are generated by the Fuel CLI.
IMPORTANT 1: The package cache mechanism is currently disabled, it is
only possible to install Fuel with a direct internet connection. This
will be fixed in a later change set!
IMPORTANT 2: All plugins has been disabled! As you have re-certified
your plugin with Fuel 9.0, please re-enable it in build/Makefile!
Change-Id: Ia918d16a74b68f89d178e06befe6e8a7a9367bf9
Signed-off-by: Stefan K. Berg <stefan.k.berg@ericsson.com>
Diffstat (limited to 'build/f_isoroot/f_kscfg/ks.cfg')
-rw-r--r-- | build/f_isoroot/f_kscfg/ks.cfg | 658 |
1 files changed, 0 insertions, 658 deletions
diff --git a/build/f_isoroot/f_kscfg/ks.cfg b/build/f_isoroot/f_kscfg/ks.cfg deleted file mode 100644 index c93babed7..000000000 --- a/build/f_isoroot/f_kscfg/ks.cfg +++ /dev/null @@ -1,658 +0,0 @@ -install -text -#%include /tmp/source.ks -cdrom -reboot --eject -lang en_US.UTF-8 -keyboard us -rootpw r00tme -timezone --utc Etc/UTC -firewall --disabled -selinux --disabled -# ignore unsupported hardware warning -unsupported_hardware -# SKIP CONFIGURING X -skipx -repo --name="mos-centos" --baseurl=file:///run/install/repo/mos-centos/ --cost=100 - -# NEVER ever place zerombr here, it breaks automated installation -%include /tmp/bootloader.ks -%include /tmp/partition.ks -%include /tmp/post_partition.ks - - - - - -%packages --nobase -@Core -fuel -fuel-library -fuel-dockerctl -authconfig -bind-utils -bridge-utils -cronie -crontabs -curl -dhcp -docker -fuel-bootstrap-cli -fuel-bootstrap-image -# NOTE(kozhukalov): We don't need target centos images in 8.0 -# fuel-target-centos-images7.1.1503 -fuelmenu -fuel-docker-images -fuel-mirror -fuel-openstack-metadata -gdisk -lrzip -lsof -man -mlocate -nmap-ncat -ntp -ntpdate -openssh-clients -policycoreutils -python-pypcap -rsync -puppet -rubygem-netaddr -rubygem-openstack -selinux-policy-targeted -strace -sysstat -system-config-firewall-base -tcpdump -telnet -vim -virt-what -wget -yum -yum-plugin-priorities -%end - - - - - -# PREINSTALL SECTION -# HERE ARE COMMANDS THAT WILL BE LAUNCHED BEFORE -# INSTALLATION PROCESS ITSELF -%pre -#!/bin/sh - -# hard drives -drives="" -removable_drives="" -for drv in `ls -1 /sys/block | grep "sd\|hd\|vd\|cciss"`; do - if !(blkid | grep -q "${drv}.*Fuel"); then - if (grep -q 0 /sys/block/${drv}/removable); then - drives="${drives} ${drv}" - else - removable_drives="${removable_drives} ${drv}" - fi - fi -done -default_drive=`echo ${drives} ${removable_drives} | awk '{print $1}'` - -installdrive=${installdrive:-undefined} -forceformat=${forceformat:-no} -for I in $(cat /proc/cmdline); do - case "$I" in - *=*) - if ! [[ "${I}" =~ "." ]]; then eval "$I"; fi - ;; - esac -done - -set ${drives} ${removable_drives} -numdrives=`echo $#` - -tgtdrive="${installdrive}" - -function confirm_format { - check_drive="$1" - local confirm_format="no" - - if [[ "$forceformat" == "yes" ]] ; then - return 0 - fi - - if parted -s /dev/$check_drive print &>/dev/null ; then - echo - echo "$check_drive drive contains partition table:" - parted -s /dev/$check_drive print - echo - read -p "Are you sure you want to erase ALL data on disk $check_drive? (y/N)" confirm_format - if [[ "$confirm_format" == "y" ]] || [[ "$confirm_format" == "Y" ]] || [[ "$forceformat" == "yes" ]]; then - return 0 - else - return 1 - fi - else - return 0 - fi -} - -format_confirmed="no" - -if [ $numdrives -lt 1 ]; then - exec < /dev/tty3 > /dev/tty3 2>&1 - chvt 3 - clear - echo - echo '********************************************************************' - echo '* E R R O R *' - echo '* *' - echo '* There is no suitable media available for installation. *' - echo '* Please attach a drive and try again. *' - echo '* *' - echo '********************************************************************' - echo - read -p "Press Enter to shut down the system: " _ - poweroff -fi - -if [ ${numdrives} -gt 1 ] || [ `echo ${drives} | wc -w` -eq 0 ] ; then - exec < /dev/tty3 > /dev/tty3 2>&1 - chvt 3 - while [ "${tgtdrive}" = "undefined" ]; do - clear - echo - echo '********************************************************************************' - echo '* W A R N I N G *' - echo '* *' - echo '* Which of the detected hard drives do you want to be used as *' - echo '* the installation target? *' - echo '* *' - echo '********************************************************************************' - echo - echo "Possible choices" - echo "Persistent drives: ${drives}" - echo "Removable drives: ${removable_drives}" - echo - if [ `echo ${drives} | wc -w` -eq 1 ] ; then - read -t 30 -p "Choose hard drive: " tgtdrive || tgtdrive=$default_drive - else - read -p "Choose hard drive: " tgtdrive - fi - match="no" - for drive in ${drives[@]} ${removable_drives[@]}; do - if [[ "$drive" == "$tgtdrive" ]] && match="yes" ; then - if confirm_format $tgtdrive ; then - format_confirmed="yes" - break - else - tgtdrive="undefined" - read -p "You may select another disk. Press Enter to continue." _ - fi - fi - done - if [[ "$match" == "no" ]]; then - tgtdrive="undefined" - read -p "Invalid choice. Press Enter to continue." _ - fi - done - clear - chvt 1 -else - tgtdrive=`echo ${drives} | sed -e "s/^\s*//" -e "s/\s*$//"` -fi - -if [ "$format_confirmed" != "yes" ] ; then - exec < /dev/tty3 > /dev/tty3 2>&1 - chvt 3 - if ! confirm_format $tgtdrive ; then - clear - echo - echo '********************************************************************' - echo '* E R R O R *' - echo '* *' - echo '* Disk $tgtdrive contains active partition(s). *' - echo '* Installation cannot continue without confirmation. *' - echo '* *' - echo '********************************************************************' - echo - read -p "Press Enter to restart: " _ - reboot - fi - chvt 1 -fi - -# verify tgtdrive is at least 45GB -tgtdrivesize=$(( $(cat "/sys/class/block/${tgtdrive}/size") / 2 / 1024 )) -if [ $tgtdrivesize -lt 46080 ]; then - exec < /dev/tty3 > /dev/tty3 2>&1 - chvt 3 - clear - echo - echo '********************************************************************' - echo '* E R R O R *' - echo '* *' - echo '* Your disk is under 45GB in size. Installation cannot continue. *' - echo '* Restart installation with a larger disk. *' - echo '* *' - echo '********************************************************************' - echo - read -p "Press Enter to restart: " _ - reboot -fi - -# paths in /dev have "/" instead of "!" for cciss devices -tgtdrive=$(echo $tgtdrive | sed -e 's/!/\//') - -# source -if test -e /dev/disk/by-label/OpenStack_Fuel; then - echo "harddrive --partition=LABEL=OpenStack_Fuel --dir=/" > /tmp/source.ks -elif test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then - echo "harddrive --partition=UUID=will_be_substituted_with_actual_uuid --dir=/" > /tmp/source.ks -else - echo "cdrom" > /tmp/source.ks -fi - -vgdisplay -c | cut -d':' -f1 | xargs vgremove -ff -dd if=/dev/zero of=/dev/${tgtdrive} bs=10M count=10 -sleep 3 -hdparm -z /dev/${tgtdrive} -parted -s /dev/${tgtdrive} mklabel gpt -parted -a none -s /dev/${tgtdrive} unit MiB mkpart primary 0% 24 -parted -s /dev/${tgtdrive} set 1 bios_grub on -parted -a none -s /dev/${tgtdrive} unit MiB mkpart primary fat16 24 224 -parted -s /dev/${tgtdrive} set 2 boot on -parted -a none -s /dev/${tgtdrive} unit MiB mkpart primary 224 424 -sleep 3 -hdparm -z /dev/${tgtdrive} - -# partition - -# This adds support for the p seperator required for cciss devices -if echo ${tgtdrive} | grep -q -e cciss ; then - bootdev=${tgtdrive}p -else - bootdev=${tgtdrive} -fi - -cat << EOF > /tmp/partition.ks -part /boot --onpart=/dev/${bootdev}3 -part /boot/efi --onpart=/dev/${bootdev}2 -part pv.001 --ondisk=${tgtdrive} --size=25000 --grow -part pv.002 --ondisk=${tgtdrive} --size=20000 -volgroup os pv.001 -volgroup docker pv.002 -logvol swap --vgname=os --recommended --name=swap -logvol / --vgname=os --size=10000 --name=root --fstype=ext4 -logvol /var --vgname=os --grow --percent 40 --name=var --fstype=ext4 -logvol /var/log --vgname=os --grow --percent 60 --name=varlog --fstype=ext4 -EOF - - - -# bootloader -echo "bootloader --driveorder=${tgtdrive} --append=' biosdevname=0 crashkernel=none'" > /tmp/bootloader.ks - -# Anaconda can not install grub 0.97 on disks which are >4T. -# The reason is that grub does not support such large geometries -# and it simply thinks that the cylinder number has negative value. -# Here we just set geometry manually so that grub thinks that disk -# size is equal to 1G. -# 130 cylinders * (16065 * 512 = 8225280 bytes) = 1G -echo "%post --nochroot --log=/mnt/sysimage/root/anaconda-post-partition.log" > /tmp/post_partition.ks -echo "echo \"device (hd0) /dev/${tgtdrive}\" >> /tmp/grub.script" >> /tmp/post_partition.ks -echo "echo \"geometry (hd0) 130 255 63\" >> /tmp/grub.script" >> /tmp/post_partition.ks -echo "echo \"root (hd0,2)\" >> /tmp/grub.script" >> /tmp/post_partition.ks -echo "echo \"install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf\" >> /tmp/grub.script" >> /tmp/post_partition.ks -echo "echo quit >> /tmp/grub.script" >> /tmp/post_partition.ks -echo "cat /tmp/grub.script | chroot /mnt/sysimage /sbin/grub --no-floppy --batch" >> /tmp/post_partition.ks -echo "%end" >> /tmp/post_partition.ks -%end - - - - - -# POSTINSTALL SECTIONS -# HERE ARE COMMANDS THAT WILL BE LAUNCHED JUST AFTER -# INSTALLATION ITSELF COMPLETED - - -# Parse /proc/cmdline and save for next steps -%post --log=/root/anaconda-parse-cmdline.log -#!/bin/bash -set -x - -# Parse cmdline to alter keys which contains dot in their names -# Such keys can't be used as variables in bash, -# so every dot is replaced with double underscore. -# Double underscore needed to avoid possible naming collisions. -for item in $(cat /proc/cmdline); do - if [[ "${item}" =~ '=' ]]; then - key="${item%%=*}" - value="${item#*=}" - else - key="${item}" - value='yes' - fi - key="${key//\./__}" - value="${value:-'yes'}" - echo "${key}=${value}" >> /root/anaconda.cmdline.vars -done - -source /root/anaconda.cmdline.vars - -if [[ ! -z $ifname ]]; then - echo "adminif=$(udevadm info --query=property -p /sys/class/net/${ifname%%:*} | \ - awk -F\= '$1 == "ID_NET_NAME_ONBOARD" {s=$2; exit}; $1 == "ID_NET_NAME_SLOT" {s=$2; exit}; $1 == "ID_NET_NAME_PATH" {s=$2; next}; END {print s}')" >> /root/anaconda.cmdline.vars -fi - -# Add self entry to /etc/hosts -ipaddr=$(echo $ip | cut -d: -f1) -hostname=$(echo $ip | cut -d: -f5) -# Use default hostname if missing from parameters -[ -z "$hostname" ] && hostname="fuel.domain.tld" -short=$(echo $hostname | cut -d. -f1) -echo -e "${ipaddr} ${hostname} ${short}" >> /etc/hosts -%end - - - - - -# Mount installation media in chroot -%post --nochroot --log=/mnt/sysimage/root/anaconda-post-before-chroot.log -#!/bin/bash -set -x - -source "/mnt/sysimage/root/anaconda.cmdline.vars" - -SOURCE="/mnt/sysimage/tmp/source" - -mkdir -p "${SOURCE}" - -case "${repo}" in - nfs:*) - nfs_url="${repo#nfs:}" - mount -t nfs "${nfs_url}" "${SOURCE}" - ;; - *) - if [ -d "/mnt/source" ]; then - mount -o bind "/mnt/source" "${SOURCE}" - fi - ;; -esac - - -# If not mounted, try to bind /run/install/repo since -# anaconda shoud mount installation repo to that folder. -if ! mountpoint -q "${SOURCE}"; then - if [ -d '/run/install/repo' ] && mountpoint -q '/run/install/repo'; then - mount -o bind '/run/install/repo' "${SOURCE}" - fi -fi - - -# If still not mounted, try to mount from LABEL / UUID. -# It was moved from next phase here to keep all mounting stuff -# in one place. All other scripts should use SOURCE variable -# for access to dist files. - -iso_volume_id=OpenStack_Fuel -iso_disk_uuid=will_be_substituted_with_actual_uuid -FS="/mnt/sysimage/tmp/fs" - -if ! mountpoint -q "${SOURCE}"; then - if [ -e "/dev/disk/by-label/${iso_volume_id}" ]; then - mount "/dev/disk/by-label/${iso_volume_id}" "${SOURCE}" - elif [ -e "/dev/disk/by-uuid/${iso_disk_uuid}" ]; then - mkdir -p "${FS}" - mount "/dev/disk/by-uuid/${iso_disk_uuid}" "${FS}" - mount -o loop "${FS}/nailgun.iso" "${SOURCE}" - fi -fi - -# Sleep to capture full log -sleep 1 -%end - - - - - -%post --log=/root/anaconda-post-configure-repos.log -#!/bin/bash -set -x - -SOURCE=/tmp/source - -# this file is provided by fuel-openstack-metadata package -OPENSTACK_VERSION=`cat /etc/fuel_openstack_version` - -# ---------------------- -# UNPACKING REPOSITORIES -# ---------------------- - -wwwdir="/var/www/nailgun" -repodir="${wwwdir}/${OPENSTACK_VERSION}" - -# Copying Centos files -mkdir -p ${repodir}/centos/x86_64 -mkdir -p ${repodir}/mos-centos/x86_64 -cp -r ${SOURCE}/images ${repodir}/centos/x86_64 -cp -r ${SOURCE}/isolinux ${repodir}/centos/x86_64 -cp -r ${SOURCE}/repodata ${repodir}/centos/x86_64 -cp -r ${SOURCE}/Packages ${repodir}/centos/x86_64 -cp -r ${SOURCE}/mos-centos/repodata ${repodir}/mos-centos/x86_64 -cp -r ${SOURCE}/mos-centos/Packages ${repodir}/mos-centos/x86_64 -cp -r ${SOURCE}/extra-repos ${repodir}/ -cp ${SOURCE}/.treeinfo ${repodir}/centos/x86_64 - -# Copying Ubuntu files -mkdir -p ${repodir}/ubuntu/x86_64/images -cp -r ${SOURCE}/ubuntu/dists ${repodir}/ubuntu/x86_64 -cp -r ${SOURCE}/ubuntu/pool ${repodir}/ubuntu/x86_64 - -# We do not ship debian-installer kernel and initrd on ISO. -# But we still need to be able to create ubuntu cobbler distro -# which requires kernel and initrd to be available. So, we -# just touch these files to work around cobbler's limitation. -touch ${repodir}/ubuntu/x86_64/images/linux -touch ${repodir}/ubuntu/x86_64/images/initrd.gz - -# make links for backward compatibility -ln -s ${repodir}/centos ${wwwdir}/centos -ln -s ${repodir}/ubuntu ${wwwdir}/ubuntu -#Make a symlink for mos-centos in /var/www/nailgun in iso/ks.template -ln -s ${repodir}/mos-centos ${wwwdir}/mos-centos -ln -s ${repodir}/extra-repos ${wwwdir}/extra-repos - -mkdir -p ${wwwdir}/targetimages - -cp ${SOURCE}/send2syslog.py /bin/send2syslog.py -mkdir -p /var/lib/hiera -touch /var/lib/hiera/common.yaml /etc/puppet/hiera.yaml - -# Prepare local repository specification -rm /etc/yum.repos.d/CentOS*.repo -cp ${SOURCE}/extra-repos/extra.repo /etc/yum.repos.d/ -cat > /etc/yum.repos.d/nailgun.repo << EOF -[nailgun] -name=Nailgun Local Repo -baseurl=file:/var/www/nailgun/${OPENSTACK_VERSION}/centos/x86_64 -gpgcheck=0 -[mos] -name=MOS Local Repo -baseurl=file:/var/www/nailgun/${OPENSTACK_VERSION}/mos-centos/x86_64 -gpgcheck=0 -EOF -%end - - - - - -%post --log=/root/anaconda-post-configure-sysconfig.log -#!/bin/bash -set -x - -source "/root/anaconda.cmdline.vars" -SOURCE=/tmp/source - -# Set correct docker volume group -echo "VG=docker" >> /etc/sysconfig/docker-storage-setup - -# Disable create iptables rules by docker -echo "DOCKER_NETWORK_OPTIONS=--iptables=false" > /etc/sysconfig/docker-network - -# Disable subscription-manager plugins -sed -i 's/^enabled.*/enabled=0/' /etc/yum/pluginconf.d/product-id.conf || : -sed -i 's/^enabled.*/enabled=0/' /etc/yum/pluginconf.d/subscription-manager.conf || : - -# Disable GSSAPI in ssh server config -sed -i -e "/^\s*GSSAPICleanupCredentials yes/d" -e "/^\s*GSSAPIAuthentication yes/d" /etc/ssh/sshd_config - -# Enable MOTD banner in sshd -sed -i -e "s/^\s*PrintMotd no/PrintMotd yes/g" /etc/ssh/sshd_config - -# Add note regarding local repos creation to MOTD -cat >> /etc/motd << EOF - -All environments use online repositories by default. -Use the following commands to create local repositories -on master node and change default repository settings: - -* CentOS: fuel-mirror (see --help for options) -* Ubuntu: fuel-mirror (see --help for options) - -Please refer to the following guide for more information: -https://docs.mirantis.com/openstack/fuel/fuel-7.0/reference-architecture.html#fuel-rep-mirror - -EOF - -# Install bootstrap_admin_node.sh and enabling it -install -m 0777 -D ${SOURCE}/bootstrap_admin_node.sh /usr/local/sbin/bootstrap_admin_node.sh -echo "ENABLED=1" > /etc/sysconfig/bootstrap_admin_node - -# Copying version.yaml file. It contains COMMIT_SHA of last commit. -RELEASE=$(awk '/release/{gsub(/"/, "");print $2}' ${SOURCE}/version.yaml) -mkdir -p /etc/nailgun /etc/fuel/${RELEASE} /etc/fuel/release_versions -cp ${SOURCE}/version.yaml /etc/nailgun/version.yaml -cp ${SOURCE}/version.yaml /etc/fuel/${RELEASE}/version.yaml -ln -s /etc/fuel/${RELEASE}/version.yaml /etc/fuel/version.yaml -cp ${SOURCE}/version.yaml /etc/fuel/release_versions/`cat ${SOURCE}/openstack_version`.yaml - -# Generete Fuel UUID -uuidgen > /etc/fuel/fuel-uuid - -# Prepare bootstrap_admin_node config -cat > /etc/fuel/bootstrap_admin_node.conf << EOF -#Set to yes to run Fuel Setup -#Set to no to accept default settings -ADMIN_INTERFACE=${adminif} -showmenu=${showmenu:-no} -wait_for_external_config=${wait_for_external_config:-no} -EOF - -# Prepare custom /etc/issue logon banner and script for changing IP in it -# We can have several interface naming schemes applied and several interface -# UI will listen on -ipstr="" -NL=$'\n' -for ip in `ip -o -4 a | grep -e "e[nt][hopsx].*" | awk '{print \$4 }' | cut -d/ -f1`; do - ipstr="${ipstr}https://${ip}:8443${NL}" -done -cat > /etc/issue <<EOF -######################################### -# Welcome to the Fuel server # -######################################### -Server is running on \m platform - -Fuel UI is available on: -$ipstr -Default administrator login: root -Default administrator password: r00tme - -Default Fuel UI login: admin -Default Fuel UI password: admin - -Please change root password on first login. - -EOF - -######### OPNFV addition BEGIN ############ -# Copy data into /opt/opnfv -# TODO: This ought to be a package instead! -mkdir -p /opt/opnfv -cp -r ${SOURCE}/opnfv /opt -cp ${SOURCE}/gitinfo.txt / -######### OPNFV addition END ############ - -# Unmounting source -umount -f ${SOURCE} -rm -rf ${SOURCE} - -umount -f ${FS} || true -rm -rf ${FS} - -echo "tos orphan 7" >> /etc/ntp.conf - -# Disabling splash -sed -i --follow-symlinks -e '/^\slinux16/ s/rhgb/debug/' /boot/grub2/grub.cfg - -# Copying default bash settings to the root directory -cp -f /etc/skel/.bash* /root/ - -# Blacklist i2c_piix4 module for VirtualBox so it does not create kernel errors -(virt-what | fgrep -q "virtualbox") && echo "blacklist i2c_piix4" > /etc/modprobe.d/blacklist-i2c-piix4.conf - -# Blacklist intel_rapl module for VirtualBox so it does not create kernel errors -(virt-what | fgrep -q "virtualbox") && echo "blacklist intel_rapl" > /etc/modprobe.d/blacklist-intel-rapl.conf - -# Disable sshd until after Fuel Setup if not running on VirtualBox -# TODO(mattymo): Remove VBox exception after LP#1487047 is fixed -(virt-what | fgrep -q "virtualbox") || systemctl disable sshd - -%end - - - - - -%post --log=/root/anaconda-post-configure-autologon.log -#!/bin/bash -set -x - -# Enable once root autologin for initial setup -mkdir -p /etc/systemd/system/getty@tty1.service.d/ -cat > /etc/systemd/system/getty@tty1.service.d/autologin.conf << 'EOF' -[Service] -ExecStart= -ExecStart=-/sbin/agetty --autologin root --noclear %I 115200 linux -EOF - -# Exec bootstrap_admin_node.sh if autologin enabled -cat >> /root/.bashrc << 'EOF' -if [[ "$(tty)" == "/dev/tty1" && -f /etc/systemd/system/getty@tty1.service.d/autologin.conf ]]; then - rm -Rf "/etc/systemd/system/getty@tty1.service.d" - /bin/systemctl daemon-reload - if [ -x /usr/local/sbin/bootstrap_admin_node.sh ]; then - exec /usr/local/sbin/bootstrap_admin_node.sh - fi -fi -EOF -%end - - -%post --nochroot --log=/mnt/sysimage/root/anaconda-post-interface-settings.log -#!/bin/bash -set -x - -source "/mnt/sysimage/root/anaconda.cmdline.vars" - -if [[ ! -z $adminif ]]; then - rm -f /mnt/sysimage/etc/sysconfig/network-scripts/ifcfg-${ifname%%:*} - sed "s/${ifname%%:*}/${adminif}/g" \ - /etc/sysconfig/network-scripts/ifcfg-${ifname%%:*} > \ - /mnt/sysimage/etc/sysconfig/network-scripts/ifcfg-${adminif} -fi -%end |