#!/bin/bash PHOTON_VERSION="5.0" function show-help() { echo "Script to create a Photon OSTree repo" echo "Usage: " echo "$0 -r= " echo "$0 -r= -p=" echo "$0 -c -r= -p=" echo "-r|--repopath " echo "-p|--jsonfile " echo "-c|--customrepo " 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