#!/bin/bash # # Simple script to kick off an install from a live CD # # Copyright (C) 2007 Red Hat, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # LIVE_INSTALL=0 IMAGE_INSTALL=0 RESCUE=0 if [[ "$LIVECMD $*" =~ "--rescue" ]]; then RESCUE=1 fi if [ -z "$LIVECMD" ]; then LIVE_INSTALL=1 fi if [[ "$LIVECMD $*" =~ "--image" ]]; then IMAGE_INSTALL=1 fi if [[ "$LIVECMD $*" =~ "--liveinst" ]]; then LIVE_INSTALL=1 fi # Try to sort out where the live device is if [ -z "$LIVE_BLOCK" ]; then if [ -b "/dev/mapper/live-base" ]; then LIVE_BLOCK="/dev/mapper/live-base" elif [ -b "/dev/mapper/live-osimg-min" ]; then LIVE_BLOCK="/dev/mapper/live-osimg-min" fi fi if [ $LIVE_INSTALL = 1 -a ! -b "$LIVE_BLOCK" ]; then title="Not a Live image" text="Can't do live image installation unless running from a live image" if which zenity &> /dev/null; then zenity --error --title="$title" --text="$text" else echo "$title" >&2 echo "$text" >&2 fi exit 1 fi # Allow running another command in the place of anaconda, but in this same # environment. This allows storage testing to make use of all the module # loading and lvm control in this file, too. ANACONDA=${LIVECMD:=anaconda --liveinst --method=livecd://$LIVE_BLOCK} # load modules that would get loaded by the initramfs (#230945) for i in raid0 raid1 raid5 raid6 raid456 raid10 dm-mod dm-zero dm-mirror dm-snapshot dm-multipath dm-round-robin vfat dm-crypt cbc sha256 lrw xts iscsi_tcp iscsi_ibft; do /sbin/modprobe $i 2>/dev/null ; done if [ -f /etc/system-release ]; then export ANACONDA_PRODUCTNAME=$( cat /etc/system-release | sed -r -e 's/ *release.*//' ) export ANACONDA_PRODUCTVERSION=$( cat /etc/system-release | sed -r -e 's/^.* ([0-9\.]+).*$/\1/' ) fi if [ $IMAGE_INSTALL = 1 ]; then export ANACONDA_PRODUCTVERSION=$(rpmquery -q --qf '%{VERSION}' anaconda | cut -d. -f1) fi export ANACONDA_BUGURL=${ANACONDA_BUGURL:="https://bugzilla.redhat.com/bugzilla/"} RELEASE=$(rpm -q --qf '%{Release}' fedora-release) if [ "${RELEASE:0:2}" = "0." ]; then export ANACONDA_ISFINAL="false" else export ANACONDA_ISFINAL="true" fi export PATH=/sbin:/usr/sbin:$PATH if [ -x /usr/sbin/getenforce ]; then current=$(/usr/sbin/getenforce) /usr/sbin/setenforce 0 fi if [ -z "$(sestatus | grep enabled)" ]; then ANACONDA="$ANACONDA --noselinux" fi # Process cmdline args for opt in `cat /proc/cmdline` $*; do case $opt in xdriver=*) ANACONDA="$ANACONDA --$opt" ;; updates=*) UPDATES="${opt#updates=}" ;; --updates=*) UPDATES="${opt#--updates=}" ;; inst.updates=*) UPDATES="${opt#inst.updates=}" ;; --inst.updates=*) UPDATES="${opt#--inst.updates=}" ;; --updates) title="updates error" text="liveinst requires --updates= instead of --updates " if which zenity &> /dev/null; then zenity --error --no-markup --title="$title" --text="$text" else echo "$title" >&2 echo "$text" >&2 fi exit 1 ;; ks=*|kickstart=*|--ks=*|--kickstart=*|inst.ks=*|--inst.ks=*|inst.kickstart=*|--inst-kickstart=*) title="Configuration not supported" text="Kickstart is not supported on live installs. This installation will continue interactively." if which zenity &> /dev/null; then zenity --warning --title="$title" --text="$text" else echo "$title" >&2 echo "$text" >&2 fi ;; esac done # unmount anything that shouldn't be mounted prior to install anaconda-cleanup $ANACONDA $* # Set up the updates, if provided. if [ ! -z "$UPDATES" ]; then if [ -e /tmp/updates.img -o -e /tmp/updates ]; then title="Updates already exist" text="updates= was provided, but an updates image already exists. Please remove /tmp/updates.img and /tmp/updates and try again." if which zenity &> /dev/null; then zenity --error --title="$title" --text="$text" else echo "$title" >&2 echo "$text" >&2 fi exit 1 fi curl -L -o /tmp/updates.img $UPDATES # We officially support two updates.img formats: a filesystem image, and # a compressed cpio blob. if [ ! -z "$(file /tmp/updates.img | grep 'gzip compressed data')" ]; then ( cd / ; gzip -dc /tmp/updates.img | cpio -idu ) else mkdir /tmp/updates.disk mount -t auto /tmp/updates.img /tmp/updates.disk cp -Rt / /tmp/updates.disk/* umount /tmp/updates.disk rmdir /tmp/updates.disk fi export PYTHONPATH=/tmp/updates:$PYTHONPATH export LD_LIBRARY_PATH=/tmp/updates:$LD_LIBRARY_PATH export PATH=/tmp/updates:$PATH fi if [ -z $LC_ALL ]; then # LC_ALL not set, set it to $LANG to make Python's default encoding # detection work export LC_ALL=$LANG fi if [ -x /usr/bin/udisks ]; then /usr/bin/udisks --inhibit -- $ANACONDA $* else $ANACONDA $* fi if [ -e /tmp/updates ]; then rm -r /tmp/updates; fi if [ -e /tmp/updates.img ]; then rm /tmp/updates.img; fi # try to teardown the filesystems if this was an image install if [ $IMAGE_INSTALL = 1 -a $RESCUE = 0 ]; then anaconda-cleanup fi rm -f /dev/.in_sysinit 2>/dev/null if [ -n "$current" ]; then /usr/sbin/setenforce $current fi