diff --git a/.gitignore b/.gitignore index 99543ebb..cc552f71 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ debian/*.log debian/files debian/*.substvars obj-* + +rpm/BUILD* +rpm/*RPMS diff --git a/rpm/SPECS/git-lfs.spec b/rpm/SPECS/git-lfs.spec new file mode 100644 index 00000000..07ef6d6d --- /dev/null +++ b/rpm/SPECS/git-lfs.spec @@ -0,0 +1,48 @@ +Name: git-lfs +Version: 0.5.1 +Release: 1%{?dist} +Summary: Git extension for versioning large files + +Group: Applications/Archiving +License: MIT +URL: https://git-lfs.github.com/ +Source0: https://github.com/github/git-lfs/archive/v%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: golang, tar, which, bison, rubygem-ronn +Requires: git + +%if 0%{?rhel} == 7 + #Umm... excuse me what? + %define debug_package %{nil} + #I think this is because go links with --build-id=none for linux + #Uhhh... HOW DO I FIX THAT? Using an external linker +%endif + +%description + + +%prep +%setup -q -n %{name}-%{version} + +%build +./script/bootstrap +./script/man + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +install -D bin/git-lfs ${RPM_BUILD_ROOT}/usr/bin/git-lfs +mkdir -p -m 755 ${RPM_BUILD_ROOT}/usr/share/man/man1 +install -D man/*.1 ${RPM_BUILD_ROOT}/usr/share/man/man1 + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%doc LICENSE README.md +/usr/bin/git-lfs +/usr/share/man/man1/*.1.gz + +%changelog +* Mon May 18 2015 Andrew Neff - 0.5.1-1 +- Initial Spec diff --git a/rpm/SPECS/ruby.spec b/rpm/SPECS/ruby.spec new file mode 100644 index 00000000..f74b4d52 --- /dev/null +++ b/rpm/SPECS/ruby.spec @@ -0,0 +1,37 @@ +Name: ruby +Version: 2.2.2 +Release: 1%{?dist} +Summary: Ruby Programming Language + +Group: Applications/Programming +License: BSDL +URL: https://www.ruby-lang.org/ +Source0: http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz +BuildRoot: %(echo %{_topdir}/BUILDROOT/%{name}-%{version}) +BuildRequires: patch, libyaml-devel, glibc-headers, autoconf, gcc-c++, glibc-devel, patch, readline-devel, zlib-devel, libffi-devel, openssl-devel, automake, libtool, sqlite-devel +Provides: gem = %{version}-%{release} + +%description +A dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write. + +%prep +%setup -q + +%build +./configure +make -j 8 + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +make install DESTDIR=${RPM_BUILD_ROOT} + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +/ + +%changelog +* Tue May 19 2015 Andrew Neff - 2.2.2-1 +- Initial Spec diff --git a/rpm/SPECS/rubygem-hpricot.spec b/rpm/SPECS/rubygem-hpricot.spec new file mode 100644 index 00000000..63cc957c --- /dev/null +++ b/rpm/SPECS/rubygem-hpricot.spec @@ -0,0 +1,41 @@ +#global gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null) +%global gemdir %(IFS=: R=($(gem env gempath)); echo ${R[${#R[@]}-1]}) +%define gem_name hpricot +Name: rubygem-%{gem_name} +Version: 0.8.6 +Release: 1%{?dist} +Summary: a swift, liberal HTML parser with a fantastic library + +Group: Applications/Programming +License: N/A +URL: https://rubygems.org/gems/%{gem_name} +Source0: https://rubygems.org/downloads/%{gem_name}-%{version}.gem +BuildRoot: %(echo %{_topdir}/BUILDROOT/%{gem_name}-%{version}) +BuildRequires: gem +Requires: ruby + +%description +a swift, liberal HTML parser with a fantastic library + +%prep +%setup -q -c -T +gem install -V --local --force --install-dir ./%{gemdir} %{SOURCE0} +#mv ./%{gemdir}/bin ./usr/local + +%build + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +mkdir -p ${RPM_BUILD_ROOT} +cp -a ./usr ${RPM_BUILD_ROOT}/usr + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%{gemdir} + +%changelog +* Wed May 20 2015 Andrew Neff - 2.1.8 +- Initial Spec diff --git a/rpm/SPECS/rubygem-mustache.spec b/rpm/SPECS/rubygem-mustache.spec new file mode 100644 index 00000000..80086807 --- /dev/null +++ b/rpm/SPECS/rubygem-mustache.spec @@ -0,0 +1,44 @@ +#global gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null) +%global gemdir %(IFS=: R=($(gem env gempath)); echo ${R[${#R[@]}-1]}) +%define gem_name mustache + +Name: rubygem-%{gem_name} +Version: 1.0.1 +Release: 1%{?dist} +Summary: A framework-agnostic way to render logic-free views + +Group: Applications/Programming +License: MIT +URL: https://rubygems.org/gems/%{gem_name} +Source0: https://rubygems.org/downloads/%{gem_name}-%{version}.gem +BuildRoot: %(echo %{_topdir}/BUILDROOT/%{gem_name}-%{version}) +BuildRequires: gem > 2.0 +Requires: ruby > 2.0 +BuildArch: noarch + +%description +Inspired by ctemplate, Mustache is a framework-agnostic way to render logic-free views. As ctemplates says, "It emphasizes separating logic from presentation: it is impossible to embed application logic in this template language. Think of Mustache as a replacement for your views. Instead of views consisting of ERB or HAML with random helpers and arbitrary logic, your views are broken into two parts: a Ruby class and an HTML template. + +%prep +%setup -q -c -T +gem install -V --local --force --install-dir ./%{gemdir} %{SOURCE0} +mv ./%{gemdir}/bin ./usr/local + +%build + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +mkdir -p ${RPM_BUILD_ROOT} +cp -a ./usr ${RPM_BUILD_ROOT}/usr + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%{gemdir} +/usr/local/bin/%{gem_name} + +%changelog +* Wed May 20 2015 Andrew Neff - 2.1.8 +- Initial Spec diff --git a/rpm/SPECS/rubygem-rdiscount.spec b/rpm/SPECS/rubygem-rdiscount.spec new file mode 100644 index 00000000..5221683a --- /dev/null +++ b/rpm/SPECS/rubygem-rdiscount.spec @@ -0,0 +1,42 @@ +#global gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null) +%global gemdir %(IFS=: R=($(gem env gempath)); echo ${R[${#R[@]}-1]}) +%define gem_name rdiscount +Name: rubygem-%{gem_name} +Version: 2.1.8 +Release: 1%{?dist} +Summary: Fast Implementation of Gruber's Markdown in C + +Group: Applications/Programming +License: BSD +URL: https://rubygems.org/gems/%{gem_name} +Source0: https://rubygems.org/downloads/%{gem_name}-%{version}.gem +BuildRoot: %(echo %{_topdir}/BUILDROOT/%{gem_name}-%{version}) +BuildRequires: gem > 1.9.2 +Requires: ruby > 1.9.2 + +%description +Fast Implementation of Gruber's Markdown in C + +%prep +%setup -q -c -T +gem install -V --local --force --install-dir ./%{gemdir} %{SOURCE0} +mv ./%{gemdir}/bin ./usr/local + +%build + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +mkdir -p ${RPM_BUILD_ROOT} +cp -a ./usr ${RPM_BUILD_ROOT}/usr + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%{gemdir} +/usr/local/bin/%{gem_name} + +%changelog +* Wed May 20 2015 Andrew Neff - 2.1.8 +- Initial Spec diff --git a/rpm/SPECS/rubygem-ronn.spec b/rpm/SPECS/rubygem-ronn.spec new file mode 100644 index 00000000..00d6eb69 --- /dev/null +++ b/rpm/SPECS/rubygem-ronn.spec @@ -0,0 +1,47 @@ +#global gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null) +%global gemdir %(IFS=: R=($(gem env gempath)); echo ${R[${#R[@]}-1]}) +%define gem_name ronn + +Name: rubygem-%{gem_name} +Version: 0.7.3 +Release: 1%{?dist} +Summary: Builds manuals + +Group: Applications/Programming +License: N/A +URL: https://rubygems.org/gems/%{gem_name} +Source0: https://rubygems.org/downloads/%{gem_name}-%{version}.gem +BuildRoot: %(echo %{_topdir}/BUILDROOT/%{gem_name}-%{version}) +BuildRequires: gem +Requires: ruby +Requires: rubygem-hpricot >= 0.8.2 +Requires: rubygem-mustache >= 0.7.0 +Requires: rubygem-rdiscount >= 1.5.8 +BuildArch: noarch + +%description +Builds Manuals + +%prep +%setup -q -c -T +gem install -V --local --force --install-dir ./%{gemdir} %{SOURCE0} +mv ./%{gemdir}/bin ./usr/local + +%build + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +mkdir -p ${RPM_BUILD_ROOT} +cp -a ./usr ${RPM_BUILD_ROOT}/usr + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%{gemdir} +/usr/local/bin/%{gem_name} + +%changelog +* Wed May 20 2015 Andrew Neff - 2.1.8 +- Initial Spec diff --git a/rpm/build_rpms.bsh b/rpm/build_rpms.bsh new file mode 100755 index 00000000..0d9bdcb6 --- /dev/null +++ b/rpm/build_rpms.bsh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash + +set -eu + +CURDIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd) +SPEC=${CURDIR}/SPECS/git-lfs.spec +VERSION=$(\grep "^Version:" ${SPEC} | \grep -Eo [0-9.]+) +RPMBUILD=(rpmbuild --define "_topdir ${CURDIR}") +LOG=${CURDIR}/build.log +SUDO=${SUDO=sudo} +export PATH=${PATH}:/usr/local/bin + +exec 6>&1 +exec 7>&2 + +exec > $LOG +exec 2>> $LOG + +set -vx + +echo "Downloading/checking for some essentials..." >&6 +$SUDO yum install -y make curl which rpm-build tar bison + +REDHAT_VERSION=($(head -n 1 /etc/redhat-release | \grep -Eo '[0-9]+')) +REDHAT_NAME=$(awk '{print $1}' /etc/redhat-release) + +mkdir -p ${CURDIR}/{BUILD,BUILDROOT,SOURCES,RPMS,SRPMS} + +if [ ! -e ${CURDIR}/SOURCES/v${VERSION}.tar.gz ]; then + echo "Downloading git-lfs..." >&6 + mkdir -p ${CURDIR}/SOURCES + pushd ${CURDIR}/SOURCES + curl -L -O https://github.com/github/git-lfs/archive/v${VERSION}.tar.gz + popd +fi + +if ! which go; then + echo "Installing go... one way or another" >&6 + if [[ ${REDHAT_VERSION[0]} == 5 ]]; then + $SUDO yum install -y curl.x86_64 glibc gcc + ${CURDIR}/golang_patch.bsh + "${RPMBUILD[@]}" -bb SPECS/golang.spec + $SUDO yum install -y --nogpgcheck RPMS/noarch/golang-1*.rpm RPMS/noarch/golang-pkg-bin-linux-amd64-1*.rpm RPMS/noarch/golang-src-1*.noarch.rpm RPMS/noarch/golang-pkg-linux-amd64-1*.noarch.rpm + else + $SUDO yum install -y epel-release + $SUDO yum install -y golang + fi +fi + +if which 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 [[ ${REDHAT_VERSION[0]} < 7 ]]; then + echo "Downloading ruby..." >&6 + + if ! rpm -q epel-release; then + if [[ ${REDHAT_VERSION[0]} == 5 ]]; then + pushd ${CURDIR} + $SUDO rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt + curl -L -O http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm + $SUDO yum install -y rpmforge-release-0.5.3-1.el5.rf.*.rpm + rm rpmforge-release-0.5.3-1.el5.rf.*.rpm + popd + else + $SUDO yum install epel-release #Part of centos 6+ + fi + 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..." >&6 + "${RPMBUILD[@]}" -bb SPECS/ruby.spec + echo "Installing ruby..." >&6 + $SUDO yum install -y --nogpgcheck RPMS/x86_64/ruby*.rpm + else + $SUDO yum install -y ruby ruby-devel + fi +fi + +if ! which ronn; then + echo "Downloading some ruby gems..." >&6 + pushd 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..." >&6 + "${RPMBUILD[@]}" -bb SPECS/rubygem-rdiscount.spec + "${RPMBUILD[@]}" -bb SPECS/rubygem-mustache.spec + "${RPMBUILD[@]}" -bb SPECS/rubygem-hpricot.spec + "${RPMBUILD[@]}" -bb SPECS/rubygem-ronn.spec + + echo "Installing ruby gems..." >&6 + $SUDO yum install -y --nogpgcheck $(ls RPMS/noarch/rubygem-*.rpm RPMS/x86_64/rubygem-*.rpm | grep -v debuginfo) +fi + +echo "Build git-lfs rpm..." >&6 +"${RPMBUILD[@]}" -bb SPECS/git-lfs.spec +"${RPMBUILD[@]}" -bs SPECS/git-lfs.spec + +echo "All Done!" >&6 diff --git a/rpm/clean.bsh b/rpm/clean.bsh new file mode 100755 index 00000000..1eddda19 --- /dev/null +++ b/rpm/clean.bsh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +set -eu + +CWD=$(cd $(dirname ${BASH_SOURCE[0]}); pwd) + +rm -rv ${CWD}/BUILD ${CWD}/BUILDROOT ${CWD}/RPMS ${CWD}/SRPMS ${CWD}/SOURCES || : + +rm ${CWD}/SPECS/golang.spec || : + +rm ${CWD}/build.log || : + diff --git a/rpm/golang_patch.bsh b/rpm/golang_patch.bsh new file mode 100755 index 00000000..224f39ca --- /dev/null +++ b/rpm/golang_patch.bsh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -eu + +cd $(dirname ${BASH_SOURCE[0]})/SOURCES + +#Get EPEL full list +curl -L -O https://dl.fedoraproject.org/pub/epel/fullfilelist +#Get latest golang src rpm +curl -L -O https://dl.fedoraproject.org/pub/epel/$(grep '6/SRPMS/golang-[0-9].*src.rpm' fullfilelist) +rpm2cpio *.src.rpm | cpio -diuv +#Patch the spec file to patch the build to work on CentOS 5 +sed -ri 's|(^%build)|\1\nsed -i '"'"'s:.*--build-id.*::'"'"' ./src/cmd/go/build.go|' *.spec +#Make SPEC CentOS 5 compliant +sed -ri 's|(^Name:.*)|\1\nGroup: Software|' *.spec +sed -ri 's|(^Name:.*)|\1\nBuildRoot: %(echo %{_topdir}/BUILDROOT/%{name}-%{version})|' *.spec +sed -ri 's|(^%package\s.*)|\1\nGroup: Software|' *.spec +sed -i 's|%ifarch %{ix86}|%if %_arch == i686|' *.spec +sed -i 's|%ifarch %{arm}|%if %_arch == armv6l|' *.spec +sed -i 's|%ifarch|%if %_arch ==|' *.spec +#The test WILL fail, so make the rpm not fail +sed -ri 's;(.*run.bash.*);\1|true;' *.spec +mv *.spec ../SPECS/ +