I'm ok with it, just probably thought in lazy mode ;)

*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*



2013/3/11 Thiago Veronezi <[email protected]>

> Hi Romain,
>
> I've thought about that too but I am not sure the debian package points to
> the same version of the tomcat that we use. I will base the installer on
> the existing one, but I think it is safer if we have control on the tomcat
> version we are using. Besides that, I would like to hook this logic into
> the assembler so we can generate the ".zip", ".tar.gz" and ".deb"
> distributions at the same time. I run a tool that verifies if the package
> follow the standards ('sudo apt-get install lintian'). Once it runs clean,
> we should be ok. wdyt?
>
> []s,
> Thiago.
>
>
> On Mar 11, 2013 9:11 AM, "Romain Manni-Bucau" <[email protected]>
> wrote:
>
> > Hi,
> >
> > Thiago, do you know where the tomcat package is done?
> >
> > maybe that's easier to simply enrich the config and libs as we do to
> > package tomee.
> >
> > *Romain Manni-Bucau*
> > *Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
> > *Blog: **http://rmannibucau.wordpress.com/*<
> > http://rmannibucau.wordpress.com/>
> > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
> > *Github: https://github.com/rmannibucau*
> >
> >
> >
> > ---------- Forwarded message ----------
> > From: <[email protected]>
> > Date: 2013/3/11
> > Subject: svn commit: r1455127 - in /tomee/sandbox/tomee-deb: ./ src/
> > src/main/ src/main/groovy/ src/main/groovy/org/
> src/main/groovy/org/apache/
> > src/main/groovy/org/apache/tomee/ src/main/groovy/org/apache/tomee/deb/
> > src/test/ src/test/groovy/ src/test/groovy/o...
> > To: [email protected]
> >
> >
> > Author: tveronezi
> > Date: Mon Mar 11 13:07:15 2013
> > New Revision: 1455127
> >
> > URL: http://svn.apache.org/r1455127
> > Log:
> > https://issues.apache.org/jira/browse/TOMEE-245
> > -Creating debian package for tomee plus. We still need to properly split
> > the directories in order to follow the linux directory standards (
> > http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)
> >
> > Added:
> >     tomee/sandbox/tomee-deb/pom.xml
> >     tomee/sandbox/tomee-deb/src/
> >     tomee/sandbox/tomee-deb/src/main/
> >     tomee/sandbox/tomee-deb/src/main/groovy/
> >     tomee/sandbox/tomee-deb/src/main/groovy/org/
> >     tomee/sandbox/tomee-deb/src/main/groovy/org/apache/
> >     tomee/sandbox/tomee-deb/src/main/groovy/org/apache/tomee/
> >     tomee/sandbox/tomee-deb/src/main/groovy/org/apache/tomee/deb/
> >
> >
> >
> tomee/sandbox/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy
> >     tomee/sandbox/tomee-deb/src/test/
> >     tomee/sandbox/tomee-deb/src/test/groovy/
> >     tomee/sandbox/tomee-deb/src/test/groovy/org/
> >     tomee/sandbox/tomee-deb/src/test/groovy/org/apache/
> >     tomee/sandbox/tomee-deb/src/test/groovy/org/apache/tomee/
> >     tomee/sandbox/tomee-deb/src/test/groovy/org/apache/tomee/deb/
> >
> >
> >
> tomee/sandbox/tomee-deb/src/test/groovy/org/apache/tomee/deb/TestPlaceholder.groovy
> >
> > Added: tomee/sandbox/tomee-deb/pom.xml
> > URL:
> >
> >
> http://svn.apache.org/viewvc/tomee/sandbox/tomee-deb/pom.xml?rev=1455127&view=auto
> >
> >
> ==============================================================================
> > --- tomee/sandbox/tomee-deb/pom.xml (added)
> > +++ tomee/sandbox/tomee-deb/pom.xml Mon Mar 11 13:07:15 2013
> > @@ -0,0 +1,128 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > +   Licensed under the Apache License, Version 2.0 (the "License");
> > +   you may not use this file except in compliance with the License.
> > +   You may obtain a copy of the License at
> > +
> > +       http://www.apache.org/licenses/LICENSE-2.0
> > +
> > +   Unless required by applicable law or agreed to in writing, software
> > +   distributed under the License is distributed on an "AS IS" BASIS,
> > +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > +   See the License for the specific language governing permissions and
> > +   limitations under the License.
> > +-->
> > +<project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="
> > http://www.w3.org/2001/XMLSchema-instance";
> > +         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> > http://maven.apache.org/xsd/maven-4.0.0.xsd";>
> > +    <modelVersion>4.0.0</modelVersion>
> > +
> > +    <groupId>org.apache.tomee</groupId>
> > +    <artifactId>tomee-deb</artifactId>
> > +    <version>1.0-SNAPSHOT</version>
> > +    <packaging>jar</packaging>
> > +    <name>tomee-deb</name>
> > +    <properties>
> > +
>  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> > +        <tomee.version>1.6.0-SNAPSHOT</tomee.version>
> > +        <openejb.version>4.6.0-SNAPSHOT</openejb.version>
> > +
> > +        <commons.compress>1.5-SNAPSHOT</commons.compress>
> > +        <commons.io>2.5-SNAPSHOT</commons.io>
> > +        <commons.codec>1.8-SNAPSHOT</commons.codec>
> > +
> > +    </properties>
> > +    <repositories>
> > +        <repository>
> > +            <id>apache.snapshots</id>
> > +            <url>http://repository.apache.org/snapshots/</url>
> > +            <releases>
> > +                <updatePolicy>daily</updatePolicy>
> > +            </releases>
> > +            <snapshots>
> > +                <updatePolicy>daily</updatePolicy>
> > +            </snapshots>
> > +        </repository>
> > +    </repositories>
> > +    <dependencies>
> > +        <dependency>
> > +            <groupId>junit</groupId>
> > +            <artifactId>junit</artifactId>
> > +            <version>4.10</version>
> > +            <scope>test</scope>
> > +        </dependency>
> > +        <dependency>
> > +            <groupId>org.apache.commons</groupId>
> > +            <artifactId>commons-compress</artifactId>
> > +            <version>${commons.compress}</version>
> > +        </dependency>
> > +        <dependency>
> > +            <groupId>commons-io</groupId>
> > +            <artifactId>commons-io</artifactId>
> > +            <version>${commons.io}</version>
> > +        </dependency>
> > +        <dependency>
> > +            <groupId>commons-codec</groupId>
> > +            <artifactId>commons-codec</artifactId>
> > +            <version>${commons.codec}</version>
> > +        </dependency>
> > +    </dependencies>
> > +    <build>
> > +        <plugins>
> > +            <plugin>
> > +                <groupId>org.codehaus.gmaven</groupId>
> > +                <artifactId>gmaven-plugin</artifactId>
> > +                <version>1.4</version>
> > +                <configuration>
> > +                    <scriptpath>
> > +
> >  <element>${project.basedir}/src/main/groovy</element>
> > +                    </scriptpath>
> > +                </configuration>
> > +                <executions>
> > +                    <execution>
> > +                        <id>build-deb-execute-plus-profile</id>
> > +                        <phase>install</phase>
> > +                        <goals>
> > +                            <goal>execute</goal>
> > +                        </goals>
> > +                        <configuration>
> > +                            <source>new
> > org.apache.tomee.deb.PackageBuilder(this).execute()</source>
> > +                            <properties>
> > +
> >  <targetDir>${project.basedir}/target</targetDir>
> > +
> >  <tomeeVersion>${tomee.version}</tomeeVersion>
> > +                            </properties>
> > +                        </configuration>
> > +                    </execution>
> > +                </executions>
> > +            </plugin>
> > +            <plugin>
> > +                <groupId>org.apache.maven.plugins</groupId>
> > +                <artifactId>maven-dependency-plugin</artifactId>
> > +                <version>2.6</version>
> > +                <executions>
> > +                    <execution>
> > +                        <id>copy</id>
> > +                        <phase>package</phase>
> > +                        <goals>
> > +                            <goal>copy</goal>
> > +                        </goals>
> > +                        <configuration>
> > +                            <artifactItems>
> > +                                <artifactItem>
> > +
>  <groupId>org.apache.openejb</groupId>
> > +
>  <artifactId>apache-tomee</artifactId>
> > +                                    <version>${tomee.version}</version>
> > +                                    <classifier>plus</classifier>
> > +                                    <type>tar.gz</type>
> > +                                    <overWrite>true</overWrite>
> > +
> >  <outputDirectory>${project.basedir}/target/</outputDirectory>
> > +
> >  <destFileName>plus.tar.gz</destFileName>
> > +                                </artifactItem>
> > +                            </artifactItems>
> > +                            <!-- other configurations here -->
> > +                        </configuration>
> > +                    </execution>
> > +                </executions>
> > +            </plugin>
> > +        </plugins>
> > +    </build>
> > +</project>
> >
> > Added:
> >
> >
> tomee/sandbox/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy
> > URL:
> >
> >
> http://svn.apache.org/viewvc/tomee/sandbox/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy?rev=1455127&view=auto
> >
> >
> ==============================================================================
> > ---
> >
> >
> tomee/sandbox/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy
> > (added)
> > +++
> >
> >
> tomee/sandbox/tomee-deb/src/main/groovy/org/apache/tomee/deb/PackageBuilder.groovy
> > Mon Mar 11 13:07:15 2013
> > @@ -0,0 +1,277 @@
> > +/**
> > + *
> > + * Licensed to the Apache Software Foundation (ASF) under one or more
> > + * contributor license agreements.  See the NOTICE file distributed with
> > + * this work for additional information regarding copyright ownership.
> > + * The ASF licenses this file to You under the Apache License, Version
> 2.0
> > + * (the "License"); you may not use this file except in compliance with
> > + * the License.  You may obtain a copy of the License at
> > + *
> > + *     http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + *  Unless required by applicable law or agreed to in writing, software
> > + *  distributed under the License is distributed on an "AS IS" BASIS,
> > + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > + *  See the License for the specific language governing permissions and
> > + *  limitations under the License.
> > + */
> > +
> > +package org.apache.tomee.deb
> > +
> > +import org.apache.commons.codec.digest.DigestUtils
> > +import org.apache.commons.compress.archivers.ar.ArArchiveEntry
> > +import org.apache.commons.compress.archivers.ar.ArArchiveOutputStream
> > +import org.apache.commons.compress.archivers.tar.TarArchiveEntry
> > +import org.apache.commons.compress.archivers.tar.TarArchiveInputStream
> > +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream
> > +import
> > org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream
> > +
> > +import java.util.zip.GZIPInputStream
> > +
> > +class PackageBuilder {
> > +    String targetDir
> > +    String tomeeVersion
> > +
> > +    private File untar(String fileName) {
> > +        File parent = new File(this.targetDir, 'output')
> > +        File outputDir = new File(parent, fileName)
> > +        outputDir.mkdirs()
> > +
> > +        File tar = new File(parent, fileName + '.tar')
> > +        TarArchiveInputStream input = new TarArchiveInputStream(new
> > FileInputStream(tar))
> > +        TarArchiveEntry entry = null
> > +
> > +        while ((entry = (TarArchiveEntry) input.getNextEntry()) !=
> null) {
> > +            if (entry.isDirectory()) {
> > +                new File(outputDir, entry.getName()).mkdirs()
> > +
> > +            } else {
> > +                byte[] content = new byte[entry.getSize()]
> > +                input.read(content)
> > +                OutputStream output = new BufferedOutputStream(new
> > FileOutputStream(new File(outputDir, entry.getName())))
> > +                output.write(content)
> > +                output.close()
> > +            }
> > +        }
> > +        input.close()
> > +        tar.delete()
> > +        return outputDir.listFiles()[0]
> > +    }
> > +
> > +    private def delete = { File file ->
> > +        file.eachDir(delete)
> > +        file.eachFile {
> > +            it.delete()
> > +        }
> > +        file.delete()
> > +    } as Object
> > +
> > +    private def tarRoot(TarArchiveOutputStream output, String...
> pathList)
> > {
> > +        StringBuilder builder = new StringBuilder()
> > +        pathList.each {
> > +            builder.append(it)
> > +            builder.append('/')
> > +
> > +            String path = builder.toString()
> > +            TarArchiveEntry entry = new TarArchiveEntry(path)
> > +            entry.userName = 'root'
> > +            entry.groupName = 'root'
> > +            entry.setModTime(System.currentTimeMillis())
> > +            output.putArchiveEntry(entry)
> > +            output.closeArchiveEntry()
> > +        }
> > +    }
> > +
> > +    private def tarItem = { TarArchiveOutputStream output, File item,
> > Integer startIndex, def dataholder ->
> > +        String subPath =
> > item.path.substring(startIndex).replaceAll("\\\\", "/");
> > +        if (item.isDirectory()) {
> > +            subPath = subPath + '/'
> > +        }
> > +
> > +        String path = './usr/share/tomee' + subPath
> > +        TarArchiveEntry entry = new TarArchiveEntry(path, true)
> > +        entry.userName = 'root'
> > +        entry.groupName = 'root'
> > +        entry.setModTime(System.currentTimeMillis())
> > +        if (item.isFile()) {
> > +            dataholder.checksum.append(getCheckSumLine(path, item))
> > +            if (path.endsWith('.sh') || path.endsWith('.sh.original')) {
> > +                entry.mode = 754
> > +            }
> > +
> > +            long size = item.length()
> > +            dataholder.size = dataholder.size + size
> > +            entry.size = size
> > +            output.putArchiveEntry(entry)
> > +            output << item.newInputStream()
> > +        } else {
> > +            output.putArchiveEntry(entry)
> > +        }
> > +
> > +        output.closeArchiveEntry()
> > +
> > +        if (item.isDirectory()) {
> > +            File[] children = item.listFiles()
> > +            children.each {
> > +                tarItem(output, it, startIndex, dataholder)
> > +            }
> > +        }
> > +    } as Object
> > +
> > +    private String getCheckSumLine(String name, File file) throws
> > IOException {
> > +        FileInputStream fis = new FileInputStream(file)
> > +        String md5 = DigestUtils.md5Hex(fis)
> > +        fis.close()
> > +        return "${md5} ${name}\n"
> > +    }
> > +
> > +    private def tar(File exploded) {
> > +        File tar = new File(exploded.parent, 'data.tar')
> > +        TarArchiveOutputStream output = new TarArchiveOutputStream(new
> > FileOutputStream(tar))
> > +        output.longFileMode = TarArchiveOutputStream.LONGFILE_GNU
> > +        File[] items = exploded.listFiles()
> > +        Integer startIndex = exploded.path.length()
> > +        def dataholder = [
> > +                size: 0l,
> > +                checksum: new StringBuilder()
> > +        ]
> > +
> > +        tarRoot(output, '.', 'usr', 'share', 'tomee')
> > +        items.each {
> > +            tarItem(output, it, startIndex, dataholder)
> > +        }
> > +        output.close()
> > +        return [
> > +                tar: tar,
> > +                checksum: dataholder.checksum.toString(),
> > +                size: dataholder.size
> > +        ]
> > +    }
> > +
> > +    private void addTextEntry(TarArchiveOutputStream output, String
> > entryName, String text) {
> > +        TarArchiveEntry entry = new TarArchiveEntry(entryName)
> > +        entry.userName = 'root'
> > +        entry.setSize(text.getBytes().length)
> > +        output.putArchiveEntry(entry)
> > +        output.write(text.getBytes())
> > +        output.closeArchiveEntry()
> > +    }
> > +
> > +    private void addControlEntry(TarArchiveOutputStream output, long
> > installedSize) {
> > +        long inMB = installedSize / 1024
> > +        String text = """Package: tomee
> > +Version: ${tomeeVersion}
> > +Section: admin
> > +Priority: optional
> > +Architecture: i386
> > +Depends:
> > +Suggests:
> > +Conflicts:
> > +Replaces:
> > +Installed-Size: ${inMB}
> > +Maintainer: devlist <[email protected]>
> > +Description: Apache TomEE
> > + Apache TomEE, pronounced \"Tommy\", is an all-Apache
> > + Java EE 6 Web Profile certified stack where Tomcat is top
> > + dog. Apache TomEE is assembled from a vanilla Apache Tomcat
> > + zip file. We start with Tomcat, add our jars and zip up the
> > + rest. The result is Tomcat with added EE features - TomEE.
> > +"""
> > +        addTextEntry(output, 'control', text)
> > +    }
> > +
> > +    private void addChecksum(TarArchiveOutputStream output, String
> > checksum) {
> > +        addTextEntry(output, 'md5sums', checksum)
> > +    }
> > +
> > +
> > +    private File createControlTar(File exploded, def data) {
> > +        File tar = new File(exploded.parent, 'control.tar')
> > +        TarArchiveOutputStream output = new TarArchiveOutputStream(new
> > FileOutputStream(tar))
> > +        output.longFileMode = TarArchiveOutputStream.LONGFILE_POSIX
> > +
> > +        addControlEntry(output, (long) data.size)
> > +        addChecksum(output, (String) data.checksum)
> > +
> > +        output.close()
> > +        return tar
> > +    }
> > +
> > +    private def unzip(String fileName) {
> > +        File outputDir = new File(this.targetDir, 'output')
> > +        outputDir.mkdirs()
> > +
> > +        File gz = new File(this.targetDir, fileName + '.tar.gz')
> > +
> > +        InputStream input = new GZIPInputStream(new FileInputStream(gz))
> > +        OutputStream output = new FileOutputStream(new File(outputDir,
> > fileName + '.tar'))
> > +        output << input
> > +        output.close()
> > +        input.close()
> > +
> > +        gz.delete()
> > +    }
> > +
> > +    private File gzip(File file) {
> > +        File gz = new File(file.parent, file.name + '.gz')
> > +        InputStream input = new FileInputStream(file)
> > +        GzipCompressorOutputStream output = new
> > GzipCompressorOutputStream(new FileOutputStream(gz))
> > +        output << input
> > +        output.close()
> > +        input.close()
> > +        file.delete()
> > +        return gz
> > +    }
> > +
> > +    private void arItem(ArArchiveOutputStream output, File file) {
> > +        ArArchiveEntry entry = new ArArchiveEntry(file.name,
> > file.length())
> > +        output.putArchiveEntry(entry)
> > +        output << new FileInputStream(file)
> > +        output.closeArchiveEntry()
> > +    }
> > +
> > +    private void arDebianBinary(ArArchiveOutputStream output) {
> > +        byte[] text = "2.0\n".getBytes()
> > +        ArArchiveEntry entry = new ArArchiveEntry('debian-binary',
> > text.length)
> > +        output.putArchiveEntry(entry)
> > +        output.write(text)
> > +        output.closeArchiveEntry()
> > +    }
> > +
> > +    private File ar(String name, File data, File control) {
> > +        File ar = new File(data.parent,
> > "apache-tomee-${name}-${tomeeVersion}.deb")
> > +        ArArchiveOutputStream output = new ArArchiveOutputStream(new
> > FileOutputStream(ar))
> > +
> > +        arDebianBinary(output)
> > +        arItem(output, control)
> > +        arItem(output, data)
> > +
> > +        output.close()
> > +        //data.delete()
> > +        //control.delete()
> > +        return ar
> > +    }
> > +
> > +    def PackageBuilder(def script) {
> > +        this.targetDir = script.project.properties.targetDir
> > +        this.tomeeVersion = script.project.properties.tomeeVersion
> > +    }
> > +
> > +    private File packSolution(String name) {
> > +        unzip(name)
> > +        File exploded = untar(name)
> > +        def tarData = tar(exploded)
> > +        File data = gzip(tarData.tar)
> > +        File control = gzip(createControlTar(exploded, tarData))
> > +        delete(exploded)
> > +        File debFile = ar(name, data, control)
> > +        File result = new File(this.targetDir, debFile.name)
> > +        debFile.renameTo(result)
> > +        //delete(new File(this.targetDir, 'output'))
> > +        return result
> > +    }
> > +
> > +    void execute() {
> > +        packSolution('plus')
> > +    }
> > +}
> >
> > Added:
> >
> >
> tomee/sandbox/tomee-deb/src/test/groovy/org/apache/tomee/deb/TestPlaceholder.groovy
> > URL:
> >
> >
> http://svn.apache.org/viewvc/tomee/sandbox/tomee-deb/src/test/groovy/org/apache/tomee/deb/TestPlaceholder.groovy?rev=1455127&view=auto
> >
> >
> ==============================================================================
> > ---
> >
> >
> tomee/sandbox/tomee-deb/src/test/groovy/org/apache/tomee/deb/TestPlaceholder.groovy
> > (added)
> > +++
> >
> >
> tomee/sandbox/tomee-deb/src/test/groovy/org/apache/tomee/deb/TestPlaceholder.groovy
> > Mon Mar 11 13:07:15 2013
> > @@ -0,0 +1,35 @@
> > +/**
> > + *
> > + * Licensed to the Apache Software Foundation (ASF) under one or more
> > + * contributor license agreements.  See the NOTICE file distributed with
> > + * this work for additional information regarding copyright ownership.
> > + * The ASF licenses this file to You under the Apache License, Version
> 2.0
> > + * (the "License"); you may not use this file except in compliance with
> > + * the License.  You may obtain a copy of the License at
> > + *
> > + *     http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + *  Unless required by applicable law or agreed to in writing, software
> > + *  distributed under the License is distributed on an "AS IS" BASIS,
> > + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied.
> > + *  See the License for the specific language governing permissions and
> > + *  limitations under the License.
> > + */
> > +
> > +package org.apache.tomee.deb
> > +
> > +import org.junit.Before
> > +import org.junit.Test
> > +
> > +class TestPlaceholder {
> > +
> > +    @Before
> > +    public void setUp() throws Exception {
> > +
> > +    }
> > +
> > +    @Test
> > +    void testCreateUser() {
> > +
> > +    }
> > +}
> >
>

Reply via email to