summaryrefslogtreecommitdiff
path: root/hurd/translator/remap.mdwn
blob: a0544c7c772d3721169d4bb6e4ca6a4250a39ad6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
[[!meta copyright="Copyright © 2024 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

[[!tag stable_URL]]

The remap translator lets you remap directories. This translator is to
be used as a chroot, within which paths point to the same files as the
original root, except a given set of paths, which are remapped to given
paths.

This translator completes the [[server
overriding|community/gsoc/project_ideas/server_overriding]] google
summer of code project.

It is often desirable to execute a command in a transitory environment
with remapped files.  The `remap` script lets you do this.

# Example Uses

## remapping /bin/sh

On Debian, `/bin/sh` points to `dash`.  Maybe you would rather it
point to `bash`.

	$ ls -lha /bin/sh
	  lrwxr-xr-x 1 root root 4 Jun  5 04:08 /bin/sh -> dash
	$ remap /bin/sh /bin/bash -- ls -lha /bin/sh
      -rwxr-xr-x 1 root root 1,2M 20 oct.  12:53 /bin/sh

## remapping python3

Perhaps you've want to use a python package that requires a python
feature that your distro does not yet support.  Compiling this custom
python3 can be a little annoying, because `./configure` makes you
specify where all the various libraries are.  It's much easier to just
remap.

	$ remap /usr/bin/python3 $HOME/bin/python3-custom -- ./configure
	$ remap /usr/bin/python3 $HOME/bin/python3-custom -- cool-package

## Run a command through a custom pflocal
<!-- https://lists.debian.org/debian-hurd/2016/08/msg00016.html -->

	$ cd /tmp
	$ settrans -ac 1 ~/HURD-SRC/pflocal/pflocal
	$ remap /servers/socket/1 /tmp/1 -- /bin/bash -c 'echo huhu world | wc'
	  1       2      11

## Remapping `/servers/socket/2` and `26` for vpn/firewall

TODO add an example here.

## Use remap to debug lwip

Suppose, you want to debug [[lwip|hurd/lwip]].  You could set `lwip`
on `/servers/socket/2`, but it's hard to use an OS, if your network is
buggy.  It would be nice to use the stable `pfinet` and test `lwip` as
needed.  You can use the `eth-multiplexer` combined with `remap` to
have such a configuration.  First, use the `eth-multiplexer` to change
`pfinet`'s interface from `/dev/eth0` to `/dev/eth0m/0`

    # settrans -c /dev/eth0m /hurd/eth-multiplexer --interface=/dev/eth0

Now we configure own main Hurd system to use a virtual network
interface (e.g. `/dev/eth0m/0`) instead.  On Debian/Hurd, this can be
accomplished using

    # ifdown /dev/eth0
    # sed -i -e s_/dev/eth0_/dev/eth0m/0_ /etc/network/interfaces
    # ifup /dev/eth0m/0

Then you can do set up `lwip` on `~/lwip/servers/socket{2,26}`
<!-- $ settrans -ac my2 path/to/my-ipstack -what -ever; -->

	$ settrans -c ~/lwip/servers/socket/2 /hurd/lwip -i \
	  /dev/eth0m/1 -4 ~/lwip/servers/socket/2 \
	  -6 ~/lwip/servers/socket/26
	$ settrans -c ~/lwip/servers/socket/26 /hurd/lwip -i \
      /dev/eth0m/1 -4 ~/lwip/servers/socket/2 \
	  -6 ~/lwip/servers/socket/26
	$ remap /servers/socket/2 ~/lwip/servers/socket/2 -- \
	  ping -c 3 gnu.org

If you are running the Hurd in qemu, then you can skip setting up the
`eth-multiplexer` and just configure another virtual ethernet
interface: `eth1`.  Then using `lwip` is as simple as:

	$ settrans -c ~/lwip/servers/socket/2 -i /dev/eth1 \
	  -4 ~/lwip/servers/socket/2 -6 ~/lwip/servers/socket/26
	$ settrans -c ~/lwip/servers/socket/26 -i /dev/eth1 \
	  -4 ~/lwip/servers/socket/2 -6 ~/lwip/servers/socket/26
	$ remap /servers/socket/2 $HOME/lwip/servers/socket/2 \
	  -- ping -c 3 gnu.org

Alternatively, you could also launch a subhurd whose's networking uses
lwip.  The [[subhurd]] page should give you an idea of how to do this.

## remap example bugs

Remap is written in a rather simplistic way.  It should layer over the
filesystem in a better.  These examples demonstrate some problems.

	$ remap /etc/motd /dev/null -- sh -c 'wc /etc/motd; cd /etc; wc	motd;'
	  0       0       0 /etc/motd
	  7  40 284 motd

    $ settrans $HOME/foo /hurd/remap /bin/sh /bin/bash
    $ ls $HOME/foo/
    ls: cannot open directory 'foo/': Permission denied