summary refs log tree commit diff stats
path: root/results/scraper/fex/documentation/1202
blob: 61ab04dba84fd00f8906176ed72b28e5a47923d6 (plain) (blame)
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
pressure-vessel upstream requirements
FEX needs some features in pressure-vessel in order to work correctly.
This is because pressure-vessel messes with the real filesystem which means that FEX can't transparently hide all aspects of this.

- pressure-vessel needs to check if running in a FEX environment. 
  - Check CPUID for the CPU modelname for FEX `model name      : FEX-2108-21-ge90892a2`
    - Format is `FEX-<YYMM[.<Minor rev>]>[-<Commits since last tag>-<CurrentCommit>]`
    - eg: Released Tag `FEX-2108`
    - eg: Released Tag with minor rev `FEX-2108.1`
    - eg: Commit that isn't in a release, aka building from origin/main `FEX-2108-21-ge90892a2`
    - eg: Future release `FEX-2109`
    - Minor revisions haven't occured in FEX yet
    - Always separated by dashes.
    - `FEX-<YYMM>` will always exist, the rest are optional.
- Once determined to be in a FEX environment, use the `FEXGetConfig` tool to find the currently configured rootfs
  - PR #1204 Adds this configuration program.
    - Exists since `FEX-2109` tagged revision
  - `FEXGetConfig --current-rootfs` Returning the mounted rootfs location in the case of squashfs
    - Or folder that the rootfs lives at if not squashfs
  - `FEXGetConfig --current-rootfs-lock` To return the `lock` file to keep rootfs active.
    - Necessary for new FEX instances to find the squashfs mount
    - Will be in `/tmp/`
  - `FEXGetConfig --current-rootfs-socket` To return the current UNIX domain socket for pipes watching
    - Necessary to keep the FEXMountDaemon active while it tracks FEX instances
    - Will be in `/tmp/`
    - Only exists beggining at `FEX-2109-<X>`
  - `FEXGetConfig --install-prefix` Will let you find where the FEX libraries are installed. Not everyone wants to install to /usr
  - Optional `--app <Filename>` to get app profile configuration as well
    - Usually not necessary, but future proofing will let us use this
  - `FEXGetConfig --version` - Returns the same string as CPUID
    - Aren't guaranteed to be running in a FEX environment without still checking CPUID. Be careful of that.
  - Pressure-vessel should pull in $ROOTFS/usr/lib64 and $ROOTFS/usr/lib32 instead of true host folders
    - Necessary since FEX may mount the rootfs in /tmp as squashfs or exist in ~/.fex-emu/RootFS or anywhere else
    - Real host will not have any x86-64 or x86 libraries in the host root
  - Also pull in $prefix/share/fex-emu/ and $prefix/lib/fex-emu/
    - Necessary for thunk support
    - Also need /lib/aarch64-linux-gnu/ for thunks
  - $ROOTFS/etc?
    - I'm not sure if this matters. 
  - Pull in $prefix/FEXInterpreter for executing without binfmt_misc installed
    - This can happen when testing on both an x86-64 and aarch64 host
    - Since this is a hardlink to FEXLoader, special care might need to be taken? Not sure if a symlink to a hardlink exposes the original path or not.
- Once in the chroot. Set `FEX_ROOTFS=''` since the new root is a true x86 environment.
  - This will override the rootfs that FEX is using to nothing. Necessary otherwise some things break.
  - pressure-vessel configures its rootfs in a functional way that this works.