Beispiel #1
0
class MigratorPackage(Package):
    """Add the NuoDB migrator client."""

    __PKGNAME = 'migrator'

    __USER = '******'
    __REPO = 'migration-tools'
    __ZIP = 'nuodb-migrator.zip'

    def __init__(self):
        super(MigratorPackage, self).__init__(self.__PKGNAME)
        self._zip = None

        self.staged = [
            Stage('migrator',
                  title='NuoDB Migrator',
                  requirements='Java 8 or 11')
        ]
        self.stage = self.staged[0]

    def download(self):
        repo = GitHubMetadata(self.__USER, self.__REPO)
        self.stage.version = repo.version

        self._zip = Artifact(self.name, self.__ZIP, repo.pkgurl)
        self._zip.update()

    def unpack(self):
        rmdir(self.pkgroot)
        mkdir(self.pkgroot)
        unpack_file(self._zip.path, self.pkgroot)

    def install(self):
        self.stage.stage('jar', ['jar/'])
        self.stage.stage('conf', ['conf/'])
        ext = '' if Globals.target == 'lin64' else '.bat'
        self.stage.stagefiles('bin', 'bin', ['nuodb-migrator' + ext])
Beispiel #2
0
    def download(self):
        versions = Artifact(self.name, self.__VERSIONS,
                            '{}/{}'.format(self.__CE_URL, self.__VERSIONS))
        versions.get()

        version = loadfile(versions.path).split()[-1]
        self.setversion(version)

        if Globals.target == 'lin64':
            self._dirname = self.__TARFORMAT.format(version)
            pkgname = self._dirname + self.__TAREXT
        else:
            self._dirname = self.__ZIPFORMAT.format(version)
            pkgname = self._dirname + self.__ZIPEXT

        self._pkg = Artifact(self.name, pkgname,
                             '{}/{}'.format(self.__CE_URL, pkgname))
        self._pkg.update()
Beispiel #3
0
class PyNuoadminPackage(Package):
    """Add the NuoDB pynuoadmin client."""

    __PKGNAME = 'pynuoadmin'

    def __init__(self):
        super(PyNuoadminPackage, self).__init__(self.__PKGNAME)

        self._file = None
        self._ac_file = None
        self._ac_version = None
        self.ac_basedir = None

        self.staged = [
            Stage(self.__PKGNAME,
                  title='NuoAdmin Driver',
                  requirements='Python 2')
        ]

        self.stage = self.staged[0]

    def prereqs(self):
        # We need nuodb to get nuokeymanager.jar
        return ['nuodb']

    def download(self):
        # Find the latest release
        pypi = PyPIMetadata('pynuoadmin')

        self.setversion(pypi.version)

        self._file = Artifact(self.name,
                              'pynuoadmin.tar.gz',
                              pypi.pkgurl,
                              chksum=pypi.pkgchksum)
        self._file.update()

        # Grab the latest version of argcomplete
        acpypi = PyPIMetadata('argcomplete')
        self._ac_version = acpypi.version
        self._ac_file = Artifact('argcomplete',
                                 'argcomplete-{}.tar.gz'.format(
                                     self._ac_version),
                                 acpypi.pkgurl,
                                 chksum=acpypi.pkgchksum)
        self._ac_file.update()

    def unpack(self):
        rmdir(self.pkgroot)
        mkdir(self.pkgroot)
        unpack_file(self._file.path, self.pkgroot)
        self.stage.basedir = os.path.join(
            self.pkgroot, 'pynuoadmin-{}'.format(self.stage.version))

        unpack_file(self._ac_file.path, self.pkgroot)
        self.ac_basedir = os.path.join(
            self.pkgroot, 'argcomplete-{}'.format(self._ac_version))

    def install(self):
        pdir = os.path.join('python', 'pynuoadmin')
        self.stage.stage(pdir, ['nuodb_cli.py', 'nuodb_mgmt.py'])
        self.stage.stage('doc', ['README.rst'])

        acdir = os.path.join('python', 'argcomplete')
        if not self.ac_basedir:
            acpypi = PyPIMetadata('argcomplete')
            self._ac_version = acpypi.version
            self.ac_basedir = os.path.join(
                self.pkgroot, 'argcomplete-{}'.format(self._ac_version))
        self.stage.stage(acdir,
                         [os.path.join(self.ac_basedir, 'argcomplete/')])
        self.stage.stage(acdir, [os.path.join(self.ac_basedir, 'LICENSE.rst')])

        if Globals.target == 'lin64':
            self.stage.stage('bin', [os.path.join(Globals.bindir, 'nuocmd')])
            self.stage.stagefiles('etc', Globals.etcdir,
                                  ['run-java-app.sh', 'nuokeymgr'])
        else:
            self.stage.stage('bin',
                             [os.path.join(Globals.bindir, 'nuocmd.bat')])
            self.stage.stagefiles('etc', Globals.etcdir, ['nuokeymgr.bat'])

        nuodb = self.get_package('nuodb')
        self.stage.stage('jar', [
            os.path.join(nuodb.staged[0].basedir, 'jar', 'nuokeymanager.jar')
        ])
        self.stage.stage(pdir, [
            os.path.join(nuodb.staged[0].basedir, 'drivers', 'pynuoadmin',
                         'nuocmd-complete')
        ])
Beispiel #4
0
    def download(self):
        repo = GitHubMetadata(self.__USER, self.__REPO)
        self.stage.version = repo.version

        self._zip = Artifact(self.name, self.__ZIP, repo.pkgurl)
        self._zip.update()
Beispiel #5
0
class HibernatePackage(Package):
    """Add the NuoDB Hibernate (3 and 5) clients."""

    __PKGNAME = 'hibernate'

    __PATH = 'com/nuodb/hibernate/nuodb-hibernate'
    __JAR = 'nuodb-hibernate-{}.jar'

    def __init__(self):
        super(HibernatePackage, self).__init__(self.__PKGNAME)
        self._hib3 = None
        self._hib5 = None

        self.staged = [
            Stage(name='hibernate3',
                  title='Hibernate3 Driver',
                  requirements='Java 8 or 11'),
            Stage(name='hibernate5',
                  title='Hibernate5 Driver',
                  requirements='Java 8 or 11')
        ]

        self.stage3 = self.staged[0]
        self.stage5 = self.staged[1]

    def download(self):
        # Hibernate is complicated because both versions 3 and 5 are released
        # in the same Maven repository.
        mvn = MavenMetadata(self.__PATH)

        # Find the newest hib3 and hib5 versions
        for ver in mvn.metadata.find('versioning/versions'):
            if ver.text.endswith('hib3'):
                self.stage3.version = ver.text
            elif ver.text.endswith('hib5'):
                self.stage5.version = ver.text

        self._hib3 = Artifact(
            self.name, 'nuodb-hibernate-hib3.jar',
            '{}/{}/{}'.format(mvn.baseurl, self.stage3.version,
                              self.__JAR.format(self.stage3.version)))

        self._hib5 = Artifact(
            self.name, 'nuodb-hibernate-hib5.jar',
            '{}/{}/{}'.format(mvn.baseurl, self.stage5.version,
                              self.__JAR.format(self.stage5.version)))

        # We only download the actual jar files
        self._hib3.update()
        self._hib5.update()

    def unpack(self):
        rmdir(self.pkgroot)
        mkdir(self.pkgroot)
        copy(self._hib3.path,
             os.path.join(self.pkgroot, 'nuodb-hibernate-hib3.jar'))
        copy(self._hib5.path,
             os.path.join(self.pkgroot, 'nuodb-hibernate-hib5.jar'))
        savefile(os.path.join(self.pkgroot, 'LICENSE.txt'),
                 self.getlicense('3BSD'))

    def install(self):
        self.stage3.stage('jar', ['nuodb-hibernate-hib3.jar'])
        self.stage3.stage('doc', ['LICENSE.txt'])

        self.stage5.stage('jar', ['nuodb-hibernate-hib5.jar'])
        self.stage5.stage('doc', ['LICENSE.txt'])
Beispiel #6
0
class NuoDBPackage(Package):
    """Extract NuoDB clients from the database package."""

    __PKGNAME = 'nuodb'

    __CE_URL = 'https://ce-downloads.nuohub.org'
    __VERSIONS = 'supportedversions.txt'
    __TARFORMAT = 'nuodb-ce-{}.linux.x86_64'
    __TAREXT = '.tar.gz'
    __ZIPFORMAT = 'nuodb-ce-{}.win64'
    __ZIPEXT = '.zip'

    def __init__(self):
        super(NuoDBPackage, self).__init__(self.__PKGNAME)
        self._pkg = None
        self._dirname = None

        self.stgs = {
            'nuosql':
            Stage('nuosql',
                  title='nuosql',
                  requirements='GNU/Linux or Windows'),
            'nuoloader':
            Stage('nuoloader',
                  title='nuoloader',
                  requirements='GNU/Linux or Windows'),
            'nuodbmgr':
            Stage('nuodbmgr', title='nuodbmgr', requirements='Java 8 or 11'),
            'nuoodbc':
            Stage('nuoodbc',
                  title='NuoODBC Driver',
                  requirements='GNU/Linux with UnixODBC 2.3 or Windows'),
            'nuoremote':
            Stage('nuoremote',
                  title='C++ Driver',
                  requirements='GNU/Linux or Windows'),
            'nuoclient':
            Stage('nuoclient',
                  title='C Driver',
                  requirements='GNU/Linux or Windows')
        }

        self.staged = self.stgs.values()

    def download(self):
        versions = Artifact(self.name, self.__VERSIONS,
                            '{}/{}'.format(self.__CE_URL, self.__VERSIONS))
        versions.get()

        version = loadfile(versions.path).split()[-1]
        self.setversion(version)

        if Globals.target == 'lin64':
            self._dirname = self.__TARFORMAT.format(version)
            pkgname = self._dirname + self.__TAREXT
        else:
            self._dirname = self.__ZIPFORMAT.format(version)
            pkgname = self._dirname + self.__ZIPEXT

        self._pkg = Artifact(self.name, pkgname,
                             '{}/{}'.format(self.__CE_URL, pkgname))
        self._pkg.update()

    def unpack(self):
        rmdir(self.pkgroot)
        mkdir(self.pkgroot)
        unpack_file(self._pkg.path, self.pkgroot)
        udir = os.path.join(self.pkgroot, self._dirname)
        for stg in self.staged:
            stg.basedir = udir

    def _install_linux(self):
        self.stgs['nuosql'].stagefiles('bin', 'bin', ['nuosql'])
        self.stgs['nuoloader'].stagefiles('bin', 'bin', ['nuoloader'])

        self.stgs['nuoodbc'].stagefiles('lib64', 'lib64', ['libNuoODBC.so'])
        self.stgs['nuoremote'].stagefiles('lib64', 'lib64',
                                          ['libNuoRemote.so'])
        self.stgs['nuoclient'].stagefiles('lib64', 'lib64',
                                          ['libnuoclient.so'])

        # Add in shared libraries for packages that need it
        soglobs = ['libicu*.so.*', 'libmpir.so.*']
        for stg in [
                'nuosql', 'nuoloader', 'nuoodbc', 'nuoremote', 'nuoclient'
        ]:
            self.stgs[stg].stagefiles('lib64', 'lib64', soglobs)

        self.stgs['nuodbmgr'].stagefiles('jar', 'jar', ['nuodbmanager.jar'])
        # Get the client-specific version of these scripts
        self.stgs['nuodbmgr'].stage('bin',
                                    [os.path.join(Globals.bindir, 'nuodbmgr')])
        self.stgs['nuodbmgr'].stage(
            'etc', [os.path.join(Globals.etcdir, 'run-java-app.sh')])

    def _install_windows(self):
        self.stgs['nuosql'].stagefiles('bin', 'bin', ['nuosql.exe'])
        self.stgs['nuoloader'].stagefiles('bin', 'bin', ['nuoloader.exe'])

        self.stgs['nuoodbc'].stagefiles('bin', 'bin',
                                        ['NuoODBC.dll', 'NuoODBC.pdb'])
        self.stgs['nuoremote'].stagefiles('bin', 'bin',
                                          ['NuoRemote.dll', 'NuoRemote.pdb'])
        self.stgs['nuoremote'].stagefiles('lib', 'lib', ['NuoRemote.lib'])
        self.stgs['nuoclient'].stagefiles('bin', 'bin',
                                          ['nuoclient.dll', 'nuoclient.pdb'])
        self.stgs['nuoclient'].stagefiles('lib', 'lib', ['nuoclient.lib'])

        # Add in shared libraries for packages that need it
        soglobs = ['icu*.dll', 'mpir*.dll', 'msvcp140.dll', 'vcruntime140.dll']
        for stg in [
                'nuosql', 'nuoloader', 'nuoodbc', 'nuoremote', 'nuoclient'
        ]:
            self.stgs[stg].stagefiles('bin', 'bin', soglobs)

        self.stgs['nuodbmgr'].stagefiles('jar', 'jar', ['nuodbmanager.jar'])

        # Get the client-specific versions
        self.stgs['nuodbmgr'].stage(
            'bin', [os.path.join(Globals.bindir, 'nuodbmgr.bat')])

    def install(self):
        if Globals.target == 'lin64':
            self._install_linux()
        else:
            self._install_windows()

        # Install header and sample files for C/C++ drivers
        self.stgs['nuoremote'].stagefiles('include', 'include', [
            'NuoDB.h', 'SQLException.h', 'SQLExceptionConstants.h', 'NuoRemote'
        ])
        self.stgs['nuoremote'].stage('samples',
                                     [os.path.join('samples', 'doc', 'cpp')])
        self.stgs['nuoclient'].stagefiles('include', 'include', ['nuodb'])
        self.stgs['nuoclient'].stage('samples',
                                     [os.path.join('samples', 'doc', 'c')])

        for stg in self.staged:
            stg.stage('doc', ['README.txt', 'ce_license.txt'])