Merge "Add rhel installation element"
This commit is contained in:
commit
9211a7fecb
10
elements/rhel/README.md
Normal file
10
elements/rhel/README.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Overrides:
|
||||||
|
* Set DIB_CLOUD_IMAGES to a URL for downloading base Red Hat Enterprise Linux cloud image.
|
||||||
|
* Set DIB_CLOUD_RELEASE to a use a non-default name for the Red Hat Enterprise Linux cloud image.
|
||||||
|
* Set DIB_RHSM_USER and DIB_RHSM_PASSOWRD for the RHN user to be used for a subscription registration.
|
||||||
|
If these are set, the image building process will register the system with RHN
|
||||||
|
and apply the associated Red Hat Enterprise Linux Server subscription so the
|
||||||
|
latest package updates can be applied. At the end of the image building
|
||||||
|
process, the system will be unregistered from RHN.
|
||||||
|
* Set DIB_RHSM_POOL to a subscription pool if you want the system to not use
|
||||||
|
the auto attach feature of subscription-manager
|
38
elements/rhel/bin/install-packages
Normal file
38
elements/rhel/bin/install-packages
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Update packages for the distro
|
||||||
|
if [ "$1" = "-u" ] ; then
|
||||||
|
#yum -y update
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Packages that aren't available in the distro but requested for installation
|
||||||
|
# can be ignored by adding them to the exclude list
|
||||||
|
BLACKLIST=(ccache dkms)
|
||||||
|
WHITELIST=()
|
||||||
|
for i in "$@"
|
||||||
|
do
|
||||||
|
if [[ ! ${BLACKLIST[*]} =~ $i ]]; then
|
||||||
|
WHITELIST+="$i "
|
||||||
|
else
|
||||||
|
echo "The package $i is not available and will not be installed"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -n "$WHITELIST" ]; then
|
||||||
|
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
|
||||||
|
yum -y install $(map-packages $WHITELIST)
|
||||||
|
fi
|
30
elements/rhel/bin/map-packages
Executable file
30
elements/rhel/bin/map-packages
Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/env python
|
||||||
|
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Manually maintained for brevity; consider making this compiled from
|
||||||
|
# distromatch or other rich data sources.
|
||||||
|
# Debian name on the left, RHEL on the right.
|
||||||
|
package_map = {
|
||||||
|
'grub-pc': 'grub',
|
||||||
|
'extlinux': 'syslinux-extlinux',
|
||||||
|
'open-iscsi': 'iscsi-initiator-utils',
|
||||||
|
'vlan': 'vconfig',
|
||||||
|
}
|
||||||
|
|
||||||
|
for arg in sys.argv[1:]:
|
||||||
|
print(package_map.get(arg, arg))
|
||||||
|
sys.exit(0)
|
3
elements/rhel/element-deps
Normal file
3
elements/rhel/element-deps
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dib-run-parts
|
||||||
|
cache-url
|
||||||
|
rpm-distro
|
7
elements/rhel/finalise.d/60-rhsm-unregister
Executable file
7
elements/rhel/finalise.d/60-rhsm-unregister
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ -n $DIB_RHSM_USER ] && [ -n $DIB_RHSM_PASSWORD ]; then
|
||||||
|
subscription-manager unregister
|
||||||
|
fi
|
16
elements/rhel/pre-install.d/00-rhsm
Executable file
16
elements/rhel/pre-install.d/00-rhsm
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ -n $DIB_RHSM_USER ] && [ -n $DIB_RHSM_PASSWORD ]
|
||||||
|
then
|
||||||
|
subscription-manager register --user $DIB_RHSM_USER --password $DIB_RHSM_PASSWORD
|
||||||
|
# wait a second to ensure consumer certificate is finished writing to disk
|
||||||
|
sleep 1
|
||||||
|
if [ -z $DIB_RHSM_POOL ]; then
|
||||||
|
subscription-manager attach --auto
|
||||||
|
else
|
||||||
|
subscription-manager attach --pool $DIB_RHSM_POOL
|
||||||
|
fi
|
||||||
|
subscription-manager repos --enable rhel-6-server-optional-rpms
|
||||||
|
fi
|
57
elements/rhel/root.d/10-rhel-cloud-image
Executable file
57
elements/rhel/root.d/10-rhel-cloud-image
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
[ -n "$ARCH" ]
|
||||||
|
[ -n "$TARGET_ROOT" ]
|
||||||
|
|
||||||
|
if [ 'amd64' = "$ARCH" ] ; then
|
||||||
|
ARCH="x86_64"
|
||||||
|
fi
|
||||||
|
|
||||||
|
IMG_PATH=~/.cache/image-create
|
||||||
|
DIB_RELEASE=${DIB_RELEASE:-latest}
|
||||||
|
DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-http://rhn.redhat.com}
|
||||||
|
BASE_IMAGE_FILE=${BASE_IMAGE_FILE:-rhel-server-x86_64-kvm-6.4_20130130.0-4.qcow2}
|
||||||
|
BASE_IMAGE_TAR=$DIB_RELEASE-rhel-server-$ARCH-latest.tgz
|
||||||
|
CACHED_TAR=$IMG_PATH/$BASE_IMAGE_TAR
|
||||||
|
|
||||||
|
if [ -n "$DIB_OFFLINE" -a -f "$CACHED_TAR" ] ; then
|
||||||
|
echo "Not checking freshness of cached $CACHED_TAR."
|
||||||
|
else
|
||||||
|
echo "Fetching Base Image"
|
||||||
|
$TMP_HOOKS_PATH/bin/cache-url $DIB_CLOUD_IMAGES/$BASE_IMAGE_FILE $IMG_PATH/$BASE_IMAGE_FILE
|
||||||
|
|
||||||
|
if [ ! -f $CACHED_TAR -o \
|
||||||
|
$IMG_PATH/$BASE_IMAGE_FILE -nt $CACHED_TAR ] ; then
|
||||||
|
echo "Repacking base image as tarball."
|
||||||
|
WORKING=$(mktemp -d)
|
||||||
|
EACTION="rm -r $WORKING"
|
||||||
|
trap "$EACTION" EXIT
|
||||||
|
RAW_FILE=$(basename $BASE_IMAGE_FILE)
|
||||||
|
RAW_FILE=${RAW_FILE#.qcow2}.raw
|
||||||
|
qemu-img convert -f qcow2 -O raw $IMG_PATH/$BASE_IMAGE_FILE $WORKING/$RAW_FILE
|
||||||
|
MAGIC_BIT=p1
|
||||||
|
# NOTE: On RHEL, partprobe of /dev/loop0 does not create /dev/loop0p2,
|
||||||
|
# while kpartx at least creates /dev/mapper/loop0p2.
|
||||||
|
LOOPDEV=$(sudo kpartx -av $WORKING/$RAW_FILE | awk "/loop[0-9]+$MAGIC_BIT/ {print \$3}")
|
||||||
|
export LOOPDEV=$LOOPDEV
|
||||||
|
echo "Loop device is set to: $LOOPDEV"
|
||||||
|
if ! timeout 5 sh -c "while ! [ -e /dev/mapper/$LOOPDEV ]; do sleep 1; done"; then
|
||||||
|
echo "Error: Could not find /dev/mapper/$LOOPDEV"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
EACTION="sudo kpartx -d $WORKING/$RAW_FILE;$EACTION"
|
||||||
|
trap "$EACTION" EXIT
|
||||||
|
mkdir $WORKING/mnt
|
||||||
|
sudo mount /dev/mapper/$LOOPDEV $WORKING/mnt
|
||||||
|
EACTION="sudo umount -f $WORKING/mnt;$EACTION"
|
||||||
|
trap "$EACTION" EXIT
|
||||||
|
# Chroot in so that we get the correct uid/gid
|
||||||
|
sudo chroot $WORKING/mnt bin/tar -cz . > $WORKING/tmp.tar
|
||||||
|
mv $WORKING/tmp.tar $IMG_PATH/$BASE_IMAGE_TAR
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# Extract the base image
|
||||||
|
sudo tar -C $TARGET_ROOT -xzf $IMG_PATH/$BASE_IMAGE_TAR
|
||||||
|
sudo rmdir $TARGET_ROOT/lost+found
|
Loading…
Reference in New Issue
Block a user