Difference between revisions of "Debian"

From Gramps
Jump to: navigation, search
m (For version 3.4 and before)
(For version 4.0 and newer)
Line 1: Line 1:
 
= For version 4.0 and newer =
 
= For version 4.0 and newer =
  
'''TODO'''
+
''in progress'':
 +
 
 +
* Look at [https://github.com/astraw/stdeb stdeb], which produces Debian source packages from Python packages via a new distutils command, sdist_dsc. Automatic defaults are provided for the Debian package, but many aspects of the resulting package can be customized (see the customizing section, below). An additional command, bdist_deb, creates a Debian binary package, a .deb file. The debianize command builds a debian/ directory directly alongside your setup.py.
 +
 
 +
==Sample of code==
 +
 
 +
import os
 +
import stdeb.util as util
 +
from shutil import copy
 +
from stdeb.command.sdist_dsc import sdist_dsc
 +
 
 +
from distutils.core import Command
 +
 
 +
__all__ = ['bdist_hdeb']
 +
 
 +
class bdist_hdeb(Command):
 +
    description = 'distutils command to create debian harmattan binary package'
 +
 
 +
    user_options = [ ("aegis-manifest=", None, 'aegis manifest to use') ]
 +
    boolean_options = []
 +
 
 +
    def initialize_options (self):
 +
        self.aegis_manifest = None
 +
 
 +
    def finalize_options (self):
 +
        pass
 +
 
 +
    def run(self):
 +
       
 +
        # generate .dsc source pkg
 +
        self.run_command('sdist_dsc')
 +
 
 +
        # execute system command and read output (execute and read output of find cmd)
 +
        dsc_tree = 'deb_dist'
 +
        target_dir = None
 +
        for entry in os.listdir(dsc_tree):
 +
            fulldir = os.path.join(dsc_tree,entry)
 +
            if os.path.isdir(fulldir):
 +
                if target_dir is not None:
 +
                    raise ValueError('more than one directory in deb_dist. '
 +
                                    'Unsure which is source directory')
 +
                else:
 +
                    target_dir = fulldir
 +
        if target_dir is None:
 +
            raise ValueError('could not find debian source directory')
 +
       
 +
        # inject custom logic to dh_builddeb (build digsigsums before and add aegis manifest after)
 +
        DEBNAME = self.distribution.get_name()+'_'+self.distribution.get_version()+'*_all.deb'
 +
        rules = open(target_dir+'/debian/rules', 'a')
 +
        rules.write('override_dh_builddeb:\n\tpython ../../digsigsums.py '+self.distribution.get_name()+\
 +
        '\n\tdh_builddeb')
 +
        if self.aegis_manifest is not None:
 +
            rules.write('\n\tar q ../'+DEBNAME+' _aegis')
 +
       
 +
        rules.write('\n\n')
 +
        rules.close()
 +
 
 +
        # make aegies manifest avaiable to debian/rules
 +
        if self.aegis_manifest is not None:
 +
            copy(self.aegis_manifest, target_dir+'/_aegis')
 +
       
 +
        # define system command to execute (gen .deb binary pkg)
 +
        syscmd = ['dpkg-buildpackage','-rfakeroot','-uc','-b']
 +
 
 +
        util.process_command(syscmd,cwd=target_dir)
 +
 
 +
source: https://github.com/kelvan/gotoVienna/blob/master/bdist_hdeb.py
  
 
= For version 3.4 and before=
 
= For version 3.4 and before=

Revision as of 08:33, 25 March 2013

For version 4.0 and newer

in progress:

  • Look at stdeb, which produces Debian source packages from Python packages via a new distutils command, sdist_dsc. Automatic defaults are provided for the Debian package, but many aspects of the resulting package can be customized (see the customizing section, below). An additional command, bdist_deb, creates a Debian binary package, a .deb file. The debianize command builds a debian/ directory directly alongside your setup.py.

Sample of code

import os
import stdeb.util as util
from shutil import copy
from stdeb.command.sdist_dsc import sdist_dsc
from distutils.core import Command
__all__ = ['bdist_hdeb']
class bdist_hdeb(Command):
   description = 'distutils command to create debian harmattan binary package'
   user_options = [ ("aegis-manifest=", None, 'aegis manifest to use') ]
   boolean_options = []
   def initialize_options (self):
       self.aegis_manifest = None
   def finalize_options (self):
       pass
   def run(self):
       
       # generate .dsc source pkg
       self.run_command('sdist_dsc')
       # execute system command and read output (execute and read output of find cmd)
       dsc_tree = 'deb_dist'
       target_dir = None
       for entry in os.listdir(dsc_tree):
           fulldir = os.path.join(dsc_tree,entry)
           if os.path.isdir(fulldir):
               if target_dir is not None:
                   raise ValueError('more than one directory in deb_dist. '
                                    'Unsure which is source directory')
               else:
                   target_dir = fulldir
       if target_dir is None:
           raise ValueError('could not find debian source directory')
       
       # inject custom logic to dh_builddeb (build digsigsums before and add aegis manifest after)
       DEBNAME = self.distribution.get_name()+'_'+self.distribution.get_version()+'*_all.deb'
       rules = open(target_dir+'/debian/rules', 'a')
       rules.write('override_dh_builddeb:\n\tpython ../../digsigsums.py '+self.distribution.get_name()+\
       '\n\tdh_builddeb')
       if self.aegis_manifest is not None:
           rules.write('\n\tar q ../'+DEBNAME+' _aegis')
       
       rules.write('\n\n')
       rules.close()
       # make aegies manifest avaiable to debian/rules
       if self.aegis_manifest is not None:
           copy(self.aegis_manifest, target_dir+'/_aegis')
       
       # define system command to execute (gen .deb binary pkg)
       syscmd = ['dpkg-buildpackage','-rfakeroot','-uc','-b']
       util.process_command(syscmd,cwd=target_dir)

source: https://github.com/kelvan/gotoVienna/blob/master/bdist_hdeb.py

For version 3.4 and before

Instructions on creating the Debian .deb package for Ubuntu:

  • Ensure you have a working build environment
  • For Ubuntu 7.04 or 7.10, install these tools:
sudo apt-get install devscripts dpkg-dev fakeroot debhelper libgconf2-dev
  • For Ubuntu 8.04, install these tools:
sudo apt-get install devscripts dpkg-dev fakeroot debhelper libgconf2-dev python-xml
  • For Ubuntu 12.04 install these tools:
sudo apt-get install devscripts dpkg-dev fakeroot debhelper libgconf2-dev
  • Check out the necessary version; for example, to build the .deb file for GRAMPS version 3.4.3, you'll want to run:
mkdir ~/gramps
cd ~/gramps
svn co https://svn.code.sf.net/p/gramps/code/tags/gramps-3.4.3/
  • Confirm that sudo apt-get install devscripts dpkg-dev fakeroot debhelper libgconf2-dev, everything builds:
./autogen.sh
make
  • Create the Changelog files:
svn2cl --reparagraph --include-rev --authors=src/data/authors.xml
cd po
svn2cl --reparagraph --include-rev --authors=../src/data/authors.xml
cd ..
  • Create the .deb package:
cd debian
export DEBEMAIL='[email protected]'
export DEBFULLNAME='Stephane Charette'
cd ..
dch -v 3.4.3-3 "New upstream release, include two patches"
dpkg-buildpackage -rfakeroot
Remember to modify DEBEMAIL and DEBFULLNAME to reflect your e-mail and name.
  • Release the .deb files:
cd ..
ls *.deb
Note the gramps_3.4.3-3_all.deb file, which needs to be uploaded to ftp://upload.sourceforge.net/incoming/.
  • The details on how things are going to be packaged into deb files, what are the dependencies, the pre- and post- install and removal scripts etc are under debian/ directory. Please refer to the Debian New Maintainers' Guide for further details.