#!/usr/bin/env bash set -eu CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd) if [ -e /etc/os-release ]; then VERSION_ID=$(source /etc/os-release; echo ${VERSION_ID}) OS_NAME=$(source /etc/os-release; echo ${NAME}) OS_NAME=${OS_NAME,,} else #Basically Centos 5/6 VERSION_ID=($(head -n 1 /etc/redhat-release | \grep -Eo '[0-9]+')) OS_NAME=$(awk '{print tolower($1)}' /etc/redhat-release) #Stupid ancient bash 3... fi case "${OS_NAME}" in centos*|red*|almalinux) RPM_DIST=".el${VERSION_ID}" ;; fedora) RPM_DIST=".fc${VERSION_ID}" ;; sles) RPM_DIST=".sles${VERSION_ID}" ;; opensuse) RPM_DIST=".opensuse${VERSION_ID}" ;; *) RPM_DIST="%{nil}" ;; esac RPMBUILD=(rpmbuild --define "_topdir ${CURDIR}" --define "dist ${RPM_DIST}") if [[ ${NODEPS:-0} != 0 ]]; then RPMBUILD=("${RPMBUILD[@]}" --nodeps) fi SUDO=${SUDO=`if command -v sudo > /dev/null 2>&1; then echo sudo; fi`} export PATH=${PATH}:/usr/local/bin set -vx echo "Downloading/checking for some essentials..." if command -v git > /dev/null 2>&1; then GIT_VERSION=($(git --version)) IFS_OLD=${IFS} IFS=. GIT_VERSION=(${GIT_VERSION[2]}) IFS=${IFS_OLD} else GIT_VERSION=(0 0 0) fi SPEC=${CURDIR}/SPECS/git-lfs.spec if [[ ${VERSION_ID[0]} == 5 ]]; then if ! rpm -q epel-release > /dev/null 2>&1; then $SUDO yum install -y epel-release fi fi $SUDO yum install -y make curl rpm-build tar bison perl-Digest-SHA mkdir -p ${CURDIR}/{BUILD,BUILDROOT,SOURCES,RPMS,SRPMS} if ( [[ ${GIT_VERSION[0]} == 1 ]] && [[ ${GIT_VERSION[1]} < 8 ]] ) || [[ ${GIT_VERSION[0]} < 1 ]]; then if [[ ${VERSION_ID[0]} != 6 ]]; then $SUDO yum install -y git else curl https://setup.ius.io/ | $SUDO bash yum install -y "git >= 1.8.2" fi fi if ! command -v go; then echo "Installing go... one way or another" if [[ ${VERSION_ID[0]} == 5 ]]; then $SUDO yum install -y curl.x86_64 glibc gcc ${CURDIR}/golang_patch.bsh "${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/golang.spec $SUDO yum install -y --nogpgcheck ${CURDIR}/RPMS/noarch/golang-1*.rpm \ ${CURDIR}/RPMS/noarch/golang-pkg-bin-linux-amd64-1*.rpm \ ${CURDIR}/RPMS/noarch/golang-src-1*.noarch.rpm \ ${CURDIR}/RPMS/noarch/golang-pkg-linux-amd64-1*.noarch.rpm \ ${CURDIR}/RPMS/noarch/golang-pkg-linux-386-1*.noarch.rpm else $SUDO yum install -y epel-release $SUDO yum install -y golang fi fi if command -v ruby > /dev/null 2>&1; then IFS_OLD=${IFS} IFS=. RUBY_VERSION=($(ruby -e "print RUBY_VERSION")) IFS=${IFS_OLD} else RUBY_VERSION=(0 0 0) fi if [[ ${RUBY_VERSION[0]} < 2 ]]; then if [[ ${VERSION_ID[0]} < 7 ]]; then echo "Downloading ruby..." if ! rpm -q epel-release; then $SUDO yum install -y epel-release #Optional part of centos fi $SUDO yum install -y patch libyaml-devel glibc-headers autoconf gcc-c++ glibc-devel readline-devel zlib-devel libffi-devel openssl-devel automake libtool sqlite-devel pushd ${CURDIR}/SOURCES curl -L -O http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz popd echo "Building ruby..." "${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/ruby.spec echo "Installing ruby..." $SUDO yum install -y --nogpgcheck ${CURDIR}/RPMS/x86_64/ruby*.rpm $SUDO yum erase -y libyaml-devel autoconf gcc-c++ readline-devel zlib-devel openssl-devel automake libtool sqlite-devel else $SUDO yum install -y ruby ruby-devel fi fi if [[ ${VERSION_ID[0]} == 8 ]]; then $SUDO yum install -y rubygems-devel fi if ! command -v ronn; then echo "Downloading some ruby gems..." pushd ${CURDIR}/SOURCES curl -L -O https://rubygems.org/downloads/rdiscount-2.1.8.gem curl -L -O https://rubygems.org/downloads/hpricot-0.8.6.gem curl -L -O https://rubygems.org/downloads/mustache-1.0.1.gem curl -L -O https://rubygems.org/downloads/ronn-0.7.3.gem popd echo "Building ruby gems..." "${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/rubygem-rdiscount.spec "${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/rubygem-mustache.spec "${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/rubygem-hpricot.spec "${RPMBUILD[@]}" -ba ${CURDIR}/SPECS/rubygem-ronn.spec echo "Installing ruby gems..." $SUDO yum install -y --nogpgcheck $(ls ${CURDIR}/RPMS/noarch/rubygem-*.rpm ${CURDIR}/RPMS/x86_64/rubygem-*.rpm | grep -v debuginfo) fi rm -fr ${CURDIR}/{BUILD,BUILDROOT} mkdir -p ${CURDIR}/{BUILD,BUILDROOT} pushd ${CURDIR}/.. #Yes, compile lfs before compiling lfs... make #Use the version output to grab the version number and short sha #(that yes, I could have gotten from git myself) LFS_VERSION=$(./bin/git-lfs version | sed -r 's|.*/([0-9.]*).*|\1|') sed -i 's|\(^Version:\s*\).*|\1'"${LFS_VERSION}"'|' ${CURDIR}/SPECS/git-lfs.spec popd #Prep the SOURCES dir for git-lfs echo "Zipping up current checkout of git-lfs..." echo "Cleaning ${CURDIR}/tmptar" rm -rf ${CURDIR}/tmptar mkdir -p ${CURDIR}/tmptar/git-lfs-${LFS_VERSION} pushd ${CURDIR}/.. #I started running out of space in the docker, so I needed to copy a little less waste tar -c --exclude tmptar --exclude repos . | tar -x -C ${CURDIR}/tmptar/git-lfs-${LFS_VERSION}/ popd pushd ${CURDIR}/tmptar tar -zcf ${CURDIR}/SOURCES/git-lfs-${LFS_VERSION}.tar.gz git-lfs-${LFS_VERSION} popd echo "Cleaning ${CURDIR}/tmptar again" rm -rf ${CURDIR}/tmptar #TODO TASK 2 #cp ${CURDIR}/../docker/public.key ${CURDIR}/SOURCES/RPM-GPG-KEY-GITLFS touch ${CURDIR}/SOURCES/RPM-GPG-KEY-GITLFS echo "Build git-lfs rpm..." #--no-deps added for now so you can compile without official rpms installed "${RPMBUILD[@]}" --nodeps -ba ${CURDIR}/SPECS/git-lfs.spec echo "All Done!"