createhdds/createhdds.sh
Petr Schindler 0b3c6beab9 Creating of mbr and gpt disks added
I left 2MB on beginning and 2MB on the end of disks because
there will be saved gpt.

Differential Revision: https://phab.qadevel.cloud.fedoraproject.org/D624
2015-10-21 09:42:28 +02:00

219 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
function disk_full {
part_table_type=$1
diskname="disk_full_${part_table_type}"
echo "Creating ${diskname}.img..."
guestfish <<_EOF_
sparse ${diskname}.img 10G
run
part-init /dev/sda ${part_table_type}
part-add /dev/sda p 4096 10485760
part-add /dev/sda p 10485761 -4097
mkfs ext4 /dev/sda1
mkfs ext4 /dev/sda2
mount /dev/sda1 /
write /testfile "Hello, world!"
umount /
mount /dev/sda2 /
write /testfile "Oh, hi Mark"
umount /
_EOF_
}
function disk_freespace {
part_table_type=$1
diskname="disk_freespace_${part_table_type}"
echo "Creating ${diskname}.img..."
guestfish <<_EOF_
sparse ${diskname}.img 10G
run
part-init /dev/sda ${part_table_type}
part-add /dev/sda p 4096 2097152
mkfs ext4 /dev/sda1
mount /dev/sda1 /
write /testfile "Hello, world!"
_EOF_
}
function disk_minimal {
version=$1
arch=$2
echo "Creating disk_f${version}_minimal_${arch}.img..."
virt-builder fedora-${version} -o disk_f${version}_minimal_${arch}.img --arch ${arch} --update --selinux-relabel \
--root-password password:weakpassword > /dev/null
expect <<_EOF_
log_user 0
set timeout -1
spawn qemu-kvm -m 2G -nographic disk_f${version}_minimal_${arch}.img
expect "localhost login:"
send "root\r"
expect "Password:"
send "weakpassword\r"
expect "~]#"
send "poweroff\r"
expect "reboot: Power down"
_EOF_
}
function disk_desktop {
version=$1
arch=$2
if [ ${version} -lt 22 ]
then
cmd="yum -y remove firewalld* && yum -y groupinstall 'Fedora Workstation'"
else
cmd="dnf -y groupinstall 'Fedora Workstation'"
fi
echo "Creating disk_f${version}_desktop_${arch}.img..."
# these steps are required
# 1. update fedora
# 2. (F<22) remove firewalld - firewalld configuration in minimal and desktop are conflicting
# 3. install Fedora Workstation group
# 4. add new user on first boot
# 5. use expect to set graphical boot target and set password for user
virt-builder fedora-${version} -o disk_f${version}_desktop_${arch}.img --size 20G --arch ${arch} --update \
--run-command "${cmd}" --selinux-relabel \
--root-password password:weakpassword --firstboot-command 'useradd -m -p "" ejohn' > /dev/null
expect <<_EOF_
log_user 0
set timeout -1
spawn qemu-kvm -m 2G -nographic disk_f${version}_desktop_${arch}.img
expect "localhost login:"
send "root\r"
expect "Password:"
send "weakpassword\r"
expect "~]#"
send "systemctl set-default graphical.target\r"
send "echo 'ejohn:weakpassword' | chpasswd\r"
send "poweroff\r"
expect "reboot: Power down"
_EOF_
}
function disk_ks {
diskname="disk_ks"
echo "Creating ${diskname}.img..."
curl --silent -o "/tmp/root-user-crypted-net.ks" "https://jskladan.fedorapeople.org/kickstarts/root-user-crypted-net.ks" > /dev/null
guestfish <<_EOF_
sparse ${diskname}.img 100MB
run
part-init /dev/sda mbr
part-add /dev/sda p 4096 -1
mkfs ext4 /dev/sda1
mount /dev/sda1 /
upload /tmp/root-user-crypted-net.ks /root-user-crypted-net.ks
_EOF_
}
function disk_updates_img {
diskname="disk_updates_img"
echo "Creating ${diskname}.img..."
curl --silent -o "/tmp/updates.img" "https://fedorapeople.org/groups/qa/updates/updates-unipony.img" > /dev/null
guestfish <<_EOF_
sparse ${diskname}.img 100MB
run
part-init /dev/sda mbr
part-add /dev/sda p 4096 -1
mkfs ext4 /dev/sda1 label:UPDATES_IMG
mount /dev/sda1 /
upload /tmp/updates.img /updates.img
_EOF_
}
function disk_shrink {
fstype=$1
part_table_type=$2
diskname="disk_shrink_${fstype}_${part_table_type}"
echo "Creating ${diskname}.img..."
guestfish <<_EOF_
sparse ${diskname}.img 10G
run
part-init /dev/sda ${part_table_type}
part-add /dev/sda p 4096 -4097
mkfs $fstype /dev/sda1
mount /dev/sda1 /
write /testfile "Hello, world!"
_EOF_
}
if [[ "$1" != "" ]]; then
VERSION="$1"
shift
if [[ "$#" -eq 0 ]]; then
disk_full "mbr"
disk_full "gpt"
disk_freespace "mbr"
disk_freespace "gpt"
disk_minimal ${VERSION} "x86_64"
disk_minimal ${VERSION} "i686"
disk_desktop ${VERSION} "x86_64"
disk_desktop ${VERSION} "i686"
disk_ks
disk_updates_img
disk_shrink "ext4" "mbr"
disk_shrink "ntfs" "mbr"
disk_shrink "ext4" "gpt"
disk_shrink "ntfs" "gpt"
else
# default type of partition table is mbr
PART_TABLE_TYPE="mbr"
if [[ "$#" -gt 1 ]]; then
case $2 in
mbr)
;;
gpt)
PART_TABLE_TYPE="gpt"
;;
*)
echo "partition table type should be gpt or mbr (default)"
exit 1
;;
esac
fi
case $1 in
full)
disk_full ${PART_TABLE_TYPE}
;;
freespace)
disk_freespace ${PART_TABLE_TYPE}
;;
minimal_64bit)
disk_minimal ${VERSION} "x86_64"
;;
minimal_32bit)
disk_minimal ${VERSION} "i686"
;;
desktop_64bit)
disk_desktop ${VERSION} "x86_64"
;;
desktop_32bit)
disk_desktop ${VERSION} "i686"
;;
ks)
disk_ks
;;
updates)
disk_updates_img
;;
shrink_ext4)
disk_shrink "ext4" ${PART_TABLE_TYPE}
;;
shrink_ntfs)
disk_shrink "ntfs" ${PART_TABLE_TYPE}
;;
*)
echo "name not in [full|freespace|minimal_64bit|minimal_32bit|desktop_64bit|desktop_32bit|ks|updates|shrink_ext4|shrink_ntfs]"
exit 1
;;
esac
fi
else
echo "USAGE: $0 VERSION [full|freespace|minimal_64bit|minimal_32bit|desktop_64bit|desktop_32bit|ks|updates|shrink_ext4|shrink_ntfs] [mbr|gpt]"
exit 1
fi