diff --git a/debian/README.source b/debian/README.source new file mode 100644 index 0000000000000000000000000000000000000000..7f785ec2960b8c250a28c20cc41fdc1ac6807772 --- /dev/null +++ b/debian/README.source @@ -0,0 +1,6 @@ +This package vendors jruby instead of using the Debian jruby package, because +it is currently very broken. Attemps at fixing it yielded mixed results. + +This isn't ideal, but it seems the only thing that currently requires jruby in +Debian is puppetserver. Vendoring jruby will also help us use a jruby version +that matches more closely with puppetserver's. diff --git a/debian/control b/debian/control index f0ffefa74bf576b00f689bf56f2baece0dd5c9a1..14e09ff13639bb4508f9c9d717507579dcff6995 100644 --- a/debian/control +++ b/debian/control @@ -14,7 +14,6 @@ Build-Depends: debhelper-compat (= 13), libprismatic-schema-clojure (>= 1.1.12), libslingshot-clojure, libyaml-snake-java, - jruby, libpuppetlabs-i18n-clojure (>= 0.9.0-2), libtrapperkeeper-clojure (>= 3.1.0) , libpuppetlabs-ring-middleware-clojure (>=1.3.0), @@ -23,6 +22,7 @@ Build-Depends: debhelper-compat (= 13), libdynapath-clojure <!nocheck>, libcomplete-clojure <!nocheck>, leiningen +# jruby, Standards-Version: 4.5.1 Vcs-Git: https://salsa.debian.org/clojure-team/jruby-utils-clojure.git Vcs-Browser: https://salsa.debian.org/clojure-team/jruby-utils-clojure @@ -40,9 +40,10 @@ Depends: ${java:Depends}, libprismatic-schema-clojure, libslingshot-clojure, libyaml-snake-java, - jruby, +# jruby, libpuppetlabs-i18n-clojure, libtrapperkeeper-clojure, libpuppetlabs-ring-middleware-clojure, +Conflicts: jruby Recommends: ${java:Recommends} Description: Create and interact with a pool of JRuby instances in Clojure diff --git a/debian/missing-sources/jruby-complete-9.2.14.0.jar b/debian/missing-sources/jruby-complete-9.2.14.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..4fb1f2c5d3706a2ed96d8c9b06415316cc4f6bc8 Binary files /dev/null and b/debian/missing-sources/jruby-complete-9.2.14.0.jar differ diff --git a/debian/missing-sources/jruby-complete-9.2.14.0.pom b/debian/missing-sources/jruby-complete-9.2.14.0.pom new file mode 100644 index 0000000000000000000000000000000000000000..9cbbcb3a3673a6846881bbc4a1bba26ff4dd1f26 --- /dev/null +++ b/debian/missing-sources/jruby-complete-9.2.14.0.pom @@ -0,0 +1,379 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.jruby</groupId> + <artifactId>jruby-artifacts</artifactId> + <version>9.2.14.0</version> + </parent> + <artifactId>jruby-complete</artifactId> + <packaging>bundle</packaging> + <name>JRuby Complete</name> + <properties> + <jruby.complete.home>${project.build.outputDirectory}/META-INF/jruby.home</jruby.complete.home> + <jruby.home>${basedir}/../..</jruby.home> + <main.basedir>${project.parent.parent.basedir}</main.basedir> + <polyglot.dump.pom>pom.xml</polyglot.dump.pom> + <polyglot.dump.readonly>true</polyglot.dump.readonly> + </properties> + <dependencies> + <dependency> + <groupId>org.jruby</groupId> + <artifactId>jruby-core</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + <exclusions> + <exclusion> + <artifactId>jnr-ffi</artifactId> + <groupId>com.github.jnr</groupId> + </exclusion> + <exclusion> + <artifactId>jitescript</artifactId> + <groupId>me.qmx.jitescript</groupId> + </exclusion> + <exclusion> + <artifactId>asm</artifactId> + <groupId>org.ow2.asm</groupId> + </exclusion> + <exclusion> + <artifactId>asm-commons</artifactId> + <groupId>org.ow2.asm</groupId> + </exclusion> + <exclusion> + <artifactId>asm-tree</artifactId> + <groupId>org.ow2.asm</groupId> + </exclusion> + <exclusion> + <artifactId>asm-analysis</artifactId> + <groupId>org.ow2.asm</groupId> + </exclusion> + <exclusion> + <artifactId>asm-util</artifactId> + <groupId>org.ow2.asm</groupId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.jruby</groupId> + <artifactId>jruby-stdlib</artifactId> + <version>${project.version}</version> + <scope>provided</scope> + </dependency> + </dependencies> + <pluginRepositories> + <pluginRepository> + <id>mavengems</id> + <url>mavengem:https://rubygems.org</url> + </pluginRepository> + </pluginRepositories> + <build> + <extensions> + <extension> + <groupId>org.torquebox.mojo</groupId> + <artifactId>mavengem-wagon</artifactId> + <version>1.0.3</version> + </extension> + </extensions> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + <configuration> + <archive> + <manifest> + <mainClass>org.jruby.Main</mainClass> + </manifest> + <manifestEntries> + <Automatic-Module-Name>org.jruby.complete</Automatic-Module-Name> + </manifestEntries> + </archive> + <instructions> + <Export-Package>org.jruby.*;version=${project.version}</Export-Package> + <Import-Package>!org.jruby.*, *;resolution:=optional</Import-Package> + <DynamicImport-Package>javax.*</DynamicImport-Package> + <Private-Package>*,.</Private-Package> + <Bundle-Name>JRuby ${project.version}</Bundle-Name> + <Bundle-Description>JRuby ${project.version} OSGi bundle</Bundle-Description> + <Bundle-SymbolicName>org.jruby.jruby</Bundle-SymbolicName> + <Embed-Dependency>*;type=jar;scope=provided;inline=true;artifactId=!jnr-ffi|me.qmx.jitescript:jitescript</Embed-Dependency> + <Embed-Transitive>true</Embed-Transitive> + </instructions> + </configuration> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>truezip-maven-plugin</artifactId> + <version>1.2</version> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>remove</goal> + </goals> + <configuration> + <filesets> + <fileset> + <directory>${build.directory}/${project.artifactId}-${project.version}.jar</directory> + <includes> + <include>module-info.class</include> + </includes> + </fileset> + </filesets> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-invoker-plugin</artifactId> + </plugin> + <plugin> + <artifactId>maven-source-plugin</artifactId> + <configuration> + <skipSource>true</skipSource> + </configuration> + </plugin> + <plugin> + <artifactId>maven-clean-plugin</artifactId> + <executions> + <execution> + <id>clean-extra-osgi-ITs</id> + <phase>clean</phase> + <goals> + <goal>clean</goal> + </goals> + <configuration> + <filesets> + <fileset> + <directory>${basedir}/src/it</directory> + <includes> + <include>osgi*/**</include> + </includes> + </fileset> + </filesets> + <failOnError>false</failOnError> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>net.ju-n.maven.plugins</groupId> + <artifactId>checksum-maven-plugin</artifactId> + </plugin> + <plugin> + <groupId>io.takari.polyglot</groupId> + <artifactId>polyglot-maven-plugin</artifactId> + <version>0.3.1</version> + <executions> + <execution> + <id>setup other osgi frameworks</id> + <phase>pre-integration-test</phase> + <goals> + <goal>execute</goal> + </goals> + <configuration> + <taskId>setup other osgi frameworks</taskId> + <nativePom>pom.rb</nativePom> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>io.takari.polyglot</groupId> + <artifactId>polyglot-ruby</artifactId> + <version>0.3.1</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </build> + <profiles> + <profile> + <id>sonatype-oss-release</id> + <build> + <plugins> + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy javadocs and sources from jruby-core</id> + <phase>package</phase> + <goals> + <goal>copy</goal> + </goals> + <configuration> + <artifactItems> + <artifactItem> + <groupId>${project.groupId}</groupId> + <artifactId>jruby-core</artifactId> + <version>${project.version}</version> + <classifier>sources</classifier> + <overWrite>false</overWrite> + <outputDirectory>${project.build.directory}</outputDirectory> + </artifactItem> + <artifactItem> + <groupId>${project.groupId}</groupId> + <artifactId>jruby-core</artifactId> + <version>${project.version}</version> + <classifier>javadoc</classifier> + <overWrite>false</overWrite> + <outputDirectory>${project.build.directory}</outputDirectory> + </artifactItem> + </artifactItems> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <id>attach-artifacts</id> + <phase>package</phase> + <goals> + <goal>attach-artifact</goal> + </goals> + <configuration> + <artifacts> + <artifact> + <file>${project.build.directory}/jruby-core-${project.version}-sources.jar</file> + <classifier>sources</classifier> + </artifact> + <artifact> + <file>${project.build.directory}/jruby-core-${project.version}-javadoc.jar</file> + <classifier>javadoc</classifier> + </artifact> + </artifacts> + </configuration> + </execution> + <execution> + <id>attach-checksums</id> + <phase>package</phase> + <goals> + <goal>attach-artifact</goal> + </goals> + <configuration> + <artifacts> + <artifact> + <file>${project.build.directory}/jruby-complete-${project.version}.jar.sha256</file> + <type>jar.sha256</type> + </artifact> + <artifact> + <file>${project.build.directory}/jruby-complete-${project.version}.jar.sha512</file> + <type>jar.sha512</type> + </artifact> + </artifacts> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>snapshots</id> + <build> + <plugins> + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy javadocs and sources from jruby-core</id> + <phase>package</phase> + <goals> + <goal>copy</goal> + </goals> + <configuration> + <artifactItems> + <artifactItem> + <groupId>${project.groupId}</groupId> + <artifactId>jruby-core</artifactId> + <version>${project.version}</version> + <classifier>sources</classifier> + <overWrite>false</overWrite> + <outputDirectory>${project.build.directory}</outputDirectory> + </artifactItem> + <artifactItem> + <groupId>${project.groupId}</groupId> + <artifactId>jruby-core</artifactId> + <version>${project.version}</version> + <classifier>javadoc</classifier> + <overWrite>false</overWrite> + <outputDirectory>${project.build.directory}</outputDirectory> + </artifactItem> + </artifactItems> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <id>attach-artifacts</id> + <phase>package</phase> + <goals> + <goal>attach-artifact</goal> + </goals> + <configuration> + <artifacts> + <artifact> + <file>${project.build.directory}/jruby-core-${project.version}-sources.jar</file> + <classifier>sources</classifier> + </artifact> + <artifact> + <file>${project.build.directory}/jruby-core-${project.version}-javadoc.jar</file> + <classifier>javadoc</classifier> + </artifact> + </artifacts> + </configuration> + </execution> + <execution> + <id>attach-checksums</id> + <phase>package</phase> + <goals> + <goal>attach-artifact</goal> + </goals> + <configuration> + <artifacts> + <artifact> + <file>${project.build.directory}/jruby-complete-${project.version}.jar.sha256</file> + <type>jar.sha256</type> + </artifact> + <artifact> + <file>${project.build.directory}/jruby-complete-${project.version}.jar.sha512</file> + <type>jar.sha512</type> + </artifact> + </artifacts> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + <profile> + <id>jdk8</id> + <activation> + <jdk>1.8</jdk> + </activation> + <build> + <plugins> + <plugin> + <artifactId>maven-invoker-plugin</artifactId> + <configuration> + <pomExcludes> + <pomExclude>osgi_many_bundles_with_embedded_gems_felix-3.2/pom.xml</pomExclude> + <pomExclude>${its.j2ee}</pomExclude> + <pomExclude>${its.osgi}</pomExclude> + </pomExcludes> + </configuration> + </plugin> + </plugins> + </build> + </profile> + </profiles> +</project> diff --git a/debian/patches/0002_Vendor_Jruby_Uberjar.patch b/debian/patches/0002_Vendor_Jruby_Uberjar.patch new file mode 100644 index 0000000000000000000000000000000000000000..8b4888170705b3f11b6a65fe1f9ac6ad2b51a199 --- /dev/null +++ b/debian/patches/0002_Vendor_Jruby_Uberjar.patch @@ -0,0 +1,76 @@ +We're vendoring jruby, but we don't want to vendor all the other jruby-utils +dependencies in our final uberjar. By using the :provided profile we're able to +trick "lein uberjar" into vendoring only the libs we want. +Index: jruby-utils-clojure/project.clj +=================================================================== +--- jruby-utils-clojure.orig/project.clj ++++ jruby-utils-clojure/project.clj +@@ -11,27 +11,6 @@ + :java-source-paths ["src/java"] + :test-paths ["test/unit" "test/integration"] + +- :dependencies [[org.clojure/clojure "1.10.x"] +- [org.clojure/java.jmx "debian"] +- [org.clojure/tools.logging "debian"] +- +- [clj-commons/fs "debian"] +- [prismatic/schema "debian"] +- [slingshot "debian"] +- +- [org.yaml/snakeyaml "1.x"] +- [com.fasterxml.jackson.core/jackson-core "2.x"] +- [com.fasterxml.jackson.dataformat/jackson-dataformat-smile "2.x"] +- [com.fasterxml.jackson.dataformat/jackson-dataformat-cbor "2.x"] +- +- [org.jruby/jruby-core "debian"] +- [org.jruby/jruby-stdlib "debian"] +- +- [puppetlabs/i18n "debian"] +- [puppetlabs/kitchensink "debian"] +- [puppetlabs/trapperkeeper "debian"] +- [puppetlabs/ring-middleware "debian"]] +- + :deploy-repositories [["releases" {:url "https://clojars.org/repo" + :username :env/clojars_jenkins_username + :password :env/clojars_jenkins_password +@@ -43,13 +22,35 @@ + ;; code that we have. + :classifiers [["test" :testutils]] + +- :profiles {:dev {:dependencies [[puppetlabs/kitchensink "debian" :classifier "test" :scope "test"] +- [puppetlabs/trapperkeeper "debian" :classifier "test" :scope "test"] +- [org.bouncycastle/bcpkix "debian"] +- [org.tcrawley/dynapath "debian"]] +- :jvm-opts ["-Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger" ++ :profiles {:dev {:jvm-opts ["-Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger" + "-Xms1G" + "-Xmx2G"]} ++ :provided {:dependencies [[org.clojure/clojure "1.10.x"] ++ [org.clojure/java.jmx "debian"] ++ [org.clojure/tools.logging "debian"] ++ ++ [clj-commons/fs "debian"] ++ [prismatic/schema "debian"] ++ [slingshot "debian"] ++ ++ [org.jruby/jruby-complete "debian"] ++ ++ [org.yaml/snakeyaml "1.x"] ++ [com.fasterxml.jackson.core/jackson-core "2.x"] ++ [com.fasterxml.jackson.dataformat/jackson-dataformat-smile "2.x"] ++ [com.fasterxml.jackson.dataformat/jackson-dataformat-cbor "2.x"] ++ ++ [puppetlabs/i18n "debian"] ++ [puppetlabs/kitchensink "debian"] ++ [puppetlabs/trapperkeeper "debian"] ++ [puppetlabs/ring-middleware "debian"] ++ ++ ; Deps for the testsuite ++ [puppetlabs/kitchensink "debian" :classifier "test" :scope "test"] ++ [puppetlabs/trapperkeeper "debian" :classifier "test" :scope "test"] ++ [org.bouncycastle/bcpkix "debian"] ++ [org.tcrawley/dynapath "debian"]]} ++ :uberjar {:dependencies [[org.jruby/jruby-complete "debian"]]} + :testutils {:source-paths ^:replace ["test/unit" "test/integration"]}} + + :plugins [[puppetlabs/i18n "debian" :hooks false :exclusions [[org.clojure/clojure] diff --git a/debian/patches/series b/debian/patches/series index f6005e41f63d636c2ca1c3023809ce10a3573043..ef6e94a6c40ddee7f9a4ec445a58612f97aaf505 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ 0001_Lein_Local.patch +0002_Vendor_Jruby_Uberjar.patch diff --git a/debian/rules b/debian/rules index 151ab23bf2874b95f12ea5c675a1288332ffb7ab..735a52dc45e1713cbd521500d6ce4292c367839e 100755 --- a/debian/rules +++ b/debian/rules @@ -11,13 +11,19 @@ NAME=jruby-utils dh $@ --with javahelper --with maven_repo_helper override_dh_auto_configure: - cd debian && ln -sf /usr/share/maven-repo . + cd debian && cp -LR /usr/share/maven-repo . + # Vendor jruby + mkdir -p debian/maven-repo/org/jruby/jruby-complete/debian/ + for ext in jar pom; do \ + cp debian/missing-sources/jruby-complete-9.2.14.0.jar \ + debian/maven-repo/org/jruby/jruby-complete/debian/jruby-complete-debian.$$ext ; \ + done override_dh_auto_build: lein pom debian/pom.xml - lein jar + lein uberjar # symlinks so we don't need a version in debian/*.poms - cd target && ln -sf $(NAME)-$(DEB_VERSION_UPSTREAM).jar $(NAME).jar + cd target && ln -sf $(NAME)-$(DEB_VERSION_UPSTREAM)-standalone.jar $(NAME).jar cd target/test && ln -sf $(NAME)-$(DEB_VERSION_UPSTREAM)-test.jar $(NAME)-test.jar override_dh_auto_test: diff --git a/debian/source/include-binaries b/debian/source/include-binaries new file mode 100644 index 0000000000000000000000000000000000000000..5097431dc3520105b5a9f25a93a575cdc4e50485 --- /dev/null +++ b/debian/source/include-binaries @@ -0,0 +1,2 @@ +debian/missing-sources/jruby-complete-9.2.14.0.jar +debian/missing-sources/jruby-complete-9.2.14.0.pom