# Copyright © 1996-2006 Joey Hess <joeyh@debian.org>
# Copyright © 2012, 2014-2016, 2018 Guillem Jover <guillem@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

=head1 NAME

dpkg-repack - put an unpacked .deb file back together

=head1 SYNOPSIS

B<dpkg-repack> [I<option>...] I<package-name>...

=head1 DESCRIPTION

B<dpkg-repack> creates a .deb file out of a Debian package that has already
been installed on your system.

If any changes have been made to the package while it was unpacked (e.g.
conffiles files in /etc modified), the new package will inherit the changes.
(There are exceptions to this, including changes to configuration files that
are not conffiles, including those managed by L<ucf(1)>.)

This utility can make it easy to copy packages from one computer to another,
or to recreate packages that are installed on your system, but no longer
available elsewhere.

Note: B<dpkg-repack> will place the created package in the current directory.

=head1 OPTIONS

=over 4

=item B<--root=>I<dir>

Take package from filesystem rooted on I<dir>. This is useful if, for example,
you have another computer NFS mounted on F</mnt>, then you can use
B<--root=/mnt> to reassemble packages from that computer.

=item B<--arch=>I<architecture>

Make the package be for a specific I<architecture>. B<dpkg-repack> might not
be able to tell if an installed package is architecture B<all> or is specific
to the system's architecture, in case it lacks the B<Architecture> field. If
you know the package architecture, you can use this option to force
B<dpkg-repack> to use the right architecture.

=item B<-d>, B<--deb-option=>I<option>

Pass I<option> as build argument to B<dpkg-deb>. This option can be specified
multiple times.

=item B<--generate>

Generate a temporary directory suitable for building a package from, but do
not actually create the package. This is useful if you want to move files
around in the package before building it. The package can be built from this
temporary directory by running "B<dpkg-deb --build> I<dir> B<.>" as root
(or by using B<fakeroot -u>), where I<dir> is the generated directory.

=item B<--tag=>I<thing>[,...]

Specify a comma-separated list of things to tag in the package as having
been repackaged. The current list of I<thing>s to tag is:

=over 2

=item B<none>

Tag nothing. This can be specified first to be augmented by more specific
I<thing>s.

=item B<description>

Append a timestamped "Repackaged by dpkg-repack" tagline to the package's
control file B<Description> field. This tag is enabled by default.

=item B<version>

Append a "+repack" tag to the package version.

=item B<all>

Tag everything.

=back

=item I<package-name>

The name of the package to attempt to repack. Multiple packages can be listed.

=back

=head1 BUGS

There is a tricky situation that can occur if you B<dpkg-repack> a package
that has modified conffiles. The modified conffiles are packed up. Now if
you install the package, B<dpkg>(1) does not realize that the conffiles
in it are modified. So if you later upgrade to a new version of the package,
B<dpkg>(1) will believe that the old (repacked) package has older conffiles
than the new version, and will silently replace the conffiles with those in
the package you are upgrading to.

While B<dpkg-repack> can be run under B<fakeroot>(1) and will work most of
the time, B<fakeroot -u> must be used if any of the files to be repacked
are owned by non-root users. Otherwise the package will have them owned by
root. B<dpkg-repack> will warn if you run it under B<fakeroot>(1) without
the B<-u> flag.

=head1 SEE ALSO

B<dpkg>(1),
B<dpkg-deb>(1),
B<fakeroot>(1).
