From owner-freebsd-arch@FreeBSD.ORG Mon Jul 2 14:53:43 2012 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 125E41065670; Mon, 2 Jul 2012 14:53:43 +0000 (UTC) (envelope-from marcel@xcllnt.net) Received: from mail.xcllnt.net (mail.xcllnt.net [70.36.220.4]) by mx1.freebsd.org (Postfix) with ESMTP id 975818FC16; Mon, 2 Jul 2012 14:53:42 +0000 (UTC) Received: from dhcp-192-168-2-58.wifi.xcllnt.net (wifi.xcllnt.net [70.36.220.6] (may be forged)) (authenticated bits=0) by mail.xcllnt.net (8.14.5/8.14.5) with ESMTP id q62ErXfe004652 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO); Mon, 2 Jul 2012 07:53:39 -0700 (PDT) (envelope-from marcel@xcllnt.net) Mime-Version: 1.0 (Apple Message framework v1278) Content-Type: text/plain; charset=us-ascii From: Marcel Moolenaar In-Reply-To: <20120702143418.GA74604@lor.one-eyed-alien.net> Date: Mon, 2 Jul 2012 07:53:42 -0700 Content-Transfer-Encoding: quoted-printable Message-Id: <43C6B281-C2DD-429D-AE9E-24A52184C7FA@xcllnt.net> References: <20120626063017.D05DA58081@chaos.jnpr.net> <86wr2uwdgf.fsf@ds4.des.no> <20120626161605.5082A58081@chaos.jnpr.net> <20120627235945.GE243@lor.one-eyed-alien.net> <9BB38D52-3CB9-44CE-B1BD-85DFAD6A1176@xcllnt.net> <20120702143418.GA74604@lor.one-eyed-alien.net> To: Brooks Davis X-Mailer: Apple Mail (2.1278) Cc: Tim Kientzle , Dag-Erling Sm?rgrav , freebsd-arch@freebsd.org, "Simon J. Gerraty" Subject: Re: Allow user install X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Jul 2012 14:53:43 -0000 On Jul 2, 2012, at 7:34 AM, Brooks Davis wrote: > On Sun, Jul 01, 2012 at 02:12:07PM -0700, Marcel Moolenaar wrote: >>=20 >> On Jun 27, 2012, at 4:59 PM, Brooks Davis wrote: >>=20 >>> On Tue, Jun 26, 2012 at 09:16:05AM -0700, Simon J. Gerraty wrote: >>>>=20 >>>> On Tue, 26 Jun 2012 08:18:05 -0700, Tim Kientzle writes: >>>>> Better idea: have the build write a textual description of the >>>>> tar entries. That description can then be fed to tar to build >>>>> the actual tarball. >>>>=20 >>>> Yes, that's what we do - manifest files that tar and other tools = use to >>>> produce the install images. >>>>=20 >>>>> The description format that tar already supports is a variant >>>>> mtree format borrowed from NetBSD. Each line specifies >>>>> the tar entry fields (filename, owner, permissions, etc) and >>>>> the filename where the file contents are stored. >>>>=20 >>>> Yes, we've added that support to makefs - I believe it is already = in >>>> -current. There's still quite a bit to do. >>>=20 >>> It's there except that makefs uses the FreeBSD mtree code which = doesn't >>> support the crucial absolute path support in NetBSD's mtree. >>=20 >> ? >>=20 >> I wrote the code and no, it doesn't use FreeBSD mtree code and yes, >> it supports absolute pathnames: >>=20 >> : >> cp =3D strchr(pathspec, '/'); =20 >> if (cp !=3D NULL) { >> /* Absolute pathname */ >> mtree_current =3D mtree_root; >>=20 >> : >>=20 >> The code should be compatible with libarchive. >> Maybe there's a bug? >=20 > On the first point, two files are used from ../mtree: >=20 > $ ident makefs | grep mtree > $FreeBSD: head/usr.sbin/makefs/mtree.c 223306 2011-06-19 18:34:49Z = marcel $ > $FreeBSD: head/usr.sbin/mtree/misc.c 160083 2006-07-03 10:55:22Z = maxim $ > $FreeBSD: head/usr.sbin/mtree/spec.c 229403 2012-01-03 18:51:58Z = ed $ >=20 > Here's the failure: >=20 > $ mkdir foo > $ touch foo/bar > $ cd foo > $ tar cf ../foo.mtree --format mtree --options mtree:use-set . > $ cd .. > $ cat foo.mtree > #mtree > /set type=3Dfile uname=3Dbrooks uid=3D1001 gname=3Dbrooks gid=3D1001 = mode=3D644 > . time=3D1341239212.0 mode=3D755 type=3Ddir > ./bar time=3D1341239166.0 size=3D0 > ./ormat time=3D1341239212.0 size=3D2048 > $ makefs -s 1m -F foo.mtree foo.img foo > makefs: line 4: slash character in file name >=20 > and the source of the failure. >=20 > $ grep "slash character in file name" /usr/src/usr.sbin/mtree/* > /usr/src/usr.sbin/mtree/spec.c: errx(1, "line = %d: slash character in file name", >=20 Your invocations is still based on directory scanning and with the -F option you can provide overrides. This is not the mtree support I added -- that eliminates directory scanning and the -F option has no effect. Use as follows: makefs -s 1m foo.img foo.mtree See also man makefs FYI, --=20 Marcel Moolenaar marcel@xcllnt.net