#!/bin/bash
PHOTON_VERSION="5.0"
function show-help()
{
echo "Script to create a Photon OSTree repo"
echo "Usage: "
echo "$0 -r=<repo path> "
echo "$0 -r=<repo path> -p=<json treefile>"
echo "$0 -c -r=<repo path> -p=<json treefile>"
echo "-r|--repopath <Provide repo path> "
echo "-p|--jsonfile <Provide Json file> "
echo "-c|--customrepo <Provide custom repo file inside repo path directory> "
exit 0
}
function check-rpm-ostree()
{
local rc=0
command -v rpm-ostree &>/dev/null
if [ "$?" -ne 0 ]; then
echo "rpm-ostree not installed on System. Installing rpm-ostree package.."
tdnf install -y rpm-ostree &>/dev/null
rc=$?
if [ "$rc" -ne 0 ];then
echo "ERROR : rpm-ostree installation Failed!!"
exit $rc
fi
fi
}
function create-input-json()
{
if [ ! -z "$JSONFILE" ]; then
echo "Given JSON : ${JSONFILE}"
if [ ! -f $JSONFILE ]; then
echo "ERROR : ${JSONFILE} doesn't exist !!"
exit 1
fi
cp $JSONFILE $REPOPATH/ &>/dev/null
JSONFILE="$REPOPATH/$(basename $JSONFILE)"
elif [ -z "$JSONFILE" ] && [ ! -f $REPOPATH/photon-base.json ]; then
echo "Generating photon-base.json"
JSONFILE="$REPOPATH/photon-base.json"
cat > $JSONFILE << EOF
{
"comment": "Photon Minimal OSTree",
"osname": "photon",
"releasever": "${PHOTON_VERSION}",
"ref": "photon/${PHOTON_VERSION}/$(uname -m)/minimal",
"automatic_version_prefix": "${PHOTON_VERSION}_minimal",
"repos": ["photon", "photon-updates", "photon-extras"],
"selinux": false,
"initramfs-args": ["--no-hostonly"],
"bootstrap_packages": ["filesystem"],
"documentation": false,
"tmp-is-dir": true,
"packages": ["bash", "bc", "bridge-utils", "bzip2","ca-certificates",
"cloud-init", "cpio", "cracklib-dicts", "dbus", "e2fsprogs",
"file", "findutils", "gdbm", "grep", "gzip", "iana-etc",
"iptables", "iproute2", "iputils", "libtool", "linux", "motd",
"net-tools", "pkg-config", "photon-release", "photon-repos",
"procps-ng", "rpm", "sed", "sudo", "tzdata", "util-linux",
"vim", "which", "dracut-tools", "rpm-ostree", "nss-altfiles",
"openssh", "systemd", "systemd-udev", "openssl", "grub2", "grub2-efi",
"grub2-efi-image", "shadow", "ncurses", "grub2-theme-ostree",
"selinux-policy"],
"packages-x86_64": ["grub2-pc", "open-vm-tools-gosc"],
"units": ["sshd-keygen.service", "sshd.service"]
}
EOF
elif [ -f $REPOPATH/photon-base.json ]; then
JSONFILE="$REPOPATH/photon-base.json"
fi
}
function generating-repos()
{
if [ "$DEFAULT" == "NO" ]; then
while true; do
read -p "Do you wish to create your own Repo files as mentioned in ${JSONFILE}? (Press 'N' if already created or Default creation)" yn
case $yn in
[Yy]* )
echo "Please create required repo files inside ${REPOPATH} directory same as mentioned in ${JSONFILE}"
exit 0;;
[Nn]* )
DEFAULT="YES"; break;;
* ) echo "Please answer 'Y' or 'N'";;
esac
done
fi
if [ "$DEFAULT" == "YES" ] && [ ! -f $REPOPATH/photon.repo ]; then
cat > $REPOPATH/photon.repo << EOF
[photon]
name=VMware Photon Linux \$releasever (\$basearch)
baseurl=https://packages.vmware.com/photon/\$releasever/photon_release_\$releasever_\$basearch
gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY
gpgcheck=1
enabled=1
skip_if_unavailable=True
EOF
fi
if [ ! -f $REPOPATH/photon-updates.repo ]; then
cat > $REPOPATH/photon-updates.repo << EOF
[photon-updates]
name=VMware Photon Linux \$releasever (\$basearch) Updates
baseurl=https://packages.vmware.com/photon/\$releasever/photon_updates_\$releasever_\$basearch
gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY
gpgcheck=1
enabled=1
skip_if_unavailable=True
EOF
fi
if [ ! -f $REPOPATH/photon-extras.repo ]; then
cat > $REPOPATH/photon-extras.repo << EOF
[photon-extras]
name=VMware Photon Extras \$releasever (\$basearch)
baseurl=https://packages.vmware.com/photon/\$releasever/photon_extras_\$releasever_\$basearch
gpgkey=file:///etc/pki/rpm-gpg/VMWARE-RPM-GPG-KEY
gpgcheck=1
enabled=1
skip_if_unavailable=True
EOF
fi
}
function do-commit()
{
local rc=0
create-input-json
generating-repos
umask 0022
rpm-ostree compose tree --cachedir=$CACHEDATAPATH --repo=$REPODATAPATH $JSONFILE
rc=$?
if [ "$rc" -ne 0 ]; then
echo "ERROR: RPM Ostree compose tree Failed !!"
umask $UMASKVAL
exit $rc
fi
ostree summary --repo=$REPODATAPATH --update
ostree summary -v --repo=$REPODATAPATH
umask $UMASKVAL
}
function create-base-tree()
{
local rc=0
ostree --repo=repo init --mode=archive-z2
rc=$?
if [ "$rc" -ne 0 ]; then
echo "ERROR: Ostree init Failed !!"
exit $rc
fi
echo "Generating Base Tree.."
do-commit
}
REPOPATH=""
JSONFILE=""
DEFAULT="YES"
POSITIONAL=()
if [ $# -lt 1 ]; then
show-help
fi
for i in "$@"
do
case $i in
-h|--help)
show-help
exit 0
;;
-r=*|--repopath=*)
REPOPATH="${i#*=}"
if [ -z "$REPOPATH" ]; then
echo "Path not provided to generate the repo data !!"
show-help
exit 0
fi
;;
-p=*|--jsonfile=*)
JSONFILE="${i#*=}"
if [ ! -z "$JSONFILE" ];then
JSONFILE="$(readlink -f ${JSONFILE})"
fi
;;
-c|--customrepo)
DEFAULT="NO"
;;
*) # unknown option
POSITIONAL+=("$1")
;;
esac
done
UMASKVAL="$(umask)"
if [ -z "$REPOPATH" ]; then
echo "Please provide repopath !!"
show-help
exit 0
fi
REPOPATH="$(readlink -f ${REPOPATH})"
REPODATAPATH="$REPOPATH/repo"
CACHEDATAPATH="$REPOPATH/cache"
check-rpm-ostree
echo "Given Path: ${REPOPATH} ; DEFAULT REPOS : ${DEFAULT}"
mkdir -p $REPODATAPATH
mkdir -p $CACHEDATAPATH
if [ ! -d "${REPODATAPATH}/refs" ]; then
cd $REPOPATH
create-base-tree
echo "Base Tree has been created. Repo data Path: ${REPODATAPATH}"
cd - &>/dev/null
else
echo "Base tree exist, executing new commit.."
cd $REPOPATH
do-commit
echo "New Commit executed. Repo data Path: ${REPODATAPATH}"
cd - &>/dev/null
fi