* Feeble attempt at using xattr gnu.translator
@ 2020-05-10 19:48 Jan Nieuwenhuizen
2020-05-10 20:05 ` Samuel Thibault
0 siblings, 1 reply; 7+ messages in thread
From: Jan Nieuwenhuizen @ 2020-05-10 19:48 UTC (permalink / raw)
To: bug-hurd; +Cc: guix-devel
Hello,
As part of the effort of creating vm-images for the Hurd using Guix, it
would be nice to use extended file attributes to set passive
translators.
In particular, it would be helpful if we could use
setfattr --name=gnu.translator --value=/hurd/pfinet 1
That would allow us to boot right into Guile and skip a Bash script to
only to run
settrans -c /servers/socket/1 /hurd/pflocal
Whether on GNU/Linux or on the Hurd (booted with
--x-xattr-translator-records and x-xattr-translator-records option in
fstab); almost nothing works.
The Hurd
root@debian:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/hd0s2 / ext2 defaults,x-xattr-translator-records 0 1
/dev/hd0s1 none swap sw 0 0
/dev/hd2 /media/cdrom0 iso9660 noauto 0 0
root@debian:~# fsysopts /
ext2fs --writable --no-inherit-dir-group --x-xattr-translator-records --store-type=typed device:hd0s2
root@debian:~# ps -ef --width=1000 | grep ext2
- 5 2 - 0:02.98 ext2fs --readonly --multiboot-command-line=root=device:hd0s2 --host-priv-port=1 --device-master-port=2 --exec-server-task=3 -T typed device:hd0s2 --x-xattr-translator-records
so that seems OK? Still, nothing seems to work
root@debian:~# touch 1
root@debian:~# mknod 2 c 0 0
root@debian:~# setfattr --name=gnu.translator --value=/hurd/pfinet 1
setfattr: 1: Invalid argument
root@debian:~# setfattr --name=gnu.translator --value=/hurd/pfinet 2
setfattr: 2: Invalid argument
root@debian:~# setfattr --name=gnu.author --value=/hurd/pfinet 1
setfattr: 1: Invalid argument
root@debian:~# setfattr --name=gnu.author --value=/hurd/pfinet 2
setfattr: 2: Invalid argument
root@debian:~# setfattr --name=user.translator --value=/hurd/pfinet 1
setfattr: 1: Operation not supported
root@debian:~# setfattr --name=user.translator --value=/hurd/pfinet 2
setfattr: 2: Operation not supported
On GNU/Linux, I only managed to set user.X, not gnu.translator
root@dundal ~# touch 1
root@dundal ~# mknod 2 c 0 0
root@dundal ~# setfattr --name=gnu.translator --value=/hurd/pfinet 1
setfattr: 1: Operation not supported
root@dundal ~# setfattr --name=gnu.translator --value=/hurd/pfinet 2
setfattr: 2: Operation not supported
root@dundal ~# setfattr --name=gnu.author --value=/hurd/pfinet 1
setfattr: 1: Operation not supported
root@dundal ~# setfattr --name=gnu.author --value=/hurd/pfinet 2
setfattr: 2: Operation not supported
root@dundal ~# setfattr --name=user.translator --value=/hurd/pfinet 1
root@dundal ~# setfattr --name=user.translator --value=/hurd/pfinet 2
setfattr: 2: Operation not permitted
only one command succeeds, but that's next to useless (well, it suggests touch
could work and we don't need mknod).
This
https://lists.gnu.org/archive/html/bug-hurd/2004-02/msg00108.html
is the only interesting piece of information I found; down the thread
there is a suggestion to try upstreaming. I looked at the Linux sources
They seem to suggest that only a couple of namespaces are allowed (and
"gnu" is not one of them) but find them hard to read.
Greetings,
janneke
--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Feeble attempt at using xattr gnu.translator
2020-05-10 19:48 Feeble attempt at using xattr gnu.translator Jan Nieuwenhuizen
@ 2020-05-10 20:05 ` Samuel Thibault
2020-05-11 8:33 ` Jan Nieuwenhuizen
0 siblings, 1 reply; 7+ messages in thread
From: Samuel Thibault @ 2020-05-10 20:05 UTC (permalink / raw)
To: Jan Nieuwenhuizen; +Cc: guix-devel, bug-hurd
Hello,
Did you have a look at Shengyu Zhang's work on xattr? That's about
summer 2016. Also see glibc/sysdeps/mach/hurd/setxattr.c which
translates gnu attributes into RPC calls, and then again in the
translators's diskfs_set_translator. See for instance in
hurd/ext2fs/inode.c's diskfs_set_translator, it looks at
if (EXT2_HAS_COMPAT_FEATURE (sblock, EXT2_FEATURE_COMPAT_EXT_ATTR)
&& use_xattr_translator_records)
Samuel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Feeble attempt at using xattr gnu.translator
2020-05-10 20:05 ` Samuel Thibault
@ 2020-05-11 8:33 ` Jan Nieuwenhuizen
2020-05-11 8:42 ` Samuel Thibault
0 siblings, 1 reply; 7+ messages in thread
From: Jan Nieuwenhuizen @ 2020-05-11 8:33 UTC (permalink / raw)
To: bug-hurd; +Cc: guix-devel
Samuel Thibault writes:
Hello Samuel,
> Did you have a look at Shengyu Zhang's work on xattr? That's about
> summer 2016.
Ah, that's a helpful pointer. What I notice is that Shengyu's last
message says "not merged yet", to which Richard Braun responds
https://lists.gnu.org/archive/html/bug-hurd/2016-08/msg00095.html
"we'll have more time in September to really dive into the code,
finish the review and merge it."
It got merged, but I'm not sure about the "finish" bit; Justus Winter
disabled it by default (not a great sign), and GSoC 2017 mentions:
"finishing the xattr work"
https://lists.gnu.org/archive/html/bug-hurd/2017-01/msg00016.html
I cannot find any more meta data, documentation or tests...
> Also see glibc/sysdeps/mach/hurd/setxattr.c which
> translates gnu attributes into RPC calls, and then again in the
> translators's diskfs_set_translator. See for instance in
> hurd/ext2fs/inode.c's diskfs_set_translator, it looks at
>
> if (EXT2_HAS_COMPAT_FEATURE (sblock, EXT2_FEATURE_COMPAT_EXT_ATTR)
> && use_xattr_translator_records)
I noticed the --x-xattr-translator-records before but after reading some
more code, I got a little bit further
glibc/hurd/xattr.c has
gnu.translator empty if no passive translator
translator and arguments: "/hurd/foo\0arg1\0arg2\0"
ah...so there's a nice hack (way??) to also pass arguments...and then
hurd/libdiskfs/file-set-trans.c has
diskfs_S_file_set_translator (struct protid *cred,
[...]
if (passivelen && passive[passivelen - 1])
return EINVAL;
hmm; so even when there are no arguments, VALUE must end with 0?!
Okay...
--8<---------------cut here---------------start------------->8---
root@debian:~# touch 1
root@debian:~# setfattr --name=gnu.translator --value=/hurd/pflocal 1
setfattr: 1: Invalid argument
root@debian:~# setfattr --name=gnu.translator --value='/hurd/pflocal\0' 1
root@debian:~# showtrans 1
/hurd/pflocal
--8<---------------cut here---------------end--------------->8---
...so "something" works.
Sadly, this trick does not work on GNU/Linux. I'm afraid this hasn't
been upstreamed and we would have to debug linux and/or create a patch
for setxattr to accept "gnu." on "Hurd" type file systems. Thoughts?
Also, some other things also don't work
--8<---------------cut here---------------start------------->8---
root@debian:~# getfattr --name=gnu.translator 1
1: gnu.translator: Operation not supported
root@debian:~# setfattr --name=gnu.translator --value='/geert/pflocal\0' 1
setfattr: 1: Operation not supported
root@debian:~# setfattr --remove=gnu.translator 1
setfattr: 1: Operation not supported
--8<---------------cut here---------------end--------------->8---
Greetings,
janneke
--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Feeble attempt at using xattr gnu.translator
2020-05-11 8:33 ` Jan Nieuwenhuizen
@ 2020-05-11 8:42 ` Samuel Thibault
2020-05-11 8:46 ` Samuel Thibault
0 siblings, 1 reply; 7+ messages in thread
From: Samuel Thibault @ 2020-05-11 8:42 UTC (permalink / raw)
To: Jan Nieuwenhuizen; +Cc: guix-devel, bug-hurd
Jan Nieuwenhuizen, le lun. 11 mai 2020 10:33:53 +0200, a ecrit:
> gnu.translator empty if no passive translator
> translator and arguments: "/hurd/foo\0arg1\0arg2\0"
>
> ah...so there's a nice hack (way??) to also pass arguments...
? It's not hack, it's how it's passed on the process main() stack anyway.
> diskfs_S_file_set_translator (struct protid *cred,
> [...]
> if (passivelen && passive[passivelen - 1])
> return EINVAL;
>
> hmm; so even when there are no arguments, VALUE must end with 0?!
That
> root@debian:~# setfattr --name=gnu.translator --value='/hurd/pflocal\0' 1
> root@debian:~# showtrans 1
> /hurd/pflocal
> --8<---------------cut here---------------end--------------->8---
>
> ...so "something" works.
Good :)
> Sadly, this trick does not work on GNU/Linux. I'm afraid this hasn't
> been upstreamed and we would have to debug linux and/or create a patch
> for setxattr to accept "gnu." on "Hurd" type file systems. Thoughts?
Well, this has to be done, yes, I don't know what else to add :)
Samuel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Feeble attempt at using xattr gnu.translator
2020-05-11 8:42 ` Samuel Thibault
@ 2020-05-11 8:46 ` Samuel Thibault
2020-05-11 8:53 ` Jan Nieuwenhuizen
0 siblings, 1 reply; 7+ messages in thread
From: Samuel Thibault @ 2020-05-11 8:46 UTC (permalink / raw)
To: Jan Nieuwenhuizen, bug-hurd, guix-devel
Samuel Thibault, le lun. 11 mai 2020 10:42:08 +0200, a ecrit:
> > diskfs_S_file_set_translator (struct protid *cred,
> > [...]
> > if (passivelen && passive[passivelen - 1])
> > return EINVAL;
> >
> > hmm; so even when there are no arguments, VALUE must end with 0?!
>
> That
That's a bit sad, but I'm not so surprised either. I don't remember if
that was discussed at the time.
Samuel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Feeble attempt at using xattr gnu.translator
2020-05-11 8:46 ` Samuel Thibault
@ 2020-05-11 8:53 ` Jan Nieuwenhuizen
2020-05-11 8:58 ` Samuel Thibault
0 siblings, 1 reply; 7+ messages in thread
From: Jan Nieuwenhuizen @ 2020-05-11 8:53 UTC (permalink / raw)
To: bug-hurd; +Cc: guix-devel
Samuel Thibault writes:
> Samuel Thibault, le lun. 11 mai 2020 10:42:08 +0200, a ecrit:
>> > diskfs_S_file_set_translator (struct protid *cred,
>> > [...]
>> > if (passivelen && passive[passivelen - 1])
>> > return EINVAL;
>> >
>> > hmm; so even when there are no arguments, VALUE must end with 0?!
>>
>> That
>
> That's a bit sad, but I'm not so surprised either. I don't remember if
> that was discussed at the time.
At first glance it felt like a bug/non-finished thing; setttrans does
not require the user to resort to \0-hackery.
Of course, setfattr is a generic tool; so nothing can be done there to
make this frienlier; I'm not sure if something could be done on the hurd
side. Could be nice, not sure.
janneke
--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Feeble attempt at using xattr gnu.translator
2020-05-11 8:53 ` Jan Nieuwenhuizen
@ 2020-05-11 8:58 ` Samuel Thibault
0 siblings, 0 replies; 7+ messages in thread
From: Samuel Thibault @ 2020-05-11 8:58 UTC (permalink / raw)
To: Jan Nieuwenhuizen; +Cc: guix-devel, bug-hurd
Jan Nieuwenhuizen, le lun. 11 mai 2020 10:53:58 +0200, a ecrit:
> Samuel Thibault writes:
>
> > Samuel Thibault, le lun. 11 mai 2020 10:42:08 +0200, a ecrit:
> >> > diskfs_S_file_set_translator (struct protid *cred,
> >> > [...]
> >> > if (passivelen && passive[passivelen - 1])
> >> > return EINVAL;
> >> >
> >> > hmm; so even when there are no arguments, VALUE must end with 0?!
> >>
> >> That
> >
> > That's a bit sad, but I'm not so surprised either. I don't remember if
> > that was discussed at the time.
>
> At first glance it felt like a bug/non-finished thing; setttrans does
> not require the user to resort to \0-hackery.
It does not because settrans is supposed to *be* the user-visible
interface. setfattr is not supposed to be.
Samuel
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-05-11 8:58 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-10 19:48 Feeble attempt at using xattr gnu.translator Jan Nieuwenhuizen
2020-05-10 20:05 ` Samuel Thibault
2020-05-11 8:33 ` Jan Nieuwenhuizen
2020-05-11 8:42 ` Samuel Thibault
2020-05-11 8:46 ` Samuel Thibault
2020-05-11 8:53 ` Jan Nieuwenhuizen
2020-05-11 8:58 ` Samuel Thibault
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).