---
name: "Config::Model::Dpkg"
section: "3pm"
platform: "linux"
package: "libconfig-model-dpkg-perl"
version: "3.014"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Config::Model::Dpkg"
---

# Config::Model::Dpkg(3pm)

Edit and validate Dpkg source files

## NAME

Config::Model::Dpkg - Edit and validate Dpkg source files

## SYNOPSIS

### invoke editor

The following command must be run in a package source directory. When run, cme will load most files from `"debian"` directory and launch a graphical editor:

```
 cme edit dpkg
```

You can choose to edit only `"debian/control"` or `"debian/copyright"`:

```
 cme edit dpkg-control
 cme edit dpkg-copyright
```

Or edit debian patches headers, all at once:

```
 cme edit dpkg-patches # note patches with 'es'
```

Or one patch at a time:

```
 cme edit dpkg-patch debian/patches/foo
```

Patch can be specified using the patch name:

```
 cme edit dpkg-patch foo
```

### Just check dpkg files

You can also use cme to run sanity checks on the source files:

```
 cme check dpkg
```

### Fix warnings

When run, cme may issue several warnings regarding the content of your file. You can choose to  fix (most of) these warnings with the command:

```
 cme fix dpkg
```

### check and arbitrary file

You can specify another file to check:

```
  cme check dpkg-copyright foobar
```

This applies only to `"dpkg-control"`, `"dpkg-copyright"` or `"dpkg-patch"`.

### programmatic

This code snippet will change the maintainer address in control file:

```
 use Config::Model ;
 use Log::Log4perl qw(:easy) ;
 my $model = Config::Model -> new ( ) ;
 my $inst = $model->instance (root_class_name => 'Dpkg');
 $inst -> config_root ->load("control source Maintainer=foo@bedian.arg") ;
 $inst->write_back() ;
```

## DESCRIPTION

This module provides a configuration editor (and models) for the files of a Debian source package. (i.e. most of the files contained in the `"debian"` directory of a source package).

This module can also be used to modify safely the content of these files from a Perl programs.

## user interfaces

As mentioned in cme, several user interfaces are available:

- •

  A graphical interface is proposed by default if Config::Model::TkUI is installed.

- •

  A Fuse virtual file system with option `"cme fusefs dpkg -fuse_dir <mountpoint>"` if Fuse is installed (Linux only)

### package dependency checks

Package dependencies are checked on several points:

- •

  Whether the package is available in Debian (from sid to old-stable)

- •

  If the package is a known virtual package. Known means listed in Debian packaging manual or known by the author. Feel free to log a bug against libconfig-model-dpkg-perl if a virtual package is missing. But please don't log a bug if the virtual package is used only during a transition.

- •

  If a package older that the required version are available in Debian (from sid to old-stable). If not, cme will offer you the possibility to clean up the versioned dependency with `"cme fix dpkg"` command.

- •

  The syntax of the dependency (including version requirement and arch specification).

- •

  Consistency of alternate dependency for Perl libraries

These checks only generate warnings. Most of these checks can be fixed with `"cme fix dpkg"` command.

## Examples

### Migrate old package file

Most of old syntax can be automatically migrated to newer parameters with

```
  cme migrate dpkg
```

This migration can be limited to `"control"` or `"copyright"` files:

```
  cme migrate dpkg-control
  cme migrate dpkg-copyright
```

Restore GPL summary to default value:

```
  cme modify dpkg-copyright ~~ 'License:GPL text~'
```

Dump copyright file content in a format usable with `"cme modify"`:

```
  $ cme dump dpkg-copyright
  Comment="Native package. This package is a spin-off from
  libconfig-model-perl. Upstream (who is also the debian packager)
  decided to create a Debian native package for the Debian specific
  parts of Config::Model"
  Files:"*"
    Copyright="2005-2013, Dominique Dumont <dod@debian.org>"
    License
      short_name=LGPL-2.1+ - -
  License:LGPL-2.1+
    text="   This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU Lesser General Public License as
     published by the Free Software Foundation; either version 2.1 of the
     License, or (at your option) any later version.
     On Debian GNU/Linux systems, the complete text of version 2.1 of the GNU
     Lesser General Public License can be found in `/usr/share/common-licenses/LGPL-2.1'" - -
```

### modify a value with the command line:

```
 cme modify dpkg-copyright ~~ 'Comment="Modified with cme"'
```

Or apply more systematic changes. This example updates copyright years for all `"Files"` entries in `"debian/copyright"`:

```
 cme modify dpkg-copyright ~~ 'Files:~/./ Copyright=~"s/2013/2014/"'
```

### remove an uploader from control files

```
 cme modify dpkg control source Uploaders:-~/johndoe/
```

or

```
 cme modify dpkg-control ~~ source Uploaders:-~/dod/
```

If you want to remove a guy named Ian, you'll have to be a little more specific to avoid removing all debian developers:

```
 cme modify dpkg-control ~~ source Uploaders:-="Ian Smith<iansmith@debian.org>"
```

### add a new uploader

The quotes are required otherwise bash will complain. These 2 commands give the same results:

```
 cme modify dpkg-control ~~ 'source Uploaders:<"John Doe<johndoe@foo.com>"'
 cme modify dpkg-control ~~ 'source Uploaders:.push("John Doe<johndoe@foo.com>")'
```

Add an uploader to a sorted list of Uploaders (yes, insort, with a 'o', not "insert" with a 'e'):

```
 cme modify dpkg-control ~~ 'source Uploaders:.insort("John Doe<johndoe@foo.com>")'
```

The above command make sense only if the list is sorted. Let's sort the list of uploaders:

```
 cme modify dpkg-control ~~ 'source Uploaders:@'
 cme modify dpkg-control ~~ 'source Uploaders:.sort'
```

The 2 commands can be combined:

```
 cme modify dpkg-control ~~ 'source Uploaders:.sort Uploaders:.insort("John Doe<johndoe@foo.com>")'
```

The `"modify"` command of cme uses the syntax defined by Config::Model::Loader. See "load string syntax" in Config::Model::Loader

## BUGS

Config::Model design does not really cope well with some details of Debian patch header specification \<http://dep.debian.net/deps/dep3/\> (aka DEP-3).

Description and subject are both authorized, but only **one** of them is required and using the 2 is forbidden. So, both fields are accepted, but subject is stored as description in the configuration tree. `"cme fix"` or `"cme edit"` will write back a description field.

## CONTRIBUTORS

In alphabetical order:

```
 Andrej Shadura
 Axel Beckert
 Bas Couwenberg
 Cyrille Bollu
 Gregor Herrmann
 Guillem Jover
 Josh Triplett
 Paul Wise
 Ross Vandegrift
 Salvatore Bonaccorso
 Victor Westerhuis
 Walter Lozano
 Xavier Guimard
```

Many thanks to all.

## AUTHOR

Dominique Dumont, (dod at debian dot org)

## SEE ALSO

- •

  cme

- •

  Config::Model

- •

  http://github.com/dod38fr/config-model/wiki/Using-config-model
