[Piuparts-devel] Bug#496186: piuparts - please implement bindmounts so "deb file:<dir>" works
Aníbal Monsalve Salazar
anibal at debian.org
Sat Aug 23 09:33:18 UTC 2008
Package: piuparts
Severity: important
Version: 0.31
Tags: patch
Please implement bindmounts so "deb file:<dir>" works.
I'm using the following patch to fix this bug. Please merge it.
diff -Nru piuparts-0.31/piuparts.docbook piuparts-0.31/piuparts.docbook
--- piuparts-0.31/piuparts.docbook 2008-05-12 06:56:34.000000000 +1000
+++ piuparts-0.31/piuparts.docbook 2008-08-23 17:03:08.000000000 +1000
@@ -57,6 +57,7 @@
<arg><option>-I</option> <replaceable>regexp</replaceable></arg>
<arg><option>-l</option> <replaceable>logfile</replaceable></arg>
<arg><option>-m</option> <replaceable>url</replaceable></arg>
+ <arg><option>--bindmount</option> <replaceable>dir</replaceable></arg>
<arg><replaceable>package</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -404,15 +405,26 @@
components are read from the same place.</para>
<para>Note that <literal>file:</literal> addresses
- do not currently work, since the files aren't
- accessible from within the chroot and Lars has been
- too lazy to add bind mounting support.</para>
+ works if the directories are made accessible from within
+ the chroot with <option>--binmount</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
+
+ <term><option>--bindmount=</option><replaceable>dir</replaceable></term>
+
+ <listitem>
+
+ <para>Bind-mount a directory inside the chroot.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+ <varlistentry>
<term><option>-n</option></term>
<term><option>--no-ignores</option></term>
diff -Nru piuparts-0.31/piuparts.py piuparts-0.31/piuparts.py
--- piuparts-0.31/piuparts.py 2008-05-12 05:08:56.000000000 +1000
+++ piuparts-0.31/piuparts.py 2008-08-23 16:41:37.000000000 +1000
@@ -133,6 +133,7 @@
self.args_are_package_files = True
self.debian_mirrors = []
self.debian_distros = []
+ self.bindmounts = []
self.basetgz = None
self.savetgz = None
self.endmeta = None
@@ -635,6 +636,9 @@
self.create_apt_sources(settings.debian_distros[0])
self.create_apt_conf()
self.create_policy_rc_d()
+ for bindmount in settings.bindmounts:
+ run(["mkdir", "-p", self.relative(bindmount)])
+ run(["mount", "-obind", bindmount, self.relative(bindmount)])
self.run(["apt-get", "update"])
def upgrade_to_distros(self, distros, packages):
@@ -817,6 +821,8 @@
return dict
def relative(self, pathname):
+ if pathname.startswith('/'):
+ return os.path.join(self.name, pathname[1:])
return os.path.join(self.name, pathname)
def get_files_owned_by_packages(self):
@@ -862,6 +868,8 @@
def unmount_proc(self):
"""Unmount /proc inside chroot."""
self.run(["umount", "/proc"], ignore_errors=True)
+ for bindmount in settings.bindmounts:
+ run(["umount", self.relative(bindmount)], ignore_errors=True)
def is_ignored(self, pathname):
"""Is a file (or dir or whatever) to be ignored?"""
@@ -1593,6 +1601,7 @@
def forget_ignores(option, opt, value, parser, *args, **kwargs):
+ settings.bindmounts = []
parser.values.ignore = []
parser.values.ignore_regex = []
settings.ignored_files = []
@@ -1625,6 +1634,10 @@
parser.add_option("-B", "--end-meta", metavar="FILE",
help="XXX")
+ parser.add_option("--bindmount", action="append", metavar="DIR",
+ default=[],
+ help="Directory to be bind-mounted inside the chroot.")
+
parser.add_option("-d", "--distribution", action="append", metavar="NAME",
help="Which Debian distribution to use: a code name " +
"(sarge, etch, sid) or experimental. The " +
@@ -1735,6 +1748,7 @@
settings.defaults = opts.defaults
settings.args_are_package_files = not opts.apt
settings.basetgz = opts.basetgz
+ settings.bindmounts += opts.bindmount
settings.debian_distros = opts.distribution
settings.ignored_files += opts.ignore
settings.ignored_patterns += opts.ignore_regex
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
Url : http://lists.alioth.debian.org/pipermail/piuparts-devel/attachments/20080823/a424094d/attachment.pgp
More information about the Piuparts-devel
mailing list