Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Mar 2004 16:05:31 -0800
From:      Luigi Rizzo <rizzo@icir.org>
To:        diz@linuxpowered.com
Cc:        current@freebsd.org
Subject:   Re: userland|unprivileged file system handling tools
Message-ID:  <20040323160531.A5777@xorpc.icir.org>
In-Reply-To: <60523.24.0.61.35.1080081768.squirrel@webmail.linuxpowered.com>; from diz@linuxpowered.com on Tue, Mar 23, 2004 at 04:42:48PM -0600
References:  <60523.24.0.61.35.1080081768.squirrel@webmail.linuxpowered.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--envbJBWh7q8WU6mo
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Tue, Mar 23, 2004 at 04:42:48PM -0600, diz@linuxpowered.com wrote:
> hi,
...
> As far as -current goes, mknod is not anything worth mentioning because of
> devfs. My sysgen scripts (wifibsd) are divided into what requires root,
> and what doesn't. My observation is that only mdconfig requires root, and

right now i can produce -current images without root privs
by using makefs (with a bugfix, attached)
and the attached patch to disklabel.
The -stable version still needs a trick for device nodes,
that probably can be handled by makefs itself (which uses
NetBSD's version of mtree which apparently accepts a
device number for device nodes), though I haven't tried it.

	cheers
	luigi

> -Jon Disnard
> (aka masta)
> irc.freenode.net
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"

--envbJBWh7q8WU6mo
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="disklabel.diff"

Index: disklabel.c
===================================================================
RCS file: /home/ncvs/src/sbin/disklabel/Attic/disklabel.c,v
retrieving revision 1.28.2.15
diff -u -r1.28.2.15 disklabel.c
--- disklabel.c	24 Jan 2003 16:18:16 -0000	1.28.2.15
+++ disklabel.c	23 Mar 2004 16:48:13 -0000
@@ -158,6 +158,9 @@
 #define OPTIONS	"BNRWb:enrs:w"
 #endif
 
+int	is_file;	/* use a file, "-f" option */
+
+
 int
 main(int argc, char *argv[])
 {
@@ -166,8 +169,12 @@
 	int ch, f = 0, flag, error = 0;
 	char *name = 0;
 
-	while ((ch = getopt(argc, argv, OPTIONS)) != -1)
+	while ((ch = getopt(argc, argv, OPTIONS "f")) != -1)
 		switch (ch) {
+			case 'f':
+				is_file++;
+				break;
+
 #if NUMBOOT > 0
 			case 'B':
 				++installboot;
@@ -450,6 +457,7 @@
 			 * disable after writing.
 			 */
 			flag = 1;
+			if (!is_file)
 			if (ioctl(f, DIOCWLABEL, &flag) < 0)
 				warn("ioctl DIOCWLABEL");
 			if (write(f, boot, lp->d_bbsize) != lp->d_bbsize) {
@@ -1575,6 +1583,31 @@
 	char namebuf[BBSIZE];
 	int f;
 
+	if (is_file) {
+		struct disklabel *lp = &lab;
+		off_t sz;
+
+		if ((f = open(dkname, O_RDONLY)) == -1) {
+			warn("cannot open %s", namebuf);
+			return (NULL);
+		}
+		sz = lseek(f, (off_t)0, SEEK_END);
+		bzero(lp, sizeof(*lp));
+		lp->d_magic = lp->d_magic2 = DISKMAGIC;
+		lp->d_secsize = DEV_BSIZE;
+		lp->d_bbsize = BBSIZE;
+		lp->d_sbsize = SBSIZE;
+		lp->d_npartitions = 8; /* XXX */
+		lp->d_nsectors = sz/DEV_BSIZE; /* XXX */
+		lp->d_ntracks = 1;
+		lp->d_ncylinders = 1;
+		lp->d_interleave = 1;
+		lp->d_rpm = 3600;
+		lp->d_secpercyl = lp->d_nsectors;
+		lp->d_secperunit = lp->d_nsectors;
+		lp->d_partitions[2].p_size = lp->d_nsectors;
+		goto done;
+    	}
 	if (dkname[0] == '/') {
 		warnx("\"auto\" requires the usage of a canonical disk name");
 		return (NULL);
@@ -1596,6 +1630,7 @@
 			return (NULL);
 		}
 	}
+    done:
 	close(f);
 	lab.d_boot0 = NULL;
 	lab.d_boot1 = NULL;

--envbJBWh7q8WU6mo
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="makefs.diff"

diff -ubwr work/makefs-20031215/netbsdsrc/usr.sbin/makefs/ffs.c work-luigi/makefs-20031215/netbsdsrc/usr.sbin/makefs/ffs.c
--- work/makefs-20031215/netbsdsrc/usr.sbin/makefs/ffs.c	Wed Dec 17 19:53:31 2003
+++ work-luigi/makefs-20031215/netbsdsrc/usr.sbin/makefs/ffs.c	Mon Mar 22 23:08:39 2004
@@ -254,7 +254,22 @@
 		/* write out superblock; image is now complete */
 
 	((struct fs *)fsopts->superblock)->fs_fmod = 0;
+	/*
+	 * update fs_old_cstotal
+	 */
+	((struct fs *)fsopts->superblock)->fs_old_cstotal.cs_ndir =
+		((struct fs *)fsopts->superblock)->fs_cstotal.cs_ndir;
+	((struct fs *)fsopts->superblock)->fs_old_cstotal.cs_nbfree =
+		((struct fs *)fsopts->superblock)->fs_cstotal.cs_nbfree;
+	((struct fs *)fsopts->superblock)->fs_old_cstotal.cs_nifree =
+		((struct fs *)fsopts->superblock)->fs_cstotal.cs_nifree;
+	((struct fs *)fsopts->superblock)->fs_old_cstotal.cs_nffree =
+		((struct fs *)fsopts->superblock)->fs_cstotal.cs_nffree;
+		
 	ffs_write_superblock(fsopts->superblock, fsopts);
+	printf("ndir now %d\n",
+		((struct fs *)fsopts->superblock)->fs_cstotal.cs_ndir);
+
 	if (close(fsopts->fd) == -1)
 		err(1, "Closing `%s'", image);
 	fsopts->fd = -1;

--envbJBWh7q8WU6mo--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040323160531.A5777>