Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JBDS-3982 first pass #393

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 6 additions & 0 deletions rpm/.gitignore
@@ -0,0 +1,6 @@
devstudio
devstudio_deps
rh-eclipse46.cfg
devstudio-1.0-1.fc24.src.rpm
devstudio.tar.xz
yum_repo/
161 changes: 161 additions & 0 deletions rpm/build.sh
@@ -0,0 +1,161 @@
#!/bin/bash -e

now=$(date +%s); (( now = now - 1230786000 ))

if [ ! $(which mock) ] ; then
echo "Mock is not installed!"
echo "Install with:"
echo "$ su -c 'dnf install mock'"
exit 2
fi

if [ ! $(which rpmbuild) ] ; then
echo "rpm-build is not installed!"
echo "Install with:"
echo "$ su -c 'install rpm-build redhat-rpm-config'"
exit 2
fi

if [ ! $(getent group | grep -e '^mock' | grep -e "$USER") ] ; then
echo "Your user is not configured to work with mock!"
echo "Configure with:"
echo "$ su -c '$(which usermod) -a -G mock $USER'"
exit 2
fi

if [[ ! -f /etc/yum.repos.d/rh-eclipse46.repo ]]; then
echo "Your system is not configured to resolve rh-eclipse46 packages!"
echo "Configure with:"
echo "$su -c 'cp rh-eclipse46.repo /etc/yum.repos.d/rh-eclipse46.repo'"
exit 2
fi

# dnf whatprovides /usr/lib*/eclipse/plugins/org.eclipse.equinox.launcher_*.jar
if [[ $(unzip -tq /usr/lib*/eclipse/plugins/org.eclipse.equinox.launcher_*.jar | egrep "cannot find or open") ]]; then
echo "Eclipse equinox launcher is not installed!"
echo "Install with:"
echo "$ su -c 'dnf install eclipse-platform'"
exit 2
fi

# Usage: p2extract ${dropletRepo} ${inputRepo1},${inputRepo2} ${featureID}
function p2extract () {
dropletRepo="${1}"
inputRepos="${2}"
IUID="${3}"
time java -jar /usr/lib*/eclipse/plugins/org.eclipse.equinox.launcher_*.jar \
-application org.eclipse.equinox.p2.director \
-clean -nosplash -consoleLog -flavor tooling \
-profile rh-eclipse-devstudio \
-profileProperties org.eclipse.update.install.features=true \
-destination ${mirror_folder} \
-bundlepool ${mirror_folder} \
-installIU "${IUID}" \
-metadataRepository "${inputRepos}" \
-artifactRepository "${inputRepos}" \
-vmargs -Declipse.p2.MD5Check=false
}

# Download features or other IUs from update sites
package_name=devstudio

mirror_folder=$(pwd)/${package_name}
deps_folder=$(pwd)/${package_name}_deps

# clean before building
if [[ $1 == "clean" ]]; then
rm -fr ${mirror_folder} ${deps_folder} ${package_name}*.src.rpm ${package_name}.tar.xz
fi
mkdir -p ${mirror_folder}
mkdir -p ${deps_folder}

source_p2_zips="https://devstudio.redhat.com/static/10.0/stable/updates/core/devstudio-10.0.0.GA-updatesite-core.zip
https://devstudio.redhat.com/static/10.0/stable/updates/core/devstudio-10.0.0.GA-target-platform.zip
https://devstudio.redhat.com/static/10.0/stable/updates/core/devstudio-10.0.0.GA-target-platform-central.zip
https://devstudio.redhat.com/static/10.0/stable/updates/central/devstudio-10.0.0.GA-updatesite-central.zip"
source_p2_sites=""
for z in ${source_p2_zips}; do
file=${z##*/}
if [[ ! -f ${deps_folder}/${file} ]] || [[ $(unzip -tq ${deps_folder}/${file} | egrep "cannot find") ]]; then
echo "[INFO] Fetch $z ..."
time curl $z -# > ${deps_folder}/${file} &
fi
done
wait
# when done, should have 1.4G in deps_folder
for z in ${source_p2_zips}; do
file=${z##*/}
source_p2_sites="${source_p2_sites},jar:file://${deps_folder}/${file}!/"
done
source_p2_sites=${source_p2_sites:1}

echo ""; echo -n "[INFO] Using p2 source sites: "; for s in ${source_p2_sites//,/, }; do echo $s; done; echo ""

# TODO: remove features that are installable from upstream eclipse-* rpms
featurelist=""; for f in $(cat ${package_name}.featurelist.txt | sed -e "s/^#.\+//g"); do featurelist="${featurelist},${f}.feature.group"; done; featurelist=${featurelist:1}
echo ""; echo -n "[INFO] Install these features ..."; for f in ${featurelist//,/, }; do echo $f; done; echo ""
p2extract ${mirror_folder} ${source_p2_sites} ${featurelist}
# when done, should have 660M in mirror_folder (takes about 1 min when using zipped update sites)

echo ""; echo "[INFO] Build devstudio.tar.xz ..."
time tar caf ${package_name}.tar.xz ${package_name}/
# when done (~5mins), 450M devstudio-1.0-1.fc24.src.rpm and devstudio.tar.xz created

echo ""; echo "[INFO] Build rpm using ${package_name}.spec ..."
rm -f ${package_name}*.src.rpm
time rpmbuild \
--define "_sourcedir $(pwd)" \
--define "_srcrpmdir $(pwd)" \
--define "_builddir $(pwd)" \
--define "_rpmdir $(pwd)" \
--define "_specdir $(pwd)" \
-bs ${package_name}.spec

# Run the build in a mock chroot containing RHEL 7 and everything needed
# to build SCL packages
mock_cfg=rh-eclipse46
cat <<EOF >${mock_cfg}.cfg
config_opts['chroothome'] = '/builddir'
config_opts['use_host_resolv'] = False
config_opts['basedir'] = '/var/lib/mock'
config_opts['rpmbuild_timeout'] = 86400
config_opts['yum.conf'] = '[main]\ncachedir=/var/cache/yum\ndebuglevel=2\n\nlogfile=/var/log/yum.log\nreposdir=/dev/null\nretries=20\nobsoletes=1\ngpgcheck=0\nassumeyes=1\nkeepcache=1\ninstall_weak_deps=0\nstrict=0\n\n[build]\nname=build\nbaseurl=http://download.devel.redhat.com/brewroot/repos/rhscl-2.3-rh-eclipse46-rhel-7-build/latest/x86_64\nenabled=1\ngpgcheck=0'
config_opts['chroot_setup_cmd'] = 'groupinstall build'
config_opts['target_arch'] = 'x86_64'
config_opts['root'] = '${mock_cfg}'
config_opts['plugin_conf']['root_cache_enable'] = True
config_opts['plugin_conf']['yum_cache_enable'] = True
config_opts['plugin_conf']['ccache_enable'] = False
config_opts['macros']['%_host'] = 'x86_64-koji-linux-gnu'
config_opts['macros']['%_host_cpu'] = 'x86_64'
config_opts['macros']['%vendor'] = 'Koji'
config_opts['macros']['%distribution'] = 'el7'
config_opts['macros']['%_topdir'] = '/builddir/build'
config_opts['macros']['%_rpmfilename'] = '%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm'
config_opts['macros']['%packager'] = 'Koji'
EOF
time mock -r $(pwd)/${mock_cfg}.cfg --no-clean --rebuild ${package_name}*.src.rpm

# Generate yum repository
yum_repo=$(pwd)/yum_repo
rm -rf ${yum_repo}
mkdir ${yum_repo}
mv /var/lib/mock/$mock_cfg/result/*.rpm ${yum_repo}
rm -f ${yum_repo}/*.src.rpm
time createrepo_c ${yum_repo}
echo "Yum repository generated in: ${yum_repo}"

# cleanup temp artifacts
rm -f ${package_name}*.src.rpm ${package_name}.tar.xz ${mock_cfg}.cfg

sec=$(date +%s); (( sec = sec - 1230786000 ))
(( elapsed = sec - now ))

if [[ elapsed -gt 60 ]]; then
(( mins = elapsed / 60 ))
(( sec = mins * 60 ))
(( sec = elapsed - sec ))
echo "[INFO] Total time: ${mins}:${sec} min"
else
echo "[INFO] Total time: ${elapsed} sec"
fi
215 changes: 215 additions & 0 deletions rpm/devstudio.featurelist.txt
@@ -0,0 +1,215 @@
# list of features to include in rh-eclipse46-devstudio rpm
# lines starting with # will be ignored

com.jboss.devstudio.core.capabilities.feature
com.jboss.devstudio.core.feature
org.eclipse.aether.connector.basic.feature
org.eclipse.aether.feature
org.eclipse.aether.maven.feature
org.eclipse.aether.transport.file.feature
org.eclipse.aether.transport.http.feature
org.eclipse.cvs
org.eclipse.datatools.common.doc.user
org.eclipse.datatools.connectivity.doc.user
org.eclipse.datatools.connectivity.feature
org.eclipse.datatools.connectivity.oda.designer.core.feature
org.eclipse.datatools.connectivity.oda.designer.feature
org.eclipse.datatools.connectivity.oda.feature
org.eclipse.datatools.doc.user
org.eclipse.datatools.enablement.apache.derby.feature
org.eclipse.datatools.enablement.feature
org.eclipse.datatools.enablement.hsqldb.feature
org.eclipse.datatools.enablement.ibm.feature
org.eclipse.datatools.enablement.ingres.feature
org.eclipse.datatools.enablement.jdbc.feature
org.eclipse.datatools.enablement.jdt.feature
org.eclipse.datatools.enablement.msft.feature
org.eclipse.datatools.enablement.mysql.feature
org.eclipse.datatools.enablement.oda.designer.feature
org.eclipse.datatools.enablement.oda.feature
org.eclipse.datatools.enablement.oracle.feature
org.eclipse.datatools.enablement.postgresql.feature
org.eclipse.datatools.enablement.sap.feature
org.eclipse.datatools.enablement.sqlite.feature
org.eclipse.datatools.enablement.sybase.feature
org.eclipse.datatools.intro
org.eclipse.datatools.modelbase.feature
org.eclipse.datatools.sqldevtools.data.feature
org.eclipse.datatools.sqldevtools.ddl.feature
org.eclipse.datatools.sqldevtools.ddlgen.feature
org.eclipse.datatools.sqldevtools.feature
org.eclipse.datatools.sqldevtools.parsers.feature
org.eclipse.datatools.sqldevtools.results.feature
org.eclipse.datatools.sqldevtools.schemaobjecteditor.feature
org.eclipse.datatools.sqldevtools.sqlbuilder.feature
org.eclipse.datatools.sqltools.doc.user
org.eclipse.draw2d
org.eclipse.e4.rcp
org.eclipse.ecf.core.feature
org.eclipse.ecf.core.ssl.feature
org.eclipse.ecf.filetransfer.feature
org.eclipse.ecf.filetransfer.httpclient4.feature
org.eclipse.ecf.filetransfer.httpclient4.ssl.feature
org.eclipse.ecf.filetransfer.ssl.feature
#org.eclipse.egit
org.eclipse.emf
org.eclipse.emf.codegen
org.eclipse.emf.codegen.ecore
org.eclipse.emf.codegen.ecore.ui
org.eclipse.emf.codegen.ui
org.eclipse.emf.common
org.eclipse.emf.common.ui
org.eclipse.emf.converter
org.eclipse.emf.databinding
org.eclipse.emf.databinding.edit
org.eclipse.emf.ecore
org.eclipse.emf.ecore.edit
org.eclipse.emf.ecore.editor
org.eclipse.emf.edit
org.eclipse.emf.edit.ui
org.eclipse.emf.mapping
org.eclipse.emf.mapping.ecore
org.eclipse.emf.mapping.ecore.editor
org.eclipse.emf.mapping.ui
org.eclipse.epp.logging.aeri.feature
org.eclipse.equinox.p2.core.feature
org.eclipse.equinox.p2.extras.feature
org.eclipse.equinox.p2.rcp.feature
org.eclipse.equinox.p2.user.ui
#org.eclipse.gef
org.eclipse.help
#org.eclipse.jdt
#org.eclipse.jgit
org.eclipse.jpt.common.feature
org.eclipse.jpt.jaxb.feature
org.eclipse.jpt.jpa.feature
org.eclipse.jsf.feature
org.eclipse.jst.common.fproj.enablement.jdt
org.eclipse.jst.enterprise_core.feature
org.eclipse.jst.enterprise_ui.feature
org.eclipse.jst.enterprise_userdoc.feature
org.eclipse.jst.server_adapters.feature
org.eclipse.jst.server_core.feature
org.eclipse.jst.server_ui.feature
org.eclipse.jst.server_userdoc.feature
org.eclipse.jst.web_core.feature
org.eclipse.jst.web_ui.feature
org.eclipse.jst.web_userdoc.feature
org.eclipse.jst.webpageeditor.feature
org.eclipse.jst.ws.axis2tools.feature
org.eclipse.jst.ws.cxf.feature
org.eclipse.jst.ws.jaxws_userdoc.feature
org.eclipse.jst.ws.jaxws.dom.feature
org.eclipse.jst.ws.jaxws.feature
#org.eclipse.linuxtools.docker.feature
org.eclipse.m2e.feature
org.eclipse.m2e.wtp.feature
org.eclipse.m2e.wtp.jaxrs.feature
org.eclipse.m2e.wtp.jpa.feature
org.eclipse.m2e.wtp.jsf.feature
#org.eclipse.mylyn_feature
org.eclipse.mylyn.commons
org.eclipse.mylyn.commons.identity
org.eclipse.mylyn.commons.notifications
org.eclipse.mylyn.commons.repositories
org.eclipse.mylyn.discovery
org.eclipse.mylyn.monitor
#org.eclipse.mylyn.wikitext_feature
#org.eclipse.pde
#org.eclipse.platform
org.eclipse.rcp
org.eclipse.recommenders.rcp.feature
org.eclipse.recommenders.snipmatch.rcp.feature
org.eclipse.sapphire
org.eclipse.sapphire.java
org.eclipse.sapphire.java.jdt
org.eclipse.sapphire.modeling.xml
org.eclipse.sapphire.osgi
org.eclipse.sapphire.platform
org.eclipse.sapphire.ui
org.eclipse.tm.terminal.connector.local.feature
org.eclipse.tm.terminal.connector.serial.feature
org.eclipse.tm.terminal.connector.ssh.feature
org.eclipse.tm.terminal.connector.telnet.feature
org.eclipse.tm.terminal.control.feature
org.eclipse.wst.common_core.feature
org.eclipse.wst.common_ui.feature
org.eclipse.wst.common.fproj
org.eclipse.wst.jsdt.chromium.debug.feature
org.eclipse.wst.jsdt.feature
org.eclipse.wst.jsdt.nodejs.feature
org.eclipse.wst.json_core.feature
org.eclipse.wst.json_ui.feature
org.eclipse.wst.server_adapters.feature
org.eclipse.wst.server_core.feature
org.eclipse.wst.server_ui.feature
org.eclipse.wst.server_userdoc.feature
org.eclipse.wst.web_core.feature
org.eclipse.wst.web_ui.feature
org.eclipse.wst.web_userdoc.feature
org.eclipse.wst.ws_core.feature
org.eclipse.wst.ws_ui.feature
org.eclipse.wst.ws_userdoc.feature
org.eclipse.wst.ws_wsdl15.feature
org.eclipse.wst.xml_core.feature
org.eclipse.wst.xml_ui.feature
org.eclipse.wst.xml_userdoc.feature
org.eclipse.wst.xml.xpath2.processor.feature
org.eclipse.wst.xsl.feature
org.hibernate.eclipse.feature
org.jboss.ide.eclipse.archives.feature
org.jboss.ide.eclipse.as.archives.integration.feature
org.jboss.ide.eclipse.as.feature
org.jboss.ide.eclipse.as.jmx.integration.feature
org.jboss.ide.eclipse.as.server.rse.integration.feature
org.jboss.ide.eclipse.as.serverAdapter.wtp.feature
org.jboss.ide.eclipse.freemarker.feature
org.jboss.tools.archives.scanner.feature
org.jboss.tools.batch.feature
org.jboss.tools.browsersim.feature
org.jboss.tools.cdi.deltaspike.feature
org.jboss.tools.cdi.feature
org.jboss.tools.central.easymport.feature
org.jboss.tools.central.feature
org.jboss.tools.common.core.feature
org.jboss.tools.common.feature
org.jboss.tools.common.jdt.feature
org.jboss.tools.common.text.ext.feature
org.jboss.tools.common.ui.feature
org.jboss.tools.common.verification.feature
org.jboss.tools.forge.feature
org.jboss.tools.forge.m2e.feature
org.jboss.tools.foundation.feature
org.jboss.tools.foundation.security.linux.feature
org.jboss.tools.jmx.feature
org.jboss.tools.jsf.feature
org.jboss.tools.jst.feature
org.jboss.tools.jst.jsdt.feature
org.jboss.tools.livereload.feature
org.jboss.tools.m2e.jdt.feature
org.jboss.tools.maven.apt.feature
org.jboss.tools.maven.cdi.feature
org.jboss.tools.maven.feature
org.jboss.tools.maven.hibernate.feature
org.jboss.tools.maven.jdt.feature
org.jboss.tools.maven.project.examples.feature
org.jboss.tools.maven.sourcelookup.feature
org.jboss.tools.openshift.cdk.feature
org.jboss.tools.openshift.egit.integration.feature
org.jboss.tools.openshift.express.feature
org.jboss.tools.openshift.feature
org.jboss.tools.project.examples.feature
org.jboss.tools.richfaces.feature
org.jboss.tools.runtime.core.feature
org.jboss.tools.stacks.core.feature
org.jboss.tools.usage.feature
org.jboss.tools.vpe.feature
org.jboss.tools.vpe.preview.feature
org.jboss.tools.websockets.feature
org.jboss.tools.ws.feature
org.jboss.tools.ws.jaxrs.feature
org.jboss.tools.wtp.runtimes.tomcat.feature
org.sonatype.m2e.buildhelper.feature
org.sonatype.m2e.egit.feature
org.sonatype.m2e.mavenarchiver.feature
org.testng.eclipse